2017-08-04 16:28:16 +02:00
< ? php
include_once __DIR__ . '/../../core.php' ;
2019-01-19 10:33:57 +01:00
use Modules\Anagrafiche\Anagrafica ;
2019-05-04 06:19:08 +02:00
use Modules\Articoli\Articolo as ArticoloOriginale ;
2019-01-19 10:33:57 +01:00
use Modules\Contratti\Components\Articolo ;
2019-05-04 06:19:08 +02:00
use Modules\Contratti\Components\Descrizione ;
2019-01-19 10:33:57 +01:00
use Modules\Contratti\Components\Riga ;
2019-04-04 17:12:32 +02:00
use Modules\Contratti\Components\Sconto ;
2019-01-19 10:33:57 +01:00
use Modules\Contratti\Contratto ;
2017-08-04 16:28:16 +02:00
switch ( post ( 'op' )) {
case 'add' :
$idanagrafica = post ( 'idanagrafica' );
$nome = post ( 'nome' );
2019-01-19 10:33:57 +01:00
$anagrafica = Anagrafica :: find ( $idanagrafica );
2017-08-04 16:28:16 +02:00
2019-01-19 10:33:57 +01:00
$contratto = Contratto :: build ( $anagrafica , $nome );
$id_record = $contratto -> id ;
2017-08-04 16:28:16 +02:00
2019-01-19 10:33:57 +01:00
flash () -> info ( tr ( 'Aggiunto contratto numero _NUM_!' , [
'_NUM_' => $contratto [ 'numero' ],
]));
2017-08-04 16:28:16 +02:00
break ;
case 'update' :
2018-07-19 15:33:32 +02:00
if ( post ( 'id_record' ) !== null ) {
2017-08-04 16:28:16 +02:00
// Se non specifico un budget me lo vado a ricalcolare
if ( $budget != '' ) {
$budget = post ( 'budget' );
} else {
2018-06-29 17:30:41 +02:00
$q = " SELECT (SELECT SUM(subtotale) FROM co_righe_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' ];
}
2019-07-08 12:24:59 +02:00
$contratto -> idanagrafica = post ( 'idanagrafica' );
$contratto -> idsede = post ( 'idsede' );
$contratto -> idstato = post ( 'idstato' );
$contratto -> nome = post ( 'nome' );
$contratto -> idagente = post ( 'idagente' );
$contratto -> idpagamento = post ( 'idpagamento' );
$contratto -> numero = post ( 'numero' );
$contratto -> budget = $budget ;
$contratto -> idreferente = post ( 'idreferente' );
$contratto -> validita = post ( 'validita' );
$contratto -> data_bozza = post ( 'data_bozza' );
$contratto -> data_accettazione = post ( 'data_accettazione' );
$contratto -> data_rifiuto = post ( 'data_rifiuto' );
$contratto -> data_conclusione = post ( 'data_conclusione' );
$contratto -> rinnovabile = post ( 'rinnovabile' );
$contratto -> giorni_preavviso_rinnovo = post ( 'giorni_preavviso_rinnovo' );
$contratto -> ore_preavviso_rinnovo = post ( 'ore_preavviso_rinnovo' );
$contratto -> esclusioni = post ( 'esclusioni' );
$contratto -> descrizione = post ( 'descrizione' );
$contratto -> id_documento_fe = post ( 'id_documento_fe' );
$contratto -> num_item = post ( 'num_item' );
$contratto -> codice_cig = post ( 'codice_cig' );
2019-07-08 12:25:51 +02:00
$contratto -> codice_cup = post ( 'codice_cup' );
2019-07-08 12:24:59 +02:00
$contratto -> save ();
2017-08-04 16:28:16 +02:00
2017-09-11 11:28:39 +02:00
$dbo -> query ( 'DELETE FROM my_impianti_contratti WHERE idcontratto=' . prepare ( $id_record ));
2018-07-19 15:33:32 +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
2019-05-04 06:19:08 +02:00
foreach ( post ( 'costo_ore' ) as $id_tipo => $valore ) {
2019-09-09 10:47:25 +02:00
$dbo -> update ( 'co_contratti_tipiintervento' , [
'costo_ore' => post ( 'costo_ore' )[ $id_tipo ],
'costo_km' => post ( 'costo_km' )[ $id_tipo ],
'costo_dirittochiamata' => post ( 'costo_dirittochiamata' )[ $id_tipo ],
], [
'idcontratto' => $id_record ,
'idtipointervento' => $id_tipo ,
]);
2017-08-04 16:28:16 +02:00
}
2018-07-19 17:29:21 +02:00
flash () -> info ( tr ( 'Contratto modificato correttamente!' ));
2017-08-04 16:28:16 +02:00
}
break ;
2019-04-12 01:11:32 +02:00
// Duplica contratto
2019-04-08 18:50:28 +02:00
case 'copy' :
2019-04-19 20:52:02 +02:00
$new = $contratto -> replicate ();
2019-05-10 17:54:18 +02:00
$new -> numero = Contratto :: getNextNumero ();
2019-04-19 20:52:02 +02:00
$new -> idstato = 1 ;
$new -> save ();
$id_record = $new -> id ;
2019-06-27 16:09:41 +02:00
$righe = $contratto -> getRighe ();
2019-04-19 20:52:02 +02:00
foreach ( $righe as $riga ) {
$new_riga = $riga -> replicate ();
$new_riga -> setParent ( $new );
$new_riga -> qta_evasa = 0 ;
$new_riga -> save ();
}
2019-04-08 18:50:28 +02:00
2019-04-12 01:11:32 +02:00
flash () -> info ( tr ( 'Contratto duplicato correttamente!' ));
2019-04-08 18:50:28 +02:00
2019-04-12 01:11:32 +02:00
break ;
2017-08-04 16:28:16 +02:00
2019-05-04 06:19:08 +02:00
case 'manage_articolo' :
if ( post ( 'idriga' ) != null ) {
$articolo = Articolo :: find ( post ( 'idriga' ));
} else {
$originale = ArticoloOriginale :: find ( post ( 'idarticolo' ));
$articolo = Articolo :: build ( $contratto , $originale );
}
$qta = post ( 'qta' );
$articolo -> descrizione = post ( 'descrizione' );
$articolo -> um = post ( 'um' ) ? : null ;
$articolo -> id_iva = post ( 'idiva' );
2019-09-05 18:40:39 +02:00
$articolo -> prezzo_unitario_acquisto = post ( 'prezzo_acquisto' ) ? : 0 ;
2019-05-04 06:19:08 +02:00
$articolo -> prezzo_unitario_vendita = post ( 'prezzo' );
$articolo -> sconto_unitario = post ( 'sconto' );
$articolo -> tipo_sconto = post ( 'tipo_sconto' );
try {
$articolo -> qta = $qta ;
} catch ( UnexpectedValueException $e ) {
flash () -> error ( tr ( 'Alcuni serial number sono già stati utilizzati!' ));
}
$articolo -> save ();
if ( post ( 'idriga' ) != null ) {
flash () -> info ( tr ( 'Articolo modificato!' ));
} else {
flash () -> info ( tr ( 'Articolo aggiunto!' ));
}
break ;
2019-03-29 12:46:17 +01:00
case 'manage_sconto' :
if ( post ( 'idriga' ) != null ) {
2019-04-04 17:12:32 +02:00
$sconto = Sconto :: find ( post ( 'idriga' ));
2019-03-29 12:46:17 +01:00
} else {
2019-04-04 17:12:32 +02:00
$sconto = Sconto :: build ( $contratto );
2019-03-29 12:46:17 +01:00
}
$sconto -> descrizione = post ( 'descrizione' );
$sconto -> id_iva = post ( 'idiva' );
$sconto -> sconto_unitario = post ( 'sconto_unitario' );
$sconto -> tipo_sconto = 'UNT' ;
$sconto -> save ();
if ( post ( 'idriga' ) != null ) {
flash () -> info ( tr ( 'Sconto/maggiorazione modificato!' ));
} else {
2019-07-11 17:20:58 +02:00
flash () -> info ( tr ( 'Sconto/maggiorazione aggiunto!' ));
2019-03-29 12:46:17 +01:00
}
break ;
2019-05-04 06:19:08 +02:00
case 'manage_riga' :
if ( post ( 'idriga' ) != null ) {
$riga = Riga :: find ( post ( 'idriga' ));
} else {
$riga = Riga :: build ( $contratto );
}
2017-08-04 16:28:16 +02:00
2018-07-19 15:33:32 +02:00
$qta = post ( 'qta' );
2017-09-11 11:28:39 +02:00
2019-05-04 06:19:08 +02:00
$riga -> descrizione = post ( 'descrizione' );
$riga -> um = post ( 'um' ) ? : null ;
2017-08-04 16:28:16 +02:00
2019-05-04 06:19:08 +02:00
$riga -> id_iva = post ( 'idiva' );
2017-08-04 16:28:16 +02:00
2019-09-05 18:40:39 +02:00
$riga -> prezzo_unitario_acquisto = post ( 'prezzo_acquisto' ) ? : 0 ;
2019-05-04 06:19:08 +02:00
$riga -> prezzo_unitario_vendita = post ( 'prezzo' );
$riga -> sconto_unitario = post ( 'sconto' );
$riga -> tipo_sconto = post ( 'tipo_sconto' );
2017-08-04 16:28:16 +02:00
2019-05-04 06:19:08 +02:00
$riga -> qta = $qta ;
2017-08-04 16:28:16 +02:00
2019-05-04 06:19:08 +02:00
$riga -> save ();
2018-02-19 10:52:42 +01:00
2019-05-04 06:19:08 +02:00
if ( post ( 'idriga' ) != null ) {
flash () -> info ( tr ( 'Riga modificata!' ));
2018-02-19 17:48:04 +01:00
} else {
2019-05-04 06:19:08 +02:00
flash () -> info ( tr ( 'Riga aggiunta!' ));
2018-01-18 19:03:06 +01:00
}
2018-02-19 10:52:42 +01:00
2018-01-18 19:03:06 +01:00
break ;
2017-08-04 16:28:16 +02:00
2019-05-04 06:19:08 +02:00
case 'manage_descrizione' :
if ( post ( 'idriga' ) != null ) {
$riga = Descrizione :: find ( post ( 'idriga' ));
} else {
$riga = Descrizione :: build ( $contratto );
}
2018-02-04 09:41:46 +01:00
2019-05-04 06:19:08 +02:00
$riga -> descrizione = post ( 'descrizione' );
2018-02-04 09:41:46 +01:00
2019-05-04 06:19:08 +02:00
$riga -> save ();
2017-08-04 16:28:16 +02:00
2019-05-04 06:19:08 +02:00
if ( post ( 'idriga' ) != null ) {
flash () -> info ( tr ( 'Riga descrittiva modificata!' ));
2018-02-04 09:41:46 +01:00
} else {
2019-05-04 06:19:08 +02:00
flash () -> info ( tr ( 'Riga descrittiva aggiunta!' ));
2018-01-18 19:03:06 +01:00
}
2017-08-04 16:28:16 +02:00
break ;
// Eliminazione riga
2019-05-04 06:19:08 +02:00
case 'delete_riga' :
$id_riga = post ( 'idriga' );
if ( $id_riga !== null ) {
$riga = Descrizione :: find ( $id_riga ) ? : Riga :: find ( $id_riga );
$riga = $riga ? $riga : Articolo :: find ( $id_riga );
$riga = $riga ? $riga : Sconto :: find ( $id_riga );
2017-08-04 16:28:16 +02:00
2019-05-04 06:19:08 +02:00
$riga -> delete ();
2017-08-04 16:28:16 +02:00
2019-05-04 06:19:08 +02:00
flash () -> info ( tr ( 'Riga eliminata!' ));
2017-08-04 16:28:16 +02:00
}
break ;
// Scollegamento intervento da contratto
case 'unlink' :
2018-07-19 15:33:32 +02:00
if ( get ( 'idcontratto' ) !== null && get ( 'idintervento' ) !== null ) {
$idcontratto = get ( 'idcontratto' );
$idintervento = get ( 'idintervento' );
2017-08-04 16:28:16 +02:00
2018-08-31 11:39:38 +02:00
$query = 'DELETE FROM `co_promemoria` WHERE idcontratto=' . prepare ( $idcontratto ) . ' AND idintervento=' . prepare ( $idintervento );
2017-08-04 16:28:16 +02:00
$dbo -> query ( $query );
2018-07-19 17:29:21 +02:00
flash () -> info ( tr ( 'Intervento _NUM_ rimosso!' , [
2017-09-10 14:35:41 +02:00
'_NUM_' => $idintervento ,
2018-07-07 13:56:22 +02:00
]));
2017-08-04 16:28:16 +02:00
}
break ;
2019-05-04 06:19:08 +02:00
case 'update_position' :
$orders = explode ( ',' , $_POST [ 'order' ]);
$order = 0 ;
2017-09-11 13:08:50 +02:00
2019-05-04 06:19:08 +02:00
foreach ( $orders as $idriga ) {
$dbo -> query ( 'UPDATE `co_righe_contratti` SET `order`=' . prepare ( $order ) . ' WHERE id=' . prepare ( $idriga ));
++ $order ;
}
2018-10-30 10:27:44 +01:00
2019-05-04 06:19:08 +02:00
break ;
2017-09-11 13:08:50 +02:00
2017-08-04 16:28:16 +02:00
// eliminazione contratto
case 'delete' :
2019-10-01 18:32:06 +02:00
try {
$contratto -> delete ();
2019-05-04 06:39:18 +02:00
2019-10-01 18:32:06 +02:00
$dbo -> query ( 'DELETE FROM co_promemoria WHERE idcontratto=' . prepare ( $id_record ));
2017-08-04 16:28:16 +02:00
2019-10-01 18:32:06 +02:00
flash () -> info ( tr ( 'Contratto eliminato!' ));
} catch ( InvalidArgumentException $e ) {
flash () -> error ( tr ( 'Sono stati utilizzati alcuni serial number nel documento: impossibile procedere!' ));
}
2017-08-04 16:28:16 +02:00
break ;
2018-08-31 11:39:38 +02:00
// Rinnovo contratto
2017-08-04 16:28:16 +02:00
case 'renew' :
2019-11-12 16:48:06 +01:00
$giorni = $contratto -> data_conclusione -> diffInDays ( $contratto -> data_accettazione );
2017-08-04 16:28:16 +02:00
2019-11-12 16:48:06 +01:00
// Verifico se il rinnovo contratto è un numero accettabile con la differenza di data inizio e data fine
if ( $giorni < 0 || $giorni > 365 * 10 ) {
$giorni = 0 ;
}
2017-08-04 16:28:16 +02:00
2019-11-12 16:48:06 +01:00
$new_contratto = $contratto -> replicate ();
$new_contratto -> numero = Contratto :: getNextNumero ();
$new_contratto -> idcontratto_prev = $contratto -> id ;
$new_contratto -> data_accettazione = $contratto -> data_conclusione -> addDays ( 1 );
$new_contratto -> data_conclusione = $new_contratto -> data_accettazione -> addDays ( $giorni );
$new_contratto -> save ();
$new_idcontratto = $new_contratto -> id ;
// Correzioni dei prezzi per gli interventi
$dbo -> query ( 'DELETE FROM co_contratti_tipiintervento WHERE idcontratto=' . prepare ( $new_idcontratto ));
$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 ));
$new_contratto -> save ();
// Replico le righe del contratto
$righe = $contratto -> getRighe ();
foreach ( $righe as $riga ) {
$new_riga = $riga -> replicate ();
$new_riga -> qta_evasa = 0 ;
$new_riga -> idcontratto = $new_contratto -> id ;
$new_riga -> save ();
2017-08-04 16:28:16 +02:00
}
2019-11-12 16:48:06 +01:00
// Replicazione degli impianti
$impianti = $dbo -> fetchArray ( 'SELECT idimpianto FROM my_impianti_contratti WHERE idcontratto=' . prepare ( $id_record ));
$dbo -> sync ( 'my_impianti_contratti' , [ 'idcontratto' => $new_idcontratto ], [ 'idimpianto' => array_column ( $impianti , 'idimpianto' )]);
// Replicazione dei promemoria
$promemoria = $dbo -> fetchArray ( 'SELECT * FROM co_promemoria WHERE idcontratto=' . prepare ( $id_record ));
foreach ( $promemoria as $p ) {
$dbo -> insert ( 'co_promemoria' , [
'idcontratto' => $new_idcontratto ,
'data_richiesta' => date ( 'Y-m-d' , strtotime ( $p [ 'data_richiesta' ] . ' +' . $giorni . ' day' )),
'idtipointervento' => $p [ 'idtipointervento' ],
'richiesta' => $p [ 'richiesta' ],
'idimpianti' => $p [ 'idimpianti' ],
]);
$id_promemoria = $dbo -> lastInsertedID ();
// Copia degli articoli
$dbo -> query ( 'INSERT INTO co_promemoria_articoli(idarticolo, id_promemoria, idimpianto, descrizione, prezzo_vendita, prezzo_acquisto, sconto, sconto_unitario, tipo_sconto, idiva, desc_iva, iva, qta, um, abilita_serial) SELECT idarticolo, :id_new, idimpianto, descrizione, prezzo_vendita, prezzo_acquisto, sconto, sconto_unitario, tipo_sconto, idiva, desc_iva, iva, qta, um, abilita_serial FROM co_promemoria_articoli AS z WHERE id_promemoria = :id_old' , [
':id_new' => $id_promemoria ,
':id_old' => $p [ 'id' ],
]);
// Copia delle righe
$dbo -> query ( 'INSERT INTO co_promemoria_righe(id_promemoria, descrizione, qta, um, prezzo_vendita, prezzo_acquisto, idiva, desc_iva, iva, sconto, sconto_unitario, tipo_sconto) SELECT :id_new, descrizione, qta, um, prezzo_vendita, prezzo_acquisto, idiva, desc_iva, iva, sconto, sconto_unitario, tipo_sconto FROM co_promemoria_righe AS z WHERE id_promemoria = :id_old' , [
':id_new' => $id_promemoria ,
':id_old' => $p [ 'id' ],
]);
// Copia degli allegati
Uploads :: copy ([
'id_module' => $id_module ,
'id_plugin' => Plugins :: get ( 'Pianificazione interventi' )[ 'id' ],
'id_record' => $p [ 'id' ],
], [
'id_module' => $id_module ,
'id_plugin' => Plugins :: get ( 'Pianificazione interventi' )[ 'id' ],
'id_record' => $id_promemoria ,
]);
}
// Cambio stato precedente contratto in concluso (non più pianificabile)
$dbo -> query ( 'UPDATE `co_contratti` SET `rinnovabile`= 0, `idstato`= (SELECT id FROM co_staticontratti WHERE is_pianificabile = 0 AND is_fatturabile = 1 AND descrizione = \'Concluso\') WHERE `id` = ' . prepare ( $id_record ));
flash () -> info ( tr ( 'Contratto rinnovato!' ));
$id_record = $new_idcontratto ;
2019-06-14 15:39:40 +02:00
break ;
case 'import' :
$rs = $dbo -> fetchArray ( 'SELECT * FROM co_contratti_tipiintervento WHERE idcontratto = ' . prepare ( post ( 'idcontratto' )) . ' AND idtipointervento=' . prepare ( post ( 'idtipointervento' )));
2019-06-29 11:01:26 +02:00
2019-06-14 15:39:40 +02:00
// Se la riga in_tipiintervento esiste, la aggiorno...
if ( ! empty ( $rs )) {
$result = $dbo -> query ( 'UPDATE co_contratti_tipiintervento SET '
. ' costo_ore=(SELECT costo_orario FROM in_tipiintervento WHERE idtipointervento=' . prepare ( post ( 'idtipointervento' )) . '), '
. ' costo_km=(SELECT costo_km FROM in_tipiintervento WHERE idtipointervento=' . prepare ( post ( 'idtipointervento' )) . '), '
. ' costo_dirittochiamata=(SELECT costo_diritto_chiamata FROM in_tipiintervento WHERE idtipointervento=' . prepare ( post ( 'idtipointervento' )) . '), '
. ' costo_ore_tecnico=(SELECT costo_orario_tecnico FROM in_tipiintervento WHERE idtipointervento=' . prepare ( post ( 'idtipointervento' )) . '), '
. ' costo_km_tecnico=(SELECT costo_km_tecnico FROM in_tipiintervento WHERE idtipointervento=' . prepare ( post ( 'idtipointervento' )) . '), '
. ' costo_dirittochiamata_tecnico=(SELECT costo_diritto_chiamata_tecnico FROM in_tipiintervento WHERE idtipointervento=' . prepare ( post ( 'idtipointervento' )) . ') '
. ' WHERE idcontratto=' . prepare ( post ( 'idcontratto' )) . ' AND idtipointervento=' . prepare ( post ( 'idtipointervento' )));
if ( $result ) {
flash () -> info ( tr ( 'Informazioni tariffe salvate correttamente!' ));
} else {
flash () -> error ( tr ( " Errore durante l'importazione tariffe! " ));
}
}
// ...altrimenti la creo
else {
if ( $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 ( post ( 'idcontratto' )) . ', ' . prepare ( post ( 'idtipointervento' )) . ', (SELECT costo_orario FROM in_tipiintervento WHERE idtipointervento=' . prepare ( post ( 'idtipointervento' )) . '), (SELECT costo_km FROM in_tipiintervento WHERE idtipointervento=' . prepare ( post ( 'idtipointervento' )) . '), (SELECT costo_diritto_chiamata FROM in_tipiintervento WHERE idtipointervento=' . prepare ( post ( 'idtipointervento' )) . '), (SELECT costo_orario_tecnico FROM in_tipiintervento WHERE idtipointervento=' . prepare ( post ( 'idtipointervento' )) . '), (SELECT costo_km_tecnico FROM in_tipiintervento WHERE idtipointervento=' . prepare ( post ( 'idtipointervento' )) . '), (SELECT costo_diritto_chiamata_tecnico FROM in_tipiintervento WHERE idtipointervento=' . prepare ( post ( 'idtipointervento' )) . ') )' )) {
flash () -> info ( tr ( 'Informazioni tariffe salvate correttamente!' ));
} else {
flash () -> error ( tr ( " Errore durante l'importazione tariffe! " ));
}
}
2017-08-04 16:28:16 +02:00
break ;
}