diff --git a/modules/ddt/bulk.php b/modules/ddt/bulk.php
new file mode 100644
index 000000000..eef9b6b47
--- /dev/null
+++ b/modules/ddt/bulk.php
@@ -0,0 +1,161 @@
+fetchArray("SELECT idanagrafica FROM in_interventi WHERE id='".$id_records[$r]."'");
+ $idanagrafica = $rs_idanagrafica[0]['idanagrafica'];
+
+ $q = 'SELECT
+ *, dt_righe_ddt.id AS idriga
+ FROM
+ dt_righe_ddt INNER JOIN dt_ddt ON dt_righe_ddt.idddt=dt_ddt.id
+ WHERE
+ idddt='.prepare($idddt).'
+ AND idddt NOT IN (SELECT idddt FROM co_righe_documenti WHERE idddt IS NOT NULL)
+ ORDER BY
+ dt_ddt.data ASC';
+
+ $rsi = $dbo->fetchArray($q);
+ $n_ddt = sizeof($rsi);
+ $totale_n_ddt += $n_ddt;
+
+ // Proseguo solo se i ddt scelti sono fatturabili
+ if ($n_ddt > 0) {
+ //Se non c'è già una fattura appena creata per questo cliente, creo una fattura nuova
+ if (empty($iddocumento_cliente[$idanagrafica])) {
+ $data = date('Y-m-d');
+ $dir = 'entrata';
+ $idtipodocumento = '2';
+
+ $numero = get_new_numerofattura($data);
+
+ $numero_esterno = get_new_numerosecondariofattura($data);
+ $idconto = get_var('Conto predefinito fatture di vendita');
+
+ $campo = ($dir == 'entrata') ? 'idpagamento_vendite' : 'idpagamento_acquisti';
+
+ // Tipo di pagamento predefinito dall'anagrafica
+ $query = 'SELECT id FROM co_pagamenti WHERE id=(SELECT '.$campo.' AS pagamento FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica).')';
+ $rs = $dbo->fetchArray($query);
+ $idpagamento = $rs[0]['id'];
+
+ // Se alla non è stato associato un pagamento predefinito al cliente, leggo il pagamento dalle impostazioni
+ if ($idpagamento == '') {
+ $idpagamento = get_var('Tipo di pagamento predefinito');
+ }
+
+ // Creazione nuova fattura
+ $dbo->query('INSERT INTO co_documenti (numero, numero_esterno, idanagrafica, idconto, idtipodocumento, idpagamento, data, idstatodocumento, idsede) VALUES ('.prepare($numero).', '.prepare($numero_esterno).', '.prepare($idanagrafica).', '.prepare($idconto).', '.prepare($idtipodocumento).', '.prepare($idpagamento).', '.prepare($data).", (SELECT `id` FROM `co_statidocumento` WHERE `descrizione`='Bozza'), (SELECT idsede_fatturazione FROM an_anagrafiche WHERE idanagrafica=".prepare($idanagrafica).') )');
+ $iddocumento = $dbo->lastInsertedID();
+ $iddocumento_cliente[$idanagrafica] = $iddocumento;
+ }
+
+ // Inserimento righe
+ for ($i = 0; $i < sizeof($rsi); ++$i) {
+ $qta = $rsi[$i]['qta'] - $rsi[$i]['qta_evasa'];
+
+ if ($qta > 0) {
+ $dbo->query('
+ INSERT INTO co_righe_documenti(
+ iddocumento,
+ idarticolo,
+ idddt,
+ idiva,
+ desc_iva,
+ iva,
+ iva_indetraibile,
+ is_descrizione,
+ descrizione,
+ subtotale,
+ sconto,
+ sconto_unitario,
+ sconto_prc,
+ tipo_sconto,
+ idgruppo,
+ abilita_serial,
+ um,
+ qta,
+ `order`)
+ VALUES(
+ '.$iddocumento_cliente[$idanagrafica].',
+ '.prepare($rsi[$i]['idarticolo']).',
+ '.prepare($rsi[$i]['idddt']).',
+ '.prepare($rsi[$i]['idiva']).',
+ '.prepare($rsi[$i]['desc_iva']).',
+ '.prepare($rsi[$i]['iva']).',
+ '.prepare($rsi[$i]['iva_indetraibile']).',
+ '.prepare($rsi[$i]['is_descrizione']).',
+ '.prepare($rsi[$i]['descrizione']).',
+ '.prepare($rsi[$i]['subtotale']).',
+ '.prepare($rsi[$i]['sconto']).',
+ '.prepare($rsi[$i]['sconto_unitario']).',
+ '.prepare($rsi[$i]['sconto_prc']).',
+ '.prepare($rsi[$i]['tipo_sconto']).',
+ '.prepare($rsi[$i]['idgruppo']).',
+ '.prepare($rsi[$i]['abilita_serial']).',
+ '.prepare($rsi[$i]['um']).',
+ '.prepare($qta).',
+ (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($iddocumento).')
+ )');
+
+ // Aggiorno la quantità evasa
+ $dbo->query('UPDATE dt_righe_ddt SET qta_evasa = qta WHERE id='.prepare($rsi[$i]['idriga']));
+
+ // Aggiorno lo stato ddt
+ $dbo->query('UPDATE dt_ddt SET idstatoddt = (SELECT id FROM dt_statiddt WHERE descrizione="Fatturato") WHERE id='.prepare($rsi[$i]['idddt']));
+ }
+
+ // Ricalcolo inps, ritenuta e bollo
+ if ($dir == 'entrata') {
+ ricalcola_costiagg_fattura($iddocumento_cliente[$idanagrafica]);
+ } else {
+ ricalcola_costiagg_fattura($iddocumento_cliente[$idanagrafica], 0, 0, 0);
+ }
+ }
+ }
+ }
+
+ if ($totale_n_ddt > 0) {
+ $_SESSION['infos'][] = tr('_NUM_ ddt fatturati!', [
+ '_NUM_' => $totale_n_ddt,
+ ]);
+ } else {
+ $_SESSION['warnings'][] = tr('Nessun ddt fatturato!');
+ }
+
+ break;
+}
+
+return [
+ 'export-bulk' => [
+ 'text' => tr('Esporta stampe'),
+ 'data' => [
+ 'msg' => tr('Vuoi davvero esportare tutte le stampe in un archivio?'),
+ 'button' => tr('Procedi'),
+ 'class' => 'btn btn-lg btn-warning',
+ 'blank' => true,
+ ],
+ ],
+
+ 'creafatturavendita' => [
+ 'text' => tr('Crea fattura'),
+ 'data' => [
+ 'msg' => tr('Vuoi davvero creare una fattura per questi interventi?'),
+ 'button' => tr('Procedi'),
+ 'class' => 'btn btn-lg btn-warning',
+ 'blank' => false,
+ ],
+ ],
+];
diff --git a/modules/ddt/edit.php b/modules/ddt/edit.php
index 98099afb4..2f48978e1 100644
--- a/modules/ddt/edit.php
+++ b/modules/ddt/edit.php
@@ -62,7 +62,7 @@ if ($dir == 'uscita') {
- {[ "type": "select", "label": "", "name": "idsede", "values": "query=SELECT id, CONCAT_WS(', ', nomesede, citta) AS descrizione FROM an_sedi WHERE (idanagrafica='' OR idanagrafica=(SELECT valore FROM zz_settings WHERE nome='Azienda predefinita')) UNION SELECT '0' AS id, 'Sede legale' AS descrizione ORDER BY descrizione", "value": "$idsede$" ]}
+ {[ "type": "select", "label": "", "name": "idsede", "values": "query=SELECT id, CONCAT_WS(', ', nomesede, citta) AS descrizione FROM an_sedi WHERE (idanagrafica='$idanagrafica$' OR idanagrafica=(SELECT valore FROM zz_settings WHERE nome='Azienda predefinita')) UNION SELECT '0' AS id, 'Sede legale' AS descrizione ORDER BY descrizione", "value": "$idsede$" ]}
@@ -128,11 +128,17 @@ if ($dir == 'uscita') {
if ($records[0]['stato'] != 'Evaso') {
?>
-
+
+
+
-
+
+
+
-
+
+
+
diff --git a/modules/interventi/add.php b/modules/interventi/add.php
index 88ad0d929..a69a1f1ac 100644
--- a/modules/interventi/add.php
+++ b/modules/interventi/add.php
@@ -255,6 +255,14 @@ if (empty($new_codice)) {
$("#orario_inizio").on("dp.change", function (e) {
$("#orario_fine").data("DateTimePicker").minDate(e.date);
});
+
+ // Refresh modulo dopo la chiusura di una pianificazione attività derivante dalle attività
+ // da pianificare, altrimenti il promemoria non si vede più nella lista a destra
+ if( $('input[name=idcontratto_riga]').val() != undefined ){
+ $('#bs-popup button.close').on('click', function(){
+ location.reload();
+ });
+ }
});
$('#idanagrafica').change( function(){
diff --git a/modules/interventi/bulk.php b/modules/interventi/bulk.php
index b6bda612f..e3db1fca7 100644
--- a/modules/interventi/bulk.php
+++ b/modules/interventi/bulk.php
@@ -1,9 +1,12 @@
fetchArray("SELECT idanagrafica FROM in_interventi WHERE id='".$id_records[0]."'");
+
+ $idanagrafica = $rs_idanagrafica[0]['idanagrafica'];
+ $data = date('Y-m-d');
+ $dir = 'entrata';
+ $idtipodocumento = '2';
+
+ $numero = get_new_numerofattura($data);
+
+ $numero_esterno = get_new_numerosecondariofattura($data);
+ $idconto = get_var('Conto predefinito fatture di vendita');
+
+ $campo = ($dir == 'entrata') ? 'idpagamento_vendite' : 'idpagamento_acquisti';
+
+ // Tipo di pagamento predefinito dall'anagrafica
+ $query = 'SELECT id FROM co_pagamenti WHERE id=(SELECT '.$campo.' AS pagamento FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica).')';
+ $rs = $dbo->fetchArray($query);
+ $idpagamento = $rs[0]['id'];
+
+ // Se la fattura è di vendita e non è stato associato un pagamento predefinito al cliente leggo il pagamento dalle impostazioni
+ if ($dir == 'entrata' && $idpagamento == '') {
+ $idpagamento = get_var('Tipo di pagamento predefinito');
+ }
+
+
+ $n_interventi = 0;
+
+ //inserisco righe
+ for( $i=0; $ifetchArray($q);
+
+ if (count($rs)>0){
+
+ //al primo ciclo preparo la fattura
+ if ($n_interventi == 0){
+ //preparo fattura
+ $dbo->query('INSERT INTO co_documenti (numero, numero_esterno, idanagrafica, idconto, idtipodocumento, idpagamento, data, idstatodocumento, idsede) VALUES ('.prepare($numero).', '.prepare($numero_esterno).', '.prepare($idanagrafica).', '.prepare($idconto).', '.prepare($idtipodocumento).', '.prepare($idpagamento).', '.prepare($data).", (SELECT `id` FROM `co_statidocumento` WHERE `descrizione`='Bozza'), (SELECT idsede_fatturazione FROM an_anagrafiche WHERE idanagrafica=".prepare($idanagrafica).') )');
+ $iddocumento = $dbo->lastInsertedID();
+ }
+
+ $n_interventi++;
+
+ $subtot_consuntivo = $rs[0]['tot_ore_consuntivo'] + $rs[0]['tot_km_consuntivo'];
+
+ //Calcolo sconto se è stato arrotondato il prezzo
+ $subtot = $subtot_consuntivo;
+ $sconto = 0;
+
+ //Aggiungo un'eventuale sconto in base al listino del cliente
+ if( $prc_sconto < 0 ){
+ $sconto += $subtot/100*abs($prc_sconto);
+ }
+
+ $descrizione = "Intervento numero ".$rs[0]['id']." del ".date( "d/m/Y", strtotime($rs[0]['data']) )."\n".html_entity_decode ( $rs[0]['descrizione'] );
+
+ //Aggiunta impianti
+ $rsi = $dbo->fetchArray("SELECT * FROM my_impianti_interventi INNER JOIN my_impianti ON my_impianti.id=my_impianti_interventi.idimpianto WHERE idintervento=\"".$rs[0]['id']."\"");
+ if( sizeof($rsi) > 0 ){
+ $descrizione .= "\nIMPIANTI:\n";
+
+ for( $b=0; $bfetchArray("SELECT mg_articoli.descrizione, mg_articoli.codice, mg_articoli.prezzo_vendita, mg_articoli_interventi.qta, mg_articoli_interventi.sconto FROM mg_articoli_interventi INNER JOIN mg_articoli ON mg_articoli_interventi.idarticolo=mg_articoli.id WHERE idintervento=\"".$rs[0]['id']."\"");
+
+ if( sizeof($rsa) > 0 ){
+ $descrizione .= "\nARTICOLI UTILIZZATI:\n";
+
+ for( $a=0; $afetchArray("SELECT descrizione, qta, prezzo_vendita FROM in_righe_interventi WHERE idintervento=\"".$rs[0]['id']."\"");
+
+ if( sizeof($rsa) > 0 ){
+ $descrizione .= "\nALTRI COSTI:\n";
+
+ for( $a=0; $afetchArray("SELECT idanagrafica, (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento='".$rs[0]['id']."') AS data FROM `in_interventi` WHERE id='".$rs[0]['id']."'");
+ $idanagrafica = $rs[0]['idanagrafica'];
+ $data = $rs[0]['data'];
+
+
+ //Calcolo iva
+ $idiva = get_var("Iva predefinita");
+ $query = "SELECT * FROM co_iva WHERE id='".$idiva."'";
+ $rs = $dbo->fetchArray($query);
+
+ $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='".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='".get_var("Percentuale ritenuta d'acconto")."'";
+ $rs = $dbo->fetchArray($query);
+ $ritenutaacconto = ($subtot+$rivalsainps) / 100 * $rs[0]['percentuale'];
+
+
+ //Aggiunta riga intervento sul documento
+ $query1 = "INSERT INTO co_righe_documenti( iddocumento, idintervento, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto ) VALUES( \"$iddocumento\", \"$idintervento\", \"".$idiva."\", \"$desc_iva\", \"$iva\", \"$iva_indetraibile\", \"$descrizione\", \"$subtot\", \"".$sconto."\", \"ore\", \"1\", \"".get_var("Percentuale rivalsa INPS")."\", \"".$rivalsainps."\", \"".get_var("Percentuale ritenuta d'acconto")."\", \"".$ritenutaacconto."\" )";
+ if( $dbo->query( $query1 ) ){
+
+ //Ricalcolo inps, ritenuta e bollo
+ if( $dir=='entrata' ){
+ ricalcola_costiagg_fattura($iddocumento);
+ }else{
+ ricalcola_costiagg_fattura($iddocumento, 0, 0, 0);
+ }
+
+ //Metto l'intervento in stato "Fatturato"
+ $dbo->query("UPDATE in_interventi SET idstatointervento='FAT' WHERE id='$idintervento'");
+
+ }
+
+ }
+ }
+
+
+ if ($n_interventi>0) {
+
+ $_SESSION['infos'][] = tr('Fattura _NUM_ creata!', [
+ '_NUM_' => $numero_esterno,
+ ]);
+
+ $_SESSION['infos'][] = tr('_NUM_ interventi fatturati!', [
+ '_NUM_' => $n_interventi,
+ ]);
+
+ }else{
+ $_SESSION['warnings'][] = tr('Nessuna attività fatturata!');
+ }
+
+
+ break;
}
return [
- 'export-bulk' => [
+
+ 'export-bulk' => [
'text' => tr('Esporta stampe'),
'data' => [
'msg' => tr('Vuoi davvero esportare tutte le stampe in un archivio?'),
@@ -64,4 +237,17 @@ return [
'blank' => true,
],
],
+
+ 'creafatturavendita' => [
+ 'text' => tr('Crea fattura'),
+ 'data' => [
+ 'msg' => tr('Vuoi davvero creare una fattura per questi interventi?'),
+ 'button' => tr('Procedi'),
+ 'class' => 'btn btn-lg btn-warning',
+ 'blank' => false,
+ ],
+ ],
+
];
+
+?>
\ No newline at end of file
diff --git a/modules/viste/edit.php b/modules/viste/edit.php
index d1e9c447d..e4bd46b53 100644
--- a/modules/viste/edit.php
+++ b/modules/viste/edit.php
@@ -136,7 +136,7 @@ if (!empty($options) && $options != 'custom') {