openstamanager/modules/anagrafiche/actions.php

387 lines
17 KiB
PHP
Raw Normal View History

<?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/>.
*/
include_once __DIR__.'/../../core.php';
2018-09-24 18:10:16 +02:00
use Modules\Anagrafiche\Anagrafica;
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
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->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();
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 = strtoupper(post('codicerea'));
2018-09-24 18:10:16 +02:00
$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->id_piano_sconto_acquisti = post('id_piano_sconto_acquisti');
$anagrafica->id_piano_sconto_vendite = post('id_piano_sconto_vendite');
2018-09-24 18:10:16 +02:00
$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->id_settore = post('id_settore');
2018-09-24 18:10:16 +02:00
$anagrafica->marche = post('marche');
$anagrafica->dipendenti = post('dipendenti');
$anagrafica->macchine = post('macchine');
$anagrafica->idagente = post('idagente');
2022-06-10 17:33:35 +02:00
$anagrafica->id_provenienza = post('id_provenienza');
2018-09-24 18:10:16 +02:00
$anagrafica->idrelazione = post('idrelazione');
$anagrafica->sitoweb = post('sitoweb');
$anagrafica->iscrizione_tribunale = post('iscrizione_tribunale');
$anagrafica->n_alboartigiani = post('n_alboartigiani');
$anagrafica->foro_competenza = post('foro_competenza');
$anagrafica->riferimento_amministrazione = post('riferimento_amministrazione');
2018-09-24 18:10:16 +02:00
$anagrafica->colore = post('colore');
$anagrafica->idtipointervento_default = post('idtipointervento_default') ?: null;
$anagrafica->id_dichiarazione_intento_default = post('id_dichiarazione_intento_default') ?: null;
2022-05-19 17:42:41 +02:00
$anagrafica->provvigione_default = post('provvigione_default');
$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');
$anagrafica->id_listino = post('id_listino');
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,
]));
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
// 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)) {
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
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;
// 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'])) {
2024-02-05 17:07:33 +01:00
$rs = $dbo->fetchArray('SELECT `name` AS descrizione FROM `an_tipianagrafiche` LEFT JOIN `an_tipianagrafiche_lang` ON (`an_tipianagrafiche`.`id` = `an_tipianagrafiche_lang`.`id_record` AND `an_tipianagrafiche_lang`.`id_lang` = '.prepare(setting('Lingua')).') INNER JOIN `an_tipianagrafiche_anagrafiche` ON `an_tipianagrafiche`.`id` = `an_tipianagrafiche_anagrafiche`.`idtipoanagrafica` WHERE `idanagrafica` = '.prepare($user['idanagrafica']));
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);
}
}
}
2018-07-19 15:33:32 +02:00
$idagente = ($agente_is_logged && in_array($id_cliente, $idtipoanagrafica)) ? $user['idanagrafica'] : 0;
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 informazioni, visitare "Strumenti -> Impostazioni -> Generali"'));
}
// Lettura tipologia della nuova anagrafica
if (isAjaxRequest()) {
2019-04-19 03:18:05 +02:00
echo json_encode(['id' => $id_record, 'text' => $anagrafica->ragione_sociale]);
}
2024-02-05 17:07:33 +01:00
$descrizioni_tipi = $anagrafica->tipi()->get()->pluck('name')->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).'"',
]));
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,
]));
}
}
break;
2024-01-15 15:30:45 +01: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;
case 'delete':
// Se l'anagrafica non è l'azienda principale, la disattivo
2019-07-05 18:29:14 +02:00
if (!$anagrafica->isAzienda()) {
2024-01-15 15:30:45 +01:00
// $anagrafica->delete();
2019-07-05 18:29:14 +02:00
$dbo->query('UPDATE an_anagrafiche SET deleted_at = NOW() WHERE idanagrafica = '.prepare($id_record));
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));
// Disabilito anche il token
$dbo->query('UPDATE zz_tokens SET enabled = 0 WHERE id_utente = '.prepare($id_utente));
2018-07-19 17:29:21 +02:00
flash()->info(tr('Anagrafica eliminata!'));
}
break;
case 'risolvi_conto':
$anagrafica = Anagrafica::find($id_record);
$tipo = post('tipo');
if ($tipo == 'cliente') {
$anagrafica->fixCliente($anagrafica);
} else {
$anagrafica->fixfornitore($anagrafica);
}
break;
}
// Operazioni aggiuntive per il logo e filigrana stampe
2022-07-22 14:40:32 +02:00
if (filter('op') == 'aggiungi-allegato' || filter('op') == 'modifica-allegato') {
$nome = $upload->name;
2020-11-12 17:11:09 +01:00
$logo_stampe = ['logo stampe', 'logo_stampe', 'logo stampe.jpg', 'logo stampe.png'];
if (in_array(strtolower($nome), $logo_stampe)) {
$nome = 'Logo stampe';
$uploads = $structure->uploads($id_record)->where('filename', $upload->filename);
foreach ($uploads as $logo) {
$logo->name = $nome;
$logo->save();
}
}
2020-11-12 17:11:09 +01:00
$filigrana_stampe = ['filigrana stampe', 'filigrana_stampe', 'filigrana stampe.jpg', 'filigrana stampe.png'];
if (in_array(strtolower($nome), $filigrana_stampe)) {
$nome = 'Filigrana stampe';
$uploads = $structure->uploads($id_record)->where('filename', $upload->filename);
foreach ($uploads as $filigrana) {
$filigrana->name = $nome;
$filigrana->save();
2020-01-21 18:08:05 +01:00
}
}
2021-10-12 11:07:43 +02:00
if (($nome == 'Logo stampe' || $nome == 'Filigrana stampe') && (setting('Azienda predefinita') == $id_record)) {
Settings::setValue($nome, $upload->filename);
}
}
2020-01-21 18:08:05 +01:00
2019-07-25 16:03:32 +02:00
// Operazioni aggiuntive per il logo
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, '');
}
}