mirror of
https://github.com/devcode-it/openstamanager.git
synced 2025-02-16 19:40:44 +01:00
Aggiunto modulo per i campi personalizzati
Miglioramento per #124. Aggiornamento della documentazione.
This commit is contained in:
parent
b0efc07621
commit
377998d7ce
46
couscous.yml
46
couscous.yml
@ -15,7 +15,7 @@ github:
|
||||
title: OpenSTAManager
|
||||
subTitle: Il software gestionale open-source per l'assistenza tecnica e la fatturazione
|
||||
fontAwesomeIcon: fa fa-cog
|
||||
footerText: 'Progettato e sviluppato da <a href="http://devcode.it/">DevCode</a>.'
|
||||
footerText: 'Progettato e sviluppato da DevCode.'
|
||||
googleAnalyticsCode: UA-42808312-1
|
||||
|
||||
scripts:
|
||||
@ -37,43 +37,49 @@ menu:
|
||||
aggiornamento:
|
||||
text: Aggiornamento
|
||||
relativeUrl: aggiornamento.html
|
||||
api:
|
||||
text: API
|
||||
relativeUrl: api.html
|
||||
contribuire:
|
||||
text: Contribuire
|
||||
relativeUrl: contributing.html
|
||||
structure:
|
||||
name: Approfondimenti
|
||||
name: Strutture
|
||||
items:
|
||||
struttura:
|
||||
text: Struttura
|
||||
relativeUrl: struttura.html
|
||||
moduli:
|
||||
text: Moduli
|
||||
relativeUrl: moduli.html
|
||||
upload:
|
||||
text: Gestione degli upload
|
||||
relativeUrl: upload.html
|
||||
widget:
|
||||
relativeUrl: structure/moduli.html
|
||||
plugin:
|
||||
text: Plugin
|
||||
relativeUrl: widget.html
|
||||
relativeUrl: structure/plugin.html
|
||||
stampe:
|
||||
text: Stampe
|
||||
relativeUrl: stampe.html
|
||||
relativeUrl: structure/stampe.html
|
||||
widget:
|
||||
text: Widget
|
||||
relativeUrl: widget.html
|
||||
custom:
|
||||
relativeUrl: structure/widget.html
|
||||
more:
|
||||
name: Approfondimenti
|
||||
items:
|
||||
nucleo:
|
||||
text: Nucleo
|
||||
relativeUrl: more/nucleo.html
|
||||
upload:
|
||||
text: Upload
|
||||
relativeUrl: more/upload.html
|
||||
extra:
|
||||
text: Extra
|
||||
relativeUrl: more/extra.html
|
||||
api:
|
||||
text: API
|
||||
relativeUrl: more/api.html
|
||||
base:
|
||||
name: Personalizzazione
|
||||
items:
|
||||
framework:
|
||||
text: Framework
|
||||
relativeUrl: framework.html
|
||||
relativeUrl: base/framework.html
|
||||
assets:
|
||||
text: Assets
|
||||
relativeUrl: assets.html
|
||||
more:
|
||||
relativeUrl: base/assets.html
|
||||
links:
|
||||
name: Link utili
|
||||
items:
|
||||
docs:
|
||||
|
@ -85,5 +85,5 @@ Per reimpostare la password di un account amministrativo è possibile procedere
|
||||
- Se esiste un altro account amministrativo, seguire la procedura precedente per gli account comuni;
|
||||
- Accedere al database ed eseguire la seguente query:
|
||||
```sql
|
||||
UPDATE `zz_utenti` SET password = MD5('nuova_password') WHERE username = 'admin';
|
||||
UPDATE `zz_users` SET `password` = MD5('nuova_password') WHERE `username` = 'admin';
|
||||
```
|
||||
|
20
docs/more/Extra.md
Normal file
20
docs/more/Extra.md
Normal file
@ -0,0 +1,20 @@
|
||||
---
|
||||
currentMenu: extra
|
||||
---
|
||||
|
||||
# Extra
|
||||
|
||||
<!-- TOC depthFrom:2 depthTo:6 orderedList:false updateOnSave:true withLinks:true -->
|
||||
|
||||
- [Campi personalizzati](#campi-personalizzati)
|
||||
|
||||
<!-- /TOC -->
|
||||
|
||||
## Campi personalizzati
|
||||
|
||||
A partire dalla versione 2.4 è possibile sfruttare dei campi personalizzati per aggiungere informazioni ai moduli principali in modo dinamico.
|
||||
|
||||
Questi campi sono gestiti a livello di database attarverso le tabelle `zz_fields` e `zz_field_record`, che si occupano riespettivamente della gestione generale dei campi e del salvataggio dei record personalizzati.
|
||||
Le procedure automatiche di gestione di questi campi sono integrate nei file `actions.php`, `editor.php` e `add.php`.
|
||||
|
||||
E' eventualmente disponibile il modulo **Campi personalizzati**, da abilitare, per la gestione dinamica di queste informazioni.
|
@ -1,21 +1,17 @@
|
||||
---
|
||||
currentMenu: struttura
|
||||
currentMenu: nucleo
|
||||
---
|
||||
|
||||
# Struttura
|
||||
|
||||
<!-- TOC depthFrom:2 depthTo:6 orderedList:false updateOnSave:true withLinks:true -->
|
||||
|
||||
- [Caratteristiche](#caratteristiche)
|
||||
- [open-source](#open-source)
|
||||
- [Modulare e personalizzabile](#modulare-e-personalizzabile)
|
||||
- [Multipiattaforma e user friendly](#multipiattaforma-e-user-friendly)
|
||||
- [Struttura](#struttura)
|
||||
- [Root](#root)
|
||||
- [add.php](#addphp)
|
||||
- [ajax_complete.php](#ajax_completephp)
|
||||
- [ajax_dataload.php](#ajax_dataloadphp)
|
||||
- [ajax_select.php](#ajax_selectphp)
|
||||
- [ajax_complete.php](#ajaxcompletephp)
|
||||
- [ajax_dataload.php](#ajaxdataloadphp)
|
||||
- [ajax_select.php](#ajaxselectphp)
|
||||
- [bug.php](#bugphp)
|
||||
- [core.php](#corephp)
|
||||
- [config.inc.php](#configincphp)
|
||||
@ -42,34 +38,13 @@ currentMenu: struttura
|
||||
- [Cartella modules](#cartella-modules)
|
||||
- [Cartella templates](#cartella-templates)
|
||||
- [Cartella update](#cartella-update)
|
||||
- [create_updates.sql](#create_updatessql)
|
||||
- [create_updates.sql](#createupdatessql)
|
||||
- [VERSIONE.sql](#versionesql)
|
||||
- [VERSIONE.php](#versionephp)
|
||||
- [Cartella vendor](#cartella-vendor)
|
||||
|
||||
<!-- /TOC -->
|
||||
|
||||
## Caratteristiche
|
||||
|
||||
### open-source
|
||||
|
||||
La natura open-source (termine inglese che significa _sorgente aperta_) del progetto evidenzia lo spirito di collaborazione e condivisione che pervade l'attività di sviluppo del gestionale, di cui gli autori rendono pubblico il codice sorgente e ne favoriscono il libero studio, permettendo a programmatori indipendenti di apportarvi modifiche ed estensioni.
|
||||
|
||||
Particolarmente espressiva in questo senso risulta essere la documentazione ufficiale del progetto:
|
||||
|
||||
> Il progetto è un software open-source perché permette agli utilizzatori di studiarne il funzionamento ed adattarlo alle proprie esigenze; inoltre, in ambito commerciale, non obbliga l'utilizzatore ad essere legato allo stesso fornitore di assistenza.
|
||||
|
||||
La licenza in utilizzo è la GNU General Public License 3.0 (GPL 3.0).
|
||||
|
||||
### Modulare e personalizzabile
|
||||
|
||||
OpenSTAManager possiede una struttura fortemente modulare, che ne permette la rapida espandibilità e, nello specifico, la realizzazione di funzionalità _ad hoc_, personalizzate nel modo più completo secondo le richieste del cliente.
|
||||
|
||||
### Multipiattaforma e user friendly
|
||||
|
||||
Il progetto risulta compatibile con numerose piattaforme, necessitando esclusivamente un browser moderno da parte dei suoi utilizzatori per sfruttare appieno le sue potenzialità.
|
||||
L'interfaccia di interazione con l'utente finale risulta inoltre estremamente semplificata e _user friendly_, oltre che _responsive_, presentando caratteristiche completamente compatibili con tutti i dispositivi mobili (in particolare, tablet e smartphone).
|
||||
|
||||
## Struttura
|
||||
|
||||
Scaricando la versione GIT del progetto dovreste trovare una struttura di base molto simile a quella seguente.
|
46
modules/custom_fields/actions.php
Normal file
46
modules/custom_fields/actions.php
Normal file
@ -0,0 +1,46 @@
|
||||
<?php
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
switch (post('op')) {
|
||||
case 'update':
|
||||
$plugin = post('plugin_id') ?: null;
|
||||
$module = $plugin ? null : post('module_id');
|
||||
|
||||
$dbo->update('zz_fields', [
|
||||
'id_module' => $module,
|
||||
'id_plugin' => $plugin,
|
||||
'name' => post('name'),
|
||||
'html_name' => post('html_name'),
|
||||
'content' => post('content'),
|
||||
'on_add' => post('on_add'),
|
||||
'top' => post('top'),
|
||||
], ['id' => $id_record]);
|
||||
|
||||
$_SESSION['infos'][] = tr('Salvataggio completato!');
|
||||
|
||||
break;
|
||||
|
||||
case 'add':
|
||||
$plugin = post('plugin_id') ?: null;
|
||||
$module = $plugin ? null : post('module_id');
|
||||
|
||||
$dbo->insert('zz_fields', [
|
||||
'id_module' => $module,
|
||||
'id_plugin' => $plugin,
|
||||
'name' => post('name'),
|
||||
'content' => post('content'),
|
||||
'html_name' => secure_random_string(8),
|
||||
]);
|
||||
$id_record = $dbo->lastInsertedID();
|
||||
|
||||
$_SESSION['infos'][] = tr('Nuovo campo personalizzato creato!');
|
||||
|
||||
break;
|
||||
|
||||
case 'delete':
|
||||
$dbo->delete('zz_fields', ['id' => $id_record]);
|
||||
$dbo->delete('zz_field_record', ['id_field' => $id_record]);
|
||||
|
||||
break;
|
||||
}
|
37
modules/custom_fields/add.php
Normal file
37
modules/custom_fields/add.php
Normal file
@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
?><form action="" method="post" id="add-form">
|
||||
<input type="hidden" name="op" value="add">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Modulo'); ?>", "name": "module_id", "values": "query=SELECT id, name as text FROM zz_modules WHERE enabled = 1" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Plugin'); ?>", "name": "plugin_id", "values": "query=SELECT id, name as text FROM zz_plugins WHERE enabled = 1" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "text", "label": "<?php echo tr('Nome'); ?>", "name": "name", "required": 1 ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "textarea", "label": "<?php echo tr('Contenuto'); ?>", "name": "content", "required": 1, "value": "$content$" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PULSANTI -->
|
||||
<div class="row">
|
||||
<div class="col-md-12 text-right">
|
||||
<button type="submit" class="btn btn-primary"><i class="fa fa-plus"></i> <?php echo tr('Aggiungi'); ?></button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
50
modules/custom_fields/edit.php
Normal file
50
modules/custom_fields/edit.php
Normal file
@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
?>
|
||||
<form action="" method="post" id="edit-form">
|
||||
<input type="hidden" name="op" value="update">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="id_record" value="<?php echo $id_record; ?>">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Modulo'); ?>", "name": "module_id", "values": "query=SELECT id, name as text FROM zz_modules WHERE enabled = 1", "value": "$id_module$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Plugin'); ?>", "name": "plugin_id", "values": "query=SELECT id, name as text FROM zz_plugins WHERE enabled = 1", "value": "$id_plugin$" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "text", "label": "<?php echo tr('Nome'); ?>", "name": "name", "required": 1, "value": "$name$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "text", "label": "<?php echo tr('Nome HTML'); ?>", "name": "html_name", "required": 1, "value": "$html_name$" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Mostra alla creazione record'); ?>", "name": "on_add","value": "$on_add$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Mostra di sopra'); ?>", "name": "top", "value": "$top$" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "textarea", "label": "<?php echo tr('Contenuto'); ?>", "name": "content", "required": 1, "value": "$content$" ]}
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<a class="btn btn-danger ask" data-backto="record-list">
|
||||
<i class="fa fa-trash"></i> <?php echo tr('Elimina'); ?>
|
||||
</a>
|
10
modules/custom_fields/init.php
Normal file
10
modules/custom_fields/init.php
Normal file
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
if (isset($id_record)) {
|
||||
$records = $dbo->fetchArray('SELECT * FROM zz_fields WHERE id='.prepare($id_record));
|
||||
}
|
||||
|
||||
|
||||
// TODO: prevedere un utilizzo pratico del campo options
|
@ -490,10 +490,19 @@ UPDATE `zz_prints` SET `enabled` = 0 WHERE `name` IN( 'Ordine di servizio', 'Ord
|
||||
UPDATE `zz_views` SET `query` = '\'Intervento\'' WHERE `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Interventi') AND `name` = '_print_';
|
||||
|
||||
-- Flag per definire i segmenti di note di accredito e di addebito
|
||||
ALTER TABLE `zz_segments` ADD `predefined_accredito` TINYINT(1) NOT NULL AFTER `predefined`, ADD `predefined_addebito` TINYINT(1) NOT NULL AFTER `predefined_accredito`;
|
||||
ALTER TABLE `zz_segments` ADD `predefined_accredito` TINYINT(1) NOT NULL AFTER `predefined`, ADD `predefined_addebito` TINYINT(1) NOT NULL AFTER `predefined_accredito`;
|
||||
|
||||
-- Fattura di vendita senza intestazione (per carta intestata)
|
||||
INSERT INTO `zz_prints` (`id`, `id_module`, `is_record`, `name`, `title`, `directory`, `previous`, `options`, `icon`, `version`, `compatibility`, `order`, `main`, `default`, `enabled`) VALUES
|
||||
(NULL, (SELECT id FROM zz_modules WHERE name='Fatture di vendita'), 1, 'Fattura di vendita (senza intestazione)', 'Fattura di vendita (senza intestazione)', 'fatture', 'iddocumento', '{"hide_header":true, "hide_footer":true}', 'fa fa-print', '', '', 0, 0, 1, 1);
|
||||
UPDATE `zz_prints` SET `main` = '1' WHERE `name` = 'Fattura di vendita';
|
||||
|
||||
-- Innesto modulo per campi personalizzati
|
||||
INSERT INTO `zz_modules` (`id`, `name`, `title`, `directory`, `options`, `options2`, `icon`, `version`, `compatibility`, `order`, `parent`, `default`, `enabled`) VALUES (NULL, 'Campi personalizzati', 'Campi personalizzati', 'custom_fields', 'SELECT |select| FROM `zz_fields` WHERE 1=1 HAVING 2=2', '', 'fa fa-list', '2.4.1', '2.4.1', '1', NULL, '1', '0');
|
||||
UPDATE `zz_modules` `t1` INNER JOIN `zz_modules` `t2` ON (`t1`.`name` = 'Campi personalizzati' AND `t2`.`name` = 'Strumenti') SET `t1`.`parent` = `t2`.`id`;
|
||||
|
||||
INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `enabled`, `summable`, `default`) VALUES
|
||||
(NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Campi personalizzati'), 'id', 'id', 0, 0, 0, 0, 0, 0, 1),
|
||||
(NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Campi personalizzati'), 'Modulo', '(SELECT name FROM zz_modules WHERE zz_modules.id = zz_fields.id_module)', 0, 1, 0, 0, 1, 0, 1),
|
||||
(NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Campi personalizzati'), 'Plugin', '(SELECT name FROM zz_plugins WHERE zz_plugins.id = zz_fields.id_plugin)', 0, 1, 0, 0, 1, 0, 1),
|
||||
(NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Campi personalizzati'), 'Nome', 'name', 0, 1, 0, 0, 1, 0, 1);
|
||||
|
Loading…
x
Reference in New Issue
Block a user