Miglioramento della gestione stampe

Introdotto il framework mPDF per rendere più semplice la gestione delle stampe, con relativo aggiornamento alla nuova versione delle stampe per interventi e fatture.
Bugfix e miglioramenti vari distribuiti.
This commit is contained in:
Thomas Zilio 2017-09-07 16:51:14 +02:00
parent c34d5ec391
commit c83e841e30
42 changed files with 3479 additions and 801 deletions

View File

@ -29,6 +29,7 @@
"ircmaxell/password-compat": "^1.0", "ircmaxell/password-compat": "^1.0",
"maximebf/debugbar": "^1.13", "maximebf/debugbar": "^1.13",
"monolog/monolog": "^1.22", "monolog/monolog": "^1.22",
"mpdf/mpdf": "^6.1",
"paragonie/random_compat": "^2.0", "paragonie/random_compat": "^2.0",
"phpmailer/phpmailer": "^5.2", "phpmailer/phpmailer": "^5.2",
"spipu/html2pdf": "^4.6", "spipu/html2pdf": "^4.6",

View File

@ -79,7 +79,9 @@ foreach ($plugins as $plugin) {
echo ' echo '
</div> </div>
</div> </div>
</div>'; </div>';
redirectOperation();
/** /**
* Widget laterali. * Widget laterali.

View File

@ -2,17 +2,7 @@
// Impostazioni per la corretta interpretazione di UTF-8 // Impostazioni per la corretta interpretazione di UTF-8
header('Content-Type: text/html; charset=UTF-8'); header('Content-Type: text/html; charset=UTF-8');
ob_start();
$handler = null;
if (extension_loaded('mbstring')) {
mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');
mb_http_input('UTF-8');
mb_language('uni');
mb_regex_encoding('UTF-8');
$handler = 'mb_output_handler';
}
ob_start($handler);
// Impostazioni di configurazione PHP // Impostazioni di configurazione PHP
date_default_timezone_set('Europe/Rome'); date_default_timezone_set('Europe/Rome');

View File

@ -118,19 +118,7 @@ if (file_exists($docroot.'/modules/'.$module_dir.'/add.php') && $module['permess
</div>'; </div>';
} }
$backto = filter('backto'); redirectOperation();
// Scelta del redirect dopo un submit
if (!empty($backto)) {
$hash = filter('hash');
$hash = !starts_with($hash, '#') ? '#'.$hash : $hash;
if ($backto == 'record-edit') {
redirect(ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.$hash);
exit();
} elseif ($backto == 'record-list') {
redirect(ROOTDIR.'/controller.php?id_module='.$id_module.$hash);
exit();
}
}
echo ' echo '
<hr> <hr>

View File

@ -150,7 +150,7 @@ if (!empty($module_options) && $module_options != 'menu' && $module_options != '
} }
echo ' echo '
<li role="presentation"><a class="bulk-action" data-op="'.$key.'" '.implode(' ', $extra).'>'.$text.'</a></li>'; <li role="presentation"><a class="bulk-action" data-op="'.$key.'" data-backto="record-list" '.implode(' ', $extra).'>'.$text.'</a></li>';
} }
echo ' echo '

View File

@ -1219,14 +1219,17 @@ function message(element) {
delete data.method; delete data.method;
} }
redirect(href, data, method); blank = data.blank != undefined && data.blank;
delete data.blank;
redirect(href, data, method, blank);
}, },
function (dismiss) {} function (dismiss) {}
); );
} }
function redirect(href, data, method = "get") { function redirect(href, data, method = "get", blank = false) {
var text = (method == "post") ? '<form action="' + href + window.location.hash + '" method="post">' : []; var text = (method == "post") ? '<form action="' + href + window.location.hash + '" method="post"' + (blank ? ' target="_blank"' : '') + '>' : [];
for (var name in data) { for (var name in data) {
if (method == "post") { if (method == "post") {
@ -1246,6 +1249,6 @@ function redirect(href, data, method = "get") {
form.submit(); form.submit();
} else { } else {
location.href = href + (href.indexOf('?') !== -1 ? '&' : '?') + text.join('&') + window.location.hash; window.open(href + (href.indexOf('?') !== -1 ? '&' : '?') + text.join('&') + window.location.hash, blank ? "_blank" : "_self")
} }
} }

View File

@ -77,14 +77,15 @@ function deltree($path)
* Source path * Source path
* @param string $dest * @param string $dest
* Destination path * Destination path
* @param string $exclude * @param array|string $ignores
* Path to exclude * Paths to ingore
* *
* @return bool Returns TRUE on success, FALSE on failure * @return bool Returns TRUE on success, FALSE on failure
*/ */
function copyr($source, $dest, $ignores = []) function copyr($source, $dest, $ignores = [])
{ {
$path = realpath($source); $path = realpath($source);
$ignores = (array) $ignores;
$exclude = !empty(array_intersect([slashes($path), slashes($path.'/'), $entry], $ignores)); $exclude = !empty(array_intersect([slashes($path), slashes($path.'/'), $entry], $ignores));
// Simple copy for a file // Simple copy for a file
@ -143,6 +144,8 @@ function create_zip($source, $destination)
return false; return false;
} }
$destination = slashes($destination);
$zip = new ZipArchive(); $zip = new ZipArchive();
$result = $zip->open($destination, ZIPARCHIVE::CREATE); $result = $zip->open($destination, ZIPARCHIVE::CREATE);
if ($result === true && is_writable(dirname($destination))) { if ($result === true && is_writable(dirname($destination))) {
@ -157,11 +160,11 @@ function create_zip($source, $destination)
if (is_dir($file) === true) { if (is_dir($file) === true) {
$zip->addEmptyDir($filename); $zip->addEmptyDir($filename);
} elseif (is_file($file) === true) { } elseif (is_file($file) === true && $destination != $file) {
$zip->addFromString($filename, file_get_contents($file)); $zip->addFromString($filename, file_get_contents($file));
} }
} }
} elseif (is_file($source) === true) { } elseif (is_file($source) === true && $destination != $source) {
$zip->addFromString(basename($source), file_get_contents($source)); $zip->addFromString(basename($source), file_get_contents($source));
} }
@ -866,3 +869,19 @@ function sum($first, $second = null, $decimals = null)
return $result; return $result;
} }
function redirectOperation(){
$backto = filter('backto');
// Scelta del redirect dopo un submit
if (!empty($backto)) {
$hash = filter('hash');
$hash = !starts_with($hash, '#') ? '#'.$hash : $hash;
if ($backto == 'record-edit') {
redirect(ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.$hash);
exit();
} elseif ($backto == 'record-list') {
redirect(ROOTDIR.'/controller.php?id_module='.$id_module.$hash);
exit();
}
}
}

View File

@ -226,12 +226,12 @@ if (!function_exists('force_download')) {
header('Content-Type: application/force-download'); header('Content-Type: application/force-download');
header('Content-Transfer-Encoding: binary'); header('Content-Transfer-Encoding: binary');
if ($content) { if (empty($content) && is_file($filename)) {
if (is_file($content)) { $content = $filename;
$content = file_get_contents($content); }
}
header('Content-Length: '.strlen($content)); if (is_file($content)) {
$content = file_get_contents($content);
} }
ob_clean(); ob_clean();

View File

@ -155,7 +155,7 @@ $rs = $dbo->fetchArray('SELECT COUNT(id) AS tot FROM mg_prodotti WHERE id_artico
$tot_prodotti = $rs[0]['tot']; $tot_prodotti = $rs[0]['tot'];
// Visualizzazione di tutti i prodotti // Visualizzazione di tutti i prodotti
$query = 'SELECT * FROM mg_prodotti WHERE id_articolo='.prepare($id_record).(!empty($search_serial) ? ' AND serial LIKE '.prepare('%'.$search_serial.'%') : '').' ORDER BY created_at DESC, lotto DESC, serial DESC, altro DESC'; $query = 'SELECT serial, created_at FROM mg_prodotti WHERE serial IS NOT NULL AND id_articolo='.prepare($id_record).(!empty($search_serial) ? ' AND serial LIKE '.prepare('%'.$search_serial.'%') : '').' GROUP BY serial ORDER BY created_at DESC, serial DESC, lotto DESC, altro DESC';
$rs2 = $dbo->fetchArray($query); $rs2 = $dbo->fetchArray($query);
echo ' echo '

View File

@ -6,6 +6,12 @@ switch (post('op')) {
case 'export-bulk': case 'export-bulk':
$dir = DOCROOT.'/files/export_fatture/'; $dir = DOCROOT.'/files/export_fatture/';
// Rimozione dei contenuti precedenti
$files = glob($dir.'/*.zip');
foreach ($files as $file) {
unlink($file);
}
// Selezione delle fatture da stampare // Selezione delle fatture da stampare
$records = $dbo->fetchArray('SELECT co_documenti.id, numero_esterno, data, ragione_sociale, co_tipidocumento.descrizione FROM co_documenti INNER JOIN an_anagrafiche ON co_documenti.idanagrafica=an_anagrafiche.idanagrafica INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE co_documenti.id IN('.implode(',', $id_records).')'); $records = $dbo->fetchArray('SELECT co_documenti.id, numero_esterno, data, ragione_sociale, co_tipidocumento.descrizione FROM co_documenti INNER JOIN an_anagrafiche ON co_documenti.idanagrafica=an_anagrafiche.idanagrafica INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE co_documenti.id IN('.implode(',', $id_records).')');
@ -15,7 +21,7 @@ switch (post('op')) {
// Gestione della stampa // Gestione della stampa
$rapportino_nome = sanitizeFilename($numero.' '.$r['data'].' '.$r['ragione_sociale'].'.pdf'); $rapportino_nome = sanitizeFilename($numero.' '.$r['data'].' '.$r['ragione_sociale'].'.pdf');
$filename = slashes($dir.$rapportino_nome); $filename = slashes($dir.'tmp/'.$rapportino_nome);
$_GET['iddocumento'] = $r['id']; // Fix temporaneo per la stampa $_GET['iddocumento'] = $r['id']; // Fix temporaneo per la stampa
$iddocumento = $r['id']; // Fix temporaneo per la stampa $iddocumento = $r['id']; // Fix temporaneo per la stampa
@ -25,17 +31,17 @@ switch (post('op')) {
} }
$dir = slashes($dir); $dir = slashes($dir);
$file = slashes($dir.'fatture.zip'); $file = slashes($dir.'fatture_'.time().'.zip');
// Creazione zip // Creazione zip
if (extension_loaded('zip')) { if (extension_loaded('zip')) {
create_zip($dir, $file); create_zip($dir.'tmp/', $file);
// Invio al browser dello zip // Invio al browser dello zip
force_download($file); force_download($file);
// Rimozione dei contenuti // Rimozione dei contenuti
deltree($dir); deltree($dir.'tmp/');
} }
break; break;
@ -48,6 +54,7 @@ return [
'msg' => tr('Vuoi davvero esportare tutte le stampe in un archivio?'), 'msg' => tr('Vuoi davvero esportare tutte le stampe in un archivio?'),
'button' => tr('Procedi'), 'button' => tr('Procedi'),
'class' => 'btn btn-lg btn-warning', 'class' => 'btn btn-lg btn-warning',
'blank' => true,
], ],
], ],
]; ];

View File

