2017-08-04 16:28:16 +02:00
< ? php
include_once __DIR__ . '/../../core.php' ;
/**
* Recupera il totale delle ore spese per un intervento .
*
2018-06-27 18:58:50 +02:00
* @ param int $idintervento
2017-08-04 16:28:16 +02:00
*/
function get_ore_intervento ( $idintervento )
{
$dbo = Database :: getConnection ();
$totale_ore = 0 ;
$rs = $dbo -> fetchArray ( 'SELECT idintervento, TIMESTAMPDIFF( MINUTE, orario_inizio, orario_fine ) / 60 AS tot_ore FROM in_interventi_tecnici WHERE idintervento = ' . prepare ( $idintervento ));
for ( $i = 0 ; $i < count ( $rs ); ++ $i ) {
$totale_ore = $totale_ore + $rs [ $i ][ 'tot_ore' ];
}
return $totale_ore ;
}
/**
* Funzione per collegare gli articoli , usati in un intervento , ai rispettivi impianti .
*
2018-06-27 18:58:50 +02:00
* @ param int $idintervento
* @ param int $idimpianto
* @ param int $idarticolo
* @ param int $qta
2017-08-04 16:28:16 +02:00
*/
function link_componente_to_articolo ( $idintervento , $idimpianto , $idarticolo , $qta )
{
$dbo = Database :: getConnection ();
if ( ! empty ( $idimpianto ) && ! empty ( $idintervento )) {
//Leggo la data dell'intervento
$rs = $dbo -> fetchArray ( " SELECT DATE_FORMAT(MIN(orario_inizio),'%Y-%m-%d') AS data FROM in_interventi_tecnici WHERE idintervento= " . prepare ( $idintervento ));
$data = $rs [ 0 ][ 'data' ];
$rs = $dbo -> fetchArray ( 'SELECT componente_filename, contenuto FROM mg_articoli WHERE id=' . prepare ( $idarticolo ));
//Se l'articolo aggiunto è collegato a un file .ini, aggiungo il componente all'impianto selezionato
if ( count ( $rs ) == 1 && $rs [ 0 ][ 'componente_filename' ] != '' ) {
//Inserisco il componente tante volte quante la quantità degli articoli inseriti
for ( $q = 0 ; $q < $qta ; ++ $q ) {
$dbo -> query ( 'INSERT INTO my_impianto_componenti(idimpianto, idintervento, nome, data, filename, contenuto) VALUES (' . prepare ( $idimpianto ) . ', ' . prepare ( $idintervento ) . ', ' . prepare ( \Util\Ini :: getValue ( $rs [ 0 ][ 'componente_filename' ], 'Nome' )) . ', ' . prepare ( $data ) . ', ' . prepare ( $rs [ 0 ][ 'componente_filename' ]) . ', ' . prepare ( $rs [ 0 ][ 'contenuto' ]) . ')' );
}
}
}
}
2018-08-28 15:39:51 +02:00
function add_tecnico ( $idintervento , $idtecnico , $inizio , $fine , $idcontratto = null )
2017-08-04 16:28:16 +02:00
{
$dbo = Database :: getConnection ();
2018-08-31 17:33:33 +02:00
// Controllo sull'identità del tecnico
$tecnico = $dbo -> fetchArray ( " SELECT an_anagrafiche.idanagrafica FROM an_anagrafiche INNER JOIN an_tipianagrafiche_anagrafiche ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica INNER JOIN an_tipianagrafiche ON an_tipianagrafiche.idtipoanagrafica=an_tipianagrafiche_anagrafiche.idtipoanagrafica WHERE an_anagrafiche.idanagrafica = " . prepare ( $idtecnico ) . " AND an_tipianagrafiche.descrizione = 'Tecnico' " );
if ( empty ( $tecnico )) {
return false ;
}
2018-05-11 17:44:39 +02:00
$rs = $dbo -> fetchArray ( 'SELECT idanagrafica, idsede, idtipointervento FROM in_interventi WHERE id=' . prepare ( $idintervento ));
$idanagrafica = $rs [ 0 ][ 'idanagrafica' ];
2017-08-04 16:28:16 +02:00
$idsede = $rs [ 0 ][ 'idsede' ];
2018-05-11 17:44:39 +02:00
$idtipointervento = $rs [ 0 ][ 'idtipointervento' ];
2018-06-26 14:30:26 +02:00
2017-08-04 16:28:16 +02:00
// Calcolo km in base a quelli impostati nell'anagrafica
// Nessuna sede
if ( $idsede == '-1' ) {
$km = 0 ;
}
// Sede legale
elseif ( empty ( $idsede )) {
$rs2 = $dbo -> fetchArray ( 'SELECT km FROM an_anagrafiche WHERE idanagrafica=' . prepare ( $idanagrafica ));
$km = $rs2 [ 0 ][ 'km' ];
}
// Sede secondaria
else {
$rs2 = $dbo -> fetchArray ( 'SELECT km FROM an_sedi WHERE id=' . prepare ( $idsede ));
$km = $rs2 [ 0 ][ 'km' ];
}
$km = empty ( $km ) ? 0 : $km ;
// Calcolo il totale delle ore lavorate
$diff = date_diff ( date_create ( $inizio ), date_create ( $fine ));
2018-02-18 19:53:23 +01:00
$ore = ( $diff -> h + ( $diff -> i / 60 ));
2017-08-04 16:28:16 +02:00
// Leggo i costi unitari dalle tariffe se almeno un valore è stato impostato
$rsc = $dbo -> fetchArray ( 'SELECT * FROM in_tariffe WHERE idtecnico=' . prepare ( $idtecnico ) . ' AND idtipointervento=' . prepare ( $idtipointervento ));
if ( $rsc [ 0 ][ 'costo_ore' ] != 0 || $rsc [ 0 ][ 'costo_km' ] != 0 || $rsc [ 0 ][ 'costo_dirittochiamata' ] != 0 || $rsc [ 0 ][ 'costo_ore_tecnico' ] != 0 || $rsc [ 0 ][ 'costo_km_tecnico' ] != 0 || $rsc [ 0 ][ 'costo_dirittochiamata_tecnico' ] != 0 ) {
$costo_ore = $rsc [ 0 ][ 'costo_ore' ];
$costo_km = $rsc [ 0 ][ 'costo_km' ];
$costo_dirittochiamata = $rsc [ 0 ][ 'costo_dirittochiamata' ];
$costo_ore_tecnico = $rsc [ 0 ][ 'costo_ore_tecnico' ];
$costo_km_tecnico = $rsc [ 0 ][ 'costo_km_tecnico' ];
$costo_dirittochiamata_tecnico = $rsc [ 0 ][ 'costo_dirittochiamata_tecnico' ];
}
// ...altrimenti se non c'è una tariffa per il tecnico leggo i costi globali
else {
$rsc = $dbo -> fetchArray ( 'SELECT * FROM in_tipiintervento WHERE idtipointervento=' . prepare ( $idtipointervento ));
$costo_ore = $rsc [ 0 ][ 'costo_orario' ];
$costo_km = $rsc [ 0 ][ 'costo_km' ];
$costo_dirittochiamata = $rsc [ 0 ][ 'costo_diritto_chiamata' ];
$costo_ore_tecnico = $rsc [ 0 ][ 'costo_orario_tecnico' ];
$costo_km_tecnico = $rsc [ 0 ][ 'costo_km_tecnico' ];
$costo_dirittochiamata_tecnico = $rsc [ 0 ][ 'costo_diritto_chiamata_tecnico' ];
}
// Leggo i costi unitari da contratto se l'intervento è legato ad un contratto e c'è almeno un record...
if ( ! empty ( $idcontratto )) {
$rsc = $dbo -> fetchArray ( 'SELECT * FROM co_contratti_tipiintervento WHERE idcontratto=' . prepare ( $idcontratto ) . ' AND idtipointervento=' . prepare ( $idtipointervento ));
if ( count ( $rsc ) == 1 ) {
$costo_ore = $rsc [ 0 ][ 'costo_ore' ];
$costo_km = $rsc [ 0 ][ 'costo_km' ];
$costo_dirittochiamata = $rsc [ 0 ][ 'costo_dirittochiamata' ];
$costo_ore_tecnico = $rsc [ 0 ][ 'costo_ore_tecnico' ];
$costo_km_tecnico = $rsc [ 0 ][ 'costo_km_tecnico' ];
$costo_dirittochiamata_tecnico = $rsc [ 0 ][ 'costo_dirittochiamata_tecnico' ];
}
}
2017-09-14 16:20:11 +02:00
// Azzeramento forzato del diritto di chiamata nel caso questa non sia la prima sessione dell'intervento per il giorno di inizio [Luca]
$rs = $dbo -> fetchArray ( 'SELECT id FROM in_interventi_tecnici WHERE (DATE(orario_inizio)=DATE(' . prepare ( $inizio ) . ') OR DATE(orario_fine)=DATE(' . prepare ( $inizio ) . ')) AND idintervento=' . prepare ( $idintervento ));
if ( ! empty ( $rs )) {
$costo_dirittochiamata_tecnico = 0 ;
$costo_dirittochiamata = 0 ;
}
2017-08-04 16:28:16 +02:00
// Inserisco le ore dei tecnici nella tabella "in_interventi_tecnici"
$dbo -> insert ( 'in_interventi_tecnici' , [
'idintervento' => $idintervento ,
'idtipointervento' => $idtipointervento ,
'idtecnico' => $idtecnico ,
'km' => $km ,
'orario_inizio' => $inizio ,
'orario_fine' => $fine ,
'ore' => $ore ,
'prezzo_ore_unitario' => $costo_ore ,
'prezzo_km_unitario' => $costo_km ,
'prezzo_ore_consuntivo' => $costo_ore * $ore + $costo_dirittochiamata ,
'prezzo_km_consuntivo' => 0 ,
'prezzo_dirittochiamata' => $costo_dirittochiamata ,
'prezzo_ore_unitario_tecnico' => $costo_ore_tecnico ,
'prezzo_km_unitario_tecnico' => $costo_km_tecnico ,
'prezzo_ore_consuntivo_tecnico' => $costo_ore_tecnico * $ore + $costo_dirittochiamata_tecnico ,
'prezzo_km_consuntivo_tecnico' => 0 ,
'prezzo_dirittochiamata_tecnico' => $costo_dirittochiamata_tecnico ,
]);
2018-08-31 17:33:33 +02:00
return true ;
2017-08-04 16:28:16 +02:00
}
2017-09-06 15:29:51 +02:00
function get_costi_intervento ( $id_intervento )
{
$dbo = Database :: getConnection ();
2018-07-09 10:44:54 +02:00
$decimals = setting ( 'Cifre decimali per importi' );
2018-06-26 14:30:26 +02:00
2018-07-08 18:11:17 +02:00
$idiva = setting ( 'Iva predefinita' );
2018-03-19 18:11:51 +01:00
$rs_iva = $dbo -> fetchArray ( 'SELECT descrizione, percentuale, indetraibile FROM co_iva WHERE id=' . prepare ( $idiva ));
2017-09-06 15:29:51 +02:00
$tecnici = $dbo -> fetchArray ( ' SELECT
COALESCE ( SUM (
2018-01-19 22:39:01 +01:00
ROUND ( prezzo_ore_consuntivo_tecnico , '.$decimals.' )
2017-09-06 15:29:51 +02:00
), 0 ) AS manodopera_costo ,
COALESCE ( SUM (
2018-01-19 22:39:01 +01:00
ROUND ( prezzo_ore_consuntivo , '.$decimals.' )
2017-09-06 15:29:51 +02:00
), 0 ) AS manodopera_addebito ,
COALESCE ( SUM (
2018-01-19 22:39:01 +01:00
ROUND ( prezzo_ore_consuntivo , '.$decimals.' ) - ROUND ( sconto , '.$decimals.' )
2017-09-06 15:29:51 +02:00
), 0 ) AS manodopera_scontato ,
2018-01-04 11:03:23 +01:00
COALESCE ( SUM (
ROUND ( prezzo_dirittochiamata_tecnico , '.$decimals.' )
), 0 ) AS dirittochiamata_costo ,
COALESCE ( SUM (
ROUND ( prezzo_dirittochiamata , '.$decimals.' )
), 0 ) AS dirittochiamata_addebito ,
COALESCE ( SUM (
ROUND ( prezzo_dirittochiamata , '.$decimals.' )
), 0 ) AS dirittochiamata_scontato ,
2017-09-06 15:29:51 +02:00
COALESCE ( SUM (
ROUND ( prezzo_km_consuntivo_tecnico , '.$decimals.' )
), 0 ) AS viaggio_costo ,
COALESCE ( SUM (
ROUND ( prezzo_km_consuntivo , '.$decimals.' )
), 0 ) viaggio_addebito ,
COALESCE ( SUM (
ROUND ( prezzo_km_consuntivo , '.$decimals.' ) - ROUND ( scontokm , '.$decimals.' )
), 0 ) AS viaggio_scontato
FROM in_interventi_tecnici WHERE idintervento = ' . prepare ( $id_intervento ));
$articoli = $dbo -> fetchArray ( ' SELECT
COALESCE ( SUM (
ROUND ( prezzo_acquisto , '.$decimals.' ) * ROUND ( qta , '.$decimals.' )
), 0 ) AS ricambi_costo ,
COALESCE ( SUM (
ROUND ( prezzo_vendita , '.$decimals.' ) * ROUND ( qta , '.$decimals.' )
), 0 ) AS ricambi_addebito ,
COALESCE ( SUM (
2017-09-11 13:08:50 +02:00
ROUND ( prezzo_vendita , '.$decimals.' ) * ROUND ( qta , '.$decimals.' ) - ROUND ( sconto , '.$decimals.' )
2018-03-19 18:11:51 +01:00
), 0 ) AS ricambi_scontato ,
ROUND (
( SELECT percentuale FROM co_iva WHERE co_iva . id = mg_articoli_interventi . idiva ), '.$decimals.'
) AS ricambi_iva
2017-09-06 15:29:51 +02:00
FROM mg_articoli_interventi WHERE idintervento = ' . prepare ( $id_intervento ));
$altro = $dbo -> fetchArray ( ' SELECT
COALESCE ( SUM (
ROUND ( prezzo_acquisto , '.$decimals.' ) * ROUND ( qta , '.$decimals.' )
), 0 ) AS altro_costo ,
COALESCE ( SUM (
ROUND ( prezzo_vendita , '.$decimals.' ) * ROUND ( qta , '.$decimals.' )
), 0 ) AS altro_addebito ,
COALESCE ( SUM (
2017-09-11 13:08:50 +02:00
ROUND ( prezzo_vendita , '.$decimals.' ) * ROUND ( qta , '.$decimals.' ) - ROUND ( sconto , '.$decimals.' )
2018-03-19 18:11:51 +01:00
), 0 ) AS altro_scontato ,
ROUND (
( SELECT percentuale FROM co_iva WHERE co_iva . id = in_righe_interventi . idiva ), '.$decimals.'
) AS altro_iva
2017-09-06 15:29:51 +02:00
FROM in_righe_interventi WHERE idintervento = ' . prepare ( $id_intervento ));
$result = array_merge ( $tecnici [ 0 ], $articoli [ 0 ], $altro [ 0 ]);
2017-09-14 17:37:32 +02:00
$result [ 'totale_costo' ] = sum ([
2017-09-06 15:29:51 +02:00
$result [ 'manodopera_costo' ],
2018-01-04 11:03:23 +01:00
$result [ 'dirittochiamata_costo' ],
2017-09-06 15:29:51 +02:00
$result [ 'viaggio_costo' ],
$result [ 'ricambi_costo' ],
$result [ 'altro_costo' ],
]);
$result [ 'totale_addebito' ] = sum ([
$result [ 'manodopera_addebito' ],
2018-01-04 11:03:23 +01:00
$result [ 'dirittochiamata_addebito' ],
2017-09-06 15:29:51 +02:00
$result [ 'viaggio_addebito' ],
$result [ 'ricambi_addebito' ],
$result [ 'altro_addebito' ],
]);
2017-09-11 13:08:50 +02:00
$result [ 'totale_scontato' ] = sum ([
2017-09-06 15:29:51 +02:00
$result [ 'manodopera_scontato' ],
2018-01-04 11:03:23 +01:00
$result [ 'dirittochiamata_scontato' ],
2017-09-06 15:29:51 +02:00
$result [ 'viaggio_scontato' ],
$result [ 'ricambi_scontato' ],
$result [ 'altro_scontato' ],
]);
2018-06-26 14:30:26 +02:00
2018-03-19 18:11:51 +01:00
$result [ 'iva_costo' ] = sum ([
2018-06-26 14:30:26 +02:00
$result [ 'manodopera_costo' ] * $rs_iva [ 0 ][ 'percentuale' ] / 100 ,
$result [ 'dirittochiamata_costo' ] * $rs_iva [ 0 ][ 'percentuale' ] / 100 ,
$result [ 'viaggio_costo' ] * $rs_iva [ 0 ][ 'percentuale' ] / 100 ,
$result [ 'ricambi_costo' ] * $result [ 'ricambi_iva' ] / 100 ,
$result [ 'altro_costo' ] * $result [ 'altro_iva' ] / 100 ,
2018-03-19 18:11:51 +01:00
]);
$result [ 'iva_addebito' ] = sum ([
2018-06-26 14:30:26 +02:00
$result [ 'manodopera_addebito' ] * $rs_iva [ 0 ][ 'percentuale' ] / 100 ,
$result [ 'dirittochiamata_addebito' ] * $rs_iva [ 0 ][ 'percentuale' ] / 100 ,
$result [ 'viaggio_addebito' ] * $rs_iva [ 0 ][ 'percentuale' ] / 100 ,
$result [ 'ricambi_addebito' ] * $result [ 'ricambi_iva' ] / 100 ,
$result [ 'altro_addebito' ] * $result [ 'altro_iva' ] / 100 ,
2018-03-19 18:11:51 +01:00
]);
$result [ 'iva_totale' ] = sum ([
2018-06-26 14:30:26 +02:00
$result [ 'manodopera_scontato' ] * $rs_iva [ 0 ][ 'percentuale' ] / 100 ,
$result [ 'dirittochiamata_scontato' ] * $rs_iva [ 0 ][ 'percentuale' ] / 100 ,
$result [ 'viaggio_scontato' ] * $rs_iva [ 0 ][ 'percentuale' ] / 100 ,
$result [ 'ricambi_scontato' ] * $result [ 'ricambi_iva' ] / 100 ,
$result [ 'altro_scontato' ] * $result [ 'altro_iva' ] / 100 ,
2018-03-19 18:11:51 +01:00
]);
2018-06-26 14:30:26 +02:00
2018-03-19 18:11:51 +01:00
$result [ 'totaleivato_costo' ] = sum ([
2018-06-26 14:30:26 +02:00
$result [ 'manodopera_costo' ] + ( $result [ 'manodopera_costo' ] * $rs_iva [ 0 ][ 'percentuale' ] / 100 ),
$result [ 'dirittochiamata_costo' ] + ( $result [ 'dirittochiamata_costo' ] * $rs_iva [ 0 ][ 'percentuale' ] / 100 ),
$result [ 'viaggio_costo' ] + ( $result [ 'viaggio_costo' ] * $rs_iva [ 0 ][ 'percentuale' ] / 100 ),
$result [ 'ricambi_costo' ] + ( $result [ 'ricambi_costo' ] * $result [ 'ricambi_iva' ] / 100 ),
$result [ 'altro_costo' ] + ( $result [ 'altro_costo' ] * $result [ 'altro_iva' ] / 100 ),
2018-03-19 18:11:51 +01:00
]);
$result [ 'totaleivato_addebito' ] = sum ([
2018-06-26 14:30:26 +02:00
$result [ 'manodopera_addebito' ] + ( $result [ 'manodopera_addebito' ] * $rs_iva [ 0 ][ 'percentuale' ] / 100 ),
$result [ 'dirittochiamata_addebito' ] + ( $result [ 'dirittochiamata_addebito' ] * $rs_iva [ 0 ][ 'percentuale' ] / 100 ),
$result [ 'viaggio_addebito' ] + ( $result [ 'viaggio_addebito' ] * $rs_iva [ 0 ][ 'percentuale' ] / 100 ),
$result [ 'ricambi_addebito' ] + ( $result [ 'ricambi_addebito' ] * $result [ 'ricambi_iva' ] / 100 ),
$result [ 'altro_addebito' ] + ( $result [ 'altro_addebito' ] * $result [ 'altro_iva' ] / 100 ),
2018-03-19 18:11:51 +01:00
]);
$result [ 'totale' ] = sum ([
2018-06-26 14:30:26 +02:00
$result [ 'manodopera_scontato' ] + ( $result [ 'manodopera_scontato' ] * $rs_iva [ 0 ][ 'percentuale' ] / 100 ),
$result [ 'dirittochiamata_scontato' ] + ( $result [ 'dirittochiamata_scontato' ] * $rs_iva [ 0 ][ 'percentuale' ] / 100 ),
$result [ 'viaggio_scontato' ] + ( $result [ 'viaggio_scontato' ] * $rs_iva [ 0 ][ 'percentuale' ] / 100 ),
$result [ 'ricambi_scontato' ] + ( $result [ 'ricambi_scontato' ] * $result [ 'ricambi_iva' ] / 100 ),
$result [ 'altro_scontato' ] + ( $result [ 'altro_scontato' ] * $result [ 'altro_iva' ] / 100 ),
2018-03-19 18:11:51 +01:00
]);
2017-09-06 15:29:51 +02:00
2017-09-19 16:20:44 +02:00
// Calcolo dello sconto incondizionato
2017-09-06 15:29:51 +02:00
$sconto = $dbo -> fetchArray ( 'SELECT sconto_globale, tipo_sconto_globale FROM in_interventi WHERE id=' . prepare ( $id_intervento ))[ 0 ];
2018-03-19 18:11:51 +01:00
$result [ 'sconto_globale' ] = ( $sconto [ 'tipo_sconto_globale' ] == 'PRC' ) ? $result [ 'totale' ] * $sconto [ 'sconto_globale' ] / 100 : $sconto [ 'sconto_globale' ];
2017-09-06 15:29:51 +02:00
$result [ 'sconto_globale' ] = round ( $result [ 'sconto_globale' ], $decimals );
2018-06-26 14:30:26 +02:00
2018-03-19 18:11:51 +01:00
$result [ 'totale_scontato' ] = sum ( $result [ 'totale_scontato' ], - $result [ 'sconto_globale' ]);
2018-06-26 14:30:26 +02:00
$result [ 'iva_totale' ] = sum ( $result [ 'iva_totale' ], - ( $result [ 'sconto_globale' ] * $rs_iva [ 0 ][ 'percentuale' ] / 100 ));
$result [ 'totale' ] = sum ( $result [ 'totale' ], - ( $result [ 'sconto_globale' ] + ( $result [ 'sconto_globale' ] * $rs_iva [ 0 ][ 'percentuale' ] / 100 )));
2017-09-06 15:29:51 +02:00
return $result ;
}
2018-07-17 12:05:21 +02:00
/**
* Calcola le ore presenti tra due date .
*
* @ param string $orario_inizio
* @ param string $orario_fine
*
* @ return float
*/
function calcola_ore_intervento ( $orario_inizio , $orario_fine )
{
$inizio = new DateTime ( $orario_inizio );
$diff = $inizio -> diff ( new DateTime ( $orario_fine ));
$ore = $diff -> h + ( $diff -> days * 24 );
return $ore ;
}