2017-08-04 16:28:16 +02:00
< ? php
include_once __DIR__ . '/../../core.php' ;
2017-09-11 11:28:39 +02:00
include_once $docroot . '/modules/fatture/modutil.php' ;
2017-08-04 16:28:16 +02:00
switch ( post ( 'op' )) {
case 'add' :
$idanagrafica = post ( 'idanagrafica' );
$nome = post ( 'nome' );
// Verifico se c'è già un agente collegato all'anagrafica cliente, così lo imposto già
$q = 'SELECT idagente FROM an_anagrafiche WHERE idanagrafica=' . prepare ( $idanagrafica );
$rs = $dbo -> fetchArray ( $q );
$idagente = $rs [ 0 ][ 'idagente' ];
// Codice contratto: calcolo il successivo in base al formato specificato
$rs = $dbo -> fetchArray ( 'SELECT numero FROM co_contratti ORDER BY id DESC LIMIT 0,1' );
$numero = get_next_code ( $rs [ 0 ][ 'numero' ], 1 , get_var ( 'Formato codice contratti' ));
// Uso il tipo di pagamento specificato in anagrafica se c'è, altrimenti quello di default
$rsa = $dbo -> fetchArray ( 'SELECT idpagamento_vendite AS idpagamento FROM an_anagrafiche WHERE idanagrafica=' . prepare ( $idanagrafica ));
$idpagamento = ( ! empty ( $rsa [ 0 ][ 'idpagamento' ])) ? $rsa [ 0 ][ 'idpagamento' ] : get_var ( 'Tipo di pagamento predefinito' );
if ( isset ( $post [ 'idanagrafica' ])) {
$dbo -> query ( 'INSERT INTO co_contratti(idanagrafica, nome, numero, idagente, idpagamento, idstato, data_bozza) VALUES (' . prepare ( $idanagrafica ) . ', ' . prepare ( $nome ) . ', ' . prepare ( $numero ) . ', ' . prepare ( $idagente ) . ', ' . prepare ( $idpagamento ) . " , (SELECT `id` FROM `co_staticontratti` WHERE `descrizione`='Bozza'), NOW()) " );
$id_record = $dbo -> lastInsertedID ();
// Aggiunta associazioni costi unitari al contratto
$rsi = $dbo -> fetchArray ( 'SELECT * FROM in_tipiintervento WHERE (costo_orario!=0 OR costo_km!=0 OR costo_diritto_chiamata!=0)' );
for ( $i = 0 ; $i < sizeof ( $rsi ); ++ $i ) {
$dbo -> query ( 'INSERT INTO co_contratti_tipiintervento(idcontratto, idtipointervento, costo_ore, costo_km, costo_dirittochiamata, costo_ore_tecnico, costo_km_tecnico, costo_dirittochiamata_tecnico) VALUES(' . prepare ( $id_record ) . ', ' . prepare ( $rsi [ $i ][ 'idtipointervento' ]) . ', ' . prepare ( $rsi [ $i ][ 'costo_orario' ]) . ', ' . prepare ( $rsi [ $i ][ 'costo_km' ]) . ', ' . prepare ( $rsi [ $i ][ 'costo_diritto_chiamata' ]) . ', ' . prepare ( $rsi [ $i ][ 'costo_orario_tecnico' ]) . ', ' . prepare ( $rsi [ $i ][ 'costo_km_tecnico' ]) . ', ' . prepare ( $rsi [ $i ][ 'costo_diritto_chiamata_tecnico' ]) . ')' );
}
2017-09-10 14:35:41 +02:00
$_SESSION [ 'infos' ][] = tr ( 'Aggiunto contratto numero _NUM_!' , [
'_NUM_' => $numero ,
]);
2017-08-04 16:28:16 +02:00
}
break ;
case 'update' :
if ( isset ( $post [ 'id_record' ])) {
$idstato = post ( 'idstato' );
$idanagrafica = post ( 'idanagrafica' );
$nome = post ( 'nome' );
$idagente = post ( 'idagente' );
$idpagamento = post ( 'idpagamento' );
$numero = post ( 'numero' );
// Se non specifico un budget me lo vado a ricalcolare
if ( $budget != '' ) {
$budget = post ( 'budget' );
} else {
2017-09-11 11:28:39 +02:00
$q = " SELECT (SELECT SUM(subtotale) FROM co_righe2_contratti GROUP BY idcontratto HAVING idcontratto=co_contratti.id) AS 'budget' FROM co_contratti WHERE id= " . prepare ( $id_record );
2017-08-04 16:28:16 +02:00
$rs = $dbo -> fetchArray ( $q );
$budget = $rs [ 0 ][ 'budget' ];
}
$data_bozza = $post [ 'data_bozza' ];
$data_accettazione = $post [ 'data_accettazione' ];
$data_rifiuto = $post [ 'data_rifiuto' ];
$data_conclusione = $post [ 'data_conclusione' ];
$rinnovabile = $post [ 'rinnovabile' ];
$giorni_preavviso_rinnovo = post ( 'giorni_preavviso_rinnovo' );
$validita = post ( 'validita' );
$idreferente = post ( 'idreferente' );
$esclusioni = post ( 'esclusioni' );
$descrizione = post ( 'descrizione' );
$idtipointervento = post ( 'idtipointervento' );
// $ore_lavoro = post('ore_lavoro');
$costo_orario = post ( 'costo_orario' );
$costo_km = post ( 'costo_km' );
$costo_diritto_chiamata = post ( 'costo_diritto_chiamata' );
2017-09-11 11:28:39 +02:00
$query = 'UPDATE co_contratti SET idanagrafica=' . prepare ( $idanagrafica ) . ', idstato=' . prepare ( $idstato ) . ', nome=' . prepare ( $nome ) . ', idagente=' . prepare ( $idagente ) . ', idpagamento=' . prepare ( $idpagamento ) . ', numero=' . prepare ( $numero ) . ', budget=' . prepare ( $budget ) . ', idreferente=' . prepare ( $idreferente ) . ', validita=' . prepare ( $validita ) . ', data_bozza=' . prepare ( $data_bozza ) . ', data_accettazione=' . prepare ( $data_accettazione ) . ', data_rifiuto=' . prepare ( $data_rifiuto ) . ', data_conclusione=' . prepare ( $data_conclusione ) . ', rinnovabile=' . prepare ( $rinnovabile ) . ', giorni_preavviso_rinnovo=' . prepare ( $giorni_preavviso_rinnovo ) . ', esclusioni=' . prepare ( $esclusioni ) . ', descrizione=' . prepare ( $descrizione ) . ', idtipointervento=' . prepare ( $idtipointervento ) . 'WHERE id=' . prepare ( $id_record );
2017-08-04 16:28:16 +02:00
// costo_diritto_chiamata='.prepare($costo_diritto_chiamata).', ore_lavoro='.prepare($ore_lavoro).', costo_orario='.prepare($costo_orario).', costo_km='.prepare($costo_km).'
$dbo -> query ( $query );
2017-09-11 11:28:39 +02:00
// Aggiornamento sconto
$tipo_sconto = $post [ 'tipo_sconto_generico' ];
$sconto = $post [ 'sconto_generico' ];
$dbo -> update ( 'co_contratti' , [
'tipo_sconto_globale' => $tipo_sconto ,
'sconto_globale' => $sconto ,
], [ 'id' => $id_record ]);
aggiorna_sconto ([
'parent' => 'co_contratti' ,
'row' => 'co_righe2_contratti' ,
], [
'parent' => 'id' ,
'row' => 'idcontratto' ,
], $id_record );
$dbo -> query ( 'DELETE FROM my_impianti_contratti WHERE idcontratto=' . prepare ( $id_record ));
2017-08-04 16:28:16 +02:00
foreach (( array ) $post [ 'matricolaimpianto' ] as $matricolaimpianto ) {
2017-09-11 11:28:39 +02:00
$dbo -> query ( 'INSERT INTO my_impianti_contratti(idcontratto,idimpianto) VALUES(' . prepare ( $id_record ) . ', ' . prepare ( $matricolaimpianto ) . ')' );
2017-08-04 16:28:16 +02:00
}
// Salvataggio costi attività unitari del contratto
foreach ( $post [ 'costo_ore' ] as $idtipointervento => $valore ) {
$rs = $dbo -> fetchArray ( 'SELECT * FROM co_contratti_tipiintervento WHERE idcontratto=' . prepare ( $id_record ) . ' AND idtipointervento=' . prepare ( $idtipointervento ));
// Se non esiste il record lo inserisco...
if ( sizeof ( $rs ) == 0 ) {
// Se almeno un valore è diverso da 0 inserisco l'importo...
if ( $post [ 'costo_ore' ][ $idtipointervento ] != 0 || $post [ 'costo_km' ][ $idtipointervento ] != 0 || $post [ 'costo_dirittochiamata' ][ $idtipointervento ] != 0 ) {
$dbo -> query ( 'INSERT INTO co_contratti_tipiintervento(idcontratto, idtipointervento, costo_ore, costo_km, costo_dirittochiamata, costo_ore_tecnico, costo_km_tecnico, costo_dirittochiamata_tecnico) VALUES(' . prepare ( $id_record ) . ', ' . prepare ( $idtipointervento ) . ', ' . prepare ( $post [ 'costo_ore' ][ $idtipointervento ]) . ', ' . prepare ( $post [ 'costo_km' ][ $idtipointervento ]) . ', ' . prepare ( $post [ 'costo_dirittochiamata' ][ $idtipointervento ]) . ', ' . prepare ( $post [ 'costo_ore_tecnico' ][ $idtipointervento ]) . ', ' . prepare ( $post [ 'costo_km_tecnico' ][ $idtipointervento ]) . ', ' . prepare ( $post [ 'costo_dirittochiamata_tecnico' ][ $idtipointervento ]) . ')' );
}
}
// ...altrimenti...
else {
// Aggiorno il nuovo valore se è diverso da 0...
if ( $post [ 'costo_ore' ][ $idtipointervento ] != 0 || $post [ 'costo_km' ][ $idtipointervento ] != 0 || $post [ 'costo_dirittochiamata' ][ $idtipointervento ] != 0 ) {
$dbo -> query ( 'UPDATE co_contratti_tipiintervento SET costo_ore=' . prepare ( $post [ 'costo_ore' ][ $idtipointervento ]) . ', costo_km=' . prepare ( $post [ 'costo_km' ][ $idtipointervento ]) . ', costo_dirittochiamata=' . prepare ( $post [ 'costo_dirittochiamata' ][ $idtipointervento ]) . ', costo_ore_tecnico=' . prepare ( $post [ 'costo_ore_tecnico' ][ $idtipointervento ]) . ', costo_km_tecnico=' . prepare ( $post [ 'costo_km_tecnico' ][ $idtipointervento ]) . ', costo_dirittochiamata_tecnico=' . prepare ( $post [ 'costo_dirittochiamata_tecnico' ][ $idtipointervento ]) . ' WHERE idcontratto=' . prepare ( $id_record ) . ' AND idtipointervento=' . prepare ( $idtipointervento ));
}
// ...altrimenti cancello l'eventuale riga
else {
$dbo -> query ( 'DELETE FROM co_contratti_tipiintervento WHERE idcontratto=' . prepare ( $id_record ) . ' AND idtipointervento=' . prepare ( $idtipointervento ));
}
}
}
2017-09-04 12:02:29 +02:00
$_SESSION [ 'infos' ][] = tr ( 'Contratto modificato correttamente!' );
2017-08-04 16:28:16 +02:00
}
break ;
// Aggiungo una riga al contratto
case 'addriga' :
2017-09-11 11:28:39 +02:00
$idiva = post ( 'idiva' );
2017-08-04 16:28:16 +02:00
$descrizione = post ( 'descrizione' );
$qta = $post [ 'qta' ];
2017-09-11 11:28:39 +02:00
$prezzo = $post [ 'prezzo' ];
// Calcolo dello sconto
$sconto_unitario = $post [ 'sconto' ];
$tipo_sconto = $post [ 'tipo_sconto' ];
$sconto = ( $tipo_sconto == 'PRC' ) ? ( $prezzo * $sconto_unitario ) / 100 : $sconto_unitario ;
$sconto = $sconto * $qta ;
2017-08-04 16:28:16 +02:00
2017-09-11 11:28:39 +02:00
$subtot = $prezzo_vendita * $qta ;
2017-08-04 16:28:16 +02:00
$um = post ( 'um' );
// Lettura iva dell'articolo
2017-09-11 11:28:39 +02:00
$rs2 = $dbo -> fetchArray ( 'SELECT percentuale, descrizione, indetraibile FROM co_iva WHERE id=' . prepare ( $idiva ));
$iva = ( $prezzo - $sconto ) / 100 * $rs2 [ 0 ][ 'percentuale' ];
2017-08-04 16:28:16 +02:00
$iva_indetraibile = $iva / 100 * $rs2 [ 0 ][ 'indetraibile' ];
2017-09-11 11:28:39 +02:00
$desc_iva = $rs2 [ 0 ][ 'descrizione' ];
2017-08-04 16:28:16 +02:00
2017-09-11 11:28:39 +02:00
$dbo -> query ( 'INSERT INTO co_righe2_contratti(idcontratto, idiva, iva, iva_indetraibile, descrizione, subtotale, um, qta, sconto, sconto_unitario, tipo_sconto) VALUES (' . prepare ( $id_record ) . ', ' . prepare ( $idiva ) . ', ' . prepare ( $desc_iva ) . ', ' . prepare ( $iva ) . ', ' . prepare ( $iva_indetraibile ) . ', ' . prepare ( $descrizione ) . ', ' . prepare ( $subtot ) . ', ' . prepare ( $um ) . ', ' . prepare ( $qta ) . ', ' . prepare ( $sconto ) . ', ' . prepare ( $sconto_unitario ) . ', ' . prepare ( $tipo_sconto ) . ', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe2_contratti AS t WHERE idcontratto=' . prepare ( $id_record ) . '))' );
2017-08-04 16:28:16 +02:00
2017-09-04 12:02:29 +02:00
$_SESSION [ 'infos' ][] = tr ( 'Articolo aggiunto!' );
2017-08-04 16:28:16 +02:00
break ;
case 'editriga' :
$idriga = post ( 'idriga' );
$descrizione = post ( 'descrizione' );
$qta = $post [ 'qta' ];
2017-09-11 11:28:39 +02:00
$prezzo = $post [ 'prezzo' ];
$subtot = $prezzo * $qta ;
2017-08-04 16:28:16 +02:00
2017-09-11 11:28:39 +02:00
// Calcolo dello sconto
$sconto_unitario = $post [ 'sconto' ];
$tipo_sconto = $post [ 'tipo_sconto' ];
$sconto = ( $tipo_sconto == 'PRC' ) ? ( $prezzo * $sconto_unitario ) / 100 : $sconto_unitario ;
$sconto = $sconto * $qta ;
2017-08-04 16:28:16 +02:00
2017-09-11 11:28:39 +02:00
$idiva = post ( 'idiva' );
2017-08-04 16:28:16 +02:00
$um = post ( 'um' );
// Calcolo iva
2017-09-11 11:28:39 +02:00
$query = 'SELECT percentuale, descrizione, indetraibile FROM co_iva WHERE id=' . prepare ( $idiva );
2017-08-04 16:28:16 +02:00
$rs = $dbo -> fetchArray ( $query );
2017-09-11 11:28:39 +02:00
$iva = ( $subtot - $sconto ) / 100 * $rs [ 0 ][ 'percentuale' ];
2017-08-04 16:28:16 +02:00
$iva_indetraibile = $iva / 100 * $rs [ 0 ][ 'indetraibile' ];
$desc_iva = $rs [ 0 ][ 'descrizione' ];
// Modifica riga generica sul documento
2017-09-11 11:28:39 +02:00
$query = 'UPDATE co_righe2_contratti SET idiva=' . prepare ( $idiva ) . ', desc_iva=' . prepare ( $desc_iva ) . ', iva=' . prepare ( $iva ) . ', iva_indetraibile=' . prepare ( $iva_indetraibile ) . ', descrizione=' . prepare ( $descrizione ) . ', subtotale=' . prepare ( $subtot ) . ', sconto=' . prepare ( $sconto ) . ', sconto_unitario=' . prepare ( $sconto_unitario ) . ', tipo_sconto=' . prepare ( $tipo_sconto ) . ', um=' . prepare ( $um ) . ', qta=' . prepare ( $qta ) . ' WHERE id=' . prepare ( $idriga );
2017-08-04 16:28:16 +02:00
$dbo -> query ( $query );
2017-09-04 12:02:29 +02:00
$_SESSION [ 'infos' ][] = tr ( 'Riga modificata!' );
2017-08-04 16:28:16 +02:00
break ;
// Eliminazione riga
case 'delriga' :
if ( isset ( $post [ 'idriga' ])) {
$idriga = post ( 'idriga' );
2017-09-11 11:28:39 +02:00
$query = 'DELETE FROM `co_righe2_contratti` WHERE idcontratto=' . prepare ( $id_record ) . ' AND id=' . prepare ( $idriga );
2017-08-04 16:28:16 +02:00
if ( $dbo -> query ( $query )) {
2017-09-04 12:02:29 +02:00
$_SESSION [ 'infos' ][] = tr ( 'Riga eliminata!' );
2017-08-04 16:28:16 +02:00
}
}
// Ricalcolo il budget
2017-09-11 11:28:39 +02:00
$dbo -> query ( 'UPDATE co_contratti SET budget=( SELECT SUM(subtotale) FROM co_righe2_contratti GROUP BY idcontratto HAVING idcontratto=co_contratti.id ) WHERE id=' . prepare ( $id_record ));
2017-08-04 16:28:16 +02:00
break ;
// Scollegamento intervento da contratto
case 'unlink' :
if ( isset ( $get [ 'idcontratto' ]) && isset ( $get [ 'idintervento' ])) {
$idcontratto = $get [ 'idcontratto' ];
$idintervento = $get [ 'idintervento' ];
$query = 'DELETE FROM `co_righe_contratti` WHERE idcontratto=' . prepare ( $idcontratto ) . ' AND idintervento=' . prepare ( $idintervento );
$dbo -> query ( $query );
2017-09-10 14:35:41 +02:00
$_SESSION [ 'infos' ][] = tr ( 'Intervento _NUM_ rimosso!' , [
'_NUM_' => $idintervento ,
]);
2017-08-04 16:28:16 +02:00
}
break ;
// eliminazione contratto
case 'delete' :
$dbo -> query ( 'DELETE FROM co_contratti WHERE id=' . prepare ( $id_record ));
$dbo -> query ( 'DELETE FROM co_righe_contratti WHERE idcontratto=' . prepare ( $id_record ));
$dbo -> query ( 'DELETE FROM co_righe2_contratti WHERE idcontratto=' . prepare ( $id_record ));
2017-09-04 12:02:29 +02:00
$_SESSION [ 'infos' ][] = tr ( 'Contratto eliminato!' );
2017-08-04 16:28:16 +02:00
break ;
}
// Rinnovo contratto
switch ( get ( 'op' )) {
case 'renew' :
$rs = $dbo -> fetchArray ( 'SELECT *, DATEDIFF(data_conclusione, data_accettazione) AS giorni FROM co_contratti WHERE id=' . prepare ( $id_record ));
if ( sizeof ( $rs ) == 1 ) {
// Verifico se il rinnovo contratto è un numero accettabile con la differenza di data inizio e data fine
if ( $rs [ 0 ][ 'giorni' ] > 0 && $rs [ 0 ][ 'giorni' ] < 365 * 10 ) {
$giorni_add = $rs [ 0 ][ 'giorni' ];
} else {
$giorni_add = 0 ;
}
// Calcolo numero successivo contratti
$rs2 = $dbo -> fetchArray ( 'SELECT MAX(CAST(numero AS UNSIGNED)) AS maxn FROM co_contratti' );
$numero = $rs2 [ 0 ][ 'maxn' ] + 1 ;
if ( $dbo -> query ( 'INSERT INTO co_contratti(numero, nome, idagente, data_bozza, data_accettazione, data_rifiuto, data_conclusione, rinnovabile, giorni_preavviso_rinnovo, budget, descrizione, idstato, idreferente, validita, esclusioni, idanagrafica, idpagamento, idtipointervento, costo_diritto_chiamata, ore_lavoro, costo_orario, costo_km, idcontratto_prev) VALUES(' . prepare ( $numero ) . ', ' . prepare ( $rs [ 0 ][ 'nome' ]) . ', ' . prepare ( $rs [ 0 ][ 'idagente' ]) . ', NOW(), ' . prepare ( date ( 'Y-m-d' , strtotime ( $rs [ 0 ][ 'data_conclusione' ] . ' +1 day' ))) . ', "", ' . prepare ( date ( 'Y-m-d' , strtotime ( $rs [ 0 ][ 'data_conclusione' ] . ' +' . $giorni_add . ' day' ))) . ', ' . prepare ( $rs [ 0 ][ 'rinnovabile' ]) . ', ' . prepare ( $rs [ 0 ][ 'giorni_preavviso_rinnovo' ]) . ', ' . prepare ( $rs [ 0 ][ 'budget' ]) . ', ' . prepare ( $rs [ 0 ][ 'descrizione' ]) . ', ' . prepare ( $rs [ 0 ][ 'idstato' ]) . ', ' . prepare ( $rs [ 0 ][ 'idreferente' ]) . ', ' . prepare ( $rs [ 0 ][ 'validita' ]) . ', ' . prepare ( $rs [ 0 ][ 'esclusioni' ]) . ', ' . prepare ( $rs [ 0 ][ 'idanagrafica' ]) . ', ' . prepare ( $rs [ 0 ][ 'idpagamento' ]) . ', ' . prepare ( $rs [ 0 ][ 'idintervento' ]) . ', ' . prepare ( $rs [ 0 ][ 'costo_diritto_chiamata' ]) . ', ' . prepare ( $rs [ 0 ][ 'ore_lavoro' ]) . ', ' . prepare ( $rs [ 0 ][ 'costo_orario' ]) . ', ' . prepare ( $rs [ 0 ][ 'costo_km' ]) . ', ' . prepare ( $id_record ) . ')' )) {
$new_idcontratto = $dbo -> lastInsertedID ();
$dbo -> query ( 'INSERT INTO co_contratti_tipiintervento(idcontratto, idtipointervento, costo_ore, costo_km, costo_dirittochiamata, costo_ore_tecnico, costo_km_tecnico, costo_dirittochiamata_tecnico) SELECT ' . prepare ( $new_idcontratto ) . ', idtipointervento, costo_ore, costo_km, costo_dirittochiamata, costo_ore_tecnico, costo_km_tecnico, costo_dirittochiamata_tecnico FROM co_contratti_tipiintervento AS z WHERE idcontratto=' . prepare ( $id_record ));
// Replico le righe del contratto
$rs = $dbo -> fetchArray ( 'SELECT * FROM co_righe2_contratti WHERE idcontratto=' . prepare ( $id_record ));
for ( $i = 0 ; $i < sizeof ( $rs ); ++ $i ) {
$dbo -> query ( 'INSERT INTO co_righe2_contratti(idcontratto, descrizione, subtotale, um, qta) VALUES(' . prepare ( $new_idcontratto ) . ', ' . prepare ( $rs [ $i ][ 'descrizione' ]) . ', ' . prepare ( $rs [ $i ][ 'subtotale' ]) . ', ' . prepare ( $rs [ $i ][ 'um' ]) . ', ' . prepare ( $rs [ $i ][ 'qta' ]) . ')' );
}
2017-09-04 12:02:29 +02:00
$_SESSION [ 'infos' ][] = tr ( 'Contratto rinnovato!' );
2017-08-04 16:28:16 +02:00
redirect ( $rootdir . '/editor.php?id_module=' . $id_module . '&id_record=' . $new_idcontratto );
} else {
2017-09-04 12:02:29 +02:00
$_SESSION [ 'errors' ][] = tr ( 'Errore durante il rinnovo del contratto!' );
2017-08-04 16:28:16 +02:00
}
}
break ;
}
2017-09-11 11:28:39 +02:00
if ( post ( 'op' ) !== null && post ( 'op' ) != 'update' ) {
aggiorna_sconto ([
'parent' => 'co_contratti' ,
'row' => 'co_righe2_contratti' ,
], [
'parent' => 'id' ,
'row' => 'idcontratto' ,
], $id_record );
}