2017-08-04 16:28:16 +02:00
< ? php
2020-09-07 15:04:06 +02:00
/*
* OpenSTAManager : il software gestionale open source per l ' assistenza tecnica e la fatturazione
2021-01-20 15:08:51 +01:00
* Copyright ( C ) DevCode s . r . l .
2020-09-07 15:04:06 +02:00
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < https :// www . gnu . org / licenses />.
*/
2017-08-04 16:28:16 +02:00
include_once __DIR__ . '/../../core.php' ;
2018-09-24 18:10:16 +02:00
use Modules\Anagrafiche\Anagrafica ;
2017-08-04 16:28:16 +02:00
switch ( post ( 'op' )) {
2019-07-05 18:29:14 +02:00
case 'restore' :
$anagrafica -> restore ();
2019-07-24 15:41:04 +02:00
flash () -> info ( tr ( 'Anagrafica _NAME_ ripristinata correttamente!' , [
'_NAME_' => post ( 'ragione_sociale' ),
]));
2019-07-05 18:29:14 +02:00
2019-07-08 12:25:51 +02:00
// no break
2017-08-04 16:28:16 +02:00
case 'update' :
2018-11-09 13:20:56 +01:00
// Informazioni sulla sede
$sede = $anagrafica -> sedeLegale ;
$sede -> indirizzo = post ( 'indirizzo' );
$sede -> indirizzo2 = post ( 'indirizzo2' );
$sede -> citta = post ( 'citta' );
$sede -> cap = post ( 'cap' );
$sede -> provincia = post ( 'provincia' );
$sede -> km = post ( 'km' );
$sede -> id_nazione = post ( 'id_nazione' ) ? : null ;
$sede -> gaddress = post ( 'gaddress' );
$sede -> lat = post ( 'lat' );
$sede -> lng = post ( 'lng' );
$sede -> telefono = post ( 'telefono' );
$sede -> cellulare = post ( 'cellulare' );
$sede -> fax = post ( 'fax' );
$sede -> idzona = post ( 'idzona' );
$sede -> email = post ( 'email' );
2019-08-29 15:09:01 +02:00
$opt_out_newsletter = post ( 'disable_newsletter' );
$sede -> enable_newsletter = empty ( $opt_out_newsletter );
2018-11-09 13:20:56 +01:00
$sede -> save ();
2019-01-06 14:18:48 +01:00
2018-09-24 18:10:16 +02:00
// Informazioni sull'anagrafica
$anagrafica -> codice = post ( 'codice' );
2018-11-09 07:02:59 +01:00
$anagrafica -> tipo = post ( 'tipo' );
2019-10-04 13:26:47 +02:00
$anagrafica -> codice_destinatario = strtoupper ( post ( 'codice_destinatario' ));
2019-04-19 03:18:05 +02:00
$anagrafica -> ragione_sociale = post ( 'ragione_sociale' );
2019-01-10 20:17:08 +01:00
$anagrafica -> nome = post ( 'nome' );
$anagrafica -> cognome = post ( 'cognome' );
2018-09-24 18:10:16 +02:00
$anagrafica -> tipo = post ( 'tipo' );
$anagrafica -> data_nascita = post ( 'data_nascita' );
$anagrafica -> luogo_nascita = post ( 'luogo_nascita' );
$anagrafica -> sesso = post ( 'sesso' );
$anagrafica -> capitale_sociale = post ( 'capitale_sociale' );
$anagrafica -> pec = post ( 'pec' );
$anagrafica -> idsede_fatturazione = post ( 'idsede_fatturazione' );
$anagrafica -> note = post ( 'note' );
$anagrafica -> codiceri = post ( 'codiceri' );
$anagrafica -> codicerea = post ( 'codicerea' );
$anagrafica -> appoggiobancario = post ( 'appoggiobancario' );
$anagrafica -> filiale = post ( 'filiale' );
$anagrafica -> codiceiban = post ( 'codiceiban' );
$anagrafica -> bic = post ( 'bic' );
$anagrafica -> diciturafissafattura = post ( 'diciturafissafattura' );
$anagrafica -> idpagamento_acquisti = post ( 'idpagamento_acquisti' );
$anagrafica -> idpagamento_vendite = post ( 'idpagamento_vendite' );
$anagrafica -> idlistino_acquisti = post ( 'idlistino_acquisti' );
$anagrafica -> idlistino_vendite = post ( 'idlistino_vendite' );
$anagrafica -> idiva_acquisti = post ( 'idiva_acquisti' );
$anagrafica -> idiva_vendite = post ( 'idiva_vendite' );
$anagrafica -> idbanca_acquisti = post ( 'idbanca_acquisti' );
$anagrafica -> idbanca_vendite = post ( 'idbanca_vendite' );
$anagrafica -> settore = post ( 'settore' );
$anagrafica -> marche = post ( 'marche' );
$anagrafica -> dipendenti = post ( 'dipendenti' );
$anagrafica -> macchine = post ( 'macchine' );
$anagrafica -> idagente = post ( 'idagente' );
$anagrafica -> idrelazione = post ( 'idrelazione' );
$anagrafica -> sitoweb = post ( 'sitoweb' );
$anagrafica -> iscrizione_tribunale = post ( 'iscrizione_tribunale' );
$anagrafica -> cciaa = post ( 'cciaa' );
$anagrafica -> cciaa_citta = post ( 'cciaa_citta' );
$anagrafica -> n_alboartigiani = post ( 'n_alboartigiani' );
$anagrafica -> foro_competenza = post ( 'foro_competenza' );
2020-11-20 16:01:37 +01:00
$anagrafica -> riferimento_amministrazione = post ( 'riferimento_amministrazione' );
2018-09-24 18:10:16 +02:00
$anagrafica -> colore = post ( 'colore' );
2019-07-10 09:57:09 +02:00
$anagrafica -> idtipointervento_default = post ( 'idtipointervento_default' ) ? : null ;
2018-09-26 10:54:57 +02:00
$anagrafica -> id_ritenuta_acconto_acquisti = post ( 'id_ritenuta_acconto_acquisti' );
2019-02-18 09:25:18 +01:00
$anagrafica -> id_ritenuta_acconto_vendite = post ( 'id_ritenuta_acconto_vendite' );
2018-12-19 23:08:54 +01:00
$anagrafica -> split_payment = post ( 'split_payment' );
2018-11-09 11:34:27 +01:00
$anagrafica -> tipologie = ( array ) post ( 'idtipoanagrafica' );
2018-09-24 18:10:16 +02:00
2020-03-06 09:40:56 +01:00
$anagrafica -> codice_fiscale = strtoupper ( post ( 'codice_fiscale' ));
$anagrafica -> partita_iva = strtoupper ( post ( 'piva' ));
2019-04-29 12:02:37 +02:00
2018-09-25 17:13:23 +02:00
$anagrafica -> save ();
2020-03-06 09:40:56 +01:00
// Aggiorno gli agenti collegati
$dbo -> sync ( 'an_anagrafiche_agenti' , [ 'idanagrafica' => $id_record ], [ 'idagente' => ( array ) post ( 'idagenti' )]);
// Se l'agente di default è stato elencato anche tra gli agenti secondari lo rimuovo
if ( ! empty ( post ( 'idagente' ))) {
$dbo -> query ( 'DELETE FROM an_anagrafiche_agenti WHERE idanagrafica=' . prepare ( $id_record ) . ' AND idagente=' . prepare ( post ( 'idagente' )));
}
2019-07-24 15:41:04 +02:00
flash () -> info ( tr ( " Informazioni per l'anagrafica _NAME_ salvate correttamente! " , [
'_NAME_' => $anagrafica -> ragione_sociale ,
]));
2017-08-04 16:28:16 +02:00
2020-03-06 09:40:56 +01:00
// Aggiorno il codice anagrafica se non è già presente, altrimenti lo ignoro
if ( $anagrafica -> codice != post ( 'codice' )) {
flash () -> warning ( tr ( 'Attenzione: il codice anagrafica _COD_ esiste già' , [
'_COD_' => $anagrafica -> codice ,
]));
}
// Controllo che il Codice Fiscale non sia già presente
$codice_fiscale = $anagrafica -> codice_fiscale ;
if ( ! empty ( $codice_fiscale )) {
$anagrafiche_codice_fiscale = Anagrafica :: where ( 'codice_fiscale' , $codice_fiscale )
-> where ( 'idanagrafica' , '!=' , $anagrafica -> id )
-> get ();
if ( ! $anagrafiche_codice_fiscale -> isEmpty ()) {
$message = tr ( 'Attenzione: il codice fiscale _COD_ è già stato censito' , [
'_COD_' => $codice_fiscale ,
]);
$links = [];
foreach ( $anagrafiche_codice_fiscale as $anagrafica_singola ) {
$links [] = '<li>' . Modules :: link ( 'Anagrafiche' , $anagrafica_singola -> id , $anagrafica_singola -> ragione_sociale ) . '</li>' ;
}
flash () -> warning ( $message . '<ul>' . implode ( '' , $links ) . '</ul>' );
}
}
// Controllo che la Partita IVA non sia già presente
2018-09-25 16:47:44 +02:00
$partita_iva = $anagrafica -> partita_iva ;
2020-03-06 09:40:56 +01:00
if ( ! empty ( $partita_iva )) {
$anagrafiche_partita_iva = Anagrafica :: where ( 'piva' , $partita_iva )
-> where ( 'idanagrafica' , '!=' , $anagrafica -> id )
-> get ();
if ( ! $anagrafiche_partita_iva -> isEmpty ()) {
$message = tr ( 'Attenzione: la partita IVA _IVA_ è già stata censita' , [
2020-11-04 12:49:02 +01:00
'_IVA_' => $partita_iva ,
2020-03-06 09:40:56 +01:00
]);
$links = [];
foreach ( $anagrafiche_partita_iva as $anagrafica_singola ) {
$links [] = '<li>' . Modules :: link ( 'Anagrafiche' , $anagrafica_singola -> id , $anagrafica_singola -> ragione_sociale ) . '</li>' ;
}
2018-11-22 15:34:44 +01:00
2020-03-06 09:40:56 +01:00
flash () -> warning ( $message . '<ul>' . implode ( '' , $links ) . '</ul>' );
}
$vat_number = is_numeric ( $partita_iva ) ? $anagrafica -> nazione -> iso2 . $partita_iva : $partita_iva ;
$check_vat_number = Validate :: isValidVatNumber ( $vat_number );
if ( empty ( $check_vat_number [ 'valid-format' ])) {
flash () -> warning ( tr ( 'Attenzione: la partita IVA _IVA_ potrebbe non essere valida' , [
'_IVA_' => $partita_iva ,
]));
}
2018-03-01 22:05:54 +01:00
}
2019-04-04 17:30:58 +02:00
2018-11-20 17:47:56 +01:00
// Validazione del Codice Fiscale, solo per anagrafiche Private e Aziende, ignoro controllo se codice fiscale e settato uguale alla p.iva
2021-01-11 17:52:03 +01:00
if ( $anagrafica -> tipo != 'Ente pubblico' && ! empty ( $anagrafica -> codice_fiscale ) && $anagrafica -> codice_fiscale != $anagrafica -> partita_iva ) {
2020-03-06 09:40:56 +01:00
$check_codice_fiscale = Validate :: isValidTaxCode ( $codice_fiscale );
2018-11-22 15:34:44 +01:00
if ( empty ( $check_codice_fiscale )) {
2020-01-22 11:46:08 +01:00
flash () -> warning ( tr ( 'Attenzione: il codice fiscale _COD_ potrebbe non essere valido.' , [
2020-03-06 09:40:56 +01:00
'_COD_' => $codice_fiscale ,
2018-11-22 15:34:44 +01:00
]));
}
}
2018-11-16 19:14:21 +01:00
2017-08-04 16:28:16 +02:00
break ;
case 'add' :
$idtipoanagrafica = post ( 'idtipoanagrafica' );
2019-04-19 03:18:05 +02:00
$ragione_sociale = post ( 'ragione_sociale' );
2019-05-04 00:32:28 +02:00
2019-04-19 03:18:05 +02:00
$anagrafica = Anagrafica :: build ( $ragione_sociale , post ( 'nome' ), post ( 'cognome' ), $idtipoanagrafica );
2018-09-24 18:10:16 +02:00
$id_record = $anagrafica -> id ;
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 ;
2020-09-23 11:47:59 +02:00
if ( ! empty ( $user [ 'idanagrafica' ])) {
2020-09-23 13:36:37 +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
2020-09-23 11:47:59 +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 ;
2019-01-06 14:18:48 +01:00
2018-09-24 18:10:16 +02:00
$anagrafica -> indirizzo = post ( 'indirizzo' );
$anagrafica -> citta = post ( 'citta' );
$anagrafica -> cap = post ( 'cap' );
$anagrafica -> provincia = post ( 'provincia' );
$anagrafica -> telefono = post ( 'telefono' );
$anagrafica -> cellulare = post ( 'cellulare' );
$anagrafica -> email = post ( 'email' );
$anagrafica -> idagente = $idagente ;
2019-04-04 17:30:58 +02:00
$anagrafica -> pec = post ( 'pec' );
$anagrafica -> tipo = post ( 'tipo' );
$anagrafica -> id_nazione = post ( 'id_nazione' ) ? : null ;
2019-10-04 13:26:47 +02:00
$anagrafica -> codice_destinatario = strtoupper ( post ( 'codice_destinatario' ));
2019-04-04 17:30:58 +02:00
2020-03-06 09:40:56 +01:00
$anagrafica -> codice_fiscale = strtoupper ( post ( 'codice_fiscale' ));
$anagrafica -> partita_iva = strtoupper ( post ( 'piva' ));
2018-09-24 18:10:16 +02:00
$anagrafica -> save ();
if ( $anagrafica -> isAzienda ()) {
flash () -> info ( tr ( 'Anagrafica Azienda impostata come predefinita' ) . '. ' . tr ( 'Per ulteriori informazionioni, visitare "Strumenti -> Impostazioni -> Generali"' ));
2017-08-31 16:23:26 +02:00
}
// Lettura tipologia della nuova anagrafica
2020-02-05 12:40:44 +01:00
if ( isAjaxRequest ()) {
2019-04-19 03:18:05 +02:00
echo json_encode ([ 'id' => $id_record , 'text' => $anagrafica -> ragione_sociale ]);
2017-08-04 16:28:16 +02:00
}
2020-02-05 12:40:44 +01:00
$descrizioni_tipi = $anagrafica -> tipi () -> get () -> pluck ( 'descrizione' ) -> toArray ();
2018-07-19 17:29:21 +02:00
flash () -> info ( tr ( 'Aggiunta nuova anagrafica di tipo _TYPE_' , [
2018-09-24 18:10:16 +02:00
'_TYPE_' => '"' . implode ( ', ' , $descrizioni_tipi ) . '"' ,
2018-07-07 13:56:22 +02:00
]));
2017-08-04 16:28:16 +02:00
2020-03-06 09:40:56 +01:00
// Controllo che il Codice Fiscale non sia già presente
$codice_fiscale = $anagrafica -> codice_fiscale ;
if ( ! empty ( $codice_fiscale )) {
$anagrafiche_codice_fiscale = Anagrafica :: where ( 'codice_fiscale' , $codice_fiscale )
-> where ( 'idanagrafica' , '!=' , $anagrafica -> id )
-> get ();
if ( ! $anagrafiche_codice_fiscale -> isEmpty ()) {
$message = tr ( 'Attenzione: il codice fiscale _COD_ è già stato censito' , [
'_COD_' => $codice_fiscale ,
]);
$links = [];
foreach ( $anagrafiche_codice_fiscale as $anagrafica_singola ) {
$links [] = '<li>' . Modules :: link ( 'Anagrafiche' , $anagrafica_singola -> id , $anagrafica_singola -> ragione_sociale ) . '</li>' ;
}
flash () -> warning ( $message . '<ul>' . implode ( '' , $links ) . '</ul>' );
}
}
// Controllo che la Partita IVA non sia già presente
$partita_iva = $anagrafica -> partita_iva ;
if ( ! empty ( $partita_iva )) {
$anagrafiche_partita_iva = Anagrafica :: where ( 'piva' , $partita_iva )
-> where ( 'idanagrafica' , '!=' , $anagrafica -> id )
-> get ();
if ( ! $anagrafiche_partita_iva -> isEmpty ()) {
$message = tr ( 'Attenzione: la partita IVA _IVA_ è già stata censita' , [
2020-11-04 12:49:02 +01:00
'_IVA_' => $partita_iva ,
2020-03-06 09:40:56 +01:00
]);
$links = [];
foreach ( $anagrafiche_partita_iva as $anagrafica_singola ) {
$links [] = '<li>' . Modules :: link ( 'Anagrafiche' , $anagrafica_singola -> id , $anagrafica_singola -> ragione_sociale ) . '</li>' ;
}
flash () -> warning ( $message . '<ul>' . implode ( '' , $links ) . '</ul>' );
}
$vat_number = is_numeric ( $partita_iva ) ? $anagrafica -> nazione -> iso2 . $partita_iva : $partita_iva ;
$check_vat_number = Validate :: isValidVatNumber ( $vat_number );
if ( empty ( $check_vat_number [ 'valid-format' ])) {
flash () -> warning ( tr ( 'Attenzione: la partita IVA _IVA_ potrebbe non essere valida' , [
'_IVA_' => $partita_iva ,
]));
}
}
// Validazione del Codice Fiscale, solo per anagrafiche Private e Aziende, ignoro controllo se codice fiscale e settato uguale alla p.iva
if ( $anagrafica -> tipo != 'Ente pubblico' && ! empty ( $anagrafica -> codice_fiscale ) && ! empty ( $anagrafica -> partita_iva ) && $anagrafica -> codice_fiscale != $anagrafica -> partita_iva ) {
$check_codice_fiscale = Validate :: isValidTaxCode ( $codice_fiscale );
if ( empty ( $check_codice_fiscale )) {
flash () -> warning ( tr ( 'Attenzione: il codice fiscale _COD_ potrebbe non essere valido.' , [
'_COD_' => $codice_fiscale ,
]));
}
}
2017-08-04 16:28:16 +02:00
break ;
2020-08-19 17:29:42 +02:00
// Informazioni sulla posizione della sede
case 'posizione' :
$sede = $anagrafica -> sedeLegale ;
$sede -> gaddress = post ( 'gaddress' );
$sede -> lat = post ( 'lat' );
$sede -> lng = post ( 'lng' );
$sede -> save ();
break ;
2017-08-04 16:28:16 +02:00
case 'delete' :
2017-08-29 12:42:42 +02:00
// Se l'anagrafica non è l'azienda principale, la disattivo
2019-07-05 18:29:14 +02:00
if ( ! $anagrafica -> isAzienda ()) {
//$anagrafica->delete();
$dbo -> query ( 'UPDATE an_anagrafiche SET deleted_at = NOW() WHERE idanagrafica = ' . prepare ( $id_record ));
2019-04-14 15:36:16 +02:00
2019-07-05 18:29:14 +02:00
// Se l'anagrafica è collegata ad un utente lo disabilito
$dbo -> query ( 'UPDATE zz_users SET enabled = 0 WHERE idanagrafica = ' . prepare ( $id_record ));
2020-02-20 19:41:10 +01:00
// Disabilito anche il token
$dbo -> query ( 'UPDATE zz_tokens SET enabled = 0 WHERE id_utente = ' . prepare ( $id_utente ));
2020-02-24 12:21:47 +01:00
2018-07-19 17:29:21 +02:00
flash () -> info ( tr ( 'Anagrafica eliminata!' ));
2017-08-04 16:28:16 +02:00
}
break ;
}
2018-07-02 15:41:38 +02:00
2020-11-10 16:03:20 +01:00
// Operazioni aggiuntive per il logo e filigrana stampe
2021-03-04 15:24:20 +01:00
if ( filter ( 'op' ) == 'aggiungi-allegato' ) {
2021-03-15 09:50:02 +01:00
$nome = $upload -> name ;
2020-11-12 17:11:09 +01:00
$logo_stampe = [ 'logo stampe' , 'logo_stampe' , 'logo stampe.jpg' , 'logo stampe.png' ];
2020-11-10 16:03:20 +01:00
if ( in_array ( strtolower ( $nome ), $logo_stampe )) {
$nome = 'Logo stampe' ;
2021-03-15 09:50:02 +01:00
$uploads = $structure -> uploads ( $id_record ) -> where ( 'filename' , $upload -> filename );
2020-11-10 16:03:20 +01:00
foreach ( $uploads as $logo ) {
$logo -> name = $nome ;
$logo -> save ();
}
}
2018-07-02 15:41:38 +02:00
2020-11-12 17:11:09 +01:00
$filigrana_stampe = [ 'filigrana stampe' , 'filigrana_stampe' , 'filigrana stampe.jpg' , 'filigrana stampe.png' ];
2020-11-10 16:03:20 +01:00
if ( in_array ( strtolower ( $nome ), $filigrana_stampe )) {
$nome = 'Filigrana stampe' ;
2021-03-15 09:50:02 +01:00
$uploads = $structure -> uploads ( $id_record ) -> where ( 'filename' , $upload -> filename );
2020-11-10 16:03:20 +01:00
foreach ( $uploads as $filigrana ) {
$filigrana -> name = $nome ;
$filigrana -> save ();
2020-01-21 18:08:05 +01:00
}
2018-07-02 15:41:38 +02:00
}
2020-11-10 16:03:20 +01:00
2020-11-12 17:11:09 +01:00
if (( $nome == 'Logo stampe' || $nome = 'Filigrana stampe' ) && ( setting ( 'Azienda predefinita' ) == $id_record )) {
2021-03-15 09:50:02 +01:00
Settings :: setValue ( $nome , $upload -> filename );
2020-11-10 16:03:20 +01:00
}
2018-07-02 15:41:38 +02:00
}
2020-01-21 18:08:05 +01:00
2019-07-25 16:03:32 +02:00
// Operazioni aggiuntive per il logo
2021-03-04 15:24:20 +01:00
elseif ( filter ( 'op' ) == 'rimuovi-allegato' ) {
2020-01-21 18:08:05 +01:00
$filename = filter ( 'filename' );
if ( strpos ( $filename , setting ( 'Logo stampe' )) !== false ) {
$nome = 'Logo stampe' ;
}
if ( strpos ( $filename , setting ( 'Filigrana stampe' )) !== false ) {
$nome = 'Filigrana stampe' ;
}
2019-07-25 16:03:32 +02:00
2020-01-21 18:08:05 +01:00
if ( setting ( 'Azienda predefinita' ) == $id_record && $filename == setting ( $nome )) {
2019-07-25 16:03:32 +02:00
Settings :: setValue ( $nome , '' );
}
}