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') {
- {[ "type": "textarea", "label": "'.tr('Query prevista').'", "name": "query['.$key.']", "value": "'.$field['query'].'"'; + {[ "type": "textarea", "label": "'.tr('Query prevista').'", "name": "query['.$key.']", "value": "'.prepareToField($field['query']).'"'; if (!$editable) { echo ', "readonly": "1"'; } @@ -374,7 +374,7 @@ if (!empty($options) && $options != 'custom') {
- {[ "type": "textarea", "label": "'.tr('Query').'", "name": "query['.$num.']", "value": "'.$additional['clause'].'"'; + {[ "type": "textarea", "label": "'.tr('Query').'", "name": "query['.$num.']", "value": "'.prepareToField($additional['clause']).'"'; if (!$editable) { echo ', "readonly": "1"'; }