Normalizzazione riferimenti (Ordini, DDT, Fatture)

This commit is contained in:
Thomas Zilio 2018-06-22 17:52:51 +02:00
parent c90a161046
commit 5a8deafa01
8 changed files with 159 additions and 218 deletions

View File

@ -64,7 +64,7 @@ if (!empty($rs)) {
if (empty($r['is_descrizione'])) {
echo '
'.Translator::numberToLocale($r['subtotale'] / $r['qta']).' €';
if ($r['sconto_unitario'] > 0) {
echo '
<br><small class="label label-danger">'.tr('sconto _TOT_ _TYPE_', [
@ -132,7 +132,7 @@ if (!empty($rs)) {
</td>
</tr>';
// Calcoli
$imponibile = sum(array_column($rs, 'subtotale'));
$sconto = sum(array_column($rs, 'sconto'));

View File

@ -2,6 +2,8 @@
include_once __DIR__.'/../../core.php';
include_once DOCROOT.'/modules/fatture/modutil.php';
echo '
<table class="table table-striped table-hover table-condensed table-bordered">
<tr>
@ -64,23 +66,12 @@ if (!empty($rs)) {
echo nl2br($r['descrizione']);
}
// Aggiunta riferimento a ordine
if (!empty($r['idordine'])) {
$rso = $dbo->fetchArray('SELECT numero, numero_esterno, data, dir FROM or_ordini JOIN or_tipiordine ON or_tipiordine.id = or_ordini.idtipoordine WHERE or_ordini.id='.prepare($r['idordine']));
$numero = !empty($rso[0]['numero_esterno']) ? $rso[0]['numero_esterno'] : $rso[0]['numero'];
// Aggiunta dei riferimenti ai documenti
$ref = doc_references($r, $dir, ['idddt']);
$ref = $rso[0]['dir'] == 'entrata' ? 'Ordini cliente' : 'Ordini fornitore';
$ref_id = $r['idordine'];
$descrizione = tr('Rif. ordine num. _NUM_ del _DATE_', [
'_NUM_' => $numero,
'_DATE_' => Translator::dateToLocale($rso[0]['data']),
]);
}
if (!empty($descrizione)) {
if (!empty($ref)) {
echo '
<br>'.Modules::link($ref, $ref_id, $descrizione.' <i class="fa fa-external-link"></i>', $descrizione);
<br>'.Modules::link($ref['module'], $ref['id'], $ref['description'], $ref['description']);
}
echo '
@ -152,7 +143,7 @@ if (!empty($rs)) {
// Possibilità di rimuovere una riga solo se il ddt non è evaso
echo '
<td class="text-center">';
if ($records[0]['flag_completato']==0 && empty($r['sconto_globale'])) {
if ($records[0]['flag_completato'] == 0 && empty($r['sconto_globale'])) {
echo "
<form action='".$rootdir.'/editor.php?id_module='.Modules::get($name)['id'].'&id_record='.$id_record."' method='post' id='delete-form-".$r['id']."' role='form'>
<input type='hidden' name='backto' value='record-edit'>

View File

@ -866,6 +866,15 @@ function controlla_seriali($field, $id_riga, $old_qta, $new_qta, $dir)
return true;
}
/**
* Individua i seriali non rimuovibili poichè utilizzati in documenti rilasciati.
*
* @param string $field
* @param int $id_riga
* @param string $dir
*
* @return array
*/
function seriali_non_rimuovibili($field, $id_riga, $dir)
{
$dbo = Database::getConnection();
@ -879,6 +888,13 @@ function seriali_non_rimuovibili($field, $id_riga, $dir)
return $results;
}
/**
* Calcola gli sconti in modo automatico.
*
* @param array $data
*
* @return float
*/
function calcola_sconto($data)
{
if ($data['tipo'] == 'PRC') {
@ -903,3 +919,102 @@ function calcola_sconto($data)
return $result;
}
/**
* Restistuisce le informazioni sull'eventuale riferimento ai documenti.
*
* @param array $data
* @param string $dir
*
* @return array
*/
function doc_references($info, $dir, $ignore = [])
{
$dbo = Database::getConnection();
// Rimozione valori da non controllare
foreach ($ignore as $field) {
if (isset($info[$field])) {
unset($info[$field]);
}
}
$module = null;
$id = null;
// Ordine
if (!empty($info['idordine'])) {
$data = $dbo->fetchArray("SELECT IF(numero_esterno != '', numero_esterno, numero) AS numero, data FROM or_ordini WHERE id=".prepare($info['idordine']));
$module = ($dir == 'entrata') ? 'Ordini cliente' : 'Ordini fornitore';
$id = $info['idordine'];
$document = tr('Ordine');
}
// DDT
elseif (!empty($info['idddt'])) {
$data = $dbo->fetchArray("SELECT IF(numero_esterno != '', numero_esterno, numero) AS numero, data FROM dt_ddt WHERE id=".prepare($info['idddt']));
$module = ($dir == 'entrata') ? 'Ddt di vendita' : 'Ddt di acquisto';
$id = $info['idddt'];
$document = tr('Ddt');
}
// Preventivo
elseif (!empty($info['idpreventivo'])) {
$data = $dbo->fetchArray('SELECT numero, data_bozza AS data FROM co_preventivi WHERE id='.prepare($info['idpreventivo']));
$module = 'Preventivi';
$id = $info['idpreventivo'];
$document = tr('Preventivo');
}
// Contratto
elseif (!empty($info['idcontratto'])) {
$data = $dbo->fetchArray('SELECT numero, data_bozza AS data FROM co_contratti WHERE id='.prepare($info['idcontratto']));
$module = 'Contratti';
$id = $info['idcontratto'];
$document = tr('Contratto');
}
// Intervento
elseif (!empty($info['idintervento'])) {
$data = $dbo->fetchArray('SELECT codice AS numero, IFNULL( (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE in_interventi_tecnici.idintervento=in_interventi.id), data_richiesta) AS data FROM in_interventi WHERE id='.prepare($info['idintervento']));
$module = 'Interventi';
$id = $info['idintervento'];
$document = tr('Intervento');
}
// Testo relativo
if (!empty($module) && !empty($id)) {
$document = Stringy\Stringy::create($document)->toLowerCase();
if (!empty($data)) {
$description = tr('Rif. _DOC_ num. _NUM_ del _DATE_', [
'_DOC_' => $document,
'_NUM_' => $data[0]['numero'],
'_DATE_' => Translator::dateToLocale($data[0]['data']),
]);
} else {
$description = tr('_DOC_ di riferimento _ID_ eliminato', [
'_DOC_' => $document->upperCaseFirst(),
'_ID_' => $id,
]);
}
return [
'module' => $module,
'id' => $id,
'description' => $description,
];
}
return [];
}

View File

@ -2,6 +2,8 @@
include_once __DIR__.'/../../core.php';
include_once DOCROOT.'/modules/fatture/modutil.php';
/*
Righe fattura
*/
@ -90,74 +92,12 @@ if (!empty($rs)) {
}
}
$ref_modulo = null;
$ref_id = null;
// Aggiunta dei riferimenti ai documenti
// Ordine
if (!empty($r['idordine'])) {
$data = $dbo->fetchArray("SELECT IF(numero_esterno != '', numero_esterno, numero) AS numero, data FROM or_ordini WHERE id=".prepare($r['idordine']));
$ref_modulo = ($dir == 'entrata') ? 'Ordini cliente' : 'Ordini fornitore';
$ref_id = $r['idordine'];
$documento = tr('Ordine');
}
// DDT
elseif (!empty($r['idddt'])) {
$data = $dbo->fetchArray("SELECT IF(numero_esterno != '', numero_esterno, numero) AS numero, data FROM dt_ddt WHERE id=".prepare($r['idddt']));
$ref_modulo = ($dir == 'entrata') ? 'Ddt di vendita' : 'Ddt di acquisto';
$ref_id = $r['idddt'];
$documento = tr('Ddt');
}
// Preventivo
elseif (!empty($r['idpreventivo'])) {
$data = $dbo->fetchArray('SELECT numero, data_bozza AS data FROM co_preventivi WHERE id='.prepare($r['idpreventivo']));
$ref_modulo = 'Preventivi';
$ref_id = $r['idpreventivo'];
$documento = tr('Preventivo');
}
// Contratto
elseif (!empty($r['idcontratto'])) {
$data = $dbo->fetchArray('SELECT numero, data_bozza AS data FROM co_contratti WHERE id='.prepare($r['idcontratto']));
$ref_modulo = 'Contratti';
$ref_id = $r['idcontratto'];
$documento = tr('Contratto');
}
// Intervento
elseif (!empty($r['idintervento'])) {
$data = $dbo->fetchArray('SELECT codice AS numero, IFNULL( (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE in_interventi_tecnici.idintervento=in_interventi.id), data_richiesta) AS data FROM in_interventi WHERE id='.prepare($r['idintervento']));
$ref_modulo = 'Interventi';
$ref_id = $r['idintervento'];
$documento = tr('Intervento');
}
if (!empty($ref_modulo) && !empty($ref_id)) {
$documento = Stringy\Stringy::create($documento)->toLowerCase();
if (!empty($data)) {
$descrizione = tr('Rif. _DOC_ num. _NUM_ del _DATE_', [
'_DOC_' => $documento,
'_NUM_' => $data[0]['numero'],
'_DATE_' => Translator::dateToLocale($data[0]['data']),
]);
} else {
$descrizione = tr('_DOC_ di riferimento _ID_ eliminato', [
'_DOC_' => $documento->upperCaseFirst(),
'_ID_' => $ref_id,
]);
}
$ref = doc_references($r, $dir, ['iddocumento']);
if (!empty($ref)) {
echo '
<br>'.Modules::link($ref_modulo, $ref_id, $descrizione, $descrizione);
<br>'.Modules::link($ref['module'], $ref['id'], $ref['description'], $ref['description']);
}
echo '

View File

@ -2,6 +2,8 @@
include_once __DIR__.'/../../core.php';
include_once DOCROOT.'/modules/fatture/modutil.php';
// Mostro le righe dell'ordine
echo '
<table class="table table-striped table-hover table-condensed table-bordered">
@ -24,12 +26,6 @@ $rs = $dbo->fetchArray($q);
if (!empty($rs)) {
foreach ($rs as $r) {
$extra = '';
$ref_modulo = null;
$ref_id = null;
$delete = !empty($r['idarticolo']) ? 'unlink_articolo' : 'unlink_riga';
$extra = '';
@ -49,8 +45,7 @@ if (!empty($rs)) {
echo '
<tr data-id="'.$r['id'].'" '.$extra.'>
<td>
'.Modules::link($ref_modulo, $ref_id, $r['descrizione']);
<td align="left">';
if (!empty($r['idarticolo'])) {
echo '
@ -63,54 +58,22 @@ if (!empty($rs)) {
'_NUM_' => $mancanti,
]).'</small></b>';
}
if (!empty($serials)) {
echo '
<br>'.tr('SN').': '.implode(', ', $serials);
}
} else {
if ($r['lotto'] != '') {
echo '<br>Lotto: '.$r['lotto'];
}
if ($r['serial'] != '') {
echo '<br>SN: '.$r['serial'];
}
if ($r['altro'] != '') {
echo '<br>'.$r['altro'];
}
}
} else {
echo nl2br($r['descrizione']);
}
// Aggiunta dei riferimenti ai documenti
// Preventivo
if (!empty($r['idpreventivo'])) {
$data = $dbo->fetchArray('SELECT numero, data_bozza AS data FROM co_preventivi WHERE id='.prepare($r['idpreventivo']));
$ref_modulo = 'Preventivi';
$ref_id = $r['idpreventivo'];
$documento = tr('Preventivo');
}
if (!empty($ref_modulo) && !empty($ref_id)) {
$documento = Stringy\Stringy::create($documento)->toLowerCase();
if (!empty($data)) {
$descrizione = tr('Rif. _DOC_ num. _NUM_ del _DATE_', [
'_DOC_' => $documento,
'_NUM_' => $data[0]['numero'],
'_DATE_' => Translator::dateToLocale($data[0]['data']),
]);
} else {
$descrizione = tr('_DOC_ di riferimento _ID_ eliminato', [
'_DOC_' => $documento->upperCaseFirst(),
'_ID_' => $ref_id,
]);
}
// Aggiunta dei riferimenti ai documenti
$ref = doc_references($r, $dir, ['idordine']);
if (!empty($ref)) {
echo '
<br>'.Modules::link($ref_modulo, $ref_id, $descrizione, $descrizione);
<br>'.Modules::link($ref['module'], $ref['id'], $ref['description'], $ref['description']);
}
echo '
@ -183,7 +146,7 @@ if (!empty($rs)) {
echo '
<td class="text-center">';
if ( $records[0]['flag_completato'] == 0 && empty($r['sconto_globale']) ) {
if ($records[0]['flag_completato'] == 0 && empty($r['sconto_globale'])) {
echo "
<form action='".$rootdir.'/editor.php?id_module='.Modules::get($name)['id'].'&id_record='.$id_record."' method='post' id='delete-form-".$r['id']."' role='form'>
<input type='hidden' name='backto' value='record-edit'>
@ -237,8 +200,6 @@ $iva = sum(array_column($rs, 'iva'));
$imponibile_scontato = sum($imponibile, -$sconto);
$totale_iva = sum($iva, $records[0]['iva_rivalsainps']);
$totale = sum([

View File

@ -29,6 +29,7 @@ if (!empty($rs)) {
echo '
<tr data-id="'.$r['id'].'">
<td>';
if (!empty($r['idarticolo'])) {
echo Modules::link('Articoli', $r['idarticolo'], $r['codice'].' - '.$r['descrizione']);
} else {

View File

@ -2,6 +2,8 @@
include_once __DIR__.'/../../core.php';
include_once DOCROOT.'/modules/fatture/modutil.php';
$report_name = 'ddt_'.$numero.'.pdf';
$autofill = [
@ -77,17 +79,12 @@ foreach ($rs_gen as $r) {
}
}
// Aggiunta riferimento a ordine
if (!empty($r['idordine'])) {
$rso = $dbo->fetchArray('SELECT numero, numero_esterno, data FROM or_ordini WHERE id='.prepare($r['idordine']));
$numero = !empty($rso[0]['numero_esterno']) ? $rso[0]['numero_esterno'] : $rso[0]['numero'];
// Aggiunta dei riferimenti ai documenti
$ref = doc_references($r, $records[0]['dir'], ['idddt']);
if (!empty($ref)) {
echo '
<br/><small>'.tr('Rif. ordine num. _NUM_ del _DATE_', [
'_NUM_' => $numero,
'_DATE_' => Translator::dateToLocale($rso[0]['data']),
]).'</small>';
<br><small>'.$ref['description'].'</small>';
if ($count <= 1) {
$count += 0.4;
}

View File

@ -2,6 +2,8 @@
include_once __DIR__.'/../../core.php';
include_once DOCROOT.'/modules/fatture/modutil.php';
$report_name = 'fattura_'.$numero.'.pdf';
$autofill = [
@ -31,7 +33,7 @@ echo "
<th class='text-center' style='width:10%'>".tr('IVA', [], ['upper' => true]).' (%)</th>
</tr>
</thead>
<tfoot>
<tr>
<td style="border-top:none; border-bottom:1px solid #aaa;"></td>
@ -83,76 +85,11 @@ foreach ($righe as $r) {
}
// Aggiunta dei riferimenti ai documenti
$ref_modulo = null;
$ref_id = null;
$ref = doc_references($r, $records[0]['dir'], ['iddocumento']);
// Ordine
if (!empty($r['idordine'])) {
$data = $dbo->fetchArray("SELECT IF(numero_esterno != '', numero_esterno, numero) AS numero, data FROM or_ordini WHERE id=".prepare($r['idordine']));
$ref_modulo = ($records[0]['dir'] == 'entrata') ? 'Ordini cliente' : 'Ordini fornitore';
$ref_id = $r['idordine'];
$documento = tr('Ordine');
}
// DDT
elseif (!empty($r['idddt'])) {
$data = $dbo->fetchArray("SELECT IF(numero_esterno != '', numero_esterno, numero) AS numero, data FROM dt_ddt WHERE id=".prepare($r['idddt']));
$ref_modulo = ($records[0]['dir'] == 'entrata') ? 'Ddt di vendita' : 'Ddt di acquisto';
$ref_id = $r['idddt'];
$documento = tr('Ddt');
}
// Preventivo
elseif (!empty($r['idpreventivo'])) {
$data = $dbo->fetchArray('SELECT numero, data_bozza AS data FROM co_preventivi WHERE id='.prepare($r['idpreventivo']));
$ref_modulo = 'Preventivi';
$ref_id = $r['idpreventivo'];
$documento = tr('Preventivo');
}
// Contratto
elseif (!empty($r['idcontratto'])) {
$data = $dbo->fetchArray('SELECT numero, data_bozza AS data FROM co_contratti WHERE id='.prepare($r['idcontratto']));
$ref_modulo = 'Contratti';
$ref_id = $r['idcontratto'];
$documento = tr('Contratto');
}
// Intervento
elseif (!empty($r['idintervento'])) {
$data = $dbo->fetchArray('SELECT codice AS numero, data_richiesta AS data FROM in_interventi WHERE id='.prepare($r['idintervento']));
$ref_modulo = 'Interventi';
$ref_id = $r['idintervento'];
$documento = tr('Intervento');
}
if (!empty($ref_modulo) && !empty($ref_id)) {
$documento = Stringy\Stringy::create($documento)->toLowerCase();
if (!empty($data)) {
$descrizione = tr('Rif. _DOC_ num. _NUM_ del _DATE_', [
'_DOC_' => $documento,
'_NUM_' => $data[0]['numero'],
'_DATE_' => Translator::dateToLocale($data[0]['data']),
]);
} else {
$descrizione = tr('_DOC_ di riferimento _ID_ eliminato', [
'_DOC_' => $documento->upperCaseFirst(),
'_ID_' => $ref_id,
]);
}
}
// Stampa dei riferimenti
if (!empty($descrizione)) {
if (!empty($ref)) {
echo '
<br><small>'.$descrizione.'</small>';
<br><small>'.$ref['description'].'</small>';
if ($count <= 1) {
$count += 0.4;
}
@ -243,14 +180,13 @@ echo '
</tbody>
</table>';
// Aggiungo diciture particolari per l'anagrafica cliente
$dicitura = $dbo->fetchArray('SELECT diciturafissafattura FROM an_anagrafiche WHERE idanagrafica = '.prepare($id_cliente));
if (!empty($dicitura[0]['diciturafissafattura'])) {
$testo = $dicitura[0]['diciturafissafattura'];
$testo = $dicitura[0]['diciturafissafattura'];
echo "
echo "
<p class='text-center'>
<b>".nl2br($testo).'</b>
</p>';
@ -273,10 +209,10 @@ echo '
<table class="table">';
echo '
<tr>';
if(abs($records[0]['bollo']) > 0){
if (abs($records[0]['bollo']) > 0) {
echo '
<td width="85%">';
}else{
} else {
echo '
<td width="100%">';
}
@ -287,7 +223,7 @@ if(abs($records[0]['bollo']) > 0){
}
echo '
</td>';
if(abs($records[0]['bollo']) > 0){
if (abs($records[0]['bollo']) > 0) {
echo '
<td width="15%" align="right">';
}
@ -302,7 +238,7 @@ if (abs($records[0]['bollo']) > 0) {
</tr>
</table>';
}
if(abs($records[0]['bollo']) > 0){
if (abs($records[0]['bollo']) > 0) {
echo '
</td>';
}