1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-02-02 00:46:44 +01:00

Merge branch 'master' into 2.4

This commit is contained in:
Thomas Zilio 2018-02-11 20:24:29 +01:00
commit a6844f502b
23 changed files with 279 additions and 236 deletions

View File

@ -96,7 +96,7 @@ if (!empty($module_query) && $module_query != 'menu' && $module_query != 'custom
unset($pieces[$cont - 1]);
}
$module_query = implode('ORDER', $pieces).' ORDER BY `'.$total['order_by'][$order['column']].'` '.$order['dir'];
$module_query = implode('ORDER', $pieces).' ORDER BY '.$total['order_by'][$order['column']].' '.$order['dir'];
}
// Calcolo di eventuali somme

View File

@ -23,6 +23,10 @@
"type": "project",
"require": {
"php": ">=5.6",
"ext-mbstring": "*",
"ext-pdo_mysql": "*",
"aluguest/ical-easy-reader": "^1.5",
"danielstjules/stringy": "^3.1",
"ezyang/htmlpurifier": "^4.8",
@ -41,6 +45,9 @@
"symfony/translation": "^3.3",
"symfony/var-dumper": "^3.3"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^2.10"
},
"autoload": {
"psr-4": {
"": "src/"

View File

@ -40,6 +40,9 @@ menu:
api:
text: API
relativeUrl: api.html
contribuire:
text: Contribuire
relativeUrl: contributing.html
structure:
name: Approfondimenti
items:

View File

@ -1,3 +1,7 @@
---
currentMenu: contribuire
---
# Contribuire
Sei interessato a contribuire allo sviluppo di OpenSTAManger? Ottimo, sei il benvenuto!
@ -28,7 +32,7 @@ PHP CS Fixer viene utilizzato per formattare automaticamente il codice PHP e aum
La configurazione può essere trovata nel file [.php_cs](https://github.com/devcode-it/openstamanager/blob/master/.php_cs).
EditorConfig viene sfruttato per mantenere la consistenza nella formattazione di base dei diversi altri file utilizzati nel progetto.
La configurazione può essere trovata nel file [.php_cs](https://github.com/devcode-it/openstamanager/blob/master/.editorconfig).
La configurazione può essere trovata nel file [.editorconfig](https://github.com/devcode-it/openstamanager/blob/master/.editorconfig).
Maggiori informazioni sui plugin che permettono di integrare questi strumenti sono disponibili nei relativi siti.

View File

@ -1,84 +0,0 @@
---
currentMenu: contribuire
---
# Contribuire
Sei interessato a contribuire allo sviluppo di OpenSTAManger? Ottimo, sei il benvenuto!
Siamo entusiasti di ogni nuova contribuzione che otteniamo dalla nostra community.
Ci sono molti modi per contribuire: segnalare bug, richiedere miglioramenti, scrivere tutorial, migliorare la documentazione...
Non serve essere degli esperti programmatori per aiutarci! :smile_cat:
Leggi le seguenti sezioni per scoprire come ti consigliamo di procedere.
Se ti serve un aiuto, crea una issue su GitHub.
<!-- TOC depthFrom:2 depthTo:6 orderedList:false updateOnSave:true withLinks:true -->
- [Linee guida](#linee-guida)
- [Codice di condotta](#codice-di-condotta)
- [Stile del codice](#stile-del-codice)
- [Prima contribuzione](#prima-contribuzione)
- [Problemi di sicurezza](#problemi-di-sicurezza)
- [Segnalare un bug](#segnalare-un-bug)
- [Pull Request](#pull-request)
- [Community](#community)
<!-- /TOC -->
## Linee guida
Per migliorare il sistema con cui sviluppiamo il codice, abbiamo deciso di adottare alcune linee guida per facilitare la collaborazione tra più persone.
### Codice di condotta
Per il momento non abbiamo adottato un vero e proprio codice di condotta, ma ti chiediamo di essere il più civile possibile nel comunicare con gli altri per questo progetto.
### Stile del codice
Utilizziamo principalmente due strumenti per mantenere consistente nel tempo lo stile del codice:
- [PHP CS Fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer)
- [EditorConfig](http://editorconfig.org>)
PHP CS Fixer viene utilizzato per formattare automaticamente il codice PHP e aumentare la sua comprensibilità.
La configurazione può essere trovata nel file [.php_cs](https://github.com/devcode-it/openstamanager/blob/master/.php_cs).
EditorConfig viene sfruttato per mantenere la consistenza nella formattazione di base dei diversi altri file utilizzati nel progetto.
La configurazione può essere trovata nel file [.php_cs](https://github.com/devcode-it/openstamanager/blob/master/.editorconfig).
Maggiori informazioni sui plugin che permettono di integrare questi strumenti sono disponibili nei relativi siti.
## Prima contribuzione
Sei insicuro su cosa potresti lavorare per contribuire al progetto?
Prova a dare un'occhiata alle issue sotto la label [nuovi contributori](https://github.com/devcode-it/openstamanager/labels/nuovi%20contributori), dove sono indicate le migliorie più semplici da applicare.
## Problemi di sicurezza
Se trovi un problema di sicurezza, NON aprire una issue. Inviaci un'email all'indirizzo `info at openstamanager dot com`.
Per capire se hai individuato un problema di sicurezza, prova a farti queste domande:
* Posso accedere a qualcosa a cui non dovrei avere accesso?
* Posso disabilitare qualcosa per altre persone?
Se la risposta a una di queste domande è positiva, allora probabilmente hai individuato un problema di sicurezza.
Considera però che anche in caso negativo potrebbe trattarsi di un problema di questo tipo, quindi se sei insicuro contattaci comunque via email.
## Segnalare un bug
Se hai individuato un bug e desideri segnalarlo, apri una nuova issue provando a mantenerti sulla base del [file di template su GitHub](https://github.com/devcode-it/openstamanager/blob/master/.github/ISSUE_TEMPLATE.md).
Se vuoi suggerire una miglioramento di qualche tipo oppure una nuova funzionalità, sentiti libero di aprire una issue apposita dove spieghi dettagliatamente la modifica che vorresti, la sua utilità e il suo funzionamento generale
## Pull Request
Se sei in grado di risolvere uno dei bug segnalati oppure vuoi completare una nuova funzionalità, apri una nuova Pull Request provando a mantenerti sulla base del [file di template su GitHub](https://github.com/devcode-it/openstamanager/blob/master/.github/PULL_REQUEST_TEMPLATE.md).
## Community
Siamo presenti su [Facebook](https://www.facebook.com/openstamanager), e il nostro forum ufficiale è disponibile all'indirizzo <http://www.openstamanager.com/forum/>.
Cerchiamo di essere disponibili quanto possibile, ma non sempre riusciamo a rispondere tempestivamente.

View File

@ -170,7 +170,7 @@ switch (post('op')) {
$rs = $dbo->fetchArray($query);
foreach ($rs as $value) {
$non_rimovibili = seriali_non_rimuovibili('id_riga_documenti', $value['id'], $dir);
$non_rimovibili = seriali_non_rimuovibili('id_riga_documento', $value['id'], $dir);
if (!empty($non_rimovibili)) {
$_SESSION['errors'][] = tr('Alcuni serial number sono già stati utilizzati!');
@ -293,14 +293,14 @@ switch (post('op')) {
$idanagrafica = $rs[0]['idanagrafica'];
$data = $rs[0]['data'];
$codice = $rs[0]['codice'];
//Fatturo le ore di lavoro raggruppate per costo orario
$rst = $dbo->fetchArray('SELECT SUM( ROUND( TIMESTAMPDIFF( MINUTE, orario_inizio, orario_fine ) / 60, '.get_var('Cifre decimali per quantità').' ) ) AS tot_ore, SUM(prezzo_ore_consuntivo) AS tot_prezzo_ore_consuntivo, prezzo_ore_unitario FROM in_interventi_tecnici WHERE idintervento='.prepare($idintervento).' GROUP BY prezzo_ore_unitario');
//Aggiunta riga intervento sul documento
for( $i=0; $i<sizeof($rst); $i++ ){
for ($i = 0; $i < sizeof($rst); ++$i) {
$ore = $rst[$i]['tot_ore'];
// Calcolo iva
$query = 'SELECT * FROM co_iva WHERE id='.prepare($idiva);
$rs = $dbo->fetchArray($query);
@ -320,7 +320,7 @@ switch (post('op')) {
$query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare(get_var("Percentuale ritenuta d'acconto"));
$rs = $dbo->fetchArray($query);
$ritenutaacconto = ($subtot - $sconto + $rivalsainps) / 100 * $rs[0]['percentuale'];
$query = 'INSERT INTO co_righe_documenti(iddocumento, idintervento, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, `order`) VALUES('.prepare($id_record).', '.prepare($idintervento).', '.prepare($idconto).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($sconto).", 'UNT', 'ore', ".prepare($ore).', '.prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))';
$dbo->query($query);
}

View File

@ -27,11 +27,43 @@ $_SESSION['superselect']['ddt'] = $dir;
</div>
<div class="panel-body">
<?php
if ($dir == 'entrata') {
$rs2 = $dbo->fetchArray('SELECT piva, codice_fiscale, citta, indirizzo, cap, provincia FROM an_anagrafiche WHERE idanagrafica='.prepare($records[0]['idanagrafica']));
$campi_mancanti = [];
if ($rs2[0]['piva'] == '') {
if ($rs2[0]['codice_fiscale'] == '') {
array_push($campi_mancanti, 'codice fiscale');
}
}
if ($rs2[0]['citta'] == '') {
array_push($campi_mancanti, 'citta');
}
if ($rs2[0]['indirizzo'] == '') {
array_push($campi_mancanti, 'indirizzo');
}
if ($rs2[0]['cap'] == '') {
array_push($campi_mancanti, 'C.A.P.');
}
if (sizeof($campi_mancanti) > 0) {
echo "<div class='alert alert-warning'><i class='fa fa-warning'></i> Prima di procedere alla stampa completa i seguenti campi dell'anagrafica:<br/><b>".implode(', ', $campi_mancanti).'</b><br/>
'.Modules::link('Anagrafiche', $records[0]['idanagrafica'], tr('Vai alla scheda anagrafica'), null).'</div>';
}
}
?>
<div class="pull-right">
<button type="button" class="btn btn-primary" onclick="if( confirm('Duplicare questa fattura?') ){ $('#form-copy').submit(); }"><i class="fa fa-copy"></i> <?php echo tr('Duplica fattura'); ?></button>
<button type="submit" class="btn btn-success"><i class="fa fa-check"></i> <?php echo tr('Salva modifiche'); ?></button>
</div>
<div class="clearfix"></div>
<div class="row">
@ -320,33 +352,12 @@ if ($records[0]['stato'] != 'Pagato' && $records[0]['stato'] != 'Emessa') {
<div class="pull-right">
<!-- Stampe -->
<?php
//stampa solo per fatture di vendita
if ($dir == 'entrata') {
$rs2 = $dbo->fetchArray('SELECT piva, codice_fiscale, citta, indirizzo, cap, provincia FROM an_anagrafiche WHERE idanagrafica='.prepare($records[0]['idanagrafica']));
$campi_mancanti = [];
if ($rs2[0]['piva'] == '') {
if ($rs2[0]['codice_fiscale'] == '') {
array_push($campi_mancanti, 'codice fiscale');
}
}
if ($rs2[0]['citta'] == '') {
array_push($campi_mancanti, 'citta');
}
if ($rs2[0]['indirizzo'] == '') {
array_push($campi_mancanti, 'indirizzo');
}
if ($rs2[0]['cap'] == '') {
array_push($campi_mancanti, 'C.A.P.');
}
if ($dir == 'entrata') {
if (sizeof($campi_mancanti) > 0) {
echo "<div class='alert alert-warning'><i class='fa fa-warning'></i> Prima di procedere alla stampa completa i seguenti campi dell'anagrafica:<br/><b>".implode(', ', $campi_mancanti).'</b><br/>
'.Modules::link('Anagrafiche', $records[0]['idanagrafica'], tr('Vai alla scheda anagrafica'), null).'</div>';
} else {
echo '{( "name": "button", "type": "print", "id_module": "'.$id_module.'", "id_record": "'.$id_record.'" )}';
}
if (sizeof($campi_mancanti) > 0) {
echo '{( "name": "button", "type": "print", "id_module": "'.$id_module.'", "id_record": "'.$id_record.'", "class": "btn-info disabled" )}';
} else {
echo '{( "name": "button", "type": "print", "id_module": "'.$id_module.'", "id_record": "'.$id_record.'" )}';
}
}
?>

View File

@ -563,7 +563,7 @@ switch (post('op')) {
if (directory($docroot.'/files/interventi')) {
if (post('firma_base64') != '') {
// Salvataggio firma
$firma_file = 'firma_'.time().'.png';
$firma_file = 'firma_'.time().'.jpg';
$firma_nome = post('firma_nome');
$data = explode(',', post('firma_base64'));

View File

@ -33,7 +33,7 @@ if (get('anteprima') !== null) {
}
?>
<form action="<?php echo $rootdir; ?>/editor.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>" method="post" id="form-firma" class="hide">
<form class="canvas" action="<?php echo $rootdir; ?>/editor.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>" method="post" id="form-firma">
<input type="hidden" name="op" value="firma">
<input type="hidden" name="backto" value="record-edit">
@ -74,7 +74,9 @@ if (get('anteprima') !== null) {
saveButton = document.querySelector("[data-action=save]"),
canvas = document.getElementById("canvas");
var signaturePad = new SignaturePad(canvas);
var signaturePad = new SignaturePad(canvas, {
backgroundColor: 'rgb(255,255,255)'
});
function resizeCanvas() {
image_data = signaturePad.toDataURL();
@ -99,7 +101,7 @@ if (get('anteprima') !== null) {
if (signaturePad.isEmpty()) {
alert("Please provide signature first.");
} else {
image_data = signaturePad.toDataURL();
image_data = signaturePad.toDataURL("image/jpeg", 100);
$('#firma_base64').val(image_data);
}
});

View File

@ -0,0 +1,67 @@
<?php
include_once __DIR__.'/../../core.php';
switch (post('op')) {
case 'export-bulk':
$dir = DOCROOT.'/files/export_interventi/';
directory($dir.'tmp/');
// Rimozione dei contenuti precedenti
$files = glob($dir.'/*.zip');
foreach ($files as $file) {
delete($file);
}
// Selezione delle fatture da stampare
$records = $dbo->fetchArray('SELECT in_interventi.id, in_interventi.codice, data_richiesta, ragione_sociale FROM in_interventi INNER JOIN an_anagrafiche ON in_interventi.idanagrafica=an_anagrafiche.idanagrafica WHERE in_interventi.id IN('.implode(',', $id_records).')');
if (!empty($records)) {
foreach ($records as $r) {
//$numero = !empty($r['numero_esterno']) ? $r['numero_esterno'] : $r['numero'];
$numero = $r['codice'];
$numero = str_replace(['/', '\\'], '-', $numero);
// Gestione della stampa
$rapportino_nome = sanitizeFilename($numero.' '.date('Y_m_d', strtotime($r['data_richiesta'])).' '.$r['ragione_sociale'].'.pdf');
$filename = slashes($dir.'tmp/'.$rapportino_nome);
$_GET['idintervento'] = $r['id']; // Fix temporaneo per la stampa
$idintervento = $r['id']; // Fix temporaneo per la stampa
//$ptype = ($r['descrizione'] == 'Fattura accompagnatoria di vendita') ? 'fatture_accompagnatorie' : 'fatture';
$ptype = 'interventi';
require DOCROOT.'/pdfgen.php';
}
$dir = slashes($dir);
$file = slashes($dir.'interventi_'.time().'.zip');
// Creazione zip
if (extension_loaded('zip')) {
create_zip($dir.'tmp/', $file);
// Invio al browser dello zip
download($file);
// Rimozione dei contenuti
delete($dir.'tmp/');
}
}
break;
}
return [
'export-bulk' => [
'text' => tr('Esporta stampe'),
'data' => [
'msg' => tr('Vuoi davvero esportare tutte le stampe in un archivio?'),
'button' => tr('Procedi'),
'class' => 'btn btn-lg btn-warning',
'blank' => true,
],
],
];

View File

@ -189,12 +189,12 @@ switch (post('op')) {
}
}
break;
case 'adddescrizione':
if (!empty($id_record)) {
$descrizione = post('descrizione');
$query = 'INSERT INTO or_righe_ordini(idordine, descrizione, is_descrizione) VALUES('.prepare($id_record).', '.prepare($descrizione).', 1)';
if ($dbo->query($query)) {
$_SESSION['infos'][] = tr('Riga descrittiva aggiunta!');
}
@ -287,10 +287,10 @@ switch (post('op')) {
$iva_indetraibile = $iva / 100 * $rs[0]['indetraibile'];
$desc_iva = $rs[0]['descrizione'];
if($is_descrizione==0){
if ($is_descrizione == 0) {
// Modifica riga generica sul documento
$query = 'UPDATE or_righe_ordini SET idiva='.prepare($idiva).', desc_iva='.prepare($rs[0]['descrizione']).', 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);
}else{
} else {
$query = 'UPDATE or_righe_ordini SET descrizione='.prepare($descrizione).' WHERE id='.prepare($idriga);
}
if ($dbo->query($query)) {
@ -313,7 +313,7 @@ switch (post('op')) {
$rs = $dbo->fetchArray($query);
foreach ($rs as $value) {
$non_rimovibili = seriali_non_rimuovibili('id_riga_documenti', $value['id'], $dir);
$non_rimovibili = seriali_non_rimuovibili('id_riga_documento', $value['id'], $dir);
if (!empty($non_rimovibili)) {
$_SESSION['errors'][] = tr('Alcuni serial number sono già stati utilizzati!');

View File

@ -11,11 +11,11 @@ $n1 = sizeof($rs1);
// Livello 1
for ($x = 0; $x < $n1; ++$x) {
$totale_attivita = 0.00;
$totale_passivita = 0.00;
$totale_attivita = [];
$totale_passivita = [];
$costi = 0.00;
$ricavi = 0.00;
$costi = [];
$ricavi = [];
if ($rs1[$x]['descrizione'] == 'Economico') {
echo "<hr><h2 class=\"pull-left\">Conto economico</h2>\n";
@ -55,7 +55,7 @@ for ($x = 0; $x < $n1; ++$x) {
echo " <table class='table table-striped table-hover table-condensed' style='margin-bottom:0;'>\n";
for ($z = 0; $z < $n3; ++$z) {
$totale_conto_liv3 = 0.00;
$totale_conto_liv3 = [];
echo " <tr><td>\n";
@ -103,7 +103,7 @@ for ($x = 0; $x < $n1; ++$x) {
echo ' <div id="conto_'.$rs3[$z]['id']."\" style=\"display:none;\">\n";
if (sizeof($rs) > 0) {
$totale_conto_liv3 = 0.00;
$totale_conto_liv3 = [];
echo " <table class='table table-bordered table-hover table-condensed table-striped'>\n";
echo " <tr><th>Causale</th>\n";
@ -118,7 +118,7 @@ for ($x = 0; $x < $n1; ++$x) {
if ($rs[$i]['iddocumento'] != '') {
$module = ($rs[$i]['dir'] == 'entrata') ? Modules::get('Fatture di vendita')['id'] : Modules::get('Fatture di acquisto')['id'];
echo "<a data-toggle='modal' data-title='Dettagli movimento...' data-target='#bs-popup' class='clickable' data-href='".$rootdir.'/modules/partitario/dettagli_movimento.php?id_movimento='.$rs[$i]['id'].'&id_conto='.$rs[$i]['idconto'].'&id_module='.$module."' >".$rs[$i]['descrizione']."</a>\n";
// echo " <a href='".$rootdir.'/editor.php?id_module='.$module.'&id_record='.$rs[$i]['iddocumento']."'>".$rs[$i]['descrizione']."</a>\n";
// echo " <a href='".$rootdir.'/editor.php?id_module='.$module.'&id_record='.$rs[$i]['iddocumento']."'>".$rs[$i]['descrizione']."</a>\n";
} else {
echo ' <span>'.$rs[$i]['descrizione']."</span>\n";
}
@ -138,9 +138,9 @@ for ($x = 0; $x < $n1; ++$x) {
echo " <td></td></tr>\n";
if ($rs1[$x]['descrizione'] == 'Patrimoniale') {
$totale_conto_liv3 += $rs[$i]['totale'];
$totale_conto_liv3[] = $rs[$i]['totale'];
} else {
$totale_conto_liv3 -= $rs[$i]['totale'];
$totale_conto_liv3[] = -$rs[$i]['totale'];
}
}
@ -151,9 +151,9 @@ for ($x = 0; $x < $n1; ++$x) {
echo " </td>\n";
if ($rs1[$x]['descrizione'] == 'Patrimoniale') {
$totale_conto_liv3 += $rs[$i]['totale'];
$totale_conto_liv3[] = $rs[$i]['totale'];
} else {
$totale_conto_liv3 -= $rs[$i]['totale'];
$totale_conto_liv3[] = -$rs[$i]['totale'];
}
}
echo " </td></tr>\n";
@ -161,16 +161,16 @@ for ($x = 0; $x < $n1; ++$x) {
// Somma dei totali
if ($rs1[$x]['descrizione'] == 'Patrimoniale') {
if ($totale_conto_liv3 > 0) {
$totale_attivita += $totale_conto_liv3;
if (sum($totale_conto_liv3) > 0) {
$totale_attivita[] = abs(sum($totale_conto_liv3));
} else {
$totale_passivita += $totale_conto_liv3;
$totale_passivita[] = abs(sum($totale_conto_liv3));
}
} else {
if ($totale_conto_liv3 > 0) {
$totale_ricavi += $totale_conto_liv3;
if (sum($totale_conto_liv3) > 0) {
$totale_ricavi[] = abs(sum($totale_conto_liv3));
} else {
$totale_costi += $totale_conto_liv3;
$totale_costi[] = abs(sum($totale_conto_liv3));
}
}
echo " </table>\n";
@ -179,7 +179,7 @@ for ($x = 0; $x < $n1; ++$x) {
echo " </td>\n";
echo " <td width='100' align='right' valign='top'>\n";
echo Translator::numberToLocale($totale_conto_liv3)." &euro;\n";
echo Translator::numberToLocale(sum($totale_conto_liv3))." &euro;\n";
echo " </td></tr>\n";
} // Fine livello3
@ -194,9 +194,9 @@ for ($x = 0; $x < $n1; ++$x) {
if ($rs1[$x]['descrizione'] == 'Patrimoniale') {
// Riepilogo
$attivita = abs($totale_attivita);
$passivita = abs($totale_passivita);
$utile_perdita = abs($totale_ricavi) - abs($totale_costi);
$attivita = abs(sum($totale_attivita));
$passivita = abs(sum($totale_passivita));
$utile_perdita = abs(sum($totale_ricavi)) - abs(sum($totale_costi));
if ($utile_perdita < 0) {
$pareggio1 = $attivita + abs($utile_perdita);
$pareggio2 = abs($passivita);
@ -231,7 +231,7 @@ for ($x = 0; $x < $n1; ++$x) {
echo " <p align='right'><big>Perdita d'esercizio:</big></p>\n";
echo "</th>\n";
echo "<td align='right'>\n";
echo " <p align='right'><big>".Translator::numberToLocale($utile_perdita)." &euro;</big></p>\n";
echo " <p align='right'><big>".Translator::numberToLocale(sum($utile_perdita))." &euro;</big></p>\n";
echo "</td>\n";
echo "<td></td>\n";
echo "<td></td><td></td></tr>\n";
@ -240,7 +240,7 @@ for ($x = 0; $x < $n1; ++$x) {
echo " <p align='right'><big>Utile:</big></p>\n";
echo "</th>\n";
echo "<td align='right'>\n";
echo " <p align='right'><big>".Translator::numberToLocale($utile_perdita)." &euro;</big></p>\n";
echo " <p align='right'><big>".Translator::numberToLocale(sum($utile_perdita))." &euro;</big></p>\n";
echo "</td></tr>\n";
}
@ -249,7 +249,7 @@ for ($x = 0; $x < $n1; ++$x) {
echo " <p align='right'><big>Totale a pareggio:</big></p>\n";
echo "</th>\n";
echo "<td align='right'>\n";
echo " <p align='right'><big>".Translator::numberToLocale($pareggio1)." &euro;</big></p>\n";
echo " <p align='right'><big>".Translator::numberToLocale(sum($pareggio1))." &euro;</big></p>\n";
echo "</td>\n";
echo "<td></td>\n";
@ -258,13 +258,13 @@ for ($x = 0; $x < $n1; ++$x) {
echo " <p align='right'><big>Totale a pareggio:</big></p>\n";
echo "</th>\n";
echo "<td align='right'>\n";
echo " <p align='right'><big>".Translator::numberToLocale($pareggio2)." &euro;</big></p>\n";
echo " <p align='right'><big>".Translator::numberToLocale(sum($pareggio2))." &euro;</big></p>\n";
echo "</td></tr>\n";
echo '</table>';
} else {
echo "<p align='right'><big><b>RICAVI:</b> ".Translator::numberToLocale($totale_ricavi)." &euro;</big></p>\n";
echo "<p align='right'><big><b>COSTI:</b> ".Translator::numberToLocale(abs($totale_costi))." &euro;</big></p>\n";
echo "<p align='right'><big><b>UTILE/PERDITA:</b> ".Translator::numberToLocale($totale_ricavi - abs($totale_costi))." &euro;</big></p>\n";
echo "<p align='right'><big><b>RICAVI:</b> ".Translator::numberToLocale(sum($totale_ricavi))." &euro;</big></p>\n";
echo "<p align='right'><big><b>COSTI:</b> ".Translator::numberToLocale(sum(abs($totale_costi)))." &euro;</big></p>\n";
echo "<p align='right'><big><b>UTILE/PERDITA:</b> ".Translator::numberToLocale(sum($totale_ricavi) - sum(abs($totale_costi)))." &euro;</big></p>\n";
}
}

View File

@ -38,8 +38,8 @@ $d1 = new DateTime($start);
$d2 = new DateTime($end);
$count = $d1->diff($d2)->m + ($d1->diff($d2)->y * 12) + 1;
$fatturato = $dbo->fetchArray("SELECT SUM(subtotale - sconto) AS totale, YEAR(co_documenti.data) AS year, MONTH(co_documenti.data) AS month FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN co_righe_documenti ON co_righe_documenti.iddocumento=co_documenti.id WHERE co_tipidocumento.dir='entrata' AND co_tipidocumento.descrizione!='Bozza' AND co_documenti.data BETWEEN ".prepare($start).' AND '.prepare($end).' GROUP BY YEAR(co_documenti.data), MONTH(co_documenti.data) ORDER BY YEAR(co_documenti.data) ASC, MONTH(co_documenti.data) ASC');
$acquisti = $dbo->fetchArray("SELECT SUM(subtotale - sconto) AS totale, YEAR(co_documenti.data) AS year, MONTH(co_documenti.data) AS month FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN co_righe_documenti ON co_righe_documenti.iddocumento=co_documenti.id WHERE co_tipidocumento.dir='uscita' AND co_tipidocumento.descrizione!='Bozza' AND co_documenti.data BETWEEN ".prepare($start).' AND '.prepare($end).' GROUP BY YEAR(co_documenti.data), MONTH(co_documenti.data) ORDER BY YEAR(co_documenti.data) ASC, MONTH(co_documenti.data) ASC');
$fatturato = $dbo->fetchArray("SELECT SUM(co_righe_documenti.subtotale - co_righe_documenti.sconto) AS totale, YEAR(co_documenti.data) AS year, MONTH(co_documenti.data) AS month FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN co_righe_documenti ON co_righe_documenti.iddocumento=co_documenti.id WHERE co_tipidocumento.dir='entrata' AND co_tipidocumento.descrizione!='Bozza' AND co_documenti.data BETWEEN ".prepare($start).' AND '.prepare($end).' GROUP BY YEAR(co_documenti.data), MONTH(co_documenti.data) ORDER BY YEAR(co_documenti.data) ASC, MONTH(co_documenti.data) ASC');
$acquisti = $dbo->fetchArray("SELECT SUM(co_righe_documenti.subtotale - co_righe_documenti.sconto) AS totale, YEAR(co_documenti.data) AS year, MONTH(co_documenti.data) AS month FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN co_righe_documenti ON co_righe_documenti.iddocumento=co_documenti.id WHERE co_tipidocumento.dir='uscita' AND co_tipidocumento.descrizione!='Bozza' AND co_documenti.data BETWEEN ".prepare($start).' AND '.prepare($end).' GROUP BY YEAR(co_documenti.data), MONTH(co_documenti.data) ORDER BY YEAR(co_documenti.data) ASC, MONTH(co_documenti.data) ASC');
$month = intval($d1->format('m')) - 1;
for ($i = 0; $i < $count; ++$i) {
@ -111,9 +111,9 @@ $(document).ready(function() {
</script>';
// Clienti top
$clienti = $dbo->fetchArray("SELECT SUM(subtotale - sconto) AS totale, (SELECT COUNT(*) FROM co_documenti WHERE co_documenti.idanagrafica =an_anagrafiche.idanagrafica) AS qta, an_anagrafiche.idanagrafica, an_anagrafiche.ragione_sociale FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN co_righe_documenti ON co_righe_documenti.iddocumento=co_documenti.id INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica=co_documenti.idanagrafica WHERE co_tipidocumento.dir='entrata' AND co_documenti.data BETWEEN ".prepare($start).' AND '.prepare($end).' GROUP BY an_anagrafiche.idanagrafica ORDER BY SUM(subtotale - sconto) DESC LIMIT 15');
$clienti = $dbo->fetchArray("SELECT SUM(co_righe_documenti.subtotale - co_righe_documenti.sconto) AS totale, (SELECT COUNT(*) FROM co_documenti WHERE co_documenti.idanagrafica =an_anagrafiche.idanagrafica) AS qta, an_anagrafiche.idanagrafica, an_anagrafiche.ragione_sociale FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN co_righe_documenti ON co_righe_documenti.iddocumento=co_documenti.id INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica=co_documenti.idanagrafica WHERE co_tipidocumento.dir='entrata' AND co_documenti.data BETWEEN ".prepare($start).' AND '.prepare($end).' GROUP BY an_anagrafiche.idanagrafica ORDER BY SUM(subtotale - sconto) DESC LIMIT 15');
$totale = $dbo->fetchArray("SELECT SUM(subtotale - sconto) AS totale FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN co_righe_documenti ON co_righe_documenti.iddocumento=co_documenti.id WHERE co_tipidocumento.dir='entrata' AND co_documenti.data BETWEEN ".prepare($start).' AND '.prepare($end));
$totale = $dbo->fetchArray("SELECT SUM(co_righe_documenti.subtotale - co_righe_documenti.sconto) AS totale FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN co_righe_documenti ON co_righe_documenti.iddocumento=co_documenti.id WHERE co_tipidocumento.dir='entrata' AND co_documenti.data BETWEEN ".prepare($start).' AND '.prepare($end));
echo '
<div class="row">

View File

@ -87,7 +87,7 @@
},
"scripts": {
"gulp": "gulp",
"release-OSM": "yarn run develop-OSM && gulp release",
"release-OSM": "yarn run develop-OSM && php composer.phar install --no-dev && gulp release",
"develop-OSM": "yarn install && yarn run install-OSM && yarn run assets-OSM",
"install-OSM": "php composer.phar update",
"assets-OSM": "yarn upgrade && yarn run build-OSM",

View File

@ -6,7 +6,7 @@ $default_header$
<br>
<div class="row">
<!-- Dati Fattura -->
<!-- Dati Ddt -->
<div class="col-xs-6">
<div class="text-center" style="height:5mm;">
<b>$tipo_doc$</b>
@ -61,7 +61,7 @@ $default_header$
<td class="border-full" style="height:20mm;">
<p class="small-bold">'.tr('Spett.le', [], ['upper' => true]).'</p>
<p>$c_ragionesociale$</p>
<p>$c_indirizzo$ $c_citta_full$</p>
<p>$c_indirizzo$<br>$c_citta_full$</p>
</td>
</tr>

View File

@ -65,7 +65,7 @@ $default_header$
<td colspan=2 class="border-full"'.(!$fattura_accompagnatoria ? ' style="height:20mm;"' : '').'>
<p class="small-bold">'.tr('Spett.le', [], ['upper' => true]).'</p>
<p>$c_ragionesociale$</p>
<p>$c_indirizzo$ $c_citta_full$</p>
<p>$c_indirizzo$<br>$c_citta_full$</p>
</td>
</tr>

View File

@ -24,7 +24,7 @@ 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('Imponibile', [], ['upper' => true])."</th>
<th class='text-center' style='width:15%'>".tr('Importo', [], ['upper' => true])."</th>
<th class='text-center' style='width:10%'>".tr('IVA', [], ['upper' => true]).' (%)</th>
</tr>
</thead>

View File

@ -4,30 +4,51 @@ echo '
$default_header$
<br>
<div class="text-center" style="height:5mm;">
<b>$tipo_doc$</b>
</div>
<div class="row">
<table class="table table-bordered">
<tr>
<td class="border-full text-center">
<p class="small-bold">'.tr('Nr. documento', [], ['upper' => true]).'</p>
<p>$numero_doc$</p>
</td>
<!-- Dati Ordine -->
<div class="col-xs-6">
<div class="text-center" style="height:5mm;">
<b>$tipo_doc$</b>
</div>
<td class="border-right border-bottom border-top text-center">
<p class="small-bold">'.tr('Data documento', [], ['upper' => true]).'</p>
<p>$data$</p>
</td>
<table class="table table-bordered">
<tr>
<td class="border-full text-center">
<p class="small-bold">'.tr('Nr. documento', [], ['upper' => true]).'</p>
<p>$numero_doc$</p>
</td>
<td class="border-right border-bottom border-top text-center">
<p class="small-bold">'.tr('Pagamanto', [], ['upper' => true]).'</p>
<p>$pagamento$</p>
</td>
<td class="border-right border-bottom border-top text-center">
<p class="small-bold">'.tr('Data documento', [], ['upper' => true]).'</p>
<p>$data$</p>
</td>
<td class="border-right border-bottom border-top center text-center">
<p class="small-bold">'.tr('Foglio', [], ['upper' => true]).'</p>
<p>{PAGENO}/{nb}</p>
</td>
</tr>
</table>';
<td class="border-right border-bottom border-top text-center">
<p class="small-bold">'.tr('Pagamento', [], ['upper' => true]).'</p>
<p>$pagamento$</p>
</td>
<td class="border-right border-bottom border-top center text-center">
<p class="small-bold">'.tr('Foglio', [], ['upper' => true]).'</p>
<p>{PAGENO}/{nb}</p>
</td>
</tr>
</table>
</div>
<!-- Dati Cliente/Fornitore -->
<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:20mm;">
<p class="small-bold">'.tr('Spett.le', [], ['upper' => true]).'</p>
<p>$c_ragionesociale$</p>
<p>$c_indirizzo$<br> $c_citta_full$</p>
</td>
</tr>
</table>
</div>
</div>';

View File

@ -2,7 +2,7 @@
include_once __DIR__.'/../../core.php';
$module_name = 'Preventivi';
$module_name = 'Ordini';
// Lettura info fattura
$records = $dbo->fetchArray('SELECT *, (SELECT descrizione FROM or_tipiordine WHERE or_tipiordine.id=idtipoordine) AS tipo_doc, (SELECT descrizione FROM co_pagamenti WHERE id=idpagamento) AS tipo_pagamento FROM or_ordini WHERE id='.prepare($id_record));

View File

@ -1,5 +1,5 @@
<?php
return [
'header-height' => 55,
'header-height' => 65,
];

View File

@ -52,7 +52,7 @@ if ($_GET['lev'] == '3') {
<tbody>\n";
// Inizializzo saldo finale
$saldo_finale = 0;
$saldo_finale = [];
// Calcolo saldo iniziale
$rs = $dbo->fetchArray('SELECT SUM(totale) AS totale FROM co_movimenti WHERE idconto="'.$idconto.'" AND data < "'.$_SESSION['period_start'].'"');
@ -82,19 +82,19 @@ if ($_GET['lev'] == '3') {
$body .= " <tr><td class='br bb padded text-center'>".Translator::dateToLocale($rs[$i]['data'])."</td><td class='br bb padded'>".$rs[$i]['descrizione']."</td><td class='br bb padded text-right'>".$dare."</td><td class='bb padded text-right'>".$avere."</td></tr>\n";
$saldo_finale += $rs[$i]['totale'];
$saldo_finale[] = $rs[$i]['totale'];
}
if ($saldo_finale < 0) {
if ( sum($saldo_finale) < 0) {
$dare = '';
$avere = abs($saldo_finale);
$avere = abs( sum($saldo_finale) );
} else {
$dare = abs($saldo_finale);
$dare = abs( sum($saldo_finale) );
$avere = '';
}
// Mostro il saldo finale
$body .= " <tr><td class='br bb padded'></td><td class='br bb padded'><b>SALDO FINALE</b></td><td class='br bb padded text-right'><b>".Translator::numberToLocale(abs($dare))."</b></td><td class='bb padded text-right'><b>".Translator::numberToLocale(abs($avere))."</b></td></tr>\n";
$body .= " <tr><td class='br bb padded'></td><td class='br bb padded'><b>SALDO FINALE</b></td><td class='br bb padded text-right'><b>".Translator::numberToLocale( abs( sum($dare) ) )."</b></td><td class='bb padded text-right'><b>".Translator::numberToLocale( abs( sum($avere) ) )."</b></td></tr>\n";
$body .= " </tbody>
</table>\n";
@ -110,33 +110,34 @@ elseif ($_GET['lev'] == '2') {
$rs3 = $dbo->fetchArray('SELECT id, numero, descrizione FROM co_pianodeiconti3 WHERE idpianodeiconti2="'.$idconto.'"');
for ($z = 0; $z < sizeof($rs3); ++$z) {
$v_dare = [];
$v_avere = [];
// Inizializzo saldo finale
$saldo_finale = 0;
$saldo_finale = [];
// Calcolo saldo iniziale
$rs = $dbo->fetchArray('SELECT SUM(totale) AS totale FROM co_movimenti WHERE idconto="'.$rs3[$z]['id'].'" AND data < "'.$_SESSION['period_start'].'"');
$saldo_iniziale = $rs[0]['totale'];
$saldo_finale = $saldo_iniziale;
$saldo_finale[] = $saldo_iniziale;
if ($saldo_iniziale < 0) {
$dare = '';
$avere = abs($saldo_iniziale);
if ( $saldo_iniziale < 0) {
$v_avere[] = abs( $saldo_iniziale );
} else {
$dare = abs($saldo_iniziale);
$avere = '';
$v_dare[] = abs( $saldo_iniziale );
}
$rs = $dbo->fetchArray('SELECT * FROM co_movimenti WHERE idconto="'.$rs3[$z]['id'].'" AND data >= "'.$_SESSION['period_start'].'" AND data <= "'.$_SESSION['period_end'].'" ORDER BY data ASC');
for ($i = 0; $i < sizeof($rs); ++$i) {
if ($rs[$i]['totale'] >= 0) {
$dare += abs($rs[$i]['totale']);
$v_dare[] = abs($rs[$i]['totale']);
} else {
$avere += abs($rs[$i]['totale']);
$v_avere[] = abs($rs[$i]['totale']);
}
}
$totale = $dare - $avere;
$totale = sum($v_dare) - sum($v_avere);
if ($totale >= 0) {
$dare = Translator::numberToLocale(abs($totale));
@ -155,11 +156,11 @@ elseif ($_GET['lev'] == '2') {
}
// Stampa completa bilancio
elseif ($_GET['lev'] == '1') {
$ricavi = 0;
$costi = 0;
$totale_attivita = 0;
$totale_passivita = 0;
elseif (get('lev') == '1') {
$ricavi = [];
$costi = [];
$totale_attivita = [];
$totale_passivita = [];
$body .= "<table style='table-layout:fixed; border-bottom:1px solid #777; border-right:1px solid #777; border-left:1px solid #777;' cellpadding='0' cellspacing='0'>
<col width='80'><col width='452'><col width='80'><col width='80'>
@ -179,31 +180,31 @@ elseif ($_GET['lev'] == '1') {
$rs3 = $dbo->fetchArray('SELECT id, numero, descrizione FROM co_pianodeiconti3 WHERE idpianodeiconti2="'.$rs2[$y]['id'].'"');
for ($z = 0; $z < sizeof($rs3); ++$z) {
$dare = 0;
$avere = 0;
$v_dare = [];
$v_avere = [];
$rs = $dbo->fetchArray('SELECT * FROM co_movimenti WHERE idconto="'.$rs3[$z]['id'].'" AND data >= "'.$_SESSION['period_start'].'" AND data <= "'.$_SESSION['period_end'].'" ORDER BY data ASC');
for ($i = 0; $i < sizeof($rs); ++$i) {
if ($rs[$i]['totale'] >= 0) {
$dare += abs($rs[$i]['totale']);
$v_dare[] = abs($rs[$i]['totale']);
} else {
$avere += abs($rs[$i]['totale']);
$v_avere[] = abs($rs[$i]['totale']);
}
}
$totale = $dare - $avere;
$totale = sum($v_dare) - sum($v_avere);
if ($totale >= 0) {
$dare = abs($totale);
$avere = 0;
$totale_attivita += $dare;
$costi += abs($dare);
$totale_attivita[] = $dare;
$costi[] = abs($dare);
} else {
$dare = 0;
$avere = abs($totale);
$totale_passivita += $avere;
$ricavi += abs($avere);
$totale_passivita[] = $avere;
$ricavi[] = abs($avere);
}
// Mostro il saldo finale del conto di livello 3
@ -214,15 +215,15 @@ elseif ($_GET['lev'] == '1') {
// Stampa "Costi/Ricavi" se conto economico
if ($rs1[0]['descrizione'] == 'Economico') {
$body .= " <tr><th colspan='3' class='br bb padded'>RICAVI</th><th align='right' class='bb padded'>".Translator::numberToLocale($ricavi)."</th></tr>\n";
$body .= " <tr><th colspan='3' class='br bb padded'>COSTI</th><th align='right' class='bb padded'>".Translator::numberToLocale($costi)."</th></tr>\n";
$body .= " <tr><th colspan='3' class='br padded'>UTILE</th><th class='padded' align='right'>".Translator::numberToLocale($ricavi - $costi)."</th></tr>\n";
$body .= " <tr><th colspan='3' class='br bb padded'>RICAVI</th><th align='right' class='bb padded'>".Translator::numberToLocale( sum($ricavi) )."</th></tr>\n";
$body .= " <tr><th colspan='3' class='br bb padded'>COSTI</th><th align='right' class='bb padded'>".Translator::numberToLocale( sum($costi) )."</th></tr>\n";
$body .= " <tr><th colspan='3' class='br padded'>UTILE</th><th class='padded' align='right'>".Translator::numberToLocale( sum($ricavi) - sum($costi) )."</th></tr>\n";
}
// Stampa "Attività/Passività" se stato patrimoniale
else {
$costi = 0;
$ricavi = 0;
$costi = [];
$ricavi = [];
// Ciclo fra il conto economico per calcolare l'utile o la perdita
$rs1 = $dbo->fetchArray('SELECT id, numero, descrizione FROM co_pianodeiconti1 WHERE NOT id="'.$idconto.'" ORDER BY numero DESC');
@ -237,29 +238,29 @@ elseif ($_GET['lev'] == '1') {
for ($z = 0; $z < sizeof($rs3); ++$z) {
// Inizializzo saldo finale
$saldo_finale = 0;
$saldo_finale = [];
// Calcolo saldo iniziale
$rs = $dbo->fetchArray('SELECT SUM(totale) AS totale FROM co_movimenti WHERE idconto="'.$rs2[$y]['id'].'" AND data < "'.$_SESSION['period_start'].'"');
$dare = 0;
$avere = 0;
$dare = [];
$avere = [];
$rs = $dbo->fetchArray('SELECT * FROM co_movimenti WHERE idconto="'.$rs3[$z]['id'].'" AND data >= "'.$_SESSION['period_start'].'" AND data <= "'.$_SESSION['period_end'].'" ORDER BY data ASC');
for ($i = 0; $i < sizeof($rs); ++$i) {
if ($rs[$i]['totale'] >= 0) {
$dare += abs($rs[$i]['totale']);
$dare[] = abs($rs[$i]['totale']);
} else {
$avere += abs($rs[$i]['totale']);
$avere[] = abs($rs[$i]['totale']);
}
}
$totale = $dare - $avere;
$totale = sum($dare) - sum($avere);
if ($totale >= 0) {
$costi += abs($totale);
$costi[] = abs($totale);
} else {
$ricavi += abs($totale);
$ricavi[] = abs($totale);
}
}
}
@ -269,9 +270,9 @@ elseif ($_GET['lev'] == '1') {
$body .= " </table>\n";
// Tabella di riepilogo finale
$totale_attivita = abs($totale_attivita);
$totale_passivita = abs($totale_passivita);
$utile_perdita = abs($ricavi) - abs($costi);
$totale_attivita = abs( sum($totale_attivita) );
$totale_passivita = abs( sum($totale_passivita) );
$utile_perdita = abs( sum($ricavi) ) - abs( sum($costi) );
if ($utile_perdita < 0) {
$pareggio1 = $totale_attivita + abs($utile_perdita);

View File

@ -86,6 +86,7 @@ if (!empty($interventi)) {
$int = array_merge($int, get_costi_intervento($int['id']));
$int['sconto'] = ($int['manodopera_addebito'] - $int['manodopera_scontato']) + ($int['viaggio_addebito'] - $int['viaggio_scontato']);
$int['subtotale'] = $int['manodopera_scontato'] + $int['viaggio_scontato'];
$sconto[] = $int['sconto_globale'];
echo '
<tr>
@ -205,7 +206,7 @@ if (!empty($interventi)) {
// Articoli per intervento
foreach ($interventi as $int) {
$righe = $dbo->fetchArray("SELECT *, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice, (SELECT CONCAT_WS(serial, 'SN: ', ', ') FROM mg_prodotti WHERE mg_articoli_interventi.idarticolo = mg_prodotti.id_articolo) AS serials FROM `mg_articoli_interventi` WHERE idintervento =".prepare($int['id']).' ORDER BY idarticolo ASC');
$righe = $dbo->fetchArray("SELECT *, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice, (SELECT CONCAT_WS(serial, 'SN: ', ', ') FROM mg_prodotti WHERE mg_articoli_interventi.idarticolo = mg_prodotti.id_articolo AND mg_prodotti.id_riga_intervento = mg_articoli_interventi.idintervento) AS serials FROM `mg_articoli_interventi` WHERE idintervento =".prepare($int['id']).' ORDER BY idarticolo ASC');
foreach ($righe as $r) {
echo '

View File

@ -7,3 +7,13 @@ ALTER TABLE `zz_files` ADD `id_plugin` int(11) AFTER `id_module`;
-- Aggiunto valore NULL a idarticolo in co_righe2_contratti
-- ALTER TABLE `co_righe2_contratti` CHANGE `idarticolo` `idarticolo` int(11);
-- UPDATE `co_righe2_contratti` SET `idarticolo` = NULL WHERE `idarticolo` = 0;
-- Aggiornamento ORDER BY nei moduli Fatture, DDT, Ordini, Preventivi, Contratti e Interventi
UPDATE `zz_views` SET `order_by` = 'CAST(numero_esterno AS UNSIGNED)' WHERE `name` = 'Numero' AND `id_module` IN (SELECT `id` FROM `zz_modules` WHERE `name` IN ('Fatture di vendita', 'Fatture di acquisto', 'Ordini cliente', 'Ordini fornitore', 'Ddt di vendita', 'Ddt di acquisto'));
UPDATE `zz_views` SET `order_by` = 'CAST(in_interventi.codice AS UNSIGNED)' WHERE `name` = 'Numero' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Interventi');
UPDATE `zz_views` SET `order_by` = 'CAST(numero AS UNSIGNED)' WHERE `name` = 'Numero' AND `id_module` IN (SELECT `id` FROM `zz_modules` WHERE `name` IN ('Ordini Preventivi', 'Contratti'));
-- Query per ignorare i punti nella ricerca in Ragione sociale
-- UPDATE `zz_views` SET `search_inside` = CONCAT('REPLACE(', `query`, ', ''.'', '''') LIKE |search|') WHERE `name` = 'Ragione sociale';