1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-02-23 14:57:46 +01:00

Merge branch 'revisione-banche'

This commit is contained in:
Dasc3er 2020-09-24 16:58:59 +02:00
commit fd283988dc
37 changed files with 432 additions and 183 deletions

View File

@ -18,45 +18,47 @@
*/ */
return [ return [
/* 'modules/banche' => 'Modules\Banche',
'modules/aggiornamenti' => 'Modules\Aggiornamenti',
'modules/anagrafiche' => 'Modules\Anagrafiche',
'modules/backups' => 'Modules\Backups',
'modules/emails' => 'Modules\Emails',
'modules/articoli' => 'Modules\Articoli',
'modules/checklists' => 'Modules\Checklists',
'modules/ritenute' => 'Modules\Ritenute',
'modules/ritenute_contributi' => 'Modules\RitenuteContributi',
'modules/rivalse' => 'Modules\Rivalse',
'modules/newsletter' => 'Modules\Newsletter',
'modules/iva' => 'Modules\Iva',
'modules/ddt' => 'Modules\DDT',
'modules/fatture' => 'Modules\Fatture',
'modules/ordini' => 'Modules\Ordini',
'modules/preventivi' => 'Modules\Preventivi',
'modules/contratti' => 'Modules\Contratti',
'modules/interventi' => 'Modules\Interventi',
'modules/pagamenti' => 'Modules\Pagamenti',
'modules/statistiche' => 'Modules\Statistiche',
'modules/scadenzario' => 'Modules\Scadenzario',
'modules/primanota' => 'Modules\PrimaNota',
'modules/utenti' => 'Modules\Utenti',
'modules/stato_servizi' => 'Modules\StatoServizi',
'modules/stati_intervento' => 'Modules\StatiIntervento',
'modules/stati_preventivo' => 'Modules\StatiPreventivo',
'modules/stati_contratto' => 'Modules\StatiContratto',
'modules/tipi_intervento' => 'Modules\TipiIntervento',
'modules/categorie_documenti' => 'Modules\CategorieDocumentali',
'modules/listini' => 'Modules\Listini',
'modules/impianti' => 'Modules\Impianti',
'modules/impostazioni' => 'Modules\Impostazioni',
'plugins/exportFE' => 'Plugins\ExportFE',
'plugins/importFE' => 'Plugins\ImportFE',
'plugins/receiptFE' => 'Plugins\ReceiptFE',
'plugins/dichiarazioni_intento' => 'Plugins\DichiarazioniIntento',
'plugins/pianificazione_interventi' => 'Plugins\PianificazioneInterventi',
'plugins/pianificazione_fatturazione' => 'Plugins\PianificazioneFatturazione',
'plugins/statistiche_articoli' => 'Plugins\StatisticheArticoli',
'plugins/dettagli_articolo' => 'Plugins\DettagliArticolo',
*/
]; ];
/*
'modules/aggiornamenti' => 'Modules\Aggiornamenti',
'modules/anagrafiche' => 'Modules\Anagrafiche',
'modules/backups' => 'Modules\Backups',
'modules/emails' => 'Modules\Emails',
'modules/articoli' => 'Modules\Articoli',
'modules/checklists' => 'Modules\Checklists',
'modules/ritenute' => 'Modules\Ritenute',
'modules/ritenute_contributi' => 'Modules\RitenuteContributi',
'modules/rivalse' => 'Modules\Rivalse',
'modules/newsletter' => 'Modules\Newsletter',
'modules/iva' => 'Modules\Iva',
'modules/ddt' => 'Modules\DDT',
'modules/fatture' => 'Modules\Fatture',
'modules/ordini' => 'Modules\Ordini',
'modules/preventivi' => 'Modules\Preventivi',
'modules/contratti' => 'Modules\Contratti',
'modules/interventi' => 'Modules\Interventi',
'modules/pagamenti' => 'Modules\Pagamenti',
'modules/statistiche' => 'Modules\Statistiche',
'modules/scadenzario' => 'Modules\Scadenzario',
'modules/primanota' => 'Modules\PrimaNota',
'modules/utenti' => 'Modules\Utenti',
'modules/stato_servizi' => 'Modules\StatoServizi',
'modules/stati_intervento' => 'Modules\StatiIntervento',
'modules/stati_preventivo' => 'Modules\StatiPreventivo',
'modules/stati_contratto' => 'Modules\StatiContratto',
'modules/tipi_intervento' => 'Modules\TipiIntervento',
'modules/categorie_documenti' => 'Modules\CategorieDocumentali',
'modules/listini' => 'Modules\Listini',
'modules/impianti' => 'Modules\Impianti',
'modules/impostazioni' => 'Modules\Impostazioni',
'plugins/exportFE' => 'Plugins\ExportFE',
'plugins/importFE' => 'Plugins\ImportFE',
'plugins/receiptFE' => 'Plugins\ReceiptFE',
'plugins/dichiarazioni_intento' => 'Plugins\DichiarazioniIntento',
'plugins/pianificazione_interventi' => 'Plugins\PianificazioneInterventi',
'plugins/pianificazione_fatturazione' => 'Plugins\PianificazioneFatturazione',
'plugins/statistiche_articoli' => 'Plugins\StatisticheArticoli',
'plugins/dettagli_articolo' => 'Plugins\DettagliArticolo',
*/

View File

@ -39,7 +39,10 @@ if (!empty($id_record)) {
]); ]);
Util\Query::setSegments(true); Util\Query::setSegments(true);
} }
$query = str_replace(['AND `deleted_at` IS NULL', '`deleted_at` IS NULL AND', '`deleted_at` IS NULL', 'AND deleted_at IS NULL', 'deleted_at IS NULL AND', 'deleted_at IS NULL'], '', $query); // Replace automatico del campo deleted_at se non specifico a una tabella
if (!str_contains($query, '.`deleted_at`') && !str_contains($query, '.deleted_at')) {
$query = str_replace(['AND `deleted_at` IS NULL', '`deleted_at` IS NULL AND', '`deleted_at` IS NULL', 'AND deleted_at IS NULL', 'deleted_at IS NULL AND', 'deleted_at IS NULL'], '', $query);
}
$has_access = !empty($query) ? $dbo->fetchNum($query) !== 0 : true; $has_access = !empty($query) ? $dbo->fetchNum($query) !== 0 : true;

View File