@ -49,6 +49,23 @@ switch (post('op')) {
$dbo->query('INSERT INTO co_preventivi(idanagrafica, nome, numero, idagente, idstato, idtipointervento, data_bozza, data_conclusione, idiva, idpagamento) VALUES ('.prepare($idanagrafica).', '.prepare($nome).', '.prepare($numero).', '.prepare($idagente).", (SELECT `id` FROM `co_statipreventivi` WHERE `descrizione`='Bozza'), ".prepare($idtipointervento).', NOW(), DATE_ADD(NOW(), INTERVAL +1 MONTH), '.prepare($idiva).', '.prepare($idpagamento).')'); $dbo->query('INSERT INTO co_preventivi(idanagrafica, nome, numero, idagente, idstato, idtipointervento, data_bozza, data_conclusione, idiva, idpagamento) VALUES ('.prepare($idanagrafica).', '.prepare($nome).', '.prepare($numero).', '.prepare($idagente).", (SELECT `id` FROM `co_statipreventivi` WHERE `descrizione`='Bozza'), ".prepare($idtipointervento).', NOW(), DATE_ADD(NOW(), INTERVAL +1 MONTH), '.prepare($idiva).', '.prepare($idpagamento).')');
$id_record = $dbo->lastInsertedID(); $id_record = $dbo->lastInsertedID();
$listino = $dbo->fetchArray('SELECT prc_guadagno FROM mg_listini WHERE id = (SELECT idlistino FROM an_anagrafiche WHERE idanagrafica = '.prepare($idanagrafica).')');
if (!empty($listino)) {
$dbo->update('co_preventivi', [
'tipo_sconto_globale' => 'PRC',
'sconto_globale' => abs($listino[0]['prc_guadagno']),
], ['id' => $id_record]);
aggiorna_sconto([
'parent' => 'co_preventivi',
'row' => 'co_righe_preventivi',
], [
'parent' => 'id',
'row' => 'idpreventivo',
], $id_record);
}
/* /*
// inserisco righe standard preventivo // inserisco righe standard preventivo
// ore lavoro // ore lavoro
@ -216,8 +233,6 @@ switch (post('op')) {
$subtot = $prezzo * $qta; $subtot = $prezzo * $qta;
$prc_guadagno = post('prc_guadagno');
$um = post('um'); $um = post('um');
// Lettura iva dell'articolo // Lettura iva dell'articolo
@ -225,7 +240,7 @@ switch (post('op')) {
$iva = ($subtot - $sconto) / 100 * $rs2[0]['percentuale']; $iva = ($subtot - $sconto) / 100 * $rs2[0]['percentuale'];
$iva_indetraibile = $iva / 100 * $rs2[0]['indetraibile']; $iva_indetraibile = $iva / 100 * $rs2[0]['indetraibile'];
$dbo->query('INSERT INTO co_righe_preventivi(idpreventivo, idarticolo, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, um, qta, sconto, sconto_unitario, tipo_sconto, prc_guadagno, `order`) VALUES ('.prepare($id_record).', '.prepare($idarticolo).', '.prepare($idiva).', '.prepare($rs2[0]['descrizione']).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($um).', '.prepare($qta).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare($prc_guadagno).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_preventivi AS t WHERE idpreventivo='.prepare($id_record).'))'); $dbo->query('INSERT INTO co_righe_preventivi(idpreventivo, idarticolo, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, um, qta, sconto, sconto_unitario, tipo_sconto, `order`) VALUES ('.prepare($id_record).', '.prepare($idarticolo).', '.prepare($idiva).', '.prepare($rs2[0]['descrizione']).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($um).', '.prepare($qta).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_preventivi AS t WHERE idpreventivo='.prepare($id_record).'))');
$_SESSION['infos'][] = tr('Articolo aggiunto!'); $_SESSION['infos'][] = tr('Articolo aggiunto!');
@ -245,8 +260,6 @@ switch (post('op')) {
$sconto = ($tipo_sconto == 'PRC') ? ($prezzo * $sconto_unitario) / 100 : $sconto_unitario; $sconto = ($tipo_sconto == 'PRC') ? ($prezzo * $sconto_unitario) / 100 : $sconto_unitario;
$sconto = $sconto * $qta; $sconto = $sconto * $qta;
$prc_guadagno = post('prc_guadagno');
$idiva = post('idiva'); $idiva = post('idiva');
$um = post('um'); $um = post('um');
@ -256,7 +269,7 @@ switch (post('op')) {
$iva_indetraibile = $iva / 100 * $rs2[0]['indetraibile']; $iva_indetraibile = $iva / 100 * $rs2[0]['indetraibile'];
// Modifica riga generica sul documento // Modifica riga generica sul documento
$query = 'UPDATE co_righe_preventivi SET idiva='.prepare($idiva).', iva='.prepare($iva).', iva_indetraibile='.prepare($iva_indetraibile).', descrizione='.prepare($descrizione).', subtotale='.prepare($subtot).', sconto='.prepare($sconto).', sconto_unitario='.prepare($sconto_unitario).', tipo_sconto='.prepare($tipo_sconto).', prc_guadagno='.prepare($prc_guadagno).', um='.prepare($um).', qta='.prepare($qta).' WHERE id='.prepare($idriga); $query = 'UPDATE co_righe_preventivi SET idiva='.prepare($idiva).', iva='.prepare($iva).', iva_indetraibile='.prepare($iva_indetraibile).', descrizione='.prepare($descrizione).', subtotale='.prepare($subtot).', sconto='.prepare($sconto).', sconto_unitario='.prepare($sconto_unitario).', tipo_sconto='.prepare($tipo_sconto).', um='.prepare($um).', qta='.prepare($qta).' WHERE id='.prepare($idriga);
$dbo->query($query); $dbo->query($query);
$_SESSION['infos'][] = 'Riga modificata!'; $_SESSION['infos'][] = 'Riga modificata!';

View File

@ -38,11 +38,6 @@ if (empty($idriga)) {
$subtot = $rsr[0]['subtotale'] / $rsr[0]['qta']; $subtot = $rsr[0]['subtotale'] / $rsr[0]['qta'];
$sconto = $rsr[0]['sconto_unitario']; $sconto = $rsr[0]['sconto_unitario'];
$tipo_sconto = $rsr[0]['tipo_sconto']; $tipo_sconto = $rsr[0]['tipo_sconto'];
$prc_guadagno = $rsr[0]['prc_guadagno'];
if ($prc_guadagno > 0) {
$prc_guadagno = '+'.$prc_guadagno;
}
} }
/* /*
@ -74,20 +69,20 @@ echo '
// Quantità // Quantità
echo ' echo '
<div class="row"> <div class="row">
<div class="col-md-3"> <div class="col-md-4">
{[ "type": "number", "label": "'.tr('Q.tà').'", "name": "qta", "value": "'.$qta.'", "required": 1, "decimals": "qta" ]} {[ "type": "number", "label": "'.tr('Q.tà').'", "name": "qta", "value": "'.$qta.'", "required": 1, "decimals": "qta" ]}
</div>'; </div>';
// Unità di misura // Unità di misura
echo ' echo '
<div class="col-md-3"> <div class="col-md-4">
{[ "type": "select", "label": "'.tr('Unità di misura').'", "icon-after": "add|'.Modules::getModule('Unità di misura')['id'].'", "name": "um", "value": "'.$um.'", "ajax-source": "misure" ]} {[ "type": "select", "label": "'.tr('Unità di misura').'", "icon-after": "add|'.Modules::getModule('Unità di misura')['id'].'", "name": "um", "value": "'.$um.'", "ajax-source": "misure" ]}
</div>'; </div>';
// Sconto // Iva
echo ' echo '
<div class="col-md-6"> <div class="col-md-4">
{[ "type": "number", "label": "'.tr('Sconto/rincaro articoli per questo cliente').'", "icon-after": "%", "name": "prc_guadagno", "value": "'.$prc_guadagno.'" ]} {[ "type": "select", "label": "'.tr('Iva').'", "name": "idiva", "required": 1, "value": "'.$idiva.'", "values": "query=SELECT * FROM co_iva ORDER BY descrizione ASC" ]}
</div> </div>
</div>'; </div>';
@ -118,22 +113,16 @@ if (get_var('Percentuale rivalsa INPS') != '' || get_var("Percentuale ritenuta d
*/ */
// Iva // Costo unitario
echo ' echo '
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-md-6">
{[ "type": "select", "label": "'.tr('Iva').'", "name": "idiva", "required": 1, "value": "'.$idiva.'", "values": "query=SELECT * FROM co_iva ORDER BY descrizione ASC" ]}
</div>';
// Costo unitario
echo '
<div class="col-md-3">
{[ "type": "number", "label": "'.tr('Costo unitario').'", "name": "prezzo", "required": 1, "value": "'.$subtot.'", "icon-after": "&euro;" ]} {[ "type": "number", "label": "'.tr('Costo unitario').'", "name": "prezzo", "required": 1, "value": "'.$subtot.'", "icon-after": "&euro;" ]}
</div>'; </div>';
// Sconto unitario // Sconto unitario
echo ' echo '
<div class="col-md-3"> <div class="col-md-6">
{[ "type": "number", "label": "'.tr('Sconto unitario').'", "name": "sconto", "value": "'.$sconto.'", "icon-after": "choice|untprc|'.$tipo_sconto.'" ]} {[ "type": "number", "label": "'.tr('Sconto unitario').'", "name": "sconto", "value": "'.$sconto.'", "icon-after": "choice|untprc|'.$tipo_sconto.'" ]}
</div> </div>
</div>'; </div>';

View File

@ -2,8 +2,11 @@
include_once __DIR__.'/core.php'; include_once __DIR__.'/core.php';
ob_end_clean();
$orientation = 'P'; $orientation = 'P';
$body_table_params = "style='width:210mm;'"; $body_table_params = "style='width:210mm;'";
$table = 'margin-left:1.7mm';
$font_size = '10pt'; $font_size = '10pt';
// Assegnazione di tutte le variabile GET // Assegnazione di tutte le variabile GET
@ -16,13 +19,21 @@ $visualizza_costi = get_var('Visualizza i costi sulle stampe degli interventi');
// Nuovo sistema di generazione stampe // Nuovo sistema di generazione stampe
if (file_exists($docroot.'/templates/'.$ptype.'/init.php')) { if (file_exists($docroot.'/templates/'.$ptype.'/init.php')) {
// Impostazione della stampa // Impostazioni della stampa
if (file_exists($docroot.'/templates/'.$ptype.'/custom/layout.html')) { if (file_exists($docroot.'/templates/base/custom/settings.php')) {
$report = file_get_contents($docroot.'/templates/'.$ptype.'/custom/layout.html'); $default = include $docroot.'/templates/base/custom/settings.php';
} else { } else {
$report = file_get_contents($docroot.'/templates/'.$ptype.'/layout.html'); $default = include $docroot.'/templates/base/settings.php';
} }
if (file_exists($docroot.'/templates/'.$ptype.'/custom/settings.php')) {
$custom = include $docroot.'/templates/'.$ptype.'/custom/settings.php';
} elseif (file_exists($docroot.'/templates/'.$ptype.'/settings.php')) {
$custom = include $docroot.'/templates/'.$ptype.'/settings.php';
}
$settings = array_merge($default, (array) $custom);
// Individuazione delle variabili fondamentali per la sostituzione dei contenuti // Individuazione delle variabili fondamentali per la sostituzione dei contenuti
if (file_exists($docroot.'/templates/'.$ptype.'/custom/init.php')) { if (file_exists($docroot.'/templates/'.$ptype.'/custom/init.php')) {
include $docroot.'/templates/'.$ptype.'/custom/init.php'; include $docroot.'/templates/'.$ptype.'/custom/init.php';
@ -35,14 +46,35 @@ if (file_exists($docroot.'/templates/'.$ptype.'/init.php')) {
} }
Permissions::check(); Permissions::check();
// Operazioni di sostituzione // Generazione dei contenuti della stampa
include $docroot.'/templates/pdfgen_variables.php'; ob_start();
if (file_exists($docroot.'/templates/'.$ptype.'/custom/body.php')) {
// Azioni sui contenuti della stampa include $docroot.'/templates/'.$ptype.'/custom/body.php';
if (file_exists($docroot.'/templates/'.$ptype.'/custom/actions.php')) {
include $docroot.'/templates/'.$ptype.'/custom/actions.php';
} else { } else {
include $docroot.'/templates/'.$ptype.'/actions.php'; include $docroot.'/templates/'.$ptype.'/body.php';
}
$report = ob_get_clean();
// Generazione dei contenuti dell'header
ob_start();
if (file_exists($docroot.'/templates/'.$ptype.'/custom/header.php')) {
include $docroot.'/templates/'.$ptype.'/custom/header.php';
} elseif (file_exists($docroot.'/templates/'.$ptype.'/header.php')) {
include $docroot.'/templates/'.$ptype.'/header.php';
}
$head = ob_get_clean();
// Generazione dei contenuti del footer
ob_start();
if (file_exists($docroot.'/templates/'.$ptype.'/custom/footer.php')) {
include $docroot.'/templates/'.$ptype.'/custom/footer.php';
} elseif (file_exists($docroot.'/templates/'.$ptype.'/footer.php')) {
include $docroot.'/templates/'.$ptype.'/footer.php';
}
$foot = ob_get_clean();
if (empty($foot)) {
$foot = '$pagination$';
} }
} else { } else {
// Decido se usare la stampa personalizzata (se esiste) oppure quella standard // Decido se usare la stampa personalizzata (se esiste) oppure quella standard
@ -52,16 +84,17 @@ if (file_exists($docroot.'/templates/'.$ptype.'/init.php')) {
include $docroot.'/templates/'.$ptype.'/pdfgen.'.$ptype.'.php'; include $docroot.'/templates/'.$ptype.'/pdfgen.'.$ptype.'.php';
} }
// Operazioni di sostituzione // Sostituzione di variabili generiche
include $docroot.'/templates/pdfgen_variables.php'; $report = str_replace('$body$', $body, $report);
$report = str_replace('$footer$', $footer, $report);
$report = str_replace('$font_size$', $font_size, $report);
$report = str_replace('$body_table_params$', $body_table_params, $report);
$report = str_replace('$table$', $table, $report);
} }
// Sostituzione di variabili generiche // Operazioni di sostituzione
$report = str_replace('$body$', $body, $report); include $docroot.'/templates/pdfgen_variables.php';
$report = str_replace('$footer$', $footer, $report);
$report = str_replace('$font_size$', $font_size, $report);
$report = str_replace('$body_table_params$', $body_table_params, $report);
$report = str_replace('$docroot$', $docroot, $report); $report = str_replace('$docroot$', $docroot, $report);
$report = str_replace('$rootdir$', $rootdir, $report); $report = str_replace('$rootdir$', $rootdir, $report);
@ -84,18 +117,38 @@ $mode = !empty($filename) ? 'F' : 'I';
$filename = !empty($filename) ? $filename : sanitizeFilename($report_name); $filename = !empty($filename) ? $filename : sanitizeFilename($report_name);
$title = basename($filename); $title = basename($filename);
// HTML if (file_exists($docroot.'/templates/'.$ptype.'/init.php')) {
$html = (get_var('Formato report') == 'html'); $styles = [
'templates/base/bootstrap.css',
'templates/base/style.css',
];
try { $mpdf = new mPDF('utf-8', $settings['dimension'], $settings['font-size'], '', 12, 12, $settings['header'], $settings['footer'], 9, 9, $settings['orientation']);
ob_end_clean(); $mpdf->SetHTMLFooter($foot);
$html2pdf = new HTML2PDF($orientation, 'A4', 'it', true, 'UTF-8'); $mpdf->SetHTMLHeader($head);
$html2pdf->writeHTML($report, $html); $mpdf->SetTitle($title);
$html2pdf->pdf->setTitle($title);
$html2pdf->output($filename, $mode); foreach ($styles as $value) {
} catch (HTML2PDF_exception $e) { $mpdf->WriteHTML(file_get_contents(__DIR__.'/'.$value), 1);
echo $e; }
exit(); $mpdf->WriteHTML($report);
$mpdf->Output($filename, $mode);
} else {
// HTML
$html = (get_var('Formato report') == 'html');
try {
ob_end_clean();
$html2pdf = new HTML2PDF($orientation, 'A4', 'it', true, 'UTF-8');
$html2pdf->writeHTML($report, $html);
$html2pdf->pdf->setTitle($title);
$html2pdf->output($filename, $mode);
} catch (HTML2PDF_exception $e) {
echo $e;
exit();
}
} }

View File

@ -56,19 +56,7 @@ if (!empty($info['script'])) {
} }
} }
$backto = filter('backto'); redirectOperation();
// Scelta del redirect dopo un submit
if (!empty($backto)) {
$hash = filter('hash');
$hash = !starts_with($hash, '#') ? '#'.$hash : $hash;
if ($backto == 'record-edit') {
redirect($rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_parent.$hash);
exit();
} elseif ($backto == 'record-list') {
redirect($rootdir.'/controller.php?id_module='.$id_module.$hash);
exit();
}
}
$module = Modules::getModule($info['idmodule_to']); $module = Modules::getModule($info['idmodule_to']);

1826
templates/base/bootstrap.css vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,9 @@
<?php
return [
'orientation' => 'portrait',
'dimension' => 'A4',
'font-size' => '11pt',
'header' => '40',
'footer' => '5',
];

117
templates/base/style.css Normal file
View File

@ -0,0 +1,117 @@
body {
background-color: white;
color: black;
}
.small-bold {
font-weight: bold;
font-size: 70%;
}
.row,
.col-xs-1,
.col-sm-1,
.col-md-1,
.col-lg-1,
.col-xs-2,
.col-sm-2,
.col-md-2,
.col-lg-2,
.col-xs-3,
.col-sm-3,
.col-md-3,
.col-lg-3,
.col-xs-4,
.col-sm-4,
.col-md-4,
.col-lg-4,
.col-xs-5,
.col-sm-5,
.col-md-5,
.col-lg-5,
.col-xs-6,
.col-sm-6,
.col-md-6,
.col-lg-6,
.col-xs-7,
.col-sm-7,
.col-md-7,
.col-lg-7,
.col-xs-8,
.col-sm-8,
.col-md-8,
.col-lg-8,
.col-xs-9,
.col-sm-9,
.col-md-9,
.col-lg-9,
.col-xs-10,
.col-sm-10,
.col-md-10,
.col-lg-10,
.col-xs-11,
.col-sm-11,
.col-md-11,
.col-lg-11,
.col-xs-12,
.col-sm-12,
.col-md-12,
.col-lg-12 {
margin: 0px !important;
padding: 0px !important;
}
p {
padding: 0px;
margin: 0px;
}
.border-left {
border-left: 1px solid #aaa;
}
.border-right {
border-right: 1px solid #aaa;
}
.border-top {
border-top: 1px solid #aaa;
}
.border-bottom {
border-bottom: 1px solid #aaa;
}
.border-full {
border: 1px solid #aaa;
}
table {
width: 100%;
}
table td {
vertical-align: top;
padding: 4px;
}
#contents td {
padding: 4px;
white-space: normal;
}
#contents th {
border-bottom: 1px solid #aaa;
border-right: 1px solid #aaa;
background: #ddd;
padding: 3px;
font-size: 90%;
}
.cell-padded {
padding: 4px;
}
.bg-default{
background-color: #eee;
}

View File

@ -162,7 +162,7 @@ if (sizeof($contratti) > 0) {
$body .= "<br/>\n"; $body .= "<br/>\n";
// Conteggio articoli utilizzati // Conteggio articoli utilizzati
$query = "SELECT *, (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento=mg_articoli_interventi.idintervento) AS data_intervento, (SELECT percentuale FROM co_iva WHERE id=mg_articoli_interventi.idiva_vendita) AS prciva_vendita, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice_art, GROUP_CONCAT( CONCAT_WS(lotto, 'Lotto: ', ', '), CONCAT_WS(serial, 'SN: ', ', '), CONCAT_WS(altro, 'Altro: ', '') SEPARATOR '<br/>') AS codice, SUM(qta) AS sumqta FROM `mg_articoli_interventi` GROUP BY idarticolo, idintervento, lotto HAVING idintervento IN(".implode(',', $idinterventi).") AND NOT idarticolo='0' ORDER BY idarticolo ASC"; $query = "SELECT *, (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento=mg_articoli_interventi.idintervento) AS data_intervento, (SELECT percentuale FROM co_iva WHERE id=mg_articoli_interventi.idiva_vendita) AS prciva_vendita, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice_art, (SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT idlistino FROM an_anagrafiche WHERE idanagrafica=(SELECT idanagrafica FROM in_interventi WHERE id=mg_articoli_interventi.idintervento) ) ) AS prc_guadagno, CONCAT_WS(serial, 'SN: ', ', ') AS codice, SUM(qta) AS sumqta FROM `mg_articoli_interventi` JOIN mg_prodotti ON mg_articoli_interventi.idarticolo = mg_prodotti.id_articolo GROUP BY idarticolo, idintervento, lotto HAVING idintervento IN(".implode(',', $idinterventi).") AND NOT idarticolo='0' ORDER BY idarticolo ASC";
$rs2 = $dbo->fetchArray($query); $rs2 = $dbo->fetchArray($query);
if (sizeof($rs2) > 0) { if (sizeof($rs2) > 0) {

View File

@ -114,7 +114,7 @@ $sconto = 0.00;
/* /*
Articoli Articoli
*/ */
$q_art = "SELECT *, GROUP_CONCAT( CONCAT_WS(lotto, 'Lotto: ', ', '), CONCAT_WS(serial, 'SN: ', ', '), CONCAT_WS(altro, 'Altro: ', '') SEPARATOR '<br/>') AS codice, SUM(qta) AS sumqta FROM `dt_righe_ddt` GROUP BY idarticolo, idddt, lotto HAVING idddt='$idddt' AND NOT idarticolo='0' ORDER BY idarticolo ASC"; $q_art = "SELECT *, CONCAT_WS(serial, 'SN: ', ', ') AS codice, SUM(qta) AS sumqta FROM `dt_righe_ddt` JOIN mg_prodotti ON dt_righe_ddt.idarticolo = mg_prodotti.id_articolo GROUP BY idarticolo, idddt, lotto HAVING idddt='$idddt' AND NOT idarticolo='0' ORDER BY idarticolo ASC";
$rs_art = $dbo->fetchArray($q_art); $rs_art = $dbo->fetchArray($q_art);
$tot_art = sizeof($rs_art); $tot_art = sizeof($rs_art);
$imponibile_art = 0.0; $imponibile_art = 0.0;

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

View File

@ -0,0 +1,54 @@
<style>
<!--
.table_values td{
padding: 4px;
white-space: normal;
}
.table_values th{
background: #ddd;
padding: 3px;
}
.first_cell{
border-left: 1px solid #aaa;
border-right: 1px solid #aaa;
border-bottom: 1px solid #aaa;
}
.table_cell{
border-bottom: 1px solid #aaa;
border-right: 1px solid #aaa;
}
.full_cell1{
border: 1px solid #aaa;
}
.full_cell{
border-top: 1px solid #aaa;
border-right: 1px solid #aaa;
border-bottom: 1px solid #aaa;
}
.center{
text-align: center;
}
.b-right{ border-right:1px solid #aaa; }
.b-left{ border-left:1px solid #aaa; }
.b-top{ border-top:1px solid #aaa; }
.b-bottom{ border-bottom:1px solid #aaa; }
.cell-padded{
padding: 4px;
}
#contents td{
font-size: 11px;
}
-->
</style>
<page backimg="$docroot$/templates/ddt/$img_sfondo$" backtop="90mm" backbottom="75mm" backleft="3mm" backright="5mm" footer="" style="font-size: $font_size$">
$body$
</page>

View File

@ -0,0 +1,227 @@
<page_header>
<br/>
<table align="left">
<tr>
<td style="width:110mm;">
<img src="$docroot$/templates/ddt/logo_azienda.jpg" alt="Logo" style="width:80mm;" border="0">
</td>
<td style="width:110mm;">
<p align='left' style='margin:15px 9px;'>
<b>$f_ragionesociale$</b><br/>
$f_indirizzo$
$f_citta$
$f_piva$
$f_codicefiscale$
$f_capsoc$
$f_telefono$
</p>
</td>
</tr>
</table>
<br/><br/>
<table align="center" style="font-size:11px;">
<tr>
<!-- Dati Fattura -->
<td cellspacing="0" cellpadding="0" valign="top">
<div style="text-align:center; width:105mm; height:5mm; font-size:14px;">
<b>$tipo_doc$</b><br>
</div>
<table cellspacing="0" style="table-layout:fixed;">
<col width="27"><col width="35"><col width="21.3"><col width="12">
<tr>
<td valign="top" class="full_cell1" align="center" style="width:27mm;">
<small><small><b>NR. DOCUMENTO</b></small></small><br>
$numero_doc$
</td>
<td class="full_cell" align="center" style="width:35mm;">
<small><small><b>DATA DOCUMENTO</b></small></small><br>
$data$
</td>
<td class="full_cell" align="center" style="width:21.3mm;">
<small><small><b>CLIENTE</b></small></small><br>
$c_codice$
</td>
<td class="full_cell" align="center" style="width:12mm;">
<small><small><b>FOGLIO</b></small></small><br>
&nbsp;&nbsp;&nbsp;&nbsp;[[page_cu]]/[[page_nb]]
</td>
</tr>
<tr>
<tr><td class="first_cell" colspan="4">
<div style="height:8mm; overflow:hidden;">
<table style="width:100%;" cellspacing="0" cellpadding="0">
<tr><td style="width:50%;">
<small><small><b>PARTITA IVA</b></small></small><br>
$c_piva$
</td>
<td style="width:50%;">
<small><small><b>CODICE FISCALE</b></small></small><br>
$c_codicefiscale$
</td></tr>
</table>
</div>
</td></tr>
<tr>
<td class="first_cell" colspan="4">
<div style="height:8.5mm; overflow:hidden;">
<small><small><b>PAGAMENTO</b></small></small><br>
$pagamento$
</div>
</td>
</tr>
<tr>
<td class="first_cell" colspan="4">
<div style="height:8.5mm; overflow:hidden;">
<small><small><b>&nbsp;</b></small></small><br>
&nbsp;
</div>
</td>
</tr>
</tr>
</table>
</td>
<td style="width:2mm;"></td>
<td style="width:83mm;" valign="top">
<div style="height:5mm;">
&nbsp;<br>
</div>
<!-- Intestazione cliente -->
<table cellspacing="0">
<tr>
<!-- cliente -->
<td style="width:80mm; height:16mm; font-size:9pt; border:1px solid #aaa;" valign="top">
<small><small><b>SPETT.LE</b></small></small><br/>
<div style="padding:1mm;">
$c_ragionesociale$
$c_indirizzo$
$c_citta$
</div>
</td>
</tr>
<tr>
<!-- Destinazione cliente -->
<td style="height:15mm; font-size:9pt; border-left:1px solid #aaa; border-right:1px solid #aaa; border-bottom:1px solid #aaa;" valign="top">
<small><small><b>DESTINAZIONE DIVERSA</b></small></small><br/>
<div style="padding:1mm;">
$c_destinazione$
</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
<br>
</page_header>
<!-- Footer -->
<page_footer>
<table style='margin-left:3mm; border:1px solid #aaa; border-bottom:none;' cellspacing='0'>
$footer$
</table>
<table style='margin-left:3mm; border:1px solid #aaa; border-bottom:none;' class='table_values' cellspacing='0'>
<col width="227.5"><col width="228"><col width="228">
<tr>
<th class="b-bottom b-right" valign="top">
<small><small><b>ASPETTO BENI</b></small></small>
</th>
<th class="b-bottom b-right" valign="top">
<small><small><b>CAUSALE TRASPORTO</b></small></small>
</th>
<th class="b-bottom" valign="top">
<small><small><b>PORTO</b></small></small>
</th>
</tr>
<tr>
<td valign="top" class="cell-padded b-right">
$aspettobeni$&nbsp;
</td>
<td valign="top" class="cell-padded b-right">
$causalet$&nbsp;
</td>
<td valign="top" class="cell-padded">
$porto$&nbsp;
</td>
</tr>
</table>
<table style='margin-left:3mm; border:1px solid #aaa; border-bottom:none;' class='table_values' cellspacing='0'>
<col width="227.5"><col width="228"><col width="228">
<tr>
<th class="b-bottom b-right" valign="top">
<small><small><b>N<sup>o</sup> COLLI</b></small></small>
</th>
<th class="b-bottom b-right" valign="top">
<small><small><b>TIPO DI SPEDIZIONE</b></small></small>
</th>
<th class="b-bottom" valign="top">
<small><small><b>VETTORE</b></small></small>
</th>
</tr>
<tr>
<td valign="top" class="cell-padded b-right">
$n_colli$&nbsp;
</td>
<td valign="top" class="cell-padded b-right">
$spedizione$&nbsp;
</td>
<td valign="top" class="cell-padded">
$vettore$&nbsp;
</td>
</tr>
</table>
<table style='margin-left:3mm; border:1px solid #aaa;' class='table_values' cellspacing='0'>
<col width="227.5"><col width="228"><col width="228">
<tr>
<th class="b-bottom b-right" valign="top">
<small><small><b>FIRMA CONDUCENTE</b></small></small>
</th>
<th class="b-bottom b-right" valign="top">
<small><small><b>FIRMA VETTORE</b></small></small>
</th>
<th class="b-bottom" valign="top">
<small><small><b>FIRMA DESTINATARIO</b></small></small>
</th>
</tr>
<tr>
<td valign="top" class="cell-padded b-right">
&nbsp;<br>&nbsp;<br>&nbsp;
</td>
<td valign="top" class="cell-padded b-right">
&nbsp;<br>&nbsp;<br>&nbsp;
</td>
<td valign="top" class="cell-padded">
&nbsp;<br>&nbsp;<br>&nbsp;
</td>
</tr>
</table>
</page_footer>

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View File

@ -0,0 +1,385 @@
<?php
$idddt = save($_GET['idddt']);
$iva_generica = '';
$n_rows = 0;
$words4row = 45;
//Lettura tipo ddt
$q = "SELECT n_colli, (SELECT dir FROM dt_tipiddt WHERE id=idtipoddt) AS dir, (SELECT descrizione FROM dt_causalet WHERE id=idcausalet) AS causalet, (SELECT descrizione FROM dt_porto WHERE id=idporto) AS porto, (SELECT descrizione FROM dt_aspettobeni WHERE id=idaspettobeni) AS aspettobeni, (SELECT descrizione FROM dt_spedizione WHERE id=idspedizione) AS spedizione, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=idvettore) AS vettore FROM dt_ddt WHERE id=\"".$idddt."\"";
$rs = $dbo->fetchArray($q);
$aspettobeni = $rs[0]['aspettobeni'];
$causalet = $rs[0]['causalet'];
$porto = $rs[0]['porto'];
$n_colli = $rs[0]['n_colli'];
if($n_colli=="0") $n_colli = "";
$spedizione = $rs[0]['spedizione'];
$vettore = $rs[0]['vettore'];
if( $rs[0]['dir']=='entrata' )
$nome_modulo = "Ddt di vendita";
else
$nome_modulo = "Ddt di acquisto";
include_once( $docroot."/lib/permissions_check.php" );
include_once( $docroot."/modules/ddt/modutil.php" );
$additional_where[$nome_modulo] = str_replace( "|idanagrafica|", "'".$user_idanagrafica."'", $additional_where[$nome_modulo] );
$mostra_prezzi = get_var("Stampa i prezzi sui ddt");
//Lettura info fattura
$q = "SELECT *, (SELECT descrizione FROM dt_tipiddt WHERE id=idtipoddt) AS tipo_doc, (SELECT dir FROM dt_tipiddt WHERE id=idtipoddt) AS dir FROM dt_ddt WHERE id=\"".$idddt."\" ".$additional_where[$nome_modulo];
$rs = $dbo->fetchArray($q);
$tipo_doc = $rs[0]['tipo_doc'];
$idcliente = $rs[0]['idanagrafica'];
//$idsede = $rs[0]['idsede'];
( $rs[0]['numero_esterno']!='' ) ? $numero=$rs[0]['numero_esterno'] : $numero=$rs[0]['numero'];
if( $rs[0]['numero_esterno']=='' ){
$numero = "pro-forma ".$numero;
$tipo_doc = "DDT PRO-FORMA";
}
//Lettura righe ddt
$q2 = "SELECT * FROM dt_righe_ddt INNER JOIN dt_ddt ON dt_righe_ddt.idddt=dt_ddt.id WHERE idddt='$idddt' ".$additional_where[$nome_modulo];
$righe = $dbo->fetchArray( $q2 );
//carica report html
$report = file_get_contents ($docroot."/templates/ddt/ddt.html");
$body = file_get_contents ($docroot."/templates/ddt/ddt_body.html");
if( !($idcliente == $user_idanagrafica || $_SESSION['is_admin']) )
die("Non hai i permessi per questa stampa!");
include_once( "pdfgen_variables.php" );
// $body = str_replace( "P.Iva: ".$c_piva, $c_piva, $body );
// $body = str_replace( "P.Iva/C.F.: ".$c_piva, $c_piva, $body );
$body = str_replace( '$tipo_doc$', strtoupper($tipo_doc), $body );
$body = str_replace( '$numero_doc$', $numero, $body );
$body = str_replace( '$data$', date( "d/m/Y", strtotime($rs[0]['data']) ), $body );
$body = str_replace( '$pagamento$', $rs[0]['tipo_pagamento'], $body );
$body = str_replace( '$c_banca_appoggio$', "&nbsp;", $body );
if($mostra_prezzi):
$report = str_replace( '$img_sfondo$', "bg_ddt.jpg", $report );
else:
$report = str_replace( '$img_sfondo$', "bg_ddt_noprezzi.jpg", $report );
endif;
//Leggo i dati della destinazione (se 0=sede legale, se!=altra sede da leggere da tabella an_sedi)
$destinazione = '';
if( $rs[0]['idsede']==0 ){
$destinazione = '';
} else {
$queryd = "SELECT (SELECT codice FROM an_anagrafiche WHERE idanagrafica=an_sedi.idanagrafica) AS codice, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=an_sedi.idanagrafica) AS ragione_sociale, indirizzo, indirizzo2, cap, citta, provincia, piva, codice_fiscale FROM an_sedi WHERE idanagrafica='".$idcliente."' AND id='".$rs[0]['idsede']."'";
$rsd = $dbo->fetchArray($queryd);
if( $rsd[0]['indirizzo']!='' )
$destinazione .= $rsd[0]['indirizzo']."<br/>\n";
if( $rsd[0]['indirizzo2']!='' )
$destinazione .= $rsd[0]['indirizzo2']."<br/>\n";
if( $rsd[0]['cap']!='' )
$destinazione .= $rsd[0]['cap']." ";
if( $rsd[0]['citta']!='' )
$destinazione .= $rsd[0]['citta'];
if( $rsd[0]['provincia']!='' )
$destinazione .= " (".$rsd[0]['provincia'].")\n";
}
$body = str_replace( '$c_destinazione$', $destinazione, $body );
//Campi finali
$body = str_replace( '$aspettobeni$', $aspettobeni, $body );
$body = str_replace( '$causalet$', $causalet, $body );
$body = str_replace( '$porto$', $porto, $body );
$body = str_replace( '$n_colli$', $n_colli, $body );
$body = str_replace( '$spedizione$', $spedizione, $body );
$body = str_replace( '$vettore$', $vettore, $body );
$v_iva = '';
$v_totale = '';
//Intestazione tabella per righe
$body .= "<table class='table_values' cellspacing='0' style='table-layout:fixed;' id='contents'>\n";
if($mostra_prezzi):
$body .= "<col width='298'><col width='57'><col width='81'><col width='81'><col width='81'><col width='43'>\n";
else:
$body .= "<col width='635'><col width='70'>\n";
endif;
$body .= "<thead>\n";
$body .= "<tr>\n";
$body .= "<th class='b-top b-right b-bottom b-left'><small>DESCRIZIONE</small></th>\n";
$body .= "<th align='center' class='b-top b-right b-bottom'><small>Q.T&Agrave;</small></th>\n";
if($mostra_prezzi):
$body .= "<th align='center' class='b-top b-right b-bottom'><small>PREZZO U.</small></th>\n";
$body .= "<th align='center' class='b-top b-right b-bottom'><small>IMPORTO</small></th>\n";
$body .= "<th align='center' class='b-top b-right b-bottom'><small>SCONTO</small></th>\n";
$body .= "<th align='center' class='b-top b-right b-bottom'><small>IVA</small></th>\n";
endif;
$body .= "</tr>\n";
$body .= "</thead>\n";
$body .= "<tbody>\n";
//Mostro le righe del ddt
$totale_ddt = 0.00;
$totale_imponibile = 0.00;
$totale_iva = 0.00;
$sconto = 0.00;
$sconto_generico = 0.00;
/*
Righe
*/
$q_gen = "SELECT *, (SELECT percentuale FROM co_iva WHERE id=idiva) AS perc_iva FROM `dt_righe_ddt` WHERE idddt='$idddt'";
$rs_gen = $dbo->fetchArray( $q_gen );
$tot_gen = sizeof($rs_gen);
$imponibile_gen = 0.0;
$iva_gen = 0.0;
if( $tot_gen>0 ){
for( $i=0; $i<sizeof($rs_gen); $i++ ){
$descrizione = $rs_gen[$i]['descrizione'];
$qta = $rs_gen[$i]['qta'];
$subtot = $rs_gen[$i]['subtotale']/$rs_gen[$i]['qta'];
$subtotale = $rs_gen[$i]['subtotale'];
$sconto = $rs_gen[$i]['sconto'];
$iva = $rs_gen[$i]['iva'];
//Se c'è un barcode provo a proseguire il loop per accorpare eventuali barcode dello stesso articolo
if( $rs_gen[$i]['barcode'] != '' ){
$descrizione .= "\n".$rs_gen[$i]['barcode'];
while( $rs_gen[$i+1]['idarticolo'] == $rs_gen[$i]['idarticolo'] && $rs_gen[$i+1]['barcode'] != '' ){
$i++;
if( $rs_gen[$i]['barcode'] != '' ){
$descrizione .= ", ".$rs_gen[$i]['barcode'];
}
$qta += $rs_gen[$i]['qta'];
$subtot += $rs_gen[$i]['subtotale']/$rs_gen[$i]['qta'];
$subtotale += $rs_gen[$i]['subtotale'];
$sconto += $rs_gen[$i]['sconto'];
$iva += $rs_gen[$i]['iva'];
}
}
$descrizione = rtrim( $descrizione, "," );
//Calcolo quanti a capo ci sono
$righe = explode( "\n", $descrizione );
for( $r=0; $r<sizeof($righe); $r++ ){
if( $r == 0 ){
$n_rows += ceil( ceil( strlen($righe[$r])/$words4row )*4.1 );
} else {
$n_rows += ceil( ceil( strlen($righe[$r])/$words4row )*2.9 );
}
$n++;
}
if( $rs_gen[$i]['descrizione'] == 'SCONTO' ){
$sconto_generico = $rs_gen[$i]['subtotale'];
$iva_gen += $rs_gen[$i]['iva'];
}
else{
$body .= "<tr><td class='' valign='top'>\n";
$body .= nl2br( $descrizione );
//Aggiunta riferimento a ordine
if( $rs_gen[$i]['idordine']!='0' ){
$rso = $dbo->fetchArray("SELECT numero, numero_esterno, data FROM or_ordini WHERE id=\"".$rs_gen[$i]['idordine']."\"");
( $rso[0]['numero_esterno']!='' ) ? $numero=$rso[0]['numero_esterno'] : $numero=$rso[0]['numero'];
$body .= "<br/><small>Rif. ordine n<sup>o</sup>".$numero." del ".date("d/m/Y", strtotime($rso[0]['data']) )."</small>";
}
$body .= "</td>\n";
$body .= "<td class='center' valign='top'>\n";
$body .= number_format($qta, 2, ",", "")."\n";
$body .= "</td>\n";
/*
$body .= "<td class='center b-right' valign='top'>\n";
$body .= $rs_gen[$i]['um']."\n";
$body .= "</td>\n";
*/
if($mostra_prezzi):
$body .= "<td align='right' class='' valign='top'>\n";
$body .= number_format( $subtotale/$qta, 2, ",", "" )." &euro;\n";
$body .= "</td>\n";
//Imponibile
$body .= "<td align='right' class='' valign='top'>\n";
$subtot = $subtotale;
$body .= number_format( $subtot, 2, ",", "." )." &euro;\n";
/*
if( $rs_gen[$i]['sconto']>0 ){
$body .= "<br/>\n<small style='color:#555;'>- sconto ".number_format( $rs_gen[$i]['sconto'], 2, ",", "." )." &euro;</small>\n";
$tot_gen++;
}*/
$body .= "</td>\n";
//Sconto
$body .= "<td align='right' class='' valign='top'>\n";
if( $rs_gen[$i]['scontoperc'] > 0 ){
$body .= "(".$rs_gen[$i]['scontoperc']."%) ";
}
if( $rs_gen[$i]['sconto'] > 0 ){
$body .= " ".number_format( $rs_gen[$i]['sconto'], 2, ",", "." )." &euro;\n";
}
$body .= "</td>\n";
//Iva
$body .= "<td align='center' valign='top'>\n";
if( $rs_gen[$i]['perc_iva'] > 0 ){
$body .= " ".intval($rs_gen[$i]['perc_iva'])."%\n";
}
$body .= "</td>\n";
endif;
$body .= "</tr>\n";
$imponibile_gen += $subtotale;
$iva_gen += $iva;
$sconto += $sconto;
if( $rs_gen[$i]['perc_iva'] > 0 ){
$iva_generica = $rs_gen[$i]['perc_iva'];
}
}
}
$imponibile_ddt += $imponibile_gen;
$totale_iva += $iva_gen;
$totale_ddt += $imponibile_gen;
}
$body .= "</tbody>\n";
$body .= "</table><br/>\n";
/*
NOTE
*/
/*
$body .= "<table style='margin-left:-0.5mm;'>\n";
$body .= " <tr><td style='width:193.5mm; height:20mm; border:1px solid #aaa;' valign='top'>\n";
$body .= " <small><b>NOTE</b></small><br/>\n";
$body .= " <div style='padding:3mm;'>\n";
$body .= " ".nl2br( $rs[0]['note'] )."\n";
$body .= " </div>\n";
$body .= " </td></tr>\n";
$body .= "</table>\n";
*/
$imponibile_ddt -= $sconto;
$totale_ddt = $totale_ddt - $sconto + $totale_iva;
/*
SCADENZE | TOTALI
*/
//TABELLA PRINCIPALE
if($mostra_prezzi):
//Riga 1
$footer = " <tr><td rowspan='7' style='width:159mm;' valign='top' class='b-right'>\n";
$footer .= " <small><b>NOTE</b></small><br/>\n";
$footer .= " ".nl2br( $rs[0]['note'] )."\n";
$footer .= " </td>\n";
$footer .= " <td style='width:33mm;' valign='top' class='b-bottom'>\n";
$footer .= " <small><small><b>TOTALE IMPONIBILE</b></small></small>\n";
$footer .= " </td></tr>\n";
//Dati riga 1
$footer .= " <tr>\n";
$footer .= " <td valign='top' style='text-align:right;' class='b-bottom cell-padded'>\n";
$footer .= " ".number_format( $imponibile_ddt, 2, ",", "." )." &euro;\n";
$footer .= " </td></tr>\n";
//Riga 2
$footer .= " <tr><td style='width:33mm;' valign='top' class='b-bottom'>\n";
$footer .= " <small><small><b>TOTALE IMPOSTE</b></small></small>\n";
$footer .= " </td></tr>\n";
$footer .= " <tr><td valign='top' style='text-align:right;' class='b-bottom cell-padded'>\n";
$footer .= " ".number_format( $totale_iva, 2, ",", "." )." &euro;\n";
$footer .= " </td></tr>\n";
//Riga 3
$footer .= " <tr><td valign='top' class='b-bottom'>\n";
$footer .= " <small><small><b>TOTALE DOCUMENTO</b></small></small>\n";
$footer .= " </td></tr>\n";
$footer .= " <tr><td valign='top' class='b-bottom cell-padded' style='border-bottom:none;text-align:right;'>\n";
$footer .= " ".number_format( $totale_ddt, 2, ",", "." )." &euro;\n";
$footer .= " </td></tr>\n";
//Riga 4 (opzionale, solo se c'è la ritenuta d'acconto)
if( $rs[0]['ritenutaacconto'] > 0 ):
$rs2 = $dbo->fetchArray("SELECT percentuale FROM co_ritenutaacconto WHERE id='".$rs[0]['idritenutaacconto']."'");
$footer .= " <tr><td valign='top' class='b-bottom'>\n";
$footer .= " <small><small><b>RITENUTA D'ACCONTO ".intval( $rs2[0]['percentuale'] )."%</b></small></small>\n";
$footer .= " </td></tr>\n";
$footer .= " <tr><td valign='top' style='text-align:right;' class='b-bottom cell-padded'>\n";
$footer .= " ".number_format( $rs[0]['ritenutaacconto'], 2, ",", "." )." &euro;\n";
$footer .= " </td></tr>\n";
$footer .= " <tr><td valign='top' class='b-bottom'>\n";
$footer .= " <small><small><b>NETTO A PAGARE</b></small></small>\n";
$footer .= " </td></tr>\n";
$footer .= " <tr><td valign='top' style='text-align:right;' class='cell-padded'>\n";
$footer .= " ".number_format( $totale_ddt - $rs[0]['ritenutaacconto'], 2, ",", "." )." &euro;\n";
$footer .= " </td></tr>\n";
endif;
else:
//Riga 1
$footer = " <tr><td style='width:193.5mm;height:30mm;' valign='top' class=''>\n";
$footer .= " <small><b>NOTE</b></small><br/>\n";
$footer .= " ".nl2br( $rs[0]['note'] )."\n";
$footer .= " </td></tr>\n";
endif;
$report_name = "ddt_".$numero.".pdf";
?>

180
templates/fatture/body.php Normal file
View File

@ -0,0 +1,180 @@
<?php
include_once __DIR__.'/../../core.php';
$report_name = 'fattura_'.$numero.'.pdf';
$n_rows = 0;
$words4row = 70;
$v_iva = [];
$v_totale = [];
$totale_documento = 0;
$totale_iva = 0;
$sconto = 0;
$imponibile = 0;
$iva = 0;
// Intestazione tabella per righe
echo "
<table class='table border-full table-striped' id='contents'>
<thead>
<tr>
<th class='text-center' style='width:50%'>".strtoupper(tr('Descrizione'))."</th>
<th class='text-center' style='width:10%'>".strtoupper(tr('Q.TÀ'))."</th>
<th class='text-center' style='width:7%'>".strtoupper(tr('Um'))."</th>
<th class='text-center' style='width:16%'>".strtoupper(tr('Costo unitario'))."</th>
<th class='text-center' style='width:20%'>".strtoupper(tr('Importo'))."</th>
<th class='text-center' style='width:7%'>".strtoupper(tr('IVA')).'</th>
</tr>
</thead>
<tbody>';
// RIGHE FATTURA CON ORDINAMENTO UNICO
$righe = $dbo->fetchArray("SELECT *, IFNULL((SELECT codice FROM mg_articoli WHERE id=idarticolo),'') AS codice_articolo, (SELECT percentuale FROM co_iva WHERE id=idiva) AS perc_iva FROM `co_righe_documenti` WHERE iddocumento=".prepare($iddocumento).' ORDER BY `order`');
$tot_righe = sizeof($righe);
foreach ($righe as $i => $riga) {
$n_rows += ceil(strlen($riga['descrizione']) / $words4row);
echo "
<tr class='".($i % 2 != 0 ? 'bg-default' : '')."'>
<td class='border-right'>
".nl2br($riga['descrizione']);
if (!empty($riga['codice_articolo'])) {
echo '
<br><small>'.str_replace('_COD_', $riga['codice_articolo'], tr('COD. _COD_')).'</small>';
$n_rows += 0.4;
}
// Aggiunta riferimento a ordine
if (!empty($riga['idordine'])) {
$rso = $dbo->fetchArray('SELECT numero, numero_esterno, data FROM or_ordini WHERE id='.prepare($riga['idordine']));
$numero = !empty($rso[0]['numero_esterno']) ? $rso[0]['numero_esterno'] : $rso[0]['numero'];
echo '
<br><small>'.str_replace(['_NUM_', '_DATE_'], [$numero, Translator::dateToLocale($rso[0]['data'])], tr('Rif. ordine n<sup>o</sup>_NUM_ del _DATE_')).'</small>';
$n_rows += 0.4;
}
// Aggiunta riferimento a ddt
elseif (!empty($riga['idddt'])) {
$rso = $dbo->fetchArray('SELECT numero, numero_esterno, data FROM dt_ddt WHERE id='.prepare($riga['idddt']));
$numero = !empty($rso[0]['numero_esterno']) ? $rso[0]['numero_esterno'] : $rso[0]['numero'];
echo '
<br><small>'.str_replace(['_NUM_', '_DATE_'], [$numero, Translator::dateToLocale($rso[0]['data'])], tr('Rif. ddt n<sup>o</sup>_NUM_ del _DATE_')).'</small>';
$n_rows += 0.4;
}
echo '
</td>';
echo "
<td class='center border-right text-center'>
".(empty($riga['qta']) ? '' : Translator::numberToLocale($riga['qta'], 2)).'
</td>';
// Unità di miusura
echo "
<td class='border-right text-center'>
".nl2br(strtoupper($riga['um'])).'
</td>';
// Costo unitario
echo "
<td class='border-right text-right'>
".(empty($riga['qta']) || empty($riga['subtotale']) ? '' : Translator::numberToLocale($riga['subtotale'] / $riga['qta'], 2)).' &euro;
</td>';
// Imponibile
echo "
<td class='border-right text-right'>
".(empty($riga['subtotale']) ? '' : Translator::numberToLocale($riga['subtotale'], 2)).' &euro;';
if ($riga['sconto'] > 0) {
$n_rows += 0.4;
echo "
<br><small class='help-block'>- sconto ".Translator::numberToLocale($riga['sconto_unitario']).($riga['tipo_sconto'] == 'PRC' ? '%' : ' &euro;').'</small>';
}
echo '
</td>';
// Iva
echo "
<td class='text-center'>";
if (!empty($riga['idiva'])) {
echo '
'.intval($riga['perc_iva']).'%';
}
echo '
</td>
</tr>';
$imponibile += $riga['subtotale'];
$iva += $riga['iva'];
$sconto += $riga['sconto'];
$v_iva[$riga['desc_iva']] += $riga['iva'];
$v_totale[$riga['desc_iva']] += $riga['subtotale'] - $riga['sconto'];
}
$imponibile_documento += $imponibile;
$totale_iva += $iva;
$totale_documento += $imponibile;
// Aggiungo diciture per condizioni iva particolari
if (!empty($v_iva)) {
$elenco = [
'Reverse charge ex art. 17, comma 6, DPR 633/72' => tr('Operazione soggetta a reverse charge ex art. 17, comma 6, DPR 633/72'),
'Esente ex art. 74' => tr('Senza addebito iva ex art. 74 comma 8-9 del DPR 633/72'),
];
$keys = array_keys($v_iva);
// Controllo se è stata applicata questa tipologia di iva
foreach ($elenco as $e => $testo) {
if (in_array($e, $keys)) {
$n_rows += nl2br($testo) / $words4row;
echo "
<tr>
<td class='border-right text-center'>
<b>".nl2br($testo)."</b>
</td>
<td class='center border-right'></td>
<td class='center border-right'></td>
<td class='center border-right'></td>
</tr>";
}
}
}
for ($i = (floor($n_rows) % 20); $i < 15; ++$i) {
echo '
<tr>
<td class="border-right">&nbsp;</td>
<td class="border-right"></td>
<td class="border-right"></td>
<td class="border-right"></td>
<td class="border-right"></td>
<td class="border-right"></td>
</tr>';
}
echo '
</tbody>
</table>';
$imponibile_documento -= $sconto;
$totale_documento = $totale_documento - $sconto + $totale_iva;
if (!empty($rs[0]['note'])) {
echo '
<br>
<p class="small-bold">'.strtoupper(tr('Note')).':</p>
<p>'.$rs[0]['note'].'</p>';
}

View File

@ -1,22 +0,0 @@
<style>
<!--
.table_values td{
border: 1px solid #888;
padding: 4px;
white-space: normal;
}
.table_values th{
background: #cfe1ec;
padding: 4px;
}
.center{
text-align: center;
}
-->
</style>
<page backcolor="#ffffff" backtop="65mm" backbottom="50mm" backleft="0mm" backright="0mm" footer="" style="font-size: $font_size$">
$body$
</page>

View File

@ -1,44 +0,0 @@
<page_header>
<table $body_table_params$>
<!-- Intestazione fornitore -->
<tr><td valign="top" style="width:105mm; font-size:8pt; color:#555;">
<img src="$docroot$/templates/fatture/logo_azienda.jpg" alt="Logo" border="0" /><br/>
$f_ragionesociale$
$f_indirizzo$
$f_citta$
$f_piva$
$f_codicefiscale$
$f_capsoc$
$f_telefono$
$f_sitoweb$
$f_email$
</td>
<!-- Intestazione cliente -->
<td valign="top" style="width:95mm; font-size:10pt">
Spett.le $c_ragionesociale$
$c_indirizzo$
$c_citta$
$c_piva$
$c_codicefiscale$
$riferimentosede$
</td></tr>
</table>
<br/>
</page_header>
<!-- Footer -->
<page_footer>
<table border="0" style="width:200mm; font-size:7pt; color:#999; border: 0px solid red;">
<tr><td style="text-align:center;">
$dicitura_fissa_fattura$
</td></tr>
</table>
<br>
$pagination$
</page_footer>

View File

@ -0,0 +1,194 @@
<?php
// SCADENZE | TOTALI
// TABELLA PRINCIPALE
echo "
<table>
<tr>
<td style='width:158.6mm;' class='border-top border-left'></td>
<td style='width:33mm;' class='border-full'>
<p class='small-bold'>".strtoupper(tr('Totale imponibile'))."</p>
</td>
</tr>
<tr>
<td rowspan=10 class='border-right border-bottom border-left cell-padded'>";
// Tabella (scadenze + iva)
echo "
<table>
<tr>
<td style='width:45mm;'>
<table>
<tr>
<td colspan='2' class='border-bottom'>
<p class='small-bold'>".strtoupper(tr('Scadenze pagamenti')).'</p>
</td>
</tr>';
// Elenco scadenze
$rs2 = $dbo->fetchArray('SELECT * FROM co_scadenziario WHERE iddocumento='.prepare($iddocumento).' ORDER BY `data_emissione` ASC');
if (!empty($rs2)) {
for ($i = 0; $i < sizeof($rs2); ++$i) {
echo "
<tr>
<td style='width:50%;' class='border-bottom'>
<small>".Translator::dateToLocale($rs2[$i]['scadenza'])."</small>
</td>
<td style='width:50%;' align='right' class='border-bottom'>
<small>".Translator::numberToLocale($rs2[$i]['da_pagare'], 2).' &euro;</small>
</td>
</tr>';
}
} else {
echo "
<tr>
<td style='width:50%;'>
&nbsp;
</td>
<td style='width:50%;' align='right'>
&nbsp;
</td>
</tr>";
}
echo '
</table>
</td>';
// Fine elenco scadenze
// Separatore
echo "
<td style='width:10mm;'>&nbsp;</td>";
// Tabella iva
echo "
<td style='width:75mm;'>";
if (!empty($v_iva)) {
echo "
<table>
<tr>
<td style='width:40mm;' class='border-bottom'>
<p class='small-bold'>".strtoupper(tr('Aliquota IVA'))."</p>
</td>
<td style='width:20mm;' class='border-bottom text-center'>
<p class='small-bold'>".strtoupper(tr('Importo'))."</p>
</td>
<td style='width:20mm;' class='border-bottom text-center'>
<p class='small-bold'>".strtoupper(tr('Importo IVA')).'</p>
</td>
</tr>';
foreach ($v_iva as $desc_iva => $tot_iva) {
if (!empty($desc_iva)) {
echo "
<tr>
<td style='' class='border-bottom'>
<small>".$desc_iva."</small>
</td>
<td style='' align='right' class='border-bottom'>
<small>".Translator::numberToLocale($v_totale[$desc_iva], 2)." &euro;</small>
</td>
<td style='' align='right' class='border-bottom'>
<small>".Translator::numberToLocale($v_iva[$desc_iva], 2).' &euro;</small>
</td>
</tr>';
}
}
echo '
</table>';
}
echo '
</td>
<td style="width:10mm;">&nbsp;</td>";
</tr>';
// Fine tabelle iva
echo '
</table>';
// Fine tabella (scadenze + iva)
echo '
</td>';
// TOTALE IMPONIBILE
echo "
<td style='text-align:right;' class='border-bottom border-right cell-padded'>
".Translator::numberToLocale($imponibile_documento, 2).' &euro;
</td>
</tr>';
// Riga 2
echo "
<tr>
<td style='width:33mm;' class='border-bottom border-right'>
<p class='small-bold'>".strtoupper(tr('Totale IVA'))."</p>
</td>
</tr>
<tr>
<td style='text-align:right;' class='border-bottom border-right cell-padded'>
".Translator::numberToLocale($totale_iva, 2)." &euro;
</td>
</tr>
<tr>
<td class='border-bottom border-right'>
<p class='small-bold'>".strtoupper(tr('Totale documento'))."</p>
</td>
</tr>
<tr>
<td style='text-align:right;' class='border-bottom border-right cell-padded'>
".Translator::numberToLocale($totale_documento, 2).' &euro;
</td>
</tr>';
// Riga 4 (opzionale, solo se c'è la ritenuta d'acconto)
if ($rs[0]['ritenutaacconto'] != 0) {
$rs2 = $dbo->fetchArray('SELECT percentuale FROM co_ritenutaacconto WHERE id=(SELECT idritenutaacconto FROM co_righe_documenti WHERE iddocumento='.prepare($iddocumento).' AND idritenutaacconto!=0 LIMIT 0,1)');
echo "
<tr>
<td class='border-bottom b-top'>
<p class='small-bold'>".strtoupper(str_replace('_PRC_', $rs2[0]['percentuale'], tr("Ritenuta d'acconto _PRC_%")))."</p>
</td>
</tr>
<tr>
<td style='text-align:right;' class='border-bottom cell-padded'>
".Translator::numberToLocale($rs[0]['ritenutaacconto'], 2)." &euro;
</td>
</tr>
<tr>
<td class='border-bottom'>
<p class='small-bold'>".strtoupper(tr('Netto a pagare'))."</p>
</td>
</tr>
<tr>
<td style='text-align:right;' class='cell-padded'>
".Translator::numberToLocale($totale_documento - $rs[0]['ritenutaacconto'], 2).' &euro;
</td>
</tr>';
}
echo '
</table>';
echo '
<br>
<table style="font-size:7pt; color:#999;">
<tr><td style="text-align:center;">
$dicitura_fissa_fattura$
</td></tr>
</table>
<br>
$pagination$';

View File

@ -0,0 +1,92 @@
<?php
echo '
<!-- Intestazione fornitore -->
<div class="row">
<div class="col-xs-6">
<img src="'.__DIR__.'/logo_azienda.jpg" alt="Logo" border="0"/>
</div>
<div class="col-xs-6 text-right">
<p><b>$f_ragionesociale$</b></p>
<p>$f_indirizzo$ $f_citta$</p>
<p>$f_telefono$</p>
<p>$f_piva$</p>
</div>
</div>
<br>
<div class="row">
<!-- Dati Fattura -->
<div class="col-xs-6">
<div class="text-center" style="height:5mm;">
<b>$tipo_doc$</b>
</div>
<table class="table">
<tr>
<td valign="top" class="border-full text-center">
<p class="small-bold">'.strtoupper(tr('Nr. documento')).'</p>
<p>$numero_doc$</p>
</td>
<td class="border-right border-bottom border-top text-center">
<p class="small-bold">'.strtoupper(tr('Data documento')).'</p>
<p>$data$</p>
</td>
<td class="border-right border-bottom border-top text-center">
<p class="small-bold">'.strtoupper(tr('Cliente')).'</p>
<p>$c_codice$</p>
</td>
<td class="border-right border-bottom border-top center text-center">
<p class="small-bold">'.strtoupper(tr('Foglio')).'</p>
<p>{PAGENO}/{nb}</p>
</td>
</tr>
<tr>
<td colspan="2" style="height:10mm;padding-top:2mm;">
<p class="small-bold">'.strtoupper(tr('Pagamento')).'</p>
<p>$pagamento$</p>
<br>
<p class="small-bold">'.tr('IBAN').'</p>
<p>$f_codiceiban$</p>
</td>
<td colspan="2" style="height:10mm;padding-top:2mm;">
<p class="small-bold">'.strtoupper(tr('Banca di appoggio')).'</p>
<p>$f_appoggiobancario$</p>
</td>
</tr>
</table>
</div>
<div class="col-xs-5 col-xs-offset-1">
<table class="table" style="width:100%;margin-top:5mm;">
<tr>
<td class="border-full" style="height:16mm;">
<p class="small-bold">'.strtoupper(tr('Spett.le')).'</p>
<p>$c_ragionesociale$</p>
<p>$c_indirizzo$ $c_citta$</p>
</td>
</tr>
<tr>
<td class="border-right border-bottom border-left">
<p class="small-bold">'.strtoupper(tr('Partita IVA')).'</p>
<p>$c_piva$</p>
</td>
</tr>
<tr>
<td class="border-right border-bottom border-left">
<p class="small-bold">'.strtoupper(tr('Codice fiscale')).'</p>
<p>$c_codicefiscale$</p>
</td>
</tr>
</table>
</div>
</div>';

View File

@ -0,0 +1,60 @@
<?php
include_once __DIR__.'/../../core.php';
// Lettura info fattura
$rs = $dbo->fetchArray('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 dir FROM co_tipidocumento WHERE id=idtipodocumento) AS dir
FROM co_documenti WHERE id='.prepare($iddocumento));
$module_name = ($rs[0]['dir'] == 'entrata') ? 'Fatture di vendita' : 'Fatture di acquisto';
$idcliente = $rs[0]['idanagrafica'];
$idsede = $rs[0]['idsede'];
$tipo_doc = $rs[0]['tipo_doc'];
if ($rs[0]['stato_doc'] != 'Bozza') {
$numero = !empty($rs[0]['numero_esterno']) ? $rs[0]['numero_esterno'] : $rs[0]['numero'];
} else {
$tipo_doc = 'Fattura pro forma';
$numero = 'PRO-'.$rs[0]['numero'];
}
// Leggo i dati della destinazione (se 0=sede legale, se!=altra sede da leggere da tabella an_sedi)
$destinazione = '';
if (!empty($rs[0]['idsede'])) {
$rsd = $dbo->fetchArray('SELECT (SELECT codice FROM an_anagrafiche WHERE idanagrafica=an_sedi.idanagrafica) AS codice, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=an_sedi.idanagrafica) AS ragione_sociale, indirizzo, indirizzo2, cap, citta, provincia, piva, codice_fiscale FROM an_sedi WHERE idanagrafica='.prepare($id_cliente).' AND id='.prepare($rs[0]['idsede']));
if (!empty($rsd[0]['indirizzo'])) {
$destinazione .= $rsd[0]['indirizzo'].'<br/>';
}
if (!empty($rsd[0]['indirizzo2'])) {
$destinazione .= $rsd[0]['indirizzo2'].'<br/>';
}
if (!empty($rsd[0]['cap'])) {
$destinazione .= $rsd[0]['cap'].' ';
}
if (!empty($rsd[0]['citta'])) {
$destinazione .= $rsd[0]['citta'];
}
if (!empty($rsd[0]['provincia'])) {
$destinazione .= ' ('.$rsd[0]['provincia'].')';
}
}
// Sostituzioni specifiche
$replaces = [
'tipo_doc' => strtoupper($tipo_doc),
'numero_doc' => $numero,
'data' => Translator::numberToLocale($rs[0]['data']),
'pagamento' => $rs[0]['tipo_pagamento'],
'c_destinazione' => $destinazione,
];
// Controllo sui permessi
if ($id_cliente != Auth::user()['idanagrafica'] && !Auth::admin()) {
die(tr('Non hai i permessi per questa stampa!'));
}

View File

@ -1,466 +0,0 @@
<?php
include_once __DIR__.'/../../core.php';
$iddocumento = save($_GET['iddocumento']);
// Lettura tipo documento
$q = 'SELECT (SELECT dir FROM co_tipidocumento WHERE id=idtipodocumento) AS dir FROM co_documenti WHERE id="'.$iddocumento.'"';
$rs = $dbo->fetchArray($q);
if ($rs[0]['dir'] == 'entrata') {
$module_name = 'Fatture di vendita';
} else {
$module_name = 'Fatture di acquisto';
}
$additional_where[$module_name] = str_replace('|idanagrafica|', "'".$user['idanagrafica']."'", $additional_where[$module_name]);
// Lettura info fattura
$q = 'SELECT *, (SELECT descrizione FROM co_tipidocumento WHERE id=idtipodocumento) AS tipo_doc, (SELECT descrizione FROM co_pagamenti WHERE id=idpagamento) AS tipo_pagamento, (SELECT dir FROM co_tipidocumento WHERE id=idtipodocumento) AS dir FROM co_documenti WHERE id="'.$iddocumento.'" '.$additional_where[$module_name];
$rs = $dbo->fetchArray($q);
$numero_doc = $rs[0]['numero'];
$idcliente = $rs[0]['idanagrafica'];
(!empty($rs[0]['numero_esterno'])) ? $numero = $rs[0]['numero_esterno'] : $numero = $rs[0]['numero'];
// Lettura righe documento
$q2 = "SELECT * FROM co_righe_documenti INNER JOIN co_documenti ON co_righe_documenti.iddocumento=co_documenti.id WHERE iddocumento='$iddocumento' ".$additional_where[$module_name];
$righe = $dbo->fetchArray($q2);
// carica report html
$report = file_get_contents($docroot.'/templates/fatture/fattura.html');
$body = file_get_contents($docroot.'/templates/fatture/fattura_body.html');
include_once $docroot.'/templates/pdfgen_variables.php';
if (empty($rs[0]['idsede'])) {
$body = str_replace('$riferimentosede$', '', $body);
} else {
$q3 = "SELECT * FROM an_sedi WHERE id='".$rs[0]['idsede']."'";
$sede = $dbo->fetchArray($q3);
$riferimentosede = '<br/>Rif. sede cliente:<br/>'.$sede[0]['nomesede'].'<br/>'.$sede[0]['indirizzo'].'<br/>'.$sede[0]['cap'].' '.$sede[0]['citta'].' ('.$sede[0]['provincia'].')';
$body = str_replace('$riferimentosede$', $riferimentosede, $body);
}
// Dati generici fattura
if ($rs[0]['buono_ordine'] != '') {
$width = '165';
} else {
$width = '228';
}
$body .= "<table class='table_values' border='0' cellspacing='1'>\n";
$body .= "<tr>\n";
$body .= "<td width='".$width."' class='center'><b>".$rs[0]['tipo_doc']."</b><br/>n<sup>o</sup> $numero</td>\n";
$body .= "<td width='".$width."' class='center'><b>Data:</b><br/>".Translator::dateToLocale($rs[0]['data'])."</td>\n";
$body .= "<td width='".$width."' class='center'><b>Pagamento:</b><br/>".$rs[0]['tipo_pagamento']."</td>\n";
if ($rs[0]['buono_ordine']) {
$body .= "<td width='".$width."' class='center'><b>Buono d'ordine:</b><br/>".$rs[0]['buono_ordine']."</td>\n";
}
$body .= "</tr>\n";
$body .= "</table><br/><br/>\n";
// Intestazione tabella per righe
$body .= "<table class='table_values' border='0' cellspacing='1' style='table-layout:fixed;'>\n";
$body .= "<col width='280'><col width='50'><col width='40'><col width='90'><col width='60'><col width='98'>\n";
$body .= "<thead>\n";
$body .= "<tr><th width='280'>Descrizione</th>\n";
$body .= "<th width='50' align='center'>Q.tà</th>\n";
$body .= "<th width='40' align='center'>u.m.</th>\n";
$body .= "<th width='90' align='center'>Costo&nbsp;unitario</th>\n";
$body .= "<th width='60' align='center'>Iva</th>\n";
$body .= "<th width='98' align='center'>Imponibile</th></tr>\n";
$body .= "</thead>\n";
$body .= "<tbody>\n";
// Mostro le righe del documento
$totale_documento = 0.00;
$totale_imponibile = 0.00;
$totale_iva = 0.00;
$sconto = 0.00;
/*
Righe fattura
*/
$qr = "SELECT * FROM `co_righe_documenti` WHERE iddocumento='$iddocumento' ORDER BY `order`";
$rsr = $dbo->fetchArray($qr);
$tot = sizeof($rsr);
$imponibile_int = 0.00;
$iva_int = 0.00;
if ($tot > 0) {
for ($i = 0; $i < $tot; ++$i) {
// Intervento
if (!empty($rsr[$i]['idintervento']) && empty($rsr[$i]['idarticolo'])) {
$body .= "<tr><td class='first_cell'>\n";
$body .= nl2br($rsr[$i]['descrizione'])."\n";
$body .= "</td>\n";
$qta = $rsr[$i]['qta'];
($qta == 0) ? $qta = '-' : $qta = Translator::numberToLocale($qta, 2);
$body .= "<td class='table_cell center'>\n";
$body .= $qta;
$body .= "</td>\n";
($qta == 0) ? $um = '-' : $um = $rsr[$i]['um'];
$body .= "<td class='table_cell center'>\n";
$body .= $um;
$body .= "</td>\n";
// costo unitario
$subtotale = $rsr[$i]['subtotale'] / $rsr[$i]['qta'];
($subtotale == 0) ? $subtotale = '-' : $subtotale = Translator::numberToLocale($subtotale, 2).' &euro;';
$body .= "<td class='table_cell center'>\n";
$body .= $subtotale."\n";
$body .= "</td>\n";
$body .= "<td class='table_cell center'>\n";
$iva = $rsr[$i]['iva'];
$body .= '<br/>'.Translator::numberToLocale($iva, 2)." &euro;<br/><small style='color:#777;'>".$rsr[$i]['desc_iva']."</small>\n";
$body .= "</td>\n";
$body .= "<td class='table_cell' align='right'>\n";
$subtot = $rsr[$i]['subtotale'];
$body .= Translator::numberToLocale($subtot, 2)." &euro;\n";
if ($rsr[$i]['sconto'] > 0) {
$body .= "<br/>\n<small style='color:#555;'>- sconto ".Translator::numberToLocale($rsr[$i]['sconto'], 2)." &euro;</small>\n";
}
$body .= "</td></tr>\n";
$imponibile_int += $rsr[$i]['subtotale'];
$iva_int += $iva;
$sconto += $rsr[$i]['sconto'];
}
// Preventivi
elseif ($rsr[$i]['idpreventivo'] != 0) {
$body .= "<tr><td class='first_cell'>\n";
$body .= nl2br($rsr[$i]['descrizione'])."\n";
$body .= "</td>\n";
$body .= "<td class='table_cell center'>\n";
$body .= "1\n";
$body .= "</td>\n";
$body .= "<td class='table_cell center'>\n";
$body .= '-';
$body .= "</td>\n";
$body .= "<td class='table_cell center'>\n";
$body .= "-\n";
$body .= "</td>\n";
// Iva
$body .= "<td class='table_cell center'>\n";
$iva = $rsr[$i]['iva'];
$body .= '<br/>'.Translator::numberToLocale($iva, 2)." &euro;<br/><small style='color:#777;'>".$rsr[$i]['desc_iva']."</small>\n";
$body .= "</td>\n";
// Imponibile
$body .= "<td class='table_cell' align='right'>\n";
$subtot = $rsr[$i]['subtotale'];
$body .= Translator::numberToLocale($subtot, 2)." &euro;\n";
if ($rsr[$i]['sconto'] > 0) {
$body .= "<br/>\n<small style='color:#555;'>- sconto ".Translator::numberToLocale($rsr[$i]['sconto'], 2)." &euro;</small>\n";
}
$body .= "</td></tr>\n";
$imponibile_pre += $rsr[$i]['subtotale'];
$iva_pre += $iva;
$sconto += $rsr[$i]['sconto'];
}
// Contratti
elseif ($rsr[$i]['idcontratto'] != 0) {
$body .= "<tr><td class='first_cell'>\n";
$body .= nl2br($rsr[$i]['descrizione'])."\n";
$body .= "</td>\n";
$body .= "<td class='table_cell center'>\n";
$body .= "1\n";
$body .= "</td>\n";
$body .= "<td class='table_cell center'>\n";
$body .= '-';
$body .= "</td>\n";
$body .= "<td class='table_cell center'>\n";
$body .= "-\n";
$body .= "</td>\n";
// Iva
$body .= "<td class='table_cell center'>\n";
$iva = $rsr[$i]['iva'];
$body .= '<br/>'.Translator::numberToLocale($iva, 2)." &euro;<br/><small style='color:#777;'>".$rsr[$i]['desc_iva']."</small>\n";
$body .= "</td>\n";
// Imponibile
$body .= "<td class='table_cell' align='right'>\n";
$subtot = $rsr[$i]['subtotale'];
$body .= Translator::numberToLocale($subtot, 2)." &euro;\n";
if ($rsr[$i]['sconto'] > 0) {
$body .= "<br/>\n<small style='color:#555;'>- sconto ".Translator::numberToLocale($rsr[$i]['sconto'], 2)." &euro;</small>\n";
}
$body .= "</td></tr>\n";
$imponibile_con += $rsr[$i]['subtotale'];
$iva_con += $iva;
$sconto += $rsr[$i]['sconto'];
}
// Articoli
elseif ($rsr[$i]['idarticolo'] != 0) {
$body .= "<tr><td class='first_cell'>\n";
// Immagine articolo
$f = pathinfo($rsr[$i]['immagine01']);
$img = $docroot.'/modules/magazzino/articoli/images/'.$f['filename'].'_thumb100.'.$f['extension'];
if (file_exists($img)) {
$body .= '<img src="'.$img."\" alt=\"\" border=\"0\" align=\"left\" style=\"margin:0px 4px 4px 0px; border:1px solid #ccc;\" />\n";
}
$body .= nl2br($rsr[$i]['descrizione']);
// Aggiunta riferimento a ordine
if (!empty($rsr[$i]['idordine'])) {
$rso = $dbo->fetchArray('SELECT numero, numero_esterno, data FROM or_ordini WHERE id="'.$rsr[$i]['idordine'].'"');
($rso[0]['numero_esterno'] != '') ? $numero = $rso[0]['numero_esterno'] : $numero = $rso[0]['numero'];
$body .= '<br/><small>Rif. ordine '.$numero.' del '.Translator::dateToLocale($rso[0]['data']).'</small>';
}
// Aggiunta riferimento a ddt
elseif (!empty($rsr[$i]['idddt'])) {
$rso = $dbo->fetchArray('SELECT numero, numero_esterno, data FROM dt_ddt WHERE id="'.$rsr[$i]['idddt'].'"');
($rso[0]['numero_esterno'] != '') ? $numero = $rso[0]['numero_esterno'] : $numero = $rso[0]['numero'];
$body .= '<br/><small>Rif. ddt '.$numero.' del '.Translator::dateToLocale($rso[0]['data']).'</small>';
}
$body .= "</td>\n";
$body .= "<td class='table_cell center'>\n";
$body .= Translator::numberToLocale($rsr[$i]['qta'], 2);
$body .= "</td>\n";
$body .= "<td class='table_cell center'>\n";
$body .= $rsr[$i]['um'];
$body .= "</td>\n";
// costo unitario
$body .= "<td class='table_cell center'>\n";
$body .= Translator::numberToLocale($rsr[$i]['subtotale'] / $rsr[$i]['qta'], 2)." &euro;\n";
$body .= "</td>\n";
$body .= "<td class='table_cell center'>\n";
$iva = $rsr[$i]['iva'];
$body .= '<br/>'.Translator::numberToLocale($iva, 2)." &euro;<br/><small style='color:#777;'>".$rsr[$i]['desc_iva']."</small>\n";
$body .= "</td>\n";
$body .= "<td class='table_cell' align='right'>\n";
$subtot = $rsr[$i]['subtotale'];
$body .= Translator::numberToLocale($subtot, 2)." &euro;\n";
if ($rsr[$i]['sconto'] > 0) {
$body .= "<br/>\n<small style='color:#555;'>- sconto ".Translator::numberToLocale($rsr[$i]['sconto'], 2)." &euro;</small>\n";
}
$body .= "</td></tr>\n";
$imponibile_art += $rsr[$i]['subtotale'];
$iva_art += $iva;
$sconto += $rsr[$i]['sconto'];
}
// Righe generiche
else {
$body .= "<tr><td class='first_cell'>\n";
$body .= nl2br($rsr[$i]['descrizione']);
// Aggiunta riferimento a ordine
if (!empty($rsr[$i]['idordine'])) {
$rso = $dbo->fetchArray('SELECT numero, numero_esterno, data FROM or_ordini WHERE id="'.$rsr[$i]['idordine'].'"');
($rso[0]['numero_esterno'] != '') ? $numero = $rso[0]['numero_esterno'] : $numero = $rso[0]['numero'];
$body .= '<br/><small>Rif. ordine n<sup>o</sup>'.$numero.' del '.Translator::dateToLocale($rso[0]['data']).'</small>';
}
// Aggiunta riferimento a ddt
elseif (!empty($rsr[$i]['idddt'])) {
$rso = $dbo->fetchArray('SELECT numero, numero_esterno, data FROM dt_ddt WHERE id="'.$rsr[$i]['idddt'].'"');
($rso[0]['numero_esterno'] != '') ? $numero = $rso[0]['numero_esterno'] : $numero = $rso[0]['numero'];
$body .= '<br/><small>Rif. ddt n<sup>o</sup>'.$numero.' del '.Translator::dateToLocale($rso[0]['data']).'</small>';
}
$body .= "</td>\n";
$body .= "<td class='table_cell center'>\n";
$body .= Translator::numberToLocale($rsr[$i]['qta'], 2)."\n";
$body .= "</td>\n";
$body .= "<td class='table_cell center'>\n";
$body .= $rsr[$i]['um']."\n";
$body .= "</td>\n";
$body .= "<td class='table_cell center'>\n";
$body .= Translator::numberToLocale($rsr[$i]['subtotale'] / $rsr[$i]['qta'], 2)." &euro;\n";
$body .= "</td>\n";
// Iva
$body .= "<td class='table_cell center'>\n";
$iva = $rsr[$i]['iva'];
$body .= '<br/>'.Translator::numberToLocale($iva, 2)." &euro;<br/><small style='color:#777;'>".$rsr[$i]['desc_iva']."</small>\n";
$body .= "</td>\n";
// Imponibile
$body .= "<td class='table_cell' align='right'>\n";
$subtot = $rsr[$i]['subtotale'];
$body .= Translator::numberToLocale($subtot, 2)." &euro;\n";
if ($rsr[$i]['sconto'] > 0) {
$body .= "<br/>\n<small style='color:#555;'>- sconto ".Translator::numberToLocale($rsr[$i]['sconto'], 2)." &euro;</small>\n";
}
$body .= "</td></tr>\n";
$imponibile_gen += $rsr[$i]['subtotale'];
$iva_gen += $iva;
$sconto += $rsr[$i]['sconto'];
}
}
$imponibile_documento += $imponibile_int;
$totale_iva += $iva_int;
$totale_documento += $imponibile_int;
$imponibile_documento += $imponibile_pre;
$totale_iva += $iva_pre;
$totale_documento += $imponibile_pre;
$imponibile_documento += $imponibile_con;
$totale_iva += $iva_con;
$totale_documento += $imponibile_con;
$imponibile_documento += $imponibile_art;
$totale_iva += $iva_art;
$totale_documento += $imponibile_art;
$imponibile_documento += $imponibile_gen;
$totale_iva += $iva_gen;
$totale_documento += $imponibile_gen;
}
// Totale documento
$body .= "<tr><td class='first_cell' colspan='5' align='right'>\n";
$body .= '<b>Subtot.:</b>';
$body .= "</td>\n";
// Imponibile
$body .= "<td class='table_cell' align='right'>\n";
$totale_documento = $imponibile_documento;
$body .= Translator::numberToLocale($totale_documento, 2)." &euro;\n";
$body .= "</td></tr>\n";
// Mostra sconto se c'è
if (abs($sconto) > 0) {
$body .= "<tr><td class='first_cell' colspan='5' align='right'>\n";
$body .= '<b>Sconto:</b>';
$body .= "</td>\n";
// Sconto
$body .= "<td class='table_cell' align='right'>\n";
$body .= Translator::numberToLocale($sconto, 2)." &euro;\n";
$body .= '</td></tr>';
// Totale scontato
$body .= "<tr><td class='first_cell' colspan='5' align='right'>\n";
$body .= '<b>Totale scontato:</b>';
$body .= "</td>\n";
// Sconto
$body .= "<td class='table_cell' align='right'>\n";
$totale_documento -= $sconto;
$body .= Translator::numberToLocale($totale_documento, 2)." &euro;\n";
$body .= "</td></tr>\n";
}
// Mostra INPS se c'è
if (abs($rs[0]['rivalsainps']) > 0) {
$body .= "<tr><td class='first_cell' colspan='5' align='right'>\n";
$body .= '<b>Rivalsa INPS:</b>';
$body .= "</td>\n";
// Rivalsa INPS
$body .= "<td class='table_cell' align='right'>\n";
$body .= Translator::numberToLocale($rs[0]['rivalsainps'], 2)." &euro;\n";
$body .= "</td></tr>\n";
$totale_documento += $rs[0]['rivalsainps'];
}
// Mostra iva se c'è
$totale_iva += $rs[0]['iva_rivalsainps'];
if (abs($totale_iva) > 0) {
$body .= "<tr><td class='first_cell' colspan='5' align='right'>\n";
$body .= '<b>Iva:</b>';
$body .= "</td>\n";
// Iva
$body .= "<td class='table_cell' align='right'>\n";
$body .= Translator::numberToLocale($totale_iva, 2)." &euro;\n";
$body .= "</td></tr>\n";
$totale_documento += $totale_iva;
}
/*
Totale documento
*/
$body .= "<tr><td class='first_cell' colspan='5' align='right'>\n";
$body .= '<b>Totale documento:</b>';
$body .= "</td>\n";
$body .= "<td class='table_cell_h' align='right'>\n";
$body .= '<b>'.Translator::numberToLocale($totale_documento, 2)." &euro;</b>\n";
$body .= "</td></tr>\n";
$netto_a_pagare = $totale_documento;
// Mostra marca da bollo se c'è
if (abs($rs[0]['bollo']) > 0) {
$body .= "<tr><td class='first_cell' colspan='5' align='right'>\n";
$body .= '<b>Marca da bollo:</b>';
$body .= "</td>\n";
// Marca da bollo
$body .= "<td class='table_cell' align='right'>\n";
$marca_da_bollo = str_replace(',', '.', $rs[0]['bollo']);
$body .= Translator::numberToLocale($marca_da_bollo, 2).' &euro;';
$body .= "</td></tr>\n";
$netto_a_pagare += $marca_da_bollo;
}
// Mostra ritenuta d'acconto se c'è
if (abs($rs[0]['ritenutaacconto']) > 0) {
$body .= "<tr><td class='first_cell' colspan='5' align='right'>\n";
$body .= "<b>Ritenuta d'acconto:</b>";
$body .= "</td>\n";
// Ritenuta d'acconto
$body .= "<td class='table_cell' align='right'>\n";
$body .= Translator::numberToLocale($rs[0]['ritenutaacconto'], 2).' &euro;';
$body .= "</td></tr>\n";
$netto_a_pagare -= $rs[0]['ritenutaacconto'];
}
/*
Netto a pagare (se diverso dal totale)
*/
if ($totale_documento != $netto_a_pagare) {
$body .= "<tr><td class='first_cell' colspan='5' align='right'>\n";
$body .= '<b>Netto a pagare:</b>';
$body .= "</td>\n";
$body .= "<td class='table_cell_h' align='right'>\n";
$body .= '<b>'.Translator::numberToLocale($netto_a_pagare, 2)." &euro;</b>\n";
$body .= "</td></tr>\n";
}
$body .= "</tbody>\n";
$body .= "</table>\n";
$body .= '<p>'.nl2br($rs[0]['note'])."</p>\n";
$report_name = 'fattura_'.$numero_doc.'.pdf';

View File

@ -0,0 +1,6 @@
<?php
return [
'header' => '90',
'footer' => '70',
];

View File

@ -4,10 +4,12 @@ include_once __DIR__.'/../../core.php';
include_once $docroot.'/modules/interventi/modutil.php'; include_once $docroot.'/modules/interventi/modutil.php';
$report_name = 'intervento_'.$idintervento.'.pdf';
/* /*
Dati intervento Dati intervento
*/ */
$body .= ' echo '
<table class="table_values" cellspacing="0" cellpadding="0" style="table-layout:fixed;"> <table class="table_values" cellspacing="0" cellpadding="0" style="table-layout:fixed;">
<col width="400"><col width="310"> <col width="400"><col width="310">
@ -19,19 +21,19 @@ $body .= '
<td align="left"> <td align="left">
'.tr('Referente').': <b>'.$referente.'</b>'; '.tr('Referente').': <b>'.$referente.'</b>';
if ($c_telefono != '') { if ($c_telefono != '') {
$body .= ' echo '
<br>'.tr('Telefono azienda').': <b>'.$c_telefono.'</b>'; <br>'.tr('Telefono azienda').': <b>'.$c_telefono.'</b>';
} }
if ($c_email != '') { if ($c_email != '') {
$body .= ' echo '
<br>'.tr('Email').': <b>'.$c_email.'</b>'; <br>'.tr('Email').': <b>'.$c_email.'</b>';
} }
$body .= ' echo '
</td> </td>
</tr>'; </tr>';
// Richiesta // Richiesta
$body .= ' echo '
<tr> <tr>
<td align="left" colspan="2" valign="top"><b>'.tr('Richiesta').':</b></td> <td align="left" colspan="2" valign="top"><b>'.tr('Richiesta').':</b></td>
</tr> </tr>
@ -41,7 +43,7 @@ $body .= '
// Descrizione // Descrizione
if ($records[0]['descrizione_intervento'] != '') { if ($records[0]['descrizione_intervento'] != '') {
$body .= ' echo '
<tr> <tr>
<td colspan="2" align="left" valign="top"><b>'.tr('Descrizione').':</b></td> <td colspan="2" align="left" valign="top"><b>'.tr('Descrizione').':</b></td>
</tr> </tr>
@ -49,7 +51,7 @@ if ($records[0]['descrizione_intervento'] != '') {
<td colspan="2" valign="top" align="left" style="height:5mm;">'.nl2br($records[0]['descrizione_intervento']).'</td> <td colspan="2" valign="top" align="left" style="height:5mm;">'.nl2br($records[0]['descrizione_intervento']).'</td>
</tr>'; </tr>';
} }
$body .= ' echo '
</table>'; </table>';
$totale = []; $totale = [];
@ -59,7 +61,7 @@ $totale = [];
// Conteggio articoli utilizzati // Conteggio articoli utilizzati
$rs2 = $dbo->fetchArray('SELECT *, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice_art, SUM(qta) AS sumqta FROM `mg_articoli_interventi` HAVING idintervento='.prepare($idintervento)." AND NOT idarticolo='0' ORDER BY idarticolo ASC"); $rs2 = $dbo->fetchArray('SELECT *, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice_art, SUM(qta) AS sumqta FROM `mg_articoli_interventi` HAVING idintervento='.prepare($idintervento)." AND NOT idarticolo='0' ORDER BY idarticolo ASC");
if (!empty($rs2)) { if (!empty($rs2)) {
$body .= ' echo '
<table class="table_values" cellspacing="0" cellpadding="0" style="font-size:11px; table-layout:fixed; border-color:#aaa;"> <table class="table_values" cellspacing="0" cellpadding="0" style="font-size:11px; table-layout:fixed; border-color:#aaa;">
<col width="90"><col width="254"><col width="54"><col width="80"><col width="80"><col width="80"> <col width="90"><col width="254"><col width="54"><col width="80"><col width="80"><col width="80">
@ -98,29 +100,29 @@ if (!empty($rs2)) {
$totale_articoli = []; $totale_articoli = [];
foreach ($rs2 as $r) { foreach ($rs2 as $r) {
$body .= ' echo '
<tr>'; <tr>';
// Codice // Codice
$body .= ' echo '
<td valign="top"> <td valign="top">
'.$r['codice_art'].' '.$r['codice_art'].'
</td>'; </td>';
// Descrizione // Descrizione
$body .= ' echo '
<td valign="top"> <td valign="top">
'.$r['descrizione'].' '.$r['descrizione'].'
</td>'; </td>';
// Quantità // Quantità
$body .= ' echo '
<td align="center" valign="top"> <td align="center" valign="top">
'.Translator::numberToLocale($r['sumqta'], 2).' '.$r['um'].' '.Translator::numberToLocale($r['sumqta'], 2).' '.$r['um'].'
</td>'; </td>';
// Prezzo unitario // Prezzo unitario
$body .= ' echo '
<td align="right" valign="top"> <td align="right" valign="top">
'.($visualizza_costi ? Translator::numberToLocale($r['prezzo_vendita'], 2).' &euro;' : '-').' '.($visualizza_costi ? Translator::numberToLocale($r['prezzo_vendita'], 2).' &euro;' : '-').'
</td>'; </td>';
@ -132,7 +134,7 @@ if (!empty($rs2)) {
$sconto = '-'; $sconto = '-';
} }
$body .= ' echo '
<td align="center" valign="top"> <td align="center" valign="top">
'.($visualizza_costi ? $sconto : '-').' '.($visualizza_costi ? $sconto : '-').'
</td>'; </td>';
@ -140,7 +142,7 @@ if (!empty($rs2)) {
// Netto // Netto
$netto = ($r['prezzo_vendita'] - $r['sconto']) * $r['sumqta']; $netto = ($r['prezzo_vendita'] - $r['sconto']) * $r['sumqta'];
$body .= ' echo '
<td align="right" valign="top"> <td align="right" valign="top">
'.($visualizza_costi ? Translator::numberToLocale($netto, 2) : '-').' '.($visualizza_costi ? Translator::numberToLocale($netto, 2) : '-').'
</td> </td>
@ -155,7 +157,7 @@ if (!empty($rs2)) {
// Totale spesa articoli // Totale spesa articoli
if ($visualizza_costi) { if ($visualizza_costi) {
$body .= ' echo '
<tr> <tr>
<td colspan="5" align="right"> <td colspan="5" align="right">
<b>'.strtoupper(tr('Totale materiale utilizzato')).':</b> <b>'.strtoupper(tr('Totale materiale utilizzato')).':</b>
@ -167,7 +169,7 @@ if (!empty($rs2)) {
</tr>'; </tr>';
} }
$body .= ' echo '
</table>'; </table>';
} }
@ -176,7 +178,7 @@ if (!empty($rs2)) {
// Conteggio SPESE AGGIUNTIVE // Conteggio SPESE AGGIUNTIVE
$rs2 = $dbo->fetchArray('SELECT * FROM in_righe_interventi WHERE idintervento='.prepare($idintervento).' ORDER BY id ASC'); $rs2 = $dbo->fetchArray('SELECT * FROM in_righe_interventi WHERE idintervento='.prepare($idintervento).' ORDER BY id ASC');
if (!empty($rs2)) { if (!empty($rs2)) {
$body .= ' echo '
<table class="table_values" cellspacing="0" cellpadding="0" style="table-layout:fixed; border-color:#aaa; font-size:11px;"> <table class="table_values" cellspacing="0" cellpadding="0" style="table-layout:fixed; border-color:#aaa; font-size:11px;">
<col width="90"><col width="254"><col width="54"><col width="80"><col width="80"><col width="80"> <col width="90"><col width="254"><col width="54"><col width="80"><col width="80"><col width="80">
@ -216,7 +218,7 @@ if (!empty($rs2)) {
foreach ($rs2 as $r) { foreach ($rs2 as $r) {
// Articolo // Articolo
$body .= ' echo '
<tr> <tr>
<td></td> <td></td>
@ -225,14 +227,14 @@ if (!empty($rs2)) {
</td>'; </td>';
// Quantità // Quantità
$body .= ' echo '
<td align="center"> <td align="center">
'.Translator::numberToLocale($r['qta'], 2).' '.Translator::numberToLocale($r['qta'], 2).'
</td>'; </td>';
// Prezzo unitario // Prezzo unitario
$body .= ' echo '
<td align="right" valign="top"> <td align="right" valign="top">
'.($visualizza_costi ? Translator::numberToLocale($r['prezzo_vendita'], 2).' &euro;' : '-').' '.($visualizza_costi ? Translator::numberToLocale($r['prezzo_vendita'], 2).' &euro;' : '-').'
</td>'; </td>';
@ -244,7 +246,7 @@ if (!empty($rs2)) {
$sconto = '-'; $sconto = '-';
} }
$body .= ' echo '
<td align="center" valign="top"> <td align="center" valign="top">
'.($visualizza_costi ? $sconto : '-').' '.($visualizza_costi ? $sconto : '-').'
</td>'; </td>';
@ -252,7 +254,7 @@ if (!empty($rs2)) {
// Prezzo totale // Prezzo totale
$netto = ($r['prezzo_vendita'] - $r['sconto']) * $r['qta']; $netto = ($r['prezzo_vendita'] - $r['sconto']) * $r['qta'];
$body .= ' echo '
<td align="right" valign="top"> <td align="right" valign="top">
'.($visualizza_costi ? Translator::numberToLocale($netto, 2) : '-').' '.($visualizza_costi ? Translator::numberToLocale($netto, 2) : '-').'
</td> </td>
@ -267,7 +269,7 @@ if (!empty($rs2)) {
if ($visualizza_costi) { if ($visualizza_costi) {
// Totale spese aggiuntive // Totale spese aggiuntive
$body .= ' echo '
<tr> <tr>
<td colspan="5" align="right"> <td colspan="5" align="right">
<b>'.strtoupper(tr('Totale spese aggiuntive')).':</b> <b>'.strtoupper(tr('Totale spese aggiuntive')).':</b>
@ -279,14 +281,14 @@ if (!empty($rs2)) {
</tr>'; </tr>';
} }
$body .= ' echo '
</table>'; </table>';
} }
// FINE SPESE AGGIUNTIVE // FINE SPESE AGGIUNTIVE
// ORE TECNICI + FIRMA // ORE TECNICI + FIRMA
$body .= ' echo '
<table class="table_values" cellspacing="0" cellpadding="0" style="table-layout:fixed;"> <table class="table_values" cellspacing="0" cellpadding="0" style="table-layout:fixed;">
<col width="362"><col width="80"><col width="70"><col width="70"><col width="74"> <col width="362"><col width="80"><col width="70"><col width="70"><col width="74">
@ -297,7 +299,7 @@ $body .= '
</tr>'; </tr>';
// INTESTAZIONE ELENCO TECNICI // INTESTAZIONE ELENCO TECNICI
$body .= ' echo '
<tr> <tr>
<td align="center" style="font-size:8pt;" bgcolor="#dddddd"> <td align="center" style="font-size:8pt;" bgcolor="#dddddd">
<b>'.tr('Tecnico').'</b> <b>'.tr('Tecnico').'</b>
@ -332,35 +334,35 @@ $totale_manodopera = 0;
$totale_viaggio = 0; $totale_viaggio = 0;
foreach ($rst as $r) { foreach ($rst as $r) {
$body .= ' echo '
<tr>'; <tr>';
// nome tecnico // nome tecnico
$body .= ' echo '
<td align="left"> <td align="left">
'.$r['ragione_sociale'].' '.$r['ragione_sociale'].'
</td>'; </td>';
// data // data
$body .= ' echo '
<td align="center"> <td align="center">
'.Translator::dateToLocale($r['orario_inizio'], '-').' '.Translator::dateToLocale($r['orario_inizio'], '-').'
</td>'; </td>';
// ora inizio // ora inizio
$body .= ' echo '
<td align="center"> <td align="center">
'.Translator::timeToLocale($r['orario_inizio'], '-').' '.Translator::timeToLocale($r['orario_inizio'], '-').'
</td>'; </td>';
// ora fine // ora fine
$body .= ' echo '
<td align="center"> <td align="center">
'.Translator::timeToLocale($r['orario_fine'], '-').' '.Translator::timeToLocale($r['orario_fine'], '-').'
</td>'; </td>';
// Sconto // Sconto
$body .= ' echo '
<td align="center"> <td align="center">
'.($r['sconto_unitario'] > 0 ? Translator::numberToLocale($r['sconto_unitario']).($r['tipo_sconto'] == 'PRC' ? '%' : ' &euro;') : '-').' '.($r['sconto_unitario'] > 0 ? Translator::numberToLocale($r['sconto_unitario']).($r['tipo_sconto'] == 'PRC' ? '%' : ' &euro;') : '-').'
</td> </td>
@ -383,11 +385,11 @@ $totale_intervento = sum($totale_manodopera, $totale_viaggio);
$totale[] = $totale_intervento; $totale[] = $totale_intervento;
$body .= ' echo '
</table>'; </table>';
// ore lavorate // ore lavorate
$body .= ' echo '
<table class="table_values" cellspacing="0" cellpadding="0" style="table-layout:fixed; font-size:11px;"> <table class="table_values" cellspacing="0" cellpadding="0" style="table-layout:fixed; font-size:11px;">
<col width="90"><col width="326"><col width="80"><col width="80"><col width="80"> <col width="90"><col width="326"><col width="80"><col width="80"><col width="80">
@ -412,7 +414,7 @@ $body .= '
</tr>'; </tr>';
// Ore lavoro // Ore lavoro
$body .= ' echo '
<tr> <tr>
<td></td> <td></td>
@ -425,7 +427,7 @@ $body .= '
</td>'; </td>';
if ($visualizza_costi) { if ($visualizza_costi) {
$body .= ' echo '
<td align="right"> <td align="right">
'.Translator::numberToLocale($totale_costo_ore, 2).' &euro; '.Translator::numberToLocale($totale_costo_ore, 2).' &euro;
</td> </td>
@ -434,17 +436,17 @@ if ($visualizza_costi) {
'.Translator::numberToLocale($totale_manodopera, 2).' &euro; '.Translator::numberToLocale($totale_manodopera, 2).' &euro;
</td>'; </td>';
} else { } else {
$body .= ' echo '
<td align="right">-</td> <td align="right">-</td>
<td align="right">-</td>'; <td align="right">-</td>';
} }
$body .= ' echo '
</tr>'; </tr>';
// Ore di viaggio // Ore di viaggio
if ($totale_km > 0) { if ($totale_km > 0) {
$body .= ' echo '
<tr> <tr>
<td></td> <td></td>
@ -457,7 +459,7 @@ if ($totale_km > 0) {
</td>'; </td>';
if ($visualizza_costi) { if ($visualizza_costi) {
$body .= ' echo '
<td align="right"> <td align="right">
'.Translator::numberToLocale($totale_costo_km, 2).' &euro; '.Translator::numberToLocale($totale_costo_km, 2).' &euro;
</td> </td>
@ -466,17 +468,17 @@ if ($totale_km > 0) {
'.Translator::numberToLocale($totale_viaggio, 2).' &euro; '.Translator::numberToLocale($totale_viaggio, 2).' &euro;
</td>'; </td>';
} else { } else {
$body .= ' echo '
<td align="right">-</td> <td align="right">-</td>
<td align="right">-</td>'; <td align="right">-</td>';
} }
$body .= ' echo '
</tr>'; </tr>';
} }
// Subtotale manodopera + viaggio // Subtotale manodopera + viaggio
if ($visualizza_costi) { if ($visualizza_costi) {
$body .= ' echo '
<tr> <tr>
<td colspan="4" align="right"> <td colspan="4" align="right">
<b>'.strtoupper(tr('Totale intervento')).':</b> <b>'.strtoupper(tr('Totale intervento')).':</b>
@ -488,14 +490,14 @@ if ($visualizza_costi) {
</tr>'; </tr>';
} }
$body .= ' echo '
</table>'; </table>';
$totale = sum($totale); $totale = sum($totale);
// TOTALE COSTI FINALI // TOTALE COSTI FINALI
if ($visualizza_costi) { if ($visualizza_costi) {
$body .= ' echo '
<br> <br>
<nobreak> <nobreak>
@ -503,7 +505,7 @@ if ($visualizza_costi) {
<col width="630"><col width="80">'; <col width="630"><col width="80">';
// Totale imponibile // Totale imponibile
$body .= ' echo '
<tr> <tr>
<td valign="middle" align="right"> <td valign="middle" align="right">
<b>'.strtoupper(tr('Imponibile')).':</b> <b>'.strtoupper(tr('Imponibile')).':</b>
@ -523,7 +525,7 @@ if ($visualizza_costi) {
$totale = sum($totale, -$records[0]['sconto_globale']); $totale = sum($totale, -$records[0]['sconto_globale']);
$body .= ' echo '
<tr> <tr>
<td valign="middle" align="right"> <td valign="middle" align="right">
<b>'.strtoupper(tr('Sconto incondizionato')).':</b> <b>'.strtoupper(tr('Sconto incondizionato')).':</b>
@ -535,7 +537,7 @@ if ($visualizza_costi) {
</tr>'; </tr>';
// Imponibile scontato // Imponibile scontato
$body .= ' echo '
<tr> <tr>
<td valign="middle" align="right"> <td valign="middle" align="right">
<b>'.strtoupper(tr('Imponibile scontato')).':</b> <b>'.strtoupper(tr('Imponibile scontato')).':</b>
@ -556,7 +558,7 @@ if ($visualizza_costi) {
// IVA // IVA
// Totale intervento // Totale intervento
$body .= ' echo '
<tr> <tr>
<td valign="middle" align="right"> <td valign="middle" align="right">
<b>'.strtoupper(tr('Iva')).' ('.Translator::numberToLocale($percentuale_iva, 0).'%):</b> <b>'.strtoupper(tr('Iva')).' ('.Translator::numberToLocale($percentuale_iva, 0).'%):</b>
@ -570,7 +572,7 @@ if ($visualizza_costi) {
$totale = sum($totale, $iva); $totale = sum($totale, $iva);
// TOTALE INTERVENTO // TOTALE INTERVENTO
$body .= ' echo '
<tr> <tr>
<td valign="middle" align="right"> <td valign="middle" align="right">
<b>'.strtoupper(tr('Totale intervento')).':</b> <b>'.strtoupper(tr('Totale intervento')).':</b>
@ -590,7 +592,7 @@ if ($records[0]['firma_file'] != '') {
$firma = ''; $firma = '';
} }
$body .= ' echo '
<br> <br>
<table border="0" cellspacing="0" cellpadding="0" style="table-layout:fixed;"> <table border="0" cellspacing="0" cellpadding="0" style="table-layout:fixed;">
@ -606,5 +608,3 @@ $body .= '
</td> </td>
</tr> </tr>
</table>'; </table>';
$report_name = 'intervento_'.$idintervento.'.pdf';

View File

@ -0,0 +1,18 @@
<?php
echo '
<div class="row">
<div class="col-xs-6">
<img src="'.__DIR__.'/logo_azienda.jpg" alt="Logo" border="0"/>
</div>
<div class="col-xs-6 text-right">
<p><b>$f_ragionesociale$</b></p>
<p>$f_indirizzo$ $f_citta$</p>
<p>$f_piva$</p>
<p>$f_codicefiscale$</p>
<p>$f_capsoc$</p>
<p>$f_telefono$</p>
<p>$f_sitoweb$</p>
<p>$f_email$</p>
</div>
</div>';

View File

@ -10,7 +10,6 @@ $module_name = 'Interventi';
$query = 'SELECT in_interventi.*, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=idclientefinale) AS clientefinale, (SELECT numero FROM co_preventivi WHERE id=(SELECT idpreventivo FROM co_preventivi_interventi WHERE idintervento=in_interventi.id ORDER BY idpreventivo DESC LIMIT 0,1)) AS numero_preventivo, (SELECT SUM(prezzo_dirittochiamata) FROM in_interventi_tecnici GROUP BY idintervento HAVING idintervento=in_interventi.id) AS `tot_dirittochiamata`, (SELECT SUM(km) FROM in_interventi_tecnici GROUP BY idintervento HAVING idintervento=in_interventi.id) AS `tot_km`, (SELECT SUM(ore*prezzo_ore_unitario) FROM in_interventi_tecnici GROUP BY idintervento HAVING idintervento=in_interventi.id) AS `tot_ore_consuntivo`, (SELECT SUM(prezzo_km_consuntivo) FROM in_interventi_tecnici GROUP BY idintervento HAVING idintervento=in_interventi.id) AS `tot_km_consuntivo`, in_interventi.descrizione AS `descrizione_intervento`, richiesta FROM in_interventi INNER JOIN in_tipiintervento ON in_interventi.idtipointervento=in_tipiintervento.idtipointervento WHERE id='.prepare($idintervento).' '.Modules::getAdditionalsQuery('Interventi'); $query = 'SELECT in_interventi.*, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=idclientefinale) AS clientefinale, (SELECT numero FROM co_preventivi WHERE id=(SELECT idpreventivo FROM co_preventivi_interventi WHERE idintervento=in_interventi.id ORDER BY idpreventivo DESC LIMIT 0,1)) AS numero_preventivo, (SELECT SUM(prezzo_dirittochiamata) FROM in_interventi_tecnici GROUP BY idintervento HAVING idintervento=in_interventi.id) AS `tot_dirittochiamata`, (SELECT SUM(km) FROM in_interventi_tecnici GROUP BY idintervento HAVING idintervento=in_interventi.id) AS `tot_km`, (SELECT SUM(ore*prezzo_ore_unitario) FROM in_interventi_tecnici GROUP BY idintervento HAVING idintervento=in_interventi.id) AS `tot_ore_consuntivo`, (SELECT SUM(prezzo_km_consuntivo) FROM in_interventi_tecnici GROUP BY idintervento HAVING idintervento=in_interventi.id) AS `tot_km_consuntivo`, in_interventi.descrizione AS `descrizione_intervento`, richiesta FROM in_interventi INNER JOIN in_tipiintervento ON in_interventi.idtipointervento=in_tipiintervento.idtipointervento WHERE id='.prepare($idintervento).' '.Modules::getAdditionalsQuery('Interventi');
$records = $dbo->fetchArray($query); $records = $dbo->fetchArray($query);
$id_anagrafica = $records[0]['idanagrafica'];
$id_cliente = $records[0]['idanagrafica']; $id_cliente = $records[0]['idanagrafica'];
$id_sede = $records[0]['idsede']; $id_sede = $records[0]['idsede'];
@ -24,11 +23,8 @@ if (!empty($records[0]['idreferente'])) {
// Sostituzioni specifiche // Sostituzioni specifiche
// Imposta numerointervento-data-numerocommessa su intestazione // Imposta numerointervento-data-numerocommessa su intestazione
$report = str_replace('$intervento_numero$', $records[0]['codice'], $report); $replaces = [
$report = str_replace('$intervento_data$', Translator::dateToLocale($records[0]['data_richiesta']), $report); 'intervento_numero' => $records[0]['codice'],
'intervento_data' => Translator::dateToLocale($records[0]['data_richiesta']),
if ($records[0]['numero_preventivo']) { 'commessa_numero' => !empty($records[0]['numero_preventivo']) ? $records[0]['codice'] : '&nbsp;',
$report = str_replace('$commessa_numero$', $records[0]['codice'], $report); ];
} else {
$report = str_replace('$commessa_numero$', '&nbsp;', $report);
}

View File

@ -1,65 +1,59 @@
<style> <style>
.table_values { .table_values {
border-top: 1px solid #888; border-top: 1px solid #888;
border-left: 1px solid #888; border-left: 1px solid #888;
} }
.table_values td{ .table_values td {
border-right: 1px solid #888; border-right: 1px solid #888;
border-bottom: 1px solid #888; border-bottom: 1px solid #888;
padding: 4px; padding: 4px;
} }
.check{ .check {
width: 10px; width: 10px;
height: 14px; height: 14px;
display: inline; display: inline;
background: transparent url($docroot$/templates/interventi/custom/check.png) center center no-repeat; background: transparent url($docroot$/templates/interventi/custom/check.png) center center no-repeat;
margin-right: 6px; margin-right: 6px;
margin-bottom: 4px; margin-bottom: 4px;
} }
.checked{ .checked {
width: 10px; width: 10px;
height: 14px; height: 14px;
display: inline; display: inline;
background: transparent url($docroot$/templates/interventi/custom/checked.png) center center no-repeat; background: transparent url($docroot$/templates/interventi/custom/checked.png) center center no-repeat;
margin-right: 6px; margin-right: 6px;
margin-bottom: 4px; margin-bottom: 4px;
} }
h5{ h5 {
margin: 4px 0 2px 0; margin: 4px 0 2px 0;
} }
h2 {
font-size: 15pt;
margin: 10px 0 2px 0;
}
h2{
font-size: 15pt;
margin: 10px 0 2px 0;
}
</style> </style>
<page backcolor="#ffffff" backtop="30mm" backbottom="3mm" backleft="0mm" backright="0mm" footer="" style="font-size: $font_size$"> <page backcolor="#ffffff" backtop="30mm" backbottom="3mm" backleft="0mm" backright="0mm" footer="" style="font-size: $font_size$">
$body$ $body$
</page> </page>
<page_header> <page_header>
<table style="height:35mm;border:0px;"> <table style="height:35mm;border:0px;">
<tr> <tr>
<td style="width:97mm;" align="left"> <td style="width:97mm;" align="left">
<img src="$docroot$/templates/interventi/logo_azienda.jpg" alt="Logo" border="0" style="width:60mm;" /> <img src="$docroot$/templates/interventi/logo_azienda.jpg" alt="Logo" border="0" style="width:60mm;" />
</td> </td>
<td style="width:97mm; font-size:10pt;text-align:right;"> <td style="width:97mm; font-size:10pt;text-align:right;">
<b>$f_ragionesociale$</b> <b>$f_ragionesociale$</b> $f_indirizzo$ $f_citta$ $f_piva$ $f_codicefiscale$ $f_capsoc$ $f_telefono$ $f_sitoweb$
$f_indirizzo$ $f_email$
$f_citta$ </td>
$f_piva$ </tr>
$f_codicefiscale$ </table>
$f_capsoc$
$f_telefono$
$f_sitoweb$
$f_email$
</td>
</tr>
</table>
</page_header> </page_header>

View File

@ -53,7 +53,7 @@ $sconto = 0.00;
/* /*
Articoli Articoli
*/ */
$q_art = "SELECT *, GROUP_CONCAT( CONCAT_WS(lotto, 'Lotto: ', ', '), CONCAT_WS(serial, 'SN: ', ', '), CONCAT_WS(altro, 'Altro: ', '') SEPARATOR '<br/>') AS codice, SUM(qta) AS sumqta FROM `or_righe_ordini` GROUP BY idarticolo, idordine, lotto HAVING idordine='$idordine' AND NOT idarticolo='0' ORDER BY idarticolo ASC"; $q_art = "SELECT *, CONCAT_WS(serial, 'SN: ', ', ') AS codice, SUM(qta) AS sumqta FROM `or_righe_ordini` JOIN mg_prodotti ON or_righe_ordini.idarticolo = mg_prodotti.id_articolo GROUP BY idarticolo, idordine, lotto HAVING idordine='$idordine' AND NOT idarticolo='0' ORDER BY idarticolo ASC";
$rs_art = $dbo->fetchArray($q_art); $rs_art = $dbo->fetchArray($q_art);
$tot_art = sizeof($rs_art); $tot_art = sizeof($rs_art);
$imponibile_art = 0.0; $imponibile_art = 0.0;

View File

@ -5,6 +5,36 @@
*/ */
include_once __DIR__.'/../core.php'; include_once __DIR__.'/../core.php';
// Valori aggiuntivi per la sostituzione
$values = [
'footer' => !empty($footer) ? $footer : '',
'dicitura_fissa_fattura' => get_var('Dicitura fissa fattura'),
'pagination' => '
<table style="color:#aaa; font-size:10px;">
<tr>
<td align="left" style="width:97mm;">
'.tr('Stampato con OpenSTAManager').'
</td>
<td align="right" style="width:97mm;">
'.str_replace(['_PAGE_', '_TOTAL_'], ['{PAGENO}', '{nb}'], tr('Pagina _PAGE_ di _TOTAL_')).'
</td>
</tr>
</table>',
];
$values = array_merge($values, (array) $replaces);
foreach ($values as $key => $value) {
$values['$'.$key.'$'] = $value;
unset($values[$key]);
}
// Sostituisce alle variabili del template i valori
$head = str_replace(array_keys($values), array_values($values), $head);
$foot = str_replace(array_keys($values), array_values($values), $foot);
$report = str_replace(array_keys($values), array_values($values), $report);
// Retrocompatibilità // Retrocompatibilità
$id_cliente = $id_cliente ?: $idcliente; $id_cliente = $id_cliente ?: $idcliente;
@ -57,7 +87,6 @@ foreach ($replace as $prefix => $values) {
} }
$values['codice'] = !empty($values['codice']) ? $values['codice'].',' : ''; $values['codice'] = !empty($values['codice']) ? $values['codice'].',' : '';
$values['ragionesociale'] = !empty($values['ragionesociale']) ? $values['ragionesociale'].',' : '';
$values['provincia'] = !empty($values['provincia']) ? '('.$values['provincia'].')' : ''; $values['provincia'] = !empty($values['provincia']) ? '('.$values['provincia'].')' : '';
$citta = ''; $citta = '';
@ -71,7 +100,7 @@ foreach ($replace as $prefix => $values) {
if ($values['provincia'] != '') { if ($values['provincia'] != '') {
$citta .= ' '.$values['provincia']; $citta .= ' '.$values['provincia'];
} }
$citta .= '<br/>'; //$citta .= '<br/>';
$values['citta'] = $citta; $values['citta'] = $citta;
@ -96,46 +125,12 @@ foreach ($replace as $prefix => $values) {
} }
foreach ($values as $key => $value) { foreach ($values as $key => $value) {
$values['$'.$prefix.$key.'$'] = empty($value) ? $value : $value.'<br/>'; $values['$'.$prefix.$key.'$'] = empty($value) ? $value : $value; // .'<br/>'
unset($values[$key]); unset($values[$key]);
} }
// Sostituisce alle variabili del template i valori // Sostituisce alle variabili del template i valori
$body = str_replace(array_keys($values), array_values($values), $body); $head = str_replace(array_keys($values), array_values($values), $head);
$foot = str_replace(array_keys($values), array_values($values), $foot);
$report = str_replace(array_keys($values), array_values($values), $report); $report = str_replace(array_keys($values), array_values($values), $report);
} }
// Aggiunta del footer standard
if (!str_contains($body, '<page_footer>') && !str_contains($report, '<page_footer>')) {
$report .= '
<!-- Footer -->
<page_footer>
$pagination$
</page_footer>';
}
// Valori aggiuntivi per la sostituzione
$values = [
'dicitura_fissa_fattura' => get_var('Dicitura fissa fattura'),
'pagination' => '
<table style="color:#aaa; font-size:10px;">
<tr>
<td align="left" style="width:97mm;">
'.tr('Stampato con OpenSTAManager').'
</td>
<td align="right" style="width:97mm;">
'.str_replace(['_PAGE_', '_TOTAL_'], ['[[page_cu]]', '[[page_nb]]'], tr('Pagina _PAGE_ di _TOTAL_')).'
</td>
</tr>
</table>',
];
foreach ($values as $key => $value) {
$values['$'.$key.'$'] = empty($value) ? $value : $value.'<br/>';
unset($values[$key]);
}
// Sostituisce alle variabili del template i valori
$body = str_replace(array_keys($values), array_values($values), $body);
$report = str_replace(array_keys($values), array_values($values), $report);

View File

@ -192,7 +192,7 @@ if (sizeof($preventivi) > 0) {
$body .= "<br/>\n"; $body .= "<br/>\n";
// Conteggio articoli utilizzati // Conteggio articoli utilizzati
$query = "SELECT *, (SELECT orario_inizio FROM in_interventi_tecnici GROUP BY idintervento HAVING idintervento = mg_articoli_interventi.idintervento) AS data_intervento, (SELECT percentuale FROM co_iva WHERE id=mg_articoli_interventi.idiva_vendita) AS prciva_vendita, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice_art, GROUP_CONCAT( CONCAT_WS(lotto, 'Lotto: ', ', '), CONCAT_WS(serial, 'SN: ', ', '), CONCAT_WS(altro, 'Altro: ', '') SEPARATOR '<br/>') AS codice, SUM(qta) AS sumqta FROM `mg_articoli_interventi` GROUP BY idarticolo, idintervento, lotto HAVING ".(!empty($idinterventi) ? 'idintervento IN('.implode(',', $idinterventi).') AND ' : '')." NOT idarticolo='0' ORDER BY idarticolo ASC"; $query = "SELECT *, (SELECT orario_inizio FROM in_interventi_tecnici GROUP BY idintervento HAVING idintervento = mg_articoli_interventi.idintervento) AS data_intervento, (SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT idlistino FROM an_anagrafiche WHERE idanagrafica=(SELECT idanagrafica FROM in_interventi WHERE id=mg_articoli_interventi.idintervento) ) ) AS prc_guadagno,(SELECT percentuale FROM co_iva WHERE id=mg_articoli_interventi.idiva_vendita) AS prciva_vendita, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice_art, CONCAT_WS(serial, 'SN: ', ', ') AS codice, SUM(qta) AS sumqta FROM `mg_articoli_interventi` JOIN mg_prodotti ON mg_articoli_interventi.idarticolo = mg_prodotti.id_articolo GROUP BY idarticolo, idintervento, lotto HAVING ".(!empty($idinterventi) ? 'idintervento IN('.implode(',', $idinterventi).') AND ' : '')." NOT idarticolo='0' ORDER BY idarticolo ASC";
$rs2 = $dbo->fetchArray($query); $rs2 = $dbo->fetchArray($query);
if (sizeof($rs2) > 0) { if (sizeof($rs2) > 0) {

View File

@ -275,7 +275,7 @@ if (sizeof($info_intervento) > 0) {
} }
// Conteggio articoli utilizzati // Conteggio articoli utilizzati
$query = "SELECT *, (SELECT percentuale FROM co_iva WHERE id=(SELECT idiva_vendita FROM mg_articoli WHERE id=idarticolo)) AS prciva_vendita, (SELECT orario_inizio FROM in_interventi_tecnici WHERE idintervento=mg_articoli_interventi.idintervento GROUP BY idintervento HAVING idintervento=mg_articoli_interventi.idintervento) AS data_intervento, (SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT idlistino FROM an_anagrafiche WHERE idanagrafica=(SELECT idanagrafica FROM in_interventi WHERE id=mg_articoli_interventi.idintervento) ) ) AS prc_guadagno, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice_art, GROUP_CONCAT( CONCAT_WS(lotto, 'Lotto: ', ', '), CONCAT_WS(serial, 'SN: ', ', '), CONCAT_WS(altro, 'Altro: ', '') SEPARATOR '<br/>') AS codice, SUM(qta) AS sumqta FROM `mg_articoli_interventi` GROUP BY idarticolo, idintervento, lotto HAVING idintervento IN(".implode(',', $idinterventi).") AND NOT idarticolo='0' ORDER BY idarticolo ASC"; $query = "SELECT *, (SELECT percentuale FROM co_iva WHERE id=(SELECT idiva_vendita FROM mg_articoli WHERE id=idarticolo)) AS prciva_vendita, (SELECT orario_inizio FROM in_interventi_tecnici WHERE idintervento=mg_articoli_interventi.idintervento GROUP BY idintervento HAVING idintervento=mg_articoli_interventi.idintervento) AS data_intervento, (SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT idlistino FROM an_anagrafiche WHERE idanagrafica=(SELECT idanagrafica FROM in_interventi WHERE id=mg_articoli_interventi.idintervento) ) ) AS prc_guadagno, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice_art, CONCAT_WS(serial, 'SN: ', ', ') AS codice, SUM(qta) AS sumqta FROM `mg_articoli_interventi` JOIN mg_prodotti ON mg_articoli_interventi.idarticolo = mg_prodotti.id_articolo GROUP BY idarticolo, idintervento, lotto HAVING idintervento IN(".implode(',', $idinterventi).") AND NOT idarticolo='0' ORDER BY idarticolo ASC";
$rs2 = $dbo->fetchArray($query); $rs2 = $dbo->fetchArray($query);
if (sizeof($rs2) > 0) { if (sizeof($rs2) > 0) {
$body .= "<table style=\"width:100%;\" class=\"table_values\" cellspacing=\"2\" cellpadding=\"5\" style=\"border-color:#aaa;\">\n"; $body .= "<table style=\"width:100%;\" class=\"table_values\" cellspacing=\"2\" cellpadding=\"5\" style=\"border-color:#aaa;\">\n";

View File

@ -906,3 +906,7 @@ UPDATE `co_righe_documenti` SET `abilita_serial` = 1 WHERE `idarticolo` IN (SELE
UPDATE `dt_righe_ddt` SET `abilita_serial` = 1 WHERE `idarticolo` IN (SELECT `id_articolo` FROM `mg_prodotti`); UPDATE `dt_righe_ddt` SET `abilita_serial` = 1 WHERE `idarticolo` IN (SELECT `id_articolo` FROM `mg_prodotti`);
UPDATE `mg_articoli_interventi` SET `abilita_serial` = 1 WHERE `idarticolo` IN (SELECT `id_articolo` FROM `mg_prodotti`); UPDATE `mg_articoli_interventi` SET `abilita_serial` = 1 WHERE `idarticolo` IN (SELECT `id_articolo` FROM `mg_prodotti`);
UPDATE `or_righe_ordini` SET `abilita_serial` = 1 WHERE `idarticolo` IN (SELECT `id_articolo` FROM `mg_prodotti`); UPDATE `or_righe_ordini` SET `abilita_serial` = 1 WHERE `idarticolo` IN (SELECT `id_articolo` FROM `mg_prodotti`);
-- Rimozione sconto/rincaro per i preventivi
UPDATE `co_righe_preventivi` SET `sconto_unitario` = `prc_guadagno`, `tipo_sconto` = 'PRC', `sconto` = `prc_guadagno` * `qta` WHERE `prc_guadagno` != 0;
ALTER TABLE `co_righe_preventivi ` DROP `prc_guadagno `;