Merge branch 'master' of https://github.com/devcode-it/openstamanager
This commit is contained in:
commit
2bed6d7da2
|
@ -63,4 +63,4 @@ echo '
|
|||
|
||||
return false;
|
||||
}
|
||||
</script>';
|
||||
</script>';
|
||||
|
|
|
@ -370,11 +370,51 @@ $query .= ' ORDER BY descrizione';
|
|||
<?php if ($record['id_banca_azienda'] != 0) {
|
||||
echo Modules::link('Banche', $record['id_banca_azienda'], null, null, 'class="pull-right"');
|
||||
}
|
||||
?>
|
||||
{[ "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']; ?>|id_anagrafica=<?php echo $anagrafica_azienda->id; ?>", "extra": " <?php echo (intval($block_edit)) ? 'disabled' : ''; ?> " ]}
|
||||
</div>
|
||||
|
||||
<?php
|
||||
if ($dir == 'entrata') {
|
||||
echo '
|
||||
{[ "type": "select", "label": "'.tr('Banca accredito').'", "name": "id_banca_azienda", "ajax-source": "banche", "select-options": '.json_encode(['id_anagrafica' => $anagrafica_azienda->id]).', "value": "$id_banca_azienda$", "icon-after": "add|'.Modules::get('Banche')['id'].'|id_anagrafica='.$anagrafica_azienda->id.'", "extra": "'.(intval($block_edit) ? 'disabled' : '').'" ]}
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
{[ "type": "select", "label": "'.tr('Banca addebito').'", "name": "id_banca_controparte", "ajax-source": "banche", "select-options": '.json_encode(['id_anagrafica' => $record['idanagrafica']]).', "value": "$id_banca_controparte$", "icon-after": "add|'.Modules::get('Banche')['id'].'|idanagrafica='.$record['idanagrafica'].'", "extra": "'.(intval($block_edit) ? 'disabled' : '').'" ]}';
|
||||
} else {
|
||||
echo '
|
||||
{[ "type": "select", "label": "'.tr('Banca accredito').'", "name": "id_banca_controparte", "ajax-source": "banche", "select-options": '.json_encode(['id_anagrafica' => $record['idanagrafica']]).', "value": "$id_banca_controparte$", "icon-after": "add|'.Modules::get('Banche')['id'].'|idanagrafica='.$record['idanagrafica'].'", "extra": "'.(intval($block_edit) ? 'disabled' : '').'" ]}
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
{[ "type": "select", "label": "'.tr('Banca addebito').'", "name": "id_banca_azienda", "ajax-source": "banche", "select-options": '.json_encode(['id_anagrafica' => $anagrafica_azienda->id]).', "value": "$id_banca_azienda$", "icon-after": "add|'.Modules::get('Banche')['id'].'|id_anagrafica='.$anagrafica_azienda->id.'", "extra": "'.(intval($block_edit) ? 'disabled' : '').'" ]}';
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Split payment + Fattura per conto terzi (solo uscita) + Sconto in fattura (solo uscita) -->
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Split payment'); ?>", "name": "split_payment", "value": "$split_payment$", "help": "<?php echo tr('Abilita lo split payment per questo documento. Le aliquote iva con natura N6.X (reverse charge) non saranno disponibili.'); ?>", "placeholder": "<?php echo tr('Split payment'); ?>" ]}
|
||||
</div>
|
||||
|
||||
<?php
|
||||
// TODO: Fattura per conto del fornitore (es. cooperative agricole che emettono la fattura per conto dei propri soci produttori agricoli conferenti)
|
||||
if ($dir == 'entrata') {
|
||||
?>
|
||||
<div class="col-md-3">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Fattura per conto terzi'); ?>", "name": "is_fattura_conto_terzi", "value": "$is_fattura_conto_terzi$", "help": "<?php echo tr('Nell\'XML della Fattura Elettronica sarà indicato il fornitore ('.stripslashes($database->fetchOne('SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica = '.prepare(setting('Azienda predefinita')))['ragione_sociale']).') come cessionario e il cliente come cedente/prestatore.'); ?>", "placeholder": "<?php echo tr('Fattura per conto terzi'); ?>" ]}
|
||||
</div>
|
||||
|
||||
<?php
|
||||
echo '<div class="col-md-3">
|
||||
{[ "type": "number", "label": "'.tr('Sconto in fattura').'", "name": "sconto_finale", "value": "'.($fattura->sconto_finale_percentuale ?: $fattura->sconto_finale).'", "icon-after": "choice|untprc|'.(empty($fattura->sconto_finale) ? 'PRC' : 'UNT').'", "help": "'.tr('Sconto in fattura, utilizzabile per applicare sconti sul Netto a pagare del documento e le relative scadenze').'. '.tr('Per utilizzarlo in relazione a una riga della Fattura Elettronica, inserire il tipo di dato in \'\'Attributi avanzati\'\' -> \'\'Altri Dati Gestionali\'\' -> \'\'TipoDato\'\' e il testo di descrizione in \'\'Attributi avanzati\'\' -> \'\'Altri Dati Gestionali\'\' -> \'\'RiferimentoTesto\'\' della specifica riga').'. '.tr('Nota: lo sconto in fattura non influenza i movimenti contabili').'." ]}
|
||||
</div>';
|
||||
} else {
|
||||
echo '
|
||||
<div class="col-md-3">
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
</div>';
|
||||
}
|
||||
|
||||
if ($record['stato'] != 'Bozza' && $record['stato'] != 'Annullata') {
|
||||
$scadenze = $fattura->scadenze;
|
||||
|
||||
|
@ -431,29 +471,6 @@ $query .= ' ORDER BY descrizione';
|
|||
</div>';
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
|
||||
<!-- Split payment + Fattura per conto terzi (solo uscita) + Sconto in fattura (solo uscita) -->
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Split payment'); ?>", "name": "split_payment", "value": "$split_payment$", "help": "<?php echo tr('Abilita lo split payment per questo documento. Le aliquote iva con natura N6.X (reverse charge) non saranno disponibili.'); ?>", "placeholder": "<?php echo tr('Split payment'); ?>" ]}
|
||||
</div>
|
||||
|
||||
<?php
|
||||
// TODO: Fattura per conto del fornitore (es. cooperative agricole che emettono la fattura per conto dei propri soci produttori agricoli conferenti)
|
||||
if ($dir == 'entrata') {
|
||||
?>
|
||||
<div class="col-md-3">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Fattura per conto terzi'); ?>", "name": "is_fattura_conto_terzi", "value": "$is_fattura_conto_terzi$", "help": "<?php echo tr('Nell\'XML della Fattura Elettronica sarà indicato il fornitore ('.stripslashes($database->fetchOne('SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica = '.prepare(setting('Azienda predefinita')))['ragione_sociale']).') come cessionario e il cliente come cedente/prestatore.'); ?>", "placeholder": "<?php echo tr('Fattura per conto terzi'); ?>" ]}
|
||||
</div>
|
||||
|
||||
<?php
|
||||
echo '<div class="col-md-3">
|
||||
{[ "type": "number", "label": "'.tr('Sconto in fattura').'", "name": "sconto_finale", "value": "'.($fattura->sconto_finale_percentuale ?: $fattura->sconto_finale).'", "icon-after": "choice|untprc|'.(empty($fattura->sconto_finale) ? 'PRC' : 'UNT').'", "help": "'.tr('Sconto in fattura, utilizzabile per applicare sconti sul Netto a pagare del documento e le relative scadenze').'. '.tr('Per utilizzarlo in relazione a una riga della Fattura Elettronica, inserire il tipo di dato in \'\'Attributi avanzati\'\' -> \'\'Altri Dati Gestionali\'\' -> \'\'TipoDato\'\' e il testo di descrizione in \'\'Attributi avanzati\'\' -> \'\'Altri Dati Gestionali\'\' -> \'\'RiferimentoTesto\'\' della specifica riga').'. '.tr('Nota: lo sconto in fattura non influenza i movimenti contabili').'." ]}
|
||||
</div>';
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
|
|
|
@ -97,13 +97,13 @@ class Scadenze
|
|||
* @param bool $is_pagato
|
||||
* @param string $type
|
||||
*/
|
||||
protected function registraScadenza(Fattura $fattura, $importo, $data_scadenza, $is_pagato, $type = 'fattura')
|
||||
protected function registraScadenza(Fattura $fattura, $importo, $data_scadenza, $is_pagato, $id_pagamento, $id_banca_azienda, $id_banca_controparte, $type = 'fattura')
|
||||
{
|
||||
$numero = $fattura->numero_esterno ?: $fattura->numero;
|
||||
$descrizione = $fattura->tipo->descrizione.' numero '.$numero;
|
||||
$idanagrafica = $fattura->idanagrafica;
|
||||
|
||||
$scadenza = Scadenza::build($idanagrafica, $descrizione, $importo, $data_scadenza, $type, $is_pagato);
|
||||
$scadenza = Scadenza::build($idanagrafica, $descrizione, $importo, $data_scadenza, $id_pagamento, $id_banca_azienda, $id_banca_controparte, $type, $is_pagato);
|
||||
|
||||
$scadenza->documento()->associate($fattura);
|
||||
$scadenza->data_emissione = $fattura->data;
|
||||
|
@ -164,8 +164,11 @@ class Scadenze
|
|||
foreach ($rate as $rata) {
|
||||
$scadenza = $rata['scadenza'];
|
||||
$importo = $direzione == 'uscita' ? -$rata['importo'] : $rata['importo'];
|
||||
$id_pagamento = $this->fattura->idpagamento;
|
||||
$id_banca_azienda = $this->fattura->id_banca_azienda;
|
||||
$id_banca_controparte = $this->fattura->id_banca_controparte;
|
||||
|
||||
self::registraScadenza($this->fattura, $importo, $scadenza, $is_pagato);
|
||||
self::registraScadenza($this->fattura, $importo, $scadenza, $is_pagato, $id_pagamento, $id_banca_azienda, $id_banca_controparte);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -192,8 +192,24 @@ class Mastrino extends Model
|
|||
$is_nota = false;
|
||||
$documento = $documento ?: $scadenza->documento;
|
||||
|
||||
if ($scadenza && empty($documento)) {
|
||||
$scadenze = [$scadenza];
|
||||
$dir = $movimento->totale < 0 ? 'uscita' : 'entrata';
|
||||
|
||||
$totale_da_distribuire = Movimento::where('id_scadenza', '=', $scadenza->id)
|
||||
->where('totale', '>', 0)
|
||||
->sum('totale');
|
||||
} elseif ($scadenza) {
|
||||
$scadenze = [$scadenza];
|
||||
$dir = $documento->direzione;
|
||||
|
||||
$totale_da_distribuire = Movimento::where('id_scadenza', '=', $scadenza->id)
|
||||
->where('totale', '>', 0)
|
||||
->sum('totale');
|
||||
}
|
||||
|
||||
// Gestione delle scadenze di un documento
|
||||
if ($documento) {
|
||||
elseif ($documento) {
|
||||
$dir = $documento->direzione;
|
||||
$scadenze = $documento->scadenze->sortBy('scadenza');
|
||||
|
||||
|
@ -213,20 +229,11 @@ class Mastrino extends Model
|
|||
$is_nota = $documento->isNota();
|
||||
}
|
||||
|
||||
// Gestione di una singola scadenza
|
||||
else {
|
||||
$scadenze = [$scadenza];
|
||||
$dir = $movimento->totale < 0 ? 'uscita' : 'entrata';
|
||||
|
||||
$totale_da_distribuire = Movimento::where('id_scadenza', '=', $scadenza->id)
|
||||
->where('totale', '>', 0)
|
||||
->sum('totale');
|
||||
}
|
||||
|
||||
$totale_da_distribuire = abs($totale_da_distribuire);
|
||||
|
||||
// Ciclo tra le rate dei pagamenti per inserire su `pagato` l'importo effettivamente pagato
|
||||
// Nel caso il pagamento superi la rata, devo distribuirlo sulle rate successive
|
||||
|
||||
foreach ($scadenze as $scadenza) {
|
||||
$scadenza_da_pagare = abs($scadenza['da_pagare']);
|
||||
|
||||
|
@ -248,7 +255,7 @@ class Mastrino extends Model
|
|||
}
|
||||
|
||||
// Inversione di segno per la direzione del movimento contabile
|
||||
$pagato = $dir == 'uscita' ? -$pagato : $pagato;
|
||||
$pagato = ($dir == 'uscita' ? -$pagato : $pagato);
|
||||
$pagato = $is_nota ? -$pagato : $pagato; // Inversione di segno per le note
|
||||
|
||||
// Salvataggio delle informazioni
|
||||
|
|
|
@ -40,16 +40,17 @@ switch (post('op')) {
|
|||
$tipo = post('tipo');
|
||||
$descrizione = post('descrizione');
|
||||
$iddocumento = post('iddocumento') ?: 0;
|
||||
$scadenze = Scadenza::where('iddocumento', $iddocumento)->get();
|
||||
|
||||
$totale_pagato = 0;
|
||||
$id_scadenza_non_completa = null;
|
||||
foreach (post('da_pagare') as $id => $da_pagare) {
|
||||
foreach ($scadenze as $id => $scadenza) {
|
||||
$pagato = post('pagato')[$id];
|
||||
$scadenza = post('scadenza')[$id];
|
||||
$data_concordata = post('data_concordata')[$id];
|
||||
|
||||
$pagato = floatval($pagato);
|
||||
$da_pagare = floatval($da_pagare);
|
||||
$da_pagare = post('da_pagare')[$id];
|
||||
|
||||
if (!empty($iddocumento)) {
|
||||
$id_tipo = $dbo->selectOne('co_documenti', 'idtipodocumento', ['id' => $iddocumento])['idtipodocumento'];
|
||||
|
@ -78,6 +79,9 @@ switch (post('op')) {
|
|||
}
|
||||
|
||||
$totale_pagato = sum($totale_pagato, $pagato);
|
||||
$id_pagamento = post('id_pagamento')[$id];
|
||||
$id_banca_azienda = post('id_banca_azienda')[$id];
|
||||
$id_banca_controparte = post('id_banca_controparte')[$id];
|
||||
|
||||
$id_scadenza = post('id_scadenza')[$id];
|
||||
if (!empty($id_scadenza)) {
|
||||
|
@ -88,6 +92,9 @@ switch (post('op')) {
|
|||
'pagato' => $pagato,
|
||||
'scadenza' => $scadenza,
|
||||
'data_concordata' => $data_concordata,
|
||||
'id_pagamento' => $id_pagamento,
|
||||
'id_banca_azienda' => $id_banca_azienda,
|
||||
'id_banca_controparte' => $id_banca_controparte,
|
||||
'note' => post('note'),
|
||||
'distinta' => post('distinta') ?: null,
|
||||
], ['id' => $id_scadenza]);
|
||||
|
|
|
@ -27,26 +27,32 @@ include_once __DIR__.'/../../core.php';
|
|||
<input type="hidden" name="dir" value="<?php echo $dir; ?>">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Anagrafica'); ?>", "name": "idanagrafica", "required": 1, "ajax-source": "anagrafiche" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Tipo'); ?>", "name": "tipo", "required": 1, "ajax-source": "tipi_scadenze", "icon-after": "add|<?php echo Modules::get('Tipi scadenze')['id']; ?>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-2">
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "date", "label": "<?php echo tr('Data scadenza'); ?>", "name": "data", "required": 1, "value": "-now-" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "number", "label": "<?php echo tr('Importo'); ?>", "name": "da_pagare", "required": 1, "value": "", "help": "Le scadenze inserite con importo positivo indicano un credito da un cliente, le scadenze inserite con importo negativo indicano un debito verso un fornitore" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class='row'>
|
||||
<div class='col-md-12'>
|
||||
{[ "type": "textarea", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "required": 1, "value": "" ]}
|
||||
<?php echo input([
|
||||
'type' => 'ckeditor',
|
||||
'label' => tr('Descrizione'),
|
||||
'name' => 'descrizione',
|
||||
'required' => 1,
|
||||
'value' => '',
|
||||
]); ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -37,8 +37,6 @@ echo '
|
|||
<div class="panel-heading">
|
||||
<h3 class="panel-title">
|
||||
'.tr('Dettagli scadenza').'
|
||||
<button type="button" class="btn btn-xs btn-info pull-right tip" id="add-scadenza" '.(empty($documento) ? 'disabled' : '').' title="'.tr('È possibile aggiungere scadenze solo se è presente il collegamento a un documento, in caso contrario è consigliato creare più scadenze con la stessa descrizione').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Aggiungi scadenza').'
|
||||
</button>
|
||||
</h3>
|
||||
</div>
|
||||
|
@ -66,7 +64,9 @@ if (!empty($documento)) {
|
|||
<th>'.tr('Numero').':</th>
|
||||
<td>'.$numero.'</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table class="table table-striped table-hover table-condensed table-bordered">
|
||||
<tr>
|
||||
<th>'.tr('Data').':</th>
|
||||
<td>'.Translator::dateToLocale($documento->data).'</td>
|
||||
|
@ -75,31 +75,52 @@ if (!empty($documento)) {
|
|||
<tr>
|
||||
<th>'.tr('Netto a pagare').':</th>
|
||||
<td>'.moneyFormat($documento->netto).'</td>
|
||||
</tr>';
|
||||
} else {
|
||||
$scadenza = $dbo->fetchOne('SELECT * FROM co_scadenziario WHERE id = '.prepare($id_record));
|
||||
echo '
|
||||
<tr>
|
||||
<th>'.tr('Descrizione').':</th>
|
||||
<td>
|
||||
{[ "type": "textarea", "name": "descrizione", "value": "'.$record['descrizione'].'" ]}
|
||||
</td>
|
||||
</tr>';
|
||||
}
|
||||
|
||||
echo '
|
||||
<tr>
|
||||
<th>'.tr('Note').':</th>
|
||||
<td>
|
||||
{[ "type": "textarea", "name": "note", "value": "'.$record['note'].'" ]}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>'.tr('Info distinta').' <span class="tip" title="'.tr('Informazioni/Note sulla distinta associata alla scadenza (es. numero)').'" ><i class="fa fa-question-circle-o" ></i></span>:</th>
|
||||
<td>
|
||||
{[ "type": "text", "name": "distinta", "value": "'.$record['distinta'].'" ]}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
'.Modules::link($documento->module, $record['iddocumento'], '<i class="fa fa-folder-open"></i> '.tr('Apri documento'), null, 'class="btn btn-primary"').'
|
||||
</div>';
|
||||
} else {
|
||||
$scadenza = $dbo->fetchOne('SELECT * FROM co_scadenziario WHERE id = '.prepare($id_record));
|
||||
echo '
|
||||
<table class="table table-striped table-hover table-condensed table-bordered">
|
||||
<tr>
|
||||
<td>';
|
||||
echo input([
|
||||
'type' => 'ckeditor',
|
||||
'label' => tr('descrizione'),
|
||||
'name' => 'descrizione',
|
||||
'required' => 1,
|
||||
'extra' => 'rows="2"',
|
||||
'value' => $record['descrizione'],
|
||||
]);
|
||||
echo '
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>';
|
||||
}
|
||||
|
||||
echo '
|
||||
<div class="col-md-6">
|
||||
<table class="table table-striped table-hover table-condensed table-bordered">
|
||||
<tr>
|
||||
<td>';
|
||||
echo input([
|
||||
'type' => 'ckeditor',
|
||||
'label' => tr('Note'),
|
||||
'name' => 'note',
|
||||
'extra' => 'rows="2"',
|
||||
'value' => $record['note'],
|
||||
]);
|
||||
echo '
|
||||
</td>
|
||||
</tr>';
|
||||
|
||||
if (!empty($record['presentazioni_exported_at'])) {
|
||||
|
@ -112,21 +133,35 @@ echo '
|
|||
echo '
|
||||
</table>';
|
||||
|
||||
if (!empty($documento)) {
|
||||
echo Modules::link($documento->module, $record['iddocumento'], '<i class="fa fa-folder-open"></i> '.tr('Apri documento'), null, 'class="btn btn-primary"');
|
||||
}
|
||||
echo '
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">
|
||||
'.tr('Rate scadenza').'
|
||||
<button type="button" class="btn btn-xs btn-info pull-right tip" id="add-scadenza" '.(empty($documento) ? 'disabled' : '').' title="'.tr('È possibile aggiungere scadenze solo se è presente il collegamento a un documento, in caso contrario è consigliato creare più scadenze con la stessa descrizione').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Aggiungi scadenza').'
|
||||
</button>
|
||||
</h3>
|
||||
</div>
|
||||
|
||||
<!-- Elenco scadenze -->
|
||||
<div class="col-md-6">
|
||||
<table class="table table-hover table-condensed table-bordered">
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<table class="table table-hover table-condensed table-bordered text-center">
|
||||
<thead>
|
||||
<tr>
|
||||
<th width="150">'.tr('Data').'</th>
|
||||
<th width="150">'.tr('Importo').'</th>
|
||||
<th width="150">'.tr('Pagato').'</th>
|
||||
<th width="150">'.tr('Data concordata').'</th>
|
||||
<th style="width:20%;">'.tr('Banca accredito').'</th>
|
||||
<th style="width:20%;">'.tr('Banca addebito').'</th>
|
||||
<th style="width:20%;">'.tr('Tipologia').'</th>
|
||||
<th style="width:10%;">'.tr('Data').'</th>
|
||||
<th style="width:10%;">'.tr('Data concordata').'</th>
|
||||
<th style="width:10%;">'.tr('Importo').'</th>
|
||||
<th style="width:10%;">'.tr('Pagato').'</th>
|
||||
<th style="width:3%;">'.tr('Rata').'</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
|
@ -144,65 +179,81 @@ foreach ($scadenze as $i => $scadenza) {
|
|||
}
|
||||
|
||||
echo '
|
||||
<tr class="'.$class.'">
|
||||
<input type="hidden" name="id_scadenza['.$i.']" value="'.$scadenza['id'].'">
|
||||
<tr class="'.$class.'">
|
||||
<input type="hidden" name="id_scadenza['.$i.']" value="'.$scadenza['id'].'">
|
||||
<td align="center">
|
||||
'.($scadenza['da_pagare'] > 0 ?
|
||||
'{[ "type": "select", "name": "id_banca_azienda['.$i.']", "ajax-source": "banche", "select-options": '.json_encode(['id_anagrafica' => $anagrafica_azienda->id]).', "value": "'.$scadenza['id_banca_azienda'].'", "icon-after": "add|'.Modules::get('Banche')['id'].'|id_anagrafica='.$anagrafica_azienda->id.'" ]}'
|
||||
:
|
||||
'{[ "type": "select", "name": "id_banca_controparte['.$i.']", "ajax-source": "banche", "select-options":'.json_encode(['id_anagrafica' => $scadenza['idanagrafica']]).', "value": "'.$scadenza['id_banca_controparte'].'", "icon-after": "add|'.Modules::get('Banche')['id'].'|idanagrafica='.$record['idanagrafica'].'"]}
|
||||
').'
|
||||
</td>
|
||||
|
||||
<td align="center">
|
||||
{[ "type": "date", "name": "scadenza['.$i.']", "value": "'.$scadenza['scadenza'].'" ]}
|
||||
</td>
|
||||
<td align="center">
|
||||
'.($scadenza['da_pagare'] > 0 ?
|
||||
'{[ "type": "select", "name": "id_banca_controparte['.$i.']", "ajax-source": "banche", "select-options":'.json_encode(['id_anagrafica' => $scadenza['idanagrafica']]).', "value": "'.$scadenza['id_banca_controparte'].'", "icon-after": "add|'.Modules::get('Banche')['id'].'|idanagrafica='.$record['idanagrafica'].'"]}'
|
||||
:
|
||||
'{[ "type": "select", "name": "id_banca_azienda['.$i.']", "ajax-source": "banche", "select-options": '.json_encode(['id_anagrafica' => $anagrafica_azienda->id]).', "value": "'.$scadenza['id_banca_azienda'].'", "icon-after": "add|'.Modules::get('Banche')['id'].'|id_anagrafica='.$anagrafica_azienda->id.'" ]}'
|
||||
).'
|
||||
</td>
|
||||
|
||||
<td class="text-right">
|
||||
{[ "type": "number", "name": "da_pagare['.$i.']", "decimals": 2, "value": "'.numberFormat($scadenza['da_pagare'], 2).'", "onchange": "controlloTotale()" ]}
|
||||
</td>
|
||||
<td>
|
||||
{[ "type": "select", "name": "id_pagamento['.$i.']", "ajax-source": "pagamenti", "select-options": '.json_encode(['id_anagrafica' => $anagrafica_azienda->id]).', "value": "'.$scadenza['id_pagamento'].'" ]}
|
||||
</td>
|
||||
|
||||
<td class="text-right">
|
||||
{[ "type": "number", "name": "pagato['.$i.']", "decimals": 2, "value": "'.numberFormat($scadenza['pagato']).'" ]}
|
||||
</td>
|
||||
<td align="center">
|
||||
{[ "type": "date", "name": "scadenza['.$i.']", "value": "'.$scadenza['scadenza'].'" ]}
|
||||
</td>
|
||||
|
||||
<td align="center">
|
||||
{[ "type": "date", "name": "data_concordata['.$i.']", "value": "'.$scadenza['data_concordata'].'" ]}
|
||||
</td>
|
||||
</tr>';
|
||||
<td align="center">
|
||||
{[ "type": "date", "name": "data_concordata['.$i.']", "value": "'.$scadenza['data_concordata'].'" ]}
|
||||
</td>
|
||||
|
||||
<td class="text-right">
|
||||
{[ "type": "number", "name": "da_pagare['.$i.']", "decimals": 2, "value": "'.numberFormat($scadenza['da_pagare'], 2).'", "onchange": "controlloTotale()" ]}
|
||||
</td>
|
||||
|
||||
<td class="text-right">
|
||||
{[ "type": "number", "name": "pagato['.$i.']", "decimals": 2, "value": "'.numberFormat($scadenza['pagato']).'" ]}
|
||||
</td>
|
||||
|
||||
<td align="center">
|
||||
<a onclick="launch_modal(\''.tr('Registra contabile pagamento').'\', \''.base_path().'/add.php?id_module='.Modules::get('Prima nota')['id'].'&id_scadenze='.$scadenza['id'].'\');" class="btn btn-sm btn-primary">
|
||||
<i class="fa fa-euro"></i> '.($scadenza['da_pagare'] > 0 ? tr('Incassa') : tr('Paga')).'
|
||||
</a>
|
||||
</td>
|
||||
</tr>';
|
||||
}
|
||||
|
||||
echo '
|
||||
echo '
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td class="text-right"></td>
|
||||
<td class="text-right"><b>'.tr('Totale').'</b></td>
|
||||
<td class="text-right" id="totale_utente">'.numberFormat($totale_da_pagare).'</td>
|
||||
<td class="text-right"></td>
|
||||
<td class="text-right"></td>
|
||||
<td class="text-right"></td>
|
||||
<td class="text-right"></td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>';
|
||||
|
||||
if ($totale_da_pagare != 0) {
|
||||
echo '
|
||||
<div class="pull-right">
|
||||
<a onclick="launch_modal(\''.tr('Registra contabile pagamento').'\', \''.base_path().'/add.php?id_module='.Modules::get('Prima nota')['id'].'&'.(!empty($record['iddocumento']) ? 'id_documenti='.$record['iddocumento'].'&single=1' : 'id_scadenze='.$id_record).'\');" class="btn btn-sm btn-primary">
|
||||
<i class="fa fa-euro"></i> '.tr('Registra contabile pagamento...').'
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="clearfix"></div>
|
||||
<br>';
|
||||
}
|
||||
</table>
|
||||
</div>';
|
||||
?>
|
||||
|
||||
<div class="alert alert-warning hide" id="totale"><?php echo tr('Il totale da pagare non corrisponde con il totale della fattura che è pari a _MONEY_', [
|
||||
'_MONEY_' => '<b>'.moneyFormat($totale_da_pagare).'</b>',
|
||||
]); ?>.<br><?php echo tr('Differenza di _TOT_ _CURRENCY_', [
|
||||
'_TOT_' => '<span id="diff"></span>',
|
||||
'_CURRENCY_' => currency(),
|
||||
]); ?>.
|
||||
</div>
|
||||
<div class="alert alert-warning hide" id="totale"><?php echo tr('Il totale da pagare non corrisponde con il totale della fattura che è pari a _MONEY_', [
|
||||
'_MONEY_' => '<b>'.moneyFormat($totale_da_pagare).'</b>',
|
||||
]); ?>.<br><?php echo tr('Differenza di _TOT_ _CURRENCY_', [
|
||||
'_TOT_' => '<span id="diff"></span>',
|
||||
'_CURRENCY_' => currency(),
|
||||
]); ?>.
|
||||
</div>
|
||||
|
||||
<input type="hidden" id="totale_da_pagare" value="<?php echo round($totale_da_pagare, 2); ?>">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" id="totale_da_pagare" value="<?php echo round($totale_da_pagare, 2); ?>">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
{( "name": "filelist_and_upload", "id_module": "$id_module$", "id_record": "<?php echo $id_record; ?>" )}
|
||||
|
@ -211,11 +262,11 @@ if ($totale_da_pagare != 0) {
|
|||
|
||||
<?php
|
||||
if (empty($documento)) {
|
||||
echo '
|
||||
echo '
|
||||
<a class="btn btn-danger ask" data-backto="record-list">
|
||||
<i class="fa fa-trash"></i> '.tr('Elimina').'
|
||||
</a>';
|
||||
}
|
||||
}
|
||||
|
||||
echo '
|
||||
<table class="hide">
|
||||
|
|
|
@ -35,7 +35,7 @@ class Scadenza extends Model
|
|||
'data_pagamento',
|
||||
];
|
||||
|
||||
public static function build($idanagrafica, $descrizione, $importo, $data_scadenza, $type = 'fattura', $is_pagato = false)
|
||||
public static function build($idanagrafica, $descrizione, $importo, $data_scadenza, $id_pagamento, $id_banca_azienda, $id_banca_controparte, $type = 'fattura', $is_pagato = false)
|
||||
{
|
||||
$model = new static();
|
||||
|
||||
|
@ -44,6 +44,9 @@ class Scadenza extends Model
|
|||
$model->scadenza = $data_scadenza;
|
||||
$model->da_pagare = $importo;
|
||||
$model->tipo = $type;
|
||||
$model->id_pagamento = $id_pagamento;
|
||||
$model->id_banca_azienda = $id_banca_azienda;
|
||||
$model->id_banca_controparte = $id_banca_controparte;
|
||||
|
||||
$model->pagato = $is_pagato ? $importo : 0;
|
||||
$model->data_pagamento = $is_pagato ? $data_scadenza : null;
|
||||
|
|
|
@ -23,6 +23,7 @@ use FluidXml\FluidXml;
|
|||
use GuzzleHttp\Client;
|
||||
use Modules;
|
||||
use Modules\Anagrafiche\Anagrafica;
|
||||
use Modules\Banche\Banca;
|
||||
use Modules\Fatture\Fattura;
|
||||
use Modules\Fatture\Gestori\Bollo;
|
||||
use Modules\Iva\Aliquota;
|
||||
|
@ -1631,7 +1632,6 @@ class FatturaElettronica
|
|||
$documento = $fattura->getDocumento();
|
||||
|
||||
$fattura = Fattura::find($documento['id']);
|
||||
$banca = $fattura->getBanca();
|
||||
|
||||
$database = database();
|
||||
|
||||
|
@ -1648,6 +1648,9 @@ class FatturaElettronica
|
|||
|
||||
$co_scadenziario = $database->fetchArray('SELECT * FROM `co_scadenziario` WHERE `iddocumento` = '.prepare($documento['id']));
|
||||
foreach ($co_scadenziario as $scadenza) {
|
||||
$co_pagamenti = $database->fetchOne('SELECT * FROM `co_pagamenti` WHERE `id` = '.prepare($scadenza['id_pagamento']));
|
||||
$banca = Banca::find($scadenza['id_banca_azienda']);
|
||||
|
||||
$pagamento = [
|
||||
'ModalitaPagamento' => $co_pagamenti['codice_modalita_pagamento_fe'],
|
||||
'DataScadenzaPagamento' => $scadenza['scadenza'],
|
||||
|
|
|
@ -61,10 +61,10 @@ echo "
|
|||
<tr>
|
||||
<td style='width:10mm;'> </td>
|
||||
|
||||
<td style='width:45mm;'>
|
||||
<td style='width:80mm;'>
|
||||
<table class='border-bottom'>
|
||||
<tr>
|
||||
<td colspan='3'>
|
||||
<td colspan='4'>
|
||||
<p class='small-bold'>".tr('Scadenze pagamenti', [], ['upper' => true]).'</p>
|
||||
</td>
|
||||
</tr>';
|
||||
|
@ -73,17 +73,21 @@ echo "
|
|||
$rs2 = $dbo->fetchArray('SELECT * FROM co_scadenziario WHERE iddocumento='.prepare($id_record).' ORDER BY `scadenza` ASC');
|
||||
if (!empty($rs2)) {
|
||||
for ($i = 0; $i < sizeof($rs2); ++$i) {
|
||||
$pagamento = $dbo->fetchOne('SELECT fe_modalita_pagamento.descrizione FROM co_pagamenti INNER JOIN fe_modalita_pagamento ON fe_modalita_pagamento.codice = co_pagamenti.codice_modalita_pagamento_fe WHERE co_pagamenti.id='.$rs2[$i]['id_pagamento'])['descrizione'];
|
||||
echo '
|
||||
<tr>
|
||||
<td>
|
||||
<td style=\'width:15%;\'>
|
||||
<small>'.Translator::dateToLocale($rs2[$i]['scadenza'])."</small>
|
||||
</td>
|
||||
<td style='width:25%;' class='text-right'>
|
||||
<td style='width:15%;' class='text-right'>
|
||||
".(($rs2[$i]['pagato'] == $rs2[$i]['da_pagare']) ? '<small>PAGATO</small>' : '')."
|
||||
</td>
|
||||
<td style='width:35%;' class='text-right'>
|
||||
<td style='width:15%;' class='text-right'>
|
||||
<small>".moneyFormat($rs2[$i]['da_pagare'], 2).'</small>
|
||||
</td>
|
||||
<td style=\'width:15%;\'>
|
||||
<small>'.$pagamento.'</small>
|
||||
</td>
|
||||
</tr>';
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ $banca = $documento->getBanca();
|
|||
$record = $dbo->fetchOne('SELECT *,
|
||||
(SELECT descrizione FROM co_statidocumento WHERE id=idstatodocumento) AS stato_doc,
|
||||
(SELECT descrizione FROM co_tipidocumento WHERE id=idtipodocumento) AS tipo_doc,
|
||||
(SELECT descrizione FROM co_pagamenti WHERE id=idpagamento) AS tipo_pagamento,
|
||||
(SELECT descrizione FROM co_pagamenti WHERE id=idpagamento) AS id_pagamento,
|
||||
(SELECT dir FROM co_tipidocumento WHERE id=idtipodocumento) AS dir,
|
||||
(SELECT descrizione FROM dt_causalet WHERE id=idcausalet) AS causalet,
|
||||
(SELECT descrizione FROM dt_porto WHERE id=idporto) AS porto,
|
||||
|
@ -101,7 +101,7 @@ $custom = [
|
|||
'numero' => $numero,
|
||||
'tipo_documento' => $tipo_doc,
|
||||
'data' => Translator::dateToLocale($record['data']),
|
||||
'pagamento' => $record['tipo_pagamento'],
|
||||
'pagamento' => $record['id_pagamento'],
|
||||
'c_destinazione' => $destinazione,
|
||||
'aspettobeni' => $record['aspettobeni'],
|
||||
'causalet' => $record['causalet'],
|
||||
|
|
|
@ -367,7 +367,7 @@ if (($options['pricing'] && !isset($options['hide-total'])) || $options['show-on
|
|||
// Totale imponibile
|
||||
echo '
|
||||
<tr>
|
||||
<td colspan="'.($options['show-only-total'] ? ($options['no-iva'] ? 3 : 2) : 4).'" class="text-right border-top">
|
||||
<td colspan="'.($options['show-only-total'] ? (($has_image) ? 3 : 2) : 4).'" class="text-right border-top">
|
||||
<b>'.tr('Imponibile', [], ['upper' => true]).':</b>
|
||||
</td>
|
||||
|
||||
|
|
|
@ -35,4 +35,8 @@ ALTER TABLE `mg_prodotti` ADD FOREIGN KEY (`id_riga_contratto`) REFERENCES `co_r
|
|||
INSERT INTO `zz_prints` (`id_module`, `is_record`, `name`, `title`, `filename`, `directory`, `previous`, `options`, `icon`, `version`, `compatibility`, `order`, `predefined`, `default`, `enabled`, `available_options`) VALUES ((SELECT `id` FROM `zz_modules` WHERE `name` = 'Preventivi'), '1', 'Preventivo(solo totale imponibile)', 'Preventivo (solo totale imponibile)', 'Preventivo num. {numero} del {data} rev {revisione}', 'preventivi', 'idpreventivo', '{\"pricing\": false, \"last-page-footer\": true, \"images\": true, \"no-iva\":true, \"show-only-total\":true }', 'fa fa-print', '', '', '0', '0', '1', '1', '{\"pricing\":\"Visualizzare i prezzi\", \"hide-total\": \"Nascondere i totali delle righe\", \"show-only-total\": \"Visualizzare solo i totali del documento\", \"hide-header\": \"Nascondere intestazione\", \"hide-footer\": \"Nascondere footer\", \"last-page-footer\": \"Visualizzare footer solo su ultima pagina\", \"hide-item-number\": \"Nascondere i codici degli articoli\"}');
|
||||
|
||||
-- Aggiunta indice per ricerca su files più rapida
|
||||
ALTER TABLE `zz_files` ADD INDEX(`id_record`);
|
||||
ALTER TABLE `zz_files` ADD INDEX(`id_record`);
|
||||
|
||||
ALTER TABLE `co_scadenziario` ADD `id_pagamento` INT NOT NULL;
|
||||
ALTER TABLE `co_scadenziario` ADD `id_banca_azienda` INT NULL;
|
||||
ALTER TABLE `co_scadenziario` ADD `id_banca_controparte` INT NULL;
|
Loading…
Reference in New Issue