2017-08-04 16:28:16 +02:00
< ? php
include_once __DIR__ . '/../../core.php' ;
include $docroot . '/modules/articoli/modutil.php' ;
2017-08-28 12:15:30 +02:00
include_once $docroot . '/modules/fatture/modutil.php' ;
2017-08-04 16:28:16 +02:00
2017-09-22 15:19:59 +02:00
$module = Modules :: get ( $id_module );
2017-08-04 16:28:16 +02:00
if ( $module [ 'name' ] == 'Ordini cliente' ) {
$dir = 'entrata' ;
} else {
$dir = 'uscita' ;
}
switch ( post ( 'op' )) {
case 'add' :
$idanagrafica = post ( 'idanagrafica' );
$data = $post [ 'data' ];
// Leggo se l'ordine è cliente o fornitore
$rs = $dbo -> fetchArray ( 'SELECT id FROM or_tipiordine WHERE dir=' . prepare ( $dir ));
$idtipoordine = $rs [ 0 ][ 'id' ];
if ( isset ( $post [ 'idanagrafica' ])) {
$numero = get_new_numeroordine ( $data );
if ( $dir == 'entrata' ) {
$numero_esterno = get_new_numerosecondarioordine ( $data );
} else {
$numero_esterno = '' ;
}
$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 l'ordine è un ordine cliente 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' );
}
$query = 'INSERT INTO or_ordini( numero, numero_esterno, idanagrafica, idtipoordine, idpagamento, data, idstatoordine ) VALUES ( ' . prepare ( $numero ) . ', ' . prepare ( $numero_esterno ) . ', ' . prepare ( $idanagrafica ) . ', ' . prepare ( $idtipoordine ) . ', ' . prepare ( $idpagamento ) . ', ' . prepare ( $data ) . " , (SELECT `id` FROM `or_statiordine` WHERE `descrizione`='Non evaso') ) " ;
$dbo -> query ( $query );
$id_record = $dbo -> lastInsertedID ();
2017-09-10 14:35:41 +02:00
$_SESSION [ 'infos' ][] = tr ( 'Aggiunto ordine numero _NUM_!' , [
'_NUM_' => $numero ,
]);
2017-08-04 16:28:16 +02:00
}
break ;
case 'update' :
2018-05-11 15:56:08 +02:00
$numero_esterno = post ( 'numero_esterno' );
$numero = post ( 'numero' );
$data = $post [ 'data' ];
$idanagrafica = post ( 'idanagrafica' );
$note = post ( 'note' );
$idstatoordine = post ( 'idstatoordine' );
$idpagamento = post ( 'idpagamento' );
$idsede = post ( 'idsede' );
$idconto = post ( 'idconto' );
$idagente = post ( 'idagente' );
$totale_imponibile = get_imponibile_ordine ( $id_record );
$totale_ordine = get_totale_ordine ( $id_record );
$tipo_sconto = $post [ 'tipo_sconto_generico' ];
$sconto = $post [ 'sconto_generico' ];
if ( $dir == 'uscita' ) {
$idrivalsainps = post ( 'idrivalsainps' );
$idritenutaacconto = post ( 'idritenutaacconto' );
$bollo = post ( 'bollo' );
} else {
$idrivalsainps = 0 ;
$idritenutaacconto = 0 ;
$bollo = 0 ;
}
// Leggo la descrizione del pagamento
$query = 'SELECT descrizione FROM co_pagamenti WHERE id=' . prepare ( $idpagamento );
$rs = $dbo -> fetchArray ( $query );
$pagamento = $rs [ 0 ][ 'descrizione' ];
// Query di aggiornamento
$query = 'UPDATE or_ordini SET idanagrafica=' . prepare ( $idanagrafica ) . ',' .
' numero=' . prepare ( $numero ) . ',' .
' data=' . prepare ( $data ) . ',' .
' idagente=' . prepare ( $idagente ) . ',' .
' idstatoordine=' . prepare ( $idstatoordine ) . ',' .
' idpagamento=' . prepare ( $idpagamento ) . ',' .
' idsede=' . prepare ( $idsede ) . ',' .
' numero_esterno=' . prepare ( $numero_esterno ) . ',' .
' note=' . prepare ( $note ) . ',' .
' idconto=' . prepare ( $idconto ) . ',' .
' idrivalsainps=' . prepare ( $idrivalsainps ) . ',' .
' idritenutaacconto=' . prepare ( $idritenutaacconto ) . ',' .
' tipo_sconto_globale=' . prepare ( $tipo_sconto ) . ',' .
' sconto_globale=' . prepare ( $sconto ) . ',' .
' bollo=0, rivalsainps=0, ritenutaacconto=0 WHERE id=' . prepare ( $id_record );
if ( $dbo -> query ( $query )) {
aggiorna_sconto ([
'parent' => 'or_ordini' ,
'row' => 'or_righe_ordini' ,
], [
'parent' => 'id' ,
'row' => 'idordine' ,
], $id_record );
$query = 'SELECT descrizione FROM or_statiordine WHERE id=' . prepare ( $idstatoordine );
2017-08-04 16:28:16 +02:00
$rs = $dbo -> fetchArray ( $query );
2018-05-11 15:56:08 +02:00
// Ricalcolo inps, ritenuta e bollo (se l'ordine non è stato evaso)
if ( $dir == 'entrata' ) {
if ( $rs [ 0 ][ 'descrizione' ] != 'Evaso' ) {
ricalcola_costiagg_ordine ( $id_record );
}
} else {
if ( $rs [ 0 ][ 'descrizione' ] != 'Evaso' ) {
ricalcola_costiagg_ordine ( $id_record , $idrivalsainps , $idritenutaacconto , $bollo );
}
2017-08-04 16:28:16 +02:00
}
2018-05-11 15:56:08 +02:00
$_SESSION [ 'infos' ][] = tr ( 'Ordine modificato correttamente!' );
2017-08-04 16:28:16 +02:00
}
2018-05-11 15:56:08 +02:00
2017-08-04 16:28:16 +02:00
break ;
case 'addarticolo' :
2018-05-11 15:56:08 +02:00
if ( isset ( $post [ 'idarticolo' ])) {
2017-08-04 16:28:16 +02:00
$idarticolo = post ( 'idarticolo' );
$idiva = post ( 'idiva' );
$descrizione = post ( 'descrizione' );
$qta = post ( 'qta' );
$prezzo_vendita = 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-09-05 17:31:58 +02:00
add_articolo_inordine ( $id_record , $idarticolo , $descrizione , $idiva , $qta , $prezzo_vendita * $qta , $sconto , $sconto_unitario , $tipo_sconto );
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
}
ricalcola_costiagg_ordine ( $id_record );
break ;
case 'addriga' :
2018-05-11 15:56:08 +02:00
// Selezione costi da intervento
$descrizione = post ( 'descrizione' );
$prezzo = post ( 'prezzo' );
$qta = post ( 'qta' );
$idiva = post ( 'idiva' );
$um = post ( 'um' );
$subtot = $prezzo * $qta ;
// 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 ;
// Calcolo iva
$query = 'SELECT descrizione, percentuale, indetraibile FROM co_iva WHERE id=' . prepare ( $idiva );
$rs = $dbo -> fetchArray ( $query );
$iva = ( $subtot - $sconto ) / 100 * $rs [ 0 ][ 'percentuale' ];
$iva_indetraibile = $iva / 100 * $rs [ 0 ][ 'indetraibile' ];
$query = 'INSERT INTO or_righe_ordini(idordine, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, is_descrizione, `order`) VALUES(' . prepare ( $id_record ) . ', ' . prepare ( $idiva ) . ', ' . prepare ( $rs [ 0 ][ 'descrizione' ]) . ', ' . prepare ( $iva ) . ', ' . prepare ( $iva_indetraibile ) . ', ' . prepare ( $descrizione ) . ', ' . prepare ( $subtot ) . ', ' . prepare ( $sconto ) . ', ' . prepare ( $sconto_unitario ) . ', ' . prepare ( $tipo_sconto ) . ', ' . prepare ( $um ) . ', ' . prepare ( $qta ) . ', ' . prepare ( empty ( $qta )) . ', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM or_righe_ordini AS t WHERE idordine=' . prepare ( $id_record ) . '))' ;
$dbo -> query ( $query );
// Messaggi informativi
if ( ! empty ( $idarticolo )) {
$_SESSION [ 'infos' ][] = tr ( 'Articolo aggiunto!' );
} elseif ( ! empty ( $qta )) {
$_SESSION [ 'infos' ][] = tr ( 'Riga aggiunta!' );
} else {
$_SESSION [ 'infos' ][] = tr ( 'Riga descrittiva aggiunta!' );
}
2018-02-09 17:40:58 +01:00
2018-05-11 15:56:08 +02:00
// Ricalcolo inps, ritenuta e bollo
if ( $dir == 'entrata' ) {
ricalcola_costiagg_ordine ( $id_record );
} else {
ricalcola_costiagg_ordine ( $id_record );
2018-01-18 19:03:06 +01:00
}
2018-05-11 15:56:08 +02:00
2018-01-18 19:03:06 +01:00
break ;
2017-08-04 16:28:16 +02:00
// Scollegamento articolo da ordine
case 'unlink_articolo' :
$idarticolo = post ( 'idarticolo' );
$idriga = post ( 'idriga' );
2018-05-11 15:56:08 +02:00
if ( ! empty ( $idarticolo )) {
2017-09-05 17:31:58 +02:00
if ( ! rimuovi_articolo_daordine ( $idarticolo , $id_record , $idriga )) {
$_SESSION [ 'errors' ][] = tr ( 'Alcuni serial number sono già stati utilizzati!' );
return ;
}
2017-08-04 16:28:16 +02:00
// if( $dbo->query($query) ){
2017-09-10 14:35:41 +02:00
// Ricalcolo inps, ritenuta e bollo
2017-08-04 16:28:16 +02:00
if ( $dir == 'entrata' ) {
ricalcola_costiagg_ordine ( $id_record );
} else {
ricalcola_costiagg_ordine ( $id_record , 0 , 0 , 0 );
}
2017-09-04 12:02:29 +02:00
$_SESSION [ 'infos' ][] = tr ( 'Articolo rimosso!' );
2017-08-04 16:28:16 +02:00
}
break ;
// Scollegamento riga generica da ordine
case 'unlink_riga' :
$idriga = post ( 'idriga' );
2018-05-11 15:56:08 +02:00
if ( ! empty ( $idriga )) {
2017-08-04 16:28:16 +02:00
$query = 'DELETE FROM or_righe_ordini WHERE idordine=' . prepare ( $id_record ) . ' AND id=' . prepare ( $idriga );
$dbo -> query ( $query );
// Ricalcolo inps, ritenuta e bollo
if ( $dir == 'entrata' ) {
ricalcola_costiagg_ordine ( $id_record );
} else {
ricalcola_costiagg_ordine ( $id_record , 0 , 0 , 0 );
}
2017-09-04 12:02:29 +02:00
$_SESSION [ 'infos' ][] = tr ( 'Riga rimossa!' );
2017-08-04 16:28:16 +02:00
}
break ;
// Modifica riga
case 'editriga' :
if ( isset ( $post [ 'idriga' ])) {
$idriga = post ( 'idriga' );
$descrizione = post ( 'descrizione' );
$prezzo = post ( 'prezzo' );
$qta = post ( 'qta' );
$idiva = post ( 'idiva' );
$um = post ( 'um' );
$subtot = $prezzo * $qta ;
// 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-09-05 17:31:58 +02:00
// Lettura idarticolo dalla riga documento
2018-01-18 19:03:06 +01:00
$rs = $dbo -> fetchArray ( 'SELECT idordine, idarticolo, qta, abilita_serial, is_descrizione FROM or_righe_ordini WHERE id=' . prepare ( $idriga ));
2017-09-05 17:31:58 +02:00
$idarticolo = $rs [ 0 ][ 'idarticolo' ];
$old_qta = $rs [ 0 ][ 'qta' ];
$idordine = $rs [ 0 ][ 'idordine' ];
$abilita_serial = $rs [ 0 ][ 'abilita_serial' ];
2018-01-18 19:03:06 +01:00
$is_descrizione = $rs [ 0 ][ 'is_descrizione' ];
2017-09-05 17:31:58 +02:00
// Controllo per gestire i serial
if ( ! empty ( $idarticolo )) {
if ( ! controlla_seriali ( 'id_riga_ordine' , $idriga , $old_qta , $qta , $dir )) {
$_SESSION [ 'errors' ][] = tr ( 'Alcuni serial number sono già stati utilizzati!' );
return ;
}
}
2017-08-04 16:28:16 +02:00
// Calcolo iva
$query = 'SELECT * FROM co_iva WHERE id=' . prepare ( $idiva );
$rs = $dbo -> fetchArray ( $query );
$iva = ( $subtot - $sconto ) / 100 * $rs [ 0 ][ 'percentuale' ];
$iva_indetraibile = $iva / 100 * $rs [ 0 ][ 'indetraibile' ];
$desc_iva = $rs [ 0 ][ 'descrizione' ];
2018-02-09 17:40:58 +01:00
if ( $is_descrizione == 0 ) {
2018-01-18 19:03:06 +01:00
// Modifica riga generica sul documento
$query = 'UPDATE or_righe_ordini SET idiva=' . prepare ( $idiva ) . ', desc_iva=' . prepare ( $rs [ 0 ][ 'descrizione' ]) . ', 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 );
2018-02-09 17:40:58 +01:00
} else {
2018-01-18 19:03:06 +01:00
$query = 'UPDATE or_righe_ordini SET descrizione=' . prepare ( $descrizione ) . ' WHERE 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 modificata!' );
2017-08-04 16:28:16 +02:00
// Ricalcolo inps, ritenuta e bollo
if ( $dir == 'entrata' ) {
ricalcola_costiagg_ordine ( $id_record );
} else {
ricalcola_costiagg_ordine ( $id_record );
}
}
}
break ;
// eliminazione ordine
case 'delete' :
2017-09-05 17:31:58 +02:00
// Se ci sono degli articoli collegati (ma non collegati a preventivi o interventi) li rimetto nel magazzino
$query = 'SELECT id, idarticolo FROM or_righe_ordini WHERE idordine=' . prepare ( $id_record ) . ' AND NOT idarticolo=0' ;
$rs = $dbo -> fetchArray ( $query );
foreach ( $rs as $value ) {
2018-02-09 17:40:58 +01:00
$non_rimovibili = seriali_non_rimuovibili ( 'id_riga_documento' , $value [ 'id' ], $dir );
2017-09-05 17:31:58 +02:00
if ( ! empty ( $non_rimovibili )) {
2017-09-04 12:02:29 +02:00
$_SESSION [ 'errors' ][] = tr ( 'Alcuni serial number sono già stati utilizzati!' );
2017-08-04 16:28:16 +02:00
return ;
}
}
$dbo -> query ( 'DELETE FROM or_ordini WHERE id=' . prepare ( $id_record ));
$dbo -> query ( 'DELETE FROM or_righe_ordini WHERE idordine=' . prepare ( $id_record ));
2017-09-04 12:02:29 +02:00
$_SESSION [ 'infos' ][] = tr ( 'Ordine eliminato!' );
2017-08-04 16:28:16 +02:00
break ;
case 'add_serial' :
2017-09-05 17:31:58 +02:00
$idriga = $post [ 'idriga' ];
$idarticolo = $post [ 'idarticolo' ];
2017-08-04 16:28:16 +02:00
2017-09-05 17:31:58 +02:00
$serials = ( array ) $post [ 'serial' ];
foreach ( $serials as $key => $value ) {
if ( empty ( $value )) {
unset ( $serials [ $key ]);
}
2017-08-04 16:28:16 +02:00
}
2017-09-05 17:31:58 +02:00
$dbo -> sync ( 'mg_prodotti' , [ 'id_riga_ordine' => $idriga , 'dir' => $dir , 'id_articolo' => $idarticolo ], [ 'serial' => $serials ]);
2017-08-04 16:28:16 +02:00
break ;
case 'update_position' :
$start = filter ( 'start' );
$end = filter ( 'end' );
$id = filter ( 'id' );
if ( $start > $end ) {
$dbo -> query ( 'UPDATE `or_righe_ordini` SET `order`=`order` + 1 WHERE `order`>=' . prepare ( $end ) . ' AND `order`<' . prepare ( $start ) . ' AND `idordine`=' . prepare ( $id_record ));
$dbo -> query ( 'UPDATE `or_righe_ordini` SET `order`=' . prepare ( $end ) . ' WHERE id=' . prepare ( $id ));
} elseif ( $end != $start ) {
$dbo -> query ( 'UPDATE `or_righe_ordini` SET `order`=`order` - 1 WHERE `order`>' . prepare ( $start ) . ' AND `order`<=' . prepare ( $end ) . ' AND `idordine`=' . prepare ( $id_record ));
$dbo -> query ( 'UPDATE `or_righe_ordini` SET `order`=' . prepare ( $end ) . ' WHERE id=' . prepare ( $id ));
}
break ;
}
2017-08-28 12:15:30 +02:00
if ( post ( 'op' ) !== null && post ( 'op' ) != 'update' ) {
aggiorna_sconto ([
'parent' => 'or_ordini' ,
'row' => 'or_righe_ordini' ,
], [
'parent' => 'id' ,
'row' => 'idordine' ,
], $id_record );
2017-08-04 16:28:16 +02:00
}