2017-08-04 16:28:16 +02:00
< ? php
include_once __DIR__ . '/../../core.php' ;
switch ( post ( 'op' )) {
case 'update' :
// Leggo tutti i valori passati dal POST e li salvo in un array
$dbo -> update ( 'an_anagrafiche' , [
'ragione_sociale' => $post [ 'ragione_sociale' ],
'tipo' => $post [ 'tipo' ],
'piva' => $post [ 'piva' ],
'codice_fiscale' => $post [ 'codice_fiscale' ],
'data_nascita' => $post [ 'data_nascita' ],
'luogo_nascita' => $post [ 'luogo_nascita' ],
'sesso' => $post [ 'sesso' ],
'capitale_sociale' => $post [ 'capitale_sociale' ],
'indirizzo' => $post [ 'indirizzo' ],
'indirizzo2' => $post [ 'indirizzo2' ],
'citta' => $post [ 'citta' ],
'cap' => $post [ 'cap' ],
'provincia' => $post [ 'provincia' ],
'km' => $post [ 'km' ],
'id_nazione' => ! empty ( $post [ 'id_nazione' ]) ? $post [ 'id_nazione' ] : null ,
'telefono' => $post [ 'telefono' ],
'cellulare' => $post [ 'cellulare' ],
'fax' => $post [ 'fax' ],
'email' => $post [ 'email' ],
'idsede_fatturazione' => $post [ 'idsede_fatturazione' ],
'note' => $post [ 'note' ],
'codiceri' => $post [ 'codiceri' ],
'codicerea' => $post [ 'codicerea' ],
'appoggiobancario' => $post [ 'appoggiobancario' ],
'filiale' => $post [ 'filiale' ],
'codiceiban' => $post [ 'codiceiban' ],
'bic' => $post [ 'bic' ],
'diciturafissafattura' => $post [ 'diciturafissafattura' ],
'idpagamento_acquisti' => $post [ 'idpagamento_acquisti' ],
'idpagamento_vendite' => $post [ 'idpagamento_vendite' ],
'idlistino' => $post [ 'idlistino' ],
'idiva' => $post [ 'idiva' ],
'settore' => $post [ 'settore' ],
'marche' => $post [ 'marche' ],
'dipendenti' => $post [ 'dipendenti' ],
'macchine' => $post [ 'macchine' ],
'idagente' => $post [ 'idagente' ],
'idrelazione' => $post [ 'idrelazione' ],
'sitoweb' => $post [ 'sitoweb' ],
'idzona' => $post [ 'idzona' ],
'nome_cognome' => $post [ 'nome_cognome' ],
'iscrizione_tribunale' => $post [ 'iscrizione_tribunale' ],
'cciaa' => $post [ 'cciaa' ],
'cciaa_citta' => $post [ 'cciaa_citta' ],
'n_alboartigiani' => $post [ 'n_alboartigiani' ],
'foro_competenza' => $post [ 'foro_competenza' ],
'colore' => $post [ 'colore' ],
'idtipointervento_default' => $post [ 'idtipointervento_default' ],
], [ 'idanagrafica' => $id_record ]);
$_SESSION [ 'infos' ][] = str_replace ( '_NAME_' , '"' . $post [ 'ragione_sociale' ] . '"' , " Informazioni per l'anagrafica _NAME_ salvate correttamente! " );
// Aggiorno il codice anagrafica se non è già presente, altrimenti lo ignoro
$esiste = $dbo -> fetchNum ( 'SELECT idanagrafica FROM an_anagrafiche WHERE codice=' . prepare ( $post [ 'codice' ]) . ' AND NOT idanagrafica=' . prepare ( $id_record ));
// Verifica dell'esistenza codice anagrafica
if ( $esiste ) {
2017-09-04 12:02:29 +02:00
$_SESSION [ 'errors' ][] = tr ( " Il codice anagrafica inserito esiste già! Inserirne un'altro... " );
2017-08-04 16:28:16 +02:00
} else {
$dbo -> query ( 'UPDATE an_anagrafiche SET codice=' . prepare ( $post [ 'codice' ]) . ' WHERE idanagrafica=' . prepare ( $id_record ));
}
2017-08-31 12:52:15 +02:00
// Aggiorno gli agenti collegati
$dbo -> sync ( 'an_anagrafiche_agenti' , [ 'idanagrafica' => $id_record ], [ 'idagente' => ( array ) $post [ 'idagenti' ]]);
2017-08-04 16:28:16 +02:00
// Se l'agente di default è stato elencato anche tra gli agenti secondari lo rimuovo
2017-08-31 16:23:26 +02:00
if ( ! empty ( $post [ 'idagente' ])) {
2017-08-29 12:42:42 +02:00
$dbo -> query ( 'DELETE FROM an_anagrafiche_agenti WHERE idanagrafica=' . prepare ( $id_record ) . ' AND idagente=' . prepare ( $post [ 'idagente' ]));
2017-08-04 16:28:16 +02:00
}
// Aggiorno le tipologie di anagrafica
2017-08-29 12:42:42 +02:00
$dbo -> sync ( 'an_tipianagrafiche_anagrafiche' , [ 'idanagrafica' => $id_record ], [ 'idtipoanagrafica' => ( array ) $post [ 'idtipoanagrafica' ]]);
2017-08-04 16:28:16 +02:00
// Verifico se esiste già l'associazione dell'anagrafica a conti del partitario
$rs = $dbo -> fetchArray ( 'SELECT idconto_cliente, idconto_fornitore FROM an_anagrafiche WHERE idanagrafica=' . prepare ( $id_record ));
$idconto_cliente = $rs [ 0 ][ 'idconto_cliente' ];
$idconto_fornitore = $rs [ 0 ][ 'idconto_fornitore' ];
// Creo il relativo conto nel partitario se non esiste
2017-08-31 16:23:26 +02:00
if ( empty ( $idconto_cliente ) && in_array ( $id_cliente , $post [ 'idtipoanagrafica' ])) {
// Calcolo prossimo numero cliente
$rs = $dbo -> fetchArray ( " SELECT MAX(CAST(co_pianodeiconti3.numero AS UNSIGNED)) AS max_numero FROM co_pianodeiconti3 INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE co_pianodeiconti2.descrizione='Crediti clienti e crediti diversi' " );
$new_numero = $rs [ 0 ][ 'max_numero' ] + 1 ;
$new_numero = str_pad ( $new_numero , 6 , '0' , STR_PAD_LEFT );
2017-08-04 16:28:16 +02:00
2017-08-31 16:23:26 +02:00
$dbo -> query ( 'INSERT INTO co_pianodeiconti3(numero, descrizione, idpianodeiconti2, can_delete, can_edit) VALUES(' . prepare ( $new_numero ) . ', ' . prepare ( $post [ 'ragione_sociale' ]) . " , (SELECT id FROM co_pianodeiconti2 WHERE descrizione='Crediti clienti e crediti diversi'), 1, 1) " );
$idconto = $dbo -> lastInsertedID ();
2017-08-04 16:28:16 +02:00
2017-08-31 16:23:26 +02:00
// Collegamento conto
$dbo -> query ( 'UPDATE an_anagrafiche SET idconto_cliente=' . prepare ( $idconto ) . ' WHERE idanagrafica=' . prepare ( $id_record ));
}
if ( empty ( $idconto_fornitore ) && in_array ( $id_fornitore , $post [ 'idtipoanagrafica' ])) {
// Calcolo prossimo numero cliente
$rs = $dbo -> fetchArray ( " SELECT MAX(CAST(co_pianodeiconti3.numero AS UNSIGNED)) AS max_numero FROM co_pianodeiconti3 INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE co_pianodeiconti2.descrizione='Debiti fornitori e debiti diversi' " );
$new_numero = $rs [ 0 ][ 'max_numero' ] + 1 ;
$new_numero = str_pad ( $new_numero , 6 , '0' , STR_PAD_LEFT );
2017-08-04 16:28:16 +02:00
2017-08-31 16:23:26 +02:00
$dbo -> query ( 'INSERT INTO co_pianodeiconti3(numero, descrizione, idpianodeiconti2, can_delete, can_edit) VALUES(' . prepare ( $new_numero ) . ', ' . prepare ( $post [ 'ragione_sociale' ]) . " , (SELECT id FROM co_pianodeiconti2 WHERE descrizione='Debiti fornitori e debiti diversi'), 1, 1) " );
$idconto = $dbo -> lastInsertedID ();
2017-08-04 16:28:16 +02:00
2017-08-31 16:23:26 +02:00
// Collegamento conto
$dbo -> query ( 'UPDATE an_anagrafiche SET idconto_fornitore=' . prepare ( $idconto ) . ' WHERE idanagrafica=' . prepare ( $id_record ));
2017-08-04 16:28:16 +02:00
}
break ;
case 'add' :
$idtipoanagrafica = post ( 'idtipoanagrafica' );
$ragione_sociale = post ( 'ragione_sociale' );
// Inserimento anagrafica base
2017-08-31 16:23:26 +02:00
// Leggo l'ultimo codice anagrafica per calcolare il successivo
$rs = $dbo -> fetchArray ( 'SELECT codice FROM an_anagrafiche ORDER BY CAST(codice AS SIGNED) DESC LIMIT 0, 1' );
$codice = get_next_code ( $rs [ 0 ][ 'codice' ], 1 , get_var ( 'Formato codice anagrafica' ));
2017-08-04 16:28:16 +02:00
2017-08-31 16:23:26 +02:00
// Se ad aggiungere un cliente è un agente, lo imposto come agente di quel cliente
// Lettura tipologia dell'utente loggato
$agente_is_logged = false ;
2017-08-04 16:28:16 +02:00
2017-08-31 16:23:26 +02:00
$rs = $dbo -> fetchArray ( 'SELECT descrizione FROM an_tipianagrafiche INNER JOIN an_tipianagrafiche_anagrafiche ON an_tipianagrafiche.idtipoanagrafica = an_tipianagrafiche_anagrafiche.idtipoanagrafica WHERE idanagrafica = ' . prepare ( $user [ 'idanagrafica' ]));
2017-08-04 16:28:16 +02:00
2017-08-31 16:23:26 +02:00
for ( $i = 0 ; $i < count ( $rs ); ++ $i ) {
if ( $rs [ $i ][ 'descrizione' ] == 'Agente' ) {
$agente_is_logged = true ;
$i = count ( $rs );
2017-08-04 16:28:16 +02:00
}
2017-08-31 16:23:26 +02:00
}
2017-08-04 16:28:16 +02:00
2017-08-31 16:23:26 +02:00
$idagente = ( $agente_is_logged && in_array ( $id_cliente , $post [ 'idtipoanagrafica' ])) ? $user [ 'idanagrafica' ] : 0 ;
2017-08-04 16:28:16 +02:00
2017-08-31 16:23:26 +02:00
// Inserisco l'anagrafica
$dbo -> insert ( 'an_anagrafiche' , [
'ragione_sociale' => $ragione_sociale ,
'codice' => $codice ,
'idagente' => $idagente ,
]);
2017-08-04 16:28:16 +02:00
2017-08-31 16:23:26 +02:00
$new_id = $dbo -> lastInsertedID ();
2017-08-04 16:28:16 +02:00
// Inserisco il rapporto dell'anagrafica (cliente, tecnico, ecc)
2017-08-29 12:42:42 +02:00
$dbo -> sync ( 'an_tipianagrafiche_anagrafiche' , [ 'idanagrafica' => $new_id ], [ 'idtipoanagrafica' => ( array ) $idtipoanagrafica ]);
2017-08-04 16:28:16 +02:00
2017-08-31 16:23:26 +02:00
if ( in_array ( $id_azienda , $post [ 'idtipoanagrafica' ])) {
2017-08-04 16:28:16 +02:00
$dbo -> query ( 'UPDATE zz_settings SET valore=' . prepare ( $new_id ) . " WHERE nome='Azienda predefinita' " );
2017-09-04 12:02:29 +02:00
$_SESSION [ 'infos' ][] = tr ( 'Anagrafica Azienda impostata come predefinita. Per ulteriori informazionioni, visitare "Strumenti -> Impostazioni -> Generali".' );
2017-08-04 16:28:16 +02:00
}
2017-08-31 16:23:26 +02:00
// Creo il relativo conto nel partitario (cliente)
if ( in_array ( $id_cliente , $post [ 'idtipoanagrafica' ])) {
2017-08-04 16:28:16 +02:00
// Calcolo prossimo numero cliente
$rs = $dbo -> fetchArray ( " SELECT MAX(CAST(co_pianodeiconti3.numero AS UNSIGNED)) AS max_numero FROM co_pianodeiconti3 INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE co_pianodeiconti2.descrizione='Crediti clienti e crediti diversi' " );
$new_numero = $rs [ 0 ][ 'max_numero' ] + 1 ;
$new_numero = str_pad ( $new_numero , 6 , '0' , STR_PAD_LEFT );
// Creazione conto
$dbo -> query ( 'INSERT INTO co_pianodeiconti3(numero, descrizione, idpianodeiconti2, can_delete, can_edit) VALUES(' . prepare ( $new_numero ) . ', ' . prepare ( $ragione_sociale ) . " , (SELECT id FROM co_pianodeiconti2 WHERE descrizione='Crediti clienti e crediti diversi'), 1, 1) " );
$idconto = $dbo -> lastInsertedID ();
// Collegamento conto
$dbo -> query ( 'UPDATE an_anagrafiche SET idconto_cliente=' . prepare ( $idconto ) . ' WHERE idanagrafica=' . prepare ( $new_id ));
2017-08-31 16:23:26 +02:00
}
// Creo il relativo conto nel partitario (fornitore)
if ( in_array ( $id_fornitore , $post [ 'idtipoanagrafica' ])) {
2017-08-04 16:28:16 +02:00
// Calcolo prossimo numero cliente
$rs = $dbo -> fetchArray ( " SELECT MAX(CAST(co_pianodeiconti3.numero AS UNSIGNED)) AS max_numero FROM co_pianodeiconti3 INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE co_pianodeiconti2.descrizione='Debiti fornitori e debiti diversi' " );
$new_numero = $rs [ 0 ][ 'max_numero' ] + 1 ;
$new_numero = str_pad ( $new_numero , 6 , '0' , STR_PAD_LEFT );
// Creazione conto
$dbo -> query ( 'INSERT INTO co_pianodeiconti3(numero, descrizione, idpianodeiconti2, can_delete, can_edit) VALUES(' . prepare ( $new_numero ) . ', ' . prepare ( $ragione_sociale ) . " , (SELECT id FROM co_pianodeiconti2 WHERE descrizione='Debiti fornitori e debiti diversi'), 1, 1) " );
$idconto = $dbo -> lastInsertedID ();
// Collegamento conto
$dbo -> query ( 'UPDATE an_anagrafiche SET idconto_fornitore=' . prepare ( $idconto ) . ' WHERE idanagrafica=' . prepare ( $new_id ));
}
$id_record = $new_id ;
2017-08-31 16:23:26 +02:00
// Lettura tipologia della nuova anagrafica
if ( ! empty ( $idtipoanagrafica )) {
$rs = $dbo -> fetchArray ( 'SELECT descrizione FROM an_tipianagrafiche WHERE idtipoanagrafica IN (' . implode ( ',' , $idtipoanagrafica ) . ')' );
$tipoanagrafica_dst = implode ( ', ' , array_column ( $rs , 'descrizione' ));
}
2017-08-28 15:29:03 +02:00
if ( isAjaxRequest () && str_contains ( $tipoanagrafica_dst , post ( 'tipoanagrafica' ))) {
2017-08-04 16:28:16 +02:00
echo json_encode ([ 'id' => $id_record , 'text' => $ragione_sociale ]);
}
2017-09-04 12:02:29 +02:00
$_SESSION [ 'infos' ][] = str_replace ( '_TYPE_' , '"' . $tipoanagrafica_dst . '"' , tr ( 'Aggiunta nuova anagrafica di tipo _TYPE_' ));
2017-08-04 16:28:16 +02:00
break ;
case 'delete' :
2017-08-29 12:42:42 +02:00
// Se l'anagrafica non è l'azienda principale, la disattivo
2017-08-28 15:29:03 +02:00
if ( str_contains ( $records [ 0 ][ 'idtipianagrafica' ], $id_azienda ) === false ) {
2017-08-04 16:28:16 +02:00
$dbo -> query ( 'UPDATE an_anagrafiche SET deleted = 1 WHERE idanagrafica = ' . prepare ( $id_record ) . Modules :: getAdditionalsQuery ( $id_module ));
2017-09-04 12:02:29 +02:00
$_SESSION [ 'infos' ][] = tr ( 'Anagrafica eliminata!' );
2017-08-04 16:28:16 +02:00
}
break ;
}