2017-08-04 16:28:16 +02:00
< ? php
include_once __DIR__ . '/../../core.php' ;
2019-01-01 11:39:20 +01:00
use Modules\Anagrafiche\Anagrafica ;
use Modules\Preventivi\Components\Articolo ;
use Modules\Preventivi\Components\Riga ;
2019-04-04 17:12:32 +02:00
use Modules\Preventivi\Components\Sconto ;
2019-01-01 11:39:20 +01:00
use Modules\Preventivi\Preventivo ;
2019-07-08 12:25:51 +02:00
use Modules\TipiIntervento\Tipo as TipoSessione ;
2019-01-01 11:39:20 +01:00
2017-08-04 16:28:16 +02:00
switch ( post ( 'op' )) {
case 'add' :
$idanagrafica = post ( 'idanagrafica' );
$nome = post ( 'nome' );
$idtipointervento = post ( 'idtipointervento' );
2019-01-01 11:39:20 +01:00
$anagrafica = Anagrafica :: find ( $idanagrafica );
2019-01-02 10:08:08 +01:00
$tipo = TipoSessione :: find ( $idtipointervento );
2017-08-04 16:28:16 +02:00
2019-01-02 14:15:16 +01:00
$preventivo = Preventivo :: build ( $anagrafica , $tipo , $nome );
2019-01-01 11:39:20 +01:00
$id_record = $preventivo -> id ;
2017-08-04 16:28:16 +02:00
2018-07-19 17:29:21 +02:00
flash () -> info ( tr ( 'Aggiunto preventivo numero _NUM_!' , [
2019-01-10 17:27:19 +01:00
'_NUM_' => $preventivo [ 'numero' ],
2018-07-07 13:56:22 +02:00
]));
2017-08-04 16:28:16 +02:00
break ;
case 'update' :
if ( isset ( $id_record )) {
$idstato = post ( 'idstato' );
$nome = post ( 'nome' );
$idanagrafica = post ( 'idanagrafica' );
2019-04-12 01:11:32 +02:00
$idsede = post ( 'idsede' );
2017-08-04 16:28:16 +02:00
$idagente = post ( 'idagente' );
$idreferente = post ( 'idreferente' );
$idpagamento = post ( 'idpagamento' );
$idporto = post ( 'idporto' );
$tempi_consegna = post ( 'tempi_consegna' );
$numero = post ( 'numero' );
2018-07-19 15:33:32 +02:00
$tipo_sconto = post ( 'tipo_sconto_generico' );
$sconto = post ( 'sconto_generico' );
2017-08-04 16:28:16 +02:00
// $budget = post('budget');
// $budget = str_replace( ",", ".", $budget );
2018-07-19 15:33:32 +02:00
$data_bozza = post ( 'data_bozza' );
$data_accettazione = post ( 'data_accettazione' );
$data_rifiuto = post ( 'data_rifiuto' );
$data_conclusione = post ( 'data_conclusione' );
2017-08-04 16:28:16 +02:00
$esclusioni = post ( 'esclusioni' );
$descrizione = post ( 'descrizione' );
$validita = post ( 'validita' );
$idtipointervento = post ( 'idtipointervento' );
// $costo_diritto_chiamata = post('costo_diritto_chiamata');
// $ore_lavoro = str_replace( ",", ".", post('ore_lavoro') );
// $costo_orario = post('costo_orario');
// $costo_km = post('costo_km');
$idiva = post ( 'idiva' );
2019-01-25 11:02:36 +01:00
$id_documento_fe = post ( 'id_documento_fe' );
2019-02-26 21:37:37 +01:00
$num_item = post ( 'num_item' );
2019-01-24 20:31:01 +01:00
$codice_cig = post ( 'codice_cig' );
$codice_cup = post ( 'codice_cup' );
2017-08-04 16:28:16 +02:00
$query = 'UPDATE co_preventivi SET idstato=' . prepare ( $idstato ) . ',' .
' nome=' . prepare ( $nome ) . ',' .
' idanagrafica=' . prepare ( $idanagrafica ) . ',' .
2019-04-12 01:11:32 +02:00
' idsede=' . prepare ( $idsede ) . ',' .
2017-08-04 16:28:16 +02:00
' idagente=' . prepare ( $idagente ) . ',' .
' idreferente=' . prepare ( $idreferente ) . ',' .
' idpagamento=' . prepare ( $idpagamento ) . ',' .
' idporto=' . prepare ( $idporto ) . ',' .
' tempi_consegna=' . prepare ( $tempi_consegna ) . ',' .
' numero=' . prepare ( $numero ) . ',' .
' data_bozza=' . prepare ( $data_bozza ) . ',' .
' data_accettazione=' . prepare ( $data_accettazione ) . ',' .
' data_rifiuto=' . prepare ( $data_rifiuto ) . ',' .
' data_conclusione=' . prepare ( $data_conclusione ) . ',' .
' esclusioni=' . prepare ( $esclusioni ) . ',' .
' descrizione=' . prepare ( $descrizione ) . ',' .
2019-01-25 11:02:36 +01:00
' id_documento_fe=' . prepare ( $id_documento_fe ) . ',' .
2019-02-26 21:37:37 +01:00
' num_item=' . prepare ( $num_item ) . ',' .
2019-01-25 11:02:36 +01:00
' codice_cig=' . prepare ( $codice_cig ) . ',' .
' codice_cup=' . prepare ( $codice_cup ) . ',' .
2017-08-04 16:28:16 +02:00
' validita=' . prepare ( $validita ) . ',' .
' idtipointervento=' . prepare ( $idtipointervento ) . ',' .
' idiva=' . prepare ( $idiva ) . ' WHERE id=' . prepare ( $id_record );
$dbo -> query ( $query );
// update_budget_preventivo( $id_record );
2018-07-19 17:29:21 +02:00
flash () -> info ( tr ( 'Preventivo modificato correttamente!' ));
2017-08-04 16:28:16 +02:00
}
break ;
2018-12-23 14:01:59 +01:00
2018-12-07 10:47:44 +01:00
// Duplica preventivo
case 'copy' :
2019-04-19 20:52:02 +02:00
$new = $preventivo -> replicate ();
2019-05-10 17:54:18 +02:00
$new -> numero = Preventivo :: getNextNumero ();
2019-04-19 20:52:02 +02:00
$new -> idstato = 1 ;
$new -> master_revision = $preventivo -> id ;
$new -> save ();
$id_record = $new -> id ;
$righe = $preventivo -> getRighe ();
foreach ( $righe as $riga ) {
$new_riga = $riga -> replicate ();
$new_riga -> setParent ( $new );
$new_riga -> qta_evasa = 0 ;
$new_riga -> save ();
}
2018-12-28 08:07:56 +01:00
2018-12-07 10:47:44 +01:00
flash () -> info ( tr ( 'Preventivo duplicato correttamente!' ));
2017-08-04 16:28:16 +02:00
2018-12-07 10:47:44 +01:00
break ;
2018-12-23 14:01:59 +01:00
2017-08-04 16:28:16 +02:00
case 'addintervento' :
2018-07-19 15:33:32 +02:00
if ( post ( 'idintervento' ) !== null ) {
2017-08-04 16:28:16 +02:00
// Selezione costi da intervento
$idintervento = post ( 'idintervento' );
$rs = $dbo -> fetchArray ( 'SELECT * FROM in_interventi WHERE id=' . prepare ( $idintervento ));
$costo_km = $rs [ 0 ][ 'prezzo_km_unitario' ];
$costo_orario = $rs [ 0 ][ 'prezzo_ore_unitario' ];
2018-09-03 15:29:55 +02:00
$dbo -> update ( 'in_interventi' , [
'id_preventivo' => $id_record ,
], [ 'id' => $idintervento ]);
2017-08-04 16:28:16 +02:00
// Imposto il preventivo nello stato "In lavorazione" se inizio ad aggiungere interventi
$dbo -> query ( " UPDATE `co_preventivi` SET idstato=(SELECT `id` FROM `co_statipreventivi` WHERE `descrizione`='In lavorazione') WHERE `id`= " . prepare ( $id_record ));
2018-07-19 17:29:21 +02:00
flash () -> info ( tr ( 'Intervento _NUM_ aggiunto!' , [
2017-09-10 14:35:41 +02:00
'_NUM_' => $rs [ 0 ][ 'codice' ],
2018-07-07 13:56:22 +02:00
]));
2017-08-04 16:28:16 +02:00
}
break ;
// Scollegamento articolo da ordine
case 'unlink_articolo' :
2018-07-19 15:33:32 +02:00
if ( post ( 'idriga' ) !== null ) {
2017-08-04 16:28:16 +02:00
$idriga = post ( 'idriga' );
$idarticolo = post ( 'idarticolo' );
// Leggo la quantità di questo articolo nell'ordine
$query = 'SELECT qta, subtotale FROM co_righe_preventivi WHERE id=' . prepare ( $idriga );
$rs = $dbo -> fetchArray ( $query );
$qta = floatval ( $rs [ 0 ][ 'qta' ]);
$subtotale = $rs [ 0 ][ 'subtotale' ];
// Elimino la riga dal preventivo
$dbo -> query ( 'DELETE FROM co_righe_preventivi WHERE id=' . prepare ( $idriga ));
2018-07-19 17:29:21 +02:00
flash () -> info ( tr ( 'Riga rimossa!' ));
2017-08-04 16:28:16 +02:00
}
break ;
// Scollegamento intervento da preventivo
case 'unlink' :
if ( isset ( $_GET [ 'idpreventivo' ]) && isset ( $_GET [ 'idintervento' ])) {
2018-07-19 15:33:32 +02:00
$idintervento = get ( 'idintervento' );
2017-08-04 16:28:16 +02:00
2018-09-03 15:29:55 +02:00
$dbo -> update ( 'in_interventi' , [
'id_preventivo' => null ,
], [ 'id' => $idintervento ]);
2018-07-07 13:56:22 +02:00
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 ;
// eliminazione preventivo
case 'delete' :
2018-10-17 18:28:15 +02:00
$rs_revisioni = $dbo -> fetchArray ( 'SELECT master_revision FROM co_preventivi WHERE id=' . prepare ( $id_record ));
2018-10-25 16:57:39 +02:00
2018-10-17 18:28:15 +02:00
//Cancello preventivo e revisioni
$dbo -> query ( 'DELETE FROM co_preventivi WHERE master_revision=' . prepare ( $rs_revisioni [ 0 ][ 'master_revision' ]));
2018-09-03 15:29:55 +02:00
$dbo -> update ( 'in_interventi' , [
'id_preventivo' => null ,
], [ 'id_preventivo' => $id_record ]);
2017-08-04 16:28:16 +02:00
2018-07-19 17:29:21 +02:00
flash () -> info ( tr ( 'Preventivo eliminato!' ));
2017-08-04 16:28:16 +02:00
break ;
// Aggiungo una riga al preventivo
case 'addriga' :
$idarticolo = post ( 'idarticolo' );
$idiva = post ( 'idiva' );
$descrizione = post ( 'descrizione' );
2018-07-19 15:33:32 +02:00
$qta = post ( 'qta' );
$prezzo = post ( 'prezzo' );
2018-12-23 16:16:59 +01:00
$prezzo_acquisto = post ( 'prezzo_acquisto' );
2017-08-04 16:28:16 +02:00
// Calcolo dello sconto
2018-07-19 15:33:32 +02:00
$sconto_unitario = post ( 'sconto' );
$tipo_sconto = post ( 'tipo_sconto' );
2018-07-13 18:32:05 +02:00
$sconto = calcola_sconto ([
'sconto' => $sconto_unitario ,
'prezzo' => $prezzo ,
'tipo' => $tipo_sconto ,
'qta' => $qta ,
]);
2017-08-04 16:28:16 +02:00
$subtot = $prezzo * $qta ;
$um = post ( 'um' );
// Lettura iva dell'articolo
$rs2 = $dbo -> fetchArray ( 'SELECT descrizione, percentuale, indetraibile FROM co_iva WHERE id=' . prepare ( $idiva ));
$iva = ( $subtot - $sconto ) / 100 * $rs2 [ 0 ][ 'percentuale' ];
$iva_indetraibile = $iva / 100 * $rs2 [ 0 ][ 'indetraibile' ];
2018-12-23 14:25:20 +01:00
$dbo -> query ( 'INSERT INTO co_righe_preventivi(idpreventivo, idarticolo, idiva, desc_iva, iva, iva_indetraibile, descrizione, prezzo_unitario_acquisto, subtotale, um, qta, sconto, sconto_unitario, tipo_sconto, is_descrizione, `order`) VALUES (' . prepare ( $id_record ) . ', ' . prepare ( $idarticolo ) . ', ' . prepare ( $idiva ) . ', ' . prepare ( $rs2 [ 0 ][ 'descrizione' ]) . ', ' . prepare ( $iva ) . ', ' . prepare ( $iva_indetraibile ) . ', ' . prepare ( $descrizione ) . ', ' . prepare ( $prezzo_acquisto ) . ', ' . prepare ( $subtot ) . ', ' . prepare ( $um ) . ', ' . prepare ( $qta ) . ', ' . prepare ( $sconto ) . ', ' . prepare ( $sconto_unitario ) . ', ' . prepare ( $tipo_sconto ) . ', ' . prepare ( empty ( $qta )) . ', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_preventivi AS t WHERE idpreventivo=' . prepare ( $id_record ) . '))' );
2018-02-19 11:25:56 +01:00
// Messaggi informativi
if ( ! empty ( $idarticolo )) {
2018-07-19 17:29:21 +02:00
flash () -> info ( tr ( 'Articolo aggiunto!' ));
2018-02-19 11:25:56 +01:00
} elseif ( ! empty ( $qta )) {
2018-07-19 17:29:21 +02:00
flash () -> info ( tr ( 'Riga aggiunta!' ));
2018-02-19 17:48:04 +01:00
} else {
2018-07-19 17:29:21 +02:00
flash () -> info ( tr ( 'Riga descrittiva aggiunta!' ));
2018-01-18 19:03:06 +01:00
}
2018-02-19 11:25:56 +01:00
2018-01-18 19:03:06 +01:00
break ;
2017-08-04 16:28:16 +02:00
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 ( $preventivo );
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 {
flash () -> info ( tr ( 'Sconto/maggiorazione aggiunta!' ));
}
break ;
2017-08-04 16:28:16 +02:00
case 'editriga' :
$idriga = post ( 'idriga' );
$descrizione = post ( 'descrizione' );
2018-11-30 16:10:15 +01:00
$idarticolo = post ( 'idarticolo' );
2018-01-18 19:03:06 +01:00
//Info riga Preventivo
$rs = $dbo -> fetchArray ( 'SELECT * FROM co_righe_preventivi WHERE id=' . prepare ( $idriga ));
$is_descrizione = $rs [ 0 ][ 'is_descrizione' ];
2017-08-04 16:28:16 +02:00
2018-07-19 15:33:32 +02:00
$qta = post ( 'qta' );
$prezzo = post ( 'prezzo' );
2018-12-23 16:16:59 +01:00
$prezzo_acquisto = post ( 'prezzo_acquisto' );
2017-08-04 16:28:16 +02:00
$subtot = $prezzo * $qta ;
// Calcolo dello sconto
2018-07-19 15:33:32 +02:00
$sconto_unitario = post ( 'sconto' );
$tipo_sconto = post ( 'tipo_sconto' );
2018-07-13 18:32:05 +02:00
$sconto = calcola_sconto ([
'sconto' => $sconto_unitario ,
'prezzo' => $prezzo ,
'tipo' => $tipo_sconto ,
'qta' => $qta ,
]);
2017-08-04 16:28:16 +02:00
$idiva = post ( 'idiva' );
$um = post ( 'um' );
// Calcolo iva
$rs2 = $dbo -> fetchArray ( 'SELECT descrizione, percentuale, indetraibile FROM co_iva WHERE id=' . prepare ( $idiva ));
$iva = ( $subtot - $sconto ) / 100 * $rs2 [ 0 ][ 'percentuale' ];
$iva_indetraibile = $iva / 100 * $rs2 [ 0 ][ 'indetraibile' ];
2017-12-15 10:22:02 +01:00
$desc_iva = $rs2 [ 0 ][ 'descrizione' ];
2017-08-04 16:28:16 +02:00
2018-02-18 19:53:23 +01:00
if ( $is_descrizione == 0 ) {
2018-01-18 19:03:06 +01:00
// Modifica riga generica sul documento
2018-12-23 14:25:20 +01:00
$query = 'UPDATE co_righe_preventivi SET idarticolo=' . prepare ( $idarticolo ) . ', idiva=' . prepare ( $idiva ) . ', desc_iva=' . prepare ( $desc_iva ) . ', iva=' . prepare ( $iva ) . ', iva_indetraibile=' . prepare ( $iva_indetraibile ) . ', descrizione=' . prepare ( $descrizione ) . ', prezzo_unitario_acquisto=' . prepare ( $prezzo_acquisto ) . ',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 );
2018-02-18 19:53:23 +01:00
} else {
2018-01-18 19:03:06 +01:00
$query = 'UPDATE co_righe_preventivi SET descrizione=' . prepare ( $descrizione ) . ' WHERE id=' . prepare ( $idriga );
}
2017-08-04 16:28:16 +02:00
$dbo -> query ( $query );
2018-07-19 17:29:21 +02:00
flash () -> info ( 'Riga modificata!' );
2017-08-04 16:28:16 +02:00
break ;
2018-10-30 10:27:44 +01:00
case 'update_position' :
2018-11-30 16:10:15 +01:00
$orders = explode ( ',' , $_POST [ 'order' ]);
2018-10-30 10:27:44 +01:00
$order = 0 ;
2017-08-04 16:28:16 +02:00
2018-11-30 16:10:15 +01:00
foreach ( $orders as $idriga ) {
2018-10-30 10:27:44 +01:00
$dbo -> query ( 'UPDATE `co_righe_preventivi` SET `order`=' . prepare ( $order ) . ' WHERE id=' . prepare ( $idriga ));
2018-11-30 16:10:15 +01:00
++ $order ;
2018-10-30 10:27:44 +01:00
}
break ;
2018-10-25 16:57:39 +02:00
2018-10-17 18:28:15 +02:00
case 'add_revision' :
2018-10-25 16:57:39 +02:00
2018-10-17 18:28:15 +02:00
//Copio il preventivo
$rs_preventivo = $dbo -> fetchArray ( " SELECT * FROM co_preventivi WHERE id=' " . $id_record . " ' " );
2018-10-25 16:57:39 +02:00
2018-10-17 18:28:15 +02:00
//Tolgo il flag default_revision da tutte le revisioni e dal record_principale
2018-10-25 16:57:39 +02:00
$dbo -> query ( 'UPDATE co_preventivi SET default_revision=0 WHERE master_revision=' . prepare ( $rs_preventivo [ 0 ][ 'master_revision' ]));
2018-10-17 18:28:15 +02:00
$preventivo = [
'numero' => $rs_preventivo [ 0 ][ 'numero' ],
'nome' => $rs_preventivo [ 0 ][ 'nome' ],
'idagente' => $rs_preventivo [ 0 ][ 'idagente' ],
'data_bozza' => $rs_preventivo [ 0 ][ 'data_bozza' ],
'data_accettazione' => $rs_preventivo [ 0 ][ 'data_accettazione' ],
'data_rifiuto' => $rs_preventivo [ 0 ][ 'data_rifiuto' ],
'data_conclusione' => $rs_preventivo [ 0 ][ 'data_conclusione' ],
'data_pagamento' => $rs_preventivo [ 0 ][ 'data_pagamento' ],
'budget' => $rs_preventivo [ 0 ][ 'budget' ],
'descrizione' => $rs_preventivo [ 0 ][ 'descrizione' ],
'idstato' => $rs_preventivo [ 0 ][ 'idstato' ],
'validita' => $rs_preventivo [ 0 ][ 'validita' ],
'tempi_consegna' => $rs_preventivo [ 0 ][ 'tempi_consegna' ],
'idanagrafica' => $rs_preventivo [ 0 ][ 'idanagrafica' ],
'esclusioni' => $rs_preventivo [ 0 ][ 'esclusioni' ],
'idreferente' => $rs_preventivo [ 0 ][ 'idreferente' ],
'idpagamento' => $rs_preventivo [ 0 ][ 'idpagamento' ],
'idporto' => $rs_preventivo [ 0 ][ 'idporto' ],
'idtipointervento' => $rs_preventivo [ 0 ][ 'idtipointervento' ],
'idiva' => $rs_preventivo [ 0 ][ 'idiva' ],
'costo_diritto_chiamata' => $rs_preventivo [ 0 ][ 'costo_diritto_chiamata' ],
'ore_lavoro' => $rs_preventivo [ 0 ][ 'ore_lavoro' ],
'costo_orario' => $rs_preventivo [ 0 ][ 'costo_orario' ],
'costo_km' => $rs_preventivo [ 0 ][ 'costo_km' ],
'master_revision' => $rs_preventivo [ 0 ][ 'master_revision' ],
'default_revision' => '1' ,
];
2018-10-25 16:57:39 +02:00
2018-10-17 18:28:15 +02:00
$dbo -> insert ( 'co_preventivi' , $preventivo );
$id_record_new = $dbo -> lastInsertedID ();
2018-10-25 16:57:39 +02:00
$rs_righe_preventivo = $dbo -> fetchArray ( 'SELECT * FROM co_righe_preventivi WHERE idpreventivo=' . prepare ( $id_record ));
for ( $i = 0 ; $i < sizeof ( $rs_righe_preventivo ); ++ $i ) {
2018-10-17 18:28:15 +02:00
$righe_preventivo = [
'idpreventivo' => $id_record_new ,
'idarticolo' => $rs_righe_preventivo [ $i ][ 'idarticolo' ],
'is_descrizione' => $rs_righe_preventivo [ $i ][ 'is_descrizione' ],
'idiva' => $rs_righe_preventivo [ $i ][ 'idiva' ],
'desc_iva' => $rs_righe_preventivo [ $i ][ 'desc_iva' ],
'iva' => $rs_righe_preventivo [ $i ][ 'iva' ],
'iva_indetraibile' => $rs_righe_preventivo [ $i ][ 'iva_indetraibile' ],
'descrizione' => $rs_righe_preventivo [ $i ][ 'descrizione' ],
'subtotale' => $rs_righe_preventivo [ $i ][ 'subtotale' ],
'sconto' => $rs_righe_preventivo [ $i ][ 'sconto' ],
'sconto_unitario' => $rs_righe_preventivo [ $i ][ 'sconto_unitario' ],
'tipo_sconto' => $rs_righe_preventivo [ $i ][ 'tipo_sconto' ],
'um' => $rs_righe_preventivo [ $i ][ 'um' ],
'qta' => $rs_righe_preventivo [ $i ][ 'qta' ],
'order' => $rs_righe_preventivo [ $i ][ 'order' ],
];
$dbo -> insert ( 'co_righe_preventivi' , $righe_preventivo );
}
2018-10-25 16:57:39 +02:00
2018-10-17 18:28:15 +02:00
$id_record = $id_record_new ;
2018-10-25 16:57:39 +02:00
2018-10-17 18:28:15 +02:00
flash () -> info ( tr ( 'Aggiunta nuova revisione!' ));
break ;
2017-08-04 16:28:16 +02:00
}