2017-08-04 16:28:16 +02:00
< ? php
include_once __DIR__ . '/../../core.php' ;
2018-07-03 15:05:27 +02:00
$id_azienda = $dbo -> fetchArray ( " SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione='Azienda' " )[ 0 ][ 'idtipoanagrafica' ];
$id_cliente = $dbo -> fetchArray ( " SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione='Cliente' " )[ 0 ][ 'idtipoanagrafica' ];
$id_fornitore = $dbo -> fetchArray ( " SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione='Fornitore' " )[ 0 ][ 'idtipoanagrafica' ];
$id_tecnico = $dbo -> fetchArray ( " SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione='Tecnico' " )[ 0 ][ 'idtipoanagrafica' ];
2017-08-04 16:28:16 +02:00
switch ( post ( 'op' )) {
case 'update' :
2018-07-19 15:33:32 +02:00
$partita_iva = trim ( strtoupper ( post ( 'piva' )));
$codice_fiscale = trim ( strtoupper ( post ( 'codice_fiscale' )));
2018-03-02 19:01:30 +01:00
2017-08-04 16:28:16 +02:00
// Leggo tutti i valori passati dal POST e li salvo in un array
$dbo -> update ( 'an_anagrafiche' , [
2018-07-19 15:33:32 +02:00
'ragione_sociale' => post ( 'ragione_sociale' ),
'tipo' => post ( 'tipo' ),
'piva' => $partita_iva ,
'codice_fiscale' => $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' ),
'pec' => post ( 'pec' ),
'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_acquisti' => post ( 'idlistino_acquisti' ),
'idlistino_vendite' => post ( 'idlistino_vendite' ),
'idiva_acquisti' => post ( 'idiva_acquisti' ),
'idiva_vendite' => post ( 'idiva_vendite' ),
'idbanca_acquisti' => post ( 'idbanca_acquisti' ),
'idbanca_vendite' => post ( 'idbanca_vendite' ),
'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' ),
'gaddress' => post ( 'gaddress' ),
'lat' => post ( 'lat' ),
'lng' => post ( 'lng' ),
2017-08-04 16:28:16 +02:00
], [ 'idanagrafica' => $id_record ]);
2018-07-19 15:33:32 +02:00
App :: flash () -> info ( str_replace ( '_NAME_' , '"' . post ( 'ragione_sociale' ) . '"' , " Informazioni per l'anagrafica _NAME_ salvate correttamente! " ));
2017-08-04 16:28:16 +02:00
2018-03-02 19:01:30 +01:00
// Validazione della Partita IVA
2018-07-19 15:33:32 +02:00
$check_vat_number = Validate :: isValidVatNumber ( strtoupper ( $partita_iva ));
2018-06-26 14:26:40 +02:00
if ( empty ( $check_vat_number )) {
2018-07-07 13:56:22 +02:00
App :: flash () -> error ( tr ( 'Attenzione: la partita IVA _IVA_ sembra non essere valida' , [
2018-07-19 15:33:32 +02:00
'_IVA_' => $partita_iva ,
2018-07-07 13:56:22 +02:00
]));
2018-03-01 22:05:54 +01:00
}
2017-08-04 16:28:16 +02:00
// Aggiorno il codice anagrafica se non è già presente, altrimenti lo ignoro
2018-07-19 15:33:32 +02:00
$esiste = $dbo -> fetchNum ( 'SELECT idanagrafica FROM an_anagrafiche WHERE codice=' . prepare ( post ( 'codice' )) . ' AND NOT idanagrafica=' . prepare ( $id_record ));
2017-08-04 16:28:16 +02:00
// Verifica dell'esistenza codice anagrafica
if ( $esiste ) {
2018-07-07 13:56:22 +02:00
App :: flash () -> error ( tr ( " Il codice anagrafica inserito esiste già! Inserirne un'altro... " ));
2017-08-04 16:28:16 +02:00
} else {
2018-07-19 15:33:32 +02:00
$dbo -> query ( 'UPDATE an_anagrafiche SET codice=' . prepare ( post ( 'codice' )) . ' WHERE idanagrafica=' . prepare ( $id_record ));
2017-08-04 16:28:16 +02:00
}
2017-08-31 12:52:15 +02:00
// Aggiorno gli agenti collegati
2018-07-19 15:33:32 +02:00
$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
2018-07-19 15:33:32 +02:00
if ( ! empty ( post ( 'idagente' ))) {
$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
2018-07-19 15:33:32 +02:00
$idtipoanagrafica = ( array ) post ( 'idtipoanagrafica' );
2018-07-03 11:37:15 +02:00
if ( in_array ( $id_azienda , $tipi_anagrafica )) {
2018-07-19 15:33:32 +02:00
$idtipoanagrafica [] = $id_azienda ;
2017-09-29 17:30:30 +02:00
}
2018-07-19 15:33:32 +02:00
$dbo -> sync ( 'an_tipianagrafiche_anagrafiche' , [ 'idanagrafica' => $id_record ], [ 'idtipoanagrafica' => $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
2018-07-19 15:33:32 +02:00
if ( empty ( $idconto_cliente ) && in_array ( $id_cliente , $idtipoanagrafica )) {
2017-08-31 16:23:26 +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 );
2017-08-04 16:28:16 +02:00
2018-07-19 15:33:32 +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) " );
2017-08-31 16:23:26 +02:00
$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 ));
}
2018-07-19 15:33:32 +02:00
if ( empty ( $idconto_fornitore ) && in_array ( $id_fornitore , $idtipoanagrafica )) {
2017-08-31 16:23:26 +02:00
// Calcolo prossimo numero cliente
2017-09-10 14:35:41 +02:00
$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' " );
2017-08-31 16:23:26 +02:00
$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
2018-07-19 15:33:32 +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) " );
2017-08-31 16:23:26 +02:00
$idconto = $dbo -> lastInsertedID ();
2017-08-04 16:28:16 +02:00
2017-09-10 14:35:41 +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' );
2018-07-08 18:11:17 +02:00
$codice = Util\Generator :: generate ( setting ( 'Formato codice anagrafica' ), $rs [ 0 ][ 'codice' ]);
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
2018-07-19 15:33:32 +02:00
$idagente = ( $agente_is_logged && in_array ( $id_cliente , $idtipoanagrafica )) ? $user [ 'idanagrafica' ] : 0 ;
$partita_iva = trim ( strtoupper ( post ( 'piva' )));
$codice_fiscale = trim ( strtoupper ( post ( 'codice_fiscale' )));
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 ,
2018-07-19 15:33:32 +02:00
'piva' => $partita_iva ,
'codice_fiscale' => $codice_fiscale ,
2018-04-17 23:41:56 +02:00
'indirizzo' => post ( 'indirizzo' ),
'citta' => post ( 'citta' ),
'cap' => post ( 'cap' ),
'provincia' => post ( 'provincia' ),
'telefono' => post ( 'telefono' ),
'cellulare' => post ( 'cellulare' ),
'email' => post ( 'email' ),
'idrelazione' => post ( 'idrelazione' ),
2017-08-31 16:23:26 +02:00
'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
2018-07-03 15:05:27 +02:00
if ( in_array ( $id_azienda , $idtipoanagrafica )) {
2018-07-09 10:44:54 +02:00
Settings :: setValue ( 'Azienda predefinita' , $new_id );
2018-07-03 15:05:27 +02:00
2018-07-09 15:11:19 +02:00
App :: flash () -> info ( tr ( 'Anagrafica Azienda impostata come predefinita. Per ulteriori informazionioni, visitare "Strumenti -> Impostazioni -> Generali"' ));
2017-08-04 16:28:16 +02:00
}
2018-02-18 19:53:23 +01:00
//se sto inserendo un tecnico, mi copio già le tariffe per le varie attività
2018-07-19 15:33:32 +02:00
if ( in_array ( $id_tecnico , $idtipoanagrafica )) {
2018-02-18 19:53:23 +01:00
//per ogni tipo di attività
$rs_tipiintervento = $dbo -> fetchArray ( 'SELECT * FROM in_tipiintervento' );
for ( $i = 0 ; $i < count ( $rs_tipiintervento ); ++ $i ) {
if ( $dbo -> query ( 'INSERT INTO in_tariffe( idtecnico, idtipointervento, costo_ore, costo_km, costo_dirittochiamata, costo_ore_tecnico, costo_km_tecnico, costo_dirittochiamata_tecnico ) VALUES( ' . prepare ( $new_id ) . ', ' . prepare ( $rs_tipiintervento [ $i ][ 'idtipointervento' ]) . ', (SELECT costo_orario FROM in_tipiintervento WHERE idtipointervento=' . prepare ( $rs_tipiintervento [ $i ][ 'idtipointervento' ]) . '), (SELECT costo_km FROM in_tipiintervento WHERE idtipointervento=' . prepare ( $rs_tipiintervento [ $i ][ 'idtipointervento' ]) . '), (SELECT costo_diritto_chiamata FROM in_tipiintervento WHERE idtipointervento=' . prepare ( $rs_tipiintervento [ $i ][ 'idtipointervento' ]) . '), (SELECT costo_orario_tecnico FROM in_tipiintervento WHERE idtipointervento=' . prepare ( $rs_tipiintervento [ $i ][ 'idtipointervento' ]) . '), (SELECT costo_km_tecnico FROM in_tipiintervento WHERE idtipointervento=' . prepare ( $rs_tipiintervento [ $i ][ 'idtipointervento' ]) . '), (SELECT costo_diritto_chiamata_tecnico FROM in_tipiintervento WHERE idtipointervento=' . prepare ( $rs_tipiintervento [ $i ][ 'idtipointervento' ]) . ') )' )) {
2018-07-07 13:56:22 +02:00
//App::flash()->info(tr('Informazioni salvate correttamente!'));
2018-02-18 19:53:23 +01:00
} else {
2018-07-07 13:56:22 +02:00
App :: flash () -> error ( tr ( " Errore durante l'importazione tariffe! " ));
2018-02-18 19:53:23 +01:00
}
}
}
2017-08-04 16:28:16 +02:00
2017-08-31 16:23:26 +02:00
// Creo il relativo conto nel partitario (cliente)
2018-07-19 15:33:32 +02:00
if ( in_array ( $id_cliente , $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)
2018-07-19 15:33:32 +02:00
if ( in_array ( $id_fornitore , $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 ]);
}
2018-07-07 13:56:22 +02:00
App :: flash () -> info ( tr ( 'Aggiunta nuova anagrafica di tipo _TYPE_' , [
2017-09-10 14:35:41 +02:00
'_TYPE_' => '"' . $tipoanagrafica_dst . '"' ,
2018-07-07 13:56:22 +02:00
]));
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
2018-07-03 11:37:15 +02:00
if ( ! in_array ( $id_azienda , $tipi_anagrafica )) {
2018-07-17 08:05:19 +02:00
$dbo -> query ( 'UPDATE an_anagrafiche SET deleted_at = NOW() WHERE idanagrafica = ' . prepare ( $id_record ) . Modules :: getAdditionalsQuery ( $id_module ));
2018-06-26 14:26:40 +02:00
// Se l'anagrafica è collegata ad un utente lo disabilito
$dbo -> query ( 'UPDATE zz_users SET enabled = 0 WHERE idanagrafica = ' . prepare ( $id_record ) . Modules :: getAdditionalsQuery ( $id_module ));
2018-07-07 13:56:22 +02:00
App :: flash () -> info ( tr ( 'Anagrafica eliminata!' ));
2017-08-04 16:28:16 +02:00
}
break ;
}
2018-07-02 15:41:38 +02:00
// Operazioni aggiuntive per il logo
2018-07-03 11:12:32 +02:00
if ( filter ( 'op' ) == 'link_file' ) {
2018-07-04 12:57:53 +02:00
$nome = 'Logo stampe' ;
2018-07-02 15:41:38 +02:00
2018-07-09 10:44:54 +02:00
if ( setting ( 'Azienda predefinita' ) == $id_record && filter ( 'nome_allegato' ) == $nome ) {
Settings :: setValue ( $nome , $upload );
2018-07-02 15:41:38 +02:00
}
}