Aggiunto modulo per i campi personalizzati

Miglioramento per #124.
Aggiornamento della documentazione.
This commit is contained in:
Thomas Zilio 2018-09-04 09:24:41 +02:00
parent b0efc07621
commit 377998d7ce
17 changed files with 205 additions and 52 deletions

View File

@ -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:

View File

@ -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
View 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.

View File

@ -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.

View 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;
}

View 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>

View 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>

View 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

View File

@ -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);