@ -334,7 +334,7 @@ switch ($resource) {
* - idanagrafica * - idanagrafica
*/ */
case 'dichiarazioni_intento': case 'dichiarazioni_intento':
$query = "SELECT id, CONCAT_WS(' - ', numero_protocollo, numero_progressivo) as descrizione FROM co_dichiarazioni_intento |where| ORDER BY data"; $query = "SELECT id, CONCAT_WS(' - ', numero_protocollo, numero_progressivo) AS descrizione FROM co_dichiarazioni_intento |where| ORDER BY data";
foreach ($elements as $element) { foreach ($elements as $element) {
$filter[] = 'id='.prepare($element); $filter[] = 'id='.prepare($element);

View File

@ -18,6 +18,7 @@
*/ */
use Modules\Anagrafiche\Anagrafica; use Modules\Anagrafiche\Anagrafica;
use Modules\Banche\Banca;
include_once __DIR__.'/../../core.php'; include_once __DIR__.'/../../core.php';
@ -379,7 +380,7 @@ if ($is_cliente or $is_fornitore or $is_tecnico) {
<div class="tab-content '.(!$is_cliente && !$is_fornitore && !$is_tecnico ? 'hide' : '').'"> <div class="tab-content '.(!$is_cliente && !$is_fornitore && !$is_tecnico ? 'hide' : '').'">
<div class="tab-pane '.(!$is_cliente && !$is_fornitore ? ' hide' : '').'" id="cliente_fornitore"> <div class="tab-pane '.(!$is_cliente && !$is_fornitore ? ' hide' : '').'" id="cliente_fornitore">
<div class="row"> <!--div class="row">
<div class="col-md-6"> <div class="col-md-6">
{[ "type": "text", "label": "'.tr('Appoggio bancario').'", "name": "appoggiobancario", "value": "$appoggiobancario$" ]} {[ "type": "text", "label": "'.tr('Appoggio bancario').'", "name": "appoggiobancario", "value": "$appoggiobancario$" ]}
</div> </div>
@ -388,6 +389,7 @@ if ($is_cliente or $is_fornitore or $is_tecnico) {
{[ "type": "text", "label": "'.tr('Filiale banca').'", "name": "filiale", "value": "$filiale$" ]} {[ "type": "text", "label": "'.tr('Filiale banca').'", "name": "filiale", "value": "$filiale$" ]}
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-md-6">
{[ "type": "text", "label": "'.tr('Codice IBAN').'", "name": "codiceiban", "value": "$codiceiban$" ]} {[ "type": "text", "label": "'.tr('Codice IBAN').'", "name": "codiceiban", "value": "$codiceiban$" ]}
@ -396,7 +398,7 @@ if ($is_cliente or $is_fornitore or $is_tecnico) {
<div class="col-md-6"> <div class="col-md-6">
{[ "type": "text", "label": "'.tr('Codice BIC').'", "name": "bic", "value": "$bic$" ]} {[ "type": "text", "label": "'.tr('Codice BIC').'", "name": "bic", "value": "$bic$" ]}
</div> </div>
</div> </div-->
<div class="row"> <div class="row">
<div class="col-md-3"> <div class="col-md-3">
@ -406,10 +408,36 @@ if ($is_cliente or $is_fornitore or $is_tecnico) {
<div class="col-md-9"> <div class="col-md-9">
{[ "type": "text", "label": "'.tr('Dicitura fissa in fattura').'", "name": "diciturafissafattura", "value": "$diciturafissafattura$" ]} {[ "type": "text", "label": "'.tr('Dicitura fissa in fattura').'", "name": "diciturafissafattura", "value": "$diciturafissafattura$" ]}
</div> </div>
</div> </div>';
</div>';
$banche = Banca::where('id_anagrafica', $anagrafica->id)->get();
$banca_predefinita = $banche->first(function ($item) {
return !empty($item['predefined']);
});
$modulo_banche = Modules::get('Banche');
if (!$banche->isEmpty()) {
echo '
<div class="row">
<div class="col-md-6">
<a href="'.base_path().'/editor.php?id_module='.$modulo_banche['id'].'&id_record='.$banca_predefinita->id.'">
'.tr("Visualizza la banca predefinita per l'Anagrafica").' <i class="fa fa-external-link"></i>
</a>
</div>
<div class="col-md-6">
<a href="'.base_path().'/controller.php?id_module='.$modulo_banche['id'].'&search_Anagrafica='.rawurlencode($anagrafica['ragione_sociale']).'">
'.tr("Visualizza le banche disponibili per l'Anagrafica").' <i class="fa fa-external-link"></i>
</a>
</div>
</div>';
} else {
echo '
<p>'.tr("Nessuna banca disponibile per l'Anagrafica").'</p>';
}
echo ' echo '
</div>
<div class="tab-pane '.(!$is_cliente ? 'hide' : 'active').'" id="cliente"> <div class="tab-pane '.(!$is_cliente ? 'hide' : 'active').'" id="cliente">
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-md-6">
@ -427,7 +455,7 @@ if ($is_cliente or $is_fornitore or $is_tecnico) {
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
{[ "type": "select", "label": "'.tr('Banca predefinita').'", "name": "idbanca_vendite", "values": "query=SELECT id, nome AS descrizione FROM co_banche WHERE deleted_at IS NULL ORDER BY nome ASC", "value": "$idbanca_vendite$", "icon-after": "add|'.Modules::get('Banche')['id'].'", "help": "'.tr('Banca predefinita su cui accreditare i pagamenti.').'" ]} {[ "type": "select", "label": "'.tr('Banca predefinita per accrediti').'", "name": "idbanca_vendite", "ajax-source": "banche", "select-options": '.json_encode(['id_anagrafica' => $anagrafica_azienda->id]).', "value": "$idbanca_vendite$", "help": "'.tr("Banca predefinita dell'Azienda su cui accreditare i pagamenti").'" ]}
</div> </div>
</div> </div>
@ -462,7 +490,7 @@ if ($is_cliente or $is_fornitore or $is_tecnico) {
</div>'; </div>';
// Collegamento con il conto // Collegamento con il conto
$conto = $dbo->fetchOne('SELECT co_pianodeiconti3.id, co_pianodeiconti2.numero as numero, co_pianodeiconti3.numero as numero_conto, co_pianodeiconti3.descrizione as descrizione FROM co_pianodeiconti3 INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE co_pianodeiconti3.id = '.prepare($record['idconto_cliente'])); $conto = $dbo->fetchOne('SELECT co_pianodeiconti3.id, co_pianodeiconti2.numero as numero, co_pianodeiconti3.numero as numero_conto, co_pianodeiconti3.descrizione AS descrizione FROM co_pianodeiconti3 INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE co_pianodeiconti3.id = '.prepare($record['idconto_cliente']));
echo ' echo '
<div class="row"> <div class="row">
@ -489,7 +517,7 @@ if ($is_cliente or $is_fornitore or $is_tecnico) {
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
{[ "type": "select", "label": "'.tr('Banca predefinita').'", "name": "idbanca_acquisti", "values": "query=SELECT id, nome AS descrizione FROM co_banche ORDER BY nome ASC", "value": "$idbanca_acquisti$", "icon-after": "add|'.Modules::get('Banche')['id'].'" ]} {[ "type": "select", "label": "'.tr('Banca predefinita per addebiti').'", "name": "idbanca_acquisti", "ajax-source": "banche", "select-options": '.json_encode(['id_anagrafica' => $anagrafica_azienda->id]).', "value": "$idbanca_acquisti$", "help": "'.tr("Banca predefinita dell'Azienda da cui addebitare i pagamenti").'" ]}
</div> </div>
</div> </div>
@ -509,7 +537,7 @@ if ($is_cliente or $is_fornitore or $is_tecnico) {
</div>'; </div>';
// Collegamento con il conto // Collegamento con il conto
$conto = $dbo->fetchOne('SELECT co_pianodeiconti3.id, co_pianodeiconti2.numero as numero, co_pianodeiconti3.numero as numero_conto, co_pianodeiconti3.descrizione as descrizione FROM co_pianodeiconti3 INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE co_pianodeiconti3.id = '.prepare($record['idconto_fornitore'])); $conto = $dbo->fetchOne('SELECT co_pianodeiconti3.id, co_pianodeiconti2.numero as numero, co_pianodeiconti3.numero as numero_conto, co_pianodeiconti3.descrizione AS descrizione FROM co_pianodeiconti3 INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE co_pianodeiconti3.id = '.prepare($record['idconto_fornitore']));
echo ' echo '
<div class="col-md-6"> <div class="col-md-6">
@ -562,7 +590,6 @@ if ($is_cliente or $is_fornitore or $is_tecnico) {
]); ?>" ]} ]); ?>" ]}
</div> </div>
<!-- campi già specificati in Codice R.E.A., da eliminare nelle prossime release --> <!-- campi già specificati in Codice R.E.A., da eliminare nelle prossime release -->
<!--div class="col-md-3"> <!--div class="col-md-3">
{[ "type": "text", "label": "<?php echo tr('Num. iscr. C.C.I.A.A.'); ?>", "name": "cciaa", "value": "$cciaa$" ]} {[ "type": "text", "label": "<?php echo tr('Num. iscr. C.C.I.A.A.'); ?>", "name": "cciaa", "value": "$cciaa$" ]}
@ -571,8 +598,8 @@ if ($is_cliente or $is_fornitore or $is_tecnico) {
<div class="col-md-3"> <div class="col-md-3">
{[ "type": "text", "label": "<?php echo tr('Città iscr. C.C.I.A.A.'); ?>", "name": "cciaa_citta", "value": "$cciaa_citta$" ]} {[ "type": "text", "label": "<?php echo tr('Città iscr. C.C.I.A.A.'); ?>", "name": "cciaa_citta", "value": "$cciaa_citta$" ]}
</div--> </div-->
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-3"> <div class="col-md-3">
{[ "type": "text", "label": "<?php echo tr('Num. iscr. tribunale'); ?>", "name": "iscrizione_tribunale", "value": "$iscrizione_tribunale$" ]} {[ "type": "text", "label": "<?php echo tr('Num. iscr. tribunale'); ?>", "name": "iscrizione_tribunale", "value": "$iscrizione_tribunale$" ]}

View File

@ -17,59 +17,57 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
use Modules\Anagrafiche\Anagrafica;
use Modules\Banche\Banca;
include_once __DIR__.'/../../core.php'; include_once __DIR__.'/../../core.php';
switch (filter('op')) { switch (filter('op')) {
case 'update': case 'add':
$id_anagrafica = filter('id_anagrafica');
$anagrafica = Anagrafica::find($id_anagrafica);
$nome = filter('nome'); $nome = filter('nome');
$iban = filter('iban');
$bic = filter('bic');
if (isset($nome)) { $banca = Banca::build($anagrafica, $nome, $iban, $bic);
$array = [ $id_record = $banca->id;
'nome' => $nome,
'filiale' => post('filiale'),
'iban' => post('iban'),
'bic' => post('bic'),
'id_pianodeiconti3' => post('id_pianodeiconti3'),
'note' => post('note'),
];
if (!empty($id_record)) { if (isAjaxRequest()) {
$dbo->update('co_banche', $array, ['id' => $id_record]); echo json_encode([
} 'id' => $id_record,
'text' => $nome,
flash()->info(tr('Salvataggio completato.')); ]);
} else {
flash()->error(tr('Ci sono stati alcuni errori durante il salvataggio!'));
} }
flash()->info(tr('Aggiunta nuova _TYPE_', [
'_TYPE_' => 'banca',
]));
break; break;
case 'add': case 'update':
$nome = filter('nome'); $nome = filter('nome');
$bic = filter('bic');
$iban = filter('iban');
if (isset($nome)) { $banca->nome = post('nome');
$dbo->query('INSERT INTO `co_banche` (`nome`, `bic`, `iban`) VALUES ('.prepare($nome).', '.prepare($bic).', '.prepare($iban).')'); $banca->iban = post('iban');
$id_record = $dbo->lastInsertedID(); $banca->bic = post('bic');
if (isAjaxRequest()) { $banca->note = post('note');
echo json_encode(['id' => $id_record, 'text' => $nome]); $banca->id_pianodeiconti3 = post('id_pianodeiconti3');
} $banca->filiale = post('filiale');
flash()->info(tr('Aggiunta nuova _TYPE_', [ $banca->predefined = post('predefined');
'_TYPE_' => 'banca',
])); $banca->save();
} else {
flash()->error(tr('Ci sono stati alcuni errori durante il salvataggio!')); flash()->info(tr('Salvataggio completato'));
}
break; break;
case 'delete': case 'delete':
$dbo->update('co_banche', [ $banca->delete();
'deleted_at' => date('Y-m-d H:i:s'),
], ['id' => $id_record]);
flash()->info(tr('_TYPE_ eliminata con successo!', [ flash()->info(tr('_TYPE_ eliminata con successo!', [
'_TYPE_' => 'Banca', '_TYPE_' => 'Banca',

View File

@ -19,29 +19,38 @@
include_once __DIR__.'/../../core.php'; include_once __DIR__.'/../../core.php';
?><form action="" method="post" id="add-form"> $id_anagrafica = filter('id_anagrafica');
echo '
<form action="" method="post" id="add-form">
<input type="hidden" name="op" value="add"> <input type="hidden" name="op" value="add">
<input type="hidden" name="backto" value="record-edit"> <input type="hidden" name="backto" value="record-edit">
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-6">
{[ "type": "text", "label": "<?php echo tr('Nome'); ?>", "name": "nome", "required": "1" ]} {[ "type": "select", "label": "'.tr('Anagrafica').'", "name": "id_anagrafica", "required": "1", "value": "$id_anagrafica$", "ajax-source": "anagrafiche", "value": "'.$id_anagrafica.'", "disabled": "'.intval(!empty($id_anagrafica)).'" ]}
</div>
<div class="col-md-6">
{[ "type": "text", "label": "'.tr('Nome').'", "name": "nome", "required": "1" ]}
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-8"> <div class="col-md-8">
{[ "type": "text", "label": "<?php echo tr('IBAN'); ?>", "name": "iban", "required": "1", "class": "alphanumeric-mask", "maxlength": 32, "value": "$iban$" ]} {[ "type": "text", "label": "'.tr('IBAN').'", "name": "iban", "required": "1", "class": "alphanumeric-mask", "maxlength": 32, "value": "$iban$" ]}
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
{[ "type": "text", "label": "<?php echo tr('BIC'); ?>", "name": "bic", "class": "alphanumeric-mask", "maxlength": 11, "value": "$bic$" ]} {[ "type": "text", "label": "'.tr('BIC').'", "name": "bic", "required": "1", "class": "alphanumeric-mask", "maxlength": 11, "value": "$bic$" ]}
</div> </div>
</div> </div>
<!-- PULSANTI --> <!-- PULSANTI -->
<div class="row"> <div class="row">
<div class="col-md-12 text-right"> <div class="col-md-12 text-right">
<button type="submit" class="btn btn-primary"><i class="fa fa-plus"></i> <?php echo tr('Aggiungi'); ?></button> <button type="submit" class="btn btn-primary">
<i class="fa fa-plus"></i> '.tr('Aggiungi').'
</button>
</div> </div>
</div> </div>
</form> </form>';

View File

@ -0,0 +1,47 @@
<?php
/*
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
* Copyright (C) DevCode s.n.c.
*
* 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';
switch ($resource) {
/*
* Opzioni utilizzate:
* - id_anagrafica
*/
case 'banche':
$query = "SELECT id, CONCAT (nome, ' - ' , iban) AS descrizione FROM co_banche |where| ORDER BY nome";
foreach ($elements as $element) {
$filter[] = 'id = '.prepare($element);
}
if (empty($filter)) {
$where[] = 'deleted_at IS NULL';
}
$where[] = 'id_anagrafica='.prepare($superselect['id_anagrafica']);
if (!empty($search)) {
$search_fields[] = 'nome LIKE '.prepare('%'.$search.'%');
$search_fields[] = 'filiale LIKE '.prepare('%'.$search.'%');
$search_fields[] = 'iban LIKE '.prepare('%'.$search.'%');
}
break;
}

View File

@ -20,7 +20,6 @@
include_once __DIR__.'/../../core.php'; include_once __DIR__.'/../../core.php';
?><form action="" method="post" id="edit-form"> ?><form action="" method="post" id="edit-form">
<input type="hidden" name="backto" value="record-edit"> <input type="hidden" name="backto" value="record-edit">
<input type="hidden" name="op" value="update"> <input type="hidden" name="op" value="update">
@ -32,24 +31,39 @@ include_once __DIR__.'/../../core.php';
<div class="panel-body"> <div class="panel-body">
<div class="row"> <div class="row">
<div class="col-md-4"> <div class="col-md-3">
{[ "type": "text", "label": "<?php echo tr('Nome'); ?>", "name": "nome", "required": "1", "value": "$nome$" ]} {[ "type": "select", "label": "<?php echo tr('Anagrafica'); ?>", "name": "id_anagrafica", "required": "1", "value": "$id_anagrafica$", "ajax-source": "anagrafiche", "disabled": 1 ]}
</div> </div>
<div class="col-md-4">
<div class="col-md-3">
{[ "type": "checkbox", "label": "<?php echo tr('Predefinito'); ?>", "name": "predefined", "value": "$predefined$", "disabled": "<?php echo intval($record['predefined']); ?>" ]}
</div>
<div class="col-md-6">
{[ "type": "text", "label": "<?php echo tr('Nome'); ?>", "name": "nome", "required": "1", "value": "$nome$" ]}
</div>
</div>
<div class="row">
<div class="col-md-6">
{[ "type": "text", "label": "<?php echo tr('Filiale'); ?>", "name": "filiale", "value": "$filiale$" ]} {[ "type": "text", "label": "<?php echo tr('Filiale'); ?>", "name": "filiale", "value": "$filiale$" ]}
</div> </div>
<div class="col-md-4">
<div class="col-md-6">
{[ "type": "select", "label": "<?php echo tr('Conto predefinito'); ?>", "name": "id_pianodeiconti3", "value": "$id_pianodeiconti3$", "values": "query=SELECT id, descrizione FROM co_pianodeiconti3 WHERE idpianodeiconti2 = 1" ]} {[ "type": "select", "label": "<?php echo tr('Conto predefinito'); ?>", "name": "id_pianodeiconti3", "value": "$id_pianodeiconti3$", "values": "query=SELECT id, descrizione FROM co_pianodeiconti3 WHERE idpianodeiconti2 = 1" ]}
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-8"> <div class="col-md-8">
{[ "type": "text", "label": "<?php echo tr('IBAN'); ?>", "name": "iban", "required": "1", "class": "alphanumeric-mask", "maxlength": 32, "value": "$iban$" ]} {[ "type": "text", "label": "<?php echo tr('IBAN'); ?>", "name": "iban", "required": "1", "class": "alphanumeric-mask", "maxlength": 32, "value": "$iban$" ]}
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
{[ "type": "text", "label": "<?php echo tr('BIC'); ?>", "name": "bic", "class": "alphanumeric-mask", "maxlength": 11, "value": "$bic$" ]} {[ "type": "text", "label": "<?php echo tr('BIC'); ?>", "name": "bic", "required": "1", "class": "alphanumeric-mask", "maxlength": 11, "value": "$bic$" ]}
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
{[ "type": "textarea", "label": "<?php echo tr('Note'); ?>", "name": "note", "value": "$note$" ]} {[ "type": "textarea", "label": "<?php echo tr('Note'); ?>", "name": "note", "value": "$note$" ]}
@ -62,15 +76,15 @@ include_once __DIR__.'/../../core.php';
<?php <?php
// Collegamenti diretti (numerici) // Collegamenti diretti (numerici)
$documenti = $dbo->fetchNum('SELECT idanagrafica FROM an_anagrafiche WHERE idbanca_vendite='.prepare($id_record).' $numero_documenti = $dbo->fetchNum('SELECT idanagrafica FROM an_anagrafiche WHERE idbanca_vendite='.prepare($id_record).'
UNION SELECT idanagrafica FROM an_anagrafiche WHERE idbanca_acquisti='.prepare($id_record).' UNION SELECT idanagrafica FROM an_anagrafiche WHERE idbanca_acquisti='.prepare($id_record).'
UNION SELECT idanagrafica FROM co_documenti WHERE idbanca='.prepare($id_record)); UNION SELECT idanagrafica FROM co_documenti WHERE id_banca_azienda = '.prepare($id_record).' OR id_banca_controparte = '.prepare($id_record));
if (!empty($documenti)) { if (!empty($numero_documenti)) {
echo ' echo '
<div class="alert alert-danger"> <div class="alert alert-danger">
'.tr('Ci sono _NUM_ documenti collegati', [ '.tr('Ci sono _NUM_ documenti collegati', [
'_NUM_' => count($documenti), '_NUM_' => $numero_documenti,
]).'. ]).'.
</div>'; </div>';
} }

View File

@ -17,8 +17,12 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
use Modules\Banche\Banca;
include_once __DIR__.'/../../core.php'; include_once __DIR__.'/../../core.php';
if (isset($id_record)) { if (isset($id_record)) {
$record = $dbo->fetchOne('SELECT * FROM `co_banche` WHERE id='.prepare($id_record)); $banca = Banca::find($id_record);
$record = $banca->toArray();
} }

View File

@ -0,0 +1,93 @@
<?php
/*
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
* Copyright (C) DevCode s.n.c.
*
* 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/>.
*/
namespace Modules\Banche;
use Common\SimpleModelTrait;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Modules\Anagrafiche\Anagrafica;
class Banca extends Model
{
use SimpleModelTrait;
use SoftDeletes;
protected $table = 'co_banche';
/**
* Crea una nuovo banca.
*
* @param string $nome
* @param string $iban
* @param string $bic
*
* @return self
*/
public static function build(Anagrafica $anagrafica, $nome, $iban, $bic)
{
$model = new static();
// Informazioni di base
$model->anagrafica()->associate($anagrafica);
$model->nome = $nome;
$model->iban = $iban;
$model->bic = $bic;
// Salvataggio delle informazioni
$model->save();
return $model;
}
public function anagrafica()
{
return $this->belongsTo(Anagrafica::class, 'id_anagrafica');
}
public function save(array $options = [])
{
$this->fixPredefined();
return parent::save($options);
}
protected function fixPredefined()
{
$predefined = isset($this->predefined) ? $this->predefined : false;
// Selezione automatica per primo record
$count = self::where('id_anagrafica', $this->id_anagrafica)
->where('id', '!=', $this->id)
->count();
if (empty($predefined) && empty($count)) {
$predefined = true;
}
if (!empty($predefined)) {
self::where('id_anagrafica', $this->id_anagrafica)
->where('id', '!=', $this->id)
->update([
'predefined' => 0,
]);
$this->attributes['predefined'] = $predefined;
}
}
}

View File

@ -43,15 +43,15 @@ include_once __DIR__.'/../../core.php';
<?php <?php
// Collegamenti diretti (numerici) // Collegamenti diretti (numerici)
$documenti = $dbo->fetchNum('SELECT id FROM dt_ddt WHERE idaspettobeni='.prepare($id_record).' $numero_documenti = $dbo->fetchNum('SELECT id FROM dt_ddt WHERE idaspettobeni='.prepare($id_record).'
UNION SELECT id FROM co_documenti WHERE idaspettobeni='.prepare($id_record)); UNION SELECT id FROM co_documenti WHERE idaspettobeni='.prepare($id_record));
if (!empty($documenti)) { if (!empty($numero_documenti)) {
echo ' echo '
<div class="alert alert-danger"> <div class="alert alert-danger">
'.tr('Ci sono _NUM_ documenti collegati', [ '.tr('Ci sono _NUM_ documenti collegati', [
'_NUM_' => count($documenti), '_NUM_' => $numero_documenti,
]).'. ]).'.
</div>'; </div>';
} }

View File

@ -54,14 +54,14 @@ include_once __DIR__.'/../../core.php';
<?php <?php
// Collegamenti diretti (numerici) // Collegamenti diretti (numerici)
$documenti = $dbo->fetchNum('SELECT id FROM dt_ddt WHERE idcausalet='.prepare($id_record).' $numero_documenti = $dbo->fetchNum('SELECT id FROM dt_ddt WHERE idcausalet='.prepare($id_record).'
UNION SELECT id FROM co_documenti WHERE idcausalet='.prepare($id_record)); UNION SELECT id FROM co_documenti WHERE idcausalet='.prepare($id_record));
if (!empty($documenti)) { if (!empty($numero_documenti)) {
echo ' echo '
<div class="alert alert-danger"> <div class="alert alert-danger">
'.tr('Ci sono _NUM_ documenti collegati', [ '.tr('Ci sono _NUM_ documenti collegati', [
'_NUM_' => count($documenti), '_NUM_' => $numero_documenti,
]).'. ]).'.
</div>'; </div>';
} }

View File

@ -20,8 +20,6 @@
namespace Modules\DDT\Components; namespace Modules\DDT\Components;
use Common\Components\Article; use Common\Components\Article;
use Modules\Articoli\Articolo as Original;
use Modules\DDT\DDT;
class Articolo extends Article class Articolo extends Article
{ {

View File

@ -20,7 +20,6 @@
namespace Modules\DDT\Components; namespace Modules\DDT\Components;
use Common\Components\Description; use Common\Components\Description;
use Modules\DDT\DDT;
class Descrizione extends Description class Descrizione extends Description
{ {

View File

@ -20,7 +20,6 @@
namespace Modules\DDT\Components; namespace Modules\DDT\Components;
use Common\Components\Row; use Common\Components\Row;
use Modules\DDT\DDT;
class Riga extends Row class Riga extends Row
{ {

View File

@ -20,7 +20,6 @@
namespace Modules\DDT\Components; namespace Modules\DDT\Components;
use Common\Components\Discount; use Common\Components\Discount;
use Modules\DDT\DDT;
class Sconto extends Discount class Sconto extends Discount
{ {

View File

@ -89,7 +89,8 @@ switch (post('op')) {
$fattura->idanagrafica = post('idanagrafica'); $fattura->idanagrafica = post('idanagrafica');
$fattura->idagente = post('idagente'); $fattura->idagente = post('idagente');
$fattura->idpagamento = post('idpagamento'); $fattura->idpagamento = post('idpagamento');
$fattura->idbanca = post('idbanca'); $fattura->id_banca_azienda = post('id_banca_azienda');
$fattura->id_banca_controparte = post('id_banca_controparte');
$fattura->idcausalet = post('idcausalet'); $fattura->idcausalet = post('idcausalet');
$fattura->idspedizione = post('idspedizione'); $fattura->idspedizione = post('idspedizione');
$fattura->idporto = post('idporto'); $fattura->idporto = post('idporto');
@ -753,7 +754,8 @@ switch (post('op')) {
$nota->ref_documento = $fattura->id; $nota->ref_documento = $fattura->id;
$nota->idconto = $fattura->idconto; $nota->idconto = $fattura->idconto;
$nota->idpagamento = $fattura->idpagamento; $nota->idpagamento = $fattura->idpagamento;
$nota->idbanca = $fattura->idbanca; $nota->id_banca_azienda = $fattura->id_banca_azienda;
$nota->id_banca_controparte = $fattura->id_banca_controparte;
$nota->idsede_partenza = $fattura->idsede_partenza; $nota->idsede_partenza = $fattura->idsede_partenza;
$nota->idsede_destinazione = $fattura->idsede_destinazione; $nota->idsede_destinazione = $fattura->idsede_destinazione;
$nota->split_payment = $fattura->split_payment; $nota->split_payment = $fattura->split_payment;
@ -809,7 +811,8 @@ if (get('op') == 'nota_addebito') {
$nota->ref_documento = $fattura->id; $nota->ref_documento = $fattura->id;
$nota->idconto = $fattura->idconto; $nota->idconto = $fattura->idconto;
$nota->idpagamento = $fattura->idpagamento; $nota->idpagamento = $fattura->idpagamento;
$nota->idbanca = $fattura->idbanca; $nota->id_banca_azienda = $fattura->id_banca_azienda;
$nota->id_banca_controparte = $fattura->id_banca_controparte;
$nota->idsede_partenza = $fattura->idsede_partenza; $nota->idsede_partenza = $fattura->idsede_partenza;
$nota->idsede_destinazione = $fattura->idsede_destinazione; $nota->idsede_destinazione = $fattura->idsede_destinazione;
$nota->save(); $nota->save();

View File

@ -17,10 +17,13 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
use Modules\Anagrafiche\Anagrafica;
use Modules\Iva\Aliquota; use Modules\Iva\Aliquota;
include_once __DIR__.'/../../core.php'; include_once __DIR__.'/../../core.php';
$anagrafica_azienda = Anagrafica::find(setting('Azienda predefinita'));
$block_edit = !empty($note_accredito) || $record['stato'] == 'Emessa' || $record['stato'] == 'Pagato' || $record['stato'] == 'Parzialmente pagato'; $block_edit = !empty($note_accredito) || $record['stato'] == 'Emessa' || $record['stato'] == 'Pagato' || $record['stato'] == 'Parzialmente pagato';
$rs = $dbo->fetchArray('SELECT co_tipidocumento.descrizione, dir FROM co_tipidocumento INNER JOIN co_documenti ON co_tipidocumento.id=co_documenti.idtipodocumento WHERE co_documenti.id='.prepare($id_record)); $rs = $dbo->fetchArray('SELECT co_tipidocumento.descrizione, dir FROM co_tipidocumento INNER JOIN co_documenti ON co_tipidocumento.id=co_documenti.idtipodocumento WHERE co_documenti.id='.prepare($id_record));
@ -263,11 +266,11 @@ elseif ($record['stato'] == 'Bozza') {
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
{[ "type": "select", "label": "<?php echo tr('Pagamento'); ?>", "name": "idpagamento", "required": 1, "ajax-source": "pagamenti", "value": "$idpagamento$", "extra": "onchange=\"$('#idbanca').val($(this).selectData().id_banca_<?php echo $conto; ?>).change(); \" " ]} {[ "type": "select", "label": "<?php echo tr('Pagamento'); ?>", "name": "idpagamento", "required": 1, "ajax-source": "pagamenti", "value": "$idpagamento$", "extra": "onchange=\"$('#id_banca_azienda').val($(this).selectData().id_banca_<?php echo $conto; ?>).change(); \" " ]}
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
{[ "type": "select", "label": "<?php echo tr('Banca'); ?>", "name": "idbanca", "values": "query=SELECT id, CONCAT (nome, ' - ' , iban) AS descrizione FROM co_banche WHERE deleted_at IS NULL ORDER BY nome ASC", "value": "$idbanca$", "icon-after": "add|<?php echo Modules::get('Banche')['id']; ?>||", "extra": " <?php echo (intval($block_edit)) ? 'disabled' : ''; ?> " ]} {[ "type": "select", "label": "<?php echo tr('Banca azienda'); ?>", "name": "id_banca_azienda", "ajax-source": "banche", "select-options": <?php echo json_encode(['id_anagrafica' => $anagrafica_azienda->id]); ?>, "value": "$id_banca_azienda$", "icon-after": "add|<?php echo Modules::get('Banche')['id']; ?>||", "extra": " <?php echo (intval($block_edit)) ? 'disabled' : ''; ?> " ]}
</div> </div>
<?php <?php
@ -335,7 +338,7 @@ elseif ($record['stato'] == 'Bozza') {
</div> </div>
<?php <?php
//TODO: Fattura per conto del fornitore (es. cooperative agricole che emettono la fattura per conto dei propri soci produttori agricoli conferenti) // TODO: Fattura per conto del fornitore (es. cooperative agricole che emettono la fattura per conto dei propri soci produttori agricoli conferenti)
if ($dir == 'entrata') { if ($dir == 'entrata') {
?> ?>
<div class="col-md-3"> <div class="col-md-3">

View File

@ -25,6 +25,7 @@ use Common\Components\Component;
use Common\Document; use Common\Document;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Modules\Anagrafiche\Anagrafica; use Modules\Anagrafiche\Anagrafica;
use Modules\Banche\Banca;
use Modules\Fatture\Gestori\Bollo as GestoreBollo; use Modules\Fatture\Gestori\Bollo as GestoreBollo;
use Modules\Fatture\Gestori\Movimenti as GestoreMovimenti; use Modules\Fatture\Gestori\Movimenti as GestoreMovimenti;
use Modules\Fatture\Gestori\Scadenze as GestoreScadenze; use Modules\Fatture\Gestori\Scadenze as GestoreScadenze;
@ -89,12 +90,13 @@ class Fattura extends Document
$model = new static(); $model = new static();
$user = Auth::user(); $user = Auth::user();
$database = database();
// Individuazione dello stato predefinito per il documento
$stato_documento = Stato::where('descrizione', 'Bozza')->first(); $stato_documento = Stato::where('descrizione', 'Bozza')->first();
$direzione = $tipo_documento->dir; $direzione = $tipo_documento->dir;
$database = database(); // Conto predefinito sulla base del flusso di denaro
if ($direzione == 'entrata') { if ($direzione == 'entrata') {
$id_conto = setting('Conto predefinito fatture di vendita'); $id_conto = setting('Conto predefinito fatture di vendita');
$conto = 'vendite'; $conto = 'vendite';
@ -103,6 +105,7 @@ class Fattura extends Document
$conto = 'acquisti'; $conto = 'acquisti';
} }
// Informazioni di base
$model->anagrafica()->associate($anagrafica); $model->anagrafica()->associate($anagrafica);
$model->tipo()->associate($tipo_documento); $model->tipo()->associate($tipo_documento);
$model->stato()->associate($stato_documento); $model->stato()->associate($stato_documento);
@ -114,55 +117,65 @@ class Fattura extends Document
$model->data_registrazione = $data; $model->data_registrazione = $data;
$model->data_competenza = $data; $model->data_competenza = $data;
$model->id_segment = $id_segment; $model->id_segment = $id_segment;
$model->idconto = $id_conto;
if ($numero_esterno) { if ($numero_esterno) {
$model->numero_esterno = $numero_esterno; $model->numero_esterno = $numero_esterno;
} }
$model->idconto = $id_conto; // Sede aziendale scelta tra le sedi disponibili per l'utente
$id_sede = $user->sedi[0];
// Imposto, come sede aziendale, la prima sede disponibile come utente
if ($direzione == 'entrata') { if ($direzione == 'entrata') {
$model->idsede_destinazione = $user->sedi[0]; $model->idsede_destinazione = $id_sede;
} else { } else {
$model->idsede_partenza = $user->sedi[0]; $model->idsede_partenza = $id_sede;
} }
// Gestione della marca da bollo predefinita
$model->addebita_bollo = setting('Addebita marca da bollo al cliente'); $model->addebita_bollo = setting('Addebita marca da bollo al cliente');
// Ritenuta contributi predefinita
$id_ritenuta_contributi = ($tipo_documento->dir == 'entrata') ? setting('Ritenuta contributi') : null; $id_ritenuta_contributi = ($tipo_documento->dir == 'entrata') ? setting('Ritenuta contributi') : null;
$model->id_ritenuta_contributi = $id_ritenuta_contributi ?: null; $model->id_ritenuta_contributi = $id_ritenuta_contributi ?: null;
// Tipo di pagamento e banca predefinite dall'anagrafica // Banca predefinita per l'anagrafica controparte
$id_pagamento = $database->fetchOne('SELECT id FROM co_pagamenti WHERE id = :id_pagamento', [ //$model->id_banca_controparte = ;
':id_pagamento' => $anagrafica['idpagamento_'.$conto],
])['id'];
$id_banca = $anagrafica['idbanca_'.$conto];
// Se la fattura è di vendita e non è stato associato un pagamento predefinito al cliente leggo il pagamento dalle impostazioni // Tipo di pagamento dall'anagrafica controparte
$id_pagamento = $database->fetchOne('SELECT id FROM co_pagamenti WHERE id = :id_pagamento', [
':id_pagamento' => $anagrafica->{'idpagamento_'.$conto},
])['id'];
// Per Fatture di Vendita senza pagamento predefinito per il Cliente, si utilizza il pagamento predefinito dalle Impostazioni
if ($direzione == 'entrata' && empty($id_pagamento)) { if ($direzione == 'entrata' && empty($id_pagamento)) {
$id_pagamento = setting('Tipo di pagamento predefinito'); $id_pagamento = setting('Tipo di pagamento predefinito');
} }
// Se non è impostata la banca dell'anagrafica, uso quella del pagamento. // Salvataggio del pagamento
if (empty($id_banca)) {
$id_banca = $database->fetchOne('SELECT id FROM co_banche WHERE id_pianodeiconti3 = (SELECT idconto_'.$conto.' FROM co_pagamenti WHERE id = :id_pagamento)', [
':id_pagamento' => $id_pagamento,
])['id'];
}
if (!empty($id_pagamento)) { if (!empty($id_pagamento)) {
$model->idpagamento = $id_pagamento; $model->idpagamento = $id_pagamento;
} }
if (!empty($id_banca)) {
$model->idbanca = $id_banca; // Banca predefinita per l'azienda, con ricerca della banca impostata per il pagamento
$id_banca_azienda = $anagrafica->{'idbanca_'.$conto};
if (empty($id_banca_azienda)) {
$azienda = Anagrafica::find(setting('Azienda predefinita'));
$id_banca_azienda = $database->fetchOne('SELECT id FROM co_banche WHERE id_pianodeiconti3 = (SELECT idconto_'.$conto.' FROM co_pagamenti WHERE id = :id_pagamento) AND id_anagrafica = :id_anagrafica', [
':id_pagamento' => $id_pagamento,
':id_anagrafica' => $azienda->id,
])['id'];
if (empty($id_banca_azienda)) {
$id_banca_azienda = $azienda->{'idbanca_'.$conto};
}
$model->id_banca_azienda = $id_banca_azienda;
} }
// Split Payment // Gestione dello Split Payment sulla base dell'anagrafica Controparte
$split_payment = $anagrafica->split_payment; $split_payment = $anagrafica->split_payment;
if (!empty($split_payment)) { if (!empty($split_payment)) {
$model->split_payment = $split_payment; $model->split_payment = $split_payment;
} }
// Dichiarazione d'Intento // Gestione della Dichiarazione d'Intento associata all'anargafica Controparte
$now = new Carbon(); $now = new Carbon();
$dichiarazione = $anagrafica->dichiarazioni() $dichiarazione = $anagrafica->dichiarazioni()
->where('massimale', '>', 'totale') ->where('massimale', '>', 'totale')
@ -172,6 +185,7 @@ class Fattura extends Document
if (!empty($dichiarazione)) { if (!empty($dichiarazione)) {
$model->dichiarazione()->associate($dichiarazione); $model->dichiarazione()->associate($dichiarazione);
// Registrazione dell'operazione nelle note
$model->note = tr("Operazione non imponibile come da vostra dichiarazione d'intento nr _PROT_ del _PROT_DATE_ emessa in data _RELEASE_DATE_, da noi registrata al nr _ID_ del _DATE_", [ $model->note = tr("Operazione non imponibile come da vostra dichiarazione d'intento nr _PROT_ del _PROT_DATE_ emessa in data _RELEASE_DATE_, da noi registrata al nr _ID_ del _DATE_", [
'_PROT_' => $dichiarazione->numero_protocollo, '_PROT_' => $dichiarazione->numero_protocollo,
'_PROT_DATE_' => $dichiarazione->data_protocollo, '_PROT_DATE_' => $dichiarazione->data_protocollo,
@ -641,12 +655,14 @@ class Fattura extends Document
$riba = database()->fetchOne('SELECT riba FROM co_pagamenti WHERE id ='.prepare($this->idpagamento)); $riba = database()->fetchOne('SELECT riba FROM co_pagamenti WHERE id ='.prepare($this->idpagamento));
if ($riba['riba'] == 1) { if ($riba['riba'] == 1) {
$result = database()->fetchOne('SELECT codiceiban, appoggiobancario, bic FROM an_anagrafiche WHERE idanagrafica ='.prepare($this->idanagrafica)); $banca = Banca::where('id_anagrafica', $this->idanagrafica)
->where('predefined', 1)
->first();
} else { } else {
$result = database()->fetchOne('SELECT iban AS codiceiban, nome AS appoggiobancario, bic FROM co_banche WHERE id='.prepare($this->idbanca)); $banca = Banca::find($this->id_banca_azienda);
} }
return $result; return $banca;
} }
// Metodi statici // Metodi statici

View File

@ -20,8 +20,6 @@
namespace Modules\Interventi\Components; namespace Modules\Interventi\Components;
use Common\Components\Article; use Common\Components\Article;
use Modules\Articoli\Articolo as Original;
use Modules\Interventi\Intervento;
class Articolo extends Article class Articolo extends Article
{ {

View File

@ -20,7 +20,6 @@
namespace Modules\Interventi\Components; namespace Modules\Interventi\Components;
use Common\Components\Row; use Common\Components\Row;
use Modules\Interventi\Intervento;
class Riga extends Row class Riga extends Row
{ {

View File

@ -20,7 +20,6 @@
namespace Modules\Interventi\Components; namespace Modules\Interventi\Components;
use Common\Components\Discount; use Common\Components\Discount;
use Modules\Interventi\Intervento;
class Sconto extends Discount class Sconto extends Discount
{ {

View File

@ -20,8 +20,6 @@
namespace Modules\Ordini\Components; namespace Modules\Ordini\Components;
use Common\Components\Article; use Common\Components\Article;
use Modules\Articoli\Articolo as Original;
use Modules\Ordini\Ordine;
class Articolo extends Article class Articolo extends Article
{ {

View File

@ -20,7 +20,6 @@
namespace Modules\Ordini\Components; namespace Modules\Ordini\Components;
use Common\Components\Description; use Common\Components\Description;
use Modules\Ordini\Ordine;
class Descrizione extends Description class Descrizione extends Description
{ {

View File

@ -20,7 +20,6 @@
namespace Modules\Ordini\Components; namespace Modules\Ordini\Components;
use Common\Components\Row; use Common\Components\Row;
use Modules\Ordini\Ordine;
class Riga extends Row class Riga extends Row
{ {

View File

@ -20,7 +20,6 @@
namespace Modules\Ordini\Components; namespace Modules\Ordini\Components;
use Common\Components\Discount; use Common\Components\Discount;
use Modules\Ordini\Ordine;
class Sconto extends Discount class Sconto extends Discount
{ {

View File

@ -46,15 +46,15 @@ include_once __DIR__.'/../../core.php';
<?php <?php
// Collegamenti diretti (numerici) // Collegamenti diretti (numerici)
$documenti = $dbo->fetchNum('SELECT id FROM dt_ddt WHERE idporto='.prepare($id_record).' $numero_documenti = $dbo->fetchNum('SELECT id FROM dt_ddt WHERE idporto='.prepare($id_record).'
UNION SELECT id FROM co_documenti WHERE idporto='.prepare($id_record).' UNION SELECT id FROM co_documenti WHERE idporto='.prepare($id_record).'
UNION SELECT id FROM co_preventivi WHERE idporto='.prepare($id_record)); UNION SELECT id FROM co_preventivi WHERE idporto='.prepare($id_record));
if (!empty($documenti)) { if (!empty($numero_documenti)) {
echo ' echo '
<div class="alert alert-danger"> <div class="alert alert-danger">
'.tr('Ci sono _NUM_ documenti collegati', [ '.tr('Ci sono _NUM_ documenti collegati', [
'_NUM_' => count($documenti), '_NUM_' => $numero_documenti,
]).'. ]).'.
</div>'; </div>';
} }

View File

@ -20,8 +20,6 @@
namespace Modules\Preventivi\Components; namespace Modules\Preventivi\Components;
use Common\Components\Article; use Common\Components\Article;
use Modules\Articoli\Articolo as Original;
use Modules\Preventivi\Preventivo;
class Articolo extends Article class Articolo extends Article
{ {

View File

@ -20,7 +20,6 @@
namespace Modules\Preventivi\Components; namespace Modules\Preventivi\Components;
use Common\Components\Description; use Common\Components\Description;
use Modules\Preventivi\Preventivo;
class Descrizione extends Description class Descrizione extends Description
{ {

View File

@ -20,7 +20,6 @@
namespace Modules\Preventivi\Components; namespace Modules\Preventivi\Components;
use Common\Components\Row; use Common\Components\Row;
use Modules\Preventivi\Preventivo;
class Riga extends Row class Riga extends Row
{ {

View File

@ -20,7 +20,6 @@
namespace Modules\Preventivi\Components; namespace Modules\Preventivi\Components;
use Common\Components\Discount; use Common\Components\Discount;
use Modules\Preventivi\Preventivo;
class Sconto extends Discount class Sconto extends Discount
{ {

View File

@ -46,14 +46,14 @@ include_once __DIR__.'/../../core.php';
<?php <?php
// Collegamenti diretti (numerici) // Collegamenti diretti (numerici)
$documenti = $dbo->fetchNum('SELECT id FROM dt_ddt WHERE idspedizione='.prepare($id_record).' $numero_documenti = $dbo->fetchNum('SELECT id FROM dt_ddt WHERE idspedizione='.prepare($id_record).'
UNION SELECT id FROM co_documenti WHERE idspedizione='.prepare($id_record)); UNION SELECT id FROM co_documenti WHERE idspedizione='.prepare($id_record));
if (!empty($documenti)) { if (!empty($numero_documenti)) {
echo ' echo '
<div class="alert alert-danger"> <div class="alert alert-danger">
'.tr('Ci sono _NUM_ documenti collegati', [ '.tr('Ci sono _NUM_ documenti collegati', [
'_NUM_' => count($documenti), '_NUM_' => $numero_documenti,
]).'. ]).'.
</div>'; </div>';
} }

View File

@ -1414,14 +1414,14 @@ class FatturaElettronica
'ImportoPagamento' => abs($scadenza['da_pagare']), 'ImportoPagamento' => abs($scadenza['da_pagare']),
]; ];
if (!empty($banca['appoggiobancario'])) { if (!empty($banca->nome)) {
$pagamento['IstitutoFinanziario'] = $banca['appoggiobancario']; $pagamento['IstitutoFinanziario'] = $banca->nome;
} }
if (!empty($banca['codiceiban'])) { if (!empty($banca->iban)) {
$pagamento['IBAN'] = clean($banca['codiceiban']); $pagamento['IBAN'] = clean($banca->iban);
} }
if (!empty($banca['bic'])) { if (!empty($banca->bic)) {
$pagamento['BIC'] = $banca['bic']; $pagamento['BIC'] = $banca->bic;
} }
$result[]['DettaglioPagamento'] = $pagamento; $result[]['DettaglioPagamento'] = $pagamento;

View File

@ -40,7 +40,7 @@ abstract class Document extends Model implements ReferenceInterface, DocumentInt
{ {
return static::$movimenta_magazzino; return static::$movimenta_magazzino;
} }
public function getRighe() public function getRighe()
{ {
$results = $this->mergeCollections($this->descrizioni, $this->righe, $this->articoli, $this->sconti); $results = $this->mergeCollections($this->descrizioni, $this->righe, $this->articoli, $this->sconti);

View File

@ -35,7 +35,7 @@ $record = $dbo->fetchOne('SELECT *,
(SELECT descrizione FROM dt_aspettobeni WHERE id=idaspettobeni) AS aspettobeni, (SELECT descrizione FROM dt_aspettobeni WHERE id=idaspettobeni) AS aspettobeni,
(SELECT descrizione FROM dt_spedizione WHERE id=idspedizione) AS spedizione, (SELECT descrizione FROM dt_spedizione WHERE id=idspedizione) AS spedizione,
(SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=idvettore) AS vettore, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=idvettore) AS vettore,
(SELECT id FROM co_banche WHERE id=idbanca) AS id_banca, (SELECT id FROM co_banche WHERE id = id_banca_azienda) AS id_banca,
(SELECT is_fiscale FROM zz_segments WHERE id = id_segment) AS is_fiscale (SELECT is_fiscale FROM zz_segments WHERE id = id_segment) AS is_fiscale
FROM co_documenti WHERE id='.prepare($id_record)); FROM co_documenti WHERE id='.prepare($id_record));
@ -43,9 +43,9 @@ $record['rivalsainps'] = floatval($record['rivalsainps']);
$record['ritenutaacconto'] = floatval($record['ritenutaacconto']); $record['ritenutaacconto'] = floatval($record['ritenutaacconto']);
$record['bollo'] = floatval($record['bollo']); $record['bollo'] = floatval($record['bollo']);
$nome_banca = $banca['appoggiobancario']; $nome_banca = $banca->nome;
$iban_banca = $banca['codiceiban']; $iban_banca = $banca->iban;
$bic_banca = $banca['bic']; $bic_banca = $banca->bic;
$module_name = ($record['dir'] == 'entrata') ? 'Fatture di vendita' : 'Fatture di acquisto'; $module_name = ($record['dir'] == 'entrata') ? 'Fatture di vendita' : 'Fatture di acquisto';

View File

@ -28,12 +28,21 @@ if (empty($id_sede) || $id_sede == '-1') {
} else { } else {
$queryc = 'SELECT an_anagrafiche.*, an_sedi.*, if(an_sedi.codice_fiscale != "", an_sedi.codice_fiscale, an_anagrafiche.codice_fiscale) AS codice_fiscale, if(an_sedi.piva != "", an_sedi.piva, an_anagrafiche.piva) AS piva FROM an_sedi JOIN an_anagrafiche ON an_anagrafiche.idanagrafica=an_sedi.idanagrafica WHERE an_sedi.idanagrafica='.prepare($id_cliente).' AND an_sedi.id='.prepare($id_sede); $queryc = 'SELECT an_anagrafiche.*, an_sedi.*, if(an_sedi.codice_fiscale != "", an_sedi.codice_fiscale, an_anagrafiche.codice_fiscale) AS codice_fiscale, if(an_sedi.piva != "", an_sedi.piva, an_anagrafiche.piva) AS piva FROM an_sedi JOIN an_anagrafiche ON an_anagrafiche.idanagrafica=an_sedi.idanagrafica WHERE an_sedi.idanagrafica='.prepare($id_cliente).' AND an_sedi.id='.prepare($id_sede);
} }
/**
* @deprecated
*/
$cliente = $dbo->fetchOne($queryc); $cliente = $dbo->fetchOne($queryc);
// Lettura dati aziendali // Lettura dati aziendali
$azienda = $dbo->fetchOne('SELECT *, (SELECT iban FROM co_banche WHERE id IN (SELECT idbanca FROM co_documenti WHERE id = '.prepare($id_record).' ) ) AS codiceiban, (SELECT nome FROM co_banche WHERE id IN (SELECT idbanca FROM co_documenti WHERE id = '.prepare($id_record).' ) ) AS appoggiobancario, (SELECT bic FROM co_banche WHERE id IN (SELECT idbanca FROM co_documenti WHERE id = '.prepare($id_record)." ) ) AS bic FROM an_anagrafiche WHERE idanagrafica = (SELECT valore FROM zz_settings WHERE nome='Azienda predefinita')"); /**
* @deprecated
*/
$azienda = $dbo->fetchOne('SELECT *, (SELECT iban FROM co_banche WHERE id IN (SELECT id_banca_azienda FROM co_documenti WHERE id = '.prepare($id_record).')) AS codiceiban, (SELECT nome FROM co_banche WHERE id IN (SELECT id_banca_azienda FROM co_documenti WHERE id = '.prepare($id_record).')) AS appoggiobancario, (SELECT bic FROM co_banche WHERE id IN (SELECT id_banca_azienda FROM co_documenti WHERE id = '.prepare($id_record).")) AS bic FROM an_anagrafiche WHERE idanagrafica = (SELECT valore FROM zz_settings WHERE nome='Azienda predefinita')");
// Prefissi e contenuti del replace // Prefissi e contenuti del replace
/**
* @deprecated
*/
$replace = [ $replace = [
'c_' => isset($cliente) ? $cliente : [], 'c_' => isset($cliente) ? $cliente : [],
'f_' => isset($azienda) ? $azienda : [], 'f_' => isset($azienda) ? $azienda : [],

View File

@ -176,4 +176,44 @@ UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `mg_articoli` LEFT JOI
UPDATE `zz_plugins` SET `options` = ' { "main_query": [ { "type": "table", "fields": "Matricola, Nome, Data, Descrizione", "query": "SELECT id, (SELECT `id` FROM `zz_modules` WHERE `name` = ''Impianti'') AS _link_module_, id AS _link_record_, matricola AS Matricola, nome AS Nome, DATE_FORMAT(data, ''%d/%m/%Y'') AS Data, descrizione AS Descrizione FROM my_impianti WHERE idanagrafica=|id_parent| HAVING 2=2 ORDER BY id DESC"} ]}' WHERE `zz_plugins`.`name` = 'Impianti del cliente'; UPDATE `zz_plugins` SET `options` = ' { "main_query": [ { "type": "table", "fields": "Matricola, Nome, Data, Descrizione", "query": "SELECT id, (SELECT `id` FROM `zz_modules` WHERE `name` = ''Impianti'') AS _link_module_, id AS _link_record_, matricola AS Matricola, nome AS Nome, DATE_FORMAT(data, ''%d/%m/%Y'') AS Data, descrizione AS Descrizione FROM my_impianti WHERE idanagrafica=|id_parent| HAVING 2=2 ORDER BY id DESC"} ]}' WHERE `zz_plugins`.`name` = 'Impianti del cliente';
-- Fix per plugin Storico attività -- Fix per plugin Storico attività
UPDATE `zz_plugins` SET `options` = '{"main_query": [{"type": "table", "fields": "Numero, Data inizio, Data fine, Tipo", "query": "SELECT in_interventi.id, in_interventi.codice AS Numero, DATE_FORMAT(MAX(orario_inizio),''%d/%m/%Y'') AS ''Data inizio'', DATE_FORMAT(MAX(orario_fine),''%d/%m/%Y'') AS ''Data fine'', (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=in_interventi.idtipointervento) AS ''Tipo'', (SELECT `id` FROM `zz_modules` WHERE `name` = ''Interventi'') AS _link_module_, in_interventi.id AS _link_record_ FROM in_interventi LEFT JOIN `in_interventi_tecnici` ON `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id` LEFT JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento`=`in_statiintervento`.`idstatointervento` WHERE 1=1 AND in_interventi.deleted_at IS NULL AND idanagrafica = |id_parent| GROUP BY `in_interventi`.`id` HAVING 2=2 ORDER BY in_interventi.id DESC"}]}' UPDATE `zz_plugins` SET `options` = '{"main_query": [{"type": "table", "fields": "Numero, Data inizio, Data fine, Tipo", "query": "SELECT in_interventi.id, in_interventi.codice AS Numero, DATE_FORMAT(MAX(orario_inizio),''%d/%m/%Y'') AS ''Data inizio'', DATE_FORMAT(MAX(orario_fine),''%d/%m/%Y'') AS ''Data fine'', (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=in_interventi.idtipointervento) AS ''Tipo'', (SELECT `id` FROM `zz_modules` WHERE `name` = ''Interventi'') AS _link_module_, in_interventi.id AS _link_record_ FROM in_interventi LEFT JOIN `in_interventi_tecnici` ON `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id` LEFT JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento`=`in_statiintervento`.`idstatointervento` WHERE 1=1 AND in_interventi.deleted_at IS NULL AND idanagrafica = |id_parent| GROUP BY `in_interventi`.`id` HAVING 2=2 ORDER BY in_interventi.id DESC"}]}';
-- Aggiornamento del modulo Banche per il supporto completo alle Anagrafiche
ALTER TABLE `co_banche` ADD `id_anagrafica` INT(11) NOT NULL, CHANGE `note` `note` TEXT, CHANGE `filiale` `filiale` varchar(255), ADD `predefined` BOOLEAN NOT NULL DEFAULT FALSE;
UPDATE `co_banche` SET `id_anagrafica` = (SELECT `valore` FROM `zz_settings` WHERE `nome` = 'Azienda predefinita');
ALTER TABLE `co_banche` ADD FOREIGN KEY (`id_anagrafica`) REFERENCES `an_anagrafiche`(`idanagrafica`) ON DELETE CASCADE;
-- Collegamento sulla base dei campi aggiuntivi per le Anagrafiche
UPDATE `co_banche` SET `co_banche`.`id_anagrafica` = (SELECT valore FROM zz_settings WHERE nome = 'Azienda predefinita');
-- Aggiornamento ID relativo sulle Anagrafiche
ALTER TABLE `an_anagrafiche` CHANGE `idbanca_acquisti` `idbanca_acquisti` INT(11),
CHANGE `idbanca_vendite` `idbanca_vendite` INT(11);
UPDATE `an_anagrafiche` SET `idbanca_acquisti` = NULL WHERE `idbanca_vendite` = 0;
UPDATE `an_anagrafiche` SET `idbanca_vendite` = NULL WHERE `idbanca_vendite` = 0;
INSERT INTO `co_banche` (`id_anagrafica`, `nome`, `iban`, `bic`, `filiale`) SELECT idanagrafica, IF(appoggiobancario != '', appoggiobancario, CONCAT('Banca predefinita di ', ragione_sociale)), codiceiban, bic, filiale FROM an_anagrafiche WHERE codiceiban IS NOT NULL AND codiceiban != '';
UPDATE `an_anagrafiche` SET `idbanca_acquisti` = (SELECT `id` FROM `co_banche` WHERE `co_banche`.`id_anagrafica` = `an_anagrafiche`.`idanagrafica` LIMIT 1) WHERE `idbanca_acquisti` IS NULL;
UPDATE `an_anagrafiche` SET `idbanca_vendite` = (SELECT `id` FROM `co_banche` WHERE `co_banche`.`id_anagrafica` = `an_anagrafiche`.`idanagrafica` LIMIT 1) WHERE `idbanca_vendite` IS NULL;
-- Aggiornamento tabella principale per Banche
UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `co_banche` INNER JOIN an_anagrafiche ON `an_anagrafiche`.`idanagrafica` = `co_banche`.`id_anagrafica` WHERE 1=1 AND `co_banche`.`deleted_at` IS NULL AND `an_anagrafiche`.`deleted_at` IS NULL HAVING 2=2' WHERE `name` = 'Banche';
INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `visible`, `summable`, `default`) VALUES
(NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Banche'), 'Anagrafica', 'an_anagrafiche.ragione_sociale', 0, 1, 0, 0, 1, 0, 1),
(NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Banche'), 'Predefinito', 'IF(`co_banche`.`predefined`, ''Si'', ''No'')', 6, 1, 0, 0, 1, 0, 1);
-- Campo id_banca_controparte e id_banca_azienda per i Documenti
ALTER TABLE `co_documenti` ADD `id_banca_controparte` INT(11) AFTER `idpagamento`;
ALTER TABLE `co_preventivi` ADD `id_banca_controparte` INT(11) AFTER `idpagamento`;
ALTER TABLE `co_contratti` ADD `id_banca_controparte` INT(11) AFTER `idpagamento`;
ALTER TABLE `dt_ddt` ADD `id_banca_controparte` INT(11) AFTER `idpagamento`;
ALTER TABLE `or_ordini` ADD `id_banca_controparte` INT(11) NOT NULL AFTER `idpagamento`;
ALTER TABLE `co_documenti` CHANGE `idbanca` `id_banca_azienda` INT(11) AFTER `idpagamento`;
ALTER TABLE `co_preventivi` ADD `id_banca_azienda` INT(11) AFTER `idpagamento`;
ALTER TABLE `co_contratti` ADD `id_banca_azienda` INT(11) AFTER `idpagamento`;
ALTER TABLE `dt_ddt` ADD `id_banca_azienda` INT(11) AFTER `idpagamento`;
ALTER TABLE `or_ordini` ADD `id_banca_azienda` INT(11) AFTER `idpagamento`;
UPDATE `co_documenti` SET `id_banca_azienda` = NULL WHERE `id_banca_azienda` = 0;