mirror of
https://github.com/devcode-it/openstamanager.git
synced 2024-12-25 23:33:02 +01:00
585290e011
Risoluzione delle problematiche relative alla selezioni di diversi sconti su multipli livelli. Aggiunta selezione automatica dello sconto da listino. Introduzione del nuovo sistema degli sconti nei contratti.
216 lines
12 KiB
PHP
216 lines
12 KiB
PHP
<?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_acquisti' => $post['idlistino_acquisti'],
|
|
'idlistino_vendite' => $post['idlistino_vendite'],
|
|
'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) {
|
|
$_SESSION['errors'][] = tr("Il codice anagrafica inserito esiste già! Inserirne un'altro...");
|
|
} else {
|
|
$dbo->query('UPDATE an_anagrafiche SET codice='.prepare($post['codice']).' WHERE idanagrafica='.prepare($id_record));
|
|
}
|
|
|
|
// 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']));
|
|
}
|
|
|
|
// Aggiorno le tipologie di anagrafica
|
|
$dbo->sync('an_tipianagrafiche_anagrafiche', ['idanagrafica' => $id_record], ['idtipoanagrafica' => (array) $post['idtipoanagrafica']]);
|
|
|
|
// 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
|
|
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);
|
|
|
|
$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();
|
|
|
|
// 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);
|
|
|
|
$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();
|
|
|
|
// Collegamento conto
|
|
$dbo->query('UPDATE an_anagrafiche SET idconto_fornitore='.prepare($idconto).' WHERE idanagrafica='.prepare($id_record));
|
|
}
|
|
|
|
break;
|
|
|
|
case 'add':
|
|
$idtipoanagrafica = post('idtipoanagrafica');
|
|
$ragione_sociale = post('ragione_sociale');
|
|
|
|
// Inserimento anagrafica base
|
|
// 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'));
|
|
|
|
// Se ad aggiungere un cliente è un agente, lo imposto come agente di quel cliente
|
|
// Lettura tipologia dell'utente loggato
|
|
$agente_is_logged = false;
|
|
|
|
$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']));
|
|
|
|
for ($i = 0; $i < count($rs); ++$i) {
|
|
if ($rs[$i]['descrizione'] == 'Agente') {
|
|
$agente_is_logged = true;
|
|
$i = count($rs);
|
|
}
|
|
}
|
|
|
|
$idagente = ($agente_is_logged && in_array($id_cliente, $post['idtipoanagrafica'])) ? $user['idanagrafica'] : 0;
|
|
|
|
// Inserisco l'anagrafica
|
|
$dbo->insert('an_anagrafiche', [
|
|
'ragione_sociale' => $ragione_sociale,
|
|
'codice' => $codice,
|
|
'idagente' => $idagente,
|
|
]);
|
|
|
|
$new_id = $dbo->lastInsertedID();
|
|
|
|
// Inserisco il rapporto dell'anagrafica (cliente, tecnico, ecc)
|
|
$dbo->sync('an_tipianagrafiche_anagrafiche', ['idanagrafica' => $new_id], ['idtipoanagrafica' => (array) $idtipoanagrafica]);
|
|
|
|
if (in_array($id_azienda, $post['idtipoanagrafica'])) {
|
|
$dbo->query('UPDATE zz_settings SET valore='.prepare($new_id)." WHERE nome='Azienda predefinita'");
|
|
$_SESSION['infos'][] = tr('Anagrafica Azienda impostata come predefinita. Per ulteriori informazionioni, visitare "Strumenti -> Impostazioni -> Generali".');
|
|
}
|
|
|
|
// Creo il relativo conto nel partitario (cliente)
|
|
if (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);
|
|
|
|
// 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));
|
|
}
|
|
|
|
// Creo il relativo conto nel partitario (fornitore)
|
|
if (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);
|
|
|
|
// 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;
|
|
|
|
// 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'));
|
|
}
|
|
|
|
if (isAjaxRequest() && str_contains($tipoanagrafica_dst, post('tipoanagrafica'))) {
|
|
echo json_encode(['id' => $id_record, 'text' => $ragione_sociale]);
|
|
}
|
|
|
|
$_SESSION['infos'][] = tr('Aggiunta nuova anagrafica di tipo _TYPE_', [
|
|
'_TYPE_' => '"'.$tipoanagrafica_dst.'"',
|
|
]);
|
|
|
|
break;
|
|
|
|
case 'delete':
|
|
// Se l'anagrafica non è l'azienda principale, la disattivo
|
|
if (str_contains($records[0]['idtipianagrafica'], $id_azienda) === false) {
|
|
$dbo->query('UPDATE an_anagrafiche SET deleted = 1 WHERE idanagrafica = '.prepare($id_record).Modules::getAdditionalsQuery($id_module));
|
|
|
|
$_SESSION['infos'][] = tr('Anagrafica eliminata!');
|
|
}
|
|
|
|
break;
|
|
}
|