26 Commits

Author SHA1 Message Date
2e80fddfb6 añadidos más formatos a tarifas encuadernacion lineas (dimensiones) 2024-11-07 14:15:14 +01:00
1e2d550301 archivos resumen 2024-11-06 22:10:09 +01:00
0a3618cd00 Merge branch 'fix/message-notification' into 'dev/presu_cliente_v2'
Fix/message notification

See merge request jjimenez/safekat!359
2024-11-06 21:09:05 +00:00
33fbfc1a5d Merge branch 'dev/presu_cliente_v2' into fix/message-notification 2024-11-06 22:06:02 +01:00
a8612f64a4 fix : notification clientes add where chat_department_id is not NULL 2024-11-06 19:56:20 +01:00
0b614d4d58 bug para presupuesto cliente (en direcciones) 2024-11-06 17:15:41 +01:00
55b225ab49 errata de 109 en encuadernaciones model 2024-11-05 17:47:30 +01:00
315d2a3acd arreglado carga de cliente 2024-11-04 23:58:18 +01:00
83c8628645 presupuesto cliente para perfil cliente 2024-10-31 08:42:41 +01:00
d0ee0b27bc precio minimo en tarifa encuadernacion a nivel de lineas 2024-10-30 18:36:35 +01:00
8556887567 vuelta a importe minimo en tiradas 2024-10-30 17:46:35 +01:00
f50987dc2b arreglado bug con tamaño personalizado en presupuesto admin 2024-10-28 18:52:06 +01:00
4180cea16a Merge branch 'fix/message-notification' into 'dev/presu_cliente_v2'
refactor : in message notification send client to presupuestocliente and admin...

See merge request jjimenez/safekat!357
2024-10-26 11:15:09 +00:00
0b3bf0ed85 refactor : in message notification send client to presupuestocliente and admin or beta to presupuesto admin 2024-10-26 08:56:18 +02:00
14fe3b1461 refactor : in message notification send client to presupuestocliente and admin or beta to presupuesto admin 2024-10-26 08:56:06 +02:00
58ab81d8e8 arreglado el poder guardar sin direcciones 2024-10-25 13:59:23 +02:00
cdb9afc290 arreglando el lomo de cubierta cuando cambias de fresado a cosido 2024-10-25 13:56:37 +02:00
adcf2fbec3 arreglado grapado 2024-10-25 13:42:09 +02:00
eb806621c6 preview
terminada
2024-10-25 12:30:38 +02:00
0963fae240 preview 2024-10-25 12:12:16 +02:00
daa10420c7 Merge branch 'fix/datatable-error-presupuesto' into 'dev/presu_cliente_v2'
default sort error presupuestos datatable,set pagination to 50 and add page selector

See merge request jjimenez/safekat!356
2024-10-25 09:29:30 +00:00
716019bf81 default sort error presupuestos datatable,set pagination to 50 and add page selector 2024-10-25 11:27:27 +02:00
2ac99d14c0 click para moverse del menu 2024-10-24 21:05:59 +02:00
0f00649f99 corregidos errores 2024-10-24 08:50:13 +02:00
3dd9f8f7e3 fix notification chat error cuando cliente no tiene facturas asociadas 2024-10-23 05:48:06 +00:00
c79bc4343f Merge branch 'feat/add-chat-presupuesto-cliente' into 'dev/presu_cliente_v2'
Feat/add chat presupuesto cliente

See merge request jjimenez/safekat!354
2024-10-23 05:19:36 +00:00
2837 changed files with 46201 additions and 140958 deletions

View File

@ -1,42 +0,0 @@
# Indica que este es el archivo de configuración raíz
root = true
# Configuración global para todos los archivos
[*]
charset = utf-8 # Codificación UTF-8
end_of_line = lf # Saltos de línea tipo Unix (LF)
trim_trailing_whitespace = true # Eliminar espacios en blanco finales
insert_final_newline = true # Asegura una nueva línea al final del archivo
# Configuración para archivos PHP
[*.php]
indent_style = space # Usar espacios en lugar de tabulaciones
indent_size = 4 # Tamaño de indentación de 4 espacios
# Configuración para archivos JavaScript
[*.js]
indent_style = space # Usar espacios en lugar de tabulaciones
indent_size = 2 # Tamaño de indentación de 2 espacios
quote_type = single # Usar comillas simples por defecto
trim_trailing_whitespace = true # Eliminar espacios en blanco finales
# Configuración para archivos de estilos CSS
[*.css]
indent_style = space # Usar espacios en lugar de tabulaciones
indent_size = 2 # Tamaño de indentación de 2 espacios
# Configuración para archivos JSON
[*.json]
indent_style = space # Usar espacios en lugar de tabulaciones
indent_size = 2 # Tamaño de indentación de 2 espacios
# Configuración para archivos de vista (HTML y Blade)
[*.{html,blade.php}]
indent_style = space # Usar espacios en lugar de tabulaciones
indent_size = 4 # Tamaño de indentación de 4 espacios
trim_trailing_whitespace = true # Eliminar espacios en blanco finales
# Configuración para archivos Markdown
[*.md]
trim_trailing_whitespace = false # No eliminar espacios en blanco finales
insert_final_newline = false # No agregar una nueva línea al final del archivo

6
.gitignore vendored
View File

@ -1,5 +1,5 @@
ci4/.env
.vscode/
launch.json
*xdebug*.log*
ci4/app/Config/RBAC/*
xdebug.log
xdebug.*

44
.idea/deployment.xml generated Executable file
View File

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="PublishConfigData" autoUpload="Always" serverName="SK-IMN" remoteFilesAllowedToDisappearOnAutoupload="false" confirmBeforeUploading="false">
<option name="confirmBeforeUploading" value="false" />
<serverData>
<paths name="ERP-DEMO">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="SK-DEV">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="SK-IMN">
<serverdata>
<mappings>
<mapping deploy="/" local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="SK-JJO">
<serverdata>
<mappings>
<mapping deploy="/" local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="SK-MAIN">
<serverdata>
<mappings>
<mapping deploy="/" local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
</serverData>
<option name="myAutoUpload" value="ALWAYS" />
</component>
</project>

6
.idea/inspectionProfiles/Project_Default.xml generated Executable file
View File

@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
</profile>
</component>

8
.idea/modules.xml generated Executable file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/safekat.iml" filepath="$PROJECT_DIR$/.idea/safekat.iml" />
</modules>
</component>
</project>

74
.idea/php.xml generated Executable file
View File

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="MessDetectorOptionsConfiguration">
<option name="transferred" value="true" />
</component>
<component name="PHPCSFixerOptionsConfiguration">
<option name="transferred" value="true" />
</component>
<component name="PHPCodeSnifferOptionsConfiguration">
<option name="highlightLevel" value="WARNING" />
<option name="transferred" value="true" />
</component>
<component name="PhpIncludePathManager">
<include_path>
<path value="$PROJECT_DIR$/ci4/vendor/psr/log" />
<path value="$PROJECT_DIR$/ci4/vendor/psr/container" />
<path value="$PROJECT_DIR$/ci4/vendor/nikic/php-parser" />
<path value="$PROJECT_DIR$/ci4/vendor/phenx/php-svg-lib" />
<path value="$PROJECT_DIR$/ci4/vendor/phenx/php-font-lib" />
<path value="$PROJECT_DIR$/ci4/vendor/dompdf/dompdf" />
<path value="$PROJECT_DIR$/ci4/vendor/laminas/laminas-escaper" />
<path value="$PROJECT_DIR$/ci4/vendor/myclabs/deep-copy" />
<path value="$PROJECT_DIR$/ci4/vendor/phar-io/version" />
<path value="$PROJECT_DIR$/ci4/vendor/phar-io/manifest" />
<path value="$PROJECT_DIR$/ci4/vendor/phpunit/phpunit" />
<path value="$PROJECT_DIR$/ci4/vendor/phpunit/php-timer" />
<path value="$PROJECT_DIR$/ci4/vendor/phpunit/php-invoker" />
<path value="$PROJECT_DIR$/ci4/vendor/phpunit/php-code-coverage" />
<path value="$PROJECT_DIR$/ci4/vendor/phpunit/php-file-iterator" />
<path value="$PROJECT_DIR$/ci4/vendor/phpunit/php-text-template" />
<path value="$PROJECT_DIR$/ci4/vendor/symfony/deprecation-contracts" />
<path value="$PROJECT_DIR$/ci4/vendor/theseer/tokenizer" />
<path value="$PROJECT_DIR$/ci4/vendor/composer" />
<path value="$PROJECT_DIR$/ci4/vendor/doctrine/instantiator" />
<path value="$PROJECT_DIR$/ci4/vendor/fakerphp/faker" />
<path value="$PROJECT_DIR$/ci4/vendor/mikey179/vfsstream" />
<path value="$PROJECT_DIR$/ci4/vendor/sebastian/diff" />
<path value="$PROJECT_DIR$/ci4/vendor/sebastian/type" />
<path value="$PROJECT_DIR$/ci4/vendor/sebastian/version" />
<path value="$PROJECT_DIR$/ci4/vendor/sebastian/exporter" />
<path value="$PROJECT_DIR$/ci4/vendor/sebastian/code-unit" />
<path value="$PROJECT_DIR$/ci4/vendor/sebastian/cli-parser" />
<path value="$PROJECT_DIR$/ci4/vendor/sebastian/comparator" />
<path value="$PROJECT_DIR$/ci4/vendor/sebastian/complexity" />
<path value="$PROJECT_DIR$/ci4/vendor/sebastian/environment" />
<path value="$PROJECT_DIR$/ci4/vendor/sebastian/global-state" />
<path value="$PROJECT_DIR$/ci4/vendor/sebastian/lines-of-code" />
<path value="$PROJECT_DIR$/ci4/vendor/sebastian/object-reflector" />
<path value="$PROJECT_DIR$/ci4/vendor/sebastian/object-enumerator" />
<path value="$PROJECT_DIR$/ci4/vendor/sebastian/recursion-context" />
<path value="$PROJECT_DIR$/ci4/vendor/sebastian/resource-operations" />
<path value="$PROJECT_DIR$/ci4/vendor/sebastian/code-unit-reverse-lookup" />
<path value="$PROJECT_DIR$/ci4/vendor/sabberworm/php-css-parser" />
<path value="$PROJECT_DIR$/ci4/vendor/masterminds/html5" />
<path value="$PROJECT_DIR$/ci4/vendor/codeigniter4/shield" />
<path value="$PROJECT_DIR$/ci4/vendor/codeigniter4/settings" />
<path value="$PROJECT_DIR$/ci4/vendor/codeigniter4/framework" />
</include_path>
</component>
<component name="PhpProjectSharedConfiguration" php_language_level="8.2">
<option name="suggestChangeDefaultLanguageLevel" value="false" />
</component>
<component name="PhpStanOptionsConfiguration">
<option name="transferred" value="true" />
</component>
<component name="PhpUnit">
<phpunit_settings>
<PhpUnitSettings custom_loader_path="$PROJECT_DIR$/ci4/vendor/autoload.php" />
</phpunit_settings>
</component>
<component name="PsalmOptionsConfiguration">
<option name="transferred" value="true" />
</component>
</project>

10
.idea/phpunit.xml generated Executable file
View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="PHPUnit">
<option name="directories">
<list>
<option value="$PROJECT_DIR$/ci4/tests" />
</list>
</option>
</component>
</project>

14
.idea/safekat.iml generated Executable file
View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/ci4/app" isTestSource="false" packagePrefix="App\" />
<sourceFolder url="file://$MODULE_DIR$/ci4/app/Config" isTestSource="false" packagePrefix="Config\" />
<sourceFolder url="file://$MODULE_DIR$/ci4/app/ThirdParty/DatatablesEditor/" isTestSource="false" packagePrefix="DataTables\" />
<sourceFolder url="file://$MODULE_DIR$/ci4/tests" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/ci4/tests/_support" isTestSource="true" packagePrefix="Tests\Support\" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

6
.idea/vcs.xml generated Executable file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

51
.idea/webServers.xml generated Executable file
View File

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="WebServers">
<option name="servers">
<webServer id="b340ea2c-6cfa-4862-a020-5d4f6e482cc1" name="SK-MAIN" url="http://sk-main.imnavajas.es">
<fileTransfer host="sk-main.imnavajas.es" port="21">
<advancedOptions>
<advancedOptions dataProtectionLevel="Private" passiveMode="true" shareSSLContext="true" />
</advancedOptions>
</fileTransfer>
</webServer>
<webServer id="c01b8916-f9bb-46f4-a585-5f4f4064aa87" name="SK-IMN" url="http://sk-imn.imnavajas.es">
<fileTransfer host="sk-imn.imnavajas.es" port="21">
<advancedOptions>
<advancedOptions dataProtectionLevel="Private" passiveMode="true" shareSSLContext="true" />
</advancedOptions>
</fileTransfer>
</webServer>
<webServer id="36de594c-5db8-413e-b1a1-cd035ebed2f1" name="SK-JJO" url="http://sk-jjo.imnavajas.es">
<fileTransfer host="sk-jjo.imnavajas.es" port="21">
<advancedOptions>
<advancedOptions dataProtectionLevel="Private" passiveMode="true" shareSSLContext="true" />
</advancedOptions>
</fileTransfer>
</webServer>
<webServer id="85f139d9-24ee-421b-b3fa-c8b68aa8f4ef" name="SK-DEV" url="http://sk-dev.imnavajas.es">
<fileTransfer host="sk-dev.imnavajas.es" port="21">
<advancedOptions>
<advancedOptions dataProtectionLevel="Private" passiveMode="true" shareSSLContext="true" />
</advancedOptions>
</fileTransfer>
</webServer>
<webServer id="94314164-bdb5-40a0-a28a-8d8dc3915eed" name="ERP-DEMO" url="http://erp.safekat.es">
<fileTransfer host="erp.safekat.es" port="21">
<advancedOptions>
<advancedOptions dataProtectionLevel="Private" passiveMode="true" shareSSLContext="true" />
</advancedOptions>
</fileTransfer>
</webServer>
</option>
<groups>
<group>
<name>DEV/UI</name>
<servers>
<name value="SK-MAIN" />
<name value="SK-IMN" />
</servers>
</group>
</groups>
</component>
</project>

188
.idea/workspace.xml generated Executable file
View File

@ -0,0 +1,188 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AutoImportSettings">
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="7c8f7059-cd40-417c-936e-48dbc0507d86" name="Changes" comment="Add static Vuexy files">
<<<<<<< HEAD
<change afterPath="$PROJECT_DIR$/ci4/app/Controllers/Compras/Compras.php" afterDir="false" />
<change afterPath="$PROJECT_DIR$/ci4/app/Controllers/Compras/Productos.php" afterDir="false" />
<change afterPath="$PROJECT_DIR$/ci4/app/Controllers/Importacion/Importar.php" afterDir="false" />
<change afterPath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/main/menu_impresion.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/.env" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/.env" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Controllers/Catalogo/Catalogo.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Controllers/Catalogo/Catalogo.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Controllers/Envioslogistica/Logistica.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Controllers/Envioslogistica/Logistica.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Controllers/Facturacion/Factura.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Controllers/Facturacion/Factura.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Controllers/Pedidos/Pedido.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Controllers/Pedidos/Pedido.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Controllers/Produccion/Ordentrabajo.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Controllers/Produccion/Ordentrabajo.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Controllers/Proveedores/Proveedor.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Controllers/Compras/Proveedor.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Filters/LoginAuthFilter.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Filters/LoginAuthFilter.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Language/en/App.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Language/en/App.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Language/es/App.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Language/es/App.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/form/settings/index.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/form/settings/index.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/main/all.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/main/all.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/main/defaultlayout.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/main/defaultlayout.php" afterDir="false" />
=======
<change beforePath="$PROJECT_DIR$/.idea/webServers.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/webServers.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Language/en/Users.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Language/en/Users.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Language/es/Users.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Language/es/Users.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/form/configuracion/paises/viewPaisForm.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/form/configuracion/paises/viewPaisForm.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/form/configuracion/paises/viewPaisList.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/form/configuracion/paises/viewPaisList.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/form/configuracion/papel/viewPapelGenericoForm.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/form/configuracion/papel/viewPapelGenericoForm.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/form/configuracion/papel/viewPapelImpresionForm.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/form/configuracion/papel/viewPapelImpresionForm.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/form/user/_userFormItems.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/form/user/_userFormItems.php" afterDir="false" />
>>>>>>> 38e9feb4c8537689e5d266a1dbe3371003d2457f
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="ComposerSettings" doNotAsk="true" synchronizationState="SYNCHRONIZE">
<pharConfigPath>$PROJECT_DIR$/ci4/composer.json</pharConfigPath>
<execution />
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="MarkdownSettingsMigration">
<option name="stateVersion" value="1" />
</component>
<component name="ProjectId" id="2OsCE3jXyiqpYISC6WI6TMJusA2" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent"><![CDATA[{
"keyToString": {
"RunOnceActivity.OpenProjectViewOnStart": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"WebServerToolWindowFactoryState": "false",
"last_opened_file_path": "C:/temp-sk/safekat/ci4/app/Views/themes/backend/vuexy/main",
"node.js.detected.package.eslint": "true",
"node.js.detected.package.tslint": "true",
"node.js.selected.package.eslint": "(autodetect)",
"node.js.selected.package.tslint": "(autodetect)",
"nodejs_package_manager_path": "npm",
"settings.editor.selected.configurable": "preferences.pluginManager",
"vue.rearranger.settings.migration": "true"
}
}]]></component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="C:\temp-sk\safekat\ci4\app\Views\themes\backend\vuexy\main" />
<recent name="C:\temp-sk\safekat\ci4\app\Views\themes\backend\vuexy\form\settings" />
<recent name="C:\temp-sk\safekat\ci4\app\Views\themes\backend\vuexy\form\profile" />
<recent name="D:\Safekat\safekat\ci4\app\Views\themes\_commonPartialsBs" />
<recent name="C:\temp-sk\safekat\httpdocs\themes\vuexy\vendor\libs\toastr" />
</key>
<key name="MoveFile.RECENT_KEYS">
<recent name="C:\temp-sk\safekat\ci4\app\Controllers\Usuarios" />
<recent name="C:\temp-sk\safekat\ci4" />
<recent name="C:\temp-sk\safekat\httpdocs\themes\vuexy" />
</key>
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="7c8f7059-cd40-417c-936e-48dbc0507d86" name="Changes" comment="" />
<created>1682339793915</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1682339793915</updated>
<workItem from="1682339796150" duration="1274000" />
<workItem from="1682412462416" duration="9540000" />
<workItem from="1682492106609" duration="7922000" />
<workItem from="1683530628259" duration="12043000" />
<workItem from="1683618855414" duration="183000" />
<workItem from="1683619057531" duration="16014000" />
<workItem from="1683715799575" duration="151000" />
<workItem from="1683716769681" duration="8512000" />
<workItem from="1683796910193" duration="12918000" />
<workItem from="1684147458134" duration="7379000" />
<workItem from="1684221025785" duration="2261000" />
<workItem from="1684226343116" duration="4598000" />
<workItem from="1684236911941" duration="2213000" />
<workItem from="1684239429024" duration="2049000" />
<workItem from="1684313352573" duration="9284000" />
<workItem from="1684350581362" duration="2244000" />
<workItem from="1684415370137" duration="889000" />
<workItem from="1684761592479" duration="626000" />
<workItem from="1684829967827" duration="8241000" />
<workItem from="1684869825991" duration="3082000" />
<workItem from="1684910640450" duration="14817000" />
<workItem from="1685018778974" duration="1905000" />
<workItem from="1685038598644" duration="6958000" />
<workItem from="1685102978387" duration="3272000" />
<workItem from="1685266094611" duration="3469000" />
<<<<<<< HEAD
<workItem from="1685365444846" duration="191000" />
<workItem from="1685689980219" duration="12098000" />
=======
<workItem from="1685564762632" duration="2787000" />
>>>>>>> 38e9feb4c8537689e5d266a1dbe3371003d2457f
</task>
<task id="LOCAL-00001" summary="Starting Vuexy Theme creation">
<created>1682339938559</created>
<option name="number" value="00001" />
<option name="presentableId" value="LOCAL-00001" />
<option name="project" value="LOCAL" />
<updated>1682339938559</updated>
</task>
<task id="LOCAL-00002" summary="Add static Vuexy files">
<created>1682420504675</created>
<option name="number" value="00002" />
<option name="presentableId" value="LOCAL-00002" />
<option name="project" value="LOCAL" />
<updated>1682420504675</updated>
</task>
<option name="localTasksCounter" value="3" />
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="3" />
</component>
<component name="Vcs.Log.Tabs.Properties">
<option name="TAB_STATES">
<map>
<entry key="MAIN">
<value>
<State>
<option name="FILTERS">
<map>
<entry key="branch">
<value>
<list>
<option value="origin/dev/vuexy" />
</list>
</value>
</entry>
</map>
</option>
</State>
</value>
</entry>
</map>
</option>
</component>
<component name="VcsManagerConfiguration">
<option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="false" />
<MESSAGE value="Starting Vuexy Theme creation" />
<MESSAGE value="Add static Vuexy files" />
<option name="LAST_COMMIT_MESSAGE" value="Add static Vuexy files" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager>
<breakpoints>
<line-breakpoint enabled="true" type="php">
<url>file://$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/main/all.php</url>
<line>371</line>
<option name="timeStamp" value="1" />
</line-breakpoint>
</breakpoints>
</breakpoint-manager>
</component>
</project>

View File

@ -1,4 +1,5 @@
{
"clockify.tracking.workspaceId": "6464949facab6237e1538c14",
"sqltools.connections": [
{
"mysqlOptions": {

22
.vscode/sftp.json vendored
View File

@ -5,34 +5,18 @@
"remotePath": "/",
"uploadOnSave": true,
"useTempFile": false,
"openSsh": false,
"openSsh": false,
"profiles": {
"jjo": {
"jjo": {
"host": "sk-jjo.imnavajas.es",
"username": "sk-jjo",
"password": "Snwi1660%"
},
"imn": {
"host": "sk-imn.imnavajas.es",
"username": "sk-imn",
"password": "GVBbgdwlvn7_p02?"
},
"dev":{
"host": "sk-dev.imnavajas.es",
"username": "sk-dev",
"password": "KXvYsubai9v*g61~"
},
"sk-prod":{
"host": "erp.safekat.es",
"username": "erp-demo",
"password": "lNkEyukTc1~*3yy9"
},
"sk-dev":{
"host": "erp-dev.safekat.es",
"username": "erp-dev",
"password": "snqyxNZIhg8m3!9~"
}
}

View File

@ -1,92 +0,0 @@
# safekat
## Getting started
To make it easy for you to get started with GitLab, here's a list of recommended next steps.
Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!
## Add your files
- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command:
```
cd existing_repo
git remote add origin https://git.imnavajas.es/jjimenez/safekat.git
git branch -M main
git push -uf origin main
```
## Integrate with your tools
- [ ] [Set up project integrations](https://git.imnavajas.es/jjimenez/safekat/-/settings/integrations)
## Collaborate with your team
- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/)
- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)
- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)
- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)
- [ ] [Automatically merge when pipeline succeeds](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html)
## Test and Deploy
Use the built-in continuous integration in GitLab.
- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html)
- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing(SAST)](https://docs.gitlab.com/ee/user/application_security/sast/)
- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html)
- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/)
- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)
***
# Editing this README
When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thank you to [makeareadme.com](https://www.makeareadme.com/) for this template.
## Suggestions for a good README
Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
## Name
Choose a self-explaining name for your project.
## Description
Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
## Badges
On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
## Visuals
Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
## Installation
Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
## Usage
Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
## Support
Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
## Roadmap
If you have ideas for releases in the future, it is a good idea to list them in the README.
## Contributing
State if you are open to contributions and what your requirements are for accepting them.
For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
## Authors and acknowledgment
Show your appreciation to those who have contributed to the project.
## License
For open source projects, say how it is licensed.
## Project status
If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.

2014
backups_bbdd/04252023_sk_main.sql Executable file

File diff suppressed because it is too large Load Diff

3405
backups_bbdd/29052023_sk-jjo.sql Executable file

File diff suppressed because it is too large Load Diff

View File

@ -1,55 +0,0 @@
<?php
namespace App\Commands;
use CodeIgniter\CLI\BaseCommand;
use CodeIgniter\CLI\CLI;
use Config\Database;
use App\Models\Catalogo\IdentificadorIsknModel;
class CatalogoLibroAsignarIskn extends BaseCommand
{
protected $group = 'Safekat';
protected $name = 'catalogo:libro-asignar-iskn';
protected $description = 'Asigna ISKN directamente en la base de datos a los libros que no lo tienen.';
public function run(array $params)
{
$db = Database::connect();
$modelISKN = new IdentificadorIsknModel();
// Obtener todos los libros sin ISKN
$libros = $db->table('catalogo_libros')
->select('id')
->where('iskn IS NULL')
->where('deleted_at IS NULL')
->get()
->getResultArray();
if (empty($libros)) {
CLI::write('No hay libros sin ISKN por asignar.', 'green');
return;
}
CLI::write('Asignando ISKN a ' . count($libros) . ' libros...', 'yellow');
$i = 1;
foreach ($libros as $libro) {
$iskn = $modelISKN->newIskn();
if ($iskn !== null) {
$db->table('catalogo_libros')
->where('id', $libro['id'])
->update(['iskn' => $iskn]);
CLI::write("[{$i}] ISKN '{$iskn}' asignado a libro ID {$libro['id']}", 'cyan');
} else {
CLI::error("[{$i}] No se pudo generar ISKN para libro ID {$libro['id']}");
}
$i++;
}
CLI::write('Proceso finalizado.', 'green');
}
}

View File

@ -1,204 +0,0 @@
<?php
namespace App\Commands;
use CodeIgniter\CLI\BaseCommand;
use CodeIgniter\CLI\CLI;
class CatalogoLibroImportar extends BaseCommand
{
protected $group = 'Safekat';
protected $name = 'catalogo:libro-importar';
protected $description = 'Importa los registros de catalogo_libro a catalogo_libros para un customer_id dado';
public function run(array $params)
{
$db = \Config\Database::connect();
$totalImportados = 0;
// Al inicio del método run()
$papeles = $db->table('lg_papel_generico')
->select('id, code')
->where('is_deleted', 0)
->get()
->getResultArray();
// Mapa code => id
$papelMap = [];
foreach ($papeles as $p) {
if (!empty($p['code'])) {
$papelMap[trim($p['code'])] = $p['id'];
}
}
// Mapa de acabados => id
$acabadosMap = [
'plastificado_brillo' => 1,
'plastificado_mate' => 5,
];
// Mapa de encuadernaciones => id
$encuadernacionMap = [
'RCHV' => 4, // cosido tapa blanda
'RCHVS' => 20, // cosido tapa blanda solapas
'RDF' => 1, // fresado tapa dura
'RF' => 2, // fresado tapa blanda
'RFS' => 2, // fresado tapa blanda solapas
'TDC' => 3, // cosido tapa dura
];
if (empty($params[0]) || !is_numeric($params[0])) {
CLI::error('Debes proporcionar un customer_id válido como parámetro.');
return;
}
$customerId = (int) $params[0];
CLI::write("Iniciando importación para customer_id = $customerId ...", 'yellow');
$libros = $db->table('catalogo_libro_antiguo_erp')
->where('customer_id', $customerId)
->where('deleted_at', null)
->get()
->getResultArray();
if (empty($libros)) {
CLI::write('No se encontraron registros para importar.', 'red');
return;
}
foreach ($libros as $libro) {
$nuevoLibro = [
'id' => $libro['id'],
'cliente_id' => $libro['customer_id'],
'proveedor_id' => null,
'user_created_id' => 1,
'user_update_id' => 1,
'cubierta_archivo' => $libro['cover_file'],
'cubierta_url' => $libro['cover_url'],
'ancho' => $libro['ancho'],
'alto' => $libro['alto'],
'peso' => $libro['peso'],
'titulo' => $libro['titulo'],
'autor' => $libro['autor'] ?? null,
'autor_entidad' => $libro['autor_entidad'],
'traductor' => $libro['traductor'],
'ilustrador' => $libro['ilustrador'],
'idioma' => $libro['idioma'],
'num_edic' => $libro['num_edic'],
'fecha_disponibilidad' => $libro['fecha_disponibilidad'],
'fecha_public' => $libro['fecha_public'],
'num_fotos' => $libro['num_fotos'],
'num_ilustr' => $libro['num_ilustr'],
'num_ilustr_color' => $libro['num_ilustr_color'],
'num_ilustr_bn' => $libro['num_ilustr_bn'],
'coleccion' => $libro['coleccion'] ?? null,
'isbn' => $libro['isbn'],
'ean' => $this->generarEAN($libro['isbn']),
'editorial' => $libro['editorial'],
'resumen' => $libro['resumen'],
'resumen_breve' => $libro['resumen_breve'],
'sello' => $libro['sello'],
'paginas' => $libro['paginas'],
'tipo_impresion' => $this->mapTipoImpresion($libro['tipo_impresion']),
'comentarios' => $libro['comentarios'],
'negro_paginas' => $libro['negro_paginas'],
'negro_papel_id' => $this->getPapelId($libro['negro_papel'], $papelMap),
'negro_gramaje' => $libro['negro_gramaje'],
'negro_pod_papel_id' => $this->getPapelId($libro['negro_papel'], $papelMap),
'negro_pod_gramaje' => $libro['negro_gramaje'],
'color_paginas' => $libro['color_paginas'],
'color_papel_id' => $this->getPapelId($libro['color_papel'], $papelMap),
'color_gramaje' => $libro['color_gramaje'],
'color_pod_papel_id' => $this->getPapelId($libro['color_papel'], $papelMap),
'color_pod_gramaje' => $libro['color_gramaje'],
'cubierta_paginas' => $libro['portada_paginas'],
'cubierta_papel_id' => $this->getPapelId($libro['portada_papel'], $papelMap),
'cubierta_gramaje' => $libro['portada_gramaje'],
'cubierta_pod_papel_id' => $this->getPapelId($libro['portada_papel'], $papelMap),
'cubierta_pod_gramaje' => $libro['portada_gramaje'],
'cubierta_acabado_id' => $this->getAcabadoId($libro['portada_acabado'], $acabadosMap),
'cubierta_ancho_solapas' => $libro['solapas_ancho'],
'sobrecubierta_paginas' => $libro['cubierta_paginas'],
'sobrecubierta_papel_id' => $this->getPapelId($libro['cubierta_papel'], $papelMap),
'sobrecubierta_gramaje' => $libro['cubierta_gramaje'],
'sobrecubierta_pod_papel_id' => $this->getPapelId($libro['cubierta_papel'], $papelMap),
'sobrecubierta_pod_gramaje' => $libro['cubierta_gramaje'],
'sobrecubierta_acabado_id' => $this->getAcabadoId($libro['cubierta_acabado'], $acabadosMap),
'sobrecubierta_ancho_solapas' => 0,
'encuadernacion_id' => $this->getEncuadernacionId($libro['encuardenacion'], $encuadernacionMap),
'ubicacion' => $libro['ubicacion'],
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
'deleted_at' => $libro['deleted_at'],
'iskn' => null,
];
$exists = $db->table('catalogo_libros')
->where('id', $libro['id'])
->countAllResults();
if ($exists == 0) {
$db->table('catalogo_libros')->insert($nuevoLibro);
$totalImportados++;
}else{
CLI::write("El libro con ISBN " . $libro['isbn'] . " ya existe para el cliente con id " . $customerId . ".", 'yellow');
}
}
CLI::write("Importación finalizada. Se insertaron " . $totalImportados . " registros.", 'green');
}
private function mapTipoImpresion($tipo)
{
switch ($tipo) {
case 'bn':
return 'negro';
case 'color':
return 'color';
case 'colorfoto':
return 'colorhq';
case 'bicolor':
return 'color';
default:
return null;
}
}
private function getPapelId(?string $code, array $map): ?int
{
if ($code === null)
return null;
$code = trim($code);
return $map[$code] ?? null;
}
private function getAcabadoId(?string $nombre, array $map): ?int
{
if ($nombre === null)
return null;
$nombre = trim($nombre);
return $map[$nombre] ?? null;
}
private function getEncuadernacionId(?string $codigo, array $map): ?int
{
if ($codigo === null)
return null;
$codigo = trim($codigo);
return $map[$codigo] ?? null;
}
private function generarEAN(?string $isbn): ?string
{
if ($isbn === null)
return null;
return str_replace('-', '', $isbn);
}
}

View File

@ -1,274 +0,0 @@
<?php
namespace App\Commands;
use CodeIgniter\CLI\BaseCommand;
use CodeIgniter\CLI\CLI;
class ClienteImportar extends BaseCommand
{
protected $group = 'Safekat';
protected $name = 'cliente:importar';
protected $description = 'Importa registros desde customers a clientes solo si no existen por ID';
public function run(array $params)
{
$db = \Config\Database::connect();
$accion = $params[0] ?? 'todo';
// Mapeo de provincias
$provincias = $db->table('lg_provincias')
->select('id, nombre')
->get()
->getResultArray();
$provinciaMap = [];
foreach ($provincias as $provincia) {
$clave = trim(mb_strtolower($provincia['nombre']));
$provinciaMap[$clave] = $provincia['id'];
}
if (in_array($accion, ['clientes', 'todo'])) {
// ⬅️ aquí va tu bloque actual de importación de clientes
$insertados = 0;
$omitidos = 0;
CLI::write("Iniciando importación de clientes por ID...", 'yellow');
$clientes = $db->table('customers')
->where('deleted_at', null)
->get()
->getResultArray();
if (empty($clientes)) {
CLI::write('No se encontraron registros en "customers".', 'red');
return;
}
foreach ($clientes as $cliente) {
$id = (int) $cliente['id'];
// Verifica si ya existe en la tabla destino
$yaExiste = $db->table('clientes')->where('id', $id)->countAllResults();
if ($yaExiste) {
$omitidos++;
CLI::write("Cliente ID $id ya existe. Omitido.", 'blue');
continue;
}
$datos = [
'id' => $id,
'nombre' => $cliente['name'],
'alias' => $cliente['alias'],
'cif' => $cliente['cif'],
'direccion' => $cliente['direccion'],
'ciudad' => $cliente['ciudad'],
'comunidad_autonoma_id' => $cliente['comunidad_autonoma_id'],
'provincia_id' => $this->getProvinciaId($cliente['provincia'], $provinciaMap),
'cp' => $cliente['cp'],
'pais_id' => $cliente['pais_id'],
'telefono' => $cliente['telefono'],
'email' => $cliente['email'],
'comercial_id' => 122,
'soporte_id' => 122,
'forma_pago_id' => ($cliente['forma_pago_id'] > 6) ? 1 : $cliente['forma_pago_id'], // Si no se reconoce fijar a transferencias
'vencimiento' => $cliente['vencimiento'],
'fecha_vencimiento' => $cliente['fechaVencimiento'],
'margen' => $cliente['margen'],
'descuento' => $cliente['descuento'],
'limite_credito' => $cliente['limite_credito'],
'limite_credito_user_id' => $cliente['limite_credito_user_id'],
'limite_credito_change_at' => $cliente['limite_credito_change_at'],
'credito_asegurado' => $cliente['creditoAsegurado'],
'ccc' => $cliente['ccc'],
'ccc_cliente' => $cliente['ccc_customer'],
'num_cuenta' => $cliente['num_cuenta'],
'message_tracking' => $cliente['message_tracking'],
'message_production_start' => $cliente['message_production_start'],
'tirada_flexible' => $cliente['tirada_flexible'],
'descuento_tirada_flexible' => $cliente['descuento_tirada_flexible'],
'comentarios_tirada_flexible' => $cliente['comentarios_tirada_flexible'],
'margen_plantilla_id' => $cliente['margen_plantilla_id'],
'comentarios' => $cliente['comentarios'],
'deleted_at' => null,
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
'user_created_id' => 10,
'user_update_id' => 10,
'no_envio_base' => 0,
'forzar_rotativa_pod' => 0,
];
try {
$db->table('clientes')->insert($datos);
$insertados++;
CLI::write("Cliente ID $id insertado correctamente.", 'green');
} catch (\Throwable $e) {
CLI::error("❌ Error al insertar cliente ID $id: " . $e->getMessage());
CLI::error("📦 Datos del cliente: " . json_encode($datos, JSON_PRETTY_PRINT));
$omitidos++;
continue;
}
}
CLI::write("Importación completada.", 'green');
CLI::write("Clientes insertados: $insertados", 'green');
CLI::write("Clientes ya existentes: $omitidos", 'blue');
}
if (in_array($accion, ['direcciones', 'todo'])) {
// ⬅️ aquí va tu bloque actual de importación de direcciones
CLI::write("Iniciando importación de direcciones...", 'yellow');
$direcciones = $db->table('customers_address')
->where('deleted_at', null)
->get()
->getResultArray();
$direccionesInsertadas = 0;
$direccionesOmitidas = 0;
foreach ($direcciones as $dir) {
$clienteId = (int) $dir['customer_id'];
$clienteExiste = $db->table('clientes')
->where('id', $clienteId)
->countAllResults();
if (!$clienteExiste) {
CLI::write("⚠️ Dirección ID {$dir['id']} omitida: cliente_id $clienteId no existe.", 'blue');
$direccionesOmitidas++;
continue;
}
$direccionExiste = $db->table('cliente_direcciones')
->where([
'cliente_id' => $clienteId,
'direccion' => $dir['direccion'] ?? '',
'cp' => $dir['cp'] ?? '0',
'municipio' => $dir['ciudad'] ?? '',
'provincia' => $dir['provincia'],
])
->countAllResults();
if ($direccionExiste) {
CLI::write("⚠️ Dirección ID {$dir['id']} ya existe para cliente $clienteId. Omitida.", 'blue');
$direccionesOmitidas++;
continue;
}
$nuevaDir = [
'cliente_id' => $clienteId,
'alias' => $dir['nombre'] ?? '',
'att' => $dir['persona_contacto'] ?? '',
'email' => $dir['email'],
'direccion' => $dir['direccion'] ?? '',
'pais_id' => is_numeric($dir['pais_id']) ? (int) $dir['pais_id'] : null,
'provincia' => $dir['provincia'],
'municipio' => $dir['ciudad'] ?? '',
'cp' => $dir['cp'] ?? '0',
'telefono' => $dir['telefono'],
];
try {
$db->table('cliente_direcciones')->insert($nuevaDir);
$direccionesInsertadas++;
CLI::write("✅ Dirección ID {$dir['id']} insertada para cliente $clienteId", 'green');
} catch (\Throwable $e) {
CLI::error("❌ Error al insertar dirección ID {$dir['id']} (cliente_id $clienteId): " . $e->getMessage());
$direccionesOmitidas++;
}
}
CLI::write("Importación de direcciones finalizada.", 'green');
CLI::write("Direcciones insertadas: $direccionesInsertadas", 'green');
CLI::write("Direcciones omitidas: $direccionesOmitidas", 'blue');
}
if (in_array($accion, ['contactos', 'todo'])) {
CLI::write("Iniciando importación de contactos...", 'yellow');
$contactos = $db->table('customers_contact')
->where('deleted_at', null)
->get()
->getResultArray();
$contactosInsertados = 0;
$contactosOmitidos = 0;
foreach ($contactos as $contacto) {
$clienteId = (int) $contacto['customer_id'];
// Verificar si cliente existe
$clienteExiste = $db->table('clientes')
->where('id', $clienteId)
->countAllResults();
if (!$clienteExiste) {
CLI::write("⚠️ Contacto ID {$contacto['id']} omitido: cliente_id $clienteId no existe.", 'blue');
$contactosOmitidos++;
continue;
}
// Validación para evitar duplicados básicos
$yaExiste = $db->table('cliente_contactos')
->where([
'cliente_id' => $clienteId,
'email' => $contacto['email'],
'nombre' => $contacto['nombre']
])
->countAllResults();
if ($yaExiste) {
CLI::write("⚠️ Contacto ID {$contacto['id']} ya existe para cliente $clienteId. Omitido.", 'blue');
$contactosOmitidos++;
continue;
}
$nuevoContacto = [
'cliente_id' => $clienteId,
'cargo' => $contacto['cargo'],
'nombre' => $contacto['nombre'],
'apellidos' => $contacto['apellidos'],
'telefono' => $contacto['telefono'],
'email' => $contacto['email'],
'deleted_at' => null,
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
];
try {
$db->table('cliente_contactos')->insert($nuevoContacto);
$contactosInsertados++;
CLI::write("✅ Contacto ID {$contacto['id']} insertado para cliente $clienteId", 'green');
} catch (\Throwable $e) {
CLI::error("❌ Error al insertar contacto ID {$contacto['id']}: " . $e->getMessage());
$contactosOmitidos++;
}
}
CLI::write("Importación de contactos finalizada.", 'green');
CLI::write("Contactos insertados: $contactosInsertados", 'green');
CLI::write("Contactos omitidos: $contactosOmitidos", 'blue');
}
}
private function getProvinciaId(?string $nombre, array $map): ?int
{
if ($nombre === null) {
return null;
}
$clave = trim(mb_strtolower($nombre));
return $map[$clave] ?? null;
}
}

View File

@ -1,93 +0,0 @@
<?php
namespace App\Commands;
use CodeIgniter\CLI\BaseCommand;
use CodeIgniter\CLI\CLI;
use ZipArchive;
class RestoreBackup extends BaseCommand
{
protected $group = 'Safekat';
protected $name = 'restore:backup';
protected $description = 'Restaura un backup desde un archivo .zip en writable/backups/.';
protected $usage = 'restore:backup [--dry-run]';
protected $options = [
'--dry-run' => 'Simula el proceso de restauración sin ejecutarlo realmente.',
];
public function run(array $params)
{
$isDryRun = CLI::getOption('dry-run');
$backupDir = WRITEPATH . 'backups/';
$backups = glob($backupDir . '*.zip');
if (empty($backups)) {
CLI::error("No se encontraron backups .zip en: $backupDir");
return;
}
CLI::write("Backups disponibles:", 'blue');
foreach ($backups as $i => $file) {
CLI::write("[" . ($i + 1) . "] " . basename($file));
}
$index = CLI::prompt("Selecciona el número del backup a restaurar", null, 'required');
if (!is_numeric($index) || $index < 1 || $index > count($backups)) {
CLI::error("Selección no válida.");
return;
}
$selectedFile = $backups[$index - 1];
CLI::write("🎯 Seleccionado: " . basename($selectedFile), 'cyan');
if ($isDryRun) {
CLI::write("🔍 Modo simulación activado (--dry-run)", 'yellow');
}
$zip = new ZipArchive();
if ($zip->open($selectedFile) !== TRUE) {
CLI::error("No se pudo abrir el archivo ZIP.");
return;
}
$extractPath = WRITEPATH . 'backups/tmp_restore/';
if (!is_dir($extractPath)) {
mkdir($extractPath, 0775, true);
}
$zip->extractTo($extractPath);
$zip->close();
$sqlFiles = glob($extractPath . '*.sql');
if (count($sqlFiles) === 0) {
CLI::error("No se encontró ningún .sql dentro del backup.");
return;
}
$sqlFile = escapeshellarg($sqlFiles[0]);
$db = config('Database')->default;
$cmd = "mysql -h {$db['hostname']} -u {$db['username']} -p'{$db['password']}' {$db['database']} < {$sqlFile}";
if ($isDryRun) {
CLI::write("📋 Comando que se ejecutaría:", 'yellow');
CLI::write($cmd, 'light_gray');
CLI::write("✅ Simulación completa. No se hizo ninguna modificación.", 'green');
} else {
CLI::write("⏳ Restaurando...", 'yellow');
system($cmd, $retval);
if ($retval !== 0) {
CLI::error("❌ Error al restaurar la base de datos (código $retval).");
} else {
CLI::write("✅ Backup restaurado correctamente.", 'green');
}
}
array_map('unlink', glob($extractPath . '*'));
rmdir($extractPath);
}
}

15
ci4/app/Config/Auth.php Executable file → Normal file
View File

@ -13,7 +13,8 @@ declare(strict_types=1);
namespace Config;
use App\Models\Usuarios\UserModel;
use App\Entities\Usuarios\UsersEntity;
use App\Models\UserModel;
use CodeIgniter\Shield\Authentication\Authenticators\JWT;
use CodeIgniter\Shield\Authentication\Passwords\ValidationRules;
use CodeIgniter\Shield\Config\Auth as ShieldAuth;
@ -154,7 +155,7 @@ class Auth extends ShieldAuth
* --------------------------------------------------------------------
* Determines whether users can register for the site.
*/
public bool $allowRegistration = false;
public bool $allowRegistration = true;
/**
* --------------------------------------------------------------------
@ -439,14 +440,8 @@ class Auth extends ShieldAuth
public function loginRedirect(): string
{
$session = session();
$url = setting('Auth.redirects')['login'];
if(isset($_SERVER['HTTP_X_REQUESTED_WITH'])){
if($_SERVER['HTTP_X_REQUESTED_WITH'] == "xmlhttprequest"){
$url = setting('Auth.redirects')['login'];
}
}else{
$url = $session->getTempdata('beforeLoginUrl') ?? setting('Auth.redirects')['login'];
}
$url = $session->getTempdata('beforeLoginUrl') ?? setting('Auth.redirects')['login'];
return $this->getUrl($url);
}

0
ci4/app/Config/AuthGroups.php Executable file → Normal file
View File

0
ci4/app/Config/AuthJWT.php Executable file → Normal file
View File

0
ci4/app/Config/AuthToken.php Executable file → Normal file
View File

0
ci4/app/Config/CURLRequest.php Executable file → Normal file
View File

View File

@ -71,32 +71,6 @@ class Database extends Config
'busyTimeout' => 1000,
];
public array $old_erp = [
'DSN' => '',
'hostname' => 'localhost',
'username' => '',
'password' => '',
'database' => '',
'DBDriver' => 'MySQLi',
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => true,
'charset' => 'utf8mb4',
'DBCollat' => 'utf8mb4_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306,
'numberNative' => false,
'dateFormat' => [
'date' => 'Y-m-d',
'datetime' => 'Y-m-d H:i:s',
'time' => 'H:i:s',
],
];
public function __construct()
{
parent::__construct();

View File

@ -6,14 +6,14 @@ use CodeIgniter\Config\BaseConfig;
class Email extends BaseConfig
{
public string $fromEmail = 'no-reply@safekat.es';
public string $fromName = 'ERP Safekat 2.0';
public string $fromEmail = 'safekat@imnavajas.es';
public string $fromName = 'Safekat ERP';
public string $recipients = '';
/**
* The "user agent"
*/
public string $userAgent = 'ERP Safekat 2.0';
public string $userAgent = 'Safekat SL';
/**
* The mail sending protocol: mail, sendmail, smtp
@ -28,27 +28,27 @@ class Email extends BaseConfig
/**
* SMTP Server Hostname
*/
public string $SMTPHost = 'smtp.ionos.es';
public string $SMTPHost = 'imnavajas.es';
/**
* SMTP Username
*/
public string $SMTPUser = 'no-reply@safekat.es';
public string $SMTPUser = 'safekat@imnavajas.es';
/**
* SMTP Password
*/
public string $SMTPPass = '5LKHH^CR#ecR#l55x7ke';
public string $SMTPPass = 'Etkd9~448';
/**
* SMTP Port
*/
public int $SMTPPort = 587;
public int $SMTPPort = 25;
/**
* SMTP Timeout (in seconds)
*/
public int $SMTPTimeout = 15;
public int $SMTPTimeout = 5;
/**
* Enable persistent SMTP connections

0
ci4/app/Config/Feature.php Executable file → Normal file
View File

View File

@ -26,7 +26,6 @@ class Filters extends BaseConfig
'honeypot' => Honeypot::class,
'invalidchars' => InvalidChars::class,
'secureheaders' => SecureHeaders::class,
'cors' => \App\Filters\Cors::class
];
/**
@ -81,6 +80,5 @@ class Filters extends BaseConfig
/*'jwt' => [
'before' => ['api', 'api/*']
],*/
];
}

2
ci4/app/Config/Kint.php Executable file → Normal file
View File

@ -42,7 +42,7 @@ class Kint extends BaseConfig
*/
public string $richTheme = 'aante-light.css';
public bool $richFolder = false;
public int $richSort = 0; //AbstractRenderer::SORT_FULL;
public int $richSort = AbstractRenderer::SORT_FULL;
/**
* @var array<string, class-string<ValuePluginInterface>>|null

View File

@ -1,31 +0,0 @@
<?php
namespace Config;
use CodeIgniter\Config\BaseConfig;
class LogoImpresion extends BaseConfig
{
public array $TIPO_IMPRESION_MAPPING = [
"lp_bn" => "icon_bn",
"lp_bnhq" => "icon_bnhq",
"lp_color" => "icon_color",
"lp_colorhq" => "icon_colorhq",
"lp_cubierta" => "icon_cubierta",
"lp_sobrecubierta" => "icon_sobrecubierta",
"lp_rot_bn" => "icon_rotativa_bn",
"lp_rot_color" => "icon_rotativa_color",
"lp_guardas" => "icon_cuardas"
];
public function __construct()
{
parent::__construct();
}
public function get_logo_path(string $tipo): string
{
return "themes/vuexy/img/safekat/presupuestos/" . $this->TIPO_IMPRESION_MAPPING[$tipo] . ".png";
}
}

View File

@ -1,138 +0,0 @@
<?php
namespace Config;
use CodeIgniter\Config\BaseConfig;
class OrdenTrabajo extends BaseConfig
{
public array $DATE_USER_MAPPING = [
//IMPRESION
"interior_bn_at" => "interior_bn_user_id",
"interior_color_at" => "interior_color_user_id",
"cubierta_at" => "cubierta_user_id",
"sobrecubierta_at" => "sobrecubierta_user_id",
"guarda_at" => "guarda_user_id",
//ACABADO
"plastificado_at" => "plastificado_user_id",
"plakene_at" => "plakene_user_id",
"retractilado_at" => "retractilado_user_id",
"estampado_at" => "estampado_user_id",
"uvi_at" => "uvi_user_id",
"encuadernacion_at" => "encuadernacion_user_id",
"corte_at" => "corte_user_id",
"preparacion_interiores_at" => "preparacion_interior_user_id",
"entrada_manipulado_at" => "entrada_manipulado_user_id",
"cosido_at" => "cosido_user_id",
"grapado_at" => "grapado_user_id",
"solapa_at" => "solapa_user_id",
"retractilado5_at" => "retractilado5_user_id",
"prototipo_at" => "prototipo_user_id",
"marcapaginas_at" => "marcapaginas_user_id",
"espiral_at" => "espiral_user_id",
//FERRO
"pendiente_ferro_at" => "pendiente_ferro_user_id",
"ferro_en_cliente_at" => "ferro_en_cliente_user_id",
"ferro_ok_at" => "ferro_ok_user_id",
//ENVIO
"embalaje_at" => "embalaje_user_id",
"envio_at" => "envio_user_id",
//PREIMPRESION
"pre_formato_at" => "pre_formato_user_id",
"pre_lomo_at" => "pre_lomo_user_id",
"pre_solapa_at" => "pre_solapa_user_id",
"pre_codbarras_at" => "pre_codbarras_user_id",
"pre_imposicion_at" => "pre_imposicion_user_id",
];
public array $DATE_USER_MAPPING_PEDIDO = [
"inaplazable" => "inaplazable_change_user_id",
"fecha_entrega_real" => "fecha_entrega_real_change_user_id",
"fecha_impresion" => "fecha_impresion_change_user_id",
"fecha_encuadernado" => "fecha_encuadernado_change_user_id",
"fecha_entrega_externo" => "fecha_entrega_externo_change_user_id",
];
public array $OT_COLORS = [
"sin_imprimir" => "#FF6363",
"impreso_int" => "#AFDDFF",
"impreso_cub" => "#3A59D1",
"plastificado" => "#FFD63A",
"preparado" => "#FF0B55",
"solapa" => "#4F1C51",
"cosido" => "#FF0B55",
"grapado" => "#FEBA17",
"encuadernado" => "#FEBA17",
"corte" => "#67AE6E"
];
public array $OT_WEEK_COLOR_DAY = [
["bg" => "#FFFFFF", "color" => "black"],
["bg" => "yellow", "color" => "black"],
["bg" => "purple", "color" => "white"],
["bg" => "orange", "color" => "white"],
["bg" => "blue", "color" => "white"],
["bg" => "pink", "color" => "black"],
["bg" => "#FFFFFF", "color" => "black"],
];
public array $OT_ENCUADERNACION_COLOR = [
"RF" => ["bg" => "#FF9900", "color" => "white"],
"RFS" => ["bg" => "#FF9900", "color" => "white"],
"RCHV" => ["bg" => "#FF9900", "color" => "blue"],
"RCHVS" => ["bg" => "#FF9900", "color" => "blue"],
"CC2" => ["bg" => "#104861", "color" => "yellow"],
"CC2S" => ["bg" => "#104861", "color" => "yellow"],
"TDF" => ["bg" => "#E49EDD", "color" => "white"],
"TDC" => ["bg" => "#E49EDD", "color" => "blue"],
"default" => ["bg" => "#FFFF00", "color" => "red"],
];
public array $OT_BACKGROUND_COLOR = [
"ferro_digital" => ["bg" => "#BFBFBF","color" => "black"],
"ferro" => ["bg" => "#BFBFBF","color" => "black"],
"prototipo" => ["bg" => "#BFBFBF","color" => "black"],
"pod" => ["bg" => "#47D359","color" => "black"],
"inaplazable" => ["bg" => "red","color" => "white"],
"default" => ["bg" => "#FFFFFF","color" => "black"]
];
public array $OT_PAPEL_COLOR =
[
"blanco" => ["bg" => "#FFFFFF", "color" => "black"],
"ahuesado" => ["bg" => "#FFF2CC", "color" => "black"],
"marfil" => ["bg" => "#FFD966", "color" => "black"],
"volumen_ahuesado" => ["bg" => "#BF8F00", "color" => "black"],
"estucado_mate" => ["bg" => "#BDD7EE", "color" => "black"],
"cartulina" => ["bg" => "#C6E0B4", "color" => "black"],
"default" => ["bg" => "#FFCCFF", "color" => "black"],
];
public array $OT_PLASTIFICADO_COLOR =
[
"BRILLO" => ["bg" => "#00B0F0", "color" => "white"],
"MATE" => ["bg" => "#FF0000", "color" => "white"],
"SOFT" => ["bg" => "#00B050", "color" => "white"],
"SANDY" => ["bg" => "#782170", "color" => "white"],
"ANTIRAYADO" => ["bg" => "#E97132", "color" => "white"],
"GOFRADO" => ["bg" => "#FFFF00", "color" => "black"],
"default" => ["bg" => "#FFFFFF", "color" => "black"],
];
public array $OT_IMPRESION_INTERIOR_PPAL_COLOR =
[
"ROTATIVA" => ["bg" => "white", "color" => "red"],
"POD" => ["bg" => "white", "color" => "#47D359"],
"GENERAL" => ["bg" => "white", "color" => "#A02B93"],
"default" => ["bg" => "white", "color" => "black"],
];
public array $OT_TAREA_STATUS_COLOR = [
"P" => '#FFB22C',
"F" => '#67AE6E',
"S" => '#EB5B00',
"I" => '#3A59D1',
"E" => '#FF0B55',
"D" => '#FFA725',
];
public function __construct()
{
parent::__construct();
}
}

2
ci4/app/Config/PedidoXML.php Executable file → Normal file
View File

@ -13,7 +13,6 @@ class PedidoXML extends BaseConfig
public string $password;
public string $base_dir; # FTP server directory
public bool $xml_enabled;
public int $id_offset;
public function __construct() {
parent::__construct();
@ -23,7 +22,6 @@ class PedidoXML extends BaseConfig
$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);
}
}

0
ci4/app/Config/Publisher.php Executable file → Normal file
View File

View File

@ -0,0 +1,251 @@
<?php
const SK_PERMISSION_MATRIX = [
"admin" => [
"clientes.create",
"clientes.edit",
"clientes.delete",
"clientes.menu",
"plantilla-tarifa.create",
"plantilla-tarifa.edit",
"plantilla-tarifa.delete",
"plantilla-tarifa.menu",
"perfil.create",
"perfil.edit",
"perfil.delete",
"perfil.menu",
"presupuesto.create",
"presupuesto.edit",
"presupuesto.delete",
"presupuesto.menu",
"presupuesto-cliente.create",
"presupuesto-cliente.edit",
"presupuesto-cliente.delete",
"presupuesto-cliente.menu",
"tarifa-preimpresion.create",
"tarifa-preimpresion.edit",
"tarifa-preimpresion.delete",
"tarifa-preimpresion.menu",
"tarifa-manipulado.create",
"tarifa-manipulado.edit",
"tarifa-manipulado.delete",
"tarifa-manipulado.menu",
"tarifa-acabado.create",
"tarifa-acabado.edit",
"tarifa-acabado.delete",
"tarifa-acabado.menu",
"tarifa-encuadernacion.create",
"tarifa-encuadernacion.edit",
"tarifa-encuadernacion.delete",
"tarifa-encuadernacion.menu",
"tarifa-envio.create",
"tarifa-envio.edit",
"tarifa-envio.delete",
"tarifa-envio.menu",
"tarifa-extra.create",
"tarifa-extra.edit",
"tarifa-extra.delete",
"tarifa-extra.menu",
"proveedores.create",
"proveedores.edit",
"proveedores.delete",
"proveedores.menu",
"ajustes.create",
"ajustes.edit",
"ajustes.delete",
"ajustes.menu",
"actividad.create",
"actividad.edit",
"actividad.delete",
"actividad.menu",
"paises.create",
"paises.edit",
"paises.delete",
"paises.menu",
"formas-pago.create",
"formas-pago.edit",
"formas-pago.delete",
"formas-pago.menu",
"maquinas.create",
"maquinas.edit",
"maquinas.delete",
"maquinas.menu",
"maquinas-defecto.create",
"maquinas-defecto.edit",
"maquinas-defecto.delete",
"maquinas-defecto.menu",
"papel-generico.create",
"papel-generico.edit",
"papel-generico.delete",
"papel-generico.menu",
"papel-impresion.create",
"papel-impresion.edit",
"papel-impresion.delete",
"papel-impresion.menu",
"usuarios.create",
"usuarios.edit",
"usuarios.delete",
"usuarios.menu",
"roles-permisos.create",
"roles-permisos.edit",
"roles-permisos.delete",
"roles-permisos.menu",
"ubicaciones.create",
"ubicaciones.edit",
"ubicaciones.delete",
"ubicaciones.menu",
"series-facturas.create",
"series-facturas.edit",
"series-facturas.delete",
"series-facturas.menu",
],
"cliente-admin" => [
"perfil.edit",
"perfil.menu",
"direcciones.create",
"direcciones.edit",
"direcciones.delete",
"direcciones.menu",
"presupuesto-cliente.create",
"presupuesto-cliente.edit",
"presupuesto-cliente.delete",
"presupuesto-cliente.menu",
],
"cliente-editor" => [
"perfil.create",
"perfil.edit",
"perfil.delete",
"perfil.menu",
"direcciones.create",
"direcciones.edit",
"direcciones.delete",
"direcciones.menu",
"presupuesto-cliente.create",
"presupuesto-cliente.edit",
"presupuesto-cliente.delete",
"presupuesto-cliente.menu",
],
"comercial" => [
"token.token",
"token.menu",
],
"produccion" => [
"token.token",
"token.menu",
],
"maquina" => [
"token.token",
"token.menu",
],
"maquetador" => [
"token.token",
"token.menu",
],
"director" => [
"token.token",
"token.menu",
],
"contabilidad" => [
"token.token",
"token.menu",
],
"editor" => [
"token.token",
"token.menu",
"Profile.index",
"Profile.menu",
],
"beta" => [
"clientes.create",
"clientes.edit",
"clientes.delete",
"clientes.menu",
"plantilla-tarifa.create",
"plantilla-tarifa.edit",
"plantilla-tarifa.delete",
"plantilla-tarifa.menu",
"perfil.create",
"perfil.edit",
"perfil.delete",
"perfil.menu",
"presupuesto.create",
"presupuesto.edit",
"presupuesto.delete",
"presupuesto.menu",
"presupuesto-cliente.create",
"presupuesto-cliente.edit",
"presupuesto-cliente.delete",
"presupuesto-cliente.menu",
"tarifa-preimpresion.create",
"tarifa-preimpresion.edit",
"tarifa-preimpresion.delete",
"tarifa-preimpresion.menu",
"tarifa-manipulado.create",
"tarifa-manipulado.edit",
"tarifa-manipulado.delete",
"tarifa-manipulado.menu",
"tarifa-acabado.create",
"tarifa-acabado.edit",
"tarifa-acabado.delete",
"tarifa-acabado.menu",
"tarifa-encuadernacion.create",
"tarifa-encuadernacion.edit",
"tarifa-encuadernacion.delete",
"tarifa-encuadernacion.menu",
"tarifa-envio.create",
"tarifa-envio.edit",
"tarifa-envio.delete",
"tarifa-envio.menu",
"tarifa-extra.create",
"tarifa-extra.edit",
"tarifa-extra.delete",
"tarifa-extra.menu",
"proveedores.create",
"proveedores.edit",
"proveedores.delete",
"proveedores.menu",
"ajustes.create",
"ajustes.edit",
"ajustes.delete",
"ajustes.menu",
"actividad.create",
"actividad.edit",
"actividad.delete",
"actividad.menu",
"paises.create",
"paises.edit",
"paises.delete",
"paises.menu",
"maquinas.create",
"maquinas.edit",
"maquinas.delete",
"maquinas.menu",
"maquinas-defecto.create",
"maquinas-defecto.edit",
"maquinas-defecto.delete",
"maquinas-defecto.menu",
"papel-generico.create",
"papel-generico.edit",
"papel-generico.delete",
"papel-generico.menu",
"papel-impresion.create",
"papel-impresion.edit",
"papel-impresion.delete",
"papel-impresion.menu",
"usuarios.create",
"usuarios.edit",
"usuarios.delete",
"usuarios.menu",
"roles-permisos.create",
"roles-permisos.edit",
"roles-permisos.delete",
"roles-permisos.menu",
"ubicaciones.create",
"ubicaciones.edit",
"ubicaciones.delete",
"ubicaciones.menu",
"series-facturas.create",
"series-facturas.edit",
"series-facturas.delete",
"series-facturas.menu",
],
];

View File

@ -0,0 +1,104 @@
<?php
const SK_PERMISSIONS = [
'clientes.create' => 'Can create',
'clientes.edit' => 'Can edit',
'clientes.delete' => 'Can delete',
'clientes.menu' => 'Menu shall be visualize',
'plantilla-tarifa.create' => 'Can create',
'plantilla-tarifa.edit' => 'Can edit',
'plantilla-tarifa.delete' => 'Can delete',
'plantilla-tarifa.menu' => 'Menu shall be visualize',
'perfil.create' => 'Can create',
'perfil.edit' => 'Can edit',
'perfil.delete' => 'Can delete',
'perfil.menu' => 'Menu shall be visualize',
'direcciones.create' => 'Can create',
'direcciones.edit' => 'Can edit',
'direcciones.delete' => 'Can delete',
'direcciones.menu' => 'Menu shall be visualize',
'presupuesto.create' => 'Can create',
'presupuesto.edit' => 'Can edit',
'presupuesto.delete' => 'Can delete',
'presupuesto.menu' => 'Menu shall be visualize',
'presupuesto-cliente.create' => 'Can create',
'presupuesto-cliente.edit' => 'Can edit',
'presupuesto-cliente.delete' => 'Can delete',
'presupuesto-cliente.menu' => 'Menu shall be visualize',
'tarifa-preimpresion.create' => 'Can create',
'tarifa-preimpresion.edit' => 'Can edit',
'tarifa-preimpresion.delete' => 'Can delete',
'tarifa-preimpresion.menu' => 'Menu shall be visualize',
'tarifa-manipulado.create' => 'Can create',
'tarifa-manipulado.edit' => 'Can edit',
'tarifa-manipulado.delete' => 'Can delete',
'tarifa-manipulado.menu' => 'Menu shall be visualize',
'tarifa-acabado.create' => 'Can create',
'tarifa-acabado.edit' => 'Can edit',
'tarifa-acabado.delete' => 'Can delete',
'tarifa-acabado.menu' => 'Menu shall be visualize',
'tarifa-encuadernacion.create' => 'Can create',
'tarifa-encuadernacion.edit' => 'Can edit',
'tarifa-encuadernacion.delete' => 'Can delete',
'tarifa-encuadernacion.menu' => 'Menu shall be visualize',
'tarifa-envio.create' => 'Can create',
'tarifa-envio.edit' => 'Can edit',
'tarifa-envio.delete' => 'Can delete',
'tarifa-envio.menu' => 'Menu shall be visualize',
'tarifa-extra.create' => 'Can create',
'tarifa-extra.edit' => 'Can edit',
'tarifa-extra.delete' => 'Can delete',
'tarifa-extra.menu' => 'Menu shall be visualize',
'proveedores.create' => 'Can create',
'proveedores.edit' => 'Can edit',
'proveedores.delete' => 'Can delete',
'proveedores.menu' => 'Menu shall be visualize',
'ajustes.create' => 'Can create',
'ajustes.edit' => 'Can edit',
'ajustes.delete' => 'Can delete',
'ajustes.menu' => 'Menu shall be visualize',
'actividad.create' => 'Can create',
'actividad.edit' => 'Can edit',
'actividad.delete' => 'Can delete',
'actividad.menu' => 'Menu shall be visualize',
'paises.create' => 'Can create',
'paises.edit' => 'Can edit',
'paises.delete' => 'Can delete',
'paises.menu' => 'Menu shall be visualize',
'formas-pago.create' => 'Can create',
'formas-pago.edit' => 'Can edit',
'formas-pago.delete' => 'Can delete',
'formas-pago.menu' => 'Menu shall be visualize',
'maquinas.create' => 'Can create',
'maquinas.edit' => 'Can edit',
'maquinas.delete' => 'Can delete',
'maquinas.menu' => 'Menu shall be visualize',
'maquinas-defecto.create' => 'Can create',
'maquinas-defecto.edit' => 'Can edit',
'maquinas-defecto.delete' => 'Can delete',
'maquinas-defecto.menu' => 'Menu shall be visualize',
'papel-generico.create' => 'Can create',
'papel-generico.edit' => 'Can edit',
'papel-generico.delete' => 'Can delete',
'papel-generico.menu' => 'Menu shall be visualize',
'papel-impresion.create' => 'Can create',
'papel-impresion.edit' => 'Can edit',
'papel-impresion.delete' => 'Can delete',
'papel-impresion.menu' => 'Menu shall be visualize',
'usuarios.create' => 'Can create',
'usuarios.edit' => 'Can edit',
'usuarios.delete' => 'Can delete',
'usuarios.menu' => 'Menu shall be visualize',
'roles-permisos.create' => 'Can create',
'roles-permisos.edit' => 'Can edit',
'roles-permisos.delete' => 'Can delete',
'roles-permisos.menu' => 'Menu shall be visualize',
'ubicaciones.create' => 'Can create',
'ubicaciones.edit' => 'Can edit',
'ubicaciones.delete' => 'Can delete',
'ubicaciones.menu' => 'Menu shall be visualize',
'series-facturas.create' => 'Can create',
'series-facturas.edit' => 'Can edit',
'series-facturas.delete' => 'Can delete',
'series-facturas.menu' => 'Menu shall be visualize',
];

View File

@ -0,0 +1,22 @@
{
"superadmin": {
"title": "Super Admin",
"description": "Complete control of the site."
},
"admin": {
"title": "Admin",
"description": "Day to day administrators of the site."
},
"developer": {
"title": "Developer",
"description": "Site programmers."
},
"user": {
"title": "User",
"description": "General users of the site. Often customers."
},
"beta": {
"title": "Beta User",
"description": "Has access to beta-level features."
}
}

View File

@ -0,0 +1,48 @@
<?php
const SK_ROLES = [
'admin' => [
'title' => 'Administrador',
'description' => 'Administrador del ERP',
],
'cliente-admin' => [
'title' => 'Cliente administrador',
'description' => 'Rol de cliente con permisos de administración',
],
'cliente-editor' => [
'title' => 'Cliente editor',
'description' => 'Rol de cliente con permisos de edición',
],
'comercial' => [
'title' => 'Comercial',
'description' => '',
],
'produccion' => [
'title' => 'Producción',
'description' => '',
],
'maquina' => [
'title' => 'Máquina',
'description' => '',
],
'maquetador' => [
'title' => 'Maquetador',
'description' => '',
],
'director' => [
'title' => 'Director',
'description' => '',
],
'contabilidad' => [
'title' => 'Contabilidad',
'description' => '',
],
'editor' => [
'title' => 'Editor',
'description' => '',
],
'beta' => [
'title' => 'Beta',
'description' => '',
],
];

611
ci4/app/Config/Routes.php Executable file → Normal file
View File

@ -16,8 +16,16 @@ $routes->get('/', 'Home::index', ['as' => 'home']);
$routes->get('lang/{locale}', 'Language::index');
$routes->get('viewmode/(:alpha)', 'Viewmode::index/$1');
/* URL FOR TESTS */
$routes->get('test', 'Test::index');
$routes->group('activity', ['namespace' => 'App\Controllers\Sistema'], function ($routes) {
$routes->get('', 'Actividad::index', ['as' => 'activityList']);
$routes->post('datatable', 'Actividad::datatable', ['as' => 'activityDT']);
});
$routes->group('settings', ['namespace' => 'App\Controllers\Sistema'], function ($routes) {
$routes->get('', 'Ajustes::settings', ['as' => 'ajustesList']);
$routes->post('', 'Ajustes::settings', ['as' => 'ajustesEdit']);
});
/*
@ -26,16 +34,77 @@ $routes->get('test', 'Test::index');
* --------------------------------------------------------------------
*/
// Carga archivos de rutas por dominio
foreach (glob(APPPATH . 'Config/Routes/*Routes.php') as $routeFile) {
require $routeFile;
}
/* Rutas para tarifas */
$routes->group('tarifas', ['namespace' => 'App\Controllers\Tarifas'], function ($routes) {
/* Cliente */
$routes->group('acabados', ['namespace' => 'App\Controllers\Tarifas\Acabados'], function ($routes) {
$routes->get('', 'TarifaAcabados::index', ['as' => 'tarifaAcabadoList']);
$routes->match(['get', 'post'], 'add', 'TarifaAcabados::add', ['as' => 'tarifaAcabadoAdd']);
$routes->match(['get', 'post'], 'edit/(:num)', 'TarifaAcabados::edit/$1', ['as' => 'tarifaAcabadoEdit']);
$routes->get('delete/(:num)', 'TarifaAcabados::delete/$1', ['as' => 'tarifaAcabadoDelete']);
$routes->post('datatable', 'TarifaAcabados::datatable', ['as' => 'tarifaAcabadoDT']);
$routes->group('lineas', ['namespace' => 'App\Controllers\Tarifas\Acabados'], function ($routes) {
$routes->post('datatable', 'TarifaAcabadosLineas::datatable', ['as' => 'tarifaAcabadoLineasDT']);
$routes->post('datatable_editor', 'TarifaAcabadosLineas::datatable_editor', ['as' => 'tarifaAcabadoLineasDTE']);
$routes->get('delete/(:num)', 'TarifaAcabadosLineas::delete/$1', ['as' => 'tarifaAcabadoLineasDelete']);
});
});
});
/* Rutas para configuraciones */
$routes->group('configuracion', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
/* Ubicaciones */
$routes->group('ubicaciones', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'Ubicaciones::index', ['as' => 'ubicacionesList']);
$routes->match(['get', 'post'], 'add', 'Ubicaciones::add', ['as' => 'ubicacionesAdd']);
$routes->match(['get', 'post'], 'edit/(:num)', 'Ubicaciones::edit/$1', ['as' => 'ubicacionesEdit']);
$routes->get('delete/(:num)', 'Ubicaciones::delete/$1', ['as' => 'ubicacionesDelete']);
$routes->post('datatable', 'Ubicaciones::datatable', ['as' => 'ubicacionesDT']);
});
/* Series Factura */
$routes->group('series-facturas', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'SeriesFacturas::index', ['as' => 'seriesFacturasList']);
$routes->match(['get', 'post'], 'add', 'SeriesFacturas::add', ['as' => 'seriesFacturasAdd']);
$routes->match(['get', 'post'], 'edit/(:num)', 'SeriesFacturas::edit/$1', ['as' => 'seriesFacturasEdit']);
$routes->get('delete/(:num)', 'SeriesFacturas::delete/$1', ['as' => 'seriesFacturasDelete']);
$routes->post('datatable', 'SeriesFacturas::datatable', ['as' => 'seriesFacturasDT']);
$routes->post('menuitemsFacturas', 'SeriesFacturas::menuItemsFacturas', ['as' => 'menuItemsOfSeriesFacturas']);
});
/* Formas de Pago */
$routes->group('formas-pago', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'FormasPago::index', ['as' => 'formasPagoList']);
$routes->match(['get', 'post'], 'add', 'FormasPago::add', ['as' => 'formasPagoAdd']);
$routes->match(['get', 'post'], 'edit/(:num)', 'FormasPago::edit/$1', ['as' => 'formasPagoEdit']);
$routes->get('delete/(:num)', 'FormasPago::delete/$1', ['as' => 'formasPagoDelete']);
$routes->post('datatable', 'FormasPago::datatable', ['as' => 'formasPagoDT']);
});
$routes->group("variables", ["namespace" => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'ConfigVariables::index', ['as' => 'variablesIndex']);
$routes->get('find/(:num)', 'ConfigVariables::get/$1', ['as' => 'variablesFind']);
$routes->post('edit/(:num)', 'ConfigVariables::updateVariable/$1', ['as' => 'updateVariable']);
$routes->delete('delete/(:num)', 'ConfigVariables::delete/$1', ['as' => 'deleteVariable']);
$routes->get('datatable', 'ConfigVariables::datatable', ['as' => 'datatableVariables']);
});
$routes->group("errores-presupuesto", ["namespace" => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'ConfigErrores::index', ['as' => 'erroresPresupuestoIndex']);
$routes->get('edit/(:num)', 'ConfigErrores::viewForm/$1', ['as' => 'erroresPresupuestoViewForm']);
$routes->get('get/(:num)', 'ConfigErrores::get_error_presupuesto/$1', ['as' => 'erroresPresupuestoGetErrorPresupuesto']);
$routes->get('datatable', 'ConfigErrores::datatable', ['as' => 'erroresPresupuestoDatatable']);
$routes->post('edit/(:num)', 'ConfigErrores::update_error_presupuesto/$1', ['as' => 'erroresPresupuestoUpdate']);
});
});
$routes->group('users', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'Users::index', ['as' => 'userList']);
$routes->get('maquinista/change/user', 'Users::index_maquinista_change_user', ['as' => 'maquinistaUserChangeList']);
$routes->get('maquinista/change/session/(:num)', 'Users::change_user_session/$1', ['as' => 'maquinistaChangeUserSession']);
$routes->get('index', 'Users::index', ['as' => 'userIndex']);
$routes->get('list', 'Users::index', ['as' => 'userList2']);
$routes->get('add', 'Users::add', ['as' => 'newUser']);
$routes->post('add', 'Users::add', ['as' => 'createUser']);
@ -44,12 +113,18 @@ $routes->group('users', ['namespace' => 'App\Controllers\Configuracion'], functi
$routes->get('delete/(:num)', 'Users::delete/$1', ['as' => 'deleteUser']);
$routes->post('allmenuitems', 'Users::allItemsSelect', ['as' => 'select2ItemsOfUsers']);
$routes->post('menuitems', 'Users::menuItems', ['as' => 'menuItemsOfUsers']);
$routes->post('datatable', 'Users::datatable', ['as' => 'datatableOfUsers']);
$routes->get('getMenuComerciales', 'Users::getMenuComerciales', ['as' => 'menuItemsComerciales']);
$routes->post('getMenuComerciales', 'Users::getMenuComerciales', ['as' => 'menuItemsComerciales']);
});
$routes->resource('users', ['namespace' => 'App\Controllers\Configuracion', 'controller' => 'Users', 'except' => 'show,new,create,update']);
$routes->group('group', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'Group::index', ['as' => 'userGroupList']);
$routes->get('index', 'Group::index', ['as' => 'groupIndex']);
$routes->post('edit/(:num)', 'Group::edit/$1', ['as' => 'updateGroup']);
$routes->get('edit/(:num)', 'Group::edit/$1', ['as' => 'editGroup']);
$routes->get('delete/(:num)', 'Group::delete/$1', ['as' => 'deleteGroup']);
$routes->get('add', 'Group::add', ['as' => 'newGroup']);
$routes->post('add', 'Group::add', ['as' => 'createGroup']);
});
$routes->group('tarifapreimpresion', ['namespace' => 'App\Controllers\Tarifas'], function ($routes) {
$routes->get('', 'Tarifapreimpresion::index', ['as' => 'tarifapreimpresionList']);
@ -62,7 +137,6 @@ $routes->group('tarifapreimpresion', ['namespace' => 'App\Controllers\Tarifas'],
$routes->get('delete/(:num)', 'Tarifapreimpresion::delete/$1', ['as' => 'deleteTarifapreimpresion']);
$routes->post('allmenuitems', 'Tarifapreimpresion::allItemsSelect', ['as' => 'select2ItemsOfTarifaspreimpresion']);
$routes->post('menuitems', 'Tarifapreimpresion::menuItems', ['as' => 'menuItemsOfTarifaspreimpresion']);
$routes->get('gettarifas', 'Tarifapreimpresion::getSelect2');
});
@ -77,7 +151,6 @@ $routes->group('tarifaextra', ['namespace' => 'App\Controllers\Tarifas'], functi
$routes->get('delete/(:num)', 'Tarifaextra::delete/$1', ['as' => 'deleteTarifaextra']);
$routes->post('allmenuitems', 'Tarifaextra::allItemsSelect', ['as' => 'select2ItemsOfTarifasextra']);
$routes->post('menuitems', 'Tarifaextra::menuItems', ['as' => 'menuItemsOfTarifasextra']);
$routes->get('gettarifas', 'Tarifaextra::getSelect2');
});
@ -92,25 +165,10 @@ $routes->group('tarifasmanipulado', ['namespace' => 'App\Controllers\Tarifas'],
$routes->post('datatable', 'Tarifasmanipulado::datatable', ['as' => 'dataTableOfTarifasManipulado']);
$routes->post('allmenuitems', 'Tarifasmanipulado::allItemsSelect', ['as' => 'select2ItemsOfTarifasManipulado']);
$routes->post('menuitems', 'Tarifasmanipulado::menuItems', ['as' => 'menuItemsOfTarifasManipulado']);
$routes->get('select', 'Tarifasmanipulado::show_select', ["as" => "showSelectTarifaManipulado"]);
$routes->get('gettarifas', 'Tarifasmanipulado::getSelect2');
});
$routes->resource('tarifasmanipulado', ['namespace' => 'App\Controllers\Tarifas', 'controller' => 'Tarifasmanipulado', 'except' => 'show,new,create,update']);
$routes->group('serviciosacabado', ['namespace' => 'App\Controllers\Tarifas\Acabados'], function ($routes) {
$routes->get('', 'ServiciosAcabado::index', ['as' => 'serviciosAcabadoList']);
$routes->get('add', 'ServiciosAcabado::add', ['as' => 'newServicioAcabado']);
$routes->post('add', 'ServiciosAcabado::add', ['as' => 'createServicioAcabado']);
$routes->get('edit/(:num)', 'ServiciosAcabado::edit/$1', ['as' => 'editServicioAcabado']);
$routes->post('edit/(:num)', 'ServiciosAcabado::edit/$1', ['as' => 'updateServicioAcabado']);
$routes->get('datatable', 'ServiciosAcabado::datatable');
$routes->get('getselectedtarifas', 'ServiciosAcabado::getTarifasSeleccionadas');
$routes->get('gettarifas', 'ServiciosAcabado::getTarifas');
});
$routes->resource('tarifasmanipulado', ['namespace' => 'App\Controllers\Tarifas\Acabados', 'controller' => 'ServiciosAcabado', 'except' => 'show,new,create,update']);
$routes->group('tarifamanipuladolineas', ['namespace' => 'App\Controllers\Tarifas'], function ($routes) {
$routes->get('', 'Tarifamanipuladolineas::index', ['as' => 'tarifaManipuladoLineaList']);
$routes->get('add', 'Tarifamanipuladolineas::add', ['as' => 'newTarifaManipuladoLinea']);
@ -142,24 +200,42 @@ $routes->group('tipologiaslibros', ['namespace' => 'App\Controllers\Configuracio
$routes->group('imposiciones', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'Imposiciones::index', ['as' => 'imposicionList']);
$routes->get('add', 'Imposiciones::add', ['as' => 'newImposicion']);
$routes->get('add/esquema', 'Imposiciones::add_esquema', ['as' => 'newImposicionEsquema']);
$routes->get('find/(:num)', 'Imposiciones::find_imposicion/$1', ['as' => 'findImposicion']);
$routes->get('esquema/find/(:num)', 'Imposiciones::find_imposicion_esquema/$1', ['as' => 'findImposicionEsquema']);
$routes->post('add', 'Imposiciones::add', ['as' => 'createImposicion']);
$routes->post('create', 'Imposiciones::create', ['as' => 'ajaxCreateImposicion']);
$routes->post('esquema/create', 'Imposiciones::create_imposicion_esquema', ['as' => 'ajaxCreateImposicionEsquema']);
$routes->post('(:num)', 'Imposiciones::update/$1', ['as' => 'ajaxUpdateImposicion']);
$routes->post('esquema/(:num)', 'Imposiciones::update_imposicion_esquema/$1', ['as' => 'ajaxUpdateImposicionEsquema']);
$routes->delete('(:num)', 'Imposiciones::delete/$1', ['as' => 'deleteImposicion']);
$routes->delete('esquema/(:num)', 'Imposiciones::delete_imposicion_esquema/$1', ['as' => 'deleteImposicionEsquema']);
$routes->get('edit/(:num)', 'Imposiciones::edit/$1', ['as' => 'updateImposicionForm']);
$routes->get('esquema/edit/(:num)', 'Imposiciones::edit_imposicion_esquema/$1', ['as' => 'updateImposicionEsquemaForm']);
$routes->get('datatable', 'Imposiciones::datatable', ['as' => 'dataTableOfImposiciones']);
$routes->get('esquema/datatable', 'Imposiciones::datatable_imposicion_esquema', ['as' => 'dataTableOfEsquemaImposiciones']);
$routes->put('(:num)/update', 'Imposiciones::update/$1', ['as' => 'ajaxUpdateImposicion']);
$routes->post('(:num)/edit', 'Imposiciones::edit/$1', ['as' => 'updateImposicion']);
$routes->post('datatable', 'Imposiciones::datatable', ['as' => 'dataTableOfImposiciones']);
$routes->post('allmenuitems', 'Imposiciones::allItemsSelect', ['as' => 'select2ItemsOfImposiciones']);
$routes->post('menuitems', 'Imposiciones::menuItems', ['as' => 'menuItemsOfImposiciones']);
$routes->get('select', 'Imposiciones::selectImposicion', ['as' => 'selectImposicion']);
$routes->get('esquema/select', 'Imposiciones::selectImposicionEsquema', ['as' => 'selectImposicionEsquema']);
});
$routes->resource('imposiciones', ['namespace' => 'App\Controllers\Configuracion', 'controller' => 'Imposiciones', 'except' => 'show,new,create,update']);
$routes->group('papelesgenericos', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'Papelesgenericos::index', ['as' => 'papelGenericoList']);
$routes->delete('', 'Papelesgenericos::index', ['as' => 'papelGenericoList2']);
$routes->get('add', 'Papelesgenericos::add', ['as' => 'newPapelGenerico']);
$routes->post('add', 'Papelesgenericos::add', ['as' => 'createPapelGenerico']);
$routes->post('create', 'Papelesgenericos::create', ['as' => 'ajaxCreatePapelGenerico']);
$routes->put('(:num)/update', 'Papelesgenericos::update/$1', ['as' => 'ajaxUpdatePapelGenerico']);
$routes->post('edit/(:num)', 'Papelesgenericos::edit/$1', ['as' => 'updatePapelGenerico']);
$routes->post('datatable', 'Papelesgenericos::datatable', ['as' => 'dataTableOfPapelesGenericos']);
$routes->post('allmenuitems', 'Papelesgenericos::allItemsSelect', ['as' => 'select2ItemsOfPapelesGenericos']);
$routes->post('menuitems', 'Papelesgenericos::menuItems', ['as' => 'menuItemsOfPapelesGenericos']);
});
$routes->resource('papelesgenericos', ['namespace' => 'App\Controllers\Configuracion', 'controller' => 'Papelesgenericos', 'except' => 'show,new,create,update']);
$routes->group('papelesimpresion', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'Papelesimpresion::index', ['as' => 'papelImpresionList']);
$routes->get('add', 'Papelesimpresion::add', ['as' => 'newPapelImpresion']);
$routes->post('add', 'Papelesimpresion::add', ['as' => 'createPapelImpresion']);
$routes->post('create', 'Papelesimpresion::create', ['as' => 'ajaxCreatePapelImpresion']);
$routes->put('(:num)/update', 'Papelesimpresion::update/$1', ['as' => 'ajaxUpdatePapelImpresion']);
$routes->post('edit/(:num)', 'Papelesimpresion::edit/$1', ['as' => 'updatePapelImpresion']);
$routes->post('datatable', 'Papelesimpresion::datatable', ['as' => 'dataTableOfPapelesImpresion']);
$routes->post('allmenuitems', 'Papelesimpresion::allItemsSelect', ['as' => 'select2ItemsOfPapelesImpresion']);
$routes->post('menuitems', 'Papelesimpresion::menuItems', ['as' => 'menuItemsOfPapelesImpresion']);
});
$routes->resource('papelesimpresion', ['namespace' => 'App\Controllers\Configuracion', 'controller' => 'Papelesimpresion', 'except' => 'show,new,create,update']);
$routes->group('papelimpresiontipologias', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('add', 'Papelimpresiontipologias::add', ['as' => 'newPapelImpresionTipologia']);
@ -178,6 +254,20 @@ $routes->group('papelesimpresionmargenes', ['namespace' => 'App\Controllers\Conf
});
$routes->resource('papelesimpresionmargenes', ['namespace' => 'App\Controllers\Configuracion', 'controller' => 'Papelimpresionmargenes', 'except' => 'show,new,create,update']);
$routes->group('maquinas', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'Maquinas::index', ['as' => 'maquinaList']);
$routes->get('add', 'Maquinas::add', ['as' => 'newMaquina']);
$routes->post('add', 'Maquinas::add', ['as' => 'createMaquina']);
$routes->post('create', 'Maquinas::create', ['as' => 'ajaxCreateMaquina']);
$routes->put('update/(:num)', 'Maquinas::update/$1', ['as' => 'ajaxUpdateMaquina']);
$routes->post('edit/(:num)', 'Maquinas::edit/$1', ['as' => 'updateMaquina']);
$routes->post('datatable', 'Maquinas::datatable', ['as' => 'dataTableOfMaquinas']);
$routes->post('allmenuitems', 'Maquinas::allItemsSelect', ['as' => 'select2ItemsOfMaquinas']);
$routes->post('menuitems', 'Maquinas::menuItems', ['as' => 'menuItemsOfMaquinas']);
});
$routes->resource('maquinas', ['namespace' => 'App\Controllers\Configuracion', 'controller' => 'Maquinas', 'except' => 'show,new,create,update']);
$routes->group('maquinastarifasimpresion', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'Maquinastarifasimpresion::index', ['as' => 'maquinasTarifaImpresionList']);
$routes->get('add', 'Maquinastarifasimpresion::add', ['as' => 'newMaquinasTarifaImpresion']);
@ -211,11 +301,24 @@ $routes->group('maquinaspapelesimpresion', ['namespace' => 'App\Controllers\Conf
$routes->resource('maquinastarifasimpresion', ['namespace' => 'App\Controllers\Configuracion', 'controller' => 'Maquinastarifasimpresion', 'except' => 'show,new,create,update']);
$routes->group('maquinasdefecto', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'Maquinasdefecto::index', ['as' => 'maquinaPorDefectoList']);
$routes->get('add', 'Maquinasdefecto::add', ['as' => 'newMaquinaPorDefecto']);
$routes->post('add', 'Maquinasdefecto::add', ['as' => 'createMaquinaPorDefecto']);
$routes->post('create', 'Maquinasdefecto::create', ['as' => 'ajaxCreateMaquinaPorDefecto']);
$routes->put('(:num)/update', 'Maquinasdefecto::update/$1', ['as' => 'ajaxUpdateMaquinaPorDefecto']);
$routes->post('edit/(:num)', 'Maquinasdefecto::edit/$1', ['as' => 'updateMaquinaPorDefecto']);
$routes->post('datatable', 'Maquinasdefecto::datatable', ['as' => 'dataTableOfMaquinasPorDefecto']);
$routes->post('allmenuitems', 'Maquinasdefecto::allItemsSelect', ['as' => 'select2ItemsOfMaquinasPorDefecto']);
$routes->post('menuitems', 'Maquinasdefecto::menuItems', ['as' => 'menuItemsOfMaquinasPorDefecto']);
});
$routes->resource('maquinasdefecto', ['namespace' => 'App\Controllers\Configuracion', 'controller' => 'Maquinasdefecto', 'except' => 'show,new,create,update']);
$routes->group('profile', ['namespace' => 'App\Controllers'], function ($routes) {
$routes->get('', 'Profile::index', ['as' => 'profileList']);
$routes->get('index', 'Profile::index', ['as' => 'profileIndex']);
$routes->get('list', 'Profile::index', ['as' => 'profileList2']);
$routes->match(['get', 'post'], 'store', 'Profile::store', ['as' => 'profileStore']);
});
@ -229,20 +332,22 @@ $routes->group('comunidades-autonomas', ['namespace' => 'App\Controllers\Configu
$routes->post('datatable', 'Comunidadesautonomas::datatable', ['as' => 'dataTableOfComunidadesAutonomas']);
$routes->post('allmenuitems', 'Comunidadesautonomas::allItemsSelect', ['as' => 'select2ItemsOfComunidadesAutonomas']);
$routes->post('menuitems', 'Comunidadesautonomas::menuItems', ['as' => 'menuItemsOfComunidadesAutonomas']);
$routes->get('menuitems2', 'Comunidadesautonomas::menuItems2', ['as' => 'menuItemsOfComunidadesAutonomas2']);
});
$routes->resource('comunidades-autonomas', ['namespace' => 'App\Controllers\Configuracion', 'controller' => 'Comunidadesautonomas', 'except' => 'show,new,create,update']);
$routes->group('formas-pago', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'FormasPago::index', ['as' => 'formasPagoList']);
$routes->match(['get', 'post'], 'add', 'FormasPago::add', ['as' => 'formasPagoAdd']);
$routes->match(['get', 'post'], 'edit/(:num)', 'FormasPago::edit/$1', ['as' => 'formasPagoEdit']);
$routes->get('delete/(:num)', 'FormasPago::delete/$1', ['as' => 'formasPagoDelete']);
$routes->post('datatable', 'FormasPago::datatable', ['as' => 'formasPagoDT']);
$routes->get('menuitems', 'FormasPago::menuItems', ['as' => 'menuItemsOfFormasDePagos']);
$routes->group('paises', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'Paises::index', ['as' => 'paisList']);
$routes->get('add', 'Paises::add', ['as' => 'newPais']);
$routes->post('add', 'Paises::add', ['as' => 'createPais']);
$routes->post('create', 'Paises::create', ['as' => 'ajaxCreatePais']);
$routes->put('(:num)/update', 'Paises::update/$1', ['as' => 'ajaxUpdatePais']);
$routes->post('(:num)/edit', 'Paises::edit/$1', ['as' => 'updatePais']);
$routes->post('datatable', 'Paises::datatable', ['as' => 'dataTableOfPaises']);
$routes->post('allmenuitems', 'Paises::allItemsSelect', ['as' => 'select2ItemsOfPaises']);
$routes->post('menuitems', 'Paises::menuItems', ['as' => 'menuItemsOfPaises']);
});
$routes->resource('formas-pago', ['namespace' => 'App\Controllers\Configuracion', 'controller' => 'FormasPago', 'except' => 'show,new,create,update']);
$routes->resource('paises', ['namespace' => 'App\Controllers\Configuracion', 'controller' => 'Paises', 'except' => 'show,new,create,update']);
$routes->group('provincias', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
@ -255,7 +360,6 @@ $routes->group('provincias', ['namespace' => 'App\Controllers\Configuracion'], f
$routes->post('datatable', 'Provincias::datatable', ['as' => 'dataTableOfProvincias']);
$routes->post('allmenuitems', 'Provincias::allItemsSelect', ['as' => 'select2ItemsOfProvincias']);
$routes->post('menuitems', 'Provincias::menuItems', ['as' => 'menuItemsOfProvincias']);
$routes->get('menuitems2', 'Provincias::menuItems2', ['as' => 'menuItemsOfProvincias2']);
});
$routes->resource('provincias', ['namespace' => 'App\Controllers\Configuracion', 'controller' => 'Provincias', 'except' => 'show,new,create,update']);
@ -280,9 +384,6 @@ $routes->group('clientes', ['namespace' => 'App\Controllers\Clientes'], function
$routes->group('clienteprecios', ['namespace' => 'App\Controllers\Clientes'], function ($routes) {
$routes->post('datatable', 'ClientePrecios::datatable', ['as' => 'dataTableOfClienteprecios']);
$routes->post('datatable_editor', 'ClientePrecios::datatable_editor', ['as' => 'editorOfClienteprecios']);
$routes->post('changeplantilla', 'ClientePrecios::updatePlantilla', ['as' => 'changePlantillaOfClienteprecios']);
$routes->get('getplantilla', 'ClientePrecios::getCurrentPlantilla', ['as' => 'getPlantillaOfClienteprecios']);
$routes->post('update', 'ClientePrecios::updatePlantilla', ['as' => 'updateClienteprecios']);
});
$routes->resource('clienteprecios', ['namespace' => 'App\Controllers\Clientes', 'controller' => 'ClientePrecios', 'except' => 'show,new,create,update']);
@ -292,40 +393,45 @@ $routes->group('clienteplantillaprecios', ['namespace' => 'App\Controllers\Clien
$routes->get('add', 'Clienteplantillaprecios::add', ['as' => 'newClienteplantillaprecios']);
$routes->post('add', 'Clienteplantillaprecios::add', ['as' => 'createClienteplantillaprecios']);
$routes->post('edit/(:num)', 'Clienteplantillaprecios::edit/$1', ['as' => 'updateClienteplantillaprecios']);
$routes->get('edit/(:num)', 'Clienteplantillaprecios::edit/$1', ['as' => 'updateClienteplantillaprecios']);
$routes->get('delete/(:num)', 'Clienteplantillaprecios::delete/$1', ['as' => 'deleteClienteplantillaprecios']);
$routes->post('datatable', 'Clienteplantillaprecios::datatable', ['as' => 'dataTableOfClientesplantillaprecios']);
$routes->get('menuitems', 'Clienteplantillaprecios::menuItems', ['as' => 'menuItemsOfClienteplantillaprecios']);
$routes->post('update/(:num)', 'Clienteplantillaprecios::update/$1', ['as' => 'updateClienteplantillaprecios']);
$routes->post('menuitems', 'Clienteplantillaprecios::menuItems', ['as' => 'menuItemsOfClienteplantillaprecios']);
});
$routes->resource('clienteplantillaprecios', ['namespace' => 'App\Controllers\Clientes', 'controller' => 'Clienteplantillaprecios', 'except' => 'show,new,create']);
$routes->resource('clienteplantillaprecios', ['namespace' => 'App\Controllers\Clientes', 'controller' => 'Clienteplantillaprecios', 'except' => 'show,new,create,update']);
$routes->group('clienteplantillaprecioslineas', ['namespace' => 'App\Controllers\Clientes'], function ($routes) {
$routes->post('datatable', 'Clienteplantillaprecioslineas::datatable', ['as' => 'dataTableOfClientesplantillaprecioslineas']);
$routes->post('datatable_editor', 'Clienteplantillaprecioslineas::datatable_editor', ['as' => 'editorOfClienteplantillaprecioslineas']);
$routes->post('getrows', 'Clienteplantillaprecioslineas::getStoredRows', ['as' => 'getStoredRowsOfClienteplantillaprecioslineas']);
});
$routes->resource('clienteplantillaprecioslineas', ['namespace' => 'App\Controllers\Clientes', 'controller' => 'clienteplantillaprecioslineas', 'except' => 'show,new,create,update']);
$routes->group('clienteusuarios', ['namespace' => 'App\Controllers\Clientes'], function ($routes) {
$routes->post('datatable', 'Clienteusuarios::datatable', ['as' => 'dataTableOfClienteUsuarios']);
$routes->post('adduser', 'Clienteusuarios::addUserToClient');
$routes->get('delete/(:num)', 'Clienteusuarios::removeClienteFromUser/$1');
$routes->get('getusers', 'Clienteusuarios::getAvailableUsers');
});
$routes->group('misdirecciones', ['namespace' => 'App\Controllers\Clientes'], function ($routes) {
$routes->get('', 'Clientedirecciones::index', ['as' => 'clientedireccionesIndex']);
$routes->get('get/(:num)', 'Clientedirecciones::get/$1', ['as' => 'get']);
$routes->get('getId', 'Clientedirecciones::getDireccionIdFromData');
$routes->get('getDireccionPresupuesto/(:num)', 'Clientedirecciones::getDireccionPresupuesto/$1', ['as' => 'getDireccionPresupuesto']);
$routes->post('add', 'Clientedirecciones::add', ['as' => 'newClientedirecciones']);
$routes->get('getSelect2', 'Clientedirecciones::getSelect2', ['as' => 'listaClientedirecciones']);
});
$routes->group('formas-pagos', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'Formaspagos::index', ['as' => 'formaDePagoList']);
$routes->get('add', 'Formaspagos::add', ['as' => 'newFormaDePago']);
$routes->post('add', 'Formaspagos::add', ['as' => 'createFormaDePago']);
$routes->post('create', 'Formaspagos::create', ['as' => 'ajaxCreateFormaDePago']);
$routes->put('(:num)/update', 'Formaspagos::update/$1', ['as' => 'ajaxUpdateFormaDePago']);
$routes->post('(:num)/edit', 'Formaspagos::edit/$1', ['as' => 'updateFormaDePago']);
$routes->post('datatable', 'Formaspagos::datatable', ['as' => 'dataTableOfFormasDePagos']);
$routes->post('allmenuitems', 'Formaspagos::allItemsSelect', ['as' => 'select2ItemsOfFormasDePagos']);
$routes->post('menuitems', 'Formaspagos::menuItems', ['as' => 'menuItemsOfFormasDePagos']);
});
$routes->resource('formas-pagos', ['namespace' => 'App\Controllers\Configuracion', 'controller' => 'Formaspagos', 'except' => 'show,new,create,update']);
$routes->group('tarifasencuadernacion', ['namespace' => 'App\Controllers\Tarifas'], function ($routes) {
$routes->get('', 'Tarifasencuadernacion::index', ['as' => 'tarifaEncuadernacionList']);
@ -338,7 +444,6 @@ $routes->group('tarifasencuadernacion', ['namespace' => 'App\Controllers\Tarifas
$routes->post('datatable', 'Tarifasencuadernacion::datatable', ['as' => 'dataTableOfTarifasEncuadernacion']);
$routes->post('allmenuitems', 'Tarifasencuadernacion::allItemsSelect', ['as' => 'select2ItemsOfTarifasEncuadernacion']);
$routes->post('menuitems', 'Tarifasencuadernacion::menuItems', ['as' => 'menuItemsOfTarifasEncuadernacion']);
$routes->get('gettarifas', 'Tarifasencuadernacion::getSelect2');
});
$routes->resource('tarifasencuadernacion', ['namespace' => 'App\Controllers\Tarifas', 'controller' => 'Tarifasencuadernacion', 'except' => 'show,new,create,update']);
@ -407,7 +512,22 @@ $routes->group('tarifasenvioszonas', ['namespace' => 'App\Controllers\Tarifas'],
$routes->resource('tarifasenvioszonas', ['namespace' => 'App\Controllers\Tarifas', 'controller' => 'Tarifasenvioszonas', 'except' => 'show,new,create,update']);
$routes->group('proveedores', ['namespace' => 'App\Controllers\Compras'], function ($routes) {
$routes->get('', 'Proveedores::index', ['as' => 'proveedorList']);
$routes->get('add', 'Proveedores::add', ['as' => 'newProveedor']);
$routes->post('add', 'Proveedores::add', ['as' => 'createProveedor']);
$routes->post('create', 'Proveedores::create', ['as' => 'ajaxCreateProveedor']);
$routes->put('(:num)/update', 'Proveedores::update/$1', ['as' => 'ajaxUpdateProveedor']);
$routes->post('edit/(:num)', 'Proveedores::edit/$1', ['as' => 'updateProveedor']);
$routes->post('datatable', 'Proveedores::datatable', ['as' => 'dataTableOfProveedores']);
$routes->post('allmenuitems', 'Proveedores::allItemsSelect', ['as' => 'select2ItemsOfProveedores']);
$routes->post('menuitems', 'Proveedores::menuItems', ['as' => 'menuItemsOfProveedores']);
});
$routes->resource('proveedores', ['namespace' => 'App\Controllers\Compras', 'controller' => 'Proveedores', 'except' => 'show,new,create,update']);
$routes->group('proveedorestipos', ['namespace' => 'App\Controllers\Compras'], function ($routes) {
$routes->post('menuitems', 'ProveedoresTipos::menuItems', ['as' => 'menuItemsOfProveedoresTipos']);
});
$routes->resource('proveedorestipos', ['namespace' => 'App\Controllers\Compras', 'controller' => 'ProveedoresTipos', 'except' => 'show,new,create,update']);
@ -436,45 +556,65 @@ $routes->group('clientedirecciones', ['namespace' => 'App\Controllers\Clientes']
$routes->resource('clientedirecciones', ['namespace' => 'App\Controllers\Clientes', 'controller' => 'Clientedirecciones', 'except' => 'show,new,create,update']);
$routes->group('cosidotapablanda', ['namespace' => 'App\Controllers\Presupuestos'], function ($routes) {
$routes->get('list/(:num)', 'Cosidotapablanda::list/$1', ['as' => 'cosidotapablandaList']); // HOMOGENIZAR CON ARGS DINAMICOS!!!
$routes->get('add/(:num)', 'Cosidotapablanda::add/$1', ['as' => 'newCosidotapablanda']);
$routes->get('edit/(:any)', 'Cosidotapablanda::edit/$1', ['as' => 'editarPresupuesto']);
$routes->post('add/(:num)', 'Cosidotapablanda::add/$1', ['as' => 'createCosidotapablanda']);
$routes->post('create', 'Cosidotapablanda::create', ['as' => 'ajaxCreateCosidotapablanda']);
$routes->put('(:num)/update', 'Cosidotapablanda::update/$1', ['as' => 'ajaxUpdateCosidotapablanda']);
$routes->post('edit/(:num)', 'Cosidotapablanda::edit/$1', ['as' => 'updateCosidotapablanda']);
$routes->post('datatable', 'Cosidotapablanda::datatable', ['as' => 'dataTableOfCosidotapablanda']);
$routes->post('datatable_2', 'Cosidotapablanda::datatable_2', ['as' => 'updateDataOfCosidotapablanda']);
$routes->post('allmenuitems', 'Cosidotapablanda::allItemsSelect', ['as' => 'select2ItemsOfCosidotapablanda']);
$routes->post('menuitems', 'Cosidotapablanda::menuItems', ['as' => 'menuItemsOfCosidotapablanda']);
});
$routes->resource('cosidotapablanda', ['namespace' => 'App\Controllers\Presupuestos', 'controller' => 'Cosidotapablanda', 'except' => 'show,new,create,update']);
$routes->group('presupuestocliente', ['namespace' => 'App\Controllers\Presupuestos'], function ($routes) {
$routes->get('list', 'Presupuestocliente::list', ['as' => 'listaPresupuestos']);
$routes->post('datatable', 'Presupuestocliente::datatable', ['as' => 'datatableOfPresupuestos']);
$routes->get('add', 'Presupuestocliente::add', ['as' => 'nuevoPresupuestoCliente']);
$routes->post('add', 'Presupuestocliente::add', ['as' => 'crearPresupuestoCliente']);
$routes->post('edit/(:num)', 'Presupuestocliente::edit/$1', ['as' => 'editarPresupuestoCliente']);
$routes->get('edit/(:any)', 'Presupuestocliente::edit/$1', ['as' => 'editarPresupuestoCliente2']);
$routes->post('getgramaje', 'Presupuestocliente::getGramaje', ['as' => 'obtenerGramaje']);
$routes->post('presupuesto', 'Presupuestocliente::presupuesto', ['as' => 'presupuestoCliente']);
$routes->post('getDireccionesCliente', 'Presupuestocliente::getDireccionesCliente', ['as' => 'getDirecciones']);
$routes->post('getNuevaDireccion', 'Presupuestocliente::getNuevaDireccion', ['as' => 'nuevaDireccion']);
$routes->post('guardar', 'Presupuestocliente::guardar', ['as' => 'guardar']);
$routes->get('cargar/(:num)', 'Presupuestocliente::cargar/$1', ['as' => 'cargarPresupuesto']);
$routes->post('duplicarPresupuesto', 'Presupuestocliente::duplicarPresupuesto', ['as' => 'duplicarPresupuesto']);
$routes->post('calcular', 'Presupuestocliente::calcular', ['as' => 'calcularPresupuesto']);
});
$routes->resource('presupuestocliente', ['namespace' => 'App\Controllers\Presupuestos', 'controller' => 'Presupuestocliente', 'except' => 'show,new,create,update']);
$routes->group('serviciosacabados', ['namespace' => 'App\Controllers\Presupuestos'], function ($routes) {
$routes->get('getacabados', 'Presupuestoacabados::getAcabados');
$routes->post('getvalues', 'Presupuestoacabados::getRowValues');
$routes->post('datatable', 'Presupuestoacabados::datatable', ['as' => 'dataTableOfPresupuestoAcabados']);
$routes->post('menuitems', 'Presupuestoacabados::menuItems', ['as' => 'menuItemsOfPresupuestoAcabados']);
$routes->post('edit/(:num)', 'Presupuestoacabados::edit/$1', ['as' => 'updatePresupuestoacabados']);
$routes->get('cargar', 'Presupuestoacabados::cargar');
$routes->post('update/(:num)', 'Presupuestoacabados::update/$1');
});
$routes->group('serviciosencuadernaciones', ['namespace' => 'App\Controllers\Presupuestos'], function ($routes) {
$routes->post('datatable', 'Presupuestoencuadernaciones::datatable', ['as' => 'dataTableOfPresupuestoEncuadernaciones']);
$routes->post('getvalues', 'Presupuestoencuadernaciones::getRowValues');
$routes->post('menuitems', 'Presupuestoencuadernaciones::menuItems', ['as' => 'menuItemsOfPresupuestoEncuadernaciones']);
$routes->get('delete/(:num)', 'Presupuestoencuadernaciones::delete/$1', ['as' => 'deletePresupuestoencuadernaciones']);
$routes->post('edit/(:num)', 'Presupuestoencuadernaciones::edit/$1', ['as' => 'updatePresupuestoencuadernaciones']);
$routes->post('update/(:num)', 'Presupuestoencuadernaciones::update/$1');
});
$routes->group('serviciosmanipulados', ['namespace' => 'App\Controllers\Presupuestos'], function ($routes) {
$routes->post('getvalues', 'Presupuestomanipulados::getRowValues');
$routes->post('datatable', 'Presupuestomanipulados::datatable', ['as' => 'dataTableOfPresupuestoManipulados']);
$routes->post('edit/(:num)', 'Presupuestomanipulados::edit/$1', ['as' => 'updatePresupuestomanipulados']);
$routes->post('update/(:num)', 'Presupuestomanipulados::update/$1');
$routes->get('serviciosolapas', 'Presupuestomanipulados::getServicioSolapas');
});
$routes->group('serviciospreimpresiones', ['namespace' => 'App\Controllers\Presupuestos'], function ($routes) {
$routes->post('getvalues', 'Presupuestopreimpresiones::getRowValues');
$routes->post('datatable', 'Presupuestopreimpresiones::datatable', ['as' => 'dataTableOfPresupuestoPreimpresiones']);
$routes->post('edit/(:num)', 'Presupuestopreimpresiones::edit/$1', ['as' => 'updatePresupuestopreimpresiones']);
$routes->get('cargar', 'Presupuestopreimpresiones::getSelect2');
});
$routes->group('serviciosextra', ['namespace' => 'App\Controllers\Presupuestos'], function ($routes) {
$routes->post('datatable', 'Presupuestoserviciosextra::datatable', ['as' => 'dataTableOfPresupuestoServiciosExtra']);
$routes->post('edit/(:num)', 'Presupuestoserviciosextra::edit/$1', ['as' => 'updatePresupuestoServiciosExtra']);
$routes->post('getvalues', 'Presupuestoserviciosextra::getRowValues');
});
$routes->group('presupuestodirecciones', ['namespace' => 'App\Controllers\Presupuestos'], function ($routes) {
@ -488,10 +628,10 @@ $routes->group('presupuestotiradasalternativas', ['namespace' => 'App\Controller
});
$routes->group('pedidos', ['namespace' => 'App\Controllers\Pedidos'], function ($routes) {
$routes->get('list', 'Pedido::todos', ['as' => 'listaPedidos']);
$routes->get('activos', 'Pedido::activos', ['as' => 'listaPedidosActivos']);
$routes->get('finalizados', 'Pedido::finalizados', ['as' => 'listaPedidosFinalizados']);
$routes->get('cancelados', 'Pedido::cancelados', ['as' => 'listaPedidosCancelados']);
$routes->get('list', 'Pedido::todos', ['as' => 'listaPresupuestos']);
$routes->get('listActivos', 'Pedido::activos', ['as' => 'listaPresupuestosActivos']);
$routes->get('listFinalizados', 'Pedido::finalizados', ['as' => 'listaFinalizados']);
$routes->get('listCancelados', 'Pedido::cancelados', ['as' => 'listaCancelados']);
$routes->post('datatable', 'Pedido::datatable', ['as' => 'dataTableOfPedidos']);
$routes->get('add', 'Pedido::add', ['as' => 'nuevoPedido']);
$routes->post('add', 'Pedido::add', ['as' => 'crearPedido']);
@ -499,29 +639,20 @@ $routes->group('pedidos', ['namespace' => 'App\Controllers\Pedidos'], function (
$routes->post('getlineas', 'Pedido::getLineas', ['as' => 'tablaLineasPedido']);
$routes->post('cambiarestado', 'Pedido::cambiarEstado', ['as' => 'cambiarEstadoPedido']);
$routes->post('update/(:any)', 'Pedido::update/$1', ['as' => 'actualizarPedido']);
$routes->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->get('pedidosCliente', 'Pedido::tablaClienteForm');
$routes->get('getSumCliente/(:num)', 'Pedido::obtenerTotalPedidosCliente/$1');
$routes->get('validacion', 'Pedido::validacion', ['as' => 'validacionView']);
});
$routes->resource('pedidos', ['namespace' => 'App\Controllers\Pedidos', 'controller' => 'Pedido', 'except' => 'show,new,create,update']);
$routes->group('albaranes', ['namespace' => 'App\Controllers\Albaranes'], function ($routes) {
$routes->post('generarAlbaran', 'Albaran::generateAlbaran', ['as' => 'generarAlbaran']);
$routes->get('albaranesEnvio', 'Albaran::getAlbaranes');
$routes->get('datatablesAlbaranLinea', 'Albaran::datatablesLineasAlbaran');
$routes->post('updateAlbaran', 'Albaran::updateAlbaran');
$routes->post('borrarAlbaranLinea', 'Albaran::borrarLinea');
$routes->post('borrarAlbaran', 'Albaran::borrarAlbaran');
$routes->post('updateAlbaranLinea', 'Albaran::updateAlbaranLinea');
$routes->post('addIvaAlbaran', 'Albaran::addLineasIva');
$routes->post('nuevaLineaAlbaran', 'Albaran::addBlankLineaAlbaran');
$routes->get('datatable', 'Albaran::datatable', ['as' => 'dataTableOfAlbaranes']);
$routes->get('getAlbaran', 'Albaran::getAlbaran');
$routes->get('edit/(:num)', 'Albaran::editAlbaran/$1', ['as' => 'editarAlbaran']);
$routes->group('albaranes', ['namespace' => 'App\Controllers\Pedidos'], function ($routes) {
$routes->post('add', 'Albaran::add', ['as' => 'crearAlbaranesPedido']);
$routes->post('update/(:any)', 'Albaran::update/$1', ['as' => 'actualizarAlbaran']);
$routes->post('updateLinea/(:any)', 'Albaran::updateLinea/$1', ['as' => 'actualizarLineaAlbaran']);
$routes->post('deletelinea', 'Albaran::borrarlinea', ['as' => 'borrarAlbaranLinea']);
$routes->get('delete/(:any)', 'Albaran::delete/$1', ['as' => 'borrarAlbaran']);
$routes->get('getalbaranes/(:any)', 'Albaran::getAlbaranes/$1', ['as' => 'getAlbaranes']);
$routes->get('nuevalinea/(:any)', 'Albaran::addLinea/$1', ['as' => 'addAlbaranLinea']);
$routes->post('nuevalinea/(:any)', 'Albaran::addLinea/$1', ['as' => 'addIVA']);
});
$routes->resource('albaranes', ['namespace' => 'App\Controllers\Pedidos', 'controller' => 'Albaran', 'except' => 'show,new,create,update']);
@ -529,7 +660,7 @@ $routes->resource('albaranes', ['namespace' => 'App\Controllers\Pedidos', 'contr
$routes->group('facturas', ['namespace' => 'App\Controllers\Facturacion'], function ($routes) {
$routes->get('list', 'Facturas::list', ['as' => 'facturasList']);
$routes->get('datatable', 'Facturas::datatable', ['as' => 'dataTableOfFacturas']);
$routes->post('datatable', 'Facturas::datatable', ['as' => 'dataTableOfFacturas']);
$routes->get('add', 'Facturas::add', ['as' => 'newFactura']);
$routes->post('add', 'Facturas::add', ['as' => 'createFactura']);
$routes->get('edit/(:any)', 'Facturas::edit/$1', ['as' => 'editarFactura']);
@ -547,11 +678,8 @@ $routes->group('facturas', ['namespace' => 'App\Controllers\Facturacion'], funct
$routes->post('updateTotales/(:any)', 'Facturas::updateTotales/$1', ['as' => 'updateFacturaTotales']);
$routes->post('updateCabecera/(:any)', 'Facturas::updateCabecera/$1', ['as' => 'updateCabecera']);
$routes->post('datatablePagos/(:any)', 'FacturasPagos::datatable/$1', ['as' => 'dataTableOfPagosFacturas']);
$routes->post('conformarFactura', 'FacturasPagos::addPagoRectificativa');
$routes->post('editorPagos', 'FacturasPagos::datatable_editor', ['as' => 'editorOfPagosFacturas']);
$routes->post('deleteFacturaLineaPago', 'Facturas::deleteLineaPago', ['as' => 'deleteLineaPago']);
$routes->post('datatablePedidos', 'Facturas::datatablePedidos', ['as' => 'dataTableOfFacturasPedido']);
$routes->get('getdatoscliente/(:any)', 'Facturas::getDatosFacturacionClienteForm/$1');
});
@ -570,7 +698,6 @@ $routes->group(
function ($routes) {
$routes->get('index/(:num)', 'PrintAlbaranes::index/$1', ['as' => 'viewAlbaranPDF']);
$routes->get('generar/(:num)', 'PrintAlbaranes::generar/$1', ['as' => 'albaranToPdf']);
$routes->get('generar-anonimo/(:num)', 'PrintAlbaranes::generarAnonimo/$1', ['as' => 'albaranAnonimoToPdf']);
}
);
@ -600,10 +727,10 @@ $routes->group(
);
$routes->group(
'presupuestos',
'buscadorpresupuestos',
['namespace' => 'App\Controllers\Presupuestos'],
function ($routes) {
$routes->get('buscador', 'Buscador::index', ['as' => 'buscadorPresupuestosList']);
$routes->get('', 'Buscador::list', ['as' => 'buscadorPresupuestosList']);
$routes->post('datatable', 'Buscador::datatable', ['as' => 'dataTableOfBuscador']);
}
);
@ -636,275 +763,53 @@ $routes->group('mensajes', ['namespace' => 'App\Controllers\Mensajeria'], functi
$routes->post('datatable', 'TarifaAcabados::datatable', ['as' => 'tarifaAcabadoDT']);*/
});
});
$routes->group('messages', ['namespace' => 'App\Controllers\Chat'], function ($routes) {
$routes->get('datatable', 'ChatController::datatable_messages', ['as' => 'getDatatableMessages']);
$routes->get('datatable/presupuesto', 'ChatController::datatable_presupuesto_messages', ['as' => 'getDatatablePresupuestoMessages']);
$routes->get('datatable/pedido', 'ChatController::datatable_pedido_messages', ['as' => 'getDatatablePedidoMessages']);
$routes->get('datatable/factura', 'ChatController::datatable_factura_messages', ['as' => 'getDatatableFacturaMessages']);
$routes->get('datatable/ots', 'ChatController::datatable_ot_messages', ['as' => 'getDatatableOtMessages']);
$routes->get('datatable/direct', 'ChatController::datatable_direct_messages', ['as' => 'getDatatableDirectMessages']);
$routes->post('direct', 'ChatController::store_new_direct_message', ['as' => 'storeNewDirectMessage']);
$routes->post('direct/client', 'ChatController::store_new_direct_message_client', ['as' => 'storeNewDirectMessageClient']);
});
$routes->group('chat', ['namespace' => 'App\Controllers\Chat'], function ($routes) {
$routes->get('direct/(:num)', 'ChatController::get_chat_direct_view/$1', ['as' => 'getChatDirectView']);
$routes->get('presupuesto/(:num)', 'ChatController::get_chat_presupuesto_view/$1', ['as' => 'getChatPresupuestoView']);
$routes->get('pedido/(:num)', 'ChatController::get_chat_pedido_view/$1', ['as' => 'getChatPedidoView']);
$routes->get('factura/(:num)', 'ChatController::get_chat_factura_view/$1', ['as' => 'getChatFacturaView']);
$routes->get('ot/(:num)', 'ChatController::get_chat_ot_view/$1', ['as' => 'getChatOtView']);
$routes->get('direct/conversation/(:num)', 'ChatController::get_chat_direct/$1', ['as' => 'getChatDirect']);
$routes->get('direct/users/select/(:num)', 'ChatController::get_chat_direct_select_users/$1', ['as' => 'getChatDirectSelectUsers']);
$routes->get('direct/client/users/select/presupuesto/(:num)', 'ChatController::get_presupuesto_client_users/$1/$2', ['as' => 'getPresupuestoClientUsers']);
$routes->get('direct/client/users/select/pedido/(:num)', 'ChatController::get_pedido_client_users/$1/$2', ['as' => 'getPedidoClientUsers']);
$routes->get('direct/client/users/select/factura/(:num)', 'ChatController::get_factura_client_users/$1/$2', ['as' => 'getFacturaClientUsers']);
$routes->get('direct/client/users/select/ot/(:num)', 'ChatController::get_orden_trabajo_client_users/$1/$2', ['as' => 'getOrdenTrabajoClientUsers']);
$routes->get('direct/users/(:num)', 'ChatController::get_chat_direct_users', ['as' => 'getChatDirectUsers']);
$routes->post('direct/users/(:num)', 'ChatController::store_chat_direct_users/$1', ['as' => 'storeChatDirectUsers']);
$routes->get('direct/messages/(:num)', 'ChatController::get_chat_direct_messages/$1', ['as' => 'getChatDirectMessages']);
$routes->post('direct/messages/(:num)', 'ChatController::store_chat_direct_message/$1', ['as' => 'storeChatDirectMessages']);
$routes->post('direct/messages/unread/(:num)', 'ChatController::update_chat_direct_message_unread/$1', ['as' => 'updateChatDirectMessageUnread']);
$routes->post('department', 'ChatController::store_chat_department', ['as' => 'storeChatDepartment']);
$routes->delete('department/(:num)', 'ChatController::delete_chat_department/$1', ['as' => 'deleteChatDepartment']);
$routes->post('department/update/(:num)', 'ChatController::update_chat_department/$1', ['as' => 'updateChatDepartment']);
$routes->get('departments/(:alpha)/(:num)', 'ChatController::get_chat_departments/$1/$2', ['as' => 'getChatDepartments']);
$routes->get('departments/select', 'ChatController::get_chat_department_select', ['as' => 'getChatDepartmentSelect']);
$routes->get('departments', 'ChatController::get_chat_departments', ['as' => 'getChatDepartments']);
$routes->get('department/presupuesto/(:num)/(:num)', 'ChatController::get_chat_presupuesto/$1/$2', ['as' => 'getChatPresupuesto']);
$routes->get('department/pedido/(:num)/(:num)', 'ChatController::get_chat_pedido/$1/$2', ['as' => 'getChatPedido']);
$routes->get('department/factura/(:num)/(:num)', 'ChatController::get_chat_factura/$1/$2', ['as' => 'getChatFactura']);
$routes->get('department/ot/(:num)/(:num)', 'ChatController::get_chat_orden_trabajo/$1/$2', ['as' => 'getChatOrdenTrabajo']);
$routes->get('department/users/presupuesto/(:num)/(:num)', 'ChatController::get_chat_department_presupuesto_users/$1/$2', ['as' => 'getPresupuestoChatDepartmentUsers']);
$routes->get('department/users/ot/(:num)/(:num)', 'ChatController::get_chat_department_orden_trabajo_users/$1/$2', ['as' => 'getOrdenTrabajoChatDepartmentUsers']);
$routes->get('department/datatable', 'ChatController::chat_department_datatable', ['as' => 'chatDepartmentDatatable']);
$routes->get('department/edit/(:num)', 'ChatController::chat_department_edit/$1', ['as' => 'chatDepartmentEditView']);
$routes->get('department/users/datatable/(:num)', 'ChatController::chat_department_user_datatable/$1', ['as' => 'chatDepartmentUsersDatatable']);
$routes->get('department/users/pedido/(:num)/(:num)', 'ChatController::get_chat_department_pedido_users/$1/$2', ['as' => 'getPedidoChatDepartmentUsers']);
$routes->get('department/users/factura/(:num)/(:num)', 'ChatController::get_chat_department_factura_users/$1/$2', ['as' => 'getFacturaChatDepartmentUsers']);
$routes->get('department/users/select/add/(:num)', 'ChatController::select_users_not_in_chat_department/$1', ['as' => 'selectUsersNotInChatDepartment']);
$routes->post('department/user', 'ChatController::subscribe_to_chat_deparment/$1', ['as' => 'subscribeToChatDepartment']);
$routes->post('department/subscribe/admin/user', 'ChatController::subscribe_admin_to_department', ['as' => 'subscribeAdminToChatDepartment']);
$routes->delete('department/user/(:num)', 'ChatController::delete_user_from_department/$1', ['as' => 'deleteUserFromDepartment']);
$routes->delete('department/admin/user/(:num)/(:num)', 'ChatController::delete_user_admin_from_department/$1/$2', ['as' => 'deleteUserAdminFromDepartment']);
$routes->get('department/(:num)/users', 'ChatController::get_chat_department_users/$1', ['as' => 'getChatDepartmentUsers']);
$routes->get('(:num)', 'ChatController::get_chat/$1', ['as' => 'getChat']);
$routes->post('message/error/presupuesto', 'ChatController::store_chat_error_message', ['as' => 'storeChatErrorMessage']);
$routes->post('message/(:alpha)', 'ChatController::store_message/$1', ['as' => 'storeChatMessage']);
$routes->post('message/presupuesto', 'ChatController::store_chat_message_presupuesto', ['as' => 'storeChatMessagePresupuesto']);
$routes->post('message/pedido', 'ChatController::store_chat_message_pedido', ['as' => 'storeChatMessagePedido']);
$routes->post('message/factura', 'ChatController::store_chat_message_factura', ['as' => 'storeChatMessageFactura']);
$routes->post('message/internal', 'ChatController::store_chat_message_single', ['as' => 'storeChatMessageSingle']);
$routes->get('contacts', 'ChatController::get_chat_internal_contacts', ['as' => 'getChatInternalContacts']);
$routes->get('contacts/(:num)', 'ChatController::get_chat_internal_contact/$1', ['as' => 'getChatInternalContact']);
$routes->get('contact/(:num)/messages', 'ChatController::get_chat_internal_messages/$1', ['as' => 'getChatInternalMessages']);
$routes->get('notifications', 'ChatController::get_chat_cliente/$1', ['as' => 'getChatCliente']);
$routes->get('users/internal', 'ChatController::get_chat_users_internal', ['as' => 'getChatUsersInternal']);
$routes->get('users/all', 'ChatController::get_chat_users_all', ['as' => 'getChatUsersAll']);
$routes->post('hebra/(:alpha)', 'ChatController::store_hebra/$1', ['as' => 'storeHebra']);
$routes->post('hebra/presupuesto', 'ChatController::store_hebra_presupuesto', ['as' => 'storeHebraPresupuesto']);
$routes->post('hebra/pedido', 'ChatController::store_hebra_pedido', ['as' => 'storeHebraPedido']);
$routes->post('hebra/factura', 'ChatController::store_hebra_factura', ['as' => 'storeHebraFactura']);
$routes->post('hebra/(:num)', 'ChatController::update_hebra/$1', ['as' => 'updateHebra']);
$routes->get('hebra/(:alpha)/(:num)', "ChatController::get_hebra/$1/$2", ["as" => "getHebra"]);
$routes->get('users/message/notifications-unviewed/(:num)', 'ChatController::get_notifications_not_viewed_from_message/$1');
$routes->get('hebra/presupuesto/(:num)', "ChatController::get_hebra_presupuesto/$1", ["as" => "getHebraPresupuesto"]);
$routes->get('hebra/pedido/(:num)', "ChatController::get_hebra_pedido/$1", ["as" => "getHebraPedido"]);
$routes->get('hebra/factura/(:num)', "ChatController::get_hebra_factura/$1", ["as" => "getHebraFactura"]);
});
$routes->group('messages', ['namespace' => 'App\Controllers\Chat'], function ($routes) {
$routes->get('datatable', 'ChatController::datatable_messages', ['as' => 'getDatatableMessages']);
$routes->get('datatable/presupuesto', 'ChatController::datatable_presupuesto_messages', ['as' => 'getDatatablePresupuestoMessages']);
$routes->get('datatable/pedido', 'ChatController::datatable_pedido_messages', ['as' => 'getDatatablePedidoMessages']);
$routes->get('datatable/factura', 'ChatController::datatable_factura_messages', ['as' => 'getDatatableFacturaMessages']);
/*
* --------------------------------------------------------------------
* APIs Route Definitions
* --------------------------------------------------------------------
*/
$routes->post('auth/jwt', '\App\Controllers\Sistema\AuthAPIController::jwtLogin');
$routes->post('direct', 'ChatController::store_new_direct_message', ['as' => 'storeNewDirectMessage']);
$routes->post('direct/client', 'ChatController::store_new_direct_message_client', ['as' => 'storeNewDirectMessageClient']);
});
$routes->group('soporte', ['namespace' => 'App\Controllers\Soporte'], function ($routes) {
$routes->get('', 'Ticketcontroller::index', ['as' => 'TicketIndex']);
$routes->get('add', 'Ticketcontroller::add', ['as' => 'NewTicket']);
$routes->post('add', 'Ticketcontroller::add', ['as' => 'createTicket']);
$routes->get('edit/(:num)', 'Ticketcontroller::edit/$1', ['as' => 'editTicket']);
$routes->post('edit/(:num)', 'Ticketcontroller::edit/$1', ['as' => 'updateTicket']);
$routes->post('ticketlist', 'Ticketcontroller::datatable');
$routes->get('image/(:segment)', 'Ticketcontroller::image/$1');
});
$routes->group('produccion', ['namespace' => 'App\Controllers\Produccion'], function ($routes) {
$routes->group('ordentrabajo', ['namespace' => 'App\Controllers\Produccion'], function ($routes) {
/** VIEWS */
$routes->get('', 'Ordentrabajo::index', ['as' => 'viewOrdenTrabajoIndex']);
$routes->get('edit/(:num)', 'Ordentrabajo::edit/$1', ['as' => 'viewOrdenTrabajoEdit']);
/** GET */
$routes->get('summary/(:num)', 'Ordentrabajo::get_orden_trabajo_summary/$1', ['as' => 'getOrdenTrabajoSumary']);
$routes->get("tarea/progress/(:num)", "Ordentrabajo::get_orden_trabajo_progress_date/$1");
$routes->get('tarea/(:num)', 'Ordentrabajo::find_tarea/$1');
$routes->get('tarea/dates/(:num)', 'Ordentrabajo::get_orden_trabajo_tareas_dates/$1');
$routes->get('tareas/maquina/(:num)/(:num)','Ordentrabajo::get_tareas_ot_maquina/$1/$2');
/** DATATABLES */
$routes->get('datatable', 'Ordentrabajo::datatable');
$routes->get('datatable_pendientes', 'Ordentrabajo::datatable_pendientes');
$routes->get('datatable_ferro_pendiente', 'Ordentrabajo::datatable_ferro_pendiente');
$routes->get('datatable_ferro_ok', 'Ordentrabajo::datatable_ferro_ok');
$routes->get('datatable_news', 'Ordentrabajo::datatable_news');
$routes->get('datatable_prod', 'Ordentrabajo::datatable_prod');
$routes->get('datatable_waiting', 'Ordentrabajo::datatable_waiting');
$routes->get('datatable_revision_com', 'Ordentrabajo::datatable_revision_com');
$routes->get('tareas/datatable/(:num)', 'Ordentrabajo::tareas_datatable/$1', ['as' => 'datatableTareasOrdenTrabajo']);
$routes->get('maquinas/ots/datatable/(:num)','Ordentrabajo::datatable_maquina_ordenes_trabajo/$1');
$routes->get('maquinas/ots/(:num)','Ordentrabajo::get_maquina_ots/$1');
/**======================
* UPDATES
*========================**/
$routes->post("update/tarea", 'Ordentrabajo::update_orden_trabajo_tarea');
$routes->post("update/date", 'Ordentrabajo::update_orden_trabajo_date');
$routes->post("reset/date", 'Ordentrabajo::reset_orden_trabajo_date');
$routes->post("update/pedido/date", 'Ordentrabajo::update_orden_trabajo_pedido_date');
$routes->post("reset/pedido/date", 'Ordentrabajo::reset_orden_trabajo_pedido_date');
$routes->post("update/pod/pedido/date/(:num)", 'Ordentrabajo::update_pod_pedido_dates/$1');
$routes->post("update/pedido", 'Ordentrabajo::update_orden_trabajo_pedido');
$routes->post("update/user", 'Ordentrabajo::update_orden_trabajo_user');
$routes->post("update", 'Ordentrabajo::update_orden_trabajo');
$routes->post("upload/portada", 'Ordentrabajo::upload_orden_trabajo_portada');
$routes->get("color/(:num)", 'Ordentrabajo::get_orden_trabajo_color_status/$1');
$routes->post("update/tarea/progress", "Ordentrabajo::store_orden_trabajo_progress_date");
$routes->post("update/tarea/pliegos", "Ordentrabajo::update_orden_trabajo_pliegos");
$routes->post("update/tarea/proveedor", "Ordentrabajo::update_presupuesto_tarea_proveedor");
$routes->post("fa/tareas/update", 'Ordentrabajo::update_orden_trabajo_fa_tareas');
$routes->post("fa/tareas/reset",'Ordentrabajo::delete_orden_trabajo_fa_tareas');
$routes->post('maquinas/ots','Ordentrabajo::store_maquina_ordenes_trabajo');
$routes->post('maquinas/ots/estado','Ordentrabajo::update_maquina_ordenes_trabajo_estado');
/**DELETES */
$routes->delete("portada/(:num)", 'Ordentrabajo::delete_orden_trabajo_portada/$1');
$routes->delete("tarea/progress/(:num)", "Ordentrabajo::delete_orden_trabajo_progress_date/$1");
$routes->delete('reset/tareas/(:num)', 'Ordentrabajo::reset_tareas/$1');
$routes->delete('tareas/(:num)', 'Ordentrabajo::delete_tarea/$1');
$routes->delete('maquinas/ots/(:num)', 'Ordentrabajo::delete_maquina_orden_trabajo_tarea/$1');
$routes->delete('maquinas/ots/all/(:num)', 'Ordentrabajo::delete_maquina_orden_trabajo_all/$1');
/**======================
* FILES
*========================**/
$routes->post('get_files', 'Ordentrabajo::get_files');
$routes->post('upload_files', 'Ordentrabajo::upload_files');
$routes->get('barcode/(:num)', 'Ordentrabajo::imprimir_codigo_safekat/$1', ['as' => "getOrdenTrabajoBarCode"]);
/**======================
* PDF
*========================**/
$routes->get('pdf/(:num)', 'Ordentrabajo::get_pdf/$1');
$routes->get('pdf/content/(:num)', 'Ordentrabajo::get_ot_pdf_content/$1');
$routes->get('pdf/ferro/(:num)', 'Ordentrabajo::get_ferro_pdf/$1');
$routes->get('pdf/prototipo/(:num)', 'Ordentrabajo::get_prototipo_pdf/$1');
$routes->get('portada/(:num)', 'Ordentrabajo::get_portada_img/$1');
/** PLANNING */
$routes->group('planning', ['namespace' => 'App\Controllers\Produccion'], function ($routes) {
$routes->get('select/maquina/rotativa', 'Ordentrabajo::select_maquina_planning_rot');
$routes->get('select/papel/rotativa', 'Ordentrabajo::select_papel_planning_rot');
$routes->get('select/maquina/plana', 'Ordentrabajo::select_maquina_planning_plana');
$routes->get('select/maquina/padre/plana', 'Ordentrabajo::select_maquina_padre_planning_plana');
$routes->get('select/papel/plana', 'Ordentrabajo::select_papel_planning_plana');
$routes->get('rotativa', 'Ordentrabajo::index_planning_rotativa');
$routes->get('papel/datatable', 'Ordentrabajo::papel_gramaje_datatable');
$routes->get('papel/plana/datatable', 'Ordentrabajo::papel_pliego_datatable');
$routes->get('maquina/plana/datatable', 'Ordentrabajo::maquina_plana_datatable');
$routes->get('rotativa/datatable', 'Ordentrabajo::planning_rotativa_datatable');
$routes->get('plana/datatable', 'Ordentrabajo::planning_plana_datatable');
$routes->post('tarea/toggle/corte/(:num)', 'Ordentrabajo::tarea_toggle_corte/$1');
});
$routes->group('maquinista', ['namespace' => 'App\Controllers\Produccion'], function ($routes) {
/**
* VIEWS
*/
$routes->get('maquinas/view', 'Ordentrabajo::maquinista_maquinas_view', ['as' => 'viewProduccionMaquinistaMaquinas']);
$routes->get('maquinas/view/(:num)', 'Ordentrabajo::maquinista_maquina_tareas_list/$1', ['as' => 'viewProduccionMaquinaTareasList']);
$routes->get('maquinas/view/auto/(:num)', 'Ordentrabajo::maquinista_maquina_tareas_fichaje_automatico/$1', ['as' => 'viewMaquinistaFichajeAutomatico']);
$routes->get('maquinas/view/scan/(:num)', 'Ordentrabajo::maquinista_maquina_tareas_scan/$1', ['as' => 'viewMaquinistaTareaScan']);
$routes->get('maquinas/view/tarea/(:num)', 'Ordentrabajo::maquinista_maquina_tarea_view/$1', ['as' => 'viewProduccionMaquinistaTareaView']);
$routes->get('maquinas/view/maquina/ot/tareas/(:num)', 'Ordentrabajo::maquinista_maquina_ot_tareas_view/$1', ['as' => 'viewProduccionMaquinistaOtTareasView']);
$routes->get('colas/view', 'Ordentrabajo::maquinista_colas_view', ['as' => 'viewProduccionMaquinistaColas']);
/** DATATABLE */
$routes->get('maquinas/tareas/datatable/(:alpha)/(:num)', 'Ordentrabajo::maquinista_maquina_tareas_datatable/$1/$2', ['as' => 'viewMaquinistaMaquinaTareaDatatable']);
$routes->get('maquinas/tareas/aplazadas/datatable/(:num)', 'Ordentrabajo::maquinista_maquina_tareas_aplazada_datatable/$1', ['as' => 'viewMaquinistaMaquinaTareaAplazadaDatatable']);
/** POST */
$routes->post('maquinas/tareas/printLabels', 'Ordentrabajo::printPackagingLabels');
});
});
});
$routes->group('logistica', ['namespace' => 'App\Controllers\Logistica'], function ($routes) {
$routes->get('print/label/test', 'LogisticaController::print_test_label');
$routes->get('panel', 'LogisticaController::panel', ['as' => 'LogisticaPanel']);
$routes->get('envios', 'LogisticaController::gestionEnvios', ['as' => 'gestionEnvios']);
$routes->get('enviosFerros', 'LogisticaController::gestionEnviosFerros', ['as' => 'gestionEnviosFerros']);
$routes->get('etiquetasLogistica', 'LogisticaController::etiquetasLogistica', ['as' => 'etiquetasLogistica']);
$routes->get('datatableEnvios', 'LogisticaController::datatable_envios');
$routes->get('datatableLineasEnvios/(:num)', 'LogisticaController::datatable_enviosEdit/$1');
$routes->get('envio/(:num)', 'LogisticaController::editEnvio/$1');
$routes->get('selectAddLinea', 'LogisticaController::selectAddEnvioLinea');
$routes->get('addLineaEnvio', 'LogisticaController::addEnvioLinea');
$routes->post('updateCajaLinea', 'LogisticaController::setCajaLinea');
$routes->post('deleteLineasEnvio', 'LogisticaController::deleteLineas');
$routes->post('updateLineaEnvio', 'LogisticaController::updateLineaEnvio');
$routes->post('updateComentariosEnvio', 'LogisticaController::saveComments');
$routes->post('updateCajasEnvio', 'LogisticaController::updateCajasEnvio');
$routes->post('updateCodigoSeguimiento', 'LogisticaController::updateCodigoSeguimiento');
$routes->post('updateProveedorEnvio', 'LogisticaController::updateProveedorEnvio');
$routes->post('finalizarEnvio', 'LogisticaController::finalizarEnvio');
$routes->post('generateEnvio', 'LogisticaController::generarEnvio');
$routes->post('generateEnvioFerro', 'LogisticaController::generarEnvioFerro');
$routes->get('selectForNewEnvio', 'LogisticaController::findForNewEnvio');
$routes->get('selectDireccionForEnvio', 'LogisticaController::selectDireccionForEnvio');
$routes->post('imprimirEtiquetas', 'LogisticaController::imprimirEtiquetas');
$routes->post('ficharEmbalaje', 'LogisticaController::ficharEmbalaje');
$routes->get('datatableProximosEnvios/(:num)', 'LogisticaController::datatable_proximosEnvios/$1');
$routes->get('listAlbaranes', 'LogisticaController::listAlbaranes', ['as' => 'albaranesList']);
});
$routes->group('etiquetasTitulos', ['namespace' => 'App\Controllers\Logistica'], function ($routes) {
$routes->get('otList', 'EtiquetasTitulosController::findOTs');
$routes->get('addList', 'EtiquetasTitulosController::findAddresses');
$routes->post('newEtiquetaTitulos', 'EtiquetasTitulosController::addEtiqueta');
$routes->get('datatable', 'EtiquetasTitulosController::datatable');
$routes->post('delete', 'EtiquetasTitulosController::deleteEtiqueta');
$routes->get('edit/(:num)', 'EtiquetasTitulosController::edit/$1');
$routes->get('datatableLineas/(:num)', 'EtiquetasTitulosController::datatableLineasEtiquetas/$1');
$routes->get('findOts', 'EtiquetasTitulosController::findOtsWithAddress');
$routes->post('addLineas', 'EtiquetasTitulosController::addLineasEtiqueta');
$routes->post('deleteLineas', 'EtiquetasTitulosController::deleteLineasEtiqueta');
$routes->post('updateLineas', 'EtiquetasTitulosController::updateLineasEtiqueta');
$routes->post('updateComentarios', 'EtiquetasTitulosController::updateComentarios');
$routes->post('updateOrdenCajas', 'EtiquetasTitulosController::updateOrdenCajas');
$routes->post('renumber', 'EtiquetasTitulosController::renumberCajas');
$routes->post('imprimirEtiquetas', 'EtiquetasTitulosController::imprimirEtiquetas');
$routes->group('api', ['filter' => 'jwt'], static function ($routes) {
$routes->get('test', 'Test::echo');
// ...
});
/*
* --------------------------------------------------------------------
* Translation
* Translation
* --------------------------------------------------------------------
*/
$routes->group('translate', ['namespace' => 'App\Controllers'], function ($routes) {
$routes->post('getTranslation', 'Language::getTranslation', ['as' => 'getKeys']);
$routes->get('lang/(:segment)', 'Language::file/$1');
});
$routes->resource('translate', ['namespace' => 'App\Controllers', 'controller' => 'Language', 'except' => '']);
@ -924,4 +829,4 @@ $routes->resource('translate', ['namespace' => 'App\Controllers', 'controller' =
*/
if (file_exists(APPPATH . 'Config/' . ENVIRONMENT . '/Routes.php')) {
require APPPATH . 'Config/' . ENVIRONMENT . '/Routes.php';
}
}

View File

@ -1,27 +0,0 @@
<?php
use CodeIgniter\Router\RouteCollection;
/** @var RouteCollection $routes */
/*
* --------------------------------------------------------------------
* APIs Route Definitions
* --------------------------------------------------------------------
*/
$routes->post('auth/jwt', '\App\Controllers\Sistema\AuthAPIController::jwtLogin');
$routes->group(
'api',
[
'namespace' => 'App\Controllers\API',
'filter' => 'jwt'
],
static function ($routes) {
$routes->post("calcular", 'ImprimelibrosApi::calcular');
$routes->post("guardar", 'ImprimelibrosApi::guardar');
// ...
}
);

View File

@ -1,30 +0,0 @@
<?php
use CodeIgniter\Router\RouteCollection;
/** @var RouteCollection $routes */
/* Rutas para tarifas */
$routes->group('catalogo', ['namespace' => 'App\Controllers\Catalogo'], function ($routes) {
/* Libros */
$routes->group('libros', ['namespace' => 'App\Controllers\Catalogo'], function ($routes) {
/**======================
* CRUD
*========================**/
$routes->get('', 'CatalogoLibros::index', ['as' => 'catalogoLibrosList']);
$routes->get('gettarifas', 'CatalogoLibros::getSelect2');
$routes->match(['get', 'post'], 'add', 'CatalogoLibros::add', ['as' => 'catalogoLibrosAdd']);
$routes->match(['get', 'post'], 'edit/(:num)', 'CatalogoLibros::edit/$1', ['as' => 'catalogoLibrosEdit']);
$routes->get('delete/(:num)', 'CatalogoLibros::delete/$1', ['as' => 'catalogoLibrosDelete']);
$routes->get('datatable', 'CatalogoLibros::datatable', ['as' => 'catalogoLibrosDT']);
/**======================
* AJAX
*========================**/
$routes->get('clientlist', 'CatalogoLibros::getClientList', ['as' => 'catalogoLibrosClientList']);
$routes->get('pedidosAntiguos', 'CatalogoLibros::datatablePedidosAntiguos', ['as' => 'catalogoLibrosPedidosAntiguosDT']);
});
});

View File

@ -1,28 +0,0 @@
<?php
use CodeIgniter\Router\RouteCollection;
/** @var RouteCollection $routes */
/* Compras */
$routes->group('compras', ['namespace' => 'App\Controllers\Compras'], function ($routes) {
$routes->group('proveedores', ['namespace' => 'App\Controllers\Compras'], function ($routes) {
$routes->get('', 'Proveedores::index', ['as' => 'proveedorList']);
$routes->get('add', 'Proveedores::add', ['as' => 'newProveedor']);
$routes->post('add', 'Proveedores::add', ['as' => 'createProveedor']);
$routes->post('create', 'Proveedores::create', ['as' => 'ajaxCreateProveedor']);
$routes->put('(:num)/update', 'Proveedores::update/$1', ['as' => 'ajaxUpdateProveedor']);
$routes->get('edit/(:num)', 'Proveedores::edit/$1', ['as' => 'editProveedor']);
$routes->post('edit/(:num)', 'Proveedores::edit/$1', ['as' => 'updateProveedor']);
$routes->post('datatable', 'Proveedores::datatable', ['as' => 'dataTableOfProveedores']);
$routes->get('delete/(:num)', 'Proveedores::delete/$1', ['as' => 'deleteProveedores']);
$routes->post('allmenuitems', 'Proveedores::allItemsSelect', ['as' => 'select2ItemsOfProveedores']);
$routes->post('menuitems', 'Proveedores::menuItems', ['as' => 'menuItemsOfProveedores']);
$routes->get('getProveedores', 'Proveedores::getForSelect');
});
});
$routes->group('proveedorestipos', ['namespace' => 'App\Controllers\Compras'], function ($routes) {
$routes->post('menuitems', 'ProveedoresTipos::menuItems', ['as' => 'menuItemsOfProveedoresTipos']);
});

View File

@ -1,162 +0,0 @@
<?php
use CodeIgniter\Router\RouteCollection;
/** @var RouteCollection $routes */
/* Rutas para configuraciones */
$routes->group('configuracion', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
/* Paises */
$routes->group('paises', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'Paises::index', ['as' => 'paisList']);
$routes->get('add', 'Paises::add', ['as' => 'newPais']);
$routes->post('add', 'Paises::add', ['as' => 'createPais']);
$routes->get('delete/(:num)', 'Paises::delete/$1');
$routes->post('create', 'Paises::create', ['as' => 'ajaxCreatePais']);
$routes->put('update/(:num)', 'Paises::update/$1', ['as' => 'ajaxUpdatePais']);
$routes->match(['get', 'post'], 'edit/(:num)', 'Paises::edit/$1', ['as' => 'updatePais']);
$routes->get('datatable', 'Paises::datatable', ['as' => 'dataTableOfPaises']);
$routes->post('allmenuitems', 'Paises::allItemsSelect', ['as' => 'select2ItemsOfPaises']);
$routes->post('menuitems', 'Paises::menuItems', ['as' => 'menuItemsOfPaises']);
$routes->get('menuitems2', 'Paises::menuItems2', ['as' => 'menuItemsOfPaises2']);
});
/* Papeles genericos */
$routes->group('papelesgenericos', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'Papelesgenericos::index', ['as' => 'papelGenericoList']);
$routes->delete('', 'Papelesgenericos::index', ['as' => 'papelGenericoList2']);
$routes->get('add', 'Papelesgenericos::add', ['as' => 'newPapelGenerico']);
$routes->post('add', 'Papelesgenericos::add', ['as' => 'createPapelGenerico']);
$routes->post('create', 'Papelesgenericos::create', ['as' => 'ajaxCreatePapelGenerico']);
$routes->put('(:num)/update', 'Papelesgenericos::update/$1', ['as' => 'ajaxUpdatePapelGenerico']);
$routes->match(['get', 'post'], 'edit/(:num)', 'Papelesgenericos::edit/$1', ['as' => 'updatePapelGenerico']);
$routes->post('datatable', 'Papelesgenericos::datatable', ['as' => 'dataTableOfPapelesGenericos']);
$routes->post('allmenuitems', 'Papelesgenericos::allItemsSelect', ['as' => 'select2ItemsOfPapelesGenericos']);
$routes->post('menuitems', 'Papelesgenericos::menuItems', ['as' => 'menuItemsOfPapelesGenericos']);
$routes->get('getpapelcliente', 'Papelesgenericos::getPapelCliente', ['as' => 'getPapelCliente']);
$routes->get('selectpapelespecial', 'Papelesgenericos::selectPapelEspecial', ['as' => 'selectPapelEspecial']);
});
/* Papeles impresion */
$routes->group('papelesimpresion', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'Papelesimpresion::index', ['as' => 'papelImpresionList']);
$routes->get('add', 'Papelesimpresion::add', ['as' => 'newPapelImpresion']);
$routes->post('add', 'Papelesimpresion::add', ['as' => 'createPapelImpresion']);
$routes->post('create', 'Papelesimpresion::create', ['as' => 'ajaxCreatePapelImpresion']);
$routes->put('(:num)/update', 'Papelesimpresion::update/$1', ['as' => 'ajaxUpdatePapelImpresion']);
$routes->match(['get', 'post'], 'edit/(:num)', 'Papelesimpresion::edit/$1', ['as' => 'updatePapelImpresion']);
$routes->post('datatable', 'Papelesimpresion::datatable', ['as' => 'dataTableOfPapelesImpresion']);
$routes->post('allmenuitems', 'Papelesimpresion::allItemsSelect', ['as' => 'select2ItemsOfPapelesImpresion']);
$routes->post('menuitems', 'Papelesimpresion::menuItems', ['as' => 'menuItemsOfPapelesImpresion']);
$routes->post('duplicate/(:num)', 'Papelesimpresion::duplicate/$1', ['as' => 'duplicatePapelImpresion']);
$routes->get('select', 'Papelesimpresion::papel_impresion_select', ['as' => 'papelImpresionSelect']);
$routes->get('show/(:num)', 'Papelesimpresion::papel_impresion_find/$1', ['as' => 'showPapelImpresion']);
});
/* Maquinas */
$routes->group('maquinas', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'Maquinas::index', ['as' => 'maquinaList']);
$routes->get('add', 'Maquinas::add', ['as' => 'newMaquina']);
$routes->get('edit/(:num)', 'Maquinas::edit/$1');
$routes->get('delete/(:num)', 'Maquinas::delete/$1');
$routes->post('add', 'Maquinas::add', ['as' => 'createMaquina']);
$routes->post('create', 'Maquinas::create', ['as' => 'ajaxCreateMaquina']);
$routes->put('update/(:num)', 'Maquinas::update/$1', ['as' => 'ajaxUpdateMaquina']);
$routes->match(['get', 'post'], 'edit/(:num)', 'Maquinas::edit/$1', ['as' => 'updateMaquina']);
$routes->post('datatable', 'Maquinas::datatable', ['as' => 'dataTableOfMaquinas']);
$routes->post('allmenuitems', 'Maquinas::allItemsSelect', ['as' => 'select2ItemsOfMaquinas']);
$routes->post('menuitems', 'Maquinas::menuItems', ['as' => 'menuItemsOfMaquinas']);
$routes->post('duplicate/(:num)', 'Maquinas::duplicate/$1', ['as' => 'duplicateMaquina']);
$routes->get('(:num)', 'Maquinas::find_maquina/$1', ['as' => 'findMaquina']);
$routes->get('select', 'Maquinas::select', ['as' => 'selectMaquinas']);
});
/* Maquinas por defecto */
$routes->group('maquinasdefecto', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'Maquinasdefecto::index', ['as' => 'maquinaPorDefectoList']);
$routes->get('add', 'Maquinasdefecto::add', ['as' => 'newMaquinaPorDefecto']);
$routes->post('add', 'Maquinasdefecto::add', ['as' => 'createMaquinaPorDefecto']);
$routes->post('create', 'Maquinasdefecto::create', ['as' => 'ajaxCreateMaquinaPorDefecto']);
$routes->put('(:num)/update', 'Maquinasdefecto::update/$1', ['as' => 'ajaxUpdateMaquinaPorDefecto']);
$routes->match(['get', 'post'], 'edit/(:num)', 'Maquinasdefecto::edit/$1', ['as' => 'updateMaquinaPorDefecto']);
$routes->post('datatable', 'Maquinasdefecto::datatable', ['as' => 'dataTableOfMaquinasPorDefecto']);
$routes->post('allmenuitems', 'Maquinasdefecto::allItemsSelect', ['as' => 'select2ItemsOfMaquinasPorDefecto']);
$routes->post('menuitems', 'Maquinasdefecto::menuItems', ['as' => 'menuItemsOfMaquinasPorDefecto']);
});
/* Ubicaciones */
$routes->group('ubicaciones', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'Ubicaciones::index', ['as' => 'ubicacionesList']);
$routes->match(['get', 'post'], 'add', 'Ubicaciones::add', ['as' => 'ubicacionesAdd']);
$routes->match(['get', 'post'], 'edit/(:num)', 'Ubicaciones::edit/$1', ['as' => 'ubicacionesEdit']);
$routes->get('delete/(:num)', 'Ubicaciones::delete/$1', ['as' => 'ubicacionesDelete']);
$routes->post('datatable', 'Ubicaciones::datatable', ['as' => 'ubicacionesDT']);
});
/* Permisos y roles */
$routes->group('group', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'Group::index', ['as' => 'userGroupList']);
$routes->get('index', 'Group::index', ['as' => 'groupIndex']);
$routes->post('edit/(:num)', 'Group::edit/$1', ['as' => 'updateGroup']);
$routes->get('edit/(:num)', 'Group::edit/$1', ['as' => 'editGroup']);
$routes->get('delete/(:num)', 'Group::delete/$1', ['as' => 'deleteGroup']);
$routes->get('add', 'Group::add', ['as' => 'newGroup']);
$routes->post('add', 'Group::add', ['as' => 'createGroup']);
});
/* Series Factura */
$routes->group('series-facturas', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'SeriesFacturas::index', ['as' => 'seriesFacturasList']);
$routes->match(['get', 'post'], 'add', 'SeriesFacturas::add', ['as' => 'seriesFacturasAdd']);
$routes->match(['get', 'post'], 'edit/(:num)', 'SeriesFacturas::edit/$1', ['as' => 'seriesFacturasEdit']);
$routes->get('delete/(:num)', 'SeriesFacturas::delete/$1', ['as' => 'seriesFacturasDelete']);
$routes->post('datatable', 'SeriesFacturas::datatable', ['as' => 'seriesFacturasDT']);
$routes->post('menuitemsFacturas', 'SeriesFacturas::menuItemsFacturas', ['as' => 'menuItemsOfSeriesFacturas']);
});
/* Variables del sistema */
$routes->group("variables", ["namespace" => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'ConfigVariables::index', ['as' => 'variablesIndex']);
$routes->get('find/(:num)', 'ConfigVariables::get/$1', ['as' => 'variablesFind']);
$routes->post('edit/(:num)', 'ConfigVariables::updateVariable/$1', ['as' => 'updateVariable']);
$routes->delete('delete/(:num)', 'ConfigVariables::delete/$1', ['as' => 'deleteVariable']);
$routes->get('datatable', 'ConfigVariables::datatable', ['as' => 'datatableVariables']);
});
/* Errores en presupuestos */
$routes->group("errores-presupuesto", ["namespace" => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'ConfigErrores::index', ['as' => 'erroresPresupuestoIndex']);
$routes->get('edit/(:num)', 'ConfigErrores::viewForm/$1', ['as' => 'erroresPresupuestoViewForm']);
$routes->get('get/(:num)', 'ConfigErrores::get_error_presupuesto/$1', ['as' => 'erroresPresupuestoGetErrorPresupuesto']);
$routes->get('datatable', 'ConfigErrores::datatable', ['as' => 'erroresPresupuestoDatatable']);
$routes->post('edit/(:num)', 'ConfigErrores::update_error_presupuesto/$1', ['as' => 'erroresPresupuestoUpdate']);
});
$routes->group("maquina-tareas", ["namespace" => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'MaquinaTarea::index', ['as' => 'maquinaTareaList']);
$routes->get('(:num)', 'MaquinaTarea::show/$1', ['as' => 'maquinaTareaShow']);
$routes->delete('(:num)', 'MaquinaTarea::delete/$1', ['as' => 'maquinaTareaDelete']);
$routes->post('', 'MaquinaTarea::store/$1', ['as' => 'maquinaTareaStore']);
$routes->post('update/(:num)', 'MaquinaTarea::update_servicio_cliente/$1', ['as' => 'maquinaTareaUpdate']);
$routes->get('edit/(:num)', 'MaquinaTarea::viewForm/$1', ['as' => 'maquinaTareaViewForm']);
$routes->get('datatable', 'MaquinaTarea::datatable', ['as' => 'maquinaTareaDatatable']);
});
$routes->group("messages", ["namespace" => 'App\Controllers\Chat'], function ($routes) {
$routes->get('', 'ChatController::config_view', ['as' => 'configMessagesIndex']);
});
/* Festivos */
$routes->group("festivos", ["namespace" => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'FestivoController::index', ['as' => 'festivosList']);
$routes->post('', 'FestivoController::store_festivo_date', ['as' => 'storeFestivoDate']);
$routes->delete('(:num)', 'FestivoController::delete_festivo_date/$1', ['as' => 'deleteFestivoDate']);
$routes->get('all', 'FestivoController::find_all', ['as' => 'getFindAllFestivos']);
});
});

View File

@ -1,39 +0,0 @@
<?php
use CodeIgniter\Router\RouteCollection;
/** @var RouteCollection $routes */
/* Rutas para tarifas */
$routes->group('importador', ['namespace' => 'App\Controllers\Importadores'], function ($routes) {
/* Desde Catalogo */
$routes->group('catalogo', ['namespace' => 'App\Controllers\Importadores'], function ($routes) {
/**======================
* Tool
*========================**/
$routes->get('', 'ImportadorCatalogo::index', ['as' => 'importadorCatalogoTool']);
/**======================
* AJAX
*========================**/
$routes->post('validar-fila', 'ImportadorCatalogo::validarFila');
$routes->post('importar-fila', 'ImportadorCatalogo::importarFila');
});
/* Desde Cliente Bubok */
$routes->group('bubok', ['namespace' => 'App\Controllers\Importadores'], function ($routes) {
/**======================
* Tool
*========================**/
$routes->get('', 'ImportadorBubok::index', ['as' => 'importadorBubokTool']);
/**======================
* AJAX
*========================**/
$routes->post('validar-fila', 'ImportadorBubok::validarFila');
$routes->post('importar-fila', 'ImportadorBubok::importarFila');
});
});

View File

@ -1,72 +0,0 @@
<?php
use CodeIgniter\Router\RouteCollection;
/** @var RouteCollection $routes */
$routes->group('presupuestoadmin', ['namespace' => 'App\Controllers\Presupuestos'], function ($routes) {
$routes->get('list/(:num)', 'Presupuestoadmin::list/$1', ['as' => 'presupuestoAdminList']); // HOMOGENIZAR CON ARGS DINAMICOS!!!
$routes->get('add/(:num)', 'Presupuestoadmin::add/$1', ['as' => 'newPresupuestoAdmin']);
$routes->get('edit/(:any)', 'Presupuestoadmin::edit/$1', ['as' => 'editarPresupuestoAdmin']);
$routes->post('add/(:num)', 'Presupuestoadmin::add/$1', ['as' => 'createPresupuestoAdmin']);
$routes->post('create', 'Presupuestoadmin::create', ['as' => 'ajaxCreatePresupuestoAdmin']);
$routes->put('(:num)/update', 'Presupuestoadmin::update/$1', ['as' => 'ajaxUpdatePresupuestoAdmin']);
$routes->post('edit/(:num)', 'Presupuestoadmin::edit/$1', ['as' => 'updatePresupuestoAdmin']);
$routes->post('datatable', 'Presupuestoadmin::datatable', ['as' => 'dataTableOfPresupuestoAdmin']);
$routes->post('datatable_2', 'Presupuestoadmin::datatable_2', ['as' => 'updateDataOfPresupuestoAdmin']);
$routes->post('allmenuitems', 'Presupuestoadmin::allItemsSelect', ['as' => 'select2ItemsOfPresupuestoAdmin']);
$routes->post('menuitems', 'Presupuestoadmin::menuItems', ['as' => 'menuItemsOfPresupuestoAdmin']);
$routes->get('checklomointerior', 'Presupuestoadmin::checkLomo');
$routes->get('cargar/(:any)', 'Presupuestoadmin::cargar/$1');
$routes->post('comparadorinterior', 'Presupuestoadmin::obtenerComparadorInterior');
$routes->post('comparadorexteriores', 'Presupuestoadmin::obtenerComparadorExteriores');
$routes->post('comparadorguardas', 'Presupuestoadmin::obtenerComparadorGuardas');
$routes->get('papelgenerico', 'Presupuestoadmin::getPapelGenerico');
$routes->get('papelgramaje', 'Presupuestoadmin::getGramaje');
$routes->get('papelimpresion', 'Presupuestoadmin::getPapelImpresion');
$routes->get('maquinas', 'Presupuestoadmin::getMaquinas');
$routes->post('getlinea', 'Presupuestoadmin::getLineaPresupuesto');
$routes->post('clone', 'Presupuestoadmin::datatable_2');
$routes->get('presupuestosCliente', 'Presupuestoadmin::tablaClienteForm');
$routes->get('getSumCliente/(:num)', 'Presupuestoadmin::obtenerTotalPresupuestosCliente/$1');
$routes->get('hasFiles', 'Presupuestoadmin::hasFiles');
$routes->post('reprint', 'Presupuestoadmin::reprintPresupuesto');
$routes->post('download_zip', 'Presupuestocliente::download_zip', ['as' => 'descargarAdminArchivos']);
});
//$routes->resource('presupuestoadmin', ['namespace' => 'App\Controllers\Presupuestos', 'controller' => 'Presupuestoadmin', 'except' => 'show,new,create,update']);
$routes->group('presupuestocliente', ['namespace' => 'App\Controllers\Presupuestos'], function ($routes) {
$routes->get('list', 'Presupuestocliente::list', ['as' => 'listaPresupuestos']);
$routes->post('datatable', 'Presupuestocliente::datatable', ['as' => 'datatableOfPresupuestos']);
$routes->get('add', 'Presupuestocliente::add', ['as' => 'nuevoPresupuestoCliente']);
$routes->post('add', 'Presupuestocliente::add', ['as' => 'crearPresupuestoCliente']);
$routes->post('edit/(:num)', 'Presupuestocliente::edit/$1', ['as' => 'editarPresupuestoCliente']);
$routes->get('edit/(:any)', 'Presupuestocliente::edit/$1', ['as' => 'editarPresupuestoCliente2']);
$routes->post('getgramaje', 'Presupuestocliente::getGramaje', ['as' => 'obtenerGramaje']);
$routes->post('presupuesto', 'Presupuestocliente::presupuesto', ['as' => 'presupuestoCliente']);
$routes->post('getDireccionesCliente', 'Presupuestocliente::getDireccionesCliente', ['as' => 'getDirecciones']);
$routes->post('getNuevaDireccion', 'Presupuestocliente::getNuevaDireccion', ['as' => 'nuevaDireccion']);
$routes->post('guardar', 'Presupuestocliente::guardar', ['as' => 'guardar']);
$routes->get('cargar/(:num)', 'Presupuestocliente::cargar/$1', ['as' => 'cargarPresupuesto']);
$routes->post('duplicarPresupuesto', 'Presupuestocliente::duplicarPresupuesto', ['as' => 'duplicarPresupuesto']);
$routes->post('calcular', 'Presupuestocliente::calcular', ['as' => 'calcularPresupuesto']);
$routes->post('calcularsolapas', 'Presupuestocliente::calcularMaxSolapas', ['as' => 'calcularSolapas']);
$routes->post('checklomo', 'Presupuestocliente::check_lomo_interior');
$routes->post('download_zip', 'Presupuestocliente::download_zip', ['as' => 'descargarClienteArchivos']);
});
//$routes->resource('presupuestocliente', ['namespace' => 'App\Controllers\Presupuestos', 'controller' => 'Presupuestocliente', 'except' => 'show,new,create,update']);
$routes->group('importador', ['namespace' => 'App\Controllers\Presupuestos'], function ($routes) {
$routes->get('', 'Importadorpresupuestos::index', ['as' => 'importadorPresupuestos']);
$routes->get('clientlist', 'Importadorpresupuestos::getClientList', ['as' => 'clientList']);
$routes->get('presupuestoslist', 'Importadorpresupuestos::getPresupuestosList', ['as' => 'presupuestosList']);
$routes->get('getencuadernacion', 'Importadorpresupuestos::getEncuadernacionList');
$routes->get('getpresupuestodata', 'Importadorpresupuestos::getPresupuesto', ['as' => 'getPresupuesto']);
$routes->post('importar', 'Importadorpresupuestos::importarPresupuesto');
});

View File

@ -1,13 +0,0 @@
<?php
use CodeIgniter\Router\RouteCollection;
/** @var RouteCollection $routes */
/* Rutas para tarifas */
$routes->group('scripts', ['namespace' => 'App\Controllers\Scripts'], function ($routes) {
//$routes->get('completar-identidades', 'UsersIntegrity::completarIdentidades');
});

View File

@ -1,35 +0,0 @@
<?php
use CodeIgniter\Router\RouteCollection;
/** @var RouteCollection $routes */
/* Rutas para tarifas */
$routes->group('sistema', ['namespace' => 'App\Controllers\Sistema'], function ($routes) {
/* Actividad */
$routes->group('actividad', ['namespace' => 'App\Controllers\Sistema'], function ($routes) {
/**======================
* CRUD
*========================**/
$routes->get('', 'Actividad::index', ['as' => 'activityList']);
$routes->post('datatable', 'Actividad::datatable', ['as' => 'activityDT']);
});
/* Backups */
$routes->group('backups', function ($routes) {
/**======================
* Tool
*========================**/
$routes->get('', 'Backups::index', ['as' => 'backupsList']);
$routes->get('create', 'Backups::create', ['as' => 'backupsCreate']);
$routes->get('create-dev', 'Backups::createDevelopment', ['as' => 'backupsCreateDev']);
$routes->get('backups/download/(:segment)', 'Backups::download/$1', ['as' => 'backupsDownload']);
$routes->get('delete-local/(:num)', 'Backups::deleteLocal/$1', ['as' => 'backupsDeleteLocal']);
$routes->get('delete-local-dev/(:segment)', 'Backups::deleteLocalDevelopment/$1', ['as' => 'backupsDeleteLocalDev']);
$routes->get('restore/(:segment)/local', 'Backups::restoreLocal/$1', ['as' => 'backupsRestoreLocal']);
$routes->get('restore/(:segment)/remote', 'Backups::restoreRemote/$1', ['as' => 'backupsRestoreRemote']);
});
});

View File

@ -1,55 +0,0 @@
<?php
use CodeIgniter\Router\RouteCollection;
/** @var RouteCollection $routes */
/* Rutas para tarifas */
$routes->group('tarifas', ['namespace' => 'App\Controllers\Tarifas'], function ($routes) {
/* Maquinas */
$routes->group('maquinas', ['namespace' => 'App\Controllers\Tarifas\Maquinas'], function ($routes) {
$routes->post('acabado', 'TarifaMaquinas::add_tarifa_acabado_maquina_with_tarea');
$routes->post('manipulado', 'TarifaMaquinas::add_tarifa_manipulado_maquina_with_tarea');
$routes->post('preimpresion', 'TarifaMaquinas::add_tarifa_preimpresion_maquina_with_tarea');
$routes->post('encuadernacion', 'TarifaMaquinas::add_tarifa_encuadernacion_maquina_with_tarea');
$routes->post('extra', 'TarifaMaquinas::add_tarifa_extra_maquina_with_tarea');
$routes->delete('acabado/(:num)', 'TarifaMaquinas::delete_tarifa_acabado_maquina_with_tarea/$1');
$routes->delete('manipulado/(:num)', 'TarifaMaquinas::delete_tarifa_manipulado_maquina_with_tarea/$1');
$routes->delete('preimpresion/(:num)', 'TarifaMaquinas::delete_tarifa_preimpresion_maquina_with_tarea/$1');
$routes->delete('encuadernacion/(:num)', 'TarifaMaquinas::delete_tarifa_encuadernacion_maquina_with_tarea/$1');
$routes->delete('extra/(:num)', 'TarifaMaquinas::delete_tarifa_extra_maquina_with_tarea/$1');
$routes->get('acabado/select', 'TarifaMaquinas::get_select_maquina_acabado');
$routes->get('manipulado/select', 'TarifaMaquinas::get_select_maquina_manipulado');
$routes->get('impresion/select', 'TarifaMaquinas::get_select_maquina_impresion');
$routes->get('encuadernacion/select', 'TarifaMaquinas::get_select_maquina_manipulado');
$routes->get('tareas/select', 'TarifaMaquinas::get_select_maquina_tareas');
$routes->get('acabado/datatable/(:num)', 'TarifaMaquinas::get_datatable_tarifa_acabado_maquina/$1');
$routes->get('manipulado/datatable/(:num)', 'TarifaMaquinas::get_datatable_tarifa_manipulado_maquina/$1');
$routes->get('preimpresion/datatable/(:num)', 'TarifaMaquinas::get_datatable_tarifa_preimpresion_maquina/$1');
$routes->get('encuadernacion/datatable/(:num)', 'TarifaMaquinas::get_datatable_tarifa_encuadernacion_maquina/$1');
$routes->get('extra/datatable/(:num)', 'TarifaMaquinas::get_datatable_tarifa_extra_maquina/$1');
});
/* Acabados */
$routes->group('acabados', ['namespace' => 'App\Controllers\Tarifas\Acabados'], function ($routes) {
$routes->get('', 'TarifaAcabados::index', ['as' => 'tarifaAcabadoList']);
$routes->get('gettarifas', 'TarifaAcabados::getSelect2');
$routes->match(['get', 'post'], 'add', 'TarifaAcabados::add', ['as' => 'tarifaAcabadoAdd']);
$routes->match(['get', 'post'], 'edit/(:num)', 'TarifaAcabados::edit/$1', ['as' => 'tarifaAcabadoEdit']);
$routes->get('delete/(:num)', 'TarifaAcabados::delete/$1', ['as' => 'tarifaAcabadoDelete']);
$routes->post('datatable', 'TarifaAcabados::datatable', ['as' => 'tarifaAcabadoDT']);
$routes->get('select', 'TarifaAcabados::show_select', ["as" => "showSelectTarifaAcabado"]);
$routes->group('lineas', ['namespace' => 'App\Controllers\Tarifas\Acabados'], function ($routes) {
$routes->post('datatable', 'TarifaAcabadosLineas::datatable', ['as' => 'tarifaAcabadoLineasDT']);
$routes->post('datatable_editor', 'TarifaAcabadosLineas::datatable_editor', ['as' => 'tarifaAcabadoLineasDTE']);
$routes->get('delete/(:num)', 'TarifaAcabadosLineas::delete/$1', ['as' => 'tarifaAcabadoLineasDelete']);
});
});
});

3
ci4/app/Config/Routing.php Executable file → Normal file
View File

@ -27,7 +27,6 @@ class Routing extends BaseRouting
*/
public array $routeFiles = [
APPPATH . 'Config/Routes.php',
APPPATH . 'Config/Wiki/WikiRoutes.php',
];
/**
@ -96,7 +95,7 @@ class Routing extends BaseRouting
*
* Default: false
*/
public bool $prioritize = true;
public bool $prioritize = false;
/**
* Map of URI segments and namespaces. For Auto Routing (Improved).

0
ci4/app/Config/Safekat.php Executable file → Normal file
View File

View File

@ -2,17 +2,8 @@
namespace Config;
use App\Services\ChatService;
use App\Services\FTPService;
use App\Services\ImpresoraEtiquetaService;
use App\Services\MaquinaService;
use App\Services\MessageService;
use App\Services\PapelImpresionService;
use CodeIgniter\Config\BaseService;
use App\Services\ProductionService;
use App\Services\TarifaMaquinaService;
use App\Services\PapelService;
use CodeIgniter\Email\Email;
/**
* Services Configuration file.
@ -39,43 +30,4 @@ class Services extends BaseService
* return new \CodeIgniter\Example();
* }
*/
public static function papel(){
return new PapelService();
}
public static function production(){
return new ProductionService();
}
public static function tarifa_maquina(){
return new TarifaMaquinaService();
}
public static function papel_impresion()
{
return new PapelImpresionService();
}
public static function maquina()
{
return new MaquinaService();
}
public static function messages()
{
return new MessageService();
}
public static function chat()
{
return new ChatService();
}
public static function impresora_etiqueta()
{
return new ImpresoraEtiquetaService();
}
public static function emailService($getShared = true)
{
if ($getShared) {
return static::getSharedInstance('emailService');
}
return new \App\Services\EmailService();
}
}

0
ci4/app/Config/Session.php Executable file → Normal file
View File

0
ci4/app/Config/Toolbar.php Executable file → Normal file
View File

View File

@ -34,7 +34,7 @@ class Validation extends BaseConfig
* @var array<string, string>
*/
public array $templates = [
'list' => 'CodeIgniter\Validation\Views\list',
'list' => 'CodeIgniter\Validation\Views\list',
'single' => 'CodeIgniter\Validation\Views\single',
'bootstrap_style' => 'themes/_commonPartialsBs/_form_validation_errors',
];
@ -42,195 +42,4 @@ class Validation extends BaseConfig
// --------------------------------------------------------------------
// Rules
// --------------------------------------------------------------------
/**
* Maquina duplicate validation
*
* @var array
*/
public array $maquina_duplicate = [
"name" => "required|string"
];
/**
* PapelImpresion duplicate validation
*
* @var array
*/
public array $papel_impresion_duplicate = [
"name" => "required|string"
];
/**========================================================================
* TARIFA MAQUINA ACABADO
*========================================================================**/
public array $tarifa_maquina_acabado =
[
"tarifa_acabado_id" => [
"rules" => "required|integer",
"label" => "tarifa acabado",
],
"maquina_id" => [
"rules" => "required|integer",
"label" => "maquina",
],
"maquina_tarea_id" => [
"rules" => "required|integer",
"label" => "tarea",
],
];
public array $tarifa_maquina_manipulado =
[
"tarifa_manipulado_id" => [
"rules" => "required|integer",
"label" => "tarifa acabado",
],
"maquina_id" => [
"rules" => "required|integer",
"label" => "maquina",
],
"maquina_tarea_id" => [
"rules" => "required|integer",
"label" => "tarea",
],
];
public array $tarifa_maquina_preimpresion =
[
"tarifa_preimpresion_id" => [
"rules" => "required|integer",
"label" => "tarifa acabado",
],
"maquina_id" => [
"rules" => "required|integer",
"label" => "maquina",
],
"maquina_tarea_id" => [
"rules" => "required|integer",
"label" => "tarea",
],
];
public array $tarifa_maquina_encuadernacion =
[
"tarifa_encuadernacion_id" => [
"rules" => "required|integer",
"label" => "tarifa acabado",
],
"maquina_id" => [
"rules" => "required|integer",
"label" => "maquina",
],
"maquina_tarea_id" => [
"rules" => "required|integer",
"label" => "tarea",
],
];
public array $tarifa_maquina_extra =
[
"tarifa_extra_id" => [
"rules" => "required|integer",
"label" => "tarifa acabado",
],
"maquina_id" => [
"rules" => "required|integer",
"label" => "maquina",
],
"maquina_tarea_id" => [
"rules" => "required|integer",
"label" => "tarea",
],
];
public array $orden_trabajo_tarea = [
"orden_trabajo_tarea_id" => [
"rules" => "required|integer",
"label" => "tarea"
],
// "tiempo_real" => [
// "rules" => "required|float",
// "label" => "tiempo real"
// ]
];
public array $orden_trabajo_date = [
"orden_trabajo_id" => [
"rules" => "required|integer",
"label" => "tarea"
],
];
public array $orden_trabajo_tarea_progress_date = [
"ot_tarea_id" => [
"rules" => "required|integer",
"label" => "tarea"
],
"estado" => [
"rules" => "required|in_list[P,I,S,D,F,E]",
"label" => "estado"
]
];
public array $orden_trabajo = [
"orden_trabajo_id" => [
"rules" => "required|integer",
"label" => "Orden trabajo"
],
];
public array $orden_trabajo_fichaje_auto = [
"orden_trabajo_id" => [
"rules" => "required|integer",
"label" => "Orden trabajo"
],
"maquina_id" => [
"rules" => "required|integer",
"label" => "Máquina"
],
"estado" => [
"rules" => "required|in_list[P,I,S,D,F,E]",
"label" => "estado"
],
"tareas" => [
"rules" => "required",
"label" => "Tareas"
],
"click_init" => [
"rules" => "required|integer",
"label" => "Click init"
],
"click_end" => [
"rules" => "required|integer",
"label" => "Click end"
],
];
public array $maquina_ordenes_trabajo = [
"ordenes_trabajo" => [
"rules" => "required",
"label" => "Orden trabajo"
],
"maquina_id" => [
"rules" => "required|integer",
"label" => "Máquina"
],
];
public array $chat_department =
[
"display" => [
"rules" => "required|string",
"label" => "tarifa acabado",
],
"description" => [
"rules" => "permit_empty",
"label" => "maquina",
],
];
public array $proveedor_tarea =
[
"proveedor_id" => [
"rules" => "required|integer",
"label" => "Proveedor",
],
"orden_trabajo_tarea_id" => [
"rules" => "required|integer",
"label" => "Tarea",
],
];
}

View File

@ -1,20 +0,0 @@
<?php
use CodeIgniter\Router\RouteCollection;
$routes->group('wiki', ['namespace' => 'App\Controllers\Wiki'], function ($routes) {
$routes->get('','WikiController::index',["as" => "wikiIndex"]);
$routes->get('view/(:segment)','WikiController::show_page/$1',["as" => "showWikiPage"]);
$routes->get('section/(:num)','WikiController::get_section/$1',["as" => "getWikiSection"]);
$routes->post('section','WikiController::store_section',["as" => "storeWikiSection"]);
$routes->delete('section/(:num)','WikiController::delete_section/$1',["as" => "deleteWikiSection"]);
$routes->post('update/section','WikiController::update_section',["as" => "updateWikiSection"]);
$routes->post('save/(:num)','WikiController::store_save_page/$1',["as" => "storeWikiSavePage"]);
$routes->post('publish/(:num)','WikiController::store_publish_page/$1',["as" => "storeWikiPublishPage"]);
$routes->post('file/upload/(:num)','WikiController::wiki_file_upload/$1',["as" => "storeWikiFileUpload"]);
$routes->get('file/(:num)','WikiController::get_wiki_file/$1',["as" => "getWikiFile"]);
$routes->post('section/update/order','WikiController::wiki_section_update_order',["as" => "updateWikiSectionOrder"]);
});

View File

@ -1,110 +0,0 @@
<?php
namespace App\Controllers\API;
use App\Controllers\Presupuestos\Presupuestocliente;
use CodeIgniter\RESTful\ResourceController;
use CodeIgniter\API\ResponseTrait;
class ImprimelibrosApi extends ResourceController
{
use ResponseTrait;
public function calcular()
{
helper(['form']);
$jsonData = json_decode($this->request->getBody(), true);
if (json_last_error() !== JSON_ERROR_NONE) {
return $this->respond(
[
'status' => 400,
'error' => 'Invalid JSON format'
],
400
);
}
// Access the entire POST data
$post_data = $jsonData;
//return $this->respond(var_dump($post_data));
// Instancia de presupuesto cliente
$presupuestocliente = new Presupuestocliente();
$response = $presupuestocliente->calcular($post_data);
if (isset($response['tiradas'])) {
$response = [
'status' => 200,
'error' => null,
'data' => [
'tiradas' => $response['tiradas'],
'precios' => $response['precio_u']
]
];
} else {
$response = [
'status' => 400,
'error' => $response
];
}
return $this->respond($response);
}
public function guardar()
{
helper(['form']);
// Access the entire POST data
$post_data = $this->request->getJSON(true);
//return $this->respond(var_dump($post_data));
// Instancia de presupuesto cliente
$presupuestocliente = new Presupuestocliente();
try {
$response = $presupuestocliente->guardar($post_data);
// DEBUG LINE
//return $this->respond($response);
if (!isset($response['sk_id'])) {
return $this->respond([
'status' => 400,
'error' => 'Missing sk_id',
'message' => 'El identificador sk_id es requerido pero no se recibió.'
], 400);
}
$response = [
'status' => 200,
'error' => null,
'data' => [
'sk_id' => $response['sk_id'],
'sk_url' => $response['sk_url'] ?? null
]
];
return $this->respond($response);
} catch (\Exception $e) {
return $this->respond([
'status' => 500,
'error' => 'Server error',
'message' => 'Error inesperado durante el procesado'
]);
}
}
}

507
ci4/app/Controllers/Ajax.php Executable file
View File

@ -0,0 +1,507 @@
<?php
namespace App\Controllers;
use App\Models\CronTabModel;
use App\Models\NotificationModel;
use App\Models\Usuarios\UserModel;
use App\Models\Usuarios\GroupModel;
use App\Models\Usuarios\GroupsUsersModel;
use App\Models\ActivityModel;
use CodeIgniter\RESTful\ResourceController;
class Ajax extends ResourceController
{
private $user_model;
private $group_model;
private $group_user_model;
private $activity_model;
private $crontab_model;
private $notification_model;
private $id_user;
private $token_user;
function __construct()
{
$this->user_model = new UserModel();
$this->group_model = new GroupModel();
$this->group_user_model = new GroupsUsersModel();
$this->activity_model = new ActivityModel();
$this->crontab_model = new CronTabModel();
$this->notification_model = new NotificationModel();
$this->id_user = session()->get('id_user');
$this->token_user = session()->get('token');
$language = \Config\Services::language();
$language->setLocale(session()->lang);
}
public function index()
{
return redirect()->to('/home');
}
public function getUsers(){
$postData = service('request')->getVar();
if($postData != null && isset($postData->data)){
$dtpostData = $postData->data;
//Read value
$draw = $dtpostData->draw;
$start = $dtpostData->start;
$rowperpage = $dtpostData->length; // Rows display per page
$columnIndex = $dtpostData->order[0]->column; // Column index
$columnName = $dtpostData->columns[$columnIndex]->data; // Column name
$columnSortOrder = $dtpostData->order[0]->dir; // asc or desc
$searchValue = $dtpostData->search->value; // Search value
//Total number of records without filtering
$totalRecords = $this->user_model->select('id_user')
//->join('auth_groups','auth_groups.token = auth_user.group')
->countAllResults();
//Total number of records with filtering
$totalRecordwithFilter = $this->user_model->select('id_user')
//->join('auth_groups','auth_groups.token = auth_user.group')
->orLike('first_name', $searchValue)
->orLike('email', $searchValue)
->countAllResults();
//Fetch records
//$records = $this->user_model->select('auth_user.*,auth_groups.title')
$records = $this->user_model->select('auth_user.*')
//->join('auth_groups','auth_groups.token = auth_user.group')
->orLike('first_name', $searchValue)
->orLike('email', $searchValue)
->orderBy($columnName,$columnSortOrder)
->findAll($rowperpage, $start);
//Format records
foreach ($records as $key => $value){
if($records[$key]['email_confirmed'] == 1){
$records[$key]['email'] = $records[$key]['email'].' '.'<span class="text-success"><i class="fas fa-check-circle"></i></span>';
}
$editLink = site_url('usuarios/user/edit/').$records[$key]['token'];
$records[$key]['options'] = ''.
'<div class="btn-group mr-1 mb-1" xmlns="http://www.w3.org/1999/html">
<button type="button" class="btn btn-primary btn-block dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
'.lang("App.user_grid_options").'
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="'.$editLink.'"><i class="fas fa-edit"></i> '.lang("App.user_btn_edit").'</a>
<button type="button" class="dropdown-item" onclick="delete_user(\''.$records[$key]['token'].'\');"><i class="fas fa-trash"></i> '.lang("App.user_btn_delete").'</button>
</div>
</div>
';
}
//Data records
$data = array();
foreach($records as $record ){
$groups_token = $this->group_user_model->select('token_group')
->where('token_user',$record['token'])
->findAll();
$groups_names = [];
foreach($groups_token as $g_t){
$title = $this->group_model->select('title')
->where('token',$g_t)
->first()['title'];
array_push($groups_names, $title);
}
$data[] = array(
"first_name"=>$record['first_name'],
"email"=>$record['email'],
"group"=>$groups_names,//JJO$record['title'],
"mobile"=>$record['mobile'],
"last_access"=>$record['last_access'],
"last_ip"=>$record['last_ip'],
"created_at"=>$record['created_at'],
"options"=>$record['options']
);
}
//Response
$response = array(
"draw" => intval($draw),
"iTotalRecords" => $totalRecords,
"iTotalDisplayRecords" => $totalRecordwithFilter,
"aaData" => $data,
"token" => csrf_hash() // New token hash
);
return $this->response->setJSON($response);
}else{
return $this->response->setJSON(["error"=>true]);
}
}
public function getGroups(){
$postData = service('request')->getVar();
if($postData != null && isset($postData->data)){
$dtpostData = $postData->data;
//Read value
$draw = $dtpostData->draw;
$start = $dtpostData->start;
$rowperpage = $dtpostData->length; // Rows display per page
$columnIndex = $dtpostData->order[0]->column; // Column index
$columnName = $dtpostData->columns[$columnIndex]->data; // Column name
$columnSortOrder = $dtpostData->order[0]->dir; // asc or desc
$searchValue = $dtpostData->search->value; // Search value
//Total number of records without filtering
$totalRecords = $this->group_model->select('id_group')
->countAllResults();
//Total number of records with filtering
$totalRecordwithFilter = $this->group_model->select('id_group')
->orLike('title', $searchValue)
->countAllResults();
//Fetch records
$records = $this->group_model->select('*')
->orLike('title', $searchValue)
->orderBy($columnName,$columnSortOrder)
->findAll($rowperpage, $start);
//Format records
foreach ($records as $key => $value){
$editLink = site_url('usuarios/group/edit/').$records[$key]['token'];
$records[$key]['options'] = ''.
'<div class="btn-group mr-1 mb-1" xmlns="http://www.w3.org/1999/html">
<button type="button" class="btn btn-primary btn-block dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
'.lang("App.group_grid_options").'
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="'.$editLink.'"><i class="fas fa-edit"></i> '.lang("App.group_btn_edit").'</a>
<button type="button" class="dropdown-item" onclick="delete_group(\''.$records[$key]['token'].'\');"><i class="fas fa-trash"></i> '.lang("App.group_btn_delete").'</button>
</div>
</div>
';
}
//Data records
$data = array();
foreach($records as $record ){
$data[] = array(
"title"=>$record['title'],
"dashboard"=>$record['dashboard'],
"created_at"=>$record['created_at'],
"updated_at"=>$record['updated_at'],
"options"=>$record['options']
);
}
//Response
$response = array(
"draw" => intval($draw),
"iTotalRecords" => $totalRecords,
"iTotalDisplayRecords" => $totalRecordwithFilter,
"aaData" => $data,
"token" => csrf_hash() // New token hash
);
return $this->response->setJSON($response);
}else{
return $this->response->setJSON(["error"=>true]);
}
}
public function getActivities($all=""){
$postData = service('request')->getVar();
if($postData != null && isset($postData->data)){
$dtpostData = $postData->data;
//Read value
$draw = $dtpostData->draw;
$start = $dtpostData->start;
$rowperpage = $dtpostData->length; // Rows display per page
$columnIndex = $dtpostData->order[0]->column; // Column index
$columnName = $dtpostData->columns[$columnIndex]->data; // Column name
$columnSortOrder = $dtpostData->order[0]->dir; // asc or desc
$searchValue = $dtpostData->search->value; // Search value
$session = session();
//Total number of records without filtering
if($session->get('dashboard')=='admin' && !empty($all)){
$totalRecords = $this->activity_model->select('id_activity')
->join('auth_user','auth_user.token = auth_activity.user')
->countAllResults();
}else{
$totalRecords = $this->activity_model->select('id_activity')
->join('auth_user','auth_user.token = auth_activity.user')
->where('auth_activity.user',$session->get('token'))
->countAllResults();
}
//Total number of records with filtering
if($session->get('dashboard')=='admin' && !empty($all)){
$totalRecordwithFilter = $this->activity_model->select('id_activity')
->join('auth_user','auth_user.token = auth_activity.user')
->orLike('first_name', $searchValue)
->countAllResults();
}else{
$totalRecordwithFilter = $this->activity_model->select('id_activity')
->join('auth_user','auth_user.token = auth_activity.user')
->orLike('first_name', $searchValue)
->where('auth_activity.user',$session->get('token'))
->countAllResults();
}
//Fetch records
if($session->get('dashboard')=='admin' && !empty($all)){
$records = $this->activity_model->select('auth_activity.*,concat(first_name, " (",email, ")") AS name')
->join('auth_user','auth_user.token = auth_activity.user')
->orLike('first_name', $searchValue)
->orderBy($columnName,$columnSortOrder)
->findAll($rowperpage, $start);
}else{
$records = $this->activity_model->select('auth_activity.*,concat(first_name, " (",email, ")") AS name')
->join('auth_user','auth_user.token = auth_activity.user')
->orLike('first_name', $searchValue)
->where('auth_activity.user',$session->get('token'))
->orderBy($columnName,$columnSortOrder)
->findAll($rowperpage, $start);
}
//Data records
$data = array();
foreach($records as $record ){
$data[] = array(
"name"=>$record['name'],
"level"=>$record['level'],
"event"=>$record['event'],
"ip"=>$record['ip'],
"os"=>$record['os'],
"browser"=>$record['browser'],
"created_at"=>$record['created_at']
);
}
//Response
$response = array(
"draw" => intval($draw),
"iTotalRecords" => $totalRecords,
"iTotalDisplayRecords" => $totalRecordwithFilter,
"aaData" => $data,
"token" => csrf_hash() // New token hash
);
return $this->response->setJSON($response);
}else{
return $this->response->setJSON(["error"=>true]);
}
}
public function getCronHistory(){
$postData = service('request')->getVar();
if($postData != null && isset($postData->data)){
$dtpostData = $postData->data;
//Read value
$draw = $dtpostData->draw;
$start = $dtpostData->start;
$rowperpage = $dtpostData->length; // Rows display per page
$columnIndex = $dtpostData->order[0]->column; // Column index
$columnName = $dtpostData->columns[$columnIndex]->data; // Column name
$columnSortOrder = $dtpostData->order[0]->dir; // asc or desc
$searchValue = $dtpostData->search->value; // Search value
//Total number of records without filtering
$totalRecords = $this->crontab_model->select('id_crontab')
->countAllResults();
//Total number of records with filtering
$totalRecordwithFilter = $this->crontab_model->select('id_crontab')
->orLike('routine', $searchValue)
->orLike('error', $searchValue)
->countAllResults();
//Fetch records
$records = $this->crontab_model->select('*')
->orLike('routine', $searchValue)
->orLike('error', $searchValue)
->orderBy($columnName,$columnSortOrder)
->findAll($rowperpage, $start);
//Data records
$data = array();
foreach($records as $record ){
$data[] = array(
"routine"=>$record['routine'],
"error"=>$record['error'],
"created_at"=>$record['created_at']
);
}
//Response
$response = array(
"draw" => intval($draw),
"iTotalRecords" => $totalRecords,
"iTotalDisplayRecords" => $totalRecordwithFilter,
"aaData" => $data,
"token" => csrf_hash() // New token hash
);
return $this->response->setJSON($response);
}else{
return $this->response->setJSON(["error"=>true]);
}
}
public function getNotification(){
$postData = service('request')->getVar();
if($postData != null && isset($postData->data)){
$dtpostData = $postData->data;
//Read value
$draw = $dtpostData->draw;
$start = $dtpostData->start;
$rowperpage = $dtpostData->length; // Rows display per page
$columnIndex = $dtpostData->order[0]->column; // Column index
$columnName = $dtpostData->columns[$columnIndex]->data; // Column name
$columnSortOrder = $dtpostData->order[0]->dir; // asc or desc
$searchValue = $dtpostData->search->value; // Search value
//Total number of records without filtering
$totalRecords = $this->notification_model->select('id_notification')
->join('user AS sender','notification.user_sender = sender.token','left')
->join('user AS recipient','notification.user_recipient = recipient.token','left')
->countAllResults();
//Total number of records with filtering
$totalRecordwithFilter = $this->notification_model->select('id_notification')
->join('user AS sender','notification.user_sender = sender.token','left')
->join('user AS recipient','notification.user_recipient = recipient.token','left')
->orLike('title', $searchValue)
->orLike('sender.first_name', $searchValue)
->orLike('recipient.first_name', $searchValue)
->countAllResults();
//Fetch records
$records = $this->notification_model->select('notification.token, sender.first_name AS sender, recipient.first_name AS recipient, notification.title, is_send_email, is_read, notification.created_at')
->join('user AS sender','notification.user_sender = sender.token','left')
->join('user AS recipient','notification.user_recipient = recipient.token','left')
->orLike('title', $searchValue)
->orLike('sender.first_name', $searchValue)
->orLike('recipient.first_name', $searchValue)
->orderBy($columnName,$columnSortOrder)
->findAll($rowperpage, $start);
//Format records
foreach ($records as $key => $value){
$records[$key]['options'] = ''.
'<div class="btn-group mr-1 mb-1" xmlns="http://www.w3.org/1999/html">
<button type="button" class="btn btn-primary btn-block dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
'.lang("App.notification_grid_options").'
</button>
<div class="dropdown-menu">
<button type="button" class="dropdown-item" onclick="delete_this(\''.$records[$key]['token'].'\');"><i class="fas fa-trash"></i> '.lang("App.user_btn_delete").'</button>
</div>
</div>
';
}
//Data records
$data = array();
foreach($records as $record ){
$data[] = array(
"sender"=>$record['sender'],
"recipient"=>$record['recipient'],
"title"=>$record['title'],
"is_send_email"=>$record['is_send_email'],
"is_read"=>$record['is_read'],
"created_at"=>$record['created_at'],
"options"=>$record['options']
);
}
//Response
$response = array(
"draw" => intval($draw),
"iTotalRecords" => $totalRecords,
"iTotalDisplayRecords" => $totalRecordwithFilter,
"aaData" => $data,
"token" => csrf_hash() // New token hash
);
return $this->response->setJSON($response);
}else{
return $this->response->setJSON(["error"=>true]);
}
}
public function getMyNotification(){
$postData = service('request')->getVar();
if($postData != null && isset($postData->data)){
$dtpostData = $postData->data;
//Read value
$draw = $dtpostData->draw;
$start = $dtpostData->start;
$rowperpage = $dtpostData->length; // Rows display per page
$columnIndex = $dtpostData->order[0]->column; // Column index
$columnName = $dtpostData->columns[$columnIndex]->data; // Column name
$columnSortOrder = $dtpostData->order[0]->dir; // asc or desc
$searchValue = $dtpostData->search->value; // Search value
//Total number of records without filtering
$totalRecords = $this->notification_model->select('id_notification')
->join('user AS sender','notification.user_sender = sender.token','left')
->join('user AS recipient','notification.user_recipient = recipient.token','left')
->where('user_recipient',$this->token_user)
->countAllResults();
//Total number of records with filtering
$totalRecordwithFilter = $this->notification_model->select('id_notification')
->join('user AS sender','notification.user_sender = sender.token','left')
->join('user AS recipient','notification.user_recipient = recipient.token','left')
->orLike('title', $searchValue)
->where('user_recipient',$this->token_user)
->countAllResults();
//Fetch records
$records = $this->notification_model->select('notification.token, sender.first_name AS sender, recipient.first_name AS recipient, notification.title, is_read, notification.created_at')
->join('user AS sender','notification.user_sender = sender.token','left')
->join('user AS recipient','notification.user_recipient = recipient.token','left')
->orLike('title', $searchValue)
->where('user_recipient',$this->token_user)
->orderBy($columnName,$columnSortOrder)
->findAll($rowperpage, $start);
//Format records
foreach ($records as $key => $value){
$records[$key]['options'] = '<a class="btn btn-primary" href="/my/notification_view/'.$records[$key]['token'].'"><i class="fas fa-eye"></i> '.lang("App.notification_view_btn").'</a>';
}
//Data records
$data = array();
foreach($records as $record ){
$data[] = array(
"sender"=>$record['sender'],
"recipient"=>$record['recipient'],
"title"=>$record['title'],
"created_at"=>$record['created_at'],
"is_read"=>$record['is_read'],
"options"=>$record['options']
);
}
//Response
$response = array(
"draw" => intval($draw),
"iTotalRecords" => $totalRecords,
"iTotalDisplayRecords" => $totalRecordwithFilter,
"aaData" => $data,
"token" => csrf_hash() // New token hash
);
return $this->response->setJSON($response);
}else{
return $this->response->setJSON(["error"=>true]);
}
}
}

View File

@ -1,642 +0,0 @@
<?php
namespace App\Controllers\Albaranes;
use App\Entities\Albaranes\AlbaranEntity;
use App\Models\Albaranes\AlbaranModel;
use Hermawan\DataTables\DataTable;
class Albaran extends \App\Controllers\BaseResourceController
{
protected $modelName = AlbaranModel::class;
protected $format = 'json';
protected static $singularObjectNameCc = 'albaran';
protected static $singularObjectName = 'Albaran';
protected static $pluralObjectName = 'Albaranes';
protected static $controllerSlug = 'albaran';
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
{
parent::initController($request, $response, $logger);
}
public function index()
{
}
public function delete($id = null)
{
if ($this->request->isAJAX()) {
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
$model_linea = model('App\Models\Albaranes\AlbaranLineaModel');
$model_linea->where('albaran_id', $id)->delete();
$this->model->where('id', $id)->delete();
$data = [
'error' => 0,
$csrfTokenName => $newTokenHash
];
return $this->respond($data);
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function editAlbaran($albaran_id){
$albaran = $this->model->find($albaran_id);
if ($albaran == false) {
return redirect()->to(base_url('albaranesList'));
}
$this->viewData['boxTitle'] = lang('Albaran.editAlbaran') . ' ' . $albaran->numero_albaran;
$this->viewData['albaranId'] = $albaran_id;
return view('themes/vuexy/form/logistica/albaranes/viewAlbaranesEdit', $this->viewData);
}
public function addLinea($albaran_id)
{
if ($this->request->isAJAX()) {
$model_linea = model('App\Models\Albaranes\AlbaranLineaModel');
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
// si es un post, es el iva
if ($this->request->getPost()) {
$reqData = $this->request->getPost();
$albaran_id = $reqData['albaran_id'] ?? 0;
$albaran = $this->model->find($albaran_id);
if ($albaran == false) {
$data = [
'error' => 'Albaran no encontrado',
$csrfTokenName => $newTokenHash
];
return $this->respond($data);
}
$presupuesto_model = model('App\Models\Presupuestos\PresupuestoModel');
$presupuesto = $presupuesto_model->find($albaran->presupuesto_id);
if ($presupuesto == false) {
$data = [
'error' => 'Presupuesto no encontrado',
$csrfTokenName => $newTokenHash
];
return $this->respond($data);
}
$iva_reducido = $presupuesto->iva_reducido;
$lineas = $model_linea->where('albaran_id', $albaran_id)->findAll();
$total = 0;
foreach ($lineas as $linea) {
$total += $linea->total;
}
$iva = $iva_reducido ? $total * 4.0 / 100 : $total * 21.0 / 100;
$data_linea = [
'albaran_id' => $albaran_id,
'titulo' => $iva_reducido ? lang('Pedidos.iva4') : lang('Pedidos.iva21'),
'cantidad' => 1,
'precio_unidad' => round($iva, 2),
'total' => round($iva, 2),
'user_created_id' => auth()->user()->id,
'user_updated_id' => auth()->user()->id
];
$id_linea = $model_linea->insert($data_linea);
$linea = $model_linea->find($id_linea);
$data = [
'error' => 0,
'data' => $linea,
$csrfTokenName => $newTokenHash
];
return $this->respond($data);
} else {
$linea = [
'albaran_id' => $albaran_id,
'user_created_id' => auth()->user()->id,
'user_updated_id' => auth()->user()->id
];
$id_linea = $model_linea->insert($linea);
$data = $model_linea->find($id_linea);
$data = [
'error' => 0,
'data' => $data,
$csrfTokenName => $newTokenHash
];
return $this->respond($data);
}
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function add()
{
if ($this->request->isAJAX()) {
$user = auth()->user()->id;
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
$reqData = $this->request->getPost();
$pedido_id = $reqData['pedido_id'] ?? 0;
$presupuestos_id = $reqData['presupuestos_id'] ?? 0;
$return_data = $this->model->generarAlbaranes($pedido_id, $presupuestos_id, $user);
$data = [
'data' => $return_data,
$csrfTokenName => $newTokenHash
];
return $this->respond($data);
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function updateAlbaran()
{
if ($this->request->isAJAX()) {
$fieldName = $this->request->getPost('fieldName');
$fieldValue = $this->request->getPost('fieldValue');
$id = $this->request->getPost('albaranId');
if ($id == null) {
$data = [
'success' => false,
'message' => lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Pedidos.albaran')), $id]),
];
return $this->respond($data);
}
$albaranEntity = $this->model->find($id);
if ($albaranEntity == false) {
$data = [
'success' => false,
'message' => lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Pedidos.albaran')), $id]),
];
return $this->respond($data);
}
if($fieldName == 'fecha_albaran'){
if($fieldValue == null || $fieldValue == '')
$fieldValue = null;
else
$fieldValue = date('Y-m-d H:i:s', strtotime($fieldValue));
}
$albaranEntity->fill([
$fieldName => $fieldValue,
'user_updated_id' => auth()->user()->id,
]);
$successfulResult = $this->model->skipValidation(true)->update($id, $albaranEntity);
if ($successfulResult) {
$data = [
'success' => true,
'message' => lang('Basic.global.updateSuccess', [lang('Basic.global.record')]) . '.',
];
} else {
$data = [
'success' => false,
'message' => lang('Basic.global.updateError', [lang('Basic.global.record')]) . '.',
];
}
return $this->respond($data);
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function updateLinea($id = null)
{
if ($this->request->isAJAX()) {
$model_linea = model('App\Models\Albaranes\AlbaranLineaModel');
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
if ($id == null):
$data = [
'error' => 2,
$csrfTokenName => $newTokenHash
];
return $this->respond($data);
endif;
$id = filter_var($id, FILTER_SANITIZE_URL);
$albaranEntity = $model_linea->find($id);
if ($albaranEntity == false):
$message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Pedidos.albaran')), $id]);
$data = [
'error' => $message,
$csrfTokenName => $newTokenHash
];
return $this->respond($data);
endif;
if ($this->request->getPost()):
$nullIfEmpty = true; // !(phpversion() >= '8.1');
$postData = $this->request->getPost();
$sanitizedData = $this->sanitized($postData, $nullIfEmpty);
// JJO
$sanitizedData['user_updated_id'] = auth()->user()->id;
$noException = true;
if ($successfulResult = $this->canValidate()): // if ($successfulResult = $this->validate($this->formValidationRules) ) :
if ($this->canValidate()):
try {
$successfulResult = $model_linea->skipValidation(true)->update($id, $sanitizedData);
} catch (\Exception $e) {
$noException = false;
$this->dealWithException($e);
}
else:
$this->viewData['warningMessage'] = lang('Basic.global.formErr1', [mb_strtolower(lang('Pedidos.albaran'))]);
$this->session->setFlashdata('formErrors', $model_linea->errors());
endif;
$albaranEntity->fill($sanitizedData);
endif;
if ($noException && $successfulResult):
$id = $albaranEntity->id ?? $id;
$message = lang('Basic.global.updateSuccess', [lang('Basic.global.record')]) . '.';
$data = [
'error' => 0,
$csrfTokenName => $newTokenHash
];
return $this->respond($data);
endif; // $noException && $successfulResult
endif; // ($requestMethod === 'post')
$data = [
'error' => 1,
$csrfTokenName => $newTokenHash
];
return $this->respond($data);
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function getAlbaranes()
{
if ($this->request->isAJAX()) {
$envio_id = $this->request->getGet('envio_id');
$albaranes = $this->model->getAlbaranesEnvio($envio_id);
$data = [
'status' => true,
'data' => $albaranes,
];
return $this->respond($data);
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function getAlbaran()
{
if ($this->request->isAJAX()) {
$id = $this->request->getGet('id');
$albaran = $this->model->getAlbaranData($id);
$data = [
'success' => true,
'data' => $albaran,
];
return $this->respond($data);
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function generateAlbaran()
{
if ($this->request->isAJAX()) {
$reqData = $this->request->getPost();
$envio_id = $reqData['envio_id'] ?? 0;
$envio_lineas = $reqData['envio_lineas'] ?? [];
$cajas = $reqData['cajas'] ?? 0;
$response = $this->model->generarAlbaranes($envio_id, $envio_lineas, $cajas);
return $this->respond($response);
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function datatable(){
$pedidosFilter = $this->request->getGet('pedidosFilter');
$q = $this->model->getDatatableQuery();
if($pedidosFilter != null && !empty($pedidosFilter)) {
$q->groupStart();
$q->like('t4.id', $pedidosFilter);
$q->groupEnd();
}
$result = DataTable::of($q)
->add(
"action",
callback: function ($q) {
return '
<div class="btn-group btn-group-sm">
<a href="javascript:void(0);"><i class="ti ti-pencil ti-sm btn-edit mx-2" data-id="' . $q->id . '"></i></a>
<a href="javascript:void(0);"><i class="ti ti-trash ti-sm btn-delete mx-2" data-id="' . $q->id . '"></i></a>
</div>
';
}
);
return $result->toJson(returnAsObject: true);
}
public function datatablesLineasAlbaran()
{
$albaranId = $this->request->getGet('albaranId');
$model = model('App\Models\Albaranes\AlbaranLineaModel');
$q = $model->getDatatableQuery($albaranId);
$result = DataTable::of($q)
->add(
"action",
callback: function ($q) {
return '
<div class="btn-group btn-group-sm">
<a href="javascript:void(0);"><i class="ti ti-trash ti-sm btn-delete-albaran-lineas mx-2" data-id="' . $q->id . '"></i></a>
</div>
';
}
)
->edit('pedido', function ($q) {
return '<a href="' . base_url('pedidos/edit/' . $q->pedido) . '" target="_blank">' . $q->pedido . '</a>';
})
->edit('unidades', function ($q) {
if(str_contains($q->titulo, 'IVA'))
return null;
else
return '<input type="number" class="form-control form-control-sm input-albaran-linea text-center"
value="' . $q->unidades . '" data-id="' . $q->id . '" data-field="cantidad" />';
})
->edit('titulo', function ($q) {
return '<input type="text" class="form-control form-control-sm input-albaran-linea" value="' . $q->titulo .
'" data-id="' . $q->id . '" data-field="titulo" />';
})
->edit('cajas', function ($q) {
return '<input class="form-control input-albaran-linea
form-control-sm text-center" value="' . $q->cajas . '" data-id="' . $q->id . '" data-field="cajas" />';
})
->edit('unidades_cajas', function ($q) {
return '<input class="form-control input-albaran-linea
form-control-sm text-center" value="' . $q->unidades_cajas . '" data-id="' . $q->id . '" data-field="unidades_cajas" />';
})
->edit('total', function ($q) {
return '<input class="form-control autonumeric-2 input-albaran-linea
form-control-sm text-center" value="' . $q->total . '" data-id="' . $q->id . '" data-field="total" />';
})
->edit('precio_unidad', function ($q) {
if(str_contains($q->titulo, 'IVA'))
return null;
else
return '<input class="form-control autonumeric-4 form-control-sm text-center input-albaran-linea" value="' .
number_format((float) $q->precio_unidad, 4, ',', '') .
'" data-id="' . $q->id . '" data-field="precio_unidad" />';
});
return $result->toJson(returnAsObject: true);
}
public function updateAlbaranLinea(){
if ($this->request->isAJAX()) {
$model_linea = model('App\Models\Albaranes\AlbaranLineaModel');
$fieldName = $this->request->getPost('fieldName');
$fieldValue = $this->request->getPost('fieldValue');
$id = $this->request->getPost('lineaId');
$linea = $model_linea->find($id);
if ($linea == false) {
$data = [
'success' => false,
'message' => lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Pedidos.albaran')), $id]),
];
return $this->respond($data);
}
if($fieldName == 'cantidad') {
$linea->total = round($linea->precio_unidad * intval($fieldValue), 4);
$linea->cantidad = intval($fieldValue);
}
else if($fieldName == 'precio_unidad') {
$fieldValue2 = str_replace(',', '.', $fieldValue);
$linea->total = round(round(floatval($fieldValue2), 4) * intval($linea->cantidad), 2);
$linea->precio_unidad = round(floatval($fieldValue2), 4);
}
else if($fieldName == 'total') {
$linea->total = round(floatval($fieldValue), 2);
$linea->precio_unidad = round(floatval($fieldValue) / intval($linea->cantidad), 4);
}
else{
$linea->$fieldName = $fieldValue;
}
$linea->user_updated_id = auth()->user()->id;
$linea->updated_at = date('Y-m-d H:i:s');
$model_linea->update($id, $linea->toArray());
if($fieldName == 'cajas'){
$cajas = $model_linea->where('albaran_id', $linea->albaran_id)
->where('cajas > 0')
->select('SUM(cajas) as total_cajas')
->get();
$albaranModel = model('App\Models\Albaranes\AlbaranModel');
$albaran = $albaranModel->find($linea->albaran_id);
if($albaran != false) {
$albaran->cajas = $cajas->getRow()->total_cajas;
$albaran->user_updated_id = auth()->user()->id;
$albaran->updated_at = date('Y-m-d H:i:s');
$albaranModel->update($linea->albaran_id, $albaran->toArray());
}
}
$data = [
'success' => true,
'message' => lang('Basic.global.updateSuccess', [lang('Basic.global.record')]) . '.',
];
if($fieldName == 'cajas') {
$data['cajas'] = $cajas->getRow()->total_cajas;
};
return $this->respond($data);
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function addLineasIva(){
if ($this->request->isAJAX()) {
$albaran_id = $this->request->getPost('albaranId');
$model_linea = model('App\Models\Albaranes\AlbaranLineaModel');
$lineas_albaran = $model_linea->where('albaran_id', $albaran_id)->findAll();
$iva_reducido = 0;
$iva_no_reducido = 0;
foreach ($lineas_albaran as $linea) {
if($linea->iva_reducido == 1) {
$iva_reducido += round(floatval($linea->total)*0.04, 2);
} else {
$iva_no_reducido += round(floatval($linea->total)*0.21, 2);
}
}
$iva_reducido = round($iva_reducido, 2);
$iva_no_reducido = round($iva_no_reducido, 2);
if($iva_reducido > 0) {
$linea = [
'albaran_id' => $albaran_id,
'titulo' => lang('Albaran.iva4'),
'total' => round($iva_reducido, 2),
'user_created_id' => auth()->user()->id,
'user_updated_id' => auth()->user()->id
];
$model_linea->insert($linea);
}
if($iva_no_reducido > 0) {
$linea = [
'albaran_id' => $albaran_id,
'titulo' => lang('Albaran.iva21'),
'total' => round($iva_no_reducido, 2),
'user_created_id' => auth()->user()->id,
'user_updated_id' => auth()->user()->id
];
$model_linea->insert($linea);
}
$data = [
'success' => true,
'message' => lang('Basic.global.updateSuccess', [lang('Basic.global.record')]) . '.',
];
return $this->respond($data);
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function addBlankLineaAlbaran(){
if ($this->request->isAJAX()) {
$albaran_id = $this->request->getPost('albaranId');
$model_linea = model('App\Models\Albaranes\AlbaranLineaModel');
$linea = [
'albaran_id' => $albaran_id,
'user_created_id' => auth()->user()->id,
'user_updated_id' => auth()->user()->id
];
$id_linea = $model_linea->insert($linea);
$data = $model_linea->find($id_linea);
$data = [
'success' => true,
];
return $this->respond($data);
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function borrarLinea()
{
if ($this->request->isAJAX()) {
$model_linea = model('App\Models\Albaranes\AlbaranLineaModel');
$reqData = $this->request->getPost();
$id = $reqData['linea'] ?? 0;
$id = filter_var($id, FILTER_SANITIZE_URL);
$albaranLineaEntity = $model_linea->find($id);
if ($albaranLineaEntity == false):
$message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Pedidos.albaran')), $id]);
$data = [
'success' => false,
'error' => $message,
];
return $this->respond($data);
endif;
$successfulResult = $model_linea->skipValidation(true)->update($id, ['deleted_at' => date('Y-m-d H:i:s')]);
if ($successfulResult):
$data = [
'success' => true,
];
else:
$data = [
'success' => false,
'error' => lang('Basic.global.deleteError', [lang('Basic.global.record')]) . '.',
];
endif;
return $this->respond($data);
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function borrarAlbaran()
{
if ($this->request->isAJAX()) {
$id = $this->request->getPost('albaranId');
$model_linea = model('App\Models\Albaranes\AlbaranLineaModel');
$model_linea->where('albaran_id', $id)->delete();
$this->model->where('id', $id)->delete();
$data = [
'success' => true
];
return $this->respond($data);
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
}

View File

@ -2,6 +2,8 @@
namespace App\Controllers;
use App\Models\NotificationModel;
use App\Models\SettingsModel;
use CodeIgniter\Controller;
use CodeIgniter\HTTP\CLIRequest;
use CodeIgniter\HTTP\IncomingRequest;
@ -35,7 +37,7 @@ class BaseController extends Controller
*
* @var array
*/
protected $helpers = ['general', 'go_common', 'rbac', 'assets'];
protected $helpers = ['general', 'go_common', 'rbac'];
/**
* Constructor.

30
ci4/app/Controllers/BaseResourceController.php Executable file → Normal file
View File

@ -77,14 +77,6 @@ abstract class BaseResourceController extends \CodeIgniter\RESTful\ResourceContr
*/
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
@ -93,7 +85,7 @@ abstract class BaseResourceController extends \CodeIgniter\RESTful\ResourceContr
*
* @var array
*/
protected $helpers = ['session', 'go_common', 'form', 'text', 'general', 'rbac', 'assets']; //JJO
protected $helpers = ['session', 'go_common', 'form', 'text', 'general', 'rbac']; //JJO
/**
* Initializer method.
@ -230,13 +222,6 @@ abstract class BaseResourceController extends \CodeIgniter\RESTful\ResourceContr
*/
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)) {
$objName = mb_strtolower(lang(ucfirst(static::$pluralObjectNameCc) . '.' . static::$singularObjectNameCc));
} else {
@ -251,10 +236,8 @@ abstract class BaseResourceController extends \CodeIgniter\RESTful\ResourceContr
} else {
$datetime = (new \CodeIgniter\I18n\Time("now"));
$rawResult = $this->model->where('id', $id)
->set([
'deleted_at' => $datetime->format('Y-m-d H:i:s'),
'is_deleted' => $this->delete_flag
])
->set(['deleted_at' => $datetime->format('Y-m-d H:i:s'),
'is_deleted' => $this->delete_flag])
->update();
if (!$rawResult) {
return $this->failNotFound(lang('Basic.global.deleteError', [$objName]));
@ -287,8 +270,7 @@ abstract class BaseResourceController extends \CodeIgniter\RESTful\ResourceContr
}
if ($customValidationMessages == null) {
$validationErrorMessages = $this->model->validationMessages ?? $this->formValidationErrorMessagess ?? null;
;
$validationErrorMessages = $this->model->validationMessages ?? $this->formValidationErrorMessagess ?? null;;
} else {
$validationErrorMessages = $customValidationMessages;
}
@ -384,12 +366,12 @@ abstract class BaseResourceController extends \CodeIgniter\RESTful\ResourceContr
$queryStr = !is_null($query) ? $query->getQuery() : '';
$dbError = $this->model->db->error();
$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]);
endif;
// $userFriendlyErrMsg = str_replace("'", "\'", $userFriendlyErrMsg); // Uncomment if experiencing unescaped single quote errors
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']);
endif;
$this->viewData['errorMessage'] = $userFriendlyErrMsg;

View File

@ -1,274 +0,0 @@
<?php
namespace App\Controllers\Catalogo;
use App\Controllers\BaseResourceController;
use App\Entities\Catalogo\CatalogoLibroEntity;
use App\Models\Catalogo\CatalogoLibroModel;
use App\Models\Clientes\ClienteModel;
use App\Models\Presupuestos\ImportadorModel;
use Hermawan\DataTables\DataTable;
class CatalogoLibros extends BaseResourceController
{
protected $modelName = CatalogoLibroModel::class;
protected $format = 'json';
protected static $singularObjectName = 'Catalogo';
protected static $singularObjectNameCc = 'CatalogoLibros';
protected static $pluralObjectName = 'Catalogos';
protected static $pluralObjectNameCc = 'catalogos';
protected static $controllerSlug = 'catalogo';
protected static $viewPath = 'themes/vuexy/form/catalogo/';
protected $indexRoute = 'CatalogoLibrosList';
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
{
$this->viewData['pageTitle'] = lang('Catalogo.listingPage');
$this->viewData['usingSweetAlert'] = true;
// Breadcrumbs (IMN)
$this->viewData['breadcrumb'] = [
['title' => lang("App.menu_catalogo"), 'route' => "javascript:void(0);", 'active' => false],
['title' => lang("App.menu_catalogo_libros"), 'route' => route_to('catalogoLibrosList'), 'active' => true]
];
parent::initController($request, $response, $logger);
}
public function index()
{
$viewData = [
'currentModule' => static::$controllerSlug,
'pageSubTitle' => lang('Basic.global.ManageAllRecords', [lang('Catalogo.catalogo')]),
'catalogoLibrosEntity' => new CatalogoLibroEntity(),
'usingServerSideDataTable' => true,
];
$viewData = array_merge($this->viewData, $viewData); // merge any possible values from the parent controller class
return view(static::$viewPath . 'viewCatalogoLibrosList', $viewData);
}
public function add()
{
if ($this->request->getPost()):
$postData = $this->request->getPost();
$sanitizedData = $this->sanitized($postData, true);
$sanitizedData['user_created_id'] = auth()->user()->id;
unset($sanitizedData['iskn']);
$noException = true;
if ($successfulResult = $this->canValidate()):
if ($this->canValidate()):
try {
$successfulResult = $this->model->skipValidation(true)->save($sanitizedData);
} catch (\Exception $e) {
$noException = false;
$this->dealWithException($e);
}
else:
$this->viewData['errorMessage'] = lang('Basic.global.formErr1', [lang('Basic.global.record')]);
$this->session->setFlashdata('formErrors', $this->model->errors());
endif;
$thenRedirect = true; // Change this to false if you want your user to stay on the form after submission
endif;
if ($noException && $successfulResult):
$id = $this->model->db->insertID();
$message = lang('Basic.global.saveSuccess', [lang('Basic.global.record')]) . '.';
if ($thenRedirect):
if (!empty($this->indexRoute)):
return redirect()->to(route_to($this->indexRoute))->with('sweet-success', $message);
else:
return $this->redirect2listView('sweet-success', $message);
endif;
else:
$this->session->setFlashData('sweet-success', $message);
endif;
endif; // $noException && $successfulResult
endif; // ($requestMethod === 'post')
$this->viewData['catalogoLibrosEntity'] = isset($sanitizedData) ? new CatalogoLibroEntity($sanitizedData) : new CatalogoLibroEntity();
$this->viewData['formAction'] = route_to('catalogoLibrosAdd');
$this->viewData['boxTitle'] = lang('Basic.global.addNew') . ' ' . lang('Catalogo.moduleTitle') . ' ' . lang('Basic.global.addNewSuffix');
return $this->displayForm(__METHOD__);
} // end function add()
public function edit($requestedId = null)
{
if ($requestedId == null):
return $this->redirect2listView();
endif;
$id = filter_var($requestedId, FILTER_SANITIZE_URL);
$catalogoLibrosEntity = $this->model->find($id);
if ($catalogoLibrosEntity == false):
$message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Catalogo.pais')), $id]);
return $this->redirect2listView('sweet-error', $message);
endif;
if ($this->request->getPost()):
$postData = $this->request->getPost();
$sanitizedData = $this->sanitized($postData, true);
unset($sanitizedData['iskn']);
$sanitizedData['user_update_id'] = auth()->user()->id;
$noException = true;
if ($successfulResult = $this->canValidate()): // if ($successfulResult = $this->validate($this->formValidationRules) ) :
if ($this->canValidate()):
try {
$successfulResult = $this->model->skipValidation(true)->update($id, $sanitizedData);
} catch (\Exception $e) {
$noException = false;
$this->dealWithException($e);
}
else:
$this->viewData['warningMessage'] = lang('Basic.global.formErr1', [mb_strtolower(lang('Catalogo.catalogo'))]);
$this->session->setFlashdata('formErrors', $this->model->errors());
endif;
$catalogoLibrosEntity->fill($sanitizedData);
$thenRedirect = false;
endif;
if ($noException && $successfulResult):
$id = $catalogoLibrosEntity->id ?? $id;
$message = lang('Basic.global.updateSuccess', [lang('Basic.global.record')]) . '.';
if ($thenRedirect):
if (!empty($this->indexRoute)):
return redirect()->to(route_to($this->indexRoute))->with('sweet-success', $message);
else:
return $this->redirect2listView('sweet-success', $message);
endif;
else:
$this->session->setFlashData('sweet-success', $message);
endif;
endif; // $noException && $successfulResult
endif; // ($requestMethod === 'post')
$this->viewData['catalogoLibrosEntity'] = $catalogoLibrosEntity;
$this->viewData['formAction'] = route_to('catalogoLibrosEdit', $id);
$this->viewData['boxTitle'] = lang('Basic.global.edit2') . ' ' . lang('Catalogo.moduleTitle') . ' ' . lang('Basic.global.edit3');
return $this->displayForm(__METHOD__, $id);
} // end function edit(...)
public function datatable()
{
$reqData = $this->request->getGet();
$start = $reqData['start'] ?? 0;
$length = $reqData['length'] ?? 5;
$q = $this->model->getDatatableQuery()->limit($length, $start);
$result = DataTable::of($q)
->edit(
"portada",
function ($row, $meta) {
if (is_null($row->cubierta_archivo)) {
return '<img class="img-thumbnail" src="' . $row->portada . '" alt="Portada" style="max-height: 80px;">';
} else {
return '';
}
}
)
->add("actionBtns", callback: function ($q) {
$actions = '';
if (auth()->user()->can('catalogo.edit')) {
$actions .= '
<div class="btn-group btn-group-sm">
<a href="javascript:void(0);"><i class="ti ti-pencil ti-sm btn-edit mx-2" data-id="' . $q->id . '"></i></a>
</div>';
}
if (auth()->user()->can('catalogo.delete')) {
$actions .= '
<div class="btn-group btn-group-sm">
<a href="javascript:void(0);"><i class="ti ti-trash ti-sm btn-delete mx-2" data-id="' . $q->id . '"></i></a>
</div>';
}
return $actions;
});
return $result->toJson(returnAsObject: true);
}
/* IMN */
public function getClientList()
{
$search = $this->request->getGet("q") ?? "";
$data = (new ClienteModel())->getIdName($search);
return $this->response->setJSON($data);
}
/* Historico de pedidos ERP antiguo */
public function datatablePedidosAntiguos()
{
$reqData = $this->request->getGet();
$start = $reqData['start'] ?? 0;
$length = $reqData['length'] ?? 10;
$catalogoId = $reqData['catalogo_id'] ?? null;
// Instanciar el modelo directamente
$importadorModel = new ImportadorModel();
$q = $importadorModel->getHistoricoPedidosCatalogo($catalogoId);
return DataTable::of($q)
->setSearchableColumns([
't1.id',
't1.created_at',
't1.tirada',
'(CASE WHEN t1.tirada > 0 THEN t1.total / t1.tirada ELSE 0 END)',
't1.total',
't1.estado'
])
->edit('total', fn($row) => number_format((float) $row->total, 2, ',', '.') . ' €')
->edit('precio_ud', fn($row) => number_format((float) $row->precio_ud, 2, ',', '.') . ' €')
->edit('created_at', fn($row) => date('d/m/Y', strtotime($row->created_at)))
->add('actionBtns', function ($row) {
return '<div class="btn-group btn-group-sm">
<a href="https://gestion.safekat.es/pedido/detail/' . $row->id . '" class="btn btn-sm btn-info" target="_blank">
<i class="ti ti-eye"></i> Ver
</a>
</div>';
}, 'last')
->toJson(returnAsObject: true);
}
}

880
ci4/app/Controllers/Chat/ChatController.php Executable file → Normal file

File diff suppressed because it is too large Load Diff

View File

@ -250,20 +250,11 @@ class Cliente extends \App\Controllers\BaseResourceController
$start = $reqData['start'] ?? 0;
$length = $reqData['length'] ?? 5;
$search = $reqData['search']['value'];
$searchValues = get_filter_datatables_columns($reqData);
$requestedOrder = $reqData['order'] ?? [];
$requestedOrder = $reqData['order']['0']['column'] ?? 1;
$order = ClienteModel::SORTABLE[$requestedOrder > 0 ? $requestedOrder : 1];
$dir = $reqData['order']['0']['dir'] ?? 'asc';
$resourceData = $this->model->getResource($searchValues);
foreach ($requestedOrder as $order) {
$column = $order['column'] ?? 0;
$dir = $order['dir'] ?? 'asc';
$orderColumn = ClienteModel::SORTABLE[$column] ?? null;
if ($orderColumn) {
$resourceData->orderBy($orderColumn, $dir);
}
}
$resourceData = $resourceData->limit($length, $start)->get()->getResultObject();
$resourceData = $this->model->getResource($search)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject();
foreach ($resourceData as $item) :
if (isset($item->direccion) && strlen($item->direccion) > 100) :
$item->direccion = character_limiter($item->direccion, 100);
@ -282,7 +273,7 @@ class Cliente extends \App\Controllers\BaseResourceController
return $this->respond(Collection::datatable(
$resourceData,
$this->model->getResource()->countAllResults(),
$this->model->getResource($searchValues)->countAllResults()
$this->model->getResource($search)->countAllResults()
));
} else {
return $this->failUnauthorized('Invalid request', 403);
@ -384,7 +375,7 @@ class Cliente extends \App\Controllers\BaseResourceController
{
$data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Users.user'))])];
if (!is_null($selId)) :
$userModel = model('App\Models\Usuarios\UserModel');
$userModel = model('App\Models\UserModel');
$selOption = $userModel->where('id', $selId)->findColumn('first_name');
if (!empty($selOption)) :
@ -414,7 +405,7 @@ class Cliente extends \App\Controllers\BaseResourceController
{
$data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Users.user'))])];
if (!is_null($selId)) :
$userModel = model('App\Models\Usuarios\UserModel');
$userModel = model('App\Models\UserModel');
$selOption = $userModel->where('id', $selId)->findColumn('last_name');
if (!empty($selOption)) :
@ -464,7 +455,7 @@ class Cliente extends \App\Controllers\BaseResourceController
return null;
}
$modelPlantillaPreciosCliente = model('App\Models\Clientes\ClientePlantillaPreciosModel');
$plantilla = $modelPlantillaPreciosCliente->where("id", $plantilla_id)->where("deleted_at", null)->first();
$plantilla = $modelPlantillaPreciosCliente->where("id", $plantilla_id)->where("is_deleted", 0)->first();
if ($plantilla == false) {
return null;
} else {

View File

@ -1,5 +1,4 @@
<?php
namespace App\Controllers\Clientes;
<?php namespace App\Controllers\Clientes;
use App\Controllers\BaseResourceController;
@ -46,36 +45,40 @@ class ClientePrecios extends \App\Controllers\BaseResourceController
parent::initController($request, $response, $logger);
}
public function updatePlantilla()
public function update($requestedId = null)
{
if ($this->request->isAJAX()) {
if ($this->request->getPost()) :
if ($requestedId == null) :
return;
endif;
$postData = $this->request->getPost();
$cliente_id = $postData['cliente_id'] ?? -1;
$plantilla_id = $postData['plantilla_id'] ?? -1;
$postData = $this->request->getJSON();
$plantilla_id = $postData->plantilla_id ?? -1;
// Se ha actualizado un registro por lo que no es una plantilla
if ($plantilla_id == -1) {
$this->model->clean_plantilla_id($cliente_id);
} else if ($cliente_id == -1) { // actualizar todos los clientes que usan una plantilla
$this->model->update_from_plantilla($plantilla_id);
} else {
$this->model->copy_from_plantilla($cliente_id, $plantilla_id);
if($plantilla_id == -1){
$this->model->clean_plantilla_id($requestedId);
}
else if($requestedId== -1){ // actualizar todos los clientes que usan una plantilla
$this->model->update_from_plantilla($plantilla_id);
}
else{
$this->model->copy_from_plantilla($requestedId, $plantilla_id);
}
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
$data = [
$csrfTokenName => $newTokenHash
];
return $this->respond($data);
} else {
return $this->failUnauthorized('Invalid request', 403);
}
endif; // ($requestMethod === 'post')
}
@ -90,113 +93,92 @@ class ClientePrecios extends \App\Controllers\BaseResourceController
}
$start = $reqData['start'] ?? 0;
$length = $reqData['length'] ?? 5;
$requestedOrder = $reqData['order'] ?? [];
$searchValues = get_filter_datatables_columns($reqData);
$requestedOrder = $reqData['order']['0']['column'] ?? 0;
$requestedOrder2 = $reqData['order']['1']['column'] ?? $requestedOrder;
$requestedOrder3 = $reqData['order']['2']['column'] ?? $requestedOrder;
$requestedOrder4 = $reqData['order']['3']['column'] ?? $requestedOrder;
$requestedOrder5 = $reqData['order']['4']['column'] ?? $requestedOrder;
$order = ClientePreciosModel::SORTABLE[$requestedOrder > 0 ? $requestedOrder : 0];
$order2 = ClientePreciosModel::SORTABLE[$requestedOrder2 >= 0 ? $requestedOrder2 : $requestedOrder];
$order3 = ClientePreciosModel::SORTABLE[$requestedOrder3 >= 0 ? $requestedOrder3 : $requestedOrder];
$order4 = ClientePreciosModel::SORTABLE[$requestedOrder4 >= 0 ? $requestedOrder4 : $requestedOrder];
$order5 = ClientePreciosModel::SORTABLE[$requestedOrder4 >= 0 ? $requestedOrder5 : $requestedOrder];
$dir = $reqData['order']['0']['dir'] ?? 'asc';
$dir2 = $reqData['order']['1']['dir'] ?? $dir;
$dir3 = $reqData['order']['2']['dir'] ?? $dir;
$dir4= $reqData['order']['3']['dir'] ?? $dir;
$dir5= $reqData['order']['4']['dir'] ?? $dir;
$cliente_id = $reqData['cliente_id'] ?? 0;
$resourceData = $this->model->getResource($searchValues, $cliente_id);
foreach ($requestedOrder as $order) {
$column = $order['column'] ?? 0;
$dir = $order['dir'] ?? 'asc';
$orderColumn = ClientePreciosModel::SORTABLE[$column] ?? null;
if ($orderColumn) {
$resourceData->orderBy($orderColumn, $dir);
}
}
$resourceData = $resourceData->limit($length, $start)->get()->getResultObject();
$resourceData = $this->model->getResource($cliente_id)
->orderBy($order, $dir)->orderBy($order2, $dir2)->orderBy($order3, $dir3)->orderBy($order4, $dir4)->orderBy($order5, $dir5)
->limit($length, $start)->get()->getResultObject();
return $this->respond(Collection::datatable(
$resourceData,
$this->model->getResource($searchValues, $cliente_id)->countAllResults(),
$this->model->getResource($searchValues, $cliente_id)->countAllResults()
$this->model->getResource($cliente_id)->countAllResults(),
$this->model->getResource($cliente_id)->countAllResults()
));
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function datatable_editor()
{
public function datatable_editor() {
if ($this->request->isAJAX()) {
include(APPPATH . "ThirdParty/DatatablesEditor/DataTables.php");
// Build our Editor instance and process the data coming from _POST
$response = Editor::inst($db, 'cliente_precios')
$response = Editor::inst( $db, 'cliente_precios' )
->fields(
Field::inst('plantilla_id'),
Field::inst('cliente_id'),
Field::inst('tipo'),
Field::inst('tipo_maquina'),
Field::inst('tipo_impresion'),
Field::inst('user_updated_id'),
Field::inst('updated_at'),
Field::inst('tiempo_min')
->getFormatter('Format::toDecimalChar')->setFormatter('Format::fromDecimalChar')
->validator(
'Validate::notEmpty',
array(
'message' => lang('ClientePrecios.validation.required')
)
Field::inst( 'plantilla_id' ),
Field::inst( 'cliente_id' ),
Field::inst( 'tipo' ),
Field::inst( 'tipo_maquina' ),
Field::inst( 'tipo_impresion' ),
Field::inst( 'user_updated_id' ),
Field::inst( 'updated_at' ),
Field::inst( 'is_deleted' ),
Field::inst( 'tiempo_min' )
->getFormatter( 'Format::toDecimalChar')->setFormatter( 'Format::fromDecimalChar')
->validator( 'Validate::notEmpty',array(
'message' => lang('ClientePrecios.validation.required'))
)
->validator(
'Validate::numeric',
array(
->validator('Validate::numeric', array(
"decimal" => ',',
'message' => lang('ClientePrecios.validation.decimal')
)
'message' => lang('ClientePrecios.validation.decimal'))
),
Field::inst('tiempo_max')
->getFormatter('Format::toDecimalChar')->setFormatter('Format::fromDecimalChar')
->validator(
'Validate::notEmpty',
array(
'message' => lang('ClientePrecios.validation.required')
)
Field::inst( 'tiempo_max' )
->getFormatter( 'Format::toDecimalChar')->setFormatter( 'Format::fromDecimalChar')
->validator( 'Validate::notEmpty',array(
'message' => lang('ClientePrecios.validation.required'))
)
->validator(
'Validate::numeric',
array(
"decimal" => ',',
'message' => lang('ClientePrecios.validation.decimal')
)
->validator('Validate::numeric', array(
"decimal" => ',',
'message' => lang('ClientePrecios.validation.decimal'))
),
Field::inst('precio_hora')
->getFormatter('Format::toDecimalChar')->setFormatter('Format::fromDecimalChar')
->validator(
'Validate::notEmpty',
array(
'message' => lang('ClientePrecios.validation.required')
)
Field::inst( 'precio_hora' )
->getFormatter( 'Format::toDecimalChar')->setFormatter( 'Format::fromDecimalChar')
->validator( 'Validate::notEmpty',array(
'message' => lang('ClientePrecios.validation.required'))
)
->validator(
'Validate::numeric',
array(
"decimal" => ',',
'message' => lang('ClientePrecios.validation.decimal')
)
->validator('Validate::numeric', array(
"decimal" => ',',
'message' => lang('ClientePrecios.validation.decimal'))
),
Field::inst('margen')
->getFormatter('Format::toDecimalChar')->setFormatter('Format::fromDecimalChar')
->validator(
'Validate::notEmpty',
array(
'message' => lang('ClientePrecios.validation.required')
)
Field::inst( 'margen' )
->getFormatter( 'Format::toDecimalChar')->setFormatter( 'Format::fromDecimalChar')
->validator( 'Validate::notEmpty',array(
'message' => lang('ClientePrecios.validation.required'))
)
->validator(
'Validate::numeric',
array(
->validator('Validate::numeric', array(
"decimal" => ',',
'message' => lang('ClientePrecios.validation.decimal')
)
'message' => lang('ClientePrecios.validation.decimal'))
),
)
@ -204,6 +186,7 @@ class ClientePrecios extends \App\Controllers\BaseResourceController
if ($action === Editor::ACTION_CREATE || $action === Editor::ACTION_EDIT) {
foreach ($data['data'] as $pkey => $values) {
// Si no se quiere borrar...
if ($data['data'][$pkey]['is_deleted'] != 1) {
$process_data['tiempo_min'] = $data['data'][$pkey]['tiempo_min'];
$process_data['tiempo_max'] = $data['data'][$pkey]['tiempo_max'];
$process_data['tipo'] = $data['data'][$pkey]['tipo'];
@ -215,23 +198,26 @@ class ClientePrecios extends \App\Controllers\BaseResourceController
if (!empty($response)) {
return $response;
}
}
}
}
})
->on('preCreate', function ($editor, &$values) {
$session = session();
$datetime = (new \CodeIgniter\I18n\Time("now"));
$editor
->field('user_updated_id')
->setValue(auth()->user()->id);
->setValue($session->id_user);
$editor
->field('updated_at')
->setValue($datetime->format('Y-m-d H:i:s'));
})
->on('preEdit', function ($editor, &$values) {
$session = session();
$datetime = (new \CodeIgniter\I18n\Time("now"));
$editor
->field('user_updated_id')
->setValue(auth()->user()->id);
->setValue($session->id_user);
$editor
->field('updated_at')
->setValue($datetime->format('Y-m-d H:i:s'));
@ -252,16 +238,4 @@ class ClientePrecios extends \App\Controllers\BaseResourceController
}
}
public function getCurrentPlantilla()
{
if ($this->request->isAJAX()) {
$cliente_id = $this->request->getGet('cliente_id');
$plantilla = $this->model->getPlantilla($cliente_id);
return $this->respond($plantilla);
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
}

View File

@ -215,13 +215,13 @@ class Clientedirecciones extends \App\Controllers\BaseResourceController
{
try {
$resourceData = $this->model->getDireccion($id);
$response = (object) [
$response = (object)[
'error' => false,
'data' => $resourceData
];
return $this->respond($response);
} catch (\Exception $e) {
$response = (object) [
$response = (object)[
'error' => true,
'message' => $e->getMessage()
];
@ -229,61 +229,18 @@ class Clientedirecciones extends \App\Controllers\BaseResourceController
}
}
public function getDireccionIdFromData()
{
$data = $this->request->getGet('data') ?? [];
$cliente_id = $this->request->getGet('cliente_id') ?? -1;
$att = $data['att'] ?? "";
$direccion = $data['direccion'] ?? "";
$cp = $data['cp'] ?? "";
$municipio = $data['municipio'] ?? "";
$provincia = $data['provincia'] ?? "";
$pais_id = $data['pais_id'] ?? -1;
$email = $data['email'] ?? "";
$telefono = $data['telefono'] ?? "";
try {
$model = model('App\Models\Clientes\ClienteDireccionesModel');
$id = $model->select('id')
->where('att', $att)
->where('direccion', $direccion)
->where('cp', $cp)
->where('municipio', $municipio)
->where('provincia', $provincia)
->where('pais_id', $pais_id)
->where('email', $email)
->where('telefono', $telefono)
->where('cliente_id', $cliente_id)
->get()
->getResultObject();
if (count($id) > 0) {
$id = $id[0]->id;
} else {
$id = null;
}
return $id;
} catch (\Exception $e) {
throw new \RuntimeException($e->getMessage());
}
}
public function getDireccionPresupuesto($id)
{
try {
$model = model('App\Models\Presupuestos\PresupuestoDireccionesModel');
$resourceData = $model->getDireccion($id);
if (count($resourceData) > 0) {
$resourceData[0]->direccionId = $id;
}
$response = (object) [
$response = (object)[
'error' => false,
'data' => $resourceData
];
return $this->respond($response);
} catch (\Exception $e) {
$response = (object) [
$response = (object)[
'error' => true,
'message' => $e->getMessage()
];
@ -439,11 +396,11 @@ class Clientedirecciones extends \App\Controllers\BaseResourceController
protected function getComunidadAutonomaListItems($selId = null)
{
$data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('ComunidadesAutonomas.comunidadAutonoma'))])];
if (!is_null($selId)):
if (!is_null($selId)) :
$comunidadAutonomaModel = model('App\Models\Configuracion\ComunidadAutonomaModel');
$selOption = $comunidadAutonomaModel->where('id', $selId)->findColumn('nombre');
if (!empty($selOption)):
if (!empty($selOption)) :
$data[$selId] = $selOption[0];
endif;
endif;
@ -453,11 +410,11 @@ class Clientedirecciones extends \App\Controllers\BaseResourceController
protected function getProvinciaListItems($selId = null)
{
$data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Provincias.provincia'))])];
if (!empty($selId)):
if (!empty($selId)) :
$provinciaModel = model('App\Models\Configuracion\ProvinciaModel');
$selOption = $provinciaModel->where('id', $selId)->findColumn('nombre');
if (!empty($selOption)):
if (!empty($selOption)) :
$data[$selId] = $selOption[0];
endif;
endif;

View File

@ -1,5 +1,4 @@
<?php
namespace App\Controllers\Clientes;
<?php namespace App\Controllers\Clientes;
use App\Controllers\BaseResourceController;
@ -43,7 +42,7 @@ class Clienteplantillaprecios extends \App\Controllers\BaseResourceController
// Breadcrumbs (IMN)
$this->viewData['breadcrumb'] = [
['title' => lang("App.menu_clientes"), 'route' => "javascript:void(0);", 'active' => false],
['title' => lang("App.menu_plantillas_tarifas_clientes"), 'route' => route_to("clienteplantillapreciosList"), 'active' => true]
['title' => lang("App.menu_plantillas_tarifas_clientes"), 'route' => site_url('clientes/clienteplantillaprecios'), 'active' => true]
];
parent::initController($request, $response, $logger);
@ -71,48 +70,51 @@ class Clienteplantillaprecios extends \App\Controllers\BaseResourceController
// plantilla desde la lista
public function update($requestedId = null)
{
if ($requestedId == null):
return;
endif;
$model = model('App\Models\Clientes\ClientePlantillaPreciosLineasModel');
$model->delete_values($requestedId);
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
$data = [
$csrfTokenName => $newTokenHash
];
return $this->respond($data);
if ($this->request->getPost()) :
if ($requestedId == null) :
return;
endif;
$model = model('App\Models\Clientes\ClientePlantillaPreciosLineasModel');
$model->delete_values($requestedId);
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
$data = [
$csrfTokenName => $newTokenHash
];
return $this->respond($data);
endif; // ($requestMethod === 'post')
}
public function add()
{
if ($this->request->getPost()):
if ($this->request->getPost()) :
$nullIfEmpty = true; // !(phpversion() >= '8.1');
$postData = $this->request->getPost();
$cliente_id = $postData['cliente_id'] ?? -1;
$from_client_data = $postData['from_client_data'] ?? 0;
$sanitizedData = $this->sanitized($postData, $nullIfEmpty);
// JJO
$sanitizedData['user_created_id'] = auth()->user()->id;
$noException = true;
if ($successfulResult = $this->canValidate()): // if ($successfulResult = $this->validate($this->formValidationRules) ) :
if ($successfulResult = $this->canValidate()) : // if ($successfulResult = $this->validate($this->formValidationRules) ) :
if ($this->canValidate()):
if ($this->canValidate()) :
try {
$successfulResult = $this->model->skipValidation(true)->save($sanitizedData);
} catch (\Exception $e) {
@ -124,29 +126,26 @@ class Clienteplantillaprecios extends \App\Controllers\BaseResourceController
$this->session->setFlashdata('formErrors', $this->model->errors());
endif;
if ($from_client_data == 1) {
$thenRedirect = false;
} else {
$thenRedirect = true; // Change this to false if you want your user to stay on the form after submission
}
$thenRedirect = true; // Change this to false if you want your user to stay on the form after submission
endif;
if ($noException && $successfulResult):
if ($noException && $successfulResult) :
$id = $this->model->db->insertID();
$message = lang('Basic.global.saveSuccess', [lang('Basic.global.record')]) . '.';
if ($cliente_id != -1) {
if($cliente_id != -1){
$modelLineas = model('App\Models\Clientes\ClientePlantillaPreciosLineasModel');
$modelLineas->copy_from_cliente($cliente_id, $id);
$modelClientePrecios = model('App\Models\Clientes\ClientePreciosModel');
$modelClientePrecios->set_plantilla_id($cliente_id, $id);
return $this->respond(['status' => 'success', 'id' => $id]);
} else {
if ($thenRedirect):
if (!empty($this->indexRoute)):
return ;
}
else{
if ($thenRedirect) :
if (!empty($this->indexRoute)) :
//return redirect()->to(route_to($this->indexRoute))->with('sweet-success', $message);
return redirect()->to(site_url('/clienteplantillaprecios/edit/' . $id))->with('message', $message);
return redirect()->to(site_url('/clientes/clienteplantillaprecios/edit/' . $id))->with('message', $message);
else:
return $this->redirect2listView('sweet-success', $message);
endif;
@ -172,35 +171,35 @@ class Clienteplantillaprecios extends \App\Controllers\BaseResourceController
{
if ($requestedId == null):
if ($requestedId == null) :
return $this->redirect2listView();
endif;
$id = filter_var($requestedId, FILTER_SANITIZE_URL);
$clientePlantillaPreciosEntity = $this->model->find($id);
if ($clientePlantillaPreciosEntity == false):
if ($clientePlantillaPreciosEntity == false) :
$message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Clientes.cliente')), $id]);
return $this->redirect2listView('sweet-error', $message);
endif;
if ($this->request->getPost()):
if ($this->request->getPost()) :
$nullIfEmpty = true; // !(phpversion() >= '8.1');
$postData = $this->request->getPost();
$sanitizedData = $this->sanitized($postData, $nullIfEmpty);
// JJO
$sanitizedData['user_updated_id'] = auth()->user()->id;
$noException = true;
if ($successfulResult = $this->canValidate()): // if ($successfulResult = $this->validate($this->formValidationRules) ) :
if ($successfulResult = $this->canValidate()) : // if ($successfulResult = $this->validate($this->formValidationRules) ) :
if ($this->canValidate()):
if ($this->canValidate()) :
try {
$successfulResult = $this->model->skipValidation(true)->update($id, $sanitizedData);
} catch (\Exception $e) {
@ -217,12 +216,12 @@ class Clienteplantillaprecios extends \App\Controllers\BaseResourceController
$thenRedirect = false;
endif;
if ($noException && $successfulResult):
if ($noException && $successfulResult) :
$id = $clientePlantillaPreciosEntity->id ?? $id;
$message = lang('Basic.global.updateSuccess', [lang('Basic.global.record')]) . '.';
if ($thenRedirect):
if (!empty($this->indexRoute)):
if ($thenRedirect) :
if (!empty($this->indexRoute)) :
return redirect()->to(route_to($this->indexRoute))->with('sweet-success', $message);
else:
return $this->redirect2listView('sweet-success', $message);
@ -237,7 +236,7 @@ class Clienteplantillaprecios extends \App\Controllers\BaseResourceController
//var_dump($clientePlantillaPreciosEntity); dd();
$this->viewData['clienteplantillapreciosEntity'] = $clientePlantillaPreciosEntity;
$this->viewData['formAction'] = route_to('updateClienteplantillaprecios', $id);
$this->viewData['boxTitle'] = lang('Basic.global.edit2') . ' ' . lang('Clientes.moduleTitle') . ' ' . lang('Basic.global.edit3');
@ -247,23 +246,6 @@ class Clienteplantillaprecios extends \App\Controllers\BaseResourceController
} // end function edit(...)
public function updatePlantillaEnCliente(){
if ($this->request->isAJAX()) {
$reqData = $this->request->getPost();
$plantilla_id = $reqData['plantilla_id'] ?? -1;
$model = model('App\Models\Clientes\ClientePreciosModel');
$model->update_plantilla_id($plantilla_id);
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function datatable()
{
if ($this->request->isAJAX()) {
@ -275,16 +257,16 @@ class Clienteplantillaprecios extends \App\Controllers\BaseResourceController
}
$start = $reqData['start'] ?? 0;
$length = $reqData['length'] ?? 5;
$searchValues = get_filter_datatables_columns($reqData);
$search = $reqData['search']['value'];
$requestedOrder = $reqData['order']['0']['column'] ?? 1;
$order = ClientePlantillaPreciosModel::SORTABLE[$requestedOrder > 0 ? $requestedOrder : 0];
$dir = $reqData['order']['0']['dir'] ?? 'asc';
$resourceData = $this->model->getResource($searchValues)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject();
$resourceData = $this->model->getResource($search)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject();
return $this->respond(Collection::datatable(
$resourceData,
$this->model->getResource()->countAllResults(),
$this->model->getResource($searchValues)->countAllResults()
$this->model->getResource($search)->countAllResults()
));
} else {
return $this->failUnauthorized('Invalid request', 403);
@ -293,32 +275,34 @@ class Clienteplantillaprecios extends \App\Controllers\BaseResourceController
public function menuItems()
{
if ($this->request->isAJAX()) {
$query = $this->model->builder()->select(
[
"id",
"nombre as name"
]
)->where("deleted_at", null);
if ($this->request->getGet("q")) {
$query->groupStart()
->orLike("cliente_plantilla_precios.nombre", $this->request->getGet("q"))
->groupEnd();
$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;
try{
$menu = $this->model->getSelect2MenuItems($columns2select, $columns2select[1], $onlyActiveOnes, $searchStr, true);
$nonItem = new \stdClass;
$nonItem->id = '';
$nonItem->text = '- ' . lang('Basic.global.None') . ' -';
array_unshift($menu, $nonItem);
}
catch(Exception $e){
$menu = [];
}
$items = $query->get()->getResultObject();
// add a custom item at the beginning
$customItem = new \stdClass;
$customItem->id = 0;
$customItem->name = "Personalizado";
array_unshift($items, $customItem);
return $this->response->setJSON($items);
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
$data = [
'menu' => $menu,
$csrfTokenName => $newTokenHash
];
return $this->respond($data);
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
}

View File

@ -93,47 +93,31 @@ class Clienteplantillaprecioslineas extends \App\Controllers\BaseResourceControl
}
$start = $reqData['start'] ?? 0;
$length = $reqData['length'] ?? 5;
$requestedOrder = $reqData['order'] ?? [];
$searchValues = get_filter_datatables_columns($reqData);
$requestedOrder = $reqData['order']['0']['column'] ?? 0;
$requestedOrder2 = $reqData['order']['1']['column'] ?? $requestedOrder;
$requestedOrder3 = $reqData['order']['2']['column'] ?? $requestedOrder;
$requestedOrder4 = $reqData['order']['3']['column'] ?? $requestedOrder;
$requestedOrder5 = $reqData['order']['4']['column'] ?? $requestedOrder;
$order = ClientePlantillaPreciosLineasModel::SORTABLE[$requestedOrder > 0 ? $requestedOrder : 0];
$order2 = ClientePlantillaPreciosLineasModel::SORTABLE[$requestedOrder2 >= 0 ? $requestedOrder2 : $requestedOrder];
$order3 = ClientePlantillaPreciosLineasModel::SORTABLE[$requestedOrder3 >= 0 ? $requestedOrder3 : $requestedOrder];
$order4 = ClientePlantillaPreciosLineasModel::SORTABLE[$requestedOrder4 >= 0 ? $requestedOrder4 : $requestedOrder];
$order5 = ClientePlantillaPreciosLineasModel::SORTABLE[$requestedOrder4 >= 0 ? $requestedOrder5 : $requestedOrder];
$dir = $reqData['order']['0']['dir'] ?? 'asc';
$dir2 = $reqData['order']['1']['dir'] ?? $dir;
$dir3 = $reqData['order']['2']['dir'] ?? $dir;
$dir4= $reqData['order']['3']['dir'] ?? $dir;
$dir5= $reqData['order']['4']['dir'] ?? $dir;
$plantilla_id = $reqData['plantilla_id'] ?? 0;
$resourceData = $this->model->getResource($searchValues, $plantilla_id);
foreach ($requestedOrder as $order) {
$column = $order['column'] ?? 0;
$dir = $order['dir'] ?? 'asc';
$orderColumn = ClientePlantillaPreciosLineasModel::SORTABLE[$column] ?? null;
if ($orderColumn) {
$resourceData->orderBy($orderColumn, $dir);
}
}
$resourceData = $resourceData->limit($length, $start)->get()->getResultObject();
$resourceData = $this->model->getResource($plantilla_id)
->orderBy($order, $dir)->orderBy($order2, $dir2)->orderBy($order3, $dir3)->orderBy($order4, $dir4)->orderBy($order5, $dir5)
->limit($length, $start)->get()->getResultObject();
return $this->respond(Collection::datatable(
$resourceData,
$this->model->getResource([], $plantilla_id)->countAllResults(),
$this->model->getResource($searchValues, $plantilla_id)->countAllResults()
));
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function getStoredRows()
{
if ($this->request->isAJAX()) {
$reqData = $this->request->getPost();
$plantilla_id = $reqData['plantilla_id'] ?? 0;
$resourceData = $this->model->getResource([], $plantilla_id);
$resourceData = $resourceData->get()->getResultObject();
return $this->respond(Collection::datatable(
$resourceData,
$this->model->getResource([], $plantilla_id)->countAllResults(),
$this->model->getResource([], $plantilla_id)->countAllResults()
$this->model->getResource($plantilla_id)->countAllResults(),
$this->model->getResource($plantilla_id)->countAllResults()
));
} else {
return $this->failUnauthorized('Invalid request', 403);
@ -196,21 +180,42 @@ class Clienteplantillaprecioslineas extends \App\Controllers\BaseResourceControl
),
)
->validator(function ($editor, $action, $data) {
if ($action === Editor::ACTION_CREATE || $action === Editor::ACTION_EDIT) {
foreach ($data['data'] as $pkey => $values) {
// Si no se quiere borrar...
if ($data['data'][$pkey]['is_deleted'] != 1) {
$process_data['tiempo_min'] = $data['data'][$pkey]['tiempo_min'];
$process_data['tiempo_max'] = $data['data'][$pkey]['tiempo_max'];
$process_data['tipo'] = $data['data'][$pkey]['tipo'];
$process_data['tipo_maquina'] = $data['data'][$pkey]['tipo_maquina'];
$process_data['tipo_impresion'] = $data['data'][$pkey]['tipo_impresion'];
$response = $this->model->checkIntervals($process_data, $pkey, $data['data'][$pkey]['plantilla_id']);
// No se pueden duplicar valores al crear o al editar
if (!empty($response)) {
return $response;
}
}
}
}
})
->on('preCreate', function ($editor, &$values) {
$session = session();
$datetime = (new \CodeIgniter\I18n\Time("now"));
$editor
->field('user_updated_id')
->setValue(auth()->user()->id);
->setValue($session->id_user);
$editor
->field('updated_at')
->setValue($datetime->format('Y-m-d H:i:s'));
})
->on('preEdit', function ($editor, &$values) {
$session = session();
$datetime = (new \CodeIgniter\I18n\Time("now"));
$editor
->field('user_updated_id')
->setValue(auth()->user()->id);
->setValue($session->id_user);
$editor
->field('updated_at')
->setValue($datetime->format('Y-m-d H:i:s'));

73
ci4/app/Controllers/Clientes/Clienteusuarios.php Executable file → Normal file
View File

@ -1,5 +1,4 @@
<?php
namespace App\Controllers\Clientes;
<?php namespace App\Controllers\Clientes;
use App\Controllers\BaseResourceController;
@ -41,59 +40,6 @@ class Clienteusuarios extends \App\Controllers\BaseResourceController
parent::initController($request, $response, $logger);
}
public function removeClienteFromUser($user_id)
{
if ($this->request->isAJAX()) {
if (intval($user_id) > 0) {
$this->model->removeClienteFromUser($user_id);
return $this->respond(['status' => 'success', 'msg' => 'Usuario eliminado correctamente']);
}
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function addUserToClient(){
if ($this->request->isAJAX()) {
$user_id = $this->request->getPost("user_id");
$cliente_id = $this->request->getPost("cliente_id");
if (intval($user_id) > 0 && intval($cliente_id) > 0) {
$this->model->addUserToClient($user_id, $cliente_id);
return $this->respond(['status' => 'success', 'msg' => 'Usuario añadido correctamente']);
}
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function getAvailableUsers()
{
if ($this->request->isAJAX()) {
$query = $this->model->builder()->select(
[
"id",
"CONCAT(first_name, ' ', last_name) as name"
]
)
->where("deleted_at", null)
->where("cliente_id", null);
if ($this->request->getGet("q")) {
$column = "CONCAT(first_name, ' ', last_name)";
$value = $this->request->getGet("q");
$query->groupStart()
->where("LOWER(CONVERT($column USING utf8)) COLLATE utf8_general_ci LIKE", "%" . strtolower($value) . "%")
->groupEnd();
}
$items = $query->get()->getResultObject();
return $this->response->setJSON($items);
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function datatable()
@ -107,19 +53,14 @@ class Clienteusuarios extends \App\Controllers\BaseResourceController
}
$start = $reqData['start'] ?? 0;
$length = $reqData['length'] ?? 5;
$requestedOrder = $reqData['order'] ?? [];
$search = $reqData['search']['value'];
$requestedOrder = $reqData['order']['0']['column'] ?? 1;
$order = ClienteUsuariosModel::SORTABLE[$requestedOrder >= 0 ? $requestedOrder : 1];
$dir = $reqData['order']['0']['dir'] ?? 'asc';
$id_C = $reqData['id_cliente'] ?? -1;
$resourceData = $this->model->getResource("", $id_C);
foreach ($requestedOrder as $order) {
$column = $order['column'] ?? 0;
$dir = $order['dir'] ?? 'asc';
$orderColumn = ClienteUsuariosModel::SORTABLE[$column] ?? null;
if ($orderColumn) {
$resourceData->orderBy($orderColumn, $dir);
}
}
$resourceData = $resourceData->limit($length, $start)->get()->getResultObject();
$resourceData = $this->model->getResource("", $id_C)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject();
return $this->respond(Collection::datatable(
$resourceData,

View File

@ -25,7 +25,6 @@ class Proveedores extends \App\Controllers\BaseResourceController {
protected $indexRoute = 'proveedorList';
protected $deletePermission = 'proveedores.delete';
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger) {
@ -51,8 +50,6 @@ class Proveedores extends \App\Controllers\BaseResourceController {
public function index() {
checkPermission('proveedores.menu');
$viewData = [
'currentModule' => static::$controllerSlug,
@ -70,7 +67,9 @@ class Proveedores extends \App\Controllers\BaseResourceController {
public function add() {
checkPermission('proveedores.create');
if ($this->request->getPost()) :
@ -139,8 +138,6 @@ class Proveedores extends \App\Controllers\BaseResourceController {
} // end function add()
public function edit($requestedId = null) {
checkPermission('proveedores.edit');
if ($requestedId == null) :
return $this->redirect2listView();
@ -384,26 +381,4 @@ class Proveedores extends \App\Controllers\BaseResourceController {
}
}
public function getForSelect(){
if ($this->request->isAJAX()) {
$tipo_id = $this->request->getGet("tipo_id");
$query = $this->model->builder()->select(
[
"id",
"nombre as name"
]
)->where('tipo_id', $tipo_id)->where('deleted_at', null)->orderBy("nombre", "asc");
if ($this->request->getGet("q")) {
$query->groupStart()
->orLike("lg_proveedores.nombre", $this->request->getGet("q"))
->groupEnd();
}
return $this->response->setJSON($query->get()->getResultObject());
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
}

View File

@ -271,27 +271,6 @@ class Comunidadesautonomas extends \App\Controllers\BaseResourceController
}
}
public function menuItems2()
{
if ($this->request->isAJAX()) {
$query = $this->model->builder()->select(
[
"id",
"nombre as name"
]
)->orderBy("nombre", "asc");
if ($this->request->getGet("q")) {
$query->groupStart()
->orLike("lg_comunidades_autonomas.nombre", $this->request->getGet("q"))
->groupEnd();
}
return $this->response->setJSON($query->get()->getResultObject());
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
protected function getPaisListItems($selId = null)
{

0
ci4/app/Controllers/Configuracion/ConfigErrores.php Executable file → Normal file
View File

0
ci4/app/Controllers/Configuracion/ConfigVariables.php Executable file → Normal file
View File

View File

@ -1,103 +0,0 @@
<?php
namespace App\Controllers\Configuracion;
use App\Controllers\BaseController;
use App\Controllers\BaseResourceController;
use App\Entities\Configuracion\FestivoEntity;
use App\Models\Collection;
use App\Entities\Configuracion\Imposicion;
use App\Models\Configuracion\FestivoModel;
use App\Models\Configuracion\ImposicionEsquemaModel;
use App\Models\Configuracion\ImposicionModel;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Validation\Validation;
use Hermawan\DataTables\DataTable;
use Psr\Log\LoggerInterface;
class FestivoController extends BaseController
{
protected $modelName = FestivoModel::class;
protected FestivoModel $model;
protected static $controllerSlug = 'festivos';
protected $format = 'json';
protected string $viewPath = 'themes/vuexy/form/configuracion/festivos/';
protected $indexRoute = 'festivoList';
protected array $viewData = [];
protected Validation $validation;
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
$this->viewData['pageTitle'] = lang('Festivos.moduleTitle');
$this->viewData['usingSweetAlert'] = true;
$this->model = model($this->modelName);
$this->validation = service("validation");
parent::initController($request, $response, $logger);
}
public function index()
{
return view($this->viewPath . $this->indexRoute);
}
public function store_festivo_date()
{
$bodyData = $this->request->getPost();
$date = $bodyData['date'];
$count = $this->model->where('date',$date)->countAllResults();
if ($count) {
$status = $this->model->where('date', $date)->delete(purge: true);
return $this->response->setJSON([
"message" => lang("App.user_alert_delete"),
"status" => $status,
]);
} else {
$status = $this->model->insert($bodyData);
if ($status) {
$festivoEntity = $this->model->find($status);
return $this->response->setJSON([
"message" => lang("App.global_alert_save_success"),
"status" => $status,
"data" => $festivoEntity
]);
} else {
return $this->response->setJSON([
"message" => lang("App.global_alert_save_error"),
"errors" => $this->model->errors(),
"status" => true
])->setStatusCode(400);
}
}
}
public function delete_festivo_date($id)
{
$status = $this->model->delete($id, true);
if ($status) {
return $this->response->setJSON([
"message" => lang("App.user_alert_delete"),
"status" => $status,
]);
} else {
return $this->response->setJSON([
"message" => lang("App.global_alert_save_error"),
"errors" => $this->model->errors(),
"status" => true
])->setStatusCode(400);
}
}
public function find_all()
{
$festivos = $this->model->findAll();
return $this->response->setJSON([
"message" => lang("App.global_alert_fetch_success"),
"status" => true,
"data" => $festivos
]);
}
}

35
ci4/app/Controllers/Configuracion/FormasPago.php Executable file → Normal file
View File

@ -26,8 +26,6 @@ class FormasPago extends \App\Controllers\BaseResourceController
protected $indexRoute = 'formaDePagoList';
protected $deletePermission = 'formas-pago.delete';
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()
{
checkPermission('formas-pago.menu');
$viewData = [
'currentModule' => static::$controllerSlug,
@ -64,7 +61,6 @@ class FormasPago extends \App\Controllers\BaseResourceController
public function add()
{
checkPermission('formas-pago.create');
if ($this->request->getPost()) :
@ -119,7 +115,6 @@ class FormasPago extends \App\Controllers\BaseResourceController
public function edit($requestedId = null)
{
checkPermission('formas-pago.edit');
if ($requestedId == null) :
return $this->redirect2listView();
@ -235,19 +230,25 @@ class FormasPago extends \App\Controllers\BaseResourceController
public function menuItems()
{
if ($this->request->isAJAX()) {
$query = $this->model->builder()->select(
[
"id",
"nombre as name"
]
)->orderBy("nombre", "asc");
if ($this->request->getGet("q")) {
$query->groupStart()
->orLike("formas_pago.nombre", $this->request->getGet("q"))
->groupEnd();
}
$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);
return $this->response->setJSON($query->get()->getResultObject());
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
$data = [
'menu' => $menu,
$csrfTokenName => $newTokenHash
];
return $this->respond($data);
} else {
return $this->failUnauthorized('Invalid request', 403);
}

View File

@ -21,8 +21,6 @@ class Group extends \App\Controllers\GoBaseController
protected $indexRoute = 'userGroupList';
protected $deletePermission = 'roles-permisos.delete';
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
{
self::$viewPath = getenv('theme.path') . 'form/group/';
@ -30,7 +28,7 @@ class Group extends \App\Controllers\GoBaseController
// Breadcrumbs
$this->viewData['breadcrumb'] = [
['title' => "Home", 'route' => "javascript:void(0);", 'active' => false],
['title' => lang("App.menu_permission_group"), 'route' => route_to("userGroupList"), 'active' => true]
['title' => lang("App.menu_permission_group"), 'route' => site_url("configuracion/group"), 'active' => true]
];
parent::initController($request, $response, $logger);
@ -39,8 +37,6 @@ class Group extends \App\Controllers\GoBaseController
public function index()
{
checkPermission('roles-permisos.menu');
$this->viewData['usingClientSideDataTable'] = true;
$this->viewData['pageSubTitle'] = lang('Basic.global.ManageAllRecords', [lang('Groups.group')]);
// IMN
@ -52,12 +48,11 @@ class Group extends \App\Controllers\GoBaseController
public function add()
{
checkPermission('roles-permisos.create');
if ($this->request->getPost()) :
$postData = $this->request->getPost();
$temp_data['id'] = $groupEntity->id;
$temp_data['title'] = $postData['title'];
$temp_data['description'] = $postData['description'];
@ -129,7 +124,6 @@ class Group extends \App\Controllers\GoBaseController
public function edit($requestedId = null)
{
checkPermission('roles-permisos.edit');
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);
}
}
}

View File

@ -1,42 +1,36 @@
<?php
<?php namespace App\Controllers\Configuracion;
namespace App\Controllers\Configuracion;
use App\Controllers\BaseController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
use App\Entities\Configuracion\Imposicion;
use App\Models\Configuracion\ImposicionEsquemaModel;
use App\Models\Configuracion\ImposicionModel;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Validation\Validation;
use Hermawan\DataTables\DataTable;
use Psr\Log\LoggerInterface;
class Imposiciones extends BaseController
use App\Models\Configuracion\ImposicionModel;
class Imposiciones extends \App\Controllers\BaseResourceController
{
protected $modelName = ImposicionModel::class;
protected ImposicionModel $model;
protected ImposicionEsquemaModel $imposicionEsquemaModel;
protected static $controllerSlug = 'imposiciones';
protected $format = 'json';
protected static $singularObjectName = 'Imposicion';
protected static $singularObjectNameCc = 'imposicion';
protected static $pluralObjectName = 'Imposiciones';
protected static $pluralObjectNameCc = 'imposiciones';
protected static $controllerSlug = 'imposiciones';
protected static $viewPath = 'themes/vuexy/form/configuracion/imposiciones/';
protected $indexRoute = 'imposicionList';
protected array $viewData = [];
protected Validation $validation;
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
{
$this->viewData['pageTitle'] = lang('Imposiciones.moduleTitle');
$this->viewData['usingSweetAlert'] = true;
$this->model = model($this->modelName);
$this->validation = service("validation");
$this->imposicionEsquemaModel = model(ImposicionEsquemaModel::class);
parent::initController($request, $response, $logger);
}
@ -51,10 +45,7 @@ class Imposiciones extends BaseController
'usingServerSideDataTable' => true,
];
$this->viewData['breadcrumb'] = [
['title' => lang("App.menu_imposiciones"), 'route' => route_to("imposicionList"), 'active' => true],
];
$viewData = array_merge($this->viewData, $viewData); // merge any possible values from the parent controller class
return view(static::$viewPath . 'viewImposicionList', $viewData);
@ -63,155 +54,231 @@ class Imposiciones extends BaseController
public function add()
{
$this->viewData['breadcrumb'] = [
['title' => lang("App.menu_imposiciones"), 'route' => route_to("imposicionList"), 'active' => true],
];
$this->viewData["method"] = "add";
return view(static::$viewPath . 'viewImposicionNewForm', $this->viewData);
}
public function add_esquema()
{
$this->viewData['breadcrumb'] = [
['title' => lang("App.menu_imposiciones"), 'route' => route_to("imposicionList"), 'active' => true],
];
$this->viewData["imposicion_esquema"] = null;
return view(static::$viewPath . 'viewImposicionEsquemaForm', $this->viewData);
}
public function edit($imposicion_id = null)
{
if ($imposicion_id) {
$this->viewData["imposicion"] = $this->model->find($imposicion_id);
$this->viewData['breadcrumb'] = [
['title' => lang("App.menu_imposiciones"), 'route' => route_to("imposicionList"), 'active' => false],
['title' => $this->viewData["imposicion"]->full_name, 'route' => route_to("updateImposicionForm", $imposicion_id), 'active' => true],
];
}
$this->viewData["method"] = "edit";
return view(static::$viewPath . 'viewImposicionForm', $this->viewData);
}
public function edit_imposicion_esquema($imposicion_esquema_id = null)
{
if ($imposicion_esquema_id) {
$this->viewData["imposicion_esquema"] = $this->imposicionEsquemaModel->find($imposicion_esquema_id);
$this->viewData['breadcrumb'] = [
['title' => lang("App.menu_imposiciones"), 'route' => route_to("imposicionList"), 'active' => false],
['title' => $this->viewData["imposicion_esquema"]->name, 'route' => route_to("updateImposicionEsquemaForm", $imposicion_esquema_id), 'active' => true],
if ($this->request->getPost()) :
];
}
return view(static::$viewPath . 'viewImposicionEsquemaForm', $this->viewData);
}
public function update($imposicion_id = null)
$nullIfEmpty = true; // !(phpversion() >= '8.1');
$postData = $this->request->getPost();
$sanitizedData = $this->sanitized($postData, $nullIfEmpty);
$noException = true;
if ($successfulResult = $this->canValidate()) : // if ($successfulResult = $this->validate($this->formValidationRules) ) :
if ($this->canValidate()) :
try {
$successfulResult = $this->model->skipValidation(true)->save($sanitizedData);
} catch (\Exception $e) {
$noException = false;
$this->dealWithException($e);
}
else:
$this->viewData['errorMessage'] = lang('Basic.global.formErr1', [lang('Basic.global.record')]);
$this->session->setFlashdata('formErrors', $this->model->errors());
endif;
$thenRedirect = true; // Change this to false if you want your user to stay on the form after submission
endif;
if ($noException && $successfulResult) :
$id = $this->model->db->insertID();
$message = lang('Basic.global.saveSuccess', [lang('Basic.global.record')]) . '.';
if ($thenRedirect) :
if (!empty($this->indexRoute)) :
return redirect()->to(route_to($this->indexRoute))->with('sweet-success', $message);
else:
return $this->redirect2listView('sweet-success', $message);
endif;
else:
$this->session->setFlashData('sweet-success', $message);
endif;
endif; // $noException && $successfulResult
endif; // ($requestMethod === 'post')
$this->viewData['imposicion'] = isset($sanitizedData) ? new Imposicion($sanitizedData) : new Imposicion();
$this->viewData['orientacionList'] = $this->getOrientacionOptions();
$this->viewData['formAction'] = route_to('createImposicion');
$this->viewData['boxTitle'] = lang('Basic.global.addNew') . ' ' . lang('Imposiciones.moduleTitle') . ' ' . lang('Basic.global.addNewSuffix');
return $this->displayForm(__METHOD__);
} // end function add()
public function edit($requestedId = null)
{
if ($imposicion_id) {
$bodyData = $this->request->getPost();
if(isset($bodyData["imposicion_esquema_id"])){
if($bodyData["imposicion_esquema_id"] == ""){
$bodyData["imposicion_esquema_id"] = null;
}
}
$status = $this->model->update($imposicion_id, $bodyData);
if ($status) {
$imposicionEntity = $this->model->find($imposicion_id);
} else {
return $this->response->setJSON(["message" => lang("App.global_alert_save_error"), "errors" => $this->model->errors(), "status" => true])->setStatusCode(400);
}
return $this->response->setJSON(["message" => lang("App.global_alert_save_success"), "status" => $status, "data" => $imposicionEntity]);
} else {
return $this->response->setJSON(["message" => lang("App.global_alert_save_error"), "message" => "", "status" => false])->setStatusCode(400);
}
}
public function update_imposicion_esquema($imposicion_esquema_id = null)
{
if ($imposicion_esquema_id) {
$bodyData = $this->request->getPost();
$status = $this->imposicionEsquemaModel->update($imposicion_esquema_id, $bodyData);
if ($status) {
$imposicionEsquemaEntity = $this->imposicionEsquemaModel->find($imposicion_esquema_id);
} else {
return $this->response->setJSON(["message" => lang("App.global_alert_save_error"), "errors" => $this->imposicionEsquemaModel->errors(), "status" => true])->setStatusCode(400);
}
return $this->response->setJSON(["message" => lang("App.global_alert_save_success"), "status" => $status, "data" => $imposicionEsquemaEntity]);
} else {
return $this->response->setJSON(["message" => lang("App.global_alert_save_error"), "message" => "", "status" => false])->setStatusCode(400);
}
}
public function delete($imposicion_id = null)
{
$status = $this->model->delete($imposicion_id);
return $this->response->setJSON(["message" => lang("App.user_alert_delete"), "status" => true]);
}
public function delete_imposicion_esquema($imposicion_esquema_id = null)
{
$status = $this->imposicionEsquemaModel->delete($imposicion_esquema_id);
return $this->response->setJSON(["message" => lang("App.user_alert_delete"), "status" => $status]);
}
if ($requestedId == null) :
return $this->redirect2listView();
endif;
$id = filter_var($requestedId, FILTER_SANITIZE_URL);
$imposicion = $this->model->find($id);
if ($imposicion == false) :
$message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Imposiciones.imposicion')), $id]);
return $this->redirect2listView('sweet-error', $message);
endif;
if ($this->request->getPost()) :
$nullIfEmpty = true; // !(phpversion() >= '8.1');
$postData = $this->request->getPost();
$sanitizedData = $this->sanitized($postData, $nullIfEmpty);
$noException = true;
if ($successfulResult = $this->canValidate()) : // if ($successfulResult = $this->validate($this->formValidationRules) ) :
if ($this->canValidate()) :
try {
$successfulResult = $this->model->skipValidation(true)->update($id, $sanitizedData);
} catch (\Exception $e) {
$noException = false;
$this->dealWithException($e);
}
else:
$this->viewData['warningMessage'] = lang('Basic.global.formErr1', [mb_strtolower(lang('Imposiciones.imposicion'))]);
$this->session->setFlashdata('formErrors', $this->model->errors());
endif;
$imposicion->fill($sanitizedData);
$thenRedirect = false;
endif;
if ($noException && $successfulResult) :
$id = $imposicion->id ?? $id;
$message = lang('Basic.global.updateSuccess', [lang('Basic.global.record')]) . '.';
if ($thenRedirect) :
if (!empty($this->indexRoute)) :
return redirect()->to(route_to($this->indexRoute))->with('sweet-success', $message);
else:
return $this->redirect2listView('sweet-success', $message);
endif;
else:
$this->session->setFlashData('sweet-success', $message);
endif;
endif; // $noException && $successfulResult
endif; // ($requestMethod === 'post')
$this->viewData['imposicion'] = $imposicion;
$this->viewData['orientacionList'] = $this->getOrientacionOptions();
$this->viewData['formAction'] = route_to('updateImposicion', $id);
$this->viewData['boxTitle'] = lang('Basic.global.edit2') . ' ' . lang('Imposiciones.moduleTitle') . ' ' . lang('Basic.global.edit3');
return $this->displayForm(__METHOD__, $id);
} // end function edit(...)
public function datatable()
{
$q = $this->model->queryDatatable();
return DataTable::of($q)
->add('esquema', fn($q) => ["imposicionId" => $q->id,"esquemaId" => $q->esquemaId, "esquemaName" => $q->esquemaName])
->add(
'action',
fn($q) => "<div class='btn-group btn-group-md gap-2 w-100 d-flex justify-space-between'>" . ImposicionModel::datatable_buttons($q->id) . "</div>"
)
->toJson(true);
if ($this->request->isAJAX()) {
$reqData = $this->request->getPost();
if (!isset($reqData['draw']) || !isset($reqData['columns'])) {
$errstr = 'No data available in response to this specific request.';
$response = $this->respond(Collection::datatable([], 0, 0, $errstr), 400, $errstr);
return $response;
}
$start = $reqData['start'] ?? 0;
$length = $reqData['length'] ?? 5;
$search = $reqData['search']['value'];
$requestedOrder = $reqData['order']['0']['column'] ?? 1;
$order = ImposicionModel::SORTABLE[$requestedOrder > 0 ? $requestedOrder : 1];
$dir = $reqData['order']['0']['dir'] ?? 'asc';
$resourceData = $this->model->getResource($search)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject();
return $this->respond(Collection::datatable(
$resourceData,
$this->model->getResource()->countAllResults(),
$this->model->getResource($search)->countAllResults()
));
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function datatable_imposicion_esquema()
public function allItemsSelect()
{
$q = $this->imposicionEsquemaModel->queryDatatable();
return DataTable::of($q)
->add(
'action',
fn($q) => "<div class='btn-group btn-group-md gap-2'>" . ImposicionEsquemaModel::datatable_buttons($q->id) . "</div>"
)
->toJson(true);
if ($this->request->isAJAX()) {
$onlyActiveOnes = true;
$reqVal = $this->request->getPost('val') ?? 'id';
$menu = $this->model->getAllForMenu($reqVal . ', ancho', 'ancho', $onlyActiveOnes, false);
$nonItem = new \stdClass;
$nonItem->id = '';
$nonItem->ancho = '- ' . 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);
}
}
public function menuItems()
{
if ($this->request->isAJAX()) {
$searchStr = goSanitize($this->request->getPost('searchTerm'))[0];
$reqId = goSanitize($this->request->getPost('id'))[0];
$reqText = goSanitize($this->request->getPost('text'))[0];
$onlyActiveOnes = false;
$columns2select = [$reqId ?? 'id', $reqText ?? 'ancho'];
$onlyActiveOnes = false;
$menu = $this->model->getSelect2MenuItems($columns2select, $columns2select[1], $onlyActiveOnes, $searchStr);
$nonItem = new \stdClass;
$nonItem->id = '';
$nonItem->text = '- ' . lang('Basic.global.None') . ' -';
array_unshift($menu, $nonItem);
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
$data = [
'menu' => $menu,
$csrfTokenName => $newTokenHash
];
return $this->respond($data);
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function selectImposicion()
protected function getOrientacionOptions()
{
$data = $this->model->querySelect($this->request->getGet('q'));
return $this->response->setJSON($data);
}
public function selectImposicionEsquema()
{
$data = $this->imposicionEsquemaModel->querySelect($this->request->getGet('q'));
return $this->response->setJSON($data);
}
public function find_imposicion(int $imposicion_id)
{
$imposicionEntity = $this->model->find($imposicion_id)->withImposicionEsquema();
return $this->response->setJSON($imposicionEntity);
}
public function find_imposicion_esquema(int $imposicion_esquema_id)
{
$imposicionEsquemaEntity = $this->imposicionEsquemaModel->find($imposicion_esquema_id);
return $this->response->setJSON($imposicionEsquemaEntity);
}
public function create()
{
$bodyData = $this->request->getPost();
$createdId = $this->model->insert($bodyData);
if ($createdId) {
return $this->response->setJSON(["message" => lang("App.global_alert_save_success"), "status" => true]);
} else {
return $this->response->setJSON(["message" => lang("App.global_alert_save_error"), "errors" => $this->model->errors(), "status" => true])->setStatusCode(400);
}
}
public function create_imposicion_esquema()
{
$bodyData = $this->request->getPost();
$createdId = $this->imposicionEsquemaModel->insert($bodyData);
if ($createdId) {
return $this->response->setJSON(["message" => lang("App.global_alert_save_success"), "status" => true]);
} else {
return $this->response->setJSON(["message" => lang("App.global_alert_save_error"), "errors" => $this->imposicionEsquemaModel->errors(), "status" => true])->setStatusCode(400);
}
$orientacionOptions = [
'' => lang('Basic.global.pleaseSelect'),
'H' => 'H',
'V' => 'V',
];
return $orientacionOptions;
}
}

View File

@ -1,86 +0,0 @@
<?php
namespace App\Controllers\Configuracion;
use App\Controllers\BaseController;
use App\Models\Configuracion\MaquinaTareaModel;
use CodeIgniter\HTTP\Response;
use Hermawan\DataTables\DataTable;
use CodeIgniter\I18n\Time;
class MaquinaTarea extends BaseController
{
protected MaquinaTareaModel $maquinaTareaModel;
protected $format = 'json';
protected array $viewData = [];
protected static $viewPath = 'themes/vuexy/form/configuracion/maquina_tareas/';
protected static $controllerSlug = "maquina-tareas";
protected $indexRoute = 'viewMaquinaTarea';
protected $editRoute = 'editMaquinaTarea';
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
{
parent::initController($request, $response, $logger);
$this->maquinaTareaModel = model(MaquinaTareaModel::class);
}
public function index()
{
$this->viewData['breadcrumb'] = [
['title' => lang("App.menu_configuration"), 'route' => "javascript:void(0);", 'active' => false],
['title' => lang("App.menu_maquina_tareas"), 'route' => site_url('configuracion/maquina-tareas'), 'active' => true]
];
return view(static::$viewPath . $this->indexRoute, $this->viewData);
}
public function viewForm(int $maquina_tarea_id)
{
$maquinaTarea = $this->maquinaTareaModel->find($maquina_tarea_id);
$this->viewData['breadcrumb'] = [
['title' => lang("App.menu_configuration"), 'route' => "javascript:void(0);", 'active' => false],
['title' => lang("App.menu_maquina_tareas"), 'route' => site_url('configuracion/maquina-tareas'), 'active' => false],
['title' => $maquinaTarea->name, 'route' => site_url('configuracion/maquina-tareas/edit/' . $maquina_tarea_id), 'active' => true]
];
$this->viewData["model"] = $maquinaTarea;
return view(static::$viewPath . $this->editRoute, $this->viewData);
}
public function show(int $id)
{
$data = $this->maquinaTareaModel->find($id);
return $this->response->setJSON($data);
}
public function update_servicio_cliente(int $id)
{
$data = $this->request->getPost();
$status = $this->maquinaTareaModel->update($id, [
"name" => $data["name"],
"description" => $data["description"]
]);
return $this->response->setJSON(["message" => lang("App.global_alert_save_success"), "status" => $status]);
}
public function store()
{
$bodyData = $this->request->getPost();
$r = $this->maquinaTareaModel->insert($bodyData);
return $this->response->setJSON(["message" => lang("App.global_alert_save_success"), "status" => $r,"data" => $bodyData]);
}
public function delete(int $maquina_tarea_id){
$r = $this->maquinaTareaModel->delete($maquina_tarea_id);
return $this->response->setJSON(["message" => lang("App.user_alert_delete"), "status" => $r]);
}
public function datatable()
{
$query = $this->maquinaTareaModel->getQueryDatatable()->orderBy("created_at", "DESC");
return DataTable::of($query)
->edit('created_at', fn($q) => $q->created_at ? Time::createFromFormat('Y-m-d H:i:s', $q->created_at)->format("d/m/Y H:i") : "")
->add("action", fn($q) => $q->id)
->toJson(true);
}
}

View File

@ -1,5 +1,4 @@
<?php
namespace App\Controllers\Configuracion;
<?php namespace App\Controllers\Configuracion;
use App\Controllers\BaseResourceController;
@ -9,8 +8,6 @@ use App\Models\Collection;
use App\Entities\Configuracion\Maquina;
use App\Models\Configuracion\MaquinaModel;
use App\Services\MaquinaService;
use CodeIgniter\Validation\Validation;
class Maquinas extends \App\Controllers\BaseResourceController
{
@ -29,25 +26,23 @@ class Maquinas extends \App\Controllers\BaseResourceController
protected $indexRoute = 'maquinaList';
protected MaquinaService $maquinaService;
protected Validation $validation;
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
{
$this->viewData['pageTitle'] = lang('Maquinas.moduleTitle');
$this->viewData['usingSweetAlert'] = true;
$this->maquinaService = service('maquina');
$this->validation = service('validation');
// Se indica que este controlador trabaja con soft_delete
$this->soft_delete = true;
// Se indica el flag para los ficheros borrados
$this->delete_flag = 1;
$this->viewData = ['usingServerSideDataTable' => true]; // JJO
// Breadcrumbs (IMN)
$this->viewData['breadcrumb'] = [
['title' => lang("App.menu_configuration"), 'route' => "javascript:void(0);", 'active' => false],
['title' => lang("App.menu_maquina"), 'route' => route_to('maquinaList'), 'active' => true]
['title' => lang("App.menu_maquina"), 'route' => site_url('configuracion/maquinas'), 'active' => true]
];
parent::initController($request, $response, $logger);
@ -56,7 +51,6 @@ class Maquinas extends \App\Controllers\BaseResourceController
public function index()
{
checkPermission('maquinas.menu');
$viewData = [
'currentModule' => static::$controllerSlug,
@ -71,52 +65,14 @@ class Maquinas extends \App\Controllers\BaseResourceController
return view(static::$viewPath . 'viewMaquinaList', $viewData);
}
public function delete($id = null)
{
// Sanitizar el ID
$id = filter_var($id, FILTER_SANITIZE_URL);
// Validar que el ID es válido
if (empty($id) || !is_numeric($id)) {
return $this->respond(['status' => 'error', 'msg' => 'ID no válida']);
}
// Buscar la máquina en la base de datos
$maquina = $this->model->find($id);
if (!$maquina) {
$message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Maquinas.maquina')), $id]);
return $this->respond(['status' => 'error', 'msg' => 'ID no válida']);
}
// Verificar que el usuario está autenticado
if (!auth()->user()) {
return $this->respond(['status' => 'error', 'msg' => 'Usuario no autenticado']);
}
// Preparar los datos para actualizar
$data = [
'id' => $id,
'is_deleted' => 1,
'deleted_at' => date('Y-m-d H:i:s'),
'user_updated_id' => auth()->user()->id,
];
// Guardar los cambios
if (!$this->model->save($data)) {
return $this->respond(['status' => 'error', 'msg' => 'Error al eliminar']);
}
// Retornar éxito
$message = lang('Basic.global.deleteSuccess', [lang('Basic.global.record')]) . '.';
return $this->respond(['status' => 'error', 'msg' => $message]);
}
public function add()
{
checkPermission('maquinas.create');
if ($this->request->getPost()):
if ($this->request->getPost()) :
$nullIfEmpty = true; // !(phpversion() >= '8.1');
@ -128,10 +84,10 @@ class Maquinas extends \App\Controllers\BaseResourceController
$sanitizedData['user_created_id'] = auth()->user()->id;
$noException = true;
if ($successfulResult = $this->canValidate()): // if ($successfulResult = $this->validate($this->formValidationRules) ) :
if ($successfulResult = $this->canValidate()) : // if ($successfulResult = $this->validate($this->formValidationRules) ) :
if ($this->canValidate()):
if ($this->canValidate()) :
try {
$successfulResult = $this->model->skipValidation(true)->save($sanitizedData);
} catch (\Exception $e) {
@ -145,14 +101,14 @@ class Maquinas extends \App\Controllers\BaseResourceController
$thenRedirect = true; // Change this to false if you want your user to stay on the form after submission
endif;
if ($noException && $successfulResult):
if ($noException && $successfulResult) :
$id = $this->model->db->insertID();
$message = lang('Basic.global.saveSuccess', [lang('Basic.global.record')]) . '.';
if ($thenRedirect):
if (!empty($this->indexRoute)):
if ($thenRedirect) :
if (!empty($this->indexRoute)) :
//return redirect()->to(route_to($this->indexRoute))->with('sweet-success', $message);
return redirect()->to(site_url('configuracion/maquinas/edit/' . $id))->with('sweet-success', $message);
else:
@ -180,22 +136,22 @@ class Maquinas extends \App\Controllers\BaseResourceController
public function edit($requestedId = null)
{
checkPermission('maquinas.edit');
if ($requestedId == null):
if ($requestedId == null) :
return $this->redirect2listView();
endif;
$id = filter_var($requestedId, FILTER_SANITIZE_URL);
$maquina = $this->model->find($id);
if ($maquina == false):
if ($maquina == false) :
$message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Maquinas.maquina')), $id]);
return $this->redirect2listView('sweet-error', $message);
endif;
if ($this->request->getPost()):
if ($this->request->getPost()) :
$nullIfEmpty = true; // !(phpversion() >= '8.1');
@ -211,26 +167,21 @@ class Maquinas extends \App\Controllers\BaseResourceController
if ($this->request->getPost('is_inkjet') == null) {
$sanitizedData['is_inkjet'] = false;
}
if ($this->request->getPost('etiqueta_envio') == null) {
$sanitizedData['etiqueta_envio'] = false;
}
// JJO
$sanitizedData['user_updated_id'] = auth()->user()->id;
$noException = true;
if ($successfulResult = $this->canValidate()): // if ($successfulResult = $this->validate($this->formValidationRules) ) :
if ($successfulResult = $this->canValidate()) : // if ($successfulResult = $this->validate($this->formValidationRules) ) :
if ($this->canValidate()):
if ($this->canValidate()) :
//JJO: comprobar alto y ancho impresion < alto y ancho
if ($sanitizedData['alto'] < $sanitizedData['alto_impresion']) {
$successfulResult = false;
$this->viewData['errorMessage'] = lang('Maquinas.validation.alto_menor_alto_impresion');
;
$this->viewData['errorMessage'] = lang('Maquinas.validation.alto_menor_alto_impresion');;
$this->session->setFlashdata('formErrors', $this->model->errors());
} else if ($sanitizedData['ancho'] < $sanitizedData['ancho_impresion']) {
$successfulResult = false;
$this->viewData['errorMessage'] = lang('Maquinas.validation.ancho_menor_ancho_impresion');
;
$this->viewData['errorMessage'] = lang('Maquinas.validation.ancho_menor_ancho_impresion');;
$this->session->setFlashdata('formErrors', $this->model->errors());
} else {
try {
@ -251,12 +202,12 @@ class Maquinas extends \App\Controllers\BaseResourceController
$thenRedirect = false;
endif;
if ($noException && $successfulResult):
if ($noException && $successfulResult) :
$id = $maquina->id ?? $id;
$message = lang('Basic.global.updateSuccess', [lang('Basic.global.record')]) . '.';
if ($thenRedirect):
if (!empty($this->indexRoute)):
if ($thenRedirect) :
if (!empty($this->indexRoute)) :
return redirect()->to(route_to($this->indexRoute))->with('sweet-success', $message);
else:
return $this->redirect2listView('sweet-success', $message);
@ -292,24 +243,22 @@ class Maquinas extends \App\Controllers\BaseResourceController
}
$start = $reqData['start'] ?? 0;
$length = $reqData['length'] ?? 5;
$searchValues = get_filter_datatables_columns($reqData);
$requestedOrder = $reqData['order'] ?? [];
$search = $reqData['search']['value'];
$requestedOrder = $reqData['order']['0']['column'] ?? 1;
$order = MaquinaModel::SORTABLE[$requestedOrder >= 0 ? $requestedOrder : 1];
$dir = $reqData['order']['0']['dir'] ?? 'asc';
$resourceData = $this->model->getResource($searchValues);
foreach ($requestedOrder as $order) {
$column = $order['column'] ?? 0;
$dir = $order['dir'] ?? 'asc';
$orderColumn = MaquinaModel::SORTABLE[$column] ?? null;
if ($orderColumn) {
$resourceData->orderBy($orderColumn, $dir);
}
}
$resourceData = $resourceData->limit($length, $start)->get()->getResultObject();
$resourceData = $this->model->getResource($search)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject();
foreach ($resourceData as $item) :
if (isset($item->observaciones) && strlen($item->observaciones) > 100) :
$item->observaciones = character_limiter($item->observaciones, 100);
endif;
endforeach;
return $this->respond(Collection::datatable(
$resourceData,
$this->model->getResource([])->countAllResults(),
$this->model->getResource($searchValues)->countAllResults()
$this->model->getResource()->countAllResults(),
$this->model->getResource($search)->countAllResults()
));
} else {
return $this->failUnauthorized('Invalid request', 403);
@ -348,7 +297,7 @@ class Maquinas extends \App\Controllers\BaseResourceController
$onlyActiveOnes = false;
$columns2select = [$reqId ?? 'id', $reqText ?? 'nombre'];
$onlyActiveOnes = false;
$menu = $this->model->getSelect2MenuItems($columns2select, $columns2select[1], $onlyActiveOnes, $searchStr, true);
$menu = $this->model->getSelect2MenuItems($columns2select, $columns2select[1], $onlyActiveOnes, $searchStr);
$nonItem = new \stdClass;
$nonItem->id = '';
$nonItem->text = '- ' . lang('Basic.global.None') . ' -';
@ -366,19 +315,15 @@ class Maquinas extends \App\Controllers\BaseResourceController
}
}
public function select(){
$r = $this->model->getSelectQuery($this->request->getGet("q"));
return $this->response->setJSON($r);
}
protected function getMaquinaListItems($selId = null)
{
$data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Maquinas.maquina'))])];
if (!empty($selId)):
if (!empty($selId)) :
$maquinaModel = model('App\Models\Configuracion\MaquinaModel');
$selOption = $maquinaModel->where('id', $selId)->findColumn('nombre');
if (!empty($selOption)):
if (!empty($selOption)) :
$data[$selId] = $selOption[0];
endif;
endif;
@ -396,23 +341,6 @@ class Maquinas extends \App\Controllers\BaseResourceController
];
return $tipoOptions;
}
public function duplicate(int $maquina_id)
{
$bodyData = $this->request->getPost();
$validated = $this->validation->run($bodyData,'maquina_duplicate');
if($validated){
$this->maquinaService->setMaquina($maquina_id);
$duplicated = $this->maquinaService->duplicate($bodyData['name']);
return $this->response->setJSON(["data" => $duplicated]);
}else{
return $this->response->setJSON(["errors" => $this->validation->getErrors()])->setStatusCode(400);
}
}
public function find_maquina(int $maquina_id){
$maquinaEntity = $this->model->find($maquina_id);
return $this->response->setJSON($maquinaEntity);
}
}

View File

@ -28,8 +28,6 @@ class Maquinasdefecto extends \App\Controllers\BaseResourceController
protected $indexRoute = 'maquinaPorDefectoList';
protected $deletePermission = 'maquinas-defecto.delete';
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()
{
checkPermission('maquinas-defecto.menu');
$viewData = [
'currentModule' => static::$controllerSlug,
@ -66,7 +63,7 @@ class Maquinasdefecto extends \App\Controllers\BaseResourceController
public function add()
{
checkPermission('maquinas-defecto.create');
if ($this->request->getPost()) :
@ -141,7 +138,6 @@ class Maquinasdefecto extends \App\Controllers\BaseResourceController
public function edit($requestedId = null)
{
checkPermission('maquinas-defecto.edit');
if ($requestedId == null) :
return $this->redirect2listView();

View File

@ -100,7 +100,6 @@ class Maquinaspapelesimpresion extends \App\Controllers\BaseResourceController {
$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();
$query =$this->model->getLastQuery();
return $this->respond(Collection::datatable(
$resourceData,
$this->model->getResource("", $isRotativa, $tarifas, $maquina_id)->countAllResults(),
@ -226,9 +225,7 @@ class Maquinaspapelesimpresion extends \App\Controllers\BaseResourceController {
];
// Se checkea que no haya otro papel con ese gramaje seleccionado y que la accion sea activar ese papel
// Esta funcionalidad esta mal: habría que comprobar también que tienen el mismo papel genérico. Se opta por
// quitar la condición el 22012025
/*if($this->model->getPapelActivo($maquina_id, $gramaje)->countAllResults() != 0 && intval($active)==1){
if($this->model->getPapelActivo($maquina_id, $gramaje)->countAllResults() != 0 && intval($active)==1){
$response['error']= lang('MaquinasPapelImpresion.gramaje_duplicado');;
$ret_vals = [
'DT_RowId' => 'row_'. $papel_id,
@ -238,9 +235,9 @@ class Maquinaspapelesimpresion extends \App\Controllers\BaseResourceController {
];
$response['data'] = $ret_vals;
}
else{*/
else{
$this->model->updateRows([$data]);
//}
}
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();

View File

@ -1,5 +1,4 @@
<?php
namespace App\Controllers\Configuracion;
<?php namespace App\Controllers\Configuracion;
use App\Controllers\BaseResourceController;
@ -10,8 +9,6 @@ use App\Entities\Configuracion\PaisEntity;
use App\Models\Configuracion\PaisModel;
use Hermawan\DataTables\DataTable;
class Paises extends \App\Controllers\BaseResourceController
{
@ -29,7 +26,6 @@ class Paises extends \App\Controllers\BaseResourceController
protected $indexRoute = 'paisList';
protected $deletePermission = 'paises.delete';
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
{
@ -48,7 +44,6 @@ class Paises extends \App\Controllers\BaseResourceController
public function index()
{
checkPermission('paises.menu');
$viewData = [
'currentModule' => static::$controllerSlug,
@ -67,19 +62,17 @@ class Paises extends \App\Controllers\BaseResourceController
public function add()
{
checkPermission('paises.create');
if ($this->request->getPost()):
if ($this->request->getPost()) :
$postData = $this->request->getPost();
$sanitizedData = $this->sanitized($postData, true);
$noException = true;
if ($successfulResult = $this->canValidate()):
if ($successfulResult = $this->canValidate()) :
if ($this->canValidate()):
if ($this->canValidate()) :
try {
$successfulResult = $this->model->skipValidation(true)->save($sanitizedData);
} catch (\Exception $e) {
@ -93,14 +86,14 @@ class Paises extends \App\Controllers\BaseResourceController
$thenRedirect = true; // Change this to false if you want your user to stay on the form after submission
endif;
if ($noException && $successfulResult):
if ($noException && $successfulResult) :
$id = $this->model->db->insertID();
$message = lang('Basic.global.saveSuccess', [lang('Basic.global.record')]) . '.';
if ($thenRedirect):
if (!empty($this->indexRoute)):
if ($thenRedirect) :
if (!empty($this->indexRoute)) :
return redirect()->to(route_to($this->indexRoute))->with('sweet-success', $message);
else:
return $this->redirect2listView('sweet-success', $message);
@ -123,22 +116,21 @@ class Paises extends \App\Controllers\BaseResourceController
public function edit($requestedId = null)
{
checkPermission('paises.edit');
if ($requestedId == null):
if ($requestedId == null) :
return $this->redirect2listView();
endif;
$id = filter_var($requestedId, FILTER_SANITIZE_URL);
$paisEntity = $this->model->find($id);
if ($paisEntity == false):
if ($paisEntity == false) :
$message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Paises.pais')), $id]);
return $this->redirect2listView('sweet-error', $message);
endif;
if ($this->request->getPost()):
if ($this->request->getPost()) :
$nullIfEmpty = true; // !(phpversion() >= '8.1');
@ -151,10 +143,10 @@ class Paises extends \App\Controllers\BaseResourceController
$noException = true;
if ($successfulResult = $this->canValidate()): // if ($successfulResult = $this->validate($this->formValidationRules) ) :
if ($successfulResult = $this->canValidate()) : // if ($successfulResult = $this->validate($this->formValidationRules) ) :
if ($this->canValidate()):
if ($this->canValidate()) :
try {
$successfulResult = $this->model->skipValidation(true)->update($id, $sanitizedData);
} catch (\Exception $e) {
@ -171,12 +163,12 @@ class Paises extends \App\Controllers\BaseResourceController
$thenRedirect = false;
endif;
if ($noException && $successfulResult):
if ($noException && $successfulResult) :
$id = $paisEntity->id ?? $id;
$message = lang('Basic.global.updateSuccess', [lang('Basic.global.record')]) . '.';
if ($thenRedirect):
if (!empty($this->indexRoute)):
if ($thenRedirect) :
if (!empty($this->indexRoute)) :
return redirect()->to(route_to($this->indexRoute))->with('sweet-success', $message);
else:
return $this->redirect2listView('sweet-success', $message);
@ -201,38 +193,30 @@ class Paises extends \App\Controllers\BaseResourceController
public function datatable()
{
$q = $this->model->getDatatableQuery();
if ($this->request->isAJAX()) {
$reqData = $this->request->getPost();
if (!isset($reqData['draw']) || !isset($reqData['columns'])) {
$errstr = 'No data available in response to this specific request.';
$response = $this->respond(Collection::datatable([], 0, 0, $errstr), 400, $errstr);
return $response;
}
$start = $reqData['start'] ?? 0;
$length = $reqData['length'] ?? 5;
$search = $reqData['search']['value'];
$requestedOrder = $reqData['order']['0']['column'] ?? 1;
$order = PaisModel::SORTABLE[$requestedOrder > 0 ? $requestedOrder : 1];
$dir = $reqData['order']['0']['dir'] ?? 'asc';
$result = DataTable::of($q)
->edit(
"show_erp",
function ($row, $meta) {
if($row->show_erp == 1) {
return '<i class="ti ti-check"></i>';
}else{
return '';
}
}
)
->add("actionBtns", callback: function ($q) {
$actions = '';
if (auth()->user()->can('paises.edit')) {
$actions .= '
<div class="btn-group btn-group-sm">
<a href="javascript:void(0);"><i class="ti ti-pencil ti-sm btn-edit mx-2" data-id="' . $q->id . '"></i></a>
</div>';
}
if (auth()->user()->can('paises.delete')) {
$actions .= '
<div class="btn-group btn-group-sm">
<a href="javascript:void(0);"><i class="ti ti-trash ti-sm btn-delete mx-2" data-id="' . $q->id . '"></i></a>
</div>';
}
return $actions;
});
return $result->toJson(returnAsObject: true);
$resourceData = $this->model->getResource($search)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject();
return $this->respond(Collection::datatable(
$resourceData,
$this->model->getResource()->countAllResults(),
$this->model->getResource($search)->countAllResults()
));
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function allItemsSelect()
@ -285,25 +269,4 @@ class Paises extends \App\Controllers\BaseResourceController
}
}
public function menuItems2()
{
if ($this->request->isAJAX()) {
$query = $this->model->builder()->select(
[
"id",
"nombre as name"
]
)->orderBy("nombre", "asc");
if ($this->request->getGet("q")) {
$query->groupStart()
->orLike("lg_paises.nombre", $this->request->getGet("q"))
->groupEnd();
}
return $this->response->setJSON($query->get()->getResultObject());
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
}

View File

@ -28,7 +28,6 @@ class Papelesgenericos extends \App\Controllers\BaseResourceController
protected $indexRoute = 'papelGenericoList';
protected $deletePermission = 'papel-generico.delete';
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
@ -41,12 +40,10 @@ class Papelesgenericos extends \App\Controllers\BaseResourceController
// Se indica el flag para los ficheros borrados
$this->delete_flag = 1;
$this->papelService = service('papel');
// Breadcrumbs (IMN)
$this->viewData['breadcrumb'] = [
['title' => lang("App.menu_configuration"), 'route' => "javascript:void(0);", 'active' => false],
['title' => lang("App.menu_papelgenerico"), 'route' => route_to('papelGenericoList'), 'active' => true]
['title' => lang("App.menu_papelgenerico"), 'route' => site_url('configuracion/papelesgenericos'), 'active' => true]
];
parent::initController($request, $response, $logger);
@ -55,7 +52,6 @@ class Papelesgenericos extends \App\Controllers\BaseResourceController
public function index()
{
checkPermission('papel-generico.menu');
$viewData = [
'currentModule' => static::$controllerSlug,
@ -73,9 +69,12 @@ class Papelesgenericos extends \App\Controllers\BaseResourceController
public function add()
{
checkPermission('papel-generico.create');
if ($this->request->getPost()):
if ($this->request->getPost()) :
$nullIfEmpty = true; // !(phpversion() >= '8.1');
@ -85,46 +84,44 @@ class Papelesgenericos extends \App\Controllers\BaseResourceController
$noException = true;
if ($successfulResult = $this->canValidate()): // if ($successfulResult = $this->validate($this->formValidationRules) ) :
if ($successfulResult = $this->canValidate()) : // if ($successfulResult = $this->validate($this->formValidationRules) ) :
if ($this->canValidate()):
if ($this->canValidate()) :
try {
$successfulResult = $this->model->skipValidation(true)->save($sanitizedData);
} catch (\Exception $e) {
$noException = false;
$this->dealWithException($e);
}
else:
else :
$this->viewData['errorMessage'] = lang('Basic.global.formErr1', [lang('Basic.global.record')]);
$this->session->setFlashdata('formErrors', $this->model->errors());
endif;
$thenRedirect = true; // Change this to false if you want your user to stay on the form after submission
endif;
if ($noException && $successfulResult):
if ($noException && $successfulResult) :
$id = $this->model->db->insertID();
$message = lang('Basic.global.saveSuccess', [lang('Basic.global.record')]) . '.';
if ($thenRedirect):
if (!empty($this->indexRoute)):
if ($thenRedirect) :
if (!empty($this->indexRoute)) :
return redirect()->to(route_to($this->indexRoute))->with('sweet-success', $message);
else:
else :
return $this->redirect2listView('sweet-success', $message);
endif;
else:
else :
$this->session->setFlashData('sweet-success', $message);
endif;
endif; // $noException && $successfulResult
endif; // ($requestMethod === 'post')
$this->viewData['papelGenerico'] = isset($sanitizedData) ? new PapelGenerico($sanitizedData) : new PapelGenerico();
$this->viewData['tipoPapelGenericoList'] = $this->papelService->getTipoPapelGenerico();
$this->viewData['papelGenerico'] = isset($sanitizedData) ? new PapelGenerico($sanitizedData) : new PapelGenerico();
$this->viewData['formAction'] = route_to('createPapelGenerico');
@ -135,21 +132,21 @@ class Papelesgenericos extends \App\Controllers\BaseResourceController
public function edit($requestedId = null)
{
checkPermission('papel-generico.edit');
if ($requestedId == null):
if ($requestedId == null) :
return $this->redirect2listView();
endif;
$id = filter_var($requestedId, FILTER_SANITIZE_URL);
$papelGenerico = $this->model->find($id);
if ($papelGenerico == false):
if ($papelGenerico == false) :
$message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('PapelGenerico.papelGenerico')), $id]);
return $this->redirect2listView('sweet-error', $message);
endif;
if ($this->request->getPost()):
if ($this->request->getPost()) :
$nullIfEmpty = true; // !(phpversion() >= '8.1');
@ -159,33 +156,22 @@ class Papelesgenericos extends \App\Controllers\BaseResourceController
if ($this->request->getPost('show_in_client') == null) {
$sanitizedData['show_in_client'] = false;
}
if ($this->request->getPost('activo') == null) {
$sanitizedData['activo'] = false;
}
if ($this->request->getPost('show_in_client_special') == null) {
$sanitizedData['show_in_client_special'] = false;
}
if ($sanitizedData['show_in_client_special']) {
$sanitizedData['show_in_client'] = true;
}
if ($sanitizedData['activo']) {
$sanitizedData['activo'] = true;
}
$noException = true;
if ($successfulResult = $this->canValidate()): // if ($successfulResult = $this->validate($this->formValidationRules) ) :
if ($successfulResult = $this->canValidate()) : // if ($successfulResult = $this->validate($this->formValidationRules) ) :
if ($this->canValidate()):
if ($this->canValidate()) :
try {
$successfulResult = $this->model->skipValidation(true)->update($id, $sanitizedData);
} catch (\Exception $e) {
$noException = false;
$this->dealWithException($e);
}
else:
else :
$this->viewData['warningMessage'] = lang('Basic.global.formErr1', [mb_strtolower(lang('PapelGenerico.papelGenerico'))]);
$this->session->setFlashdata('formErrors', $this->model->errors());
@ -195,17 +181,17 @@ class Papelesgenericos extends \App\Controllers\BaseResourceController
$thenRedirect = false;
endif;
if ($noException && $successfulResult):
if ($noException && $successfulResult) :
$id = $papelGenerico->id ?? $id;
$message = lang('Basic.global.updateSuccess', [lang('Basic.global.record')]) . '.';
$message = lang('Basic.global.updateSuccess', [lang('Basic.global.record')]).'.';
if ($thenRedirect):
if (!empty($this->indexRoute)):
if ($thenRedirect) :
if (!empty($this->indexRoute)) :
return redirect()->to(route_to($this->indexRoute))->with('sweet-success', $message);
else:
else :
return $this->redirect2listView('sweet-success', $message);
endif;
else:
else :
$this->session->setFlashData('sweet-success', $message);
endif;
@ -214,14 +200,12 @@ class Papelesgenericos extends \App\Controllers\BaseResourceController
$this->viewData['papelGenerico'] = $papelGenerico;
$this->viewData['tipoPapelGenericoList'] = $this->papelService->getTipoPapelGenerico();
$this->viewData['formAction'] = route_to('updatePapelGenerico', $id);
$this->viewData['boxTitle'] = lang('Basic.global.edit2') . ' ' . lang('PapelGenerico.moduleTitle') . ' ' . lang('Basic.global.edit3');
$this->viewData['usingServerSideDataTable'] = true;
return $this->displayForm(__METHOD__, $id);
} // end function edit(...)
@ -287,7 +271,7 @@ class Papelesgenericos extends \App\Controllers\BaseResourceController
$onlyActiveOnes = false;
$columns2select = [$reqId ?? 'id', $reqText ?? 'nombre'];
$onlyActiveOnes = false;
$menu = $this->model->getSelect2MenuItems($columns2select, $columns2select[1], $onlyActiveOnes, $searchStr, true);
$menu = $this->model->getSelect2MenuItems($columns2select, $columns2select[1], $onlyActiveOnes, $searchStr);
$nonItem = new \stdClass;
$nonItem->id = '';
$nonItem->text = '- ' . lang('Basic.global.None') . ' -';
@ -304,115 +288,4 @@ class Papelesgenericos extends \App\Controllers\BaseResourceController
return $this->failUnauthorized('Invalid request', 403);
}
}
public function getPapelCliente()
{
if ($this->request->isAJAX()) {
$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);
$forSelect2 = intval($this->request->getGet('forSelect2') ?? 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);
$menu2 = $this->model->getPapelCliente($tipo, $cubierta, $sobrecubierta, $guardas, $selected_papel, $tapa_dura, true, $POD, $anchoLibro, $alto, $tirada);
if ($forSelect2) {
$menu = array_map(function ($item) {
if (isset($item->id)) {
return [
'id' => $item->id,
'name' => $item->nombre
];
} else {
return [
'id' => $item->gramaje,
'name' => $item->gramaje
];
}
}, $menu);
return $this->respond($menu);
}
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
$data = [
'papeles' => $menu,
'papeles_especiales' => $menu2,
$csrfTokenName => $newTokenHash
];
return $this->respond($data);
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function selectPapelEspecial()
{
if ($this->request->isAJAX()) {
$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];
$cubierta = goSanitize($this->request->getGet('cubierta'))[0] ?? 0;
$sobrecubierta = goSanitize($this->request->getGet('sobrecubierta'))[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);
$tapa_dura = $this->request->getGet('tapa_dura') ?? 0;
$anchoLibro = 2 * $ancho + 2 * $solapas + $lomo;
$items = $this->model->getPapelCliente($tipo, $cubierta, $sobrecubierta, false, null, $tapa_dura, true, $POD, $anchoLibro, $alto, $tirada);
$items = array_map(function ($item) {
return [
'id' => $item->id,
'name' => $item->nombre
];
}, $items);
return $this->response->setJSON($items);
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
}

View File

@ -22,7 +22,6 @@ use
use App\Models\Collection;
use CodeIgniter\Validation\Validation;
@ -36,6 +35,7 @@ use App\Models\Configuracion\PapelImpresionTipologiaModel;
use App\Models\Configuracion\MaquinasPapelesImpresionModel;
use App\Models\Configuracion\MaquinaModel;
class Papelesimpresion extends \App\Controllers\BaseResourceController
{
@ -53,10 +53,6 @@ class Papelesimpresion extends \App\Controllers\BaseResourceController
protected $indexRoute = 'papelImpresionList';
protected $deletePermission = 'papel-impresion.delete';
protected Validation $validation;
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
{
$this->viewData['pageTitle'] = lang('PapelImpresion.moduleTitle');
@ -70,12 +66,11 @@ class Papelesimpresion extends \App\Controllers\BaseResourceController
$this->delete_flag = 1;
$this->tpModel = new PapelImpresionTipologiaModel();
$this->validation = service("validation");
// Breadcrumbs
$this->viewData['breadcrumb'] = [
['title' => lang("App.menu_configuration"), 'route' => "javascript:void(0);", 'active' => false],
['title' => lang("App.menu_papelimpresion"), 'route' => route_to('papelImpresionList'), 'active' => true]
['title' => lang("App.menu_papelimpresion"), 'route' => site_url('configuracion/papelesimpresion'), 'active' => true]
];
parent::initController($request, $response, $logger);
@ -84,7 +79,6 @@ class Papelesimpresion extends \App\Controllers\BaseResourceController
public function index()
{
checkPermission('papel-impresion.menu');
$viewData = [
'currentModule' => static::$controllerSlug,
@ -102,7 +96,7 @@ class Papelesimpresion extends \App\Controllers\BaseResourceController
public function add()
{
checkPermission('papel-impresion.create');
if ($this->request->getPost()) :
@ -165,7 +159,6 @@ class Papelesimpresion extends \App\Controllers\BaseResourceController
public function edit($requestedId = null)
{
checkPermission('papel-impresion.edit');
if ($requestedId == null) :
return $this->redirect2listView();
@ -182,7 +175,7 @@ class Papelesimpresion extends \App\Controllers\BaseResourceController
if ($this->request->getPost()) :
$nullIfEmpty = false; // !(phpversion() >= '8.1');
$nullIfEmpty = true; // !(phpversion() >= '8.1');
$postData = $this->request->getPost();
@ -195,9 +188,6 @@ class Papelesimpresion extends \App\Controllers\BaseResourceController
if ($this->request->getPost('defecto') == null) {
$sanitizedData['defecto'] = false;
}
if ($this->request->getPost('interior') == null) {
$sanitizedData['interior'] = false;
}
if ($this->request->getPost('bn') == null) {
$sanitizedData['bn'] = false;
}
@ -207,9 +197,6 @@ class Papelesimpresion extends \App\Controllers\BaseResourceController
if ($this->request->getPost('cubierta') == null) {
$sanitizedData['cubierta'] = false;
}
if ($this->request->getPost('use_for_tapa_dura') == null) {
$sanitizedData['use_for_tapa_dura'] = false;
}
if ($this->request->getPost('sobrecubierta') == null) {
$sanitizedData['sobrecubierta'] = false;
}
@ -222,12 +209,6 @@ class Papelesimpresion extends \App\Controllers\BaseResourceController
if ($this->request->getPost('inkjet') == null) {
$sanitizedData['inkjet'] = false;
}
if ($this->request->getPost('isActivo') == null) {
$sanitizedData['isActivo'] = false;
}
if ($this->request->getPost('use_in_client') == null) {
$sanitizedData['use_in_client'] = false;
}
// Hay que asegurarse de que se quitan los consumos de tintas de rotativa
// en caso de que se haya deseleccionado la opción rotativa
@ -424,7 +405,7 @@ class Papelesimpresion extends \App\Controllers\BaseResourceController
if (!empty($selId)) :
$papelGenericoModel = model('App\Models\Configuracion\PapelGenericoModel');
$selOption = $papelGenericoModel->where('is_deleted', 0)->where('id', $selId)->findColumn('nombre');
$selOption = $papelGenericoModel->where('id', $selId)->findColumn('nombre');
if (!empty($selOption)) :
$data[$selId] = $selOption[0];
endif;
@ -450,38 +431,4 @@ class Papelesimpresion extends \App\Controllers\BaseResourceController
$ma_pa_model->updateRows($active_values);
}
}
/**
* Duplica el papel impresion y sus relaciones
*
* @param int $papel_impresion_id
* @return Response
*/
public function duplicate( int $papel_impresion_id)
{
$bodyData = $this->request->getPost();
$validated = $this->validation->run($bodyData, "papel_impresion_duplicate");
if($validated){
$papelImpresionEntity = $this->model->find($papel_impresion_id);
$papelImpresionService = service('papel_impresion');
$duplicated = $papelImpresionService
->setPapelImpresionEntity($papelImpresionEntity)
->duplicate($bodyData["name"]);
return $this->response->setJSON(["data" => $duplicated]);
}else{
return $this->response->setJSON(["errors" => $this->validation->getErrors()])->setStatusCode(400);
}
}
public function papel_impresion_select()
{
$q = $this->request->getGet('q');
$data = $this->model->querySelect($q)->get()->getResultArray();
return $this->response->setJSON($data);
}
public function papel_impresion_find(int $papel_impresion_id)
{
$piEntity = $this->model->find($papel_impresion_id);
return $this->response->setJSON($piEntity);
}
}

View File

@ -166,7 +166,7 @@ class Papelimpresionmargenes extends \App\Controllers\BaseResourceController
$id_PI = $reqData['id_PI'] ?? -1;
$resourceData = $this->model->getResource("", $id_PI)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject();
return $this->respond(Collection::datatable(
$resourceData,
$this->model->getResource()->countAllResults(),

View File

@ -271,27 +271,6 @@ class Provincias extends \App\Controllers\BaseResourceController
}
}
public function menuItems2()
{
if ($this->request->isAJAX()) {
$query = $this->model->builder()->select(
[
"id",
"nombre as name"
]
)->orderBy("nombre", "asc");
if ($this->request->getGet("q")) {
$query->groupStart()
->orLike("lg_provincias.nombre", $this->request->getGet("q"))
->groupEnd();
}
return $this->response->setJSON($query->get()->getResultObject());
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
protected function getPaisListItems($selId = null)
{

7
ci4/app/Controllers/Configuracion/SeriesFacturas.php Executable file → Normal file
View File

@ -22,8 +22,6 @@ class SeriesFacturas extends BaseResourceController
protected $indexRoute = 'seriesFacturasList';
protected $deletePermission = 'series-facturas.delete';
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()
{
checkPermission('series-facturas.menu');
$viewData = [
'currentModule' => static::$controllerSlug,
@ -60,8 +57,6 @@ class SeriesFacturas extends BaseResourceController
public function add()
{
checkPermission('series-facturas.create');
if ($this->request->getPost()) :
$postData = $this->request->getPost();
@ -115,8 +110,6 @@ class SeriesFacturas extends BaseResourceController
public function edit($requestedId = null)
{
checkPermission('series-facturas.edit');
if ($requestedId == null) :
return $this->redirect2listView();
endif;

6
ci4/app/Controllers/Configuracion/Ubicaciones.php Executable file → Normal file
View File

@ -22,8 +22,6 @@ class Ubicaciones extends BaseResourceController
protected $indexRoute = 'ubicacionesList';
protected $deletePermission = 'ubicaciones.delete';
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()
{
checkPermission('ubicaciones.menu');
$viewData = [
'currentModule' => static::$controllerSlug,
@ -60,8 +57,6 @@ class Ubicaciones extends BaseResourceController
public function add()
{
checkPermission('ubicaciones.create');
if ($this->request->getPost()) :
$postData = $this->request->getPost();
@ -116,7 +111,6 @@ class Ubicaciones extends BaseResourceController
public function edit($requestedId = null)
{
checkPermission('ubicaciones.edit');
if ($requestedId == null) :
return $this->redirect2listView();

View File

@ -1,16 +1,14 @@
<?php
namespace App\Controllers\Configuracion;
<?php namespace App\Controllers\Configuracion;
use App\Entities\Usuarios\UserEntity;
use App\Models\Chat\ChatDeparmentModel;
use App\Models\Chat\ChatDeparmentUserModel;
use App\Models\Usuarios\GroupModel;
use App\Models\Usuarios\UserModel;
use App\Models\UserModel;
use App\Models\Usuarios\GroupsUsersModel;
use App\Models\Collection;
use CodeIgniter\Shield\Entities\User;
use function PHPUnit\Framework\isNull;
class Users extends \App\Controllers\GoBaseController
{
@ -22,10 +20,10 @@ class Users extends \App\Controllers\GoBaseController
private ChatDeparmentUserModel $chat_department_user_model;
use \CodeIgniter\API\ResponseTrait;
protected static $primaryModelName = UserModel::class;
protected $modelName = ClientePlantillaPreciosLineasModel::class;
protected static $primaryModelName = 'App\Models\UserModel';
protected static $singularObjectNameCc = 'user';
protected static $singularObjectName = 'User';
@ -52,16 +50,19 @@ class Users extends \App\Controllers\GoBaseController
// Breadcrumbs (IMN)
$this->viewData['breadcrumb'] = [
['title' => lang("App.menu_configuration"), 'route' => "javascript:void(0);", 'active' => false],
['title' => lang("App.menu_users"), 'route' => route_to('userList'), 'active' => true]
['title' => lang("App.menu_users"), 'route' => site_url('configuracion/users'), 'active' => true]
];
parent::initController($request, $response, $logger);
}
public function index()
{
$this->viewData['usingServerSideDataTable'] = true;
$this->viewData['usingClientSideDataTable'] = true;
$this->viewData['pageSubTitle'] = lang('Basic.global.ManageAllRecords', [lang('Users.user')]);
$this->viewData['user_model'] = $this->user_model;
$this->viewData['userList2'] = auth()->getProvider()->findAll();
parent::index();
}
@ -69,24 +70,24 @@ class Users extends \App\Controllers\GoBaseController
public function add()
{
if ($this->request->getPost()):
if ($this->request->getPost()) :
$postData = $this->request->getPost();
// Obtener contraseña nueva si se ha introducido en texto plano
if (empty($postData['new_pwd'])) {
$postData['password'] = 'Safekat2024'; // Contraseña por defecto
} else {
}else{
$postData['password'] = $postData['new_pwd'];
}
// Obtener los grupos a los que pertenece
$currentGroups = $postData['group'] ?? [];
$chatDepartments = $postData['chatDepartments'] ?? [];
unset($postData['group']);
unset($postData['chatDepartments']);
// Marcar el username como NULL
// Generar el nombre de usuario
$postData['username'] = strstr($postData['email'], '@', true);
$sanitizedData = $this->sanitized($postData, true);
$noException = true;
@ -94,65 +95,62 @@ class Users extends \App\Controllers\GoBaseController
// Obtener proveedor de usuarios
$users = auth()->getProvider();
if ($successfulResult = $this->canValidate()):
if ($this->canValidate()):
if ($successfulResult = $this->canValidate()) :
if ($this->canValidate()) :
try {
// The Email is unique
if ($this->user_model->isEmailUnique($sanitizedData['email'])) {
// Crear el usuario si pasa la validación
$user = new \CodeIgniter\Shield\Entities\User([
'username' => null, // If you don't have a username, be sure to set the value to null anyway, so that it passes CodeIgniter's empty data check
'first_name' => $sanitizedData['first_name'],
'last_name' => $sanitizedData['last_name'],
'cliente_id' => $sanitizedData['cliente_id'],
'comments' => $sanitizedData['comments'],
'email' => $sanitizedData['email'],
'password' => $sanitizedData['password'],
'status' => $sanitizedData['status'] ?? 0,
'active' => $sanitizedData['active'] ?? 0,
]);
// Add the user to the system
$users->save($user);
$successfulResult = true; // Hacked
} // Email is not unique!
else {
$this->viewData['errorMessage'] = "El correo '" . $sanitizedData['email'] . "' ya está registrado en el sistema";
$this->session->setFlashdata('formErrors', $this->model->errors());
$successfulResult = false; // Hacked
}
$user = new User([
'username' => $sanitizedData['username'],
'first_name' => $sanitizedData['first_name'],
'last_name' => $sanitizedData['last_name'],
'email' => $sanitizedData['email'],
'password' => $sanitizedData['password'],
'status' => $sanitizedData['status'] ?? 0,
'active' => $sanitizedData['active'] ?? 0,
]);
$users->save($user);
$successfulResult = true; // Hacked
} catch (\Exception $e) {
$noException = false;
$this->viewData['errorMessage'] = $e->getMessage();
//$this->dealWithException($e);
if (strpos($e->getMessage(), 'correo duplicado') !== false) {
$this->viewData['errorMessage'] = "El correo electrónico ya está registrado en el sistema";
$this->session->setFlashdata('formErrors', $this->model->errors());
}
}
else:
$this->viewData['errorMessage'] = lang('Basic.global.formErr1', [mb_strtolower(lang('Users.user'))]);
$this->session->setFlashdata('formErrors', $this->model->errors());
endif;
$thenRedirect = true; // Change this to false if you want your user to stay on the form after submission
endif;
if ($noException && $successfulResult):
if ($noException && $successfulResult) :
$id = $users->getInsertID();
// Asignar los grupos de usuarios a los que pertenece el usuario editado
$this->saveUserGroupsSafely($id, $currentGroups);
$this->chat_department_user_model->where("user_id", $id)->delete();
foreach ($chatDepartments as $chatDepartment) {
$this->group_user_model->where('user_id', $id)->delete();
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();
foreach($chatDepartments as $chatDepartment)
{
$this->chat_department_user_model->insert([
"user_id" => $id,
"chat_department_id" => $this->chat_department_model->where("name", $chatDepartment)->first()->id
"chat_department_id" => $this->chat_department_model->where("name",$chatDepartment)->first()["id"]
]);
}
$message = lang('Basic.global.saveSuccess', [mb_strtolower(lang('Users.user'))]) . '.';
$message = ucfirst(str_replace("'", "\'", $message));
if ($thenRedirect):
if (!empty($this->indexRoute)):
if ($thenRedirect) :
if (!empty($this->indexRoute)) :
return redirect()->to(route_to($this->indexRoute))->with('successMessage', $message);
else:
return $this->redirect2listView('successMessage', $message);
@ -168,7 +166,7 @@ class Users extends \App\Controllers\GoBaseController
$this->viewData['user'] = isset($sanitizedData) ? new UserEntity($sanitizedData) : new UserEntity();
$this->viewData['clienteList'] = $this->getClienteListItems();
$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['boxTitle'] = lang('Basic.global.addNew') . ' ' . lang('Users.user') . ' ' . lang('Basic.global.addNewSuffix');
@ -186,12 +184,12 @@ class Users extends \App\Controllers\GoBaseController
$users = auth()->getProvider();
$user = $users->findById($id);
if ($user == false):
if ($user == false) :
$message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Users.user')), $id]);
return $this->redirect2listView('errorMessage', $message);
endif;
if ($this->request->getPost()):
if ($this->request->getPost()) :
$postData = $this->request->getPost();
@ -201,6 +199,7 @@ class Users extends \App\Controllers\GoBaseController
unset($postData['group']);
unset($postData['chatDepartments']);
// Obtener contraseña nueva si se ha introducido en texto plano
// Obtener contraseña nueva si se ha introducido en texto plano
if (!empty($postData['new_pwd'])) {
$postData['password'] = $postData['new_pwd'];
@ -213,9 +212,9 @@ class Users extends \App\Controllers\GoBaseController
}
$noException = true;
if ($successfulResult = $this->canValidate()):
if ($successfulResult = $this->canValidate()) :
if ($this->canValidate()):
if ($this->canValidate()) :
try {
if (in_array('cliente-editor', $currentGroups) || in_array('cliente-administrador', $currentGroups)) {
@ -229,6 +228,7 @@ class Users extends \App\Controllers\GoBaseController
} else {
$successfulResult = $this->model->skipValidation(true)->update($id, $sanitizedData);
}
} catch (\Exception $e) {
$noException = false;
$this->dealWithException($e);
@ -244,24 +244,30 @@ class Users extends \App\Controllers\GoBaseController
$thenRedirect = false;
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->chat_department_user_model->where("user_id", $id)->delete();
foreach ($chatDepartments as $chatDepartment) {
$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();
foreach($chatDepartments as $chatDepartment)
{
$this->chat_department_user_model->insert([
"user_id" => $id,
"chat_department_id" => $this->chat_department_model->where("name", $chatDepartment)->first()->id
"chat_department_id" => $this->chat_department_model->where("name",$chatDepartment)->first()["id"]
]);
}
$id = $user->id ?? $id;
$message = lang('Basic.global.updateSuccess', [mb_strtolower(lang('Users.user'))]) . '.';
$message = ucfirst(str_replace("'", "\'", $message));
if ($thenRedirect):
if (!empty($this->indexRoute)):
if ($thenRedirect) :
if (!empty($this->indexRoute)) :
return redirect()->to(route_to($this->indexRoute))->with('successMessage', $message);
else:
return $this->redirect2listView('successMessage', $message);
@ -277,8 +283,8 @@ class Users extends \App\Controllers\GoBaseController
$this->viewData['clienteList'] = $this->getClienteListItems($user->cliente_id);
$this->viewData['formAction'] = route_to('updateUser', $id);
$this->viewData['selectedGroups'] = $this->group_model->getUsersRoles($requestedId);
$this->viewData['groups'] = $this->group_model->select('keyword, title')->where('id >', 0)->findAll();
$this->viewData['chatDepartments'] = $this->chat_department_model->select(["display", "name", "id as chatDepartmentId"])->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['chatDepartmentUser'] = $this->chat_department_user_model->getChatDepartmentUser($user->id);
$this->viewData['boxTitle'] = lang('Basic.global.edit2') . ' ' . lang('Users.user') . ' ' . lang('Basic.global.edit3');
@ -289,29 +295,25 @@ class Users extends \App\Controllers\GoBaseController
public function delete($requestedId = null, bool $deletePermanently = true)
{
if ($requestedId == null):
if ($requestedId == null) :
return $this->redirect2listView();
endif;
$id = filter_var($requestedId, FILTER_SANITIZE_URL);
$user = $this->model->find($id);
if ($user == false):
if ($user == false) :
$message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Users.user')), $id]);
return $this->redirect2listView('errorMessage', $message);
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();
$users = auth()->getProvider();
$users->delete($user->id);
$message = "Usuario eliminado correctamente";
return $this->redirect2listView('successMessage', $message);
} // end function delete(...)
@ -365,49 +367,18 @@ class Users extends \App\Controllers\GoBaseController
}
}
public function datatable()
{
if ($this->request->isAJAX()) {
$reqData = $this->request->getPost();
if (!isset($reqData['draw']) || !isset($reqData['columns'])) {
$errstr = 'No data available in response to this specific request.';
$response = $this->respond(Collection::datatable([], 0, 0, $errstr), 400, $errstr);
return $response;
}
$start = $reqData['start'] ?? 0;
$length = $reqData['length'] ?? 5;
$searchValues = get_filter_datatables_columns($reqData);
$requestedOrder = $reqData['order'] ?? [];
$resourceData = $this->model->getResource($searchValues);
foreach ($requestedOrder as $order) {
$column = $order['column'] ?? 0;
$dir = $order['dir'] ?? 'asc';
$orderColumn = UserModel::SORTABLE[$column] ?? null;
if ($orderColumn) {
$resourceData->orderBy($orderColumn, $dir);
}
}
$resourceData = $resourceData->limit($length, $start)->get()->getResultObject();
return $this->respond(Collection::datatable(
$resourceData,
$this->model->getResource([])->countAllResults(),
$this->model->getResource($searchValues)->countAllResults()
));
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function getMenuComerciales()
{
if ($this->request->isAJAX()) {
$comerciales = $this->model->getComerciales();
return $this->respond($comerciales);
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
$data = [
'menu' => $comerciales,
$csrfTokenName => $newTokenHash
];
return $this->respond($data);
} else {
return $this->failUnauthorized('Invalid request', 403);
}
@ -427,84 +398,15 @@ class Users extends \App\Controllers\GoBaseController
protected function getClienteListItems($selId = null)
{
$data = ['' => ""];
if (!empty($selId)):
if (!empty($selId)) :
$clienteModel = model('App\Models\Clientes\ClienteModel');
$selOption = $clienteModel->where('id', $selId)->findColumn('nombre');
if (!empty($selOption)):
if (!empty($selOption)) :
$data[$selId] = $selOption[0];
endif;
endif;
return $data;
}
public function index_maquinista_change_user()
{
$this->viewData['breadcrumb'] = [
['title' => lang("App.menu_change_session"), 'route' => route_to('maquinistaUserChangeList'), 'active' => true]
];
$maquinistas = [];
$users = auth()->getProvider()->whereNotIn('id', [auth()->user()->id])->findAll();
foreach ($users as $key => $user) {
if ($user->inGroup('maquina') && !$user->inGroup('admin', 'comercial', 'cliente-editor', 'cliente-admin')) {
$maquinistas[] = $user;
}
}
$this->viewData['maquinistas'] = $maquinistas;
return view('/themes/vuexy/form/produccion/maquinista/viewMaquinistaCambioUserList.php', $this->viewData);
}
public function change_user_session(int $user_id)
{
// Check the credentials
$user = auth()->getProvider()->findById($user_id);
auth()->logout();
auth()->login($user);
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'),
]);
}
}
}

0
ci4/app/Controllers/Excel/PrintGiros.php Executable file → Normal file
View File

0
ci4/app/Controllers/Excel/PrintLineas.php Executable file → Normal file
View File

View File

@ -6,8 +6,7 @@ use App\Models\Facturas\FacturaModel;
use App\Entities\Facturas\FacturaEntity;
use App\Models\Clientes\ClienteModel;
use App\Models\Collection;
use Hermawan\DataTables\DataTable;
use Exception;
class Facturas extends \App\Controllers\BaseResourceController
{
@ -27,9 +26,9 @@ class Facturas extends \App\Controllers\BaseResourceController
{
$this->viewData['pageTitle'] = lang('Facturas.facturas');
// Se indica que este controlador trabaja con soft_delete
$this->viewData = ['usingServerSideDataTable' => true];
// Breadcrumbs
$this->viewData['breadcrumb'] = [
['title' => lang("App.menu_facturas"), 'route' => "javascript:void(0);", 'active' => false],
@ -41,7 +40,6 @@ class Facturas extends \App\Controllers\BaseResourceController
public function index()
{
checkPermission('facturas.menu');
if (auth()->user()->inGroup('cliente-admin') || auth()->user()->inGroup('cliente-editor')) {
// Se obtiene el cliente ID a partir del usuario de la sesion
@ -49,7 +47,7 @@ class Facturas extends \App\Controllers\BaseResourceController
$user = $model_user->find(auth()->user()->id);
$clienteId = $user->cliente_id;
} else {
$clienteId = -1;
$clienteId = 0;
}
$this->viewData['cliente_id'] = $clienteId;
@ -60,11 +58,10 @@ class Facturas extends \App\Controllers\BaseResourceController
parent::index();
}
public function list()
{
checkGroups(['admin', 'cliente-admin', 'cliente-editor', 'contabilidad']);
$viewData = [
'currentModule' => static::$controllerSlug,
'pageSubTitle' => lang('Basic.global.ManageAllRecords', [lang('Facturas.facturas')]),
@ -84,39 +81,27 @@ class Facturas extends \App\Controllers\BaseResourceController
$user = $model_user->find(auth()->user()->id);
$clienteId = $user->cliente_id;
} else {
$clienteId = -1;
$clienteId = 0;
}
$viewData['cliente_id'] = $clienteId;
// Establecer el idioma (opcional, si no está configurado en app/Config/App.php)
$locale = explode('-', config('Basics')->i18n)[0]; // Or dynamically set it: \Config\Services::language()->getLocale();
// Specify the language file name (without .php)
$fileName = 'datePicker';
// Build the path to the language file
$filePath = APPPATH . "Language/{$locale}/{$fileName}.php";
// Load the entire language file as an array
$viewData['datepickerLang'] = json_encode(file_exists($filePath) ? require $filePath : []);
$viewData['datepickerLocale'] = config('Basics')->i18n;
return view(static::$viewPath . 'viewFacturasList', $viewData);
}
public function add()
{
checkPermission('facturas.create');
if ($this->request->getPost()):
if ($this->request->getPost()) :
$nullIfEmpty = true; // !(phpversion() >= '8.1');
$postData = $this->request->getPost();
$noException = true;
$allData = true;
$allData = true;
if (!isset($postData['cliente_id']) || !isset($postData['serie_id'])) {
if( !isset($postData['cliente_id']) || !isset($postData['serie_id']) ) {
$this->viewData['errorMessage'] = lang('Facturas.errors.requiredFields');
$this->session->setFlashdata('formErrors', $this->model->errors());
@ -128,8 +113,8 @@ class Facturas extends \App\Controllers\BaseResourceController
try {
$clienteModel = model('App\Models\Clientes\ClienteModel');
$datosCliente = $clienteModel->getClienteDataFacturas($postData['cliente_id']);
if (count($datosCliente) > 0) {
// add array data datosCliente to postData
if(count($datosCliente)>0){
// add array data datosCliente to postData
$postData = array_merge($postData, $datosCliente[0]);
}
} catch (\Exception $e) {
@ -137,20 +122,20 @@ class Facturas extends \App\Controllers\BaseResourceController
$this->dealWithException($e);
}
$sanitizedData = $this->sanitized($postData, $nullIfEmpty);
$sanitizedData['user_updated_id'] = auth()->user()->id;
$sanitizedData['user_created_id'] = auth()->user()->id;
if (!$sanitizedData['creditoAsegurado']) {
if(!$sanitizedData['creditoAsegurado']){
$sanitizedData['creditoAsegurado'] = 0;
}
if ($allData && $successfulResult = $this->canValidate()): // if ($successfulResult = $this->validate($this->formValidationRules) ) :
if ($allData && $successfulResult = $this->canValidate()) : // if ($successfulResult = $this->validate($this->formValidationRules) ) :
if ($this->canValidate()):
if ($this->canValidate()) :
try {
$successfulResult = $this->model->skipValidation(true)->save($sanitizedData);
} catch (\Exception $e) {
@ -163,15 +148,15 @@ class Facturas extends \App\Controllers\BaseResourceController
endif;
endif;
if ($noException && $successfulResult):
if ($noException && $successfulResult) :
$id = $this->model->db->insertID();
$message = lang('Basic.global.saveSuccess', [lang('Basic.global.record')]) . '.';
return redirect()->to(route_to('editarFactura', $id))->with('sweet-success', $message);
endif; // $noException && $successfulResult
endif; // ($requestMethod === 'post')
@ -189,7 +174,7 @@ class Facturas extends \App\Controllers\BaseResourceController
['title' => lang("App.menu_facturas"), 'route' => "javascript:void(0);", 'active' => false],
['title' => lang("Facturas.facturaList"), 'route' => route_to('facturasList'), 'active' => true]
];
$this->viewData['usingSelect2'] = true;
$validation = \Config\Services::validation();
@ -202,21 +187,19 @@ class Facturas extends \App\Controllers\BaseResourceController
} // end function add()
public function edit($id = null)
{
checkPermission('facturas.edit');
if ($id == null):
public function edit($id=null){
if ($id == null) :
return $this->redirect2listView();
endif;
$id = filter_var($id, FILTER_SANITIZE_URL);
$factura = $this->model->find($id);
if ($factura == false):
if ($factura == false) :
$message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Facturas.factura')), $id]);
return $this->redirect2listView('sweet-error', $message);
endif;
$this->obtenerDatosFormulario($factura);
@ -225,22 +208,6 @@ class Facturas extends \App\Controllers\BaseResourceController
['title' => lang("Facturas.facturaList"), 'route' => route_to('facturasList'), 'active' => true]
];
$userModel = model('App\Models\Usuarios\UserModel');
$factura->created_by = $userModel->getFullName($factura->user_created_id);
$factura->updated_by = $userModel->getFullName($factura->user_updated_id);
$factura->created_at_footer = $factura->created_at ? date(' H:i d/m/Y', strtotime($factura->created_at)) : '';
$factura->updated_at_footer = $factura->updated_at ? date(' H:i d/m/Y', strtotime($factura->updated_at)) : '';
$factura->showDeleteButton = model('App\Models\Facturas\FacturaPagoModel')
->where('factura_id', $factura->id)->countAllResults() == 0;
if($factura->numero != null && $factura->numero != '' && strpos($factura->numero, "REC ") === 0) {
$modelPagos = model('App\Models\Facturas\FacturaPagoModel');
if($modelPagos->where('factura_id', $factura->id)->countAllResults() > 0) {
$factura->facturaRectificativaPagada = 1;
}
}
$this->viewData['facturaEntity'] = $factura;
$this->viewData['boxTitle'] = lang('Basic.global.edit2') . ' ' . lang('Facturas.factura') . ' ' . lang('Basic.global.edit3');
@ -248,150 +215,45 @@ class Facturas extends \App\Controllers\BaseResourceController
return $this->displayForm(__METHOD__, $id);
}
public function datatable()
{
$dataForClienteForm = false;
if (auth()->user()->inGroup('cliente-admin') || auth()->user()->inGroup('cliente-editor')) {
// Se obtiene el cliente ID a partir del usuario de la sesion
$model_user = model('App\Models\Usuarios\UserModel');
$user = $model_user->find(auth()->user()->id);
$clienteId = $user->cliente_id;
} else {
$temp = $this->request->getGet('cliente_id');
$clienteId = ($temp && $temp != null && $temp != "") ? $temp : -1;
$dataForClienteForm = ($temp && $temp != null && $temp != "") ? true : false;
}
$model = model(FacturaModel::class);
$q = $model->getDatatableQuery($clienteId);
$searchValue = $this->request->getGet('fecha_factura') ?? '';
if (!empty($searchValue)) {
// Extraer las fechas del formato "YYYY-MM-DD|YYYY-MM-DD"
$dates = explode('|', $searchValue);
if (count($dates) == 2) {
$q->where('t1.fecha_factura_at >=', $dates[0] . ' 00:00:00')
->where('t1.fecha_factura_at <=', $dates[1] . ' 23:59:59');
}
}
$result = DataTable::of($q)
->edit(
"creditoAsegurado",
function ($row, $meta) {
switch ($row->creditoAsegurado) {
case "0":
return lang('Basic.global.no');
case "1":
return lang('Basic.global.yes');
default:
return '--'; // Debug
}
}
)
->edit(
"estado",
function ($row, $meta) {
switch ($row->estado) {
case "borrador":
return lang('Facturas.borrador');
case "validada":
return lang('Facturas.validada');
default:
return '--'; // Debug
}
}
)
->edit(
"estado_pago",
function ($row, $meta) {
switch ($row->estado_pago) {
case "pendiente":
return lang('Facturas.pendiente');
case "pagada":
return lang('Facturas.pagada');
case "insolvente":
return lang('Facturas.insolvente');
default:
return '--'; // Debug
}
}
)
->edit(
"forma_pago",
function ($row, $meta) {
switch ($row->forma_pago) {
case "cheque":
return lang('Facturas.cheque');
case "compensada":
return lang('Facturas.compensada');
case "confirming":
return lang('Facturas.confirming');
case "giroDomiciliado":
return lang('Facturas.giroDomiciliado');
case "pagare":
return lang('Facturas.pagare');
case "transferencia":
return lang('Facturas.transferencia');
default:
return $row->forma_pago; // Debug
}
}
)
->add("action", callback: function ($q) {
if (auth()->user()->can('facturas.edit')) {
if ($q->estado == 'borrador') {
return '
<div class="btn-group btn-group-sm">
<a href="javascript:void(0);"><i class="ti ti-pencil ti-sm btn-edit mx-2" data-id="' . $q->id . '"></i></a>
</div>
';
} else {
return '
<div class="btn-group btn-group-sm">
<a href="javascript:void(0);"><i class="ti ti-eye ti-sm btn-edit mx-2" data-id="' . $q->id . '"></i></a>
</div>
';
}
} else
return '';
});
if ($clienteId != -1) {
$result->hide('cliente');
$result->hide('creditoAsegurado');
if (!$dataForClienteForm) {
$result->hide('estado');
$result->hide('estado_pago');
}
$result->hide('forma_pago');
$result->hide('vencimiento');
$result->hide('dias_vencimiento');
}
return $result->toJson(returnAsObject: true);
}
public function getDatosFacturacionClienteForm($cliente_id)
{
return $this->respond($this->model->getSumatoriosFacturacionCliente($cliente_id));
}
public function datatablePedidos()
{
public function datatable(){
if ($this->request->isAJAX()) {
$reqData = $this->request->getPost();
if (!isset($reqData['draw']) || !isset($reqData['columns'])) {
if (!isset($reqData['draw']) || !isset($reqData['columns']) ) {
$errstr = 'No data available in response to this specific request.';
$response = $this->respond(Collection::datatable([], 0, 0, $errstr), 400, $errstr);
$response = $this->respond(Collection::datatable( [], 0, 0, $errstr ), 400, $errstr);
return $response;
}
$start = $reqData['start'] ?? 0;
$length = $reqData['length'] ?? 5;
$search = $reqData['search']['value'];
$requestedOrder = $reqData['order']['0']['column'] ?? 0;
$order = FacturaModel::SORTABLE[$requestedOrder >= 0 ? $requestedOrder : 0];
$dir = $reqData['order']['0']['dir'] ?? 'asc';
$cliente_id = $reqData['cliente_id'] ?? -1;
$resourceData = $this->model->getResource($search, $cliente_id)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject();
return $this->respond(Collection::datatable(
$resourceData,
$this->model->getResource("", $cliente_id)->countAllResults(),
$this->model->getResource($search, $cliente_id)->countAllResults()
));
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function datatablePedidos(){
if ($this->request->isAJAX()) {
$reqData = $this->request->getPost();
if (!isset($reqData['draw']) || !isset($reqData['columns']) ) {
$errstr = 'No data available in response to this specific request.';
$response = $this->respond(Collection::datatable( [], 0, 0, $errstr ), 400, $errstr);
return $response;
}
$start = $reqData['start'] ?? 0;
@ -415,14 +277,13 @@ class Facturas extends \App\Controllers\BaseResourceController
}
}
public function update($id = null)
{
public function update($id = null){
if ($this->request->isAJAX()) {
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
if ($id == null):
if ($id == null) :
$data = [
'error' => 2,
$csrfTokenName => $newTokenHash
@ -432,7 +293,7 @@ class Facturas extends \App\Controllers\BaseResourceController
$id = filter_var($id, FILTER_SANITIZE_URL);
$facturaEntity = $this->model->find($id);
if ($facturaEntity == false):
if ($facturaEntity == false) :
$message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Factura.factura')), $id]);
$data = [
'error' => $message,
@ -441,21 +302,21 @@ class Facturas extends \App\Controllers\BaseResourceController
return $this->respond($data);
endif;
if ($this->request->getPost()):
if ($this->request->getPost()) :
$nullIfEmpty = true; // !(phpversion() >= '8.1');
$postData = $this->request->getPost();
$sanitizedData = $this->sanitized($postData, $nullIfEmpty);
// JJO
$sanitizedData['user_updated_id'] = auth()->user()->id;
$noException = true;
if ($successfulResult = $this->canValidate()): // if ($successfulResult = $this->validate($this->formValidationRules) ) :
if ($successfulResult = $this->canValidate()) : // if ($successfulResult = $this->validate($this->formValidationRules) ) :
if ($this->canValidate()):
if ($this->canValidate()) :
try {
$successfulResult = $this->model->skipValidation(true)->update($id, $sanitizedData);
} catch (\Exception $e) {
@ -471,7 +332,7 @@ class Facturas extends \App\Controllers\BaseResourceController
$facturaEntity->fill($sanitizedData);
endif;
if ($noException && $successfulResult):
if ($noException && $successfulResult) :
$id = $facturaEntity->id ?? $id;
$message = lang('Basic.global.updateSuccess', [lang('Basic.global.record')]) . '.';
@ -489,54 +350,24 @@ class Facturas extends \App\Controllers\BaseResourceController
$csrfTokenName => $newTokenHash
];
return $this->respond($data);
} else {
}
else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function delete($id = null)
{
$user_id = auth()->user()->id;
$datetime = (new \CodeIgniter\I18n\Time("now"));
$rawResult = $this->model->where('id', $id)
->set([
'deleted_at' => $datetime->format('Y-m-d H:i:s'),
'user_updated_id' => $user_id,
])
->update();
if (!$rawResult) {
return $this->failNotFound(lang('Basic.global.deleteError', [$objName]));
}
$modelLineas = model('\App\Models\Facturas\FacturaLineaModel');
$rawResult = $modelLineas->where('factura_id', $id)
->set([
'deleted_at' => $datetime->format('Y-m-d H:i:s'),
'user_updated_id' => $user_id,
])
->update();
$this->model->db->query('DELETE FROM facturas_pedidos_lineas WHERE factura_id=' . $id);
// $message = lang('Basic.global.deleteSuccess', [$objName]); IMN commented
$message = lang('Basic.global.deleteSuccess', [lang('Basic.global.record')]);
$response = $this->respondDeleted(['id' => $id, 'msg' => $message]);
return $response;
}
public function menuPedidosPendientes($cliente_id)
{
public function menuPedidosPendientes($cliente_id){
if ($this->request->isAJAX()) {
$model = model('\App\Models\Pedidos\PedidoLineaModel');
$pedidos = [];
try {
try{
$pedidos = $model->obtenerLineasPedidoSinFacturar($cliente_id);
} catch (Exception $e) {
}
catch(Exception $e){
}
$newTokenHash = csrf_hash();
@ -546,14 +377,14 @@ class Facturas extends \App\Controllers\BaseResourceController
$csrfTokenName => $newTokenHash
];
return $this->respond($data);
} else {
}
else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function duplicate($factura_id = 0)
{
if ($this->request->isAJAX()) {
public function duplicate($factura_id = 0){
if($this->request->isAJAX()){
$factura_origen = $this->model->find($factura_id);
// se quita la key "id" del objeto
@ -576,19 +407,18 @@ class Facturas extends \App\Controllers\BaseResourceController
'id' => $id,
$csrfTokenName => $newTokenHash
];
return $this->respond($data);
return $this->respond($data);
} else {
}else{
return $this->failUnauthorized('Invalid request', 403);
}
}
public function updateTotales($factura_id = 0)
{
if ($this->request->isAJAX()) {
public function updateTotales($factura_id = 0){
if($this->request->isAJAX()){
$postData = $this->request->getPost();
$pendiente = $postData['pendiente'] ?? 0;
$total = $postData['total'] ?? 0;
@ -598,7 +428,7 @@ class Facturas extends \App\Controllers\BaseResourceController
'pendiente' => $pendiente,
'total_pagos' => $postData['total_pagos'] ?? 0,
'user_updated_id' => auth()->user()->id,
'estado_pago' => (intval($pendiente) == 0 && intval($total) != 0) ? 'pagada' : 'pendiente',
'estado_pago' => (intval($pendiente)==0 && intval($total)!=0) ? 'pagada' : 'pendiente',
];
$newTokenHash = csrf_hash();
@ -606,23 +436,23 @@ class Facturas extends \App\Controllers\BaseResourceController
$data_ret = [
$csrfTokenName => $newTokenHash
];
if ($factura_id == 0) {
return $this->respond($data_ret);
if($factura_id == 0){
return $this->respond($data_ret);
}
$data_ret['estado_pago'] = $data['estado_pago'];
$model = model('\App\Models\Facturas\FacturaModel');
$model->update($factura_id, $data);
return $this->respond($data_ret);
} else {
return $this->respond($data_ret);
}
else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function addExcedentes($factura_id)
{
public function addExcedentes($factura_id){
if ($this->request->isAJAX()) {
$model_factura_linea = model('\App\Models\Facturas\FacturaLineaModel');
@ -637,26 +467,26 @@ class Facturas extends \App\Controllers\BaseResourceController
$pedido_linea_maquetacion_id = $postData['pedido_linea_maquetacion_id'] ?? null;
$pedido_id = $postData['pedido_id'] ?? 0;
$nuevo_precio_unidad = round($precio_unidad * (100 - floatval($descuento)) / 100, 4);
$nuevo_precio_unidad = round($precio_unidad*(100-floatval($descuento))/100, 4);
$base = round($cantidad * $nuevo_precio_unidad, 2);
$total_iva = round($base * $iva / 100, 2);
$data = (object) [
'factura_id' => $factura_id,
'pedido_linea_impresion_id' => $pedido_linea_impresion_id,
'pedido_linea_maquetacion_id' => $pedido_linea_maquetacion_id,
'descripcion' => $newString = preg_replace_callback('/Impresión de (\d+) ejemplares/', function ($matches) use ($cantidad) {
return 'Impresión de ' . $cantidad . ' ejemplares';
}, $descripcion),
'cantidad' => $cantidad,
'precio_unidad' => $nuevo_precio_unidad,
$data = (object)[
'factura_id'=>$factura_id,
'pedido_linea_impresion_id'=>$pedido_linea_impresion_id,
'pedido_linea_maquetacion_id'=>$pedido_linea_maquetacion_id,
'descripcion'=>$newString = preg_replace_callback('/Impresión de (\d+) ejemplares/', function ($matches) use ($cantidad) {
return 'Impresión de ' . $cantidad . ' ejemplares';
}, $descripcion),
'cantidad'=>$cantidad,
'precio_unidad'=> $nuevo_precio_unidad,
'iva' => $iva,
'base' => $base,
'total_iva' => $total_iva,
'total' => round($base + $total_iva, 2),
'user_updated_id' => auth()->user()->id,
];
$model_factura_linea->insert($data);
$newTokenHash = csrf_hash();
@ -664,114 +494,93 @@ class Facturas extends \App\Controllers\BaseResourceController
$data_ret = [
$csrfTokenName => $newTokenHash
];
return $this->respond($data_ret);
} else {
return $this->respond($data_ret);
}
else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function addLineaPedidoImpresion($factura_id){
public function addLineaPedidoImpresion($factura_id, $data = -1)
{
if ($this->request) {
if ($this->request->isAJAX())
if ($this->request->isAJAX()) {
$model_pedido_linea = model('\App\Models\Pedidos\PedidoLineaModel');
$model_presupuesto = model('\App\Models\Presupuestos\PresupuestoModel');
$model_factura_linea = model('\App\Models\Facturas\FacturaLineaModel');
try{
$pedido_linea_id = $this->request->getPost('lineaPedido') ?? 0;
} else {
if ($data == -1) {
return "Error: sin datos";
}
$pedido_linea_id = $data;
}
$linea = $model_pedido_linea->find($pedido_linea_id);
$model_pedido_linea = model('\App\Models\Pedidos\PedidoLineaModel');
$model_presupuesto = model('\App\Models\Presupuestos\PresupuestoModel');
$model_factura_linea = model('\App\Models\Facturas\FacturaLineaModel');
$model_factura = model('\App\Models\Facturas\FacturaModel');
$factura = $this->model->find($factura_id);
if($factura){
try {
if($linea){
$presupuesto = $model_presupuesto->find($linea->presupuesto_id);
$linea = $model_pedido_linea->find($pedido_linea_id);
if($presupuesto){
// Se añade la linea de factura
$descripcion = $model_presupuesto->generarLineaPedido($presupuesto->id, true, $linea->pedido_id);
$cantidad = intval($presupuesto->tirada) - intval($this->model->getCantidadLineaPedidoFacturada($linea->id));
$base = $cantidad * floatval($presupuesto->total_precio_unidad);
$base = round($base, 2);
$total_iva = $base * ($presupuesto->iva_reducido==1 ? 0.04 : 0.21);
// se redondea a dos decimales
$total_iva = round($total_iva, 2);
$total = $base + $total_iva;
$factura = $model_factura->find($factura_id);
if ($factura) {
if ($linea) {
$presupuesto = $model_presupuesto->find($linea->presupuesto_id);
if ($presupuesto) {
// Se añade la linea de factura
$descripcion = $model_presupuesto->generarLineaPedido($presupuesto->id, true, $linea->pedido_id);
$cantidad = intval($presupuesto->tirada) - intval($model_factura->getCantidadLineaPedidoFacturada($linea->id));
$base =
floatval($presupuesto->total_aceptado_revisado && $presupuesto->total_aceptado_revisado != 0 ?
$presupuesto->total_aceptado_revisado : $presupuesto->total_aceptado);
$base = round($base, 2);
$total_iva = $base * ($presupuesto->iva_reducido == 1 ? 0.04 : 0.21);
// se redondea a dos decimales
$total_iva = round($total_iva, 2);
$total = $base + $total_iva;
$data = (object) [
'factura_id' => $factura_id,
'pedido_linea_impresion_id' => $pedido_linea_id,
'descripcion' => $descripcion[0]->concepto,
'cantidad' => $cantidad,
'iva' => $presupuesto->iva_reducido == 1 ? 4 : 21,
'base' => $base,
'total_iva' => $total_iva,
'total' => $total,
'user_updated_id' => auth()->user()->id,
];
$model_factura_linea->insert($data);
$id = $model_factura_linea->getInsertID();
if ($id) {
$model_factura_linea->addFacturaPedidoLinea($factura_id, $linea->id, $cantidad);
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
$data = [
'error' => 0,
'id' => $id,
$csrfTokenName => $newTokenHash
$data = (object)[
'factura_id'=>$factura_id,
'pedido_linea_impresion_id'=>$linea->pedido_id,
'descripcion'=>$descripcion[0]->concepto,
'cantidad'=>$cantidad,
'precio_unidad'=>$presupuesto->total_precio_unidad,
'iva' => $presupuesto->iva_reducido==1 ? 4 : 21,
'base' => $base,
'total_iva' => $total_iva,
'total' => $total,
'user_updated_id' => auth()->user()->id,
];
if ($this->request) {
if ($this->request->isAJAX())
return $this->respond($data);
} else {
// remove csrf token
unset($data[$csrfTokenName]);
return $data;
$model_factura_linea->insert($data);
$id = $model_factura_linea->getInsertID();
if($id){
$model_factura_linea->addFacturaPedidoLinea($factura_id, $linea->id, $cantidad);
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
$data = [
'error' => 0,
'id' => $id,
$csrfTokenName => $newTokenHash
];
return $this->respond($data);
}
}
}
}
}
} catch (Exception $e) {
catch(Exception $e){
}
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
$data = [
'error' => 1,
'error_text' => $e->getMessage(),
$csrfTokenName => $newTokenHash
];
if ($this->request) {
if ($this->request->isAJAX())
return $this->respond($data);
} else {
unset($data[$csrfTokenName]);
return $data;
}
return $this->respond($data);
}
else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function deleteLineaPedidoImpresion()
{
public function deleteLineaPedidoImpresion(){
if ($this->request->isAJAX()) {
@ -789,46 +598,20 @@ class Facturas extends \App\Controllers\BaseResourceController
$csrfTokenName => $newTokenHash
];
return $this->respond($data);
} else {
}
else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function deleteLineaPago()
{
public function validar($factura_id){
if ($this->request->isAJAX()) {
$postData = $this->request->getPost();
$factura_id = $postData['factura_id'] ?? 0;
$pago_id = $postData['pago_id'] ?? 0;
$model_factura_pago = model('\App\Models\Facturas\FacturaPagoModel');
$model_factura_pago->update($pago_id, [
'deleted_at' => date('Y-m-d H:i:s'),
'user_updated_id' => auth()->user()->id,
]);
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
$data = [
$csrfTokenName => $newTokenHash
];
return $this->respond($data);
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function validar($factura_id)
{
if ($this->request->isAJAX()) {
if($this->request->isAJAX()){
$factura = $this->model->find($factura_id);
if ($factura) {
if($factura){
$model_series = model('\App\Models\Configuracion\SeriesFacturasModel');
$numero = $model_series->getSerieNumerada($factura->serie_id);
@ -838,17 +621,13 @@ class Facturas extends \App\Controllers\BaseResourceController
'user_updated_id' => auth()->user()->id,
];
$this->model->update($factura_id, $data);
if ((strpos($numero, "REC ") === 0)) {
$this->model->where('numero', $factura->factura_rectificada_id)->set([
'factura_rectificativa_id' => $numero,
'user_updated_id' => auth()->user()->id,
])->update();
if((strpos($numero, "REC ") === 0)){
$data['estado_pago'] = 'pagada';
}
}
$this->model->update($factura_id, $data);
}
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
@ -856,30 +635,30 @@ class Facturas extends \App\Controllers\BaseResourceController
$csrfTokenName => $newTokenHash
];
return $this->respond($data);
} else {
}
else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function updateCabecera($factura_id)
{
if ($this->request->isAJAX()) {
if ($factura_id == 0) {
public function updateCabecera($factura_id){
if($this->request->isAJAX()){
if($factura_id == 0){
return;
}
$factura = $this->model->find($factura_id);
if ($factura) {
if($factura){
$postData = $this->request->getPost();
$dataName = $postData['name'] ?? '';
$dataValue = $postData['value'] ?? '';
if ($dataName == 'factura_rectificativa_id') {
if($dataName == 'factura_rectificativa_id'){
// se actualiza la factura donde el campo 'numero' sea igual al valor de $dataValue. El campo a actualizar es 'factura_rectificada_id'
$factura_rectificada = $this->model->where('numero', $dataValue)->first();
if ($factura_rectificada) {
if($factura_rectificada){
$data2 = [
'factura_rectificada_id' => $factura->numero,
'user_updated_id' => auth()->user()->id,
@ -902,7 +681,8 @@ class Facturas extends \App\Controllers\BaseResourceController
];
return $this->respond($data);
}
} else {
}
else {
return $this->failUnauthorized('Invalid request', 403);
}
}
@ -911,13 +691,12 @@ class Facturas extends \App\Controllers\BaseResourceController
* FUNCIONES AUXILIARES
************************************/
private function obtenerDatosFormulario(&$factura)
{
if ($factura->estado == 'borrador') {
private function obtenerDatosFormulario(&$factura){
if($factura->estado == 'borrador'){
$serieModel = model('App\Models\Configuracion\SeriesFacturasModel');
$serie = $serieModel->find($factura->serie_id);
if ($serie) {
if($serie){
$factura->numero = str_replace("{numero}", $serie->next, $serie->formato);
}
}
@ -932,8 +711,9 @@ class Facturas extends \App\Controllers\BaseResourceController
$formaPagoModel = model('App\Models\Configuracion\FormaPagoModel');
$factura->formas_pago = $formaPagoModel->getMenuItems();
$factura->fecha_factura_at_text = $factura->fecha_factura_at ? date('d/m/Y', strtotime($factura->fecha_factura_at)) : '';
}
}

172
ci4/app/Controllers/Facturacion/FacturasLineas.php Executable file → Normal file
View File

@ -16,15 +16,14 @@ class FacturasLineas extends \App\Controllers\BaseResourceController
protected static $controllerSlug = 'factura-lineas';
public function datatable($factura_id = null)
{
public function datatable($factura_id = null){
if ($this->request->isAJAX() && $factura_id != null) {
$reqData = $this->request->getPost();
if (!isset($reqData['draw']) || !isset($reqData['columns'])) {
if (!isset($reqData['draw']) || !isset($reqData['columns']) ) {
$errstr = 'No data available in response to this specific request.';
$response = $this->respond(Collection::datatable([], 0, 0, $errstr), 400, $errstr);
$response = $this->respond(Collection::datatable( [], 0, 0, $errstr ), 400, $errstr);
return $response;
}
$start = $reqData['start'] ?? 0;
@ -47,32 +46,31 @@ class FacturasLineas extends \App\Controllers\BaseResourceController
}
public function deleteLinea($factura_linea_id = 0)
{
public function deleteLinea($factura_linea_id = 0){
if (!empty(static::$pluralObjectNameCc) && !empty(static::$singularObjectNameCc)) {
$objName = mb_strtolower(lang(ucfirst(static::$pluralObjectNameCc) . '.' . static::$singularObjectNameCc));
$objName = mb_strtolower(lang(ucfirst(static::$pluralObjectNameCc).'.'.static::$singularObjectNameCc));
} else {
$objName = lang('Basic.global.record');
}
if ($factura_linea_id == 0) {
if($factura_linea_id == 0){
return $this->failNotFound(lang('Basic.global.deleteError', [$objName]));
}
$facturaLinea = $this->model->find($factura_linea_id);
if ($facturaLinea == null) {
if($facturaLinea == null){
return $this->failNotFound(lang('Basic.global.deleteError', [$objName]));
}
if ($facturaLinea->pedido_linea_impresion_id != null) {
$this->model->deleteFacturasLineasPedido($facturaLinea->factura_id, $facturaLinea->pedido_linea_impresion_id, $facturaLinea->cantidad);
if($facturaLinea->pedido_linea_impresion_id != null){
$this->model->deleteFacturasLineasPedido($facturaLinea->factura_id, $facturaLinea->pedido_linea_impresion_id, $facturaLinea->cantidad);
}
if ($facturaLinea->pedido_maquetacion_id != null) {
if($facturaLinea->pedido_maquetacion_id != null){
//$this->model->deleteFacturasLineasPedido($facturaLinea->factura_id, $facturaLinea->pedido_maquetacion_id, $facturaLinea->cantidad);
}
$facturaLinea = $this->model->delete($factura_linea_id);
$message = lang('Basic.global.deleteSuccess', [lang('Basic.global.record')]);
$response = $this->respondDeleted(['id' => $factura_linea_id, 'msg' => $message]);
@ -80,73 +78,60 @@ class FacturasLineas extends \App\Controllers\BaseResourceController
}
public function datatable_editor()
{
public function datatable_editor() {
if ($this->request->isAJAX()) {
include(APPPATH . "ThirdParty/DatatablesEditor/DataTables.php");
// Build our Editor instance and process the data coming from _POST
$response = Editor::inst($db, 'facturas_lineas')
$response = Editor::inst( $db, 'facturas_lineas' )
->fields(
Field::inst('id'),
Field::inst('base'),
Field::inst('total_iva'),
Field::inst('total')->set(Field::SET_BOTH),
Field::inst('cantidad')
->validator(
'Validate::numeric',
array(
'message' => lang('Facturas.validation.numerico')
)
Field::inst( 'id' ),
Field::inst( 'base' ),
Field::inst( 'total_iva' ),
Field::inst( 'total' ),
Field::inst( 'cantidad' )
->validator('Validate::numeric', array(
'message' => lang('Facturas.validation.numerico'))
)
->validator(
'Validate::notEmpty',
array(
'message' => lang('Facturas.validation.requerido')
)
->validator('Validate::notEmpty', array(
'message' => lang('Facturas.validation.requerido'))
),
Field::inst('descripcion')
->validator(
'Validate::notEmpty',
array(
'message' => lang('Facturas.validation.requerido')
)
Field::inst( 'descripcion' )
->validator('Validate::notEmpty', array(
'message' => lang('Facturas.validation.requerido'))
),
Field::inst('iva')
->validator(
'Validate::numeric',
array(
'message' => lang('Facturas.validation.numerico')
)
Field::inst( 'precio_unidad' )
->getFormatter( 'Format::toDecimalChar')->setFormatter( 'Format::fromDecimalChar')
->validator('Validate::numeric', array(
"decimal" => ',',
'message' => lang('Facturas.validation.decimal'))
)
->validator(
'Validate::notEmpty',
array(
'message' => lang('Facturas.validation.requerido')
)
->validator('Validate::notEmpty', array(
'message' => lang('Facturas.validation.requerido'))
),
Field::inst('pedido_linea_impresion_id')
->setFormatter(function ($val, $data, $opts) {
Field::inst( 'iva' )
->validator('Validate::numeric', array(
'message' => lang('Facturas.validation.numerico'))
)
->validator('Validate::notEmpty', array(
'message' => lang('Facturas.validation.requerido'))
),
Field::inst( 'pedido_linea_impresion_id' )
->setFormatter(function($val, $data, $opts) {
return $val === '' ? null : $val;
}),
Field::inst('pedido_maquetacion_id')
->setFormatter(function ($val, $data, $opts) {
return $val === '' ? null : $val;
}),
Field::inst('factura_id'),
Field::inst('user_updated_id'),
Field::inst( 'factura_id' ),
Field::inst( 'user_updated_id' ),
)
->on('preCreate', function ($editor, &$values) {
$totales = $this->generate_totales(
$values['factura_id'],
$values['pedido_linea_impresion_id'],
$values['total'],
$values['iva'],
$values['factura_id'],
$values['pedido_linea_impresion_id'],
$values['precio_unidad'],
$values['iva'],
$values['cantidad'],
$values['old_cantidad'],
$values['base']
);
$values['old_cantidad']);
$editor
->field('user_updated_id')
->setValue(auth()->user()->id);
@ -165,14 +150,12 @@ class FacturasLineas extends \App\Controllers\BaseResourceController
})
->on('preEdit', function ($editor, $id, &$values) {
$totales = $this->generate_totales(
$values['factura_id'],
$values['pedido_linea_impresion_id'],
$values['total'],
$values['iva'],
$values['factura_id'],
$values['pedido_linea_impresion_id'],
$values['precio_unidad'],
$values['iva'],
$values['cantidad'],
$values['old_cantidad'],
$values['base']
);
$values['old_cantidad']);
$editor
->field('factura_id')
->setValue($values['factura_id']);
@ -211,9 +194,8 @@ class FacturasLineas extends \App\Controllers\BaseResourceController
}
}
public function updateTotalesFactura($factura_id = 0)
{
if ($factura_id == 0) {
public function updateTotalesFactura($factura_id = 0){
if($factura_id == 0){
return;
}
@ -221,41 +203,25 @@ class FacturasLineas extends \App\Controllers\BaseResourceController
$model->updateTotales($factura_id);
}
private function generate_totales($factura_id, $pedido_linea_id, $total, $iva, $cantidad, $old_cantidad, $base_input)
private function generate_totales($factura_id, $pedido_linea_id, $precio_unidad, $iva, $cantidad, $old_cantidad)
{
// si es una linea que se refiere a pedido
if ($pedido_linea_id != null && $factura_id != null) {
// se actualiza la cantidad de la linea de pedido en la tabla pivote facturas_pedidos_lineas
$this->model->updateFacturaPedidoLinea($factura_id, $pedido_linea_id, $old_cantidad, $cantidad);
}
// Si es una linea añadida a mano, el total y el iva tienen que venir metidos a mano
if ($pedido_linea_id != null) {
// se calcula y se actualiza el subtotal, total_iva y total
// redondeando a 4 decimales el precio_unidad y a dos el resto
$precio_unidad = round($total / $old_cantidad, 4);
$base = round($precio_unidad * $cantidad, 2);
$total_iva = round($base * $iva / 100, 2);
$total = round($base + $total_iva, 2);
$values = [];
$values['base'] = $base;
$values['total_iva'] = $total_iva;
$values['total'] = $total;
} else {
// se pasa la base y el iva
$total_iva = round($base_input * $iva / 100, 2);
$total = round($base_input + $total_iva, 2);
$values = [];
$values['base'] = (float) $base_input;
$values['total_iva'] = $total_iva;
$values['total'] = $total;
}
// se calcula y se actualiza el subtotal, total_iva y total
// redondeando a 4 decimales el precio_unidad y a dos el resto
$base = round($precio_unidad * $cantidad, 2);
$total_iva = round($base * $iva / 100, 2);
$total = round($base + $total_iva, 2);
$values = [];
$values['base'] = $base;
$values['total_iva'] = $total_iva;
$values['total'] = $total;
return $values;
}
}

37
ci4/app/Controllers/Facturacion/FacturasPagos.php Executable file → Normal file
View File

@ -57,7 +57,10 @@ class FacturasPagos extends \App\Controllers\BaseResourceController
->fields(
Field::inst( 'id' ),
Field::inst( 'forma_pago_id' ),
Field::inst( 'notes' ),
Field::inst( 'notes' )
->validator('Validate::notEmpty', array(
'message' => lang('Facturas.validation.requerido'))
),
Field::inst( 'fecha_pago_at' )
->validator( Validate::dateFormat( 'Y-m-d H:i:s' ) )
->getFormatter( Format::dateSqlToFormat( 'Y-m-d H:i:s' ) )
@ -136,36 +139,4 @@ class FacturasPagos extends \App\Controllers\BaseResourceController
}
}
public function addPagoRectificativa()
{
if ($this->request->isAJAX()) {
$data['factura_id'] = $this->request->getPost('factura_id');
$data['fecha_vencimiento_at'] = $this->request->getPost('fecha');
$data['total'] = $this->request->getPost('total');
$data['user_updated_id'] = auth()->user()->id;
$data['forma_pago_id'] = 6; // compensada
if($data['fecha_vencimiento_at'] != null && $data['fecha_vencimiento_at'] != '') {
$data['fecha_vencimiento_at'] = date('Y-m-d H:i:s', strtotime($data['fecha_vencimiento_at']));
}
$model = new FacturaPagoModel();
$model->insert($data);
$modelFactura = model('App\Models\Facturas\FacturaModel');
$modelFactura->update($data['factura_id'], [
'estado_pago' => 'pagada',
'updated_at' => date('Y-m-d H:i:s'),
'user_updated_id' => auth()->user()->id,
]);
return $this->response->setJSON([
'status' => true,
'message' => lang('Facturas.facturaConformada'),
]);
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
}

View File

@ -17,10 +17,10 @@ namespace App\Controllers;
*/
use CodeIgniter\Controller;
use CodeIgniter\Database\Query;
use App\Models\NotificationModel;
abstract class GoBaseController extends Controller
{
abstract class GoBaseController extends Controller {
/**
*
@ -102,7 +102,7 @@ abstract class GoBaseController extends Controller
* @var array
*/
public $viewData;
/**
* JJO: Variable para indicar si el controlador hace soft_delete o no
@ -139,15 +139,14 @@ abstract class GoBaseController extends Controller
*
* @var array
*/
protected $helpers = ['session', 'go_common', 'text', 'general', 'jwt', 'rbac', 'assets']; //JJO
protected $helpers = ['session', 'go_common', 'text', 'general','jwt', 'rbac']; //JJO
public static $queries = [];
/**
* Constructor.
*/
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) {
// Do Not Edit This Line
parent::initController($request, $response, $logger);
@ -156,9 +155,9 @@ abstract class GoBaseController extends Controller
//--------------------------------------------------------------------
// E.g.:
$this->session = \Config\Services::session();
if ((!isset($this->viewData['pageTitle']) || empty($this->viewData['pageTitle'])) && isset(static::$pluralObjectName) && !empty(static::$pluralObjectName)) {
if ((!isset($this->viewData['pageTitle']) || empty($this->viewData['pageTitle']) ) && isset(static::$pluralObjectName) && !empty(static::$pluralObjectName)) {
$this->viewData['pageTitle'] = ucfirst(static::$pluralObjectName);
}
@ -172,7 +171,7 @@ abstract class GoBaseController extends Controller
if (empty(static::$controllerSlug)) {
$reflect = new \ReflectionClass($this);
$className = $reflect->getShortName();
$this->viewData['currentModule'] = slugify(convertToSnakeCase(str_replace('Controller', '', $className)));
$this->viewData['currentModule'] = slugify(convertToSnakeCase(str_replace('Controller','',$className)));
} else {
$this->viewData['currentModule'] = strtolower(static::$controllerSlug);
@ -186,31 +185,43 @@ abstract class GoBaseController extends Controller
$this->model = &$this->primaryModel;
}
// Preload any models, libraries, etc, here.
// Preload any models, libraries, etc, here.
// Language Validate
$language = \Config\Services::language();
$language->setLocale($this->session->lang);
// Set TimeZone
if (empty($this->session->get('settings'))) {
$time_zone = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('default_timezone')->value;
date_default_timezone_set($time_zone ?? 'Europe/Madrid');
} else {
date_default_timezone_set($this->session->get('settings')['default_timezone'] ?? 'Europe/Madrid');
if(empty($this->session->get('settings'))){
$settingsModel = new SettingsModel();
$settings = $settingsModel->select('default_timezone')->first()??[];
date_default_timezone_set($this->$settings['default_timezone']??'America/Sao_Paulo');
}else{
date_default_timezone_set($this->session->get('settings')['default_timezone']??'America/Sao_Paulo');
}
// Get notification
if(!empty($this->session->get('token'))) {
$notificationModel = new NotificationModel();
$pulse = $notificationModel->where('user_recipient',$this->session->get('token'))->where('is_read',false)->countAllResults() ?? 0;
$notification = $notificationModel->select('token,title,is_read,created_at')->where('user_recipient',$this->session->get('token'))->orderBy('created_at','desc')->findAll(5) ?? [];
$this->session->set('notification', $notification);
$this->session->set('pulse', $pulse);
}else{
$this->session->set('notification', []);
$this->session->set('pulse', 0);
}
$this->viewData['currentLocale'] = $this->request->getLocale();
}
public function index()
{
public function index() {
helper('text');
if ((!isset($this->viewData['boxTitle']) || empty($this->viewData['boxTitle'])) && isset(static::$pluralObjectName) && !empty(static::$pluralObjectName)) {
if ((!isset($this->viewData['boxTitle']) || empty($this->viewData['boxTitle']) ) && isset(static::$pluralObjectName) && !empty(static::$pluralObjectName)) {
$this->viewData['boxTitle'] = ucfirst(static::$pluralObjectName);
}
@ -225,10 +236,10 @@ abstract class GoBaseController extends Controller
// if $this->currentView is assigned a view name, use it, otherwise assume the view something like 'viewSingleObjectList'
$viewFilePath = static::$viewPath . (empty($this->currentView) ? 'view' . ucfirst(static::$singularObjectNameCc) . 'List' : $this->currentView);
echo view($viewFilePath, $this->viewData);
}
/**
@ -237,13 +248,12 @@ abstract class GoBaseController extends Controller
* @param null $objId
* @return string
*/
protected function displayForm($forMethod, $objId = null)
{
protected function displayForm($forMethod, $objId = null) {
helper('form');
$this->viewData['usingSelect2'] = true;
$validation = \Config\Services::validation();
$validation = \Config\Services::validation();
$action = str_replace(static::class . '::', '', $forMethod);
$actionSuffix = ' ';
@ -260,13 +270,13 @@ abstract class GoBaseController extends Controller
}
if (!isset($this->viewData['formAction'])) {
$this->viewData['formAction'] = base_url(strtolower($this->viewData['currentModule']) . '/' . $action . '/' . $formActionSuffix);
$this->viewData['formAction'] = base_url(strtolower($this->viewData['currentModule']) . '/' . $action . '/' . $formActionSuffix);
}
if ((!isset($this->viewData['boxTitle']) || empty($this->viewData['boxTitle'])) && isset(static::$singularObjectName) && !empty(static::$singularObjectName)) {
if ((!isset($this->viewData['boxTitle']) || empty($this->viewData['boxTitle']) ) && isset(static::$singularObjectName) && !empty(static::$singularObjectName)) {
$this->viewData['boxTitle'] = ucfirst($action) . $actionSuffix . ucfirst(static::$singularObjectName);
}
$this->viewData['validation'] = $validation;
$viewFilePath = static::$viewPath . 'view' . ucfirst(static::$singularObjectNameCc) . 'Form';
@ -274,8 +284,7 @@ abstract class GoBaseController extends Controller
return view($viewFilePath, $this->viewData);
}
protected function redirect2listView($flashDataKey = null, $flashDataValue = null)
{
protected function redirect2listView($flashDataKey = null, $flashDataValue = null) {
if (!empty($this->indexRoute)) {
$uri = base_url(route_to($this->indexRoute));
@ -295,9 +304,9 @@ abstract class GoBaseController extends Controller
} else {
$getHandlingRoutes = $routes->getRoutes('get');
$indexMethod = array_search('\\App\\Controllers\\' . $className . '::index', $getHandlingRoutes);
$indexMethod = array_search('\\App\\Controllers\\'.$className.'::index', $getHandlingRoutes);
if ($indexMethod) {
$uri = route_to('App\\Controllers\\' . $className . '::index');
$uri = route_to('App\\Controllers\\'.$className.'::index');
} else {
$uri = base_url(static::$controllerSlug);
}
@ -306,7 +315,7 @@ abstract class GoBaseController extends Controller
$uri = base_url($className);
}
}
if ($flashDataKey != null && $flashDataValue != null) {
return redirect()->to($uri)->with($flashDataKey, $flashDataValue);
} else {
@ -314,11 +323,10 @@ abstract class GoBaseController extends Controller
}
}
public function delete($requestedId, bool $deletePermanently = true)
{
public function delete($requestedId, bool $deletePermanently = true) {
if (is_string($requestedId)):
if (is_numeric($requestedId)):
if (is_string($requestedId)) :
if (is_numeric($requestedId)) :
$id = filter_var($requestedId, FILTER_SANITIZE_NUMBER_INT);
else:
$onlyAlphaNumeric = true;
@ -330,66 +338,64 @@ abstract class GoBaseController extends Controller
$id = intval($requestedId);
endif;
if (empty($id) || $id === 0):
if (empty($id) || $id === 0) :
$error = 'Invalid identifier provided to delete the object.';
endif;
$rawResult = null;
if (!isset($error)):
if (!isset($error)) :
try {
if ($deletePermanently && !$this->soft_delete):
if (is_numeric($id)):
$rawResult = $this->primaryModel->delete($id);
else:
$rawResult = $this->primaryModel->where($this->primaryModel->getPrimaryKeyName(), $id)->delete();
endif;
elseif ($this->soft_delete):
$datetime = (new \CodeIgniter\I18n\Time("now"));
$rawResult = $this->primaryModel->where('id', $id)
->set([
'deleted_at' => $datetime->format('Y-m-d H:i:s'),
'is_deleted' => $this->delete_flag
])
->update();
if ($deletePermanently && !$this->soft_delete) :
if (is_numeric($id)) :
$rawResult = $this->primaryModel->delete($id);
else:
$rawResult = $this->primaryModel->update($id, ['deleted' => true]);
$rawResult = $this->primaryModel->where($this->primaryModel->getPrimaryKeyName(), $id)->delete();
endif;
elseif ($this->soft_delete):
$datetime = (new \CodeIgniter\I18n\Time("now"));
$rawResult = $this->primaryModel->where('id',$id)
->set(['deleted_at' => $datetime->format('Y-m-d H:i:s'),
'is_deleted' => $this->delete_flag])
->update();
else:
$rawResult = $this->primaryModel->update($id, ['deleted' => true]);
endif;
} catch (\Exception $e) {
log_message('error', "Exception: Error deleting object named '" . (static::$singularObjectName ?? 'unknown') . "' with $id :\r\n" . $e->getMessage());
log_message('error', "Exception: Error deleting object named '".(static::$singularObjectName ?? 'unknown')."' with $id :\r\n".$e->getMessage());
}
endif;
$ar = $this->primaryModel->db->affectedRows();
try {
$dbError = $this->primaryModel->db->error();
} catch (\Exception $e2) {
if ($e2->getMessage() != "Trying to get property 'errno' of non-object") {
log_message('error', $e2->getCode() . ' : ' . $e2->getMessage());
log_message('error', $e2->getCode() . ' : ' . $e2->getMessage()) ;
}
}
if (isset($dbError['code']) && isset($dbError['message'])) {
log_message('error', $dbError['code'] . ' ' . $dbError['message']);
log_message('error', $dbError['code'].' '.$dbError['message']);
} else {
$dbError = ['code' => '', 'message' => ''];
$dbError = ['code' => '', 'message'=>''];
}
$result = ['persisted' => $ar > 0, 'ar' => $ar, 'persistedId' => null, 'affectedRows' => $ar, 'errorCode' => $dbError['code'], 'error' => $dbError['message']];
$result = ['persisted'=>$ar>0, 'ar'=>$ar, 'persistedId'=>null, 'affectedRows'=>$ar, 'errorCode'=>$dbError['code'], 'error'=>$dbError['message']];
$nameOfDeletedObject = static::$singularObjectNameCc;
if ($ar < 1):
if ($ar < 1) :
$errorMessage = lang('Basic.global.deleteError', [$nameOfDeletedObject]); // 'No ' . static::$singularObjectName . ' was deleted now, because it probably had already been deleted.';
$fdKey = isset($this->viewData['usingSweetAlert']) && $this->viewData['usingSweetAlert'] ? 'sweet-error' : 'errorMessage';
$fdKey = isset($this->viewData['usingSweetAlert'] ) && $this->viewData['usingSweetAlert'] ? 'sweet-error' : 'errorMessage';
$errorMessage = str_replace("'", "\'", $errorMessage);
return $this->redirect2listView($fdKey, str_replace("'", '', $errorMessage));
else:
$message = lang('Basic.global.deleteSuccess', [$nameOfDeletedObject]); // 'The ' . static::$singularObjectName . ' was successfully deleted.';
$fdKey = isset($this->viewData['usingSweetAlert']) && $this->viewData['usingSweetAlert'] ? 'sweet-success' : 'successMessage';
if ($result['affectedRows'] > 1):
log_message('warning', "More than one row has been deleted in attempt to delete row for object named '" . (static::$singularObjectName ?? 'unknown') . "' with id: $id");
$fdKey = isset($this->viewData['usingSweetAlert'] ) && $this->viewData['usingSweetAlert'] ? 'sweet-success' : 'successMessage';
if ($result['affectedRows']>1) :
log_message('warning', "More than one row has been deleted in attempt to delete row for object named '".(static::$singularObjectName ?? 'unknown')."' with id: $id");
endif;
$message = str_replace("'", "\'", $message);
return $this->redirect2listView($fdKey, $message);
@ -397,7 +403,7 @@ abstract class GoBaseController extends Controller
}
/**
/**
* Convenience method to validate form submission
* @return bool
*/
@ -410,15 +416,14 @@ abstract class GoBaseController extends Controller
return true;
}
$validationErrorMessages = $this->model->validationMessages ?? $this->formValidationErrorMessagess ?? null;
;
$validationErrorMessages = $this->model->validationMessages ?? $this->formValidationErrorMessagess ?? null;;
if ($validationErrorMessages != null) {
$valid = $this->validate($validationRules, $validationErrorMessages);
} else {
$valid = $this->validate($validationRules);
}
$this->validationErrors = $valid ? '' : $this->validator->getErrors();
/*
@ -438,8 +443,7 @@ abstract class GoBaseController extends Controller
* @param array|null $postData
* @return array
*/
protected function sanitized(array $postData = null, bool $nullIfEmpty = false)
{
protected function sanitized(array $postData = null, bool $nullIfEmpty = false) {
if ($postData == null) {
$postData = $this->request->getPost();
}
@ -458,31 +462,29 @@ abstract class GoBaseController extends Controller
* Convenience method for common exception handling
* @param \Exception $e
*/
protected function dealWithException(\Exception $e)
{
protected function dealWithException(\Exception $e) {
// using another try / catch block to prevent to avoid CodeIgniter bug throwing trivial exceptions for querying DB errors
try {
$query = $this->model->db->getLastQuery();
$queryStr = !is_null($query) ? $query->getQuery() : '';
$dbError = $this->model->db->error();
$userFriendlyErrMsg = lang('Basic.global.persistErr1', [static::$singularObjectNameCc]);
if (isset($dbError['code']) && $dbError['code'] == 1062):
$userFriendlyErrMsg .= PHP_EOL . lang('Basic.global.persistDuplErr', [static::$singularObjectNameCc]);
if (isset($dbError['code']) && $dbError['code'] == 1062) :
$userFriendlyErrMsg .= PHP_EOL.lang('Basic.global.persistDuplErr', [static::$singularObjectNameCc]);
endif;
// $userFriendlyErrMsg = str_replace("'", "\'", $userFriendlyErrMsg); // Uncomment if experiencing unescaped single quote errors
log_message('error', $userFriendlyErrMsg . PHP_EOL . $e->getMessage() . PHP_EOL . $queryStr);
if (isset($dbError['message']) && !empty($dbError['message'])):
log_message('error', $dbError['code'] . ' : ' . $dbError['message']);
log_message('error', $userFriendlyErrMsg.PHP_EOL.$e->getMessage().PHP_EOL.$queryStr);
if (isset($dbError['message']) && !empty($dbError['message'])) :
log_message('error', $dbError['code'].' : '.$dbError['message']);
endif;
$this->viewData['errorMessage'] = $userFriendlyErrMsg;
} catch (\Exception $e2) {
log_message('debug', 'You can probably safely ignore this: In attempt to check DB errors, CodeIgniter threw: ' . PHP_EOL . $e2->getMessage());
log_message('debug', 'You can probably safely ignore this: In attempt to check DB errors, CodeIgniter threw: '.PHP_EOL.$e2->getMessage());
}
}
// Collect the queries so something can be done with them later.
public static function collect(Query $query)
{
public static function collect(Query $query) {
static::$queries[] = $query;
}
@ -493,8 +495,7 @@ abstract class GoBaseController extends Controller
* @param object $sourceObject
* @return object
*/
function cast($destination, $sourceObject)
{
function cast($destination, $sourceObject) {
if (is_string($destination)) {
$destination = new $destination();
}

View File

@ -1,551 +0,0 @@
<?php
namespace App\Controllers\Importadores;
use App\Controllers\BaseResourceController;
use App\Controllers\Presupuestos\Presupuestocliente;
use App\Models\Presupuestos\PresupuestoModel;
use App\Services\PresupuestoService;
class ImportadorBubok extends BaseResourceController
{
protected $format = 'json';
protected static $singularObjectName = 'Importador';
protected static $singularObjectNameCc = 'ImportadorBubok';
protected static $pluralObjectName = 'Importadores';
protected static $pluralObjectNameCc = 'importadores';
protected static $controllerSlug = 'importador';
protected static $viewPath = 'themes/vuexy/form/importador/bubok/';
protected $indexRoute = 'ImportadorBubokTool';
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
{
$this->viewData['pageTitle'] = lang('Importador.listingPage');
$this->viewData['usingSweetAlert'] = true;
// Breadcrumbs (IMN)
$this->viewData['breadcrumb'] = [
['title' => lang("App.menu_importadores"), 'route' => "javascript:void(0);", 'active' => false],
['title' => lang("App.menu_importadores_bubok"), 'route' => route_to('importadorBubokTool'), 'active' => true]
];
parent::initController($request, $response, $logger);
}
public function index()
{
checkPermission('importadores.bubok');
$viewData = [
'pageSubTitle' => lang('Basic.global.ManageAllRecords', [lang('Importador.importadorCatalogoTitle')]),
];
$viewData = array_merge($this->viewData, $viewData); // merge any possible values from the parent controller class
return view(static::$viewPath . 'viewImportadorBubokTool', $viewData);
}
public function validarFila()
{
checkPermission('importadores.bubok');
$json = $this->request->getJSON();
if (!$json || empty($json->producto) || empty($json->pedido)) {
return $this->response->setJSON([
'apto' => false,
'reason' => 'Datos incompletos'
]);
}
$producto = $json->producto;
$pedido = $json->pedido;
// Validar existencia de ID de producto
if (empty($producto->id)) {
return $this->response->setJSON([
'apto' => false,
'reason' => 'ID de producto no proporcionado'
]);
}
$refCliente = $pedido->orderNumber . '-' . $producto->id;
// Validar formato Ref. Cliente
if (strpos($refCliente, '-') === false || strlen($refCliente) < 5) {
return $this->response->setJSON([
'apto' => false,
'reason' => 'Ref. cliente inválido'
]);
}
// 1. Verificar si ya fue importado
$presupuestoModel = new PresupuestoModel();
$yaExiste = $presupuestoModel->where('referencia_cliente', $refCliente)->first();
if ($yaExiste) {
return $this->response->setJSON([
'apto' => false,
'reason' => 'Referencia ya importada'
]);
}
// 2. Validación básica del producto (puedes expandir con más reglas si lo necesitas)
$errores = [];
if (empty($producto->title))
$errores[] = 'Falta título';
if (empty($producto->body->pages))
$errores[] = 'Faltan páginas';
if (empty($producto->amount))
$errores[] = 'Falta tirada';
if (!empty($errores)) {
return $this->response->setJSON([
'apto' => false,
'reason' => implode(', ', $errores)
]);
}
// 3. Producto considerado apto
return $this->response->setJSON([
'apto' => true
]);
}
public function importarFila()
{
checkPermission('importadores.bubok');
$json = $this->request->getJSON();
// Validación mínima de datos comunes
$pedido = $json->pedido ?? null;
if (!$pedido || !isset($pedido->orderNumber)) {
return $this->respond([
'status' => 400,
'message' => 'Datos comunes del pedido ausentes o inválidos.'
]);
}
// Validación mínima de existencia del producto en la linea
if (!$json || !isset($json->producto)) {
return $this->respond([
'status' => 400,
'message' => 'Producto no proporcionado o inválido.'
]);
}
$producto = $json->producto;
// 1. Datos básicos:
// Referencia del cliente
$orderNumber = $pedido->orderNumber ?? null;
$productId = $producto->id ?? null;
if (is_null($orderNumber) || is_null($productId)) {
return $this->respond([
'status' => 400,
'message' => 'Número de orden o ID del producto no reconocidos.'
]);
}
$refCliente = "$orderNumber-$productId";
// Titulo
$titulo = $producto->title ?? null;
if (is_null($titulo)) {
return $this->respond([
'status' => 400,
'message' => 'Título del libro no reconocido.'
]);
}
// Validación de páginas y tirada
$paginas = isset($producto->body->pages) ? (int) $producto->body->pages : 0;
$tirada = isset($producto->amount) ? (int) $producto->amount : 0;
if ($paginas <= 0 || $tirada <= 0) {
$errores = [];
if ($paginas <= 0) {
$errores[] = 'Número de páginas inválido.';
}
if ($tirada <= 0) {
$errores[] = 'Tirada inválida.';
}
return $this->respond([
'status' => 400,
'message' => implode(' ', $errores)
]);
}
// Ancho y alto
$ancho = null;
$alto = null;
foreach ($producto->size as $key => $val) {
if ($val == 1) {
// ejemplo: size170x235
$size = str_replace('size', '', $key);
[$ancho, $alto] = explode('x', $size);
$ancho = (int) $ancho;
$alto = (int) $alto;
break;
}
}
if (!$ancho || !$alto) {
return $this->respond([
'status' => 400,
'message' => 'Tamaño del libro no reconocido.'
]);
}
/*$numGuardaPages = 4;
$hasGuarda = !empty($producto->cover->guarda);
if ($hasGuarda)
$paginas += $numGuardaPages;*/
// 2. Interior: color o negro
// Determinar tipo de impresión interior
$interiorTipo = null;
if (isset($producto->body->color->CMYK) && $producto->body->color->CMYK == '1') {
$interiorTipo = 'color';
} elseif (isset($producto->body->color->Monochrome) && $producto->body->color->Monochrome == '1') {
$interiorTipo = 'negro';
} elseif (isset($producto->body->color->Semicolor) && $producto->body->color->Semicolor == '1') {
return $this->respond([
'status' => 400,
'message' => 'Tipo de impresión "Semicolor" no soportado.'
]);
}
if (is_null($interiorTipo)) {
return $this->respond([
'status' => 400,
'message' => 'No se pudo determinar si el interior es en color o blanco y negro.'
]);
}
// Determinar tipo de papel interior
$papelInteriorId = null;
if (isset($producto->body->paperColor->white) && $producto->body->paperColor->white == '1') {
$papelInteriorId = 3; // Offset blanco 'OFF1'
} elseif (isset($producto->body->paperColor->cream) && $producto->body->paperColor->cream == '1') {
$papelInteriorId = 4; // Offset ahuesado 'OFF2'
} else {
return $this->respond([
'status' => 400,
'message' => 'Tipo de papel interior no definido.'
]);
}
// Determinar el gramaje del papel
$gramajePapelInterior = null;
foreach ($producto->body->paperWeight as $key => $val) {
if ($val == 1) {
$gramajePapelInterior = (int) str_replace(['weight', 'gr'], '', $key);
break;
}
}
if (!$gramajePapelInterior) {
return $this->respond([
'status' => 400,
'message' => 'Gramaje del papel no válido.'
]);
}
// 3. Encuadernación
// Tapa dura
$tapaDura = isset($producto->cover->type->tapadura) && $producto->cover->type->tapadura == '1';
// Solapas
$solapas = isset($producto->cover->type->consolapas) && $producto->cover->type->consolapas == '1';
// Doble cara (a veces se activa con tapa dura) una cara => 2; dos caras => 4
$doscara = false;
// Tipo de encuadernado
$encuadernadoId = null;
if (isset($producto->cover->coverType->SoftCover) && $producto->cover->coverType->SoftCover == '1') {
if ($tapaDura) {
$encuadernadoId = 1; // Libro fresado tapa dura
$doscara = true;
} else {
$encuadernadoId = 2; // Libro fresado tapa blanda
}
} elseif (isset($producto->cover->coverType->SaddleStitch) && $producto->cover->coverType->SaddleStitch == '1') {
if ($tapaDura) {
$encuadernadoId = 3; // Libro cosido tapa dura
$doscara = true;
} else {
$encuadernadoId = $solapas ? 20 : 4; // Libro cosido tapa blanda (solapas) : (sin solapas)
}
} elseif (isset($producto->cover->coverType->CoilBinding) && $producto->cover->coverType->CoilBinding == '1') {
if ($tapaDura) {
$encuadernadoId = 5; // Libro espiral tapa dura
$doscara = true;
} else {
$encuadernadoId = 6; // Libro espiral tapa blanda
}
}
if (!$encuadernadoId) {
return $this->respond([
'status' => 400,
'message' => 'Tipo de encuadernación no identificado.'
]);
}
// Determinar el acabado de la cubierta
$acabadoId = null;
if (isset($producto->cover->acabado->brillo) && $producto->cover->acabado->brillo == '1') {
$acabadoId = 1; // Plastificado brillo 1/c
} elseif (isset($producto->cover->acabado->mate) && $producto->cover->acabado->mate == '1') {
$acabadoId = 2; // Plastificado mate 1/c
} else {
return $this->respond([
'status' => 400,
'message' => 'Tipo de acabado de cubierta no definido.'
]);
}
// 4. ENVÍO: recuperamos la primera dirección del cliente BUBOK (ID 40)
$clienteDireccionModel = model('App\Models\Clientes\ClienteDireccionesModel');
$direccionCliente = $clienteDireccionModel
->where('cliente_id', 40)
->orderBy('id', 'asc')
->first();
if (!$direccionCliente) {
return $this->respond([
'status' => 400,
'message' => 'El cliente Bubok no tiene direcciones asociadas.'
]);
}
$direcciones = [
[
'direccion' => [
'id' => (int) $direccionCliente->id,
'cliente_id' => (int) $direccionCliente->cliente_id,
'cliente_nombre' => $direccionCliente->clienteNombre,
'att' => $direccionCliente->persona_contacto ?? '',
'alias' => $direccionCliente->alias ?? '',
'email' => $direccionCliente->email ?? '',
'direccion' => $direccionCliente->direccion,
'pais_id' => (int) $direccionCliente->pais_id,
'pais' => $direccionCliente->paisNombre,
'municipio' => $direccionCliente->municipio,
'provincia' => $direccionCliente->provincia,
'cp' => $direccionCliente->cp,
'telefono' => $direccionCliente->telefono,
],
'unidades' => $tirada,
'entregaPalets' => false
]
];
// Recalcular calidad (isColor y isHq) en funcion del cliente
[$isColor, $isHq] = PresupuestoService::getCalidad(
'importador-bubok',
null,
((trim(strtolower($interiorTipo)) === 'color') ? 1 : 0),
0,
intval($tirada ?? 0)
);
// Generamos el objeto a importar
$dataToImport = [
'selectedTirada' => $tirada,
'datosCabecera' => [
'titulo' => $titulo,
'autor' => null,
'isbn' => null,
'coleccion' => null,
'referenciaCliente' => $refCliente
],
'tirada' => [$tirada],
'tamanio' => [
'ancho' => $ancho,
'alto' => $alto
],
'tipo' => '',
'tipo_presupuesto_id' => $encuadernadoId,
'clienteId' => 40, // BUBOK ID
'isColor' => $isColor,
'isHq' => $isHq,
'paginas' => $paginas,
'paginasColor' => ($interiorTipo === 'color') ? $paginas : 0,
'paginasCuadernillo' => 32,
'interior' => [
'papelInterior' => $papelInteriorId,
'gramajeInterior' => $gramajePapelInterior
],
'cubierta' => [
'papelCubierta' => 2, // 'EST2'
'carasCubierta' => $doscara ? 2 : 4,
'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,
'acabado' => $acabadoId,
'cabezada' => 'WHI',
'lomoRedondo' => 0
],
'guardas' => [],
'sobrecubierta' => [],
'faja' => null,
'direcciones' => $direcciones,
'ivaReducido' => 1,
];
/*return $this->respond([
'status' => 400,
'message' => $dataToImport,
'interiorTipo' => $interiorTipo,
'isColor' => $isColor
]);*/
// 5. Guardar
try {
$presupuestocliente = new Presupuestocliente();
$response = $presupuestocliente->guardar($dataToImport);
// Guardar la URL de la portada y el cuerpo en los comentarios del presupuesto
$presupuestoModel = model('App\Models\Presupuestos\PresupuestoModel');
$presupuestoModel->update($response['sk_id'], [
'comentarios_safekat' => 'URL COVER: ' . $producto->cover->file . "\nURL BODY: " . $producto->body->file,
]);
// Ajuste del precio
$precio_compra = $json->producto->prices->unitPrice ?? null;
if ($precio_compra != null && $precio_compra > 0) {
$respuesta_ajuste = PresupuestoService::ajustarPresupuesto(
$response['sk_id'],
$precio_compra,
$tirada,
null,
true
);
if ($respuesta_ajuste['warning'] == true) {
$response['price_warning'] = [
'new_precio_unidad' => $respuesta_ajuste['new_precio_unidad'],
'new_total' => $respuesta_ajuste['new_total'],
];
}
}
// confirmar y crear pedido y ot
$presupuestoModel->confirmarPresupuesto($response['sk_id']);
PresupuestoService::crearPedido($response['sk_id'], isImported: true);
if (!isset($response['sk_id'])) {
return $this->respond([
'status' => 400,
'error' => 'Missing sk_id',
'message' => 'No se pudo crear el presupuesto.'
], 400);
}
// Descarga y subida de archivos al SFTP
$presupuestoFicheroModel = model('App\Models\Presupuestos\PresupuestoFicheroModel');
$ftp = new \App\Libraries\SafekatFtpClient();
$archivoUrls = [
'cover' => $producto->cover->file ?? null,
'body' => $producto->body->file ?? null,
];
foreach ($archivoUrls as $tipo => $url) {
if (!$url)
continue;
try {
$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([
'status' => 200,
'data' => [
'sk_id' => $response['sk_id'],
'sk_url' => $response['sk_url'] ?? null
]
]);
} catch (\Throwable $e) {
return $this->respond([
'status' => 500,
'error' => 'Server error',
'message' => 'Error inesperado',
'debug' => $e->getMessage()
]);
}
}
}

View File

@ -1,462 +0,0 @@
<?php
namespace App\Controllers\Importadores;
use App\Controllers\BaseResourceController;
use App\Entities\Catalogo\CatalogoLibroEntity;
use App\Models\Presupuestos\PresupuestoModel;
use App\Models\Catalogo\CatalogoLibroModel;
use App\Controllers\Presupuestos\Presupuestocliente;
use App\Services\PresupuestoService;
class ImportadorCatalogo extends BaseResourceController
{
protected $modelName = CatalogoLibroModel::class;
protected $format = 'json';
protected static $singularObjectName = 'Importador';
protected static $singularObjectNameCc = 'ImportadorCatalogo';
protected static $pluralObjectName = 'Importadores';
protected static $pluralObjectNameCc = 'importadores';
protected static $controllerSlug = 'importador';
protected static $viewPath = 'themes/vuexy/form/importador/catalogo/';
protected $indexRoute = 'ImportadorCatalogoTool';
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
{
$this->viewData['pageTitle'] = lang('Importador.listingPage');
$this->viewData['usingSweetAlert'] = true;
// Breadcrumbs (IMN)
$this->viewData['breadcrumb'] = [
['title' => lang("App.menu_importadores"), 'route' => "javascript:void(0);", 'active' => false],
['title' => lang("App.menu_importadores_catalogo"), 'route' => route_to('importadorCatalogoTool'), 'active' => true]
];
parent::initController($request, $response, $logger);
}
public function index()
{
checkPermission('importadores.catalogo');
$viewData = [
'pageSubTitle' => lang('Basic.global.ManageAllRecords', [lang('Importador.importadorCatalogoTitle')]),
];
$viewData = array_merge($this->viewData, $viewData); // merge any possible values from the parent controller class
return view(static::$viewPath . 'viewImportadorCatalogoTool', $viewData);
}
public function validarFila()
{
checkPermission('importadores.catalogo');
$json = $this->request->getJSON();
// Validación inicial del JSON y del ISBN
if (!$json || !isset($json->fila[0]) || empty(trim($json->fila[0]))) {
return $this->response->setJSON([
'apto' => false,
'reason' => 'ISBN no proporcionado o datos inválidos'
]);
}
$input = trim($json->fila[0]); // ISBN
$refCliente = isset($json->fila[1]) ? trim($json->fila[1]) : null;
// Validar formato del refCliente (esperado: idpedido-idlinea)
if (empty($refCliente) || strpos($refCliente, '-') === false) {
return $this->response->setJSON([
'apto' => false,
'reason' => 'Ref. cliente inválido'
]);
}
// 1. Comprobar duplicado en tabla de presupuestos
$presupuestoModel = new PresupuestoModel(); // Usa el modelo real que corresponda
$yaExiste = $presupuestoModel->where('referencia_cliente', $refCliente)->first();
if ($yaExiste) {
return $this->response->setJSON([
'apto' => false,
'reason' => 'Referencia ya importada'
]);
}
$catalogoModel = new CatalogoLibroModel();
// 2. Buscar por ISBN exacto
$libroPorIsbn = $catalogoModel->where('isbn', $input)->first();
if ($libroPorIsbn) {
return $this->response->setJSON([
'apto' => true
]);
}
// 3. Buscar por EAN sin guiones
$eanLimpio = str_replace('-', '', $input);
$libroPorEan = $catalogoModel
->where('REPLACE(ean, "-", "")', $eanLimpio, false) // false para evitar escapado automático
->first();
if ($libroPorEan) {
return $this->response->setJSON([
'apto' => true
]);
}
// 4. No encontrado
return $this->response->setJSON([
'apto' => false,
'reason' => 'No encontrado en catálogo'
]);
}
public function importarFila()
{
checkPermission('importadores.catalogo');
$json = $this->request->getJSON();
if (!$json || !isset($json->fila[0])) {
return $this->response->setJSON([
'success' => false,
'message' => 'Datos inválidos.'
]);
}
// Mapear cada columna a una variable (debe coincidir con catalogo_tool.js)
$isbn = isset($json->fila[0]) ? trim($json->fila[0]) : null;
$refCliente = isset($json->fila[1]) ? trim($json->fila[1]) : null;
$tirada = isset($json->fila[3]) ? (float) $json->fila[3] : null;
if (empty($isbn)) {
return $this->response->setJSON([
'success' => false,
'message' => 'Input vacío o no proporcionado.'
]);
}
// 0. Comprobar duplicado en tabla de presupuestos
$presupuestoModel = new PresupuestoModel(); // Usa el modelo real que corresponda
$yaExiste = $presupuestoModel->where('referencia_cliente', $refCliente)->first();
if ($yaExiste) {
return $this->response->setJSON([
'success' => false,
'message' => 'Referencia ya importada'
]);
}
$catalogoModel = new CatalogoLibroModel();
// 1. Buscar por ISBN exacto
$libro = $catalogoModel->where('isbn', $isbn)->first();
// 2. Si no, buscar por EAN sin guiones
if (!$libro) {
$eanLimpio = str_replace('-', '', $isbn);
$libro = $catalogoModel->where('REPLACE(ean, "-", "")', $eanLimpio)->first();
}
if (!$libro) {
return $this->response->setJSON([
'success' => false,
'message' => 'No se encontró el libro en el catálogo.'
]);
}
// Aquí ya tenemos el libro correcto.
// Ahora se prepara la "inserción" o el "registro" a importar
// Variables intermedias
$colorPaginas = (int) ($libro->color_paginas ?? 0);
$negroPaginas = (int) ($libro->negro_paginas ?? 0);
$papelInteriorDiferente = ($colorPaginas > 0 && $negroPaginas > 0) ? 1 : 0;
// --- Interior (lo que cambiamos ahora)
if ($papelInteriorDiferente) {
// Mixto: páginas en negro + color
$interior = [
'papelInterior' => [
'negro' => $libro->negro_papel_id,
'color' => $libro->color_papel_id,
],
'gramajeInterior' => [
'negro' => $libro->negro_gramaje,
'color' => $libro->color_gramaje,
]
];
} else {
// SOLO un tipo: negro O color
$colorPaginas = (int) ($libro->color_paginas ?? 0);
$negroPaginas = (int) ($libro->negro_paginas ?? 0);
if ($colorPaginas > 0 && $negroPaginas == 0) {
// Libro completamente en color
$interior = [
'papelInterior' => $libro->color_papel_id,
'gramajeInterior' => $libro->color_gramaje,
];
} else {
// Libro completamente en blanco y negro
$interior = [
'papelInterior' => $libro->negro_papel_id,
'gramajeInterior' => $libro->negro_gramaje,
];
}
}
// Sobrecubierta
$sobrecubierta = [];
if (!is_null($libro->sobrecubierta_paginas) && $libro->sobrecubierta_paginas != 0) {
$sobrecubierta['papel'] = $libro->sobrecubierta_papel_id;
$sobrecubierta['gramaje'] = $libro->sobrecubierta_gramaje;
$sobrecubierta['solapas'] = $libro->sobrecubierta_solapas;
$sobrecubierta['acabado'] = $libro->sobrecubierta_acabado_id;
}
// Recalcular calidad (isColor y isHq) en funcion del cliente
[$isColor, $isHq] = PresupuestoService::getCalidad(
'importador-rama',
null,
(in_array(strtolower($libro->tipo_impresion), ['color', 'colorhq']) ? 1 : 0),
(in_array(strtolower($libro->tipo_impresion), ['negrohq', 'colorhq']) ? 1 : 0),
intval($tirada ?? 0)
);
$dataToImport = [
'selectedTirada' => $tirada,
'datosCabecera' => [
'titulo' => $libro->titulo,
'autor' => $libro->autor,
'isbn' => $isbn,
'coleccion' => $libro->coleccion,
'referenciaCliente' => $refCliente
],
'tirada' => array_values(array_filter([
$tirada,
null,
null,
null,
])),
'tamanio' => [
'ancho' => $libro->ancho,
'alto' => $libro->alto
],
'tipo' => "",
'tipo_presupuesto_id' => $libro->encuadernacion_id,
'clienteId' => 251,
'isColor' => $isColor,
'isHq' => $isHq,
'paginas' => $libro->paginas,
'paginasColor' => $colorPaginas,
'papelInteriorDiferente' => $papelInteriorDiferente,
'paginasCuadernillo' => 32,
'interior' => $interior,
'cubierta' => [
'papelCubierta' => $libro->cubierta_papel_id,
'gramajeCubierta' => $libro->cubierta_gramaje,
'solapas' => $libro->cubierta_ancho_solapas,
'acabado' => $libro->cubierta_acabado_id,
'cabezada' => 'WHI',
'lomoRedondo' => 0
],
'ivaReducido' => 1,
'guardas' => [],
'sobrecubierta' => $sobrecubierta,
//'faja' => null,
'entrega_taller' => 1,
];
/*return $this->response->setJSON([
'success' => true,
'message' => 'Libro encontrado y preparado para importar.',
'data' => $dataToImport
]);*/
$tarifas = $this->obtenerTarifas();
$precioDesdeTarifa = $this->calcularPrecioDesdeTarifa(
$dataToImport['isColor'],
$libro->encuadernacion_id,
$libro->ancho,
$libro->alto,
$libro->paginas,
$tarifas
);
if (is_null($precioDesdeTarifa)) {
return $this->response->setJSON([
'success' => false,
'message' => 'No se pudo calcular el precio desde las tarifas disponibles.',
'detalle' => [
'tinta' => $dataToImport['isColor'] ? 'color' : 'negro',
'encuadernacion_id' => $libro->encuadernacion_id,
'ancho' => $libro->ancho,
'alto' => $libro->alto,
'paginas' => $libro->paginas
]
]);
}
// Usar precio calculado
$precio_compra = $precioDesdeTarifa;
// Procedemos a intentar guardar el presupuesto
// Instancia de presupuesto cliente
$presupuestocliente = new Presupuestocliente();
try {
$response = $presupuestocliente->guardar($dataToImport);
// DEBUG LINE
//return $this->respond($response);
if (!isset($response['sk_id'])) {
return $this->respond([
'status' => 400,
'error' => 'Missing sk_id',
'message' => 'El identificador sk_id es requerido pero no se recibió.'
], 400);
}
$response = [
'status' => 200,
'error' => null,
'data' => [
'sk_id' => $response['sk_id'],
'sk_url' => $response['sk_url'] ?? null
]
];
// Vincular el presupuesto con el catálogo
model('\App\Models\Presupuestos\PresupuestoModel')
->vincularCatalogo($response['data']['sk_id'], $libro->id);
// Ajuste del precio a RAMA
$respuesta_ajuste = PresupuestoService::ajustarPresupuesto(
$response['data']['sk_id'],
$precio_compra,
$tirada,
null,
true
);
if ($respuesta_ajuste['warning'] == true) {
$response['price_warning'] = [
'new_precio_unidad' => $respuesta_ajuste['new_precio_unidad'],
'new_total' => $respuesta_ajuste['new_total'],
];
}
// confirmar y crear pedido y ot
model('App\Models\Presupuestos\PresupuestoModel')->confirmarPresupuesto($response['data']['sk_id']);
PresupuestoService::crearPedido($response['data']['sk_id'], isImported: true);
return $this->respond($response);
} catch (\Exception $e) {
return $this->respond([
'status' => 500,
'error' => 'Server error',
'message' => 'Error inesperado durante el procesado',
'debug' => $e->getMessage()
]);
}
}
private function calcularPrecioDesdeTarifa($isColor, $encuadernacionId, $ancho, $alto, $paginas, $tarifas)
{
// Solo aplicamos tarifa si la encuadernación es Rústica Fresada (id = 2)
if ((int) $encuadernacionId !== 2) {
return null;
}
$tinta = $isColor ? 'color' : 'negro';
foreach ($tarifas as $tarifa) {
if (
strtolower($tarifa['tinta']) === $tinta &&
strtolower($tarifa['manipulado']) === 'rústica fresada' &&
(int) $tarifa['ancho'] === (int) $ancho &&
(int) $tarifa['alto'] === (int) $alto
) {
return round($tarifa['precio_fijo'] + ($tarifa['precio_variable'] * $paginas), 2);
}
}
return null; // No se encontró tarifa válida
}
private function obtenerTarifas()
{
return [
[
'tinta' => 'color',
'manipulado' => 'Rústica Fresada',
'ancho' => 200,
'alto' => 245,
'precio_fijo' => 1.15,
'precio_variable' => 0.076
],
[
'tinta' => 'negro',
'manipulado' => 'Rústica Fresada',
'ancho' => 200,
'alto' => 245,
'precio_fijo' => 1.15,
'precio_variable' => 0.009724
],
[
'tinta' => 'color',
'manipulado' => 'Rústica Fresada',
'ancho' => 150,
'alto' => 210,
'precio_fijo' => 1.15,
'precio_variable' => 0.03217
],
[
'tinta' => 'negro',
'manipulado' => 'Rústica Fresada',
'ancho' => 150,
'alto' => 210,
'precio_fijo' => 1.15,
'precio_variable' => 0.00572
],
[
'tinta' => 'negro',
'manipulado' => 'Rústica Fresada',
'ancho' => 170,
'alto' => 240,
'precio_fijo' => 1.15,
'precio_variable' => 0.008
]
];
}
}

View File

@ -0,0 +1,518 @@
<?php
namespace App\Controllers;
use App\Models\ActivityModel;
use App\Models\PasswordRecoveryModel;
use App\Models\SettingsModel;
use App\Models\TemplateModel;
use App\Models\Usuarios\UserModel;
use App\Libraries\PasswordHash;
use CodeIgniter\HTTP\Files\FileCollection;
class Integration extends BaseController
{
private $user_model;
private $settings_model;
private $pass_recovery_model;
private $template_model;
private $activity_model;
private $id_user;
private $token_user;
function __construct()
{
$this->user_model = new UserModel();
$this->settings_model = new SettingsModel();
$this->pass_recovery_model = new PasswordRecoveryModel();
$this->template_model = new TemplateModel();
$this->activity_model = new ActivityModel();
$this->id_user = session()->get('id_user');
$this->token_user = session()->get('token');
}
public function index()
{
echo view(getenv('theme.path').'main/header');
echo view(getenv('theme.path').'form/dashboard/index');
echo view(getenv('theme.path').'main/footer');
}
public function send_email($email='',$subject='',$body='',$key='',$json=false){
if(empty($email)){
return $json ? json_encode(["return" => false]) : false;
}
$phpass = new PasswordHash(8, true);
if(!$phpass->CheckPassword(MD5($email), $key)){
return $json ? json_encode(["return" => false]) : false;
}
$user = $this->user_model->where('email',$email??null)->first();
if(!empty($user)){
foreach (keywordEmail()??[] as $item){
$field = str_replace(['[','user_',']'],'',$item);
if(str_contains($body, $field)){
$body = str_replace('['.$item.']',$user->{$field},$body);
}
}
}
if($this->sendMail($subject,unescape($body),$email)){
return $json ? json_encode(["return" => true]) : true;
}else{
return $json ? json_encode(["return" => false]) : false;
}
}
public function send_email_test($email=''){
$token = session()->get('token')??'';
if(!empty($token)){
if(empty($email)){
return $this->response->setJSON(["return" => false]);
}
$subject = "Email Test";
$body = "Email working successfully!";
if($this->sendMail($subject,unescape($body),$email)){
return $this->response->setJSON(["return" => true]);
}else{
return $this->response->setJSON(["return" => false]);
}
}else{
return $this->response->setJSON(["return" => false]);
}
}
public function reset_password(){
$session = session();
$settings = $session->get('settings');
helper('text');
if($listPost = $this->request->getPost()){
// Captcha Validation
if($settings['captcha_recovery']??false){
if($settings['captcha_gateway'] == 'recaptcha'){
if(isset($listPost['g-recaptcha-response'])){
$captcha = $listPost['g-recaptcha-response'];
$url = 'https://www.google.com/recaptcha/api/siteverify?secret='.urlencode($settings['captcha_secret_key']??'').'&response='.urlencode($captcha);
$response = file_get_contents($url);
$responseKeys = json_decode($response,true);
if(!$responseKeys["success"]) {
$session->setFlashdata('toast', ['error',lang("App.login_alert"),lang("App.login_alert_captcha_invalid")]);
return redirect()->to('/login/forgot_password');
}
}else{
$session->setFlashdata('toast', ['error',lang("App.login_alert"),lang("App.login_alert_captcha_not_found")]);
return redirect()->to('/login/forgot_password');
}
}
if($settings['captcha_gateway'] == 'hcaptcha'){
if(isset($listPost['h-captcha-response'])){
$captcha = $listPost['h-captcha-response'];
$url = 'https://hcaptcha.com/siteverify?secret='.urlencode($settings['captcha_secret_key']??'').'&response='.urlencode($captcha).'&remoteip='.$_SERVER['REMOTE_ADDR'];
$response = file_get_contents($url);
$responseKeys = json_decode($response,true);
if(!$responseKeys["success"]) {
$session->setFlashdata('toast', ['error',lang("App.login_alert"),lang("App.login_alert_captcha_invalid")]);
return redirect()->to('/login/forgot_password');
}
}else{
$session->setFlashdata('toast', ['error',lang("App.login_alert"),lang("App.login_alert_captcha_not_found")]);
return redirect()->to('/login/forgot_password');
}
}
}
$user = $this->user_model->where('email',$listPost['email']??null)->first();
if(empty($user)){
$session->setFlashdata('toast', ['error',lang("App.login_alert"),lang("App.login_alert_user_not_found")]);
return redirect()->to('/login/forgot_password');
}
$template = $this->template_model->where('id_template',1)->first();
foreach (keywordEmail()??[] as $item){
$field = str_replace(['[','user_',']'],'',$item);
$template = str_replace('['.$item.']',$user->$field ?? "",$template);
}
$token = random_string("alnum", 50);
$url = base_url().'login/recovery/'.$token;
$this->pass_recovery_model->save([
'user' => $user->token,
'token' => $token
]);
$title = $template['subject']??'';
$msg = $template['body']??'';
$msg = str_replace('[recovery_password]',$url,$msg);
$email = $user->email;
$this->setLog('recovery','recovery-password',$user->token);
$send = $this->sendMail($title,$msg,$email);
if($send){
$session->setFlashdata('toast', ['success',lang("App.login_alert_send"),lang("App.login_alert_send_pass")]);
return redirect()->to('/login/forgot_password');
}else{
$session->setFlashdata('toast', ['error',lang("App.login_alert"),lang("App.login_alert_error_email")]);
return redirect()->to('/login/forgot_password');
}
}else{
$session->setFlashdata('toast', ['error',lang("App.login_alert"),lang("App.login_alert_error_pass")]);
return redirect()->to('/login/forgot_password');
}
}
public function setLog($level,$event,$user='')
{
$request = \Config\Services::request();
$ip = $request->getIPAddress();
$agent = $request->getUserAgent();
if ($agent->isBrowser())
{
$currentAgent = $agent->getBrowser().' '.$agent->getVersion();
}
elseif ($agent->isRobot())
{
$currentAgent = $this->agent->robot();
}
elseif ($agent->isMobile())
{
$currentAgent = $agent->getMobile();
}
else
{
$currentAgent = 'Unidentified User Agent';
}
$this->activity_model->save([
'user' => $this->token_user??$user,
'level' => $level,
'event' => $event,
'ip' => $ip,
'os' => $agent->getPlatform(),
'browser' => $currentAgent,
'detail' => $agent
]);
}
private function sendMail($subject,$body,$recipient)
{
$config = $this->settings_model->first();
$gateway = $config['email_gateway'];
$body = html_entity_decode($body);
if($gateway == 'smtp'){
try {
//https://codeigniter.com/user_guide/libraries/email.html
$email = \Config\Services::email();
$config['protocol'] = $config['email_gateway'];
$config['SMTPHost'] = $config['email_smtp'];
$config['SMTPUser'] = $config['email_address'];
$config['SMTPPass'] = $config['email_pass'];
$config['SMTPPort'] = $config['email_port'];
$config['SMTPCrypto'] = $config['email_cert']=='none'?'':$config['email_cert'];
$config['SMTPTimeout'] = 15;
$config['mailType'] = 'html';
$config['wordWrap'] = true;
$email->initialize($config);
$email->setFrom($config['email_address'], $config['email_name']);
$email->setTo($recipient);
$email->setSubject($subject);
$email->setMessage($body);
if (!$email->send())
{
return false;
}else{
return true;
}
} catch (\Exception $ex) {
return false;
}
}
return false;
}
public function saveStorage($file=null,$path='',$allow=[]){
$config = $this->settings_model->first();
$gateway = $config['storage_gateway'];
switch ($gateway) {
case "local":
try {
$ext = $file ? $file->getExtension() : '';
if (in_array(strtolower($ext), $allow)) {
if(strtolower(PHP_OS) == 'linux'){
$pathServer = $path;
}else{
$pathServer = str_replace('/','\\',$path);
}
if ($file->isValid()) {
$name = $file->getName();
$rename = $file->getRandomName();
$file->move($pathServer,$rename);
return $path.$rename;
}
}
return null;
} catch (\Exception $ex) {
return null;
}
case "aws":
case "minio":
$aws_endpoint = $config['aws_endpoint'];
$aws_key = $config['aws_key'];
$aws_secret = $config['aws_secret'];
$aws_region = $config['aws_region'];
$aws_bucket = $config['aws_bucket'];
try {
$ext = $file ? $file->getExtension() : '';
if (in_array(strtolower($ext), $allow)) {
if($gateway=="minio"){
$s3Client = new \Aws\S3\S3Client([
'version' => 'latest',
'region' => $aws_region,
'endpoint' => $aws_endpoint,
'use_path_style_endpoint' => true,
'credentials' => [
'key' => $aws_key,
'secret' => $aws_secret
]
]);
}else{
$s3Client = new \Aws\S3\S3Client([
'version' => 'latest',
'region' => $aws_region,
'credentials' => [
'key' => $aws_key,
'secret' => $aws_secret
]
]);
}
try {
$rename = $file->getRandomName();
$file->move(WRITEPATH.'uploads',$rename);
if(strtolower(PHP_OS) == 'linux'){
$file_Path = WRITEPATH.'uploads/'. $rename;
}else{
$file_Path = WRITEPATH.'uploads\\'. $rename;
}
$result = $s3Client->putObject([
'Bucket' => $aws_bucket,
'Key' => $rename,
'Body' => fopen($file_Path, 'r')
]);
unlink($file_Path);
if($result['@metadata']['statusCode'] == 200){
return $result['@metadata']['effectiveUri'];
}else{
return null;
}
} catch (\Aws\S3\Exception\S3Exception $e) {
return null;
}
}
return null;
} catch (\Exception $ex) {
return null;
}
default:
return null;
}
}
public function saveStorageBackup($file=null,$name=null){
$config = $this->settings_model->first();
$gateway = $config['backup_storage'];
switch ($gateway) {
case "local":
try {
return $file;
} catch (\Exception $ex) {
return null;
}
case "aws":
case "minio":
$aws_endpoint = $config['aws_endpoint'];
$aws_key = $config['aws_key'];
$aws_secret = $config['aws_secret'];
$aws_region = $config['aws_region'];
$aws_bucket = $config['aws_bucket'];
try {
if($gateway=="minio"){
$s3Client = new \Aws\S3\S3Client([
'version' => 'latest',
'region' => $aws_region,
'endpoint' => $aws_endpoint,
'use_path_style_endpoint' => true,
'credentials' => [
'key' => $aws_key,
'secret' => $aws_secret
]
]);
}else{
$s3Client = new \Aws\S3\S3Client([
'version' => 'latest',
'region' => $aws_region,
'credentials' => [
'key' => $aws_key,
'secret' => $aws_secret
]
]);
}
try {
$result = $s3Client->putObject([
'Bucket' => $aws_bucket,
'Key' => $name,
'Body' => fopen($file, 'r')
]);
unlink($file);
if($result['@metadata']['statusCode'] == 200){
return $result['@metadata']['effectiveUri'];
}else{
return null;
}
} catch (\Aws\S3\Exception\S3Exception $e) {
return null;
}
} catch (\Exception $ex) {
return null;
}
default:
return null;
}
}
public function create_backup($download=false)
{
//Demo Mode
if(env('demo.mode')??false){
if($download==true){
session()->setFlashdata('sweet', ['warning',lang("App.general_demo_mode")]);
return redirect()->to('/settings');
}else{
die();
}
}
$settings = $this->settings_model->first()??[];
if($settings['backup_automatic']){
helper('text');
$db = db_connect('default');
try {
$all = false;
$tables = explode(',',$settings['backup_table']??'');
foreach ($tables as $item){
if ($item == 'all'){
$all = true;
}
}
$token = random_string("alnum", 10);
$name ='mysql_'.$token.'_'.date("YmdHis").'.sql';
if(strtolower(PHP_OS) == 'linux'){
$file_Path = WRITEPATH.'uploads/'.$name;
}else{
$file_Path = WRITEPATH.'uploads\\'.$name;
}
if($all){
\Spatie\DbDumper\Databases\MySql::create()
->setHost(getenv('database.default.hostname'))
->setDbName(getenv('database.default.database'))
->setUserName(getenv('database.default.username'))
->setPassword(getenv('database.default.password'))
->setDumpBinaryPath(getenv('database.default.dump'))
->dumpToFile($file_Path);
}else{
\Spatie\DbDumper\Databases\MySql::create()
->setHost(getenv('database.default.hostname'))
->setDbName(getenv('database.default.database'))
->setUserName(getenv('database.default.username'))
->setPassword(getenv('database.default.password'))
->setDumpBinaryPath(getenv('database.default.dump'))
->includeTables($tables)
->dumpToFile($file_Path);
}
$file = $this->saveStorageBackup($file_Path,$name);
$db->query("INSERT INTO backup VALUES (NULL,'".$file."','',NOW(),NOW())");
if($settings['backup_notification_email']){
$send = $this->send_email($settings['backup_email'],$settings['title']." (BACKUP)",lang("App.crontab_backup_success").date("Y-m-d H:i:s"));
if(!$send){
$db->query("INSERT INTO backup VALUES (NULL,'','".lang("App.crontab_email_error")."',NOW(),NOW())");
}
}
if($download){
$this->download_backup($file,$name);
}
} catch (\Spatie\DbDumper\Exceptions\DumpFailed $e) {
$error = str_replace("'","\'",$e->getMessage());
$db->query("INSERT INTO backup VALUES (NULL,'','".$error."',NOW(),NOW())");
if($settings['backup_notification_email']){
$send = $this->send_email($settings['backup_email'],$settings['title']." (BACKUP ERROR)",'Error: '.$e->getMessage());
if(!$send){
$db->query("INSERT INTO backup VALUES (NULL,'','".lang("App.crontab_email_error")."',NOW(),NOW())");
}
}
if($download){
session()->setFlashdata('sweet', ['error',lang("App.crontab_backup_error")]);
return redirect()->to('/settings');
}
}
}
}
private function download_backup($path=null,$name=null)
{
if (!empty(session()->get('token')??'')){
set_time_limit(0);
if(!empty($path) && !empty($name) && file_exists($path)){
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename="'.$name.'"');
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($path));
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Expires: 0');
readfile($path);
}
}else{
return redirect()->to('/settings');
}
}
public function download_postman()
{
if(!empty(session()->get('token')??'')){
set_time_limit(0);
$path = WRITEPATH.'postman_collection.json';
if(file_exists($path)){
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename="WebGuard ApiRest - postman_collection.json"');
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($path));
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Expires: 0');
readfile($path);
}
}else{
return redirect()->to('/settings');
}
}
}

View File

@ -14,10 +14,10 @@ class Js_loader extends BaseController
function comparadorPresupuestoAdmin_js()
function comparadorCosidoTapaBlanda_js()
{
$this->response->setHeader('Content-Type', 'text/javascript');
return view('themes/vuexy/form/presupuestos/admin/comparador.js');
return view('themes/vuexy/form/presupuestos/cosidotapablanda/comparador.js');
}
@ -33,46 +33,53 @@ class Js_loader extends BaseController
}
function datosLibro_js()
{
$this->response->setHeader('Content-Type', 'text/javascript');
return view('themes/vuexy/form/presupuestos/cosidotapablanda/_datosLibroItems.js');
}
function previsualizador_js()
{
$this->response->setHeader('Content-Type', 'text/javascript');
return view('themes/vuexy/form/presupuestos/admin/previews.js');
return view('themes/vuexy/form/presupuestos/cosidotapablanda/previews.js');
}
function lineasPresupuesto_js()
{
$this->response->setHeader('Content-Type', 'text/javascript');
return view('themes/vuexy/form/presupuestos/admin/_lineasPresupuestoItems.js');
return view('themes/vuexy/form/presupuestos/cosidotapablanda/_lineasPresupuestoItems.js');
}
function tiradasAlternativas_js()
{
$this->response->setHeader('Content-Type', 'text/javascript');
return view('themes/vuexy/form/presupuestos/admin/_tiradasAlternativasItems.js');
return view('themes/vuexy/form/presupuestos/cosidotapablanda/_tiradasAlternativasItems.js');
}
function datosServicios_js()
{
$this->response->setHeader('Content-Type', 'text/javascript');
return view('themes/vuexy/form/presupuestos/admin/_datosServiciosItems.js');
return view('themes/vuexy/form/presupuestos/cosidotapablanda/_datosServiciosItems.js');
}
function datosEnvios_js()
{
$this->response->setHeader('Content-Type', 'text/javascript');
return view('themes/vuexy/form/presupuestos/admin/_datosEnvios.js');
return view('themes/vuexy/form/presupuestos/cosidotapablanda/_datosEnvios.js');
}
function resumenPresupuestos_js()
{
$this->response->setHeader('Content-Type', 'text/javascript');
return view('themes/vuexy/form/presupuestos/admin/_resumenPresupuestos.js');
return view('themes/vuexy/form/presupuestos/cosidotapablanda/_resumenPresupuestos.js');
}
function presupuestos_js()
{
$this->response->setHeader('Content-Type', 'text/javascript');
return view('themes/vuexy/form/presupuestos/admin/_presupuestos.js');
return view('themes/vuexy/form/presupuestos/cosidotapablanda/_presupuestos.js');
}
function presupuestoCliente_js()

View File

@ -21,37 +21,9 @@ class Language extends BaseController
public function getTranslation()
{
$translationFile = $this->request->getPost('translationFile');
$data = [];
if(is_array($translationFile)){
foreach($translationFile as $file){
$locale = $this->request->getPost('locale');
$path = "Language/{$locale}/$file.php";
$lang = require APPPATH.$path;
$data[$file] = $lang;
}
return json_encode($data);
}
else{
$locale = $this->request->getPost('locale');
$path = "Language/{$locale}/$translationFile.php";
$lang = require APPPATH.$path;
return json_encode($lang);
}
}
public function file(string $file)
{
$locale = $this->request->getLocale(); // es, en, fr…
$path = APPPATH."Language/{$locale}/{$file}.php";
if (! is_file($path)) {
return $this->response->setStatusCode(404);
}
/** @var array $lines */
$lines = require $path; // el array que devuelve tu lang-file
return $this->response->setJSON($lines); // Content-Type: application/json
$locale = $this->request->getPost('locale');
$path = "Language/{$locale}/$translationFile.php";
$lang = require APPPATH.$path;
return json_encode($lang);
}
}

Some files were not shown because too many files have changed in this diff Show More