1
0
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:
Thomas Zilio 2018-02-09 14:02:00 +01:00
commit 6cf8088618
21 changed files with 621 additions and 97 deletions

67
.github/CONTRIBUTING.md vendored Normal file
View 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
View 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
View 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

View File

@ -14,6 +14,7 @@ $config = PhpCsFixer\Config::create()
->setRules([
'@Symfony' => true,
'array_syntax' => ['syntax' => 'short'],
'yoda_style' => false,
])
->setFinder($finder);

View File

@ -1,6 +1,6 @@
# 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.

View File

@ -43,7 +43,7 @@ La documentazione ufficiale è disponibile all'indirizzo <https://devcode-it.git
- [Requisiti](#requisiti)
- [Installazione](#installazione)
- [Versioni](#versioni)
- [Github](#github)
- [GitHub](#github)
- [Perché software open source](#perch%C3%A9-software-open-source)
- [Community](#community)
- [Contribuire](#contribuire)
@ -83,14 +83,14 @@ Per procedere all'installazione è necessario seguire i seguenti punti:
### 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 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.
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
php composer.phar install

View File

@ -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
elseif (Translator::getFormatter()->isStandardDate($value) || preg_match('/^icontr(.+?)$/', $field)) {
elseif (Translator::getFormatter()->isStandardDate($value) || preg_match('/^icon_(.+?)$/', $field)) {
$align[$field] = 'text-center';
}
}
@ -162,7 +162,7 @@ if (!empty($module_query) && $module_query != 'menu' && $module_query != 'custom
}
// Icona
if (preg_match('/^colortr(.+?)$/', $field, $m)) {
if (preg_match('/^color_(.+?)$/', $field, $m)) {
$value = $r['color_title_'.$m[1]] ?: '';
$column['class'] = 'text-center small';

View File

@ -4,7 +4,81 @@ currentMenu: 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 -->
- [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 -->
## 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.

View File

@ -70,4 +70,4 @@ Per ulteriori informazioni, consultare la [documentazione ufficiale di Composer]
- symfony/finder
- 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._

View File

@ -7,7 +7,7 @@ currentMenu: installazione
- [Requisiti](#requisiti)
- [Installazione](#installazione)
- [Versioni](#versioni)
- [Github](#github)
- [GitHub](#github)
- [Strumenti utili](#strumenti-utili)
- [Windows](#windows)
- [Linux](#linux)
@ -47,14 +47,14 @@ Per procedere all'installazione è necessario seguire i seguenti punti:
### 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 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.
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
php composer.phar install

View File

@ -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>
</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) {
echo '

View File

@ -1,5 +1,7 @@
# Disable PHP rendering
php_flag engine off
## Options -ExecCGI
AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi
<IfModule mod_php5.c>
php_flag engine off
</IfModule>
<IfModule mod_php7.c>
php_flag engine off
</IfModule>

View File

@ -156,7 +156,7 @@ switch (post('op')) {
// Lettura iva dell'articolo
$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'];
$desc_iva = $rs2[0]['descrizione'];

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

View File

@ -31,6 +31,170 @@ switch (filter('op')) {
redirect($rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'#tab_'.$id_plugin);
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
@ -84,27 +248,44 @@ if (count($rsp) != 0) {
'_NUM_' => $rsp2[0]['codice'],
'_DATE_' => Translator::dateToLocale($rsp2[0]['data']),
]));
$disabled = 'disabled';
} else {
$info_intervento = '- '.('Nessuno').' -';
$disabled = '';
}
if (date('Y', strtotime($records[0]['data_conclusione']))<1971){
$records[0]['data_conclusione'] = '';
}
echo '
<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>'.nl2br($rsp[$i]['richiesta']).'</td>
<td>'.$info_intervento.'</td>
<td>'.$info_sede.'</td>
<td align="right">';
echo '
<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>';
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>';
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" '.$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 '
<button type="button" class="btn btn-danger btn-sm ask" data-op="depianifica" data-id="'.$rsp[$i]['id'].'">
<i class="fa fa-trash"></i>
</button>';
}
echo '
</td>
</tr>';

View File

@ -232,10 +232,9 @@ switch (post('op')) {
$id_record = $dbo->lastInsertedID();
// 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
if ($post['evadere'][$idriga] == 'on') {
$idarticolo = post('idarticolo')[$idriga];
$descrizione = post('descrizione')[$idriga];
@ -382,7 +381,7 @@ switch (post('op')) {
// Se c'è un collegamento ad un ordine, aggiorno la quantità evasa
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
@ -393,9 +392,9 @@ switch (post('op')) {
$desc_iva = $rs[0]['descrizione'];
// 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);
}else{
} else {
$query = 'UPDATE dt_righe_ddt SET descrizione='.prepare($descrizione).' WHERE id='.prepare($idriga);
}
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
if( !empty($id_record) ){
$rs = $dbo->fetchArray( 'SELECT idordine FROM dt_righe_ddt WHERE idddt='.prepare($id_record) );
if (!empty($id_record)) {
$rs = $dbo->fetchArray('SELECT idordine FROM dt_righe_ddt WHERE idddt='.prepare($id_record));
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']).'")' );
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']).'") WHERE id = '.prepare($rs[$i]['idordine']));
}
}

View File

@ -293,29 +293,40 @@ switch (post('op')) {
$idanagrafica = $rs[0]['idanagrafica'];
$data = $rs[0]['data'];
$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);
// 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
$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));
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));
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']));
}
}

View File

@ -19,7 +19,7 @@ $idanagrafica = $record[0]['idanagrafica'];
echo '
<div class="row">
<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>';

View File

@ -283,7 +283,7 @@ if ($records[0]['stato'] != 'Pagato' && $records[0]['stato'] != 'Emessa') {
</a>';
// 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);
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">

View File

@ -242,36 +242,42 @@ switch (post('op')) {
for ($i = 0; $i < sizeof($rs); ++$i) {
if (abs($rimanente) > 0) {
if (abs($rs[$i]['da_pagare']) >= abs($rimanente)) {
$query2 = 'SELECT pagato FROM co_scadenziario WHERE id='.prepare($rs[$i]['id']);
$rs2 = $dbo->fetchArray($query2);
$pagato = $rs2[0]['pagato'];
($pagato < 0) ? $sign = -1 : $sign = 1;
$new_value = ((abs($pagato) - abs($rimanente)) * $sign);
if (abs($rs[$i]['pagato']) >= abs($rimanente)) {
$query2 = 'SELECT pagato FROM co_scadenziario WHERE id='.prepare($rs[$i]['id']);
$rs2 = $dbo->fetchArray($query2);
$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...
if ($new_value > 0) {
$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
$dbo->query('DELETE FROM co_movimenti WHERE idmastrino='.prepare($idmastrino).' AND primanota=1');
// Aggiorno lo stato della fattura a "Emessa"
$dbo->query("UPDATE co_documenti SET idstatodocumento=(SELECT id FROM co_statidocumento WHERE descrizione='Emessa') WHERE id=".prepare($iddocumento));
// Aggiorno lo stato della fattura a "Emessa" o "Parzialmente pagato"
$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
$query = 'SELECT idpreventivo FROM co_righe_documenti WHERE iddocumento='.prepare($iddocumento).' AND NOT idpreventivo=0 AND idpreventivo IS NOT NULL';

View File

@ -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_impostazioni` SET `valore` = '100' WHERE `nome` = 'Righe per pagina';
--
-- 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`=9 WHERE `name`='Aggiornamenti';
-- 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` 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('Preventivi', 'Contratti', 'Fatture di vendita', 'Ordini cliente') AND `t2`.`name` = 'Vendite') SET `t1`.`parent` = `t2`.`id`;
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
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`;
-- Creazione collegamento multiplo fra clienti e agenti
CREATE TABLE IF NOT EXISTS `an_anagrafiche_agenti` (
`idanagrafica` int(11) NOT NULL,
@ -85,7 +81,6 @@ CREATE TABLE IF NOT EXISTS `an_anagrafiche_agenti` (
PRIMARY KEY(`idanagrafica`, `idagente`)
) ENGINE=InnoDB;
-- 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|');
@ -105,12 +100,10 @@ CREATE TABLE IF NOT EXISTS `zz_log` (
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
-- Aggiunta tipologia di scadenza
ALTER TABLE `co_scadenziario` ADD `tipo` VARCHAR(50) NOT NULL AFTER `iddocumento`;
UPDATE `co_scadenziario` SET `tipo` = 'fattura';
-- Aggiunto campo bic per l'anagrafica
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
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
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), ",", "#"), ".", ","), "#", "."), "&euro;") 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&agrave;") 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
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;
-- 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
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
-- (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');
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
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
ALTER TABLE `co_righe_preventivi` ADD `prc_guadagno` DECIMAL(5,2) NOT NULL AFTER `sconto`;
-- 2016-11-09 (r1509)
CREATE TABLE IF NOT EXISTS `co_contratti_tipiintervento` (
`idcontratto` int(11) NOT NULL,