mirror of
https://github.com/devcode-it/openstamanager.git
synced 2024-12-26 07:44:02 +01:00
Merge branch 'master' into 2.4.6
This commit is contained in:
commit
a8b9177447
1
core.php
1
core.php
@ -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) {
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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
|
||||
*/
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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']).' € ';
|
||||
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];
|
||||
|
@ -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>
|
||||
|
@ -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">
|
||||
|
@ -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
1
update/2_4_6.sql
Normal file
@ -0,0 +1 @@
|
||||
ALTER TABLE `co_righe_documenti` ADD `ritenutaenasarco` DECIMAL(12,4) NOT NULL AFTER `ritenutaacconto`;
|
Loading…
Reference in New Issue
Block a user