mirror of
https://github.com/devcode-it/openstamanager.git
synced 2025-03-12 09:10:19 +01:00
Merge branch 'master' into 2.4
This commit is contained in:
commit
6cf8088618
67
.github/CONTRIBUTING.md
vendored
Normal file
67
.github/CONTRIBUTING.md
vendored
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
# Contribuire
|
||||||
|
|
||||||
|
Sei interessato a contribuire allo sviluppo di OpenSTAManger? Ottimo, sei il benvenuto!
|
||||||
|
|
||||||
|
Siamo entusiasti di ogni nuova contribuzione che otteniamo dalla nostra community.
|
||||||
|
Ci sono molti modi per contribuire: segnalare bug, richiedere miglioramenti, scrivere tutorial, migliorare la documentazione...
|
||||||
|
|
||||||
|
Non serve essere degli esperti programmatori per aiutarci! :smile_cat:
|
||||||
|
|
||||||
|
Leggi le seguenti sezioni per scoprire come ti consigliamo di procedere.
|
||||||
|
Se ti serve un aiuto, crea una issue su GitHub.
|
||||||
|
|
||||||
|
## Linee guida
|
||||||
|
|
||||||
|
Per migliorare il sistema con cui sviluppiamo il codice, abbiamo deciso di adottare alcune linee guida per facilitare la collaborazione tra più persone.
|
||||||
|
|
||||||
|
### Codice di condotta
|
||||||
|
|
||||||
|
Per il momento non abbiamo adottato un vero e proprio codice di condotta, ma ti chiediamo di essere il più civile possibile nel comunicare con gli altri per questo progetto.
|
||||||
|
|
||||||
|
### Stile del codice
|
||||||
|
|
||||||
|
Utilizziamo principalmente due strumenti per mantenere consistente nel tempo lo stile del codice:
|
||||||
|
- [PHP CS Fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer)
|
||||||
|
- [EditorConfig](http://editorconfig.org>)
|
||||||
|
|
||||||
|
PHP CS Fixer viene utilizzato per formattare automaticamente il codice PHP e aumentare la sua comprensibilità.
|
||||||
|
La configurazione può essere trovata nel file [.php_cs](https://github.com/devcode-it/openstamanager/blob/master/.php_cs).
|
||||||
|
|
||||||
|
EditorConfig viene sfruttato per mantenere la consistenza nella formattazione di base dei diversi altri file utilizzati nel progetto.
|
||||||
|
La configurazione può essere trovata nel file [.php_cs](https://github.com/devcode-it/openstamanager/blob/master/.editorconfig).
|
||||||
|
|
||||||
|
Maggiori informazioni sui plugin che permettono di integrare questi strumenti sono disponibili nei relativi siti.
|
||||||
|
|
||||||
|
## Prima contribuzione
|
||||||
|
|
||||||
|
Sei insicuro su cosa potresti lavorare per contribuire al progetto?
|
||||||
|
|
||||||
|
Prova a dare un'occhiata alle issue sotto la label [nuovi contributori](https://github.com/devcode-it/openstamanager/labels/nuovi%20contributori), dove sono indicate le migliorie più semplici da applicare.
|
||||||
|
|
||||||
|
## Problemi di sicurezza
|
||||||
|
|
||||||
|
Se trovi un problema di sicurezza, NON aprire una issue. Inviaci un'email all'indirizzo `info at openstamanager dot com`.
|
||||||
|
|
||||||
|
Per capire se hai individuato un problema di sicurezza, prova a farti queste domande:
|
||||||
|
|
||||||
|
* Posso accedere a qualcosa a cui non dovrei avere accesso?
|
||||||
|
* Posso disabilitare qualcosa per altre persone?
|
||||||
|
|
||||||
|
Se la risposta a una di queste domande è positiva, allora probabilmente hai individuato un problema di sicurezza.
|
||||||
|
Considera però che anche in caso negativo potrebbe trattarsi di un problema di questo tipo, quindi se sei insicuro contattaci comunque via email.
|
||||||
|
|
||||||
|
## Segnalare un bug
|
||||||
|
|
||||||
|
Se hai individuato un bug e desideri segnalarlo, apri una nuova issue provando a mantenerti sulla base del [file di template su GitHub](https://github.com/devcode-it/openstamanager/blob/master/.github/ISSUE_TEMPLATE.md).
|
||||||
|
|
||||||
|
Se vuoi suggerire una miglioramento di qualche tipo oppure una nuova funzionalità, sentiti libero di aprire una issue apposita dove spieghi dettagliatamente la modifica che vorresti, la sua utilità e il suo funzionamento generale
|
||||||
|
|
||||||
|
## Pull Request
|
||||||
|
|
||||||
|
Se sei in grado di risolvere uno dei bug segnalati oppure vuoi completare una nuova funzionalità, apri una nuova Pull Request provando a mantenerti sulla base del [file di template su GitHub](https://github.com/devcode-it/openstamanager/blob/master/.github/PULL_REQUEST_TEMPLATE.md).
|
||||||
|
|
||||||
|
## Community
|
||||||
|
|
||||||
|
Siamo presenti su [Facebook](https://www.facebook.com/openstamanager), e il nostro forum ufficiale è disponibile all'indirizzo <http://www.openstamanager.com/forum/>.
|
||||||
|
|
||||||
|
Cerchiamo di essere disponibili quanto possibile, ma non sempre riusciamo a rispondere tempestivamente.
|
38
.github/ISSUE_TEMPLATE.md
vendored
Normal file
38
.github/ISSUE_TEMPLATE.md
vendored
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
## Comportamento richiesto
|
||||||
|
|
||||||
|
Descrivi il comportamento che ti aspetti dal progetto.
|
||||||
|
|
||||||
|
## Comportamento attuale
|
||||||
|
|
||||||
|
Qual è il comportamento attuale, e come ti aspetti che venga migliorato?
|
||||||
|
|
||||||
|
## Possibile soluzione
|
||||||
|
|
||||||
|
[Non obbligatorio] Hai suggerimenti su come risolvere il bug o individuarne le cause?
|
||||||
|
|
||||||
|
## Passi per riprodurre il comportamento
|
||||||
|
|
||||||
|
[Per i bug] Descrivi dettagliatamente i singoli passi per riprodurre il malfunzionamento.
|
||||||
|
|
||||||
|
1.
|
||||||
|
2.
|
||||||
|
3.
|
||||||
|
|
||||||
|
Eventuale codice rilevante:
|
||||||
|
```php
|
||||||
|
Se serve, aggiungi qui il codice che vuoi farci testare
|
||||||
|
```
|
||||||
|
|
||||||
|
Eventuali log relativi (cartella **logs/**):
|
||||||
|
```
|
||||||
|
Se presenti, aggiungi qui i log relativi al malfunzionamento
|
||||||
|
```
|
||||||
|
|
||||||
|
## Contesto
|
||||||
|
|
||||||
|
Inserisci le informazioni riguardanti il tuo ambiente di esecuzione. Può essere utile per individuare problemi riproducibili solo con condizioni specifiche.
|
||||||
|
|
||||||
|
* Modulo:
|
||||||
|
* Versione del progetto:
|
||||||
|
* Versione PHP:
|
||||||
|
* Tipo di server:
|
22
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
22
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
## Descrizione
|
||||||
|
|
||||||
|
Includi un sommario dei cambiamenti introdotti, con il relativo contesto.
|
||||||
|
Elenca anche le eventuali dipendenze aggiuntive richieste per questa modifica.
|
||||||
|
|
||||||
|
Risolve: #(issue)
|
||||||
|
|
||||||
|
## Tipologia
|
||||||
|
|
||||||
|
Rimuovi le opzioni non rilevanti.
|
||||||
|
|
||||||
|
- [ ] Bug fix (cambiamenti minori che risolvono una issue)
|
||||||
|
- [ ] Nuova funzionalità (cambiamenti minori che aggiungono una nuova funzionalità)
|
||||||
|
- [ ] Cambiamento maggiore (fix o funzionalità che richiede una revisione prima di essere pubblicata)
|
||||||
|
- [ ] Questo cambiamenti richiede un aggiornamento della documentazione
|
||||||
|
|
||||||
|
# Checklist
|
||||||
|
|
||||||
|
- [ ] Il codice segue le linee guida del progetto
|
||||||
|
- [ ] Ho commentato il codice, in particolare nelle parti più complesse
|
||||||
|
- [ ] Ho aggiornato di conseguenza la documentazione (se presente)
|
||||||
|
- [ ] Il codice non genera warnings
|
1
.php_cs
1
.php_cs
@ -14,6 +14,7 @@ $config = PhpCsFixer\Config::create()
|
|||||||
->setRules([
|
->setRules([
|
||||||
'@Symfony' => true,
|
'@Symfony' => true,
|
||||||
'array_syntax' => ['syntax' => 'short'],
|
'array_syntax' => ['syntax' => 'short'],
|
||||||
|
'yoda_style' => false,
|
||||||
])
|
])
|
||||||
->setFinder($finder);
|
->setFinder($finder);
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
Tutti i maggiori cambiamenti di questo progetto saranno documentati in questo file. Per informazioni più dettagliate, consultare il log GIT della repository su Github.
|
Tutti i maggiori cambiamenti di questo progetto saranno documentati in questo file. Per informazioni più dettagliate, consultare il log GIT della repository su GitHub.
|
||||||
|
|
||||||
Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://keepachangelog.com/), e il progetto segue il [Semantic Versioning](http://semver.org/) per definire le versioni delle release.
|
Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://keepachangelog.com/), e il progetto segue il [Semantic Versioning](http://semver.org/) per definire le versioni delle release.
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ La documentazione ufficiale è disponibile all'indirizzo <https://devcode-it.git
|
|||||||
- [Requisiti](#requisiti)
|
- [Requisiti](#requisiti)
|
||||||
- [Installazione](#installazione)
|
- [Installazione](#installazione)
|
||||||
- [Versioni](#versioni)
|
- [Versioni](#versioni)
|
||||||
- [Github](#github)
|
- [GitHub](#github)
|
||||||
- [Perché software open source](#perch%C3%A9-software-open-source)
|
- [Perché software open source](#perch%C3%A9-software-open-source)
|
||||||
- [Community](#community)
|
- [Community](#community)
|
||||||
- [Contribuire](#contribuire)
|
- [Contribuire](#contribuire)
|
||||||
@ -83,14 +83,14 @@ Per procedere all'installazione è necessario seguire i seguenti punti:
|
|||||||
### Versioni
|
### Versioni
|
||||||
|
|
||||||
Per mantenere un elevato grado di trasparenza riguardo al ciclo delle release, seguiamo le linee guida [Semantic Versioning (SemVer)](http://semver.org/) per definire le versioni del progetto.
|
Per mantenere un elevato grado di trasparenza riguardo al ciclo delle release, seguiamo le linee guida [Semantic Versioning (SemVer)](http://semver.org/) per definire le versioni del progetto.
|
||||||
Per vedere tutte le versioni disponibili al download, visitare la [pagina relativa](https://github.com/devcode-it/openstamanager/releases) su Github (per versioni precedenti alla 2.3, visitare [SourceForge](https://sourceforge.net/projects/openstamanager/files)).
|
Per vedere tutte le versioni disponibili al download, visitare la [pagina relativa](https://github.com/devcode-it/openstamanager/releases) su GitHub (per versioni precedenti alla 2.3, visitare [SourceForge](https://sourceforge.net/projects/openstamanager/files)).
|
||||||
|
|
||||||
Nel caso utilizziate il programma per uso commerciale, si consiglia di scaricare le release disponibili nel sito ufficiale del progetto (<http://www.openstamanager.com>), evitando di utilizzare direttamente il codice della repository.
|
Nel caso utilizziate il programma per uso commerciale, si consiglia di scaricare le release disponibili nel sito ufficiale del progetto (<http://www.openstamanager.com>), evitando di utilizzare direttamente il codice della repository.
|
||||||
Se siete inoltre interessati a supporto e assistenza professionali, li potete richiedere nella [sezione dedicata](http://www.openstamanager.com/per-le-aziende/).
|
Se siete inoltre interessati a supporto e assistenza professionali, li potete richiedere nella [sezione dedicata](http://www.openstamanager.com/per-le-aziende/).
|
||||||
|
|
||||||
### Github
|
### GitHub
|
||||||
|
|
||||||
Nel caso si stia utilizzando la versione direttamente ottenuta dalla repository di Github, è necessario eseguire i seguenti comandi da linea di comando per completare le dipendenze PHP (tramite [Composer](https://getcomposer.org)) e gli assets (tramite [Yarn](https://yarnpkg.com)) del progetto.
|
Nel caso si stia utilizzando la versione direttamente ottenuta dalla repository di GitHub, è necessario eseguire i seguenti comandi da linea di comando per completare le dipendenze PHP (tramite [Composer](https://getcomposer.org)) e gli assets (tramite [Yarn](https://yarnpkg.com)) del progetto.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
php composer.phar install
|
php composer.phar install
|
||||||
|
@ -126,7 +126,7 @@ if (!empty($module_query) && $module_query != 'menu' && $module_query != 'custom
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Allineamento al centro se il valore della prima riga risulta relativo a date o icone
|
// Allineamento al centro se il valore della prima riga risulta relativo a date o icone
|
||||||
elseif (Translator::getFormatter()->isStandardDate($value) || preg_match('/^icontr(.+?)$/', $field)) {
|
elseif (Translator::getFormatter()->isStandardDate($value) || preg_match('/^icon_(.+?)$/', $field)) {
|
||||||
$align[$field] = 'text-center';
|
$align[$field] = 'text-center';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -162,7 +162,7 @@ if (!empty($module_query) && $module_query != 'menu' && $module_query != 'custom
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Icona
|
// Icona
|
||||||
if (preg_match('/^colortr(.+?)$/', $field, $m)) {
|
if (preg_match('/^color_(.+?)$/', $field, $m)) {
|
||||||
$value = $r['color_title_'.$m[1]] ?: '';
|
$value = $r['color_title_'.$m[1]] ?: '';
|
||||||
|
|
||||||
$column['class'] = 'text-center small';
|
$column['class'] = 'text-center small';
|
||||||
|
@ -4,7 +4,81 @@ currentMenu: contribuire
|
|||||||
|
|
||||||
# Contribuire
|
# Contribuire
|
||||||
|
|
||||||
|
Sei interessato a contribuire allo sviluppo di OpenSTAManger? Ottimo, sei il benvenuto!
|
||||||
|
|
||||||
|
Siamo entusiasti di ogni nuova contribuzione che otteniamo dalla nostra community.
|
||||||
|
Ci sono molti modi per contribuire: segnalare bug, richiedere miglioramenti, scrivere tutorial, migliorare la documentazione...
|
||||||
|
|
||||||
|
Non serve essere degli esperti programmatori per aiutarci! :smile_cat:
|
||||||
|
|
||||||
|
Leggi le seguenti sezioni per scoprire come ti consigliamo di procedere.
|
||||||
|
Se ti serve un aiuto, crea una issue su GitHub.
|
||||||
|
|
||||||
<!-- TOC depthFrom:2 depthTo:6 orderedList:false updateOnSave:true withLinks:true -->
|
<!-- TOC depthFrom:2 depthTo:6 orderedList:false updateOnSave:true withLinks:true -->
|
||||||
|
|
||||||
|
- [Linee guida](#linee-guida)
|
||||||
|
- [Codice di condotta](#codice-di-condotta)
|
||||||
|
- [Stile del codice](#stile-del-codice)
|
||||||
|
- [Prima contribuzione](#prima-contribuzione)
|
||||||
|
- [Problemi di sicurezza](#problemi-di-sicurezza)
|
||||||
|
- [Segnalare un bug](#segnalare-un-bug)
|
||||||
|
- [Pull Request](#pull-request)
|
||||||
|
- [Community](#community)
|
||||||
|
|
||||||
<!-- /TOC -->
|
<!-- /TOC -->
|
||||||
|
|
||||||
|
## Linee guida
|
||||||
|
|
||||||
|
Per migliorare il sistema con cui sviluppiamo il codice, abbiamo deciso di adottare alcune linee guida per facilitare la collaborazione tra più persone.
|
||||||
|
|
||||||
|
### Codice di condotta
|
||||||
|
|
||||||
|
Per il momento non abbiamo adottato un vero e proprio codice di condotta, ma ti chiediamo di essere il più civile possibile nel comunicare con gli altri per questo progetto.
|
||||||
|
|
||||||
|
### Stile del codice
|
||||||
|
|
||||||
|
Utilizziamo principalmente due strumenti per mantenere consistente nel tempo lo stile del codice:
|
||||||
|
- [PHP CS Fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer)
|
||||||
|
- [EditorConfig](http://editorconfig.org>)
|
||||||
|
|
||||||
|
PHP CS Fixer viene utilizzato per formattare automaticamente il codice PHP e aumentare la sua comprensibilità.
|
||||||
|
La configurazione può essere trovata nel file [.php_cs](https://github.com/devcode-it/openstamanager/blob/master/.php_cs).
|
||||||
|
|
||||||
|
EditorConfig viene sfruttato per mantenere la consistenza nella formattazione di base dei diversi altri file utilizzati nel progetto.
|
||||||
|
La configurazione può essere trovata nel file [.php_cs](https://github.com/devcode-it/openstamanager/blob/master/.editorconfig).
|
||||||
|
|
||||||
|
Maggiori informazioni sui plugin che permettono di integrare questi strumenti sono disponibili nei relativi siti.
|
||||||
|
|
||||||
|
## Prima contribuzione
|
||||||
|
|
||||||
|
Sei insicuro su cosa potresti lavorare per contribuire al progetto?
|
||||||
|
|
||||||
|
Prova a dare un'occhiata alle issue sotto la label [nuovi contributori](https://github.com/devcode-it/openstamanager/labels/nuovi%20contributori), dove sono indicate le migliorie più semplici da applicare.
|
||||||
|
|
||||||
|
## Problemi di sicurezza
|
||||||
|
|
||||||
|
Se trovi un problema di sicurezza, NON aprire una issue. Inviaci un'email all'indirizzo `info at openstamanager dot com`.
|
||||||
|
|
||||||
|
Per capire se hai individuato un problema di sicurezza, prova a farti queste domande:
|
||||||
|
|
||||||
|
* Posso accedere a qualcosa a cui non dovrei avere accesso?
|
||||||
|
* Posso disabilitare qualcosa per altre persone?
|
||||||
|
|
||||||
|
Se la risposta a una di queste domande è positiva, allora probabilmente hai individuato un problema di sicurezza.
|
||||||
|
Considera però che anche in caso negativo potrebbe trattarsi di un problema di questo tipo, quindi se sei insicuro contattaci comunque via email.
|
||||||
|
|
||||||
|
## Segnalare un bug
|
||||||
|
|
||||||
|
Se hai individuato un bug e desideri segnalarlo, apri una nuova issue provando a mantenerti sulla base del [file di template su GitHub](https://github.com/devcode-it/openstamanager/blob/master/.github/ISSUE_TEMPLATE.md).
|
||||||
|
|
||||||
|
Se vuoi suggerire una miglioramento di qualche tipo oppure una nuova funzionalità, sentiti libero di aprire una issue apposita dove spieghi dettagliatamente la modifica che vorresti, la sua utilità e il suo funzionamento generale
|
||||||
|
|
||||||
|
## Pull Request
|
||||||
|
|
||||||
|
Se sei in grado di risolvere uno dei bug segnalati oppure vuoi completare una nuova funzionalità, apri una nuova Pull Request provando a mantenerti sulla base del [file di template su GitHub](https://github.com/devcode-it/openstamanager/blob/master/.github/PULL_REQUEST_TEMPLATE.md).
|
||||||
|
|
||||||
|
## Community
|
||||||
|
|
||||||
|
Siamo presenti su [Facebook](https://www.facebook.com/openstamanager), e il nostro forum ufficiale è disponibile all'indirizzo <http://www.openstamanager.com/forum/>.
|
||||||
|
|
||||||
|
Cerchiamo di essere disponibili quanto possibile, ma non sempre riusciamo a rispondere tempestivamente.
|
||||||
|
@ -70,4 +70,4 @@ Per ulteriori informazioni, consultare la [documentazione ufficiale di Composer]
|
|||||||
- symfony/finder
|
- symfony/finder
|
||||||
- symfony/translation
|
- symfony/translation
|
||||||
|
|
||||||
_I nomi sono indicati secondo la notazione tipica dei progetti pubblici su Github._
|
_I nomi sono indicati secondo la notazione tipica dei progetti pubblici su GitHub._
|
||||||
|
@ -7,7 +7,7 @@ currentMenu: installazione
|
|||||||
- [Requisiti](#requisiti)
|
- [Requisiti](#requisiti)
|
||||||
- [Installazione](#installazione)
|
- [Installazione](#installazione)
|
||||||
- [Versioni](#versioni)
|
- [Versioni](#versioni)
|
||||||
- [Github](#github)
|
- [GitHub](#github)
|
||||||
- [Strumenti utili](#strumenti-utili)
|
- [Strumenti utili](#strumenti-utili)
|
||||||
- [Windows](#windows)
|
- [Windows](#windows)
|
||||||
- [Linux](#linux)
|
- [Linux](#linux)
|
||||||
@ -47,14 +47,14 @@ Per procedere all'installazione è necessario seguire i seguenti punti:
|
|||||||
### Versioni
|
### Versioni
|
||||||
|
|
||||||
Per mantenere un elevato grado di trasparenza riguardo al ciclo delle release, seguiamo le linee guida [Semantic Versioning (SemVer)](http://semver.org/) per definire le versioni del progetto.
|
Per mantenere un elevato grado di trasparenza riguardo al ciclo delle release, seguiamo le linee guida [Semantic Versioning (SemVer)](http://semver.org/) per definire le versioni del progetto.
|
||||||
Per vedere tutte le versioni disponibili al download, visitare la [pagina relativa](https://github.com/devcode-it/openstamanager/releases) su Github (per versioni precedenti alla 2.3, visitare [SourceForge](https://sourceforge.net/projects/openstamanager/files)).
|
Per vedere tutte le versioni disponibili al download, visitare la [pagina relativa](https://github.com/devcode-it/openstamanager/releases) su GitHub (per versioni precedenti alla 2.3, visitare [SourceForge](https://sourceforge.net/projects/openstamanager/files)).
|
||||||
|
|
||||||
Nel caso utilizziate il programma per uso commerciale, si consiglia di scaricare le release disponibili nel sito ufficiale del progetto (<http://www.openstamanager.com>), evitando di utilizzare direttamente il codice della repository.
|
Nel caso utilizziate il programma per uso commerciale, si consiglia di scaricare le release disponibili nel sito ufficiale del progetto (<http://www.openstamanager.com>), evitando di utilizzare direttamente il codice della repository.
|
||||||
Se siete inoltre interessati a supporto e assistenza professionali, li potete richiedere nella [sezione dedicata](http://www.openstamanager.com/per-le-aziende/).
|
Se siete inoltre interessati a supporto e assistenza professionali, li potete richiedere nella [sezione dedicata](http://www.openstamanager.com/per-le-aziende/).
|
||||||
|
|
||||||
### Github
|
### GitHub
|
||||||
|
|
||||||
Nel caso si stia utilizzando la versione direttamente ottenuta dalla repository di Github, è necessario eseguire i seguenti comandi da linea di comando per completare le dipendenze PHP (tramite [Composer](https://getcomposer.org)) e gli assets (tramite [Yarn](https://yarnpkg.com)) del progetto.
|
Nel caso si stia utilizzando la versione direttamente ottenuta dalla repository di GitHub, è necessario eseguire i seguenti comandi da linea di comando per completare le dipendenze PHP (tramite [Composer](https://getcomposer.org)) e gli assets (tramite [Yarn](https://yarnpkg.com)) del progetto.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
php composer.phar install
|
php composer.phar install
|
||||||
|
@ -73,7 +73,7 @@ if (empty($records)) {
|
|||||||
<a class="back-btn" href="controller.php?id_module='.$id_module.'"><i class="fa fa-chevron-left"></i> '.tr("Torna all'elenco").'</a>
|
<a class="back-btn" href="controller.php?id_module='.$id_module.'"><i class="fa fa-chevron-left"></i> '.tr("Torna all'elenco").'</a>
|
||||||
</li>';
|
</li>';
|
||||||
|
|
||||||
$plugins = $dbo->fetchArray('SELECT id, title FROM zz_plugins WHERE idmodule_to='.prepare($id_module)." AND position='tab' AND enabled = 1");
|
$plugins = $dbo->fetchArray('SELECT id, title FROM zz_plugins WHERE idmodule_to='.prepare($id_module)." AND position='tab' AND enabled = 1 ORDER BY zz_plugins.order DESC");
|
||||||
|
|
||||||
foreach ($plugins as $plugin) {
|
foreach ($plugins as $plugin) {
|
||||||
echo '
|
echo '
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
# Disable PHP rendering
|
# Disable PHP rendering
|
||||||
php_flag engine off
|
<IfModule mod_php5.c>
|
||||||
|
php_flag engine off
|
||||||
## Options -ExecCGI
|
</IfModule>
|
||||||
AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi
|
<IfModule mod_php7.c>
|
||||||
|
php_flag engine off
|
||||||
|
</IfModule>
|
||||||
|
@ -156,7 +156,7 @@ switch (post('op')) {
|
|||||||
|
|
||||||
// Lettura iva dell'articolo
|
// Lettura iva dell'articolo
|
||||||
$rs2 = $dbo->fetchArray('SELECT percentuale, descrizione, indetraibile FROM co_iva WHERE id='.prepare($idiva));
|
$rs2 = $dbo->fetchArray('SELECT percentuale, descrizione, indetraibile FROM co_iva WHERE id='.prepare($idiva));
|
||||||
$iva = ($prezzo - $sconto) / 100 * $rs2[0]['percentuale'];
|
$iva = ($prezzo*$qta - $sconto) / 100 * $rs2[0]['percentuale'];
|
||||||
$iva_indetraibile = $iva / 100 * $rs2[0]['indetraibile'];
|
$iva_indetraibile = $iva / 100 * $rs2[0]['indetraibile'];
|
||||||
$desc_iva = $rs2[0]['descrizione'];
|
$desc_iva = $rs2[0]['descrizione'];
|
||||||
|
|
||||||
|
134
modules/contratti/plugins/addpianficazione.php
Normal file
134
modules/contratti/plugins/addpianficazione.php
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
include_once __DIR__.'/../../../core.php';
|
||||||
|
|
||||||
|
|
||||||
|
#<form action="plugin_editor.php?id_plugin=$id_plugin$&id_module=$id_module$&id_parent=$id_parent$" method="post" role="form">
|
||||||
|
|
||||||
|
$idcontratto_riga = $get['idcontratto_riga'];
|
||||||
|
$qp = 'SELECT *, (SELECT data_conclusione FROM co_contratti WHERE id = '.$id_record.' ) AS data_conclusione, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_righe_contratti.idtipointervento) AS tipointervento FROM co_righe_contratti WHERE id = '.$idcontratto_riga;
|
||||||
|
$rsp = $dbo->fetchArray($qp);
|
||||||
|
|
||||||
|
$data_richiesta = readDate($rsp[0]['data_richiesta']);
|
||||||
|
|
||||||
|
$orario_inizio = '09:00';
|
||||||
|
$orario_fine = '17:00';
|
||||||
|
|
||||||
|
echo '
|
||||||
|
<form id="add_form" action="'.$rootdir.'/editor.php?id_module='.Modules::get('Contratti')['id']."&id_record=".$id_record."&idcontratto_riga=".$idcontratto_riga.'" method="post">
|
||||||
|
<input type="hidden" name="backto" value="record-edit">
|
||||||
|
<input type="hidden" name="op" value="pianificazione">
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="col-xs-12 col-md-7">
|
||||||
|
{[ "type": "select", "label": "'.tr('Tipo intervento').'", "name": "idtipointervento", "values": "query=SELECT idtipointervento AS id, descrizione FROM in_tipiintervento ORDER BY descrizione ASC", "value": "'.$rsp[0]['idtipointervento'].'", "extra": "disabled" ]}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="col-xs-12 col-md-5">
|
||||||
|
{[ "type": "number", "label": "'.tr('Intervallo').'", "name": "intervallo", "class": "", "decimals": 0, "required": 1, "icon-after": "GG", "min-value": "1" ]}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="col-xs-12 col-md-12">
|
||||||
|
{[ "type": "textarea", "label": "'.tr('Descrizione').'", "placeholder": "'.tr('Descrizione').'", "name": "richiesta", "extra": "readonly", "value": "'.$rsp[0]['richiesta'].'" ]}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!--div class="col-xs-12 col-md-8">
|
||||||
|
{[ "type": "checkbox", "label": "'.tr('Pianifica anche date passate').'", "name": "date_passate", "value": "0", "help": "", "placeholder": "'.tr('Pianificare promemoria anche con date precedenti ad oggi: ').date("d/m/Y").'" ]}
|
||||||
|
</div-->
|
||||||
|
|
||||||
|
';
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div class="col-xs-12 col-md-7">
|
||||||
|
{[ "type": "select", "label": "<?php echo tr('Inizio pianificazione') ?>", "name": "parti_da_oggi", "values": "list= \"0\":\"<?php echo tr('Pianificare dal ').$data_richiesta ?>\", \"1\":\"<?php echo tr('Pianificare a partire da oggi ').date('d/m/Y') ?>\"", "value": "" ]}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
echo '
|
||||||
|
|
||||||
|
|
||||||
|
<div class="col-xs-12 col-md-5">
|
||||||
|
{[ "type": "date", "label": "'.tr('Fine pianificazione <small>(Data conclusione contratto)</small>').'", "name": "data_conclusione", "extra": "readonly", "value": "'.$rsp[0]['data_conclusione'].'" ]}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="col-xs-12 col-md-4">
|
||||||
|
{[ "type": "checkbox", "label": "'.tr('Pianifica intervento').'", "name": "pianifica_intervento", "value": "0", "help": "", "placeholder": "'.tr('Pianificare anche gli interventi ').'" ]}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-xs-12 col-md-4">
|
||||||
|
{[ "type": "select", "label": "'.tr('Tecnici').'", "multiple": "1", "name": "idtecnico[]", "required": 0, "ajax-source": "tecnici", "value": "", "extra": "disabled" ]}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="col-xs-6 col-md-2">
|
||||||
|
{[ "type": "time", "label": "'.tr('Orario inizio').'", "name": "orario_inizio", "required": 0, "value": "'.$orario_inizio.'", "extra": "disabled" ]}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-xs-6 col-md-2">
|
||||||
|
{[ "type": "time", "label": "'.tr('Orario fine').'", "name": "orario_fine", "required": 0, "value": "'.$orario_fine.'", "extra": "disabled" ]}
|
||||||
|
</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> '.tr('Pianifica').'</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</form>';
|
||||||
|
|
||||||
|
echo '
|
||||||
|
<script src="'.$rootdir.'/lib/init.js"></script>';
|
||||||
|
|
||||||
|
echo '
|
||||||
|
<script>
|
||||||
|
$( document ).ready(function() {
|
||||||
|
|
||||||
|
$( "#pianifica_intervento" ).click(function() {
|
||||||
|
|
||||||
|
if ($(this).is(":checked")){
|
||||||
|
$("#idtecnico").removeAttr("disabled");
|
||||||
|
$("#orario_inizio").removeAttr("disabled");
|
||||||
|
$("#orario_fine").removeAttr("disabled");
|
||||||
|
}else{
|
||||||
|
$("#idtecnico").prop("disabled", true);
|
||||||
|
$("#orario_inizio").prop("disabled", true);
|
||||||
|
$("#orario_fine").prop("disabled", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
</script>';
|
@ -31,6 +31,170 @@ switch (filter('op')) {
|
|||||||
redirect($rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'#tab_'.$id_plugin);
|
redirect($rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'#tab_'.$id_plugin);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//pianificazione
|
||||||
|
case 'pianificazione':
|
||||||
|
|
||||||
|
$idcontratto_riga = filter('idcontratto_riga');
|
||||||
|
$intervallo = filter('intervallo');
|
||||||
|
$parti_da_oggi = post('parti_da_oggi');
|
||||||
|
|
||||||
|
if (!empty($idcontratto_riga) and !empty($intervallo) ){
|
||||||
|
|
||||||
|
$qp = 'SELECT *, (SELECT idanagrafica FROM co_contratti WHERE id = '.$id_record.' ) AS idanagrafica, (SELECT data_conclusione FROM co_contratti WHERE id = '.$id_record.' ) AS data_conclusione, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_righe_contratti.idtipointervento) AS tipointervento FROM co_righe_contratti WHERE id = '.$idcontratto_riga;
|
||||||
|
$rsp = $dbo->fetchArray($qp);
|
||||||
|
|
||||||
|
$idtipointervento = $rsp[0]['idtipointervento'];
|
||||||
|
$idsede = $rsp[0]['idsede'];
|
||||||
|
$richiesta = $rsp[0]['richiesta'];
|
||||||
|
|
||||||
|
//mi serve per la pianificazione interventi
|
||||||
|
$idanagrafica = $rsp[0]['idanagrafica'];
|
||||||
|
|
||||||
|
$data_conclusione = $rsp[0]['data_conclusione'];
|
||||||
|
$data_richiesta = $rsp[0]['data_richiesta'];
|
||||||
|
|
||||||
|
|
||||||
|
//se voglio pianificare anche le date precedenti ad oggi (parto da questo promemoria)
|
||||||
|
if ($parti_da_oggi){
|
||||||
|
|
||||||
|
//oggi
|
||||||
|
$min_date = date('Y-m-d');
|
||||||
|
|
||||||
|
|
||||||
|
}else{
|
||||||
|
|
||||||
|
$min_date = date('Y-m-d', strtotime($data_richiesta));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//inizio controllo data_conclusione, data valida e maggiore della $min_date
|
||||||
|
if ( (date('Y', strtotime($data_conclusione)) > 1970) and (date('Y-m-d', strtotime($min_date)) < date('Y-m-d', strtotime($data_conclusione))) ) {
|
||||||
|
|
||||||
|
//Ciclo partendo dalla data_richiesta fino all data conclusione del contratto
|
||||||
|
while ( date('Y-m-d', strtotime($data_richiesta)) < date('Y-m-d', strtotime($data_conclusione)) ){
|
||||||
|
|
||||||
|
//calcolo nuova data richiesta
|
||||||
|
$data_richiesta = date('Y-m-d', strtotime($data_richiesta. " + ".intval($intervallo)." days") );
|
||||||
|
|
||||||
|
|
||||||
|
//controllo nuova data richiesta --> solo date maggiori o uguali di [oggi o data richiesta iniziale] ma che non superano la data di fine del contratto
|
||||||
|
if ( (date('Y-m-d', strtotime($data_richiesta)) >= $min_date ) and (date('Y-m-d', strtotime($data_richiesta)) <= date('Y-m-d', strtotime($data_conclusione))) ){
|
||||||
|
|
||||||
|
//Controllo che non esista già un promemoria idcontratto, idtipointervento e data_richiesta.
|
||||||
|
if ( count($dbo->fetchArray("SELECT id FROM co_righe_contratti WHERE data_richiesta = '".$data_richiesta."' AND idtipointervento = '".$idtipointervento."' AND idcontratto = '".$id_record."' ")) == 0 ){
|
||||||
|
|
||||||
|
$query = 'INSERT INTO `co_righe_contratti`(`idcontratto`, `idtipointervento`, `data_richiesta`, `richiesta`, `idsede`) VALUES('.prepare($id_record).', '.prepare($idtipointervento).', '.prepare($data_richiesta).', '.prepare($richiesta).', '.prepare($idsede).')';
|
||||||
|
|
||||||
|
if ($dbo->query($query)) {
|
||||||
|
|
||||||
|
$idriga = $dbo->lastInsertedID();
|
||||||
|
|
||||||
|
$_SESSION['infos'][] = tr('Promemoria intervento pianificato!');
|
||||||
|
|
||||||
|
|
||||||
|
//pianificare anche l' intervento?
|
||||||
|
if ($post['pianifica_intervento']){
|
||||||
|
|
||||||
|
/*$orario_inizio = post('orario_inizio');
|
||||||
|
$orario_fine = post('orario_fine');*/
|
||||||
|
|
||||||
|
//$idanagrafica = 2;
|
||||||
|
|
||||||
|
//intervento sempre nello stato "In programmazione"
|
||||||
|
$idstatointervento = 'WIP';
|
||||||
|
|
||||||
|
//calcolo codice intervento
|
||||||
|
$formato = get_var('Formato codice intervento');
|
||||||
|
$template = str_replace('#', '%', $formato);
|
||||||
|
|
||||||
|
$rs = $dbo->fetchArray('SELECT codice FROM in_interventi WHERE codice=(SELECT MAX(CAST(codice AS SIGNED)) FROM in_interventi) AND codice LIKE '.prepare($template).' ORDER BY codice DESC LIMIT 0,1');
|
||||||
|
$codice = get_next_code($rs[0]['codice'], 1, $formato);
|
||||||
|
|
||||||
|
if (empty($codice)) {
|
||||||
|
$rs = $dbo->fetchArray('SELECT codice FROM in_interventi WHERE codice LIKE '.prepare($template).' ORDER BY codice DESC LIMIT 0,1');
|
||||||
|
|
||||||
|
$codice = get_next_code($rs[0]['codice'], 1, $formato);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Creo intervento
|
||||||
|
$dbo->insert('in_interventi', [
|
||||||
|
'idanagrafica' => $idanagrafica,
|
||||||
|
'idclientefinale' => post('idclientefinale') ?: 0,
|
||||||
|
'idstatointervento' => $idstatointervento,
|
||||||
|
'idtipointervento' => $idtipointervento,
|
||||||
|
'idsede' => $idsede ?: 0,
|
||||||
|
'idautomezzo' => $idautomezzo ?: 0,
|
||||||
|
|
||||||
|
'codice' => $codice,
|
||||||
|
'data_richiesta' => $data_richiesta,
|
||||||
|
'richiesta' => $richiesta,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$idintervento = $dbo->lastInsertedID();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$idtecnici = post('idtecnico');
|
||||||
|
|
||||||
|
//aggiungo i tecnici
|
||||||
|
foreach ($idtecnici as $idtecnico) {
|
||||||
|
add_tecnico($idintervento, $idtecnico, $data_richiesta.' '.post('orario_inizio'), $data_richiesta.' '.post('orario_fine'), $id_record);
|
||||||
|
}
|
||||||
|
|
||||||
|
//collego l'intervento ai promemoria
|
||||||
|
$dbo->query('UPDATE co_righe_contratti SET idintervento='.prepare($idintervento).' WHERE id='.prepare($idriga));
|
||||||
|
|
||||||
|
// $_SESSION['infos'][] = tr('Intervento '.$codice.' pianificato correttamente.');
|
||||||
|
|
||||||
|
$_SESSION['infos'][] = tr('Interventi pianificati correttamente.');
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
//fine if pianificazione intervento
|
||||||
|
|
||||||
|
|
||||||
|
}else{
|
||||||
|
|
||||||
|
$_SESSION['errors'][] = tr('Errore durante esecuzione query di pianificazione. #'.$idcontratto_riga);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}else{
|
||||||
|
|
||||||
|
$_SESSION['warnings'][] = tr("Esiste già un promemoria pianificato per il ".readDate($data_richiesta).".");
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
//fine controllo nuova data richiesta
|
||||||
|
|
||||||
|
}
|
||||||
|
//fine ciclo while
|
||||||
|
|
||||||
|
}else{
|
||||||
|
|
||||||
|
$_SESSION['errors'][] = tr('Nessuna data di conclusione del contratto oppure quest\'ultima è già trascorsa, impossibile pianificare nuovi promemoria.');
|
||||||
|
|
||||||
|
}
|
||||||
|
//fine controllo data_conclusione
|
||||||
|
|
||||||
|
|
||||||
|
}else{
|
||||||
|
|
||||||
|
$_SESSION['errors'][] = tr('Errore durante la pianificazione. #'.$idcontratto_riga);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
redirect($rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'#tab_'.$id_plugin);
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Righe già inserite
|
// Righe già inserite
|
||||||
@ -84,27 +248,44 @@ if (count($rsp) != 0) {
|
|||||||
'_NUM_' => $rsp2[0]['codice'],
|
'_NUM_' => $rsp2[0]['codice'],
|
||||||
'_DATE_' => Translator::dateToLocale($rsp2[0]['data']),
|
'_DATE_' => Translator::dateToLocale($rsp2[0]['data']),
|
||||||
]));
|
]));
|
||||||
|
|
||||||
|
$disabled = 'disabled';
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
$info_intervento = '- '.('Nessuno').' -';
|
$info_intervento = '- '.('Nessuno').' -';
|
||||||
|
$disabled = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (date('Y', strtotime($records[0]['data_conclusione']))<1971){
|
||||||
|
$records[0]['data_conclusione'] = '';
|
||||||
|
}
|
||||||
echo '
|
echo '
|
||||||
<tr>
|
<tr>
|
||||||
<td>'.Translator::dateToLocale($rsp[$i]['data_richiesta']).'</td>
|
<td>'.Translator::dateToLocale($rsp[$i]['data_richiesta']).'<!--br><small>'.Translator::dateToLocale($records[0]['data_conclusione']).'</small--></td>
|
||||||
<td>'.$rsp[$i]['tipointervento'].'</td>
|
<td>'.$rsp[$i]['tipointervento'].'</td>
|
||||||
<td>'.nl2br($rsp[$i]['richiesta']).'</td>
|
<td>'.nl2br($rsp[$i]['richiesta']).'</td>
|
||||||
<td>'.$info_intervento.'</td>
|
<td>'.$info_intervento.'</td>
|
||||||
<td>'.$info_sede.'</td>
|
<td>'.$info_sede.'</td>
|
||||||
<td align="right">';
|
<td align="right">';
|
||||||
|
|
||||||
if (empty($rsp[$i]['idintervento'])) {
|
|
||||||
echo '
|
|
||||||
<button type="button" class="btn btn-primary btn-sm" title="Pianifica ora..." data-toggle="tooltip" onclick="launch_modal(\'Pianifica intervento\', \''.$rootdir.'/add.php?id_module='.Modules::get('Interventi')['id'].'&ref=interventi_contratti&idcontratto='.$id_record.'&idcontratto_riga='.$rsp[$i]['id'].'\');"'.(!empty($pianificabile) ? '' : ' disabled').'><i class="fa fa-calendar"></i></button>';
|
|
||||||
|
|
||||||
echo '
|
|
||||||
<button type="button" class="btn btn-danger btn-sm ask" data-op="depianifica" data-id="'.$rsp[$i]['id'].'">
|
echo '
|
||||||
<i class="fa fa-trash"></i>
|
<button type="button" class="btn btn-warning btn-sm" title="Pianifica altri promemoria..." data-toggle="tooltip" onclick="launch_modal(\'Pianifica altri promemoria\', \''.$rootdir.'/modules/contratti/plugins/addpianficazione.php?id_module='.Modules::get('Contratti')['id'].'&id_plugin='.Plugins::get('Pianificazione interventi')['id'].'&ref=interventi_contratti&id_record='.$id_record.'&idcontratto_riga='.$rsp[$i]['id'].'\');"'.( ( !empty($pianificabile) and strtotime($records[0]['data_conclusione'])) ? '' : ' disabled').'><i class="fa fa-clock-o"></i></button>';
|
||||||
</button>';
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
echo '
|
||||||
|
<button type="button" '.$disabled.' class="btn btn-primary btn-sm '.$disabled.' " title="Pianifica intervento ora..." data-toggle="tooltip" onclick="launch_modal(\'Pianifica intervento\', \''.$rootdir.'/add.php?id_module='.Modules::get('Interventi')['id'].'&ref=interventi_contratti&idcontratto='.$id_record.'&idcontratto_riga='.$rsp[$i]['id'].'\');"'.(!empty($pianificabile) ? '' : ' disabled').'><i class="fa fa-calendar"></i></button>';
|
||||||
|
|
||||||
|
echo '
|
||||||
|
<button type="button" '.$disabled.' title="Elimina promemoria..." class="btn btn-danger btn-sm ask '.$disabled.' " data-op="depianifica" data-id="'.$rsp[$i]['id'].'">
|
||||||
|
<i class="fa fa-trash"></i>
|
||||||
|
</button>';
|
||||||
|
|
||||||
echo '
|
echo '
|
||||||
</td>
|
</td>
|
||||||
</tr>';
|
</tr>';
|
||||||
|
@ -232,10 +232,9 @@ switch (post('op')) {
|
|||||||
$id_record = $dbo->lastInsertedID();
|
$id_record = $dbo->lastInsertedID();
|
||||||
|
|
||||||
// Lettura di tutte le righe della tabella in arrivo
|
// Lettura di tutte le righe della tabella in arrivo
|
||||||
foreach ($post['qta_da_evadere'] AS $idriga=>$value) {
|
foreach ($post['qta_da_evadere'] as $idriga => $value) {
|
||||||
// Processo solo le righe da evadere
|
// Processo solo le righe da evadere
|
||||||
if ($post['evadere'][$idriga] == 'on') {
|
if ($post['evadere'][$idriga] == 'on') {
|
||||||
|
|
||||||
$idarticolo = post('idarticolo')[$idriga];
|
$idarticolo = post('idarticolo')[$idriga];
|
||||||
$descrizione = post('descrizione')[$idriga];
|
$descrizione = post('descrizione')[$idriga];
|
||||||
|
|
||||||
@ -382,7 +381,7 @@ switch (post('op')) {
|
|||||||
|
|
||||||
// Se c'è un collegamento ad un ordine, aggiorno la quantità evasa
|
// Se c'è un collegamento ad un ordine, aggiorno la quantità evasa
|
||||||
if (!empty($idddt)) {
|
if (!empty($idddt)) {
|
||||||
$dbo->query( 'UPDATE or_righe_ordini SET qta_evasa=qta_evasa-'.$old_qta.' + '.$qta.' WHERE descrizione='.prepare($rs[0]['descrizione']).' AND idarticolo='.prepare($rs[0]['idarticolo']).' AND idordine='.prepare($idordine).' AND idiva='.prepare($rs[0]['idiva']) );
|
$dbo->query('UPDATE or_righe_ordini SET qta_evasa=qta_evasa-'.$old_qta.' + '.$qta.' WHERE descrizione='.prepare($rs[0]['descrizione']).' AND idarticolo='.prepare($rs[0]['idarticolo']).' AND idordine='.prepare($idordine).' AND idiva='.prepare($rs[0]['idiva']));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calcolo iva
|
// Calcolo iva
|
||||||
@ -393,9 +392,9 @@ switch (post('op')) {
|
|||||||
$desc_iva = $rs[0]['descrizione'];
|
$desc_iva = $rs[0]['descrizione'];
|
||||||
|
|
||||||
// Modifica riga generica sul ddt
|
// Modifica riga generica sul ddt
|
||||||
if($is_descrizione==0){
|
if ($is_descrizione == 0) {
|
||||||
$query = 'UPDATE dt_righe_ddt SET idiva='.prepare($idiva).', desc_iva='.prepare($desc_iva).', iva='.prepare($iva).', iva_indetraibile='.prepare($iva_indetraibile).', descrizione='.prepare($descrizione).', subtotale='.prepare($subtot).', sconto='.prepare($sconto).', sconto_unitario='.prepare($sconto_unitario).', tipo_sconto='.prepare($tipo_sconto).', um='.prepare($um).', qta='.prepare($qta).' WHERE id='.prepare($idriga);
|
$query = 'UPDATE dt_righe_ddt SET idiva='.prepare($idiva).', desc_iva='.prepare($desc_iva).', iva='.prepare($iva).', iva_indetraibile='.prepare($iva_indetraibile).', descrizione='.prepare($descrizione).', subtotale='.prepare($subtot).', sconto='.prepare($sconto).', sconto_unitario='.prepare($sconto_unitario).', tipo_sconto='.prepare($tipo_sconto).', um='.prepare($um).', qta='.prepare($qta).' WHERE id='.prepare($idriga);
|
||||||
}else{
|
} else {
|
||||||
$query = 'UPDATE dt_righe_ddt SET descrizione='.prepare($descrizione).' WHERE id='.prepare($idriga);
|
$query = 'UPDATE dt_righe_ddt SET descrizione='.prepare($descrizione).' WHERE id='.prepare($idriga);
|
||||||
}
|
}
|
||||||
if ($dbo->query($query)) {
|
if ($dbo->query($query)) {
|
||||||
@ -496,11 +495,11 @@ switch (post('op')) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Aggiornamento stato degli ordini presenti in questa fattura in base alle quantità totali evase
|
// Aggiornamento stato degli ordini presenti in questa fattura in base alle quantità totali evase
|
||||||
if( !empty($id_record) ){
|
if (!empty($id_record)) {
|
||||||
$rs = $dbo->fetchArray( 'SELECT idordine FROM dt_righe_ddt WHERE idddt='.prepare($id_record) );
|
$rs = $dbo->fetchArray('SELECT idordine FROM dt_righe_ddt WHERE idddt='.prepare($id_record));
|
||||||
|
|
||||||
for( $i=0; $i<sizeof($rs); $i++ ){
|
for ($i = 0; $i < sizeof($rs); ++$i) {
|
||||||
$dbo->query( 'UPDATE or_ordini SET idstatoordine=(SELECT id FROM or_statiordine WHERE descrizione="'.get_stato_ordine($rs[$i]['idordine']).'")' );
|
$dbo->query('UPDATE or_ordini SET idstatoordine=(SELECT id FROM or_statiordine WHERE descrizione="'.get_stato_ordine($rs[$i]['idordine']).'") WHERE id = '.prepare($rs[$i]['idordine']));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -294,28 +294,39 @@ switch (post('op')) {
|
|||||||
$data = $rs[0]['data'];
|
$data = $rs[0]['data'];
|
||||||
$codice = $rs[0]['codice'];
|
$codice = $rs[0]['codice'];
|
||||||
|
|
||||||
|
//Fatturo le ore di lavoro raggruppate per costo orario
|
||||||
|
$rst = $dbo->fetchArray('SELECT SUM( ROUND( TIMESTAMPDIFF( MINUTE, orario_inizio, orario_fine ) / 60, '.get_var('Cifre decimali per quantità').' ) ) AS tot_ore, SUM(prezzo_ore_consuntivo) AS tot_prezzo_ore_consuntivo, prezzo_ore_unitario FROM in_interventi_tecnici WHERE idintervento='.prepare($idintervento).' GROUP BY prezzo_ore_unitario');
|
||||||
|
|
||||||
|
//Aggiunta riga intervento sul documento
|
||||||
|
for( $i=0; $i<sizeof($rst); $i++ ){
|
||||||
|
$ore = $rst[$i]['tot_ore'];
|
||||||
|
|
||||||
|
// Calcolo iva
|
||||||
|
$query = 'SELECT * FROM co_iva WHERE id='.prepare($idiva);
|
||||||
|
$rs = $dbo->fetchArray($query);
|
||||||
|
|
||||||
|
$sconto = $rst[$i]['sconto'];
|
||||||
|
$subtot = $rst[$i]['tot_prezzo_ore_consuntivo'];
|
||||||
|
$iva = ($subtot - $sconto) / 100 * $rs[0]['percentuale'];
|
||||||
|
$iva_indetraibile = $iva / 100 * $rs[0]['indetraibile'];
|
||||||
|
$desc_iva = $rs[0]['descrizione'];
|
||||||
|
|
||||||
|
// Calcolo rivalsa inps
|
||||||
|
$query = 'SELECT * FROM co_rivalsainps WHERE id='.prepare(get_var('Percentuale rivalsa INPS'));
|
||||||
|
$rs = $dbo->fetchArray($query);
|
||||||
|
$rivalsainps = ($subtot - $sconto) / 100 * $rs[0]['percentuale'];
|
||||||
|
|
||||||
|
// Calcolo ritenuta d'acconto
|
||||||
|
$query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare(get_var("Percentuale ritenuta d'acconto"));
|
||||||
|
$rs = $dbo->fetchArray($query);
|
||||||
|
$ritenutaacconto = ($subtot - $sconto + $rivalsainps) / 100 * $rs[0]['percentuale'];
|
||||||
|
|
||||||
|
$query = 'INSERT INTO co_righe_documenti(iddocumento, idintervento, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, `order`) VALUES('.prepare($id_record).', '.prepare($idintervento).', '.prepare($idconto).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($sconto).", 'UNT', 'ore', ".prepare($ore).', '.prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))';
|
||||||
|
$dbo->query($query);
|
||||||
|
}
|
||||||
|
|
||||||
$costi_intervento = get_costi_intervento($idintervento);
|
$costi_intervento = get_costi_intervento($idintervento);
|
||||||
|
|
||||||
// Calcolo iva
|
|
||||||
$query = 'SELECT * FROM co_iva WHERE id='.prepare($idiva);
|
|
||||||
$rs = $dbo->fetchArray($query);
|
|
||||||
|
|
||||||
$sconto = $costi_intervento['manodopera_addebito'] - $costi_intervento['manodopera_scontato'];
|
|
||||||
$subtot = $costi_intervento['manodopera_addebito'];
|
|
||||||
$iva = ($subtot - $sconto) / 100 * $rs[0]['percentuale'];
|
|
||||||
$iva_indetraibile = $iva / 100 * $rs[0]['indetraibile'];
|
|
||||||
$desc_iva = $rs[0]['descrizione'];
|
|
||||||
|
|
||||||
// Calcolo rivalsa inps
|
|
||||||
$query = 'SELECT * FROM co_rivalsainps WHERE id='.prepare(get_var('Percentuale rivalsa INPS'));
|
|
||||||
$rs = $dbo->fetchArray($query);
|
|
||||||
$rivalsainps = ($subtot - $sconto) / 100 * $rs[0]['percentuale'];
|
|
||||||
|
|
||||||
// Calcolo ritenuta d'acconto
|
|
||||||
$query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare(get_var("Percentuale ritenuta d'acconto"));
|
|
||||||
$rs = $dbo->fetchArray($query);
|
|
||||||
$ritenutaacconto = ($subtot - $sconto + $rivalsainps) / 100 * $rs[0]['percentuale'];
|
|
||||||
|
|
||||||
// Aggiunta diritto di chiamata (se presente) come riga a parte
|
// Aggiunta diritto di chiamata (se presente) come riga a parte
|
||||||
$diritto_chiamata = $costi_intervento['dirittochiamata_addebito'];
|
$diritto_chiamata = $costi_intervento['dirittochiamata_addebito'];
|
||||||
|
|
||||||
@ -1328,7 +1339,7 @@ if (!empty($id_record)) {
|
|||||||
$rs = $dbo->fetchArray('SELECT idddt FROM co_righe_documenti WHERE iddocumento='.prepare($id_record));
|
$rs = $dbo->fetchArray('SELECT idddt FROM co_righe_documenti WHERE iddocumento='.prepare($id_record));
|
||||||
|
|
||||||
for ($i = 0; $i < sizeof($rs); ++$i) {
|
for ($i = 0; $i < sizeof($rs); ++$i) {
|
||||||
$dbo->query('UPDATE dt_ddt SET idstatoddt=(SELECT id FROM dt_statiddt WHERE descrizione="'.get_stato_ddt($rs[$i]['idddt']).'")');
|
$dbo->query('UPDATE dt_ddt SET idstatoddt=(SELECT id FROM dt_statiddt WHERE descrizione="'.get_stato_ddt($rs[$i]['idddt']).'") WHERE id = '.prepare($rs[$i]['idddt']));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1337,7 +1348,7 @@ if (!empty($id_record)) {
|
|||||||
$rs = $dbo->fetchArray('SELECT idordine FROM co_righe_documenti WHERE iddocumento='.prepare($id_record));
|
$rs = $dbo->fetchArray('SELECT idordine FROM co_righe_documenti WHERE iddocumento='.prepare($id_record));
|
||||||
|
|
||||||
for ($i = 0; $i < sizeof($rs); ++$i) {
|
for ($i = 0; $i < sizeof($rs); ++$i) {
|
||||||
$dbo->query('UPDATE or_ordini SET idstatoordine=(SELECT id FROM or_statiordine WHERE descrizione="'.get_stato_ordine($rs[$i]['idordine']).'")');
|
$dbo->query('UPDATE or_ordini SET idstatoordine=(SELECT id FROM or_statiordine WHERE descrizione="'.get_stato_ordine($rs[$i]['idordine']).'") WHERE id = '.prepare($rs[$i]['idordine']));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ $idanagrafica = $record[0]['idanagrafica'];
|
|||||||
echo '
|
echo '
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
{[ "type": "select", "label": "'.tr('Ddt').'", "name": "id_ddt", "required": 1, "values": "query=SELECT dt_ddt.id, CONCAT(\'nr. \', IF(numero_esterno != \'\', numero_esterno, numero), \' del \', DATE_FORMAT(data, \'%d-%m-%Y\')) AS descrizione FROM dt_ddt WHERE idanagrafica='.prepare($idanagrafica).' AND idstatoddt IN (SELECT id FROM dt_statiddt WHERE descrizione=\'Bozza\') AND idtipoddt=(SELECT id FROM dt_tipiddt WHERE dir='.prepare($dir).') AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0) ORDER BY data DESC, numero DESC" ]}
|
{[ "type": "select", "label": "'.tr('Ddt').'", "name": "id_ddt", "required": 1, "values": "query=SELECT dt_ddt.id, CONCAT(\'nr. \', IF(numero_esterno != \'\', numero_esterno, numero), \' del \', DATE_FORMAT(data, \'%d-%m-%Y\')) AS descrizione FROM dt_ddt WHERE idanagrafica='.prepare($idanagrafica).' AND idstatoddt IN (SELECT id FROM dt_statiddt WHERE descrizione IN(\'Bozza\', \'Parzialmente fatturato\')) AND idtipoddt=(SELECT id FROM dt_tipiddt WHERE dir='.prepare($dir).') AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0) ORDER BY data DESC, numero DESC" ]}
|
||||||
</div>
|
</div>
|
||||||
</div>';
|
</div>';
|
||||||
|
|
||||||
|
@ -283,7 +283,7 @@ if ($records[0]['stato'] != 'Pagato' && $records[0]['stato'] != 'Emessa') {
|
|||||||
</a>';
|
</a>';
|
||||||
|
|
||||||
// Lettura ddt
|
// Lettura ddt
|
||||||
$qd = 'SELECT id FROM dt_ddt WHERE idanagrafica='.prepare($records[0]['idanagrafica']).' AND idstatoddt IN (SELECT id FROM dt_statiddt WHERE descrizione=\'Bozza\') AND idtipoddt=(SELECT id FROM dt_tipiddt WHERE dir='.prepare($dir).') AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0)';
|
$qd = 'SELECT id FROM dt_ddt WHERE idanagrafica='.prepare($records[0]['idanagrafica']).' AND idstatoddt IN (SELECT id FROM dt_statiddt WHERE descrizione IN(\'Bozza\', \'Parzialmente fatturato\')) AND idtipoddt=(SELECT id FROM dt_tipiddt WHERE dir='.prepare($dir).') AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0)';
|
||||||
$ddt = $dbo->fetchNum($qd);
|
$ddt = $dbo->fetchNum($qd);
|
||||||
echo '
|
echo '
|
||||||
<a class="btn btn-sm btn-primary'.(!empty($ddt) ? '' : ' disabled').'" data-href="'.$rootdir.'/modules/fatture/add_ddt.php?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="modal" data-title="Aggiungi ddt" data-target="#bs-popup">
|
<a class="btn btn-sm btn-primary'.(!empty($ddt) ? '' : ' disabled').'" data-href="'.$rootdir.'/modules/fatture/add_ddt.php?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="modal" data-title="Aggiungi ddt" data-target="#bs-popup">
|
||||||
|
@ -242,36 +242,42 @@ switch (post('op')) {
|
|||||||
|
|
||||||
for ($i = 0; $i < sizeof($rs); ++$i) {
|
for ($i = 0; $i < sizeof($rs); ++$i) {
|
||||||
if (abs($rimanente) > 0) {
|
if (abs($rimanente) > 0) {
|
||||||
if (abs($rs[$i]['da_pagare']) >= abs($rimanente)) {
|
if (abs($rs[$i]['pagato']) >= abs($rimanente)) {
|
||||||
$query2 = 'SELECT pagato FROM co_scadenziario WHERE id='.prepare($rs[$i]['id']);
|
$query2 = 'SELECT pagato FROM co_scadenziario WHERE id='.prepare($rs[$i]['id']);
|
||||||
$rs2 = $dbo->fetchArray($query2);
|
$rs2 = $dbo->fetchArray($query2);
|
||||||
$pagato = $rs2[0]['pagato'];
|
$pagato = $rs2[0]['pagato'];
|
||||||
($pagato < 0) ? $sign = -1 : $sign = 1;
|
|
||||||
$new_value = ((abs($pagato) - abs($rimanente)) * $sign);
|
|
||||||
|
|
||||||
// Se resta ancora un po' di pagato cambio solo l'importo...
|
($pagato < 0) ? $sign = -1 : $sign = 1;
|
||||||
if ($new_value > 0) {
|
$new_value = ((abs($pagato) - abs($rimanente)) * $sign);
|
||||||
$dbo->query('UPDATE co_scadenziario SET pagato='.prepare($new_value).' WHERE id='.prepare($rs[$i]['id']));
|
|
||||||
|
// Se resta ancora un po' di pagato cambio solo l'importo...
|
||||||
|
if ($new_value > 0) {
|
||||||
|
$dbo->query('UPDATE co_scadenziario SET pagato='.prepare($new_value).' WHERE id='.prepare($rs[$i]['id']));
|
||||||
|
}
|
||||||
|
|
||||||
|
// ...se l'importo è a zero, azzero anche la data di pagamento
|
||||||
|
else {
|
||||||
|
$dbo->query('UPDATE co_scadenziario SET pagato='.prepare($new_value).", data_pagamento='0000-00-00' WHERE id=".prepare($rs[$i]['id']));
|
||||||
|
}
|
||||||
|
|
||||||
|
$rimanente = 0;
|
||||||
|
} else {
|
||||||
|
$dbo->query("UPDATE co_scadenziario SET pagato='0', data_pagamento='0000-00-00' WHERE id=".prepare($rs[$i]['id']));
|
||||||
|
$rimanente -= abs($rs[$i]['pagato']);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ...se l'importo è a zero, azzero anche la data di pagamento
|
|
||||||
else {
|
|
||||||
$dbo->query('UPDATE co_scadenziario SET pagato='.prepare($new_value).", data_pagamento='0000-00-00' WHERE id=".prepare($rs[$i]['id']));
|
|
||||||
}
|
|
||||||
|
|
||||||
$rimanente = 0;
|
|
||||||
} else {
|
|
||||||
$dbo->query("UPDATE co_scadenziario SET pagato='0' WHERE id=".prepare($rs[$i]['id']));
|
|
||||||
$rimanente -= abs($rs[$i]['da_pagare']);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Eliminazione prima nota
|
// Eliminazione prima nota
|
||||||
$dbo->query('DELETE FROM co_movimenti WHERE idmastrino='.prepare($idmastrino).' AND primanota=1');
|
$dbo->query('DELETE FROM co_movimenti WHERE idmastrino='.prepare($idmastrino).' AND primanota=1');
|
||||||
|
|
||||||
// Aggiorno lo stato della fattura a "Emessa"
|
// Aggiorno lo stato della fattura a "Emessa" o "Parzialmente pagato"
|
||||||
$dbo->query("UPDATE co_documenti SET idstatodocumento=(SELECT id FROM co_statidocumento WHERE descrizione='Emessa') WHERE id=".prepare($iddocumento));
|
$rs_pagamenti = $dbo->fetchArray("SELECT SUM(pagato) AS pagato FROM co_scadenziario WHERE iddocumento='".$iddocumento."'");
|
||||||
|
if($rs_pagamenti[0]['pagato']>0){
|
||||||
|
$dbo->query("UPDATE co_documenti SET idstatodocumento=(SELECT id FROM co_statidocumento WHERE descrizione='Parzialmente pagato') WHERE id=".prepare($iddocumento));
|
||||||
|
}else{
|
||||||
|
$dbo->query("UPDATE co_documenti SET idstatodocumento=(SELECT id FROM co_statidocumento WHERE descrizione='Emessa') WHERE id=".prepare($iddocumento));
|
||||||
|
}
|
||||||
|
|
||||||
// Aggiorno lo stato dei preventivi collegati alla fattura se ce ne sono
|
// Aggiorno lo stato dei preventivi collegati alla fattura se ce ne sono
|
||||||
$query = 'SELECT idpreventivo FROM co_righe_documenti WHERE iddocumento='.prepare($iddocumento).' AND NOT idpreventivo=0 AND idpreventivo IS NOT NULL';
|
$query = 'SELECT idpreventivo FROM co_righe_documenti WHERE iddocumento='.prepare($iddocumento).' AND NOT idpreventivo=0 AND idpreventivo IS NOT NULL';
|
||||||
|
@ -50,7 +50,6 @@ UPDATE `zz_modules` SET `options` = '{ "main_query": [ { "type": "table", "field
|
|||||||
UPDATE `zz_modules` SET `options` = '{ "main_query": [ { "type": "table", "fields": "Documento, Anagrafica, Tipo di pagamento, Data emissione, Data scadenza, Importo, Pagato", "query": "SELECT co_scadenziario.id AS id, ragione_sociale AS `Anagrafica`, co_pagamenti.descrizione AS `Tipo di pagamento`, CONCAT(co_tipidocumento.descrizione, CONCAT('' numero '', IF(numero_esterno<>'''', numero_esterno, numero))) AS `Documento`, DATE_FORMAT(data_emissione, ''%d/%m/%Y'') AS `Data emissione`, DATE_FORMAT(scadenza, ''%d/%m/%Y'') AS `Data scadenza`, REPLACE(REPLACE(REPLACE(FORMAT(da_pagare, 2), '','', ''#''), ''.'', '',''), ''#'', ''.'') AS `Importo`, REPLACE(REPLACE(REPLACE(FORMAT(pagato, 2), '','', ''#''), ''.'', '',''), ''#'', ''.'') AS `Pagato`, IF(scadenza<NOW(), ''#ff7777'', '''') AS _bg_, da_pagare, pagato, co_statidocumento.descrizione FROM (co_scadenziario INNER JOIN (((co_documenti INNER JOIN an_anagrafiche ON co_documenti.idanagrafica=an_anagrafiche.idanagrafica) INNER JOIN co_pagamenti ON co_documenti.idpagamento=co_pagamenti.id) INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id) ON co_scadenziario.iddocumento=co_documenti.id) INNER JOIN co_statidocumento ON co_documenti.idstatodocumento=co_statidocumento.id HAVING 1=1 AND (ABS(pagato) < ABS(da_pagare) AND co_statidocumento.descrizione IN(''Emessa'',''Parzialmente pagato'')) ORDER BY scadenza ASC"} ]}' WHERE `zz_modules`.`name` = 'Scadenzario';
|
UPDATE `zz_modules` SET `options` = '{ "main_query": [ { "type": "table", "fields": "Documento, Anagrafica, Tipo di pagamento, Data emissione, Data scadenza, Importo, Pagato", "query": "SELECT co_scadenziario.id AS id, ragione_sociale AS `Anagrafica`, co_pagamenti.descrizione AS `Tipo di pagamento`, CONCAT(co_tipidocumento.descrizione, CONCAT('' numero '', IF(numero_esterno<>'''', numero_esterno, numero))) AS `Documento`, DATE_FORMAT(data_emissione, ''%d/%m/%Y'') AS `Data emissione`, DATE_FORMAT(scadenza, ''%d/%m/%Y'') AS `Data scadenza`, REPLACE(REPLACE(REPLACE(FORMAT(da_pagare, 2), '','', ''#''), ''.'', '',''), ''#'', ''.'') AS `Importo`, REPLACE(REPLACE(REPLACE(FORMAT(pagato, 2), '','', ''#''), ''.'', '',''), ''#'', ''.'') AS `Pagato`, IF(scadenza<NOW(), ''#ff7777'', '''') AS _bg_, da_pagare, pagato, co_statidocumento.descrizione FROM (co_scadenziario INNER JOIN (((co_documenti INNER JOIN an_anagrafiche ON co_documenti.idanagrafica=an_anagrafiche.idanagrafica) INNER JOIN co_pagamenti ON co_documenti.idpagamento=co_pagamenti.id) INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id) ON co_scadenziario.iddocumento=co_documenti.id) INNER JOIN co_statidocumento ON co_documenti.idstatodocumento=co_statidocumento.id HAVING 1=1 AND (ABS(pagato) < ABS(da_pagare) AND co_statidocumento.descrizione IN(''Emessa'',''Parzialmente pagato'')) ORDER BY scadenza ASC"} ]}' WHERE `zz_modules`.`name` = 'Scadenzario';
|
||||||
UPDATE `zz_impostazioni` SET `valore` = '100' WHERE `nome` = 'Righe per pagina';
|
UPDATE `zz_impostazioni` SET `valore` = '100' WHERE `nome` = 'Righe per pagina';
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Modifica menu fatture, ordini, ecc in Vendita, Acquisti, Contabilità
|
-- Modifica menu fatture, ordini, ecc in Vendita, Acquisti, Contabilità
|
||||||
--
|
--
|
||||||
@ -67,17 +66,14 @@ UPDATE `zz_modules` SET `order`=7 WHERE `name`='MyImpianti';
|
|||||||
UPDATE `zz_modules` SET `order`=8 WHERE `name`='Backup';
|
UPDATE `zz_modules` SET `order`=8 WHERE `name`='Backup';
|
||||||
UPDATE `zz_modules` SET `order`=9 WHERE `name`='Aggiornamenti';
|
UPDATE `zz_modules` SET `order`=9 WHERE `name`='Aggiornamenti';
|
||||||
|
|
||||||
|
|
||||||
-- Collegamento sottomenu di Contabilità al giusto "contenitore" (vendite o acquisti)
|
-- Collegamento sottomenu di Contabilità al giusto "contenitore" (vendite o acquisti)
|
||||||
UPDATE `zz_modules` SET `parent`=(SELECT `id` FROM (SELECT `id` FROM `zz_modules` `m2` WHERE `name`='Vendite') AS `m2`) WHERE `name` IN('Preventivi', 'Contratti', 'Fatture di vendita', 'Ordini cliente');
|
UPDATE `zz_modules` `t1` INNER JOIN `zz_modules` `t2` ON (`t1`.`name` IN('Preventivi', 'Contratti', 'Fatture di vendita', 'Ordini cliente') AND `t2`.`name` = 'Vendite') SET `t1`.`parent` = `t2`.`id`;
|
||||||
UPDATE `zz_modules` SET `parent`=(SELECT `id` FROM (SELECT `id` FROM `zz_modules` `m2` WHERE `name`='Acquisti') AS `m2`) WHERE `name` IN('Fatture di acquisto', 'Ordini fornitore');
|
UPDATE `zz_modules` `t1` INNER JOIN `zz_modules` `t2` ON (`t1`.`name` IN('Fatture di acquisto', 'Ordini fornitore') AND `t2`.`name` = 'Acquisti') SET `t1`.`parent` = `t2`.`id`;
|
||||||
|
|
||||||
|
|
||||||
-- Aggiunta nuovi campi nelle righe preventivi
|
-- Aggiunta nuovi campi nelle righe preventivi
|
||||||
ALTER TABLE `co_righe_preventivi` ADD `sconto` DECIMAL(12, 4) NOT NULL AFTER `subtotale`;
|
ALTER TABLE `co_righe_preventivi` ADD `sconto` DECIMAL(12, 4) NOT NULL AFTER `subtotale`;
|
||||||
ALTER TABLE `co_preventivi` ADD `idiva` INT(11) NOT NULL AFTER `idtipointervento`;
|
ALTER TABLE `co_preventivi` ADD `idiva` INT(11) NOT NULL AFTER `idtipointervento`;
|
||||||
|
|
||||||
|
|
||||||
-- Creazione collegamento multiplo fra clienti e agenti
|
-- Creazione collegamento multiplo fra clienti e agenti
|
||||||
CREATE TABLE IF NOT EXISTS `an_anagrafiche_agenti` (
|
CREATE TABLE IF NOT EXISTS `an_anagrafiche_agenti` (
|
||||||
`idanagrafica` int(11) NOT NULL,
|
`idanagrafica` int(11) NOT NULL,
|
||||||
@ -85,7 +81,6 @@ CREATE TABLE IF NOT EXISTS `an_anagrafiche_agenti` (
|
|||||||
PRIMARY KEY(`idanagrafica`, `idagente`)
|
PRIMARY KEY(`idanagrafica`, `idagente`)
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
|
|
||||||
-- Aggiunta filtro su Prima nota per mostrare solo quelle dell'agente loggato
|
-- Aggiunta filtro su Prima nota per mostrare solo quelle dell'agente loggato
|
||||||
INSERT INTO `zz_gruppi_modules` (`idgruppo`, `idmodule`, `clause`) VALUES ((SELECT `id` FROM `zz_gruppi` WHERE `nome`='Agenti'), (SELECT `id` FROM `zz_modules` WHERE `name`='Prima nota'), 'AND idagente=|idanagrafica|');
|
INSERT INTO `zz_gruppi_modules` (`idgruppo`, `idmodule`, `clause`) VALUES ((SELECT `id` FROM `zz_gruppi` WHERE `nome`='Agenti'), (SELECT `id` FROM `zz_modules` WHERE `name`='Prima nota'), 'AND idagente=|idanagrafica|');
|
||||||
|
|
||||||
@ -105,12 +100,10 @@ CREATE TABLE IF NOT EXISTS `zz_log` (
|
|||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
|
|
||||||
-- Aggiunta tipologia di scadenza
|
-- Aggiunta tipologia di scadenza
|
||||||
ALTER TABLE `co_scadenziario` ADD `tipo` VARCHAR(50) NOT NULL AFTER `iddocumento`;
|
ALTER TABLE `co_scadenziario` ADD `tipo` VARCHAR(50) NOT NULL AFTER `iddocumento`;
|
||||||
UPDATE `co_scadenziario` SET `tipo` = 'fattura';
|
UPDATE `co_scadenziario` SET `tipo` = 'fattura';
|
||||||
|
|
||||||
|
|
||||||
-- Aggiunto campo bic per l'anagrafica
|
-- Aggiunto campo bic per l'anagrafica
|
||||||
ALTER TABLE `an_anagrafiche` ADD `bic` VARCHAR(25) NOT NULL AFTER `codiceiban`;
|
ALTER TABLE `an_anagrafiche` ADD `bic` VARCHAR(25) NOT NULL AFTER `codiceiban`;
|
||||||
|
|
||||||
@ -120,14 +113,13 @@ ALTER TABLE `my_impianto_componenti` CHANGE `idintervento` `idintervento` VARCHA
|
|||||||
-- Aggiunto campo ordine per poter ordinare le righe in fattura
|
-- Aggiunto campo ordine per poter ordinare le righe in fattura
|
||||||
ALTER TABLE `co_righe_documenti` ADD `ordine` INT(11) NOT NULL AFTER `altro`;
|
ALTER TABLE `co_righe_documenti` ADD `ordine` INT(11) NOT NULL AFTER `altro`;
|
||||||
|
|
||||||
|
|
||||||
-- Aggiunto widget per vedere il valore del magazzino + il totale degli articoli disponibili
|
-- Aggiunto widget per vedere il valore del magazzino + il totale degli articoli disponibili
|
||||||
INSERT INTO `zz_widget_modules` (`id`, `name`, `type`, `id_module`, `location`, `class`, `query`, `bgcolor`, `icon`, `print_link`, `more_link`, `more_link_type`, `php_include`, `text`, `enabled`, `order`) VALUES (NULL, 'Valore magazzino', 'stats', '21', 'controller_right', 'col-md-12', 'SELECT CONCAT_WS(" ", REPLACE(REPLACE(REPLACE(FORMAT (SUM(prezzo_acquisto*qta),2), ",", "#"), ".", ","), "#", "."), "€") AS dato FROM mg_articoli WHERE qta>0', '#A15D2D', 'fa fa-money', '', '', '', '', 'Valore magazzino', '1', '1');
|
INSERT INTO `zz_widget_modules` (`id`, `name`, `type`, `id_module`, `location`, `class`, `query`, `bgcolor`, `icon`, `print_link`, `more_link`, `more_link_type`, `php_include`, `text`, `enabled`, `order`) VALUES (NULL, 'Valore magazzino', 'stats', '21', 'controller_right', 'col-md-12', 'SELECT CONCAT_WS(" ", REPLACE(REPLACE(REPLACE(FORMAT (SUM(prezzo_acquisto*qta),2), ",", "#"), ".", ","), "#", "."), "€") AS dato FROM mg_articoli WHERE qta>0', '#A15D2D', 'fa fa-money', '', '', '', '', 'Valore magazzino', '1', '1');
|
||||||
INSERT INTO `zz_widget_modules` (`id`, `name`, `type`, `id_module`, `location`, `class`, `query`, `bgcolor`, `icon`, `print_link`, `more_link`, `more_link_type`, `php_include`, `text`, `enabled`, `order`) VALUES (NULL, 'Articoli in magazzino', 'stats', '21', 'controller_right', 'col-md-12', 'SELECT CONCAT_WS(" ", REPLACE(REPLACE(REPLACE(FORMAT (SUM(qta),2), ",", "#"), ".", ","), "#", "."), "unità") AS dato FROM mg_articoli WHERE qta>0', '#45A9F1', 'fa fa-check-square-o', '', '', '', '', 'Articoli in magazzino', '1', '1');
|
INSERT INTO `zz_widget_modules` (`id`, `name`, `type`, `id_module`, `location`, `class`, `query`, `bgcolor`, `icon`, `print_link`, `more_link`, `more_link_type`, `php_include`, `text`, `enabled`, `order`) VALUES (NULL, 'Articoli in magazzino', 'stats', '21', 'controller_right', 'col-md-12', 'SELECT CONCAT_WS(" ", REPLACE(REPLACE(REPLACE(FORMAT (SUM(qta),2), ",", "#"), ".", ","), "#", "."), "unità") AS dato FROM mg_articoli WHERE qta>0', '#45A9F1', 'fa fa-check-square-o', '', '', '', '', 'Articoli in magazzino', '1', '1');
|
||||||
-- Controllo scadenze per contratti con data conclusione > 1970
|
-- Controllo scadenze per contratti con data conclusione > 1970
|
||||||
UPDATE `zz_widget_modules` SET `query` = 'SELECT COUNT(id) AS dato FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE descrizione="Accettato" OR descrizione="In lavorazione" OR descrizione="In attesa di pagamento") AND rinnovabile=1 AND NOW() > DATE_ADD(data_conclusione, INTERVAL -ABS(giorni_preavviso_rinnovo) DAY) AND YEAR(data_conclusione) > 1970' WHERE `zz_widget_modules`.`name` = 'Contratti in scadenza';
|
UPDATE `zz_widget_modules` SET `query` = 'SELECT COUNT(id) AS dato FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE descrizione="Accettato" OR descrizione="In lavorazione" OR descrizione="In attesa di pagamento") AND rinnovabile=1 AND NOW() > DATE_ADD(data_conclusione, INTERVAL -ABS(giorni_preavviso_rinnovo) DAY) AND YEAR(data_conclusione) > 1970' WHERE `zz_widget_modules`.`name` = 'Contratti in scadenza';
|
||||||
|
|
||||||
-- aumento dimensione campo descrizione su co_pagamenti
|
-- Aumento dimensione campo descrizione su co_pagamenti
|
||||||
ALTER TABLE `co_pagamenti` CHANGE `descrizione` `descrizione` VARCHAR(255) NOT NULL;
|
ALTER TABLE `co_pagamenti` CHANGE `descrizione` `descrizione` VARCHAR(255) NOT NULL;
|
||||||
|
|
||||||
-- Aggiunta filtro su MyImpianti per mostrare solo quelli del cliente loggato
|
-- Aggiunta filtro su MyImpianti per mostrare solo quelli del cliente loggato
|
||||||
@ -145,12 +137,10 @@ ALTER TABLE `co_righe2_contratti` ADD `iva_indetraibile` DECIMAL(12, 4) NOT NULL
|
|||||||
-- Aggiunto stato concluso anche ai contratti
|
-- Aggiunto stato concluso anche ai contratti
|
||||||
INSERT INTO `co_staticontratti` (`id`, `descrizione`, `icona`, `completato`, `annullato`) VALUES (NULL, 'Concluso', 'fa fa-2x fa-check text-success', '0', '0');
|
INSERT INTO `co_staticontratti` (`id`, `descrizione`, `icona`, `completato`, `annullato`) VALUES (NULL, 'Concluso', 'fa fa-2x fa-check text-success', '0', '0');
|
||||||
|
|
||||||
|
|
||||||
-- Aggiunto modulo per gestire componenti
|
-- Aggiunto modulo per gestire componenti
|
||||||
-- (SELECT `id` FROM `zz_modules` WHERE `name`='MyImpianti')
|
-- (SELECT `id` FROM `zz_modules` WHERE `name`='MyImpianti')
|
||||||
INSERT INTO `zz_modules` (`id`, `name`, `name2`, `module_dir`, `options`, `options2`, `icon`, `version`, `compatibility`, `order`, `level`, `parent`, `default`, `enabled`, `type`, `new`) VALUES (NULL, 'Gestione componenti', '', 'gestione_componenti', '{ "main_query": [ { "type": "custom" } ]}', '', 'fa fa-external-link', '2.2', '2.2', '0', '1', '30', '1', '1', 'menu', '0');
|
INSERT INTO `zz_modules` (`id`, `name`, `name2`, `module_dir`, `options`, `options2`, `icon`, `version`, `compatibility`, `order`, `level`, `parent`, `default`, `enabled`, `type`, `new`) VALUES (NULL, 'Gestione componenti', '', 'gestione_componenti', '{ "main_query": [ { "type": "custom" } ]}', '', 'fa fa-external-link', '2.2', '2.2', '0', '1', '30', '1', '1', 'menu', '0');
|
||||||
UPDATE `zz_modules` SET `parent` = (SELECT `id` FROM (SELECT * FROM zz_modules) AS table1 WHERE `name`='MyImpianti') WHERE `zz_modules`.`name` = 'Gestione componenti';
|
UPDATE `zz_modules` `t1` INNER JOIN `zz_modules` `t2` ON (`t1`.`name` = 'Gestione componenti' AND `t2`.`name` = 'MyImpianti') SET `t1`.`parent` = `t2`.`id`;
|
||||||
|
|
||||||
|
|
||||||
-- Aggiunti campi per gestire firma rapportini
|
-- Aggiunti campi per gestire firma rapportini
|
||||||
ALTER TABLE `in_interventi` ADD `firma_file` varchar(255) NOT NULL AFTER `ora_sla`;
|
ALTER TABLE `in_interventi` ADD `firma_file` varchar(255) NOT NULL AFTER `ora_sla`;
|
||||||
@ -173,7 +163,6 @@ CREATE TABLE IF NOT EXISTS `my_componenti_interventi` (
|
|||||||
-- Aggiunto campo prc_guadagno in co_righe_preventivi
|
-- Aggiunto campo prc_guadagno in co_righe_preventivi
|
||||||
ALTER TABLE `co_righe_preventivi` ADD `prc_guadagno` DECIMAL(5,2) NOT NULL AFTER `sconto`;
|
ALTER TABLE `co_righe_preventivi` ADD `prc_guadagno` DECIMAL(5,2) NOT NULL AFTER `sconto`;
|
||||||
|
|
||||||
|
|
||||||
-- 2016-11-09 (r1509)
|
-- 2016-11-09 (r1509)
|
||||||
CREATE TABLE IF NOT EXISTS `co_contratti_tipiintervento` (
|
CREATE TABLE IF NOT EXISTS `co_contratti_tipiintervento` (
|
||||||
`idcontratto` int(11) NOT NULL,
|
`idcontratto` int(11) NOT NULL,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user