Merge branch 'master' into 2.4.6

This commit is contained in:
Thomas Zilio 2019-01-10 18:11:09 +01:00
commit a8b9177447
10 changed files with 137 additions and 29 deletions

View File

@ -31,6 +31,7 @@ foreach ($namespaces as $path => $namespace) {
}
// Inclusione dei file modutil.php
// TODO: sostituire * con lista module dir {aggiornamenti,anagrafiche,articoli}
$files = glob(__DIR__.'/{modules,plugins}/*/modutil.php', GLOB_BRACE);
$custom_files = glob(__DIR__.'/{modules,plugins}/*/custom/modutil.php', GLOB_BRACE);
foreach ($custom_files as $key => $value) {

View File

@ -234,6 +234,18 @@ if ($dir == 'uscita') {
{[ "type": "checkbox", "label": "<?php echo tr('Split payment'); ?>", "name": "split_payment", "value": "$split_payment$", "help": "<?php echo tr('Abilita lo split payment per questo documento.'); ?>", "placeholder": "<?php echo tr('Split payment'); ?>" ]}
</div>
<?php
//TODO: Fattura per conto del fornitore (es. cooperative agricole che emettono la fattura per conto dei propri soci produttori agricoli conferenti)
if ($dir == 'entrata') {
?>
<div class="col-md-3">
{[ "type": "checkbox", "label": "<?php echo tr('Fattura per conto terzi'); ?>", "name": "is_fattura_conto_terzi", "value": "$is_fattura_conto_terzi$", "help": "<?php echo tr('Nell\'xml della FE imposta il cliente come cessionario e il fornitore come cedente/prestatore.'); ?>", "placeholder": "<?php echo tr('Fattura per conto terzi'); ?>" ]}
</div>
<?php
}
?>
</div>

View File

@ -5,7 +5,7 @@ include_once __DIR__.'/../../core.php';
use Modules\Ordini\Ordine;
/**
* Funzione per generare un nuovo numero per la fattura.
* Funzione per generare un nuovo numero per l'ordine.
*
* @deprecated 2.4.5
*/

View File

@ -23,7 +23,7 @@ switch (post('op')) {
$id_record = $preventivo->id;
flash()->info(tr('Aggiunto preventivo numero _NUM_!', [
'_NUM_' => $numero,
'_NUM_' => $preventivo['numero'],
]));
break;
@ -110,6 +110,7 @@ switch (post('op')) {
$numeropreventivo_template = str_replace('#', '%', $numeropreventivo_template);
$rs = $dbo->fetchArray('SELECT numero FROM co_preventivi WHERE numero LIKE('.prepare(Util\Generator::complete($numeropreventivo_template)).') ORDER BY numero DESC LIMIT 0,1');
$numero = Util\Generator::generate(setting('Formato codice preventivi'), $rs[0]['numero']);
$dbo->query('UPDATE co_preventivi SET idstato=1, numero = '.$numero.', master_revision = id WHERE id='.prepare($id_record));
@ -121,6 +122,7 @@ switch (post('op')) {
$dbo->query('DROP TEMPORARY TABLE tmp');
flash()->info(tr('Preventivo duplicato correttamente!'));
break;

View File

@ -1192,7 +1192,7 @@ class FatturaElettronica
// Importo Totale Documento (2.1.1.9)
// Importo totale del documento al netto dell'eventuale sconto e comprensivo di imposta a debito del cessionario / committente
$result['ImportoTotaleDocumento'] = $fattura->netto;
$result['ImportoTotaleDocumento'] = abs($fattura->netto);
return $result;
}

View File

@ -27,17 +27,67 @@ $citta = $sede['Comune'];
$provincia = $sede['Provincia'];
echo '
<h4>'.
$ragione_sociale.'<br>
<small>
'.(!empty($codice_fiscale) ? (tr('Codice Fiscale').': '.$codice_fiscale.'<br>') : '').'
'.(!empty($partita_iva) ? (tr('Partita IVA').': '.$partita_iva.'<br>') : '').'
'.$cap.' '.$citta.' ('.$provincia.')<br>
</small>
</h4><br>';
<div class="row" >
<div class="col-md-6" >
<h4>'.
$ragione_sociale.'<br>
<small>
'.(!empty($codice_fiscale) ? (tr('Codice Fiscale').': '.$codice_fiscale.'<br>') : '').'
'.(!empty($partita_iva) ? (tr('Partita IVA').': '.$partita_iva.'<br>') : '').'
'.$cap.' '.$citta.' ('.$provincia.')<br>
</small>
</h4>
</div>';
echo '
<div class="col-md-6">
<h4>'.$fattura_pa->getBody()['DatiGenerali']['DatiGeneraliDocumento']['Numero'].'<br>
<small>
'.database()->fetchOne('SELECT CONCAT("('.$fattura_pa->getBody()['DatiGenerali']['DatiGeneraliDocumento']['TipoDocumento'].') ", descrizione) AS descrizione FROM fe_tipi_documento WHERE codice = '.prepare($fattura_pa->getBody()['DatiGenerali']['DatiGeneraliDocumento']['TipoDocumento']))['descrizione'].'
<br>'.Translator::dateToLocale($fattura_pa->getBody()['DatiGenerali']['DatiGeneraliDocumento']['Data']).'
<br>'.$fattura_pa->getBody()['DatiGenerali']['DatiGeneraliDocumento']['Divisa'].'
</small>
</h4>
</div>
</div>';
// Pagamenti
$pagamenti = $fattura_pa->getBody()['DatiPagamento'];
// Se il blocco DatiPagamento è valorizzato (opzionale)
if (!empty($pagamenti)) {
$metodi = $pagamenti['DettaglioPagamento'];
$metodi = isset($metodi[0]) ? $metodi : [$metodi];
$codice_modalita_pagamento = $metodi[0]['ModalitaPagamento'];
echo '
<h4>'.tr('Pagamento').'</h4>
<p>'.tr('La fattura importata presenta _NUM_ rat_E_ di pagamento con le seguenti scadenze', [
'_NUM_' => count($metodi),
'_E_' => ((count($metodi)>1) ? 'e': 'a'),
]).':</p>
<ol>';
// Scadenze di pagamento
foreach ($metodi as $metodo) {
echo '
<li>';
//DataScadenzaPagamento è un nodo opzionale per il blocco DatiPagamento
if (!empty($metodo['DataScadenzaPagamento'])) {
echo Translator::dateToLocale($metodo['DataScadenzaPagamento']).' ';
}
echo Translator::numberToLocale($metodo['ImportoPagamento']).' &euro; ';
echo '('.((!empty($metodo['ModalitaPagamento'])) ? database()->fetchOne('SELECT descrizione FROM fe_modalita_pagamento WHERE codice = '.prepare($metodo['ModalitaPagamento']))['descrizione'] : '').')';
echo '
</li>';
}
echo '
</ol>';
}
$metodi = $pagamenti['DettaglioPagamento'];
$metodi = isset($metodi[0]) ? $metodi : [$metodi];

View File

@ -331,7 +331,7 @@ echo '
</th>
<td class="text-center" style="font-size:6pt;width:35%">
'.tr('I dati del ricevente verranno trattati in base al D.lgs n. 196/2003').'
'.tr('I dati del ricevente verrano trattati in base alla normativa europea UE 2016/679 del 27 aprile 2016 (GDPR)').'
</td>
</tr>
</thead>

View File

@ -2,14 +2,43 @@
include_once __DIR__.'/../../core.php';
function findKey($array, $keySearch)
{
foreach ($array as $key => $item) {
if ($key == $keySearch) {
return true;
} elseif (is_array($item) && findKey($item, $keySearch)) {
echo $key;
return true;
}
}
return false;
}
$report_name = 'ordine_'.$numero_ord.'.pdf';
$has_image = false;
// RIGHE ORDINE
$righe = $dbo->fetchArray("SELECT *,
IFNULL((SELECT `codice` FROM `mg_articoli` WHERE `id` = `or_righe_ordini`.`idarticolo`), '') AS codice_articolo,
IFNULL((SELECT `immagine` FROM `mg_articoli` WHERE `id` = `or_righe_ordini`.`idarticolo`), '') AS immagine_articolo,
(SELECT GROUP_CONCAT(`serial` SEPARATOR ', ') FROM `mg_prodotti` WHERE `id_riga_ordine` = `or_righe_ordini`.`id`) AS seriali,
(SELECT `percentuale` FROM `co_iva` WHERE `id` = `or_righe_ordini`.`idiva`) AS perc_iva
FROM `or_righe_ordini` WHERE idordine=".prepare($id_record).' ORDER BY `order`');
//controllo se gli articoli nell'ordine hanno un'immagine
if (findKey($righe, "immagine_articolo")) {
if (!empty($righe[(findKey($righe, "immagine_articolo")-1)]["immagine_articolo"])) {
$has_image = true;
}
}
$autofill = [
'count' => 0, // Conteggio delle righe
'words' => 70, // Numero di parolo dopo cui contare una riga nuova
'rows' => 20, // Numero di righe massimo presente nella pagina
'additional' => 15, // Numero di righe massimo da aggiungere
'columns' => 5, // Numero di colonne della tabella
'columns' => (($has_image) ? 6:5), // Numero di colonne della tabella
];
$sconto = [];
@ -20,8 +49,13 @@ $iva = [];
echo "
<table class='table table-striped table-bordered' id='contents'>
<thead>
<tr>
<th class='text-center' style='width:50%'>".tr('Descrizione', [], ['upper' => true])."</th>
<tr>";
if ($has_image) {
echo " <th class='text-center' style='width:20%'>".tr('Immagine', [], ['upper' => true])."</th>";
}
echo "
<th class='text-center' style='width:50%'>".tr('Descrizione', [], ['upper' => true])."</th>
<th class='text-center' style='width:10%'>".tr('Q.tà', [], ['upper' => true])."</th>
<th class='text-center' style='width:15%'>".tr('Prezzo unitario', [], ['upper' => true])."</th>
<th class='text-center' style='width:15%'>".tr('Importo', [], ['upper' => true])."</th>
@ -31,20 +65,28 @@ echo "
<tbody>';
// RIGHE PREVENTIVO CON ORDINAMENTO UNICO
$righe = $dbo->fetchArray("SELECT *,
IFNULL((SELECT `codice` FROM `mg_articoli` WHERE `id` = `or_righe_ordini`.`idarticolo`), '') AS codice_articolo,
(SELECT GROUP_CONCAT(`serial` SEPARATOR ', ') FROM `mg_prodotti` WHERE `id_riga_ordine` = `or_righe_ordini`.`id`) AS seriali,
(SELECT `percentuale` FROM `co_iva` WHERE `id` = `or_righe_ordini`.`idiva`) AS perc_iva
FROM `or_righe_ordini` WHERE idordine=".prepare($id_record).' ORDER BY `order`');
foreach ($righe as $r) {
$count = 0;
$count += ceil(strlen($r['descrizione']) / $autofill['words']);
$count += substr_count($r['descrizione'], PHP_EOL);
echo '
<tr>
<td>
<tr>';
if ($has_image) {
echo '
<td>';
if (!empty($r['immagine_articolo'])) {
echo '<img src="files/articoli/'.$r['immagine_articolo'].'" height="80"></img>';
}
echo '
</td>';
}
echo '
<td>';
echo '
'.nl2br($r['descrizione']);
// Codice articolo
@ -164,7 +206,7 @@ if ($options['pricing']) {
// Totale imponibile
echo '
<tr>
<td colspan="3" class="text-right border-top">
<td colspan="'.(($has_image) ? 4:3).'" class="text-right border-top">
<b>'.tr('Imponibile', [], ['upper' => true]).':</b>
</td>
@ -177,7 +219,7 @@ if ($options['pricing']) {
if (!empty($sconto)) {
echo '
<tr>
<td colspan="3" class="text-right border-top">
<td colspan="'.(($has_image) ? 4:3).'" class="text-right border-top">
<b>'.tr('Sconto', [], ['upper' => true]).':</b>
</td>
@ -189,7 +231,7 @@ if ($options['pricing']) {
// Imponibile scontato
echo '
<tr>
<td colspan="3" class="text-right border-top">
<td colspan="'.(($has_image) ? 4:3).'" class="text-right border-top">
<b>'.tr('Imponibile scontato', [], ['upper' => true]).':</b>
</td>
@ -202,7 +244,7 @@ if ($options['pricing']) {
// IVA
echo '
<tr>
<td colspan="3" class="text-right border-top">
<td colspan="'.(($has_image) ? 4:3).'" class="text-right border-top">
<b>'.tr('Totale IVA', [], ['upper' => true]).':</b>
</td>
@ -216,7 +258,7 @@ if ($options['pricing']) {
// TOTALE
echo '
<tr>
<td colspan="3" class="text-right border-top">
<td colspan="'.(($has_image) ? 4:3).'" class="text-right border-top">
<b>'.tr('Quotazione totale', [], ['upper' => true]).':</b>
</td>
<th colspan="2" class="text-center">

View File

@ -82,7 +82,7 @@ echo "
<tbody>';
// RIGHE PREVENTIVO CON ORDINAMENTO UNICO
$righe = $dbo->fetchArray("SELECT *, IFNULL((SELECT codice FROM mg_articoli WHERE id=idarticolo),'') AS codice, (SELECT percentuale FROM co_iva WHERE id=idiva) AS perc_iva FROM `co_righe_preventivi` WHERE idpreventivo=".prepare($id_record).' ORDER BY `order`');
$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_preventivi` WHERE idpreventivo=".prepare($id_record).' ORDER BY `order`');
foreach ($righe as $r) {
$count = 0;
$count += ceil(strlen($r['descrizione']) / $autofill['words']);

1
update/2_4_6.sql Normal file
View File

@ -0,0 +1 @@
ALTER TABLE `co_righe_documenti` ADD `ritenutaenasarco` DECIMAL(12,4) NOT NULL AFTER `ritenutaacconto`;