diff --git a/modules/anagrafiche/actions.php b/modules/anagrafiche/actions.php index b3b12c870..f10f8c5b9 100755 --- a/modules/anagrafiche/actions.php +++ b/modules/anagrafiche/actions.php @@ -83,74 +83,25 @@ switch (post('op')) { $anagrafica->id_ritenuta_acconto_acquisti = post('id_ritenuta_acconto_acquisti'); $anagrafica->id_ritenuta_acconto_vendite = post('id_ritenuta_acconto_vendite'); $anagrafica->split_payment = post('split_payment'); - $anagrafica->tipologie = (array) post('idtipoanagrafica'); - // Avviso durante il salvataggio del codice fiscale se già presente e informo l'utente delle schede presenti - if (!empty(post('codice_fiscale'))) { - $idanagrafica = $dbo->fetchOne('SELECT GROUP_CONCAT(idanagrafica) AS idanagrafica FROM an_anagrafiche WHERE codice_fiscale = '.prepare(post('codice_fiscale')).' AND idanagrafica != '.prepare($id_record).' AND deleted_at IS NULL')['idanagrafica']; - - if (!empty($idanagrafica)) { - $array = explode(',', $idanagrafica); - foreach ($array as $value) { - flash()->warning(tr('Attenzione: il codice fiscale _COD_ è già stato censito. _LINK_', [ - '_COD_' => ''.post('codice_fiscale').'', - '_LINK_' => Modules::link('Anagrafiche', $value, null, null, ''), - ])); - } - } else { - $anagrafica->codice_fiscale = strtoupper(post('codice_fiscale')); - } - } else { - $anagrafica->codice_fiscale = strtoupper(post('codice_fiscale')); - } - - // Avviso durante il salvataggio della partita iva se già presente e informo l'utente delle schede presenti - if (!empty(post('piva')) && !in_array(post('piva'), ['99999999999', '00000000000'])) { - $idanagrafica = $dbo->fetchOne('SELECT GROUP_CONCAT(idanagrafica) AS idanagrafica FROM an_anagrafiche WHERE piva = '.prepare(post('piva')).' AND idanagrafica != '.prepare($id_record))['idanagrafica']; - - if (!empty($idanagrafica)) { - $array = explode(',', $idanagrafica); - foreach ($array as $value) { - flash()->warning(tr('Attenzione: la partita IVA _IVA_ è già stata censita. _LINK_', [ - '_IVA_' => post('piva'), - '_LINK_' => Modules::link('Anagrafiche', $value, null, null, ''), - ])); - } - } else { - $anagrafica->partita_iva = post('piva'); - } - } else { - $anagrafica->partita_iva = post('piva'); - } + $anagrafica->codice_fiscale = strtoupper(post('codice_fiscale')); + $anagrafica->partita_iva = strtoupper(post('piva')); $anagrafica->save(); + // 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'))); + } + flash()->info(tr("Informazioni per l'anagrafica _NAME_ salvate correttamente!", [ '_NAME_' => $anagrafica->ragione_sociale, ])); - // Validazione della Partita IVA - $partita_iva = $anagrafica->partita_iva; - $partita_iva = is_numeric($partita_iva) ? $anagrafica->nazione->iso2.$partita_iva : $partita_iva; - - $check_vat_number = Validate::isValidVatNumber($partita_iva); - 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' and $anagrafica->codice_fiscale != $anagrafica->partita_iva) { - $check_codice_fiscale = Validate::isValidTaxCode($anagrafica->codice_fiscale); - if (empty($check_codice_fiscale)) { - flash()->warning(tr('Attenzione: il codice fiscale _COD_ potrebbe non essere valido.', [ - '_COD_' => $anagrafica->codice_fiscale, - ])); - } - } - // 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à', [ @@ -158,12 +109,62 @@ switch (post('op')) { ])); } - // Aggiorno gli agenti collegati - $dbo->sync('an_anagrafiche_agenti', ['idanagrafica' => $id_record], ['idagente' => (array) post('idagenti')]); + // 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, + ]); - // 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'))); + $links = []; + foreach ($anagrafiche_codice_fiscale as $anagrafica_singola) { + $links[] = '
  • '.Modules::link('Anagrafiche', $anagrafica_singola->id, $anagrafica_singola->ragione_sociale).'
  • '; + } + + flash()->warning($message.''); + } + } + + // 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', [ + '__IVA__' => $partita_iva, + ]); + + $links = []; + foreach ($anagrafiche_partita_iva as $anagrafica_singola) { + $links[] = '
  • '.Modules::link('Anagrafiche', $anagrafica_singola->id, $anagrafica_singola->ragione_sociale).'
  • '; + } + + flash()->warning($message.''); + } + + $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, + ])); + } } break; @@ -175,44 +176,6 @@ switch (post('op')) { $anagrafica = Anagrafica::build($ragione_sociale, post('nome'), post('cognome'), $idtipoanagrafica); $id_record = $anagrafica->id; - // Blocco il salvataggio del codice fiscale se già presente - if (!empty(post('codice_fiscale'))) { - $idanagrafica = $dbo->fetchOne('SELECT GROUP_CONCAT(idanagrafica) AS idanagrafica FROM an_anagrafiche WHERE codice_fiscale = '.prepare(post('codice_fiscale')).' AND idanagrafica != '.prepare($id_record))['idanagrafica']; - - if (!empty($idanagrafica)) { - $array = explode(',', $idanagrafica); - foreach ($array as $value) { - flash()->warning(tr('Attenzione: il codice fiscale _COD_ è già stato censito. _LINK_', [ - '_COD_' => ''.post('codice_fiscale').'', - '_LINK_' => Modules::link('Anagrafiche', $value, null, null, ''), - ])); - } - } else { - $anagrafica->codice_fiscale = strtoupper(post('codice_fiscale')); - } - } else { - $anagrafica->codice_fiscale = strtoupper(post('codice_fiscale')); - } - - // Blocco il salvataggio della partita iva se già presente - if (!empty(post('piva'))) { - $idanagrafica = $dbo->fetchOne('SELECT GROUP_CONCAT(idanagrafica) AS idanagrafica FROM an_anagrafiche WHERE piva = '.prepare(post('piva')).' AND idanagrafica != '.prepare($id_record))['idanagrafica']; - - if (!empty($idanagrafica)) { - $array = explode(',', $idanagrafica); - foreach ($array as $value) { - flash()->warning(tr('Attenzione: la partita IVA _IVA_ è già stata censita. _LINK_', [ - '_IVA_' => post('piva'), - '_LINK_' => Modules::link('Anagrafiche', $value, null, null, ''), - ])); - } - } else { - $anagrafica->partita_iva = post('piva'); - } - } else { - $anagrafica->partita_iva = post('piva'); - } - // Se ad aggiungere un cliente è un agente, lo imposto come agente di quel cliente // Lettura tipologia dell'utente loggato $agente_is_logged = false; @@ -241,6 +204,9 @@ switch (post('op')) { $anagrafica->id_nazione = post('id_nazione') ?: null; $anagrafica->codice_destinatario = strtoupper(post('codice_destinatario')); + $anagrafica->codice_fiscale = strtoupper(post('codice_fiscale')); + $anagrafica->partita_iva = strtoupper(post('piva')); + $anagrafica->save(); if ($anagrafica->isAzienda()) { @@ -258,6 +224,64 @@ switch (post('op')) { '_TYPE_' => '"'.implode(', ', $descrizioni_tipi).'"', ])); + // 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[] = '
  • '.Modules::link('Anagrafiche', $anagrafica_singola->id, $anagrafica_singola->ragione_sociale).'
  • '; + } + + flash()->warning($message.''); + } + } + + // 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', [ + '__IVA__' => $partita_iva, + ]); + + $links = []; + foreach ($anagrafiche_partita_iva as $anagrafica_singola) { + $links[] = '
  • '.Modules::link('Anagrafiche', $anagrafica_singola->id, $anagrafica_singola->ragione_sociale).'
  • '; + } + + flash()->warning($message.''); + } + + $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, + ])); + } + } + break; case 'delete': diff --git a/modules/anagrafiche/src/Anagrafica.php b/modules/anagrafiche/src/Anagrafica.php index 3953e14fd..4c4b0003b 100755 --- a/modules/anagrafiche/src/Anagrafica.php +++ b/modules/anagrafiche/src/Anagrafica.php @@ -222,11 +222,15 @@ class Anagrafica extends Model public function getPartitaIvaAttribute() { - return $this->piva; + return $this->attributes['piva']; } public function setPartitaIvaAttribute($value) { + if (in_array($value, ['99999999999', '00000000000'])) { + $value = null; + } + $this->attributes['piva'] = trim(strtoupper($value)); }