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([
|
||||
'@Symfony' => true,
|
||||
'array_syntax' => ['syntax' => 'short'],
|
||||
'yoda_style' => false,
|
||||
])
|
||||
->setFinder($finder);
|
||||
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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
|
||||
|
@ -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';
|
||||
|
@ -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.
|
||||
|
@ -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._
|
||||
|
@ -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
|
||||
|
@ -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 '
|
||||
|
@ -1,5 +1,7 @@
|
||||
# Disable PHP rendering
|
||||
<IfModule mod_php5.c>
|
||||
php_flag engine off
|
||||
|
||||
## Options -ExecCGI
|
||||
AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi
|
||||
</IfModule>
|
||||
<IfModule mod_php7.c>
|
||||
php_flag engine off
|
||||
</IfModule>
|
||||
|
@ -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'];
|
||||
|
||||
|
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);
|
||||
|
||||
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">';
|
||||
|
||||
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'].'">
|
||||
<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>';
|
||||
|
||||
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 '
|
||||
</td>
|
||||
</tr>';
|
||||
|
@ -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];
|
||||
|
||||
@ -499,8 +498,8 @@ switch (post('op')) {
|
||||
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']));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -294,14 +294,19 @@ switch (post('op')) {
|
||||
$data = $rs[0]['data'];
|
||||
$codice = $rs[0]['codice'];
|
||||
|
||||
$costi_intervento = get_costi_intervento($idintervento);
|
||||
//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 = $costi_intervento['manodopera_addebito'] - $costi_intervento['manodopera_scontato'];
|
||||
$subtot = $costi_intervento['manodopera_addebito'];
|
||||
$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'];
|
||||
@ -316,6 +321,12 @@ switch (post('op')) {
|
||||
$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);
|
||||
|
||||
// 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']));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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>';
|
||||
|
||||
|
@ -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">
|
||||
|
@ -242,10 +242,11 @@ switch (post('op')) {
|
||||
|
||||
for ($i = 0; $i < sizeof($rs); ++$i) {
|
||||
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']);
|
||||
$rs2 = $dbo->fetchArray($query2);
|
||||
$pagato = $rs2[0]['pagato'];
|
||||
|
||||
($pagato < 0) ? $sign = -1 : $sign = 1;
|
||||
$new_value = ((abs($pagato) - abs($rimanente)) * $sign);
|
||||
|
||||
@ -261,8 +262,8 @@ switch (post('op')) {
|
||||
|
||||
$rimanente = 0;
|
||||
} else {
|
||||
$dbo->query("UPDATE co_scadenziario SET pagato='0' WHERE id=".prepare($rs[$i]['id']));
|
||||
$rimanente -= abs($rs[$i]['da_pagare']);
|
||||
$dbo->query("UPDATE co_scadenziario SET pagato='0', data_pagamento='0000-00-00' WHERE id=".prepare($rs[$i]['id']));
|
||||
$rimanente -= abs($rs[$i]['pagato']);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -270,8 +271,13 @@ switch (post('op')) {
|
||||
// Eliminazione prima nota
|
||||
$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"
|
||||
$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';
|
||||
|
@ -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), ",", "#"), ".", ","), "#", "."), "€") 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');
|
||||
-- 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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user