- pagamenti: aggiungere di default "Bonifico bancario" (giorni scadenza 10)

- eliminando la fattura, non riporta le qtà nei ddt
 - fatture: da ddt a fattura non imposta il conto predefinito in fattura e sulle righe
 - fatture: aggiungendo un preventivo con l'import di tutte le righe, non serve che il nome della riga sconto abbia il riferimento del preventivo perchè esce già sotto in stampa. verificare
 - fatture: completata duplicazione righe
 - piano dei conti: popup dettagli, allineare i numeri a destra
 - migliorata stampa registri iva
 - stampa spesometro e stampa registri iva: aggiungere frase "Stampa non valida ai fini fiscali" in centro come sfondo o filigrana
 - stampe contabili: aggiungere paragrafo con "Le seguenti stampe non sono valide ai fini fiscali"
 - fatture di vendita: numero secondario chiamarlo "Numero fattura"
 - fatture: quando si importa l'intervento, mettere il totale ore come qtà, e inserire il diritto di chiamata come riga a parte
 - contratti: non escono le ore erogate a video nel consuntivo
 - contratti: consuntivo, rinominare "Prezzo orario" in "Ore addebitate"
 - spesometro: rinominare in "Comunicazione dati fatture (ex-spesometro)"
This commit is contained in:
Fabio Lovato 2017-11-07 19:19:52 +01:00
parent dc9a244b9f
commit 31a61852b3
9 changed files with 119 additions and 46 deletions

View File

@ -94,7 +94,7 @@ if (!empty($rsi)) {
<th width="120">'.tr('Costo orario').'</th>
<th width="120">'.tr('Costo km').'</th>
<th width="120">'.tr('Diritto ch.').'</th>
<th width="120">'.tr('Prezzo orario').'</th>
<th width="120">'.tr('Costo addebitato').'</th>
<th width="120">'.tr('Prezzo km').'</th>
<th width="120">'.tr('Diritto ch.').'</th>
</tr>';
@ -293,12 +293,12 @@ if (!empty($contratto_tot_ore)) {
<table class="table text-left">
<tr>
<td>'.tr('Ore residue').':</td>
<td class="text-right">'.Translator::numberToLocale(floatval($contratto_tot_ore) - floatval($totale_ore_impiegate)).'</td>
<td class="text-right">'.Translator::numberToLocale(floatval($contratto_tot_ore) - floatval($totale_ore)).'</td>
</tr>
<tr>
<td>'.tr('Ore erogate').':</td>
<td class="text-right">'.Translator::numberToLocale($totale_ore_impiegate).'</td>
<td class="text-right">'.Translator::numberToLocale($totale_ore).'</td>
</tr>
<tr>

View File

@ -197,13 +197,13 @@ switch (post('op')) {
}
// Se delle righe sono state create da un ordine, devo riportare la quantità evasa nella tabella degli ordini al valore di prima, riaggiungendo la quantità che sto togliendo
$rs = $dbo->fetchArray('SELECT qta, descrizione, idarticolo, idordine, idiva FROM co_righe_documenti WHERE iddocumento='.prepare($iddocumento));
$rs = $dbo->fetchArray('SELECT qta, descrizione, idarticolo, idordine, idiva FROM co_righe_documenti WHERE iddocumento='.prepare($id_record));
foreach ($rs as $r) {
$dbo->query('UPDATE or_righe_ordini SET qta_evasa=qta_evasa-'.$r['qta'].' WHERE descrizione='.prepare($r['descrizione']).' AND idarticolo='.prepare($r['idarticolo']).' AND idordine='.prepare($r['idordine']).' AND idiva='.prepare($r['idiva']));
}
// Se delle righe sono state create da un ddt, devo riportare la quantità evasa nella tabella dei ddt al valore di prima, riaggiungendo la quantità che sto togliendo
$rs = $dbo->fetchArray('SELECT qta, descrizione, idarticolo, idddt, idiva FROM co_righe_documenti WHERE iddocumento='.prepare($iddocumento));
$rs = $dbo->fetchArray('SELECT qta, descrizione, idarticolo, idddt, idiva FROM co_righe_documenti WHERE iddocumento='.prepare($id_record));
foreach ($rs as $r) {
$dbo->query('UPDATE dt_righe_ddt SET qta_evasa=qta_evasa-'.$r['qta'].' WHERE descrizione='.prepare($r['descrizione']).' AND idarticolo='.prepare($r['idarticolo']).' AND idddt='.prepare($r['idddt']).' AND idiva='.prepare($r['idiva']));
}
@ -246,8 +246,7 @@ switch (post('op')) {
$id_record = $dbo->lastInsertedID();
// TODO: sistemare la duplicazione delle righe generiche e degli articoli, ingorando interventi, ddt, ordini, preventivi
/*
foreach ($righe as $riga) {
foreach( $righe as $riga ){
$dbo->query('INSERT INTO co_righe_documenti(iddocumento, idordine, idddt, idintervento, idarticolo, idpreventivo, idcontratto, idtecnico, idagente, idautomezzo, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, idritenutaacconto, ritenutaacconto, idrivalsainps, rivalsainps, um, qta, `order`) VALUES('.prepare($id_record).', 0, 0, 0, '.prepare($riga['idarticolo']).', '.prepare($riga['idpreventivo']).', '.prepare($riga['idcontratto']).', '.prepare($riga['idtecnico']).', '.prepare($riga['idagente']).', '.prepare($riga['idautomezzo']).', '.prepare($riga['idiva']).', '.prepare($riga['desc_iva']).', '.prepare($riga['iva']).', '.prepare($riga['iva_indetraibile']).', '.prepare($riga['descrizione']).', '.prepare($riga['subtotale']).', '.prepare($riga['sconto']).', '.prepare($riga['idritenutaacconto']).', '.prepare($riga['ritenutaacconto']).', '.prepare($riga['idrivalsainps']).', '.prepare($riga['rivalsainps']).', '.prepare($riga['um']).', '.prepare($riga['qta']).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))');
// Scarico/carico nuovamente l'articolo da magazzino
@ -255,7 +254,6 @@ switch (post('op')) {
add_articolo_infattura($id_record, $riga['idarticolo'], $riga['descrizione'], $riga['idiva'], $riga['qta'], $riga['subtotale']);
}
}
*/
// Ricalcolo inps, ritenuta e bollo (se la fattura non è stata pagata)
if ($dir == 'entrata') {
@ -315,10 +313,80 @@ 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'];
// Aggiunta diritto di chiamata (se presente) come riga a parte
$query = 'SELECT SUM(prezzo_dirittochiamata) AS diritto_chiamata FROM in_interventi_tecnici WHERE idintervento='.prepare($idintervento);
$rs = $dbo->fetchArray($query);
$diritto_chiamata = $rs[0]['diritto_chiamata'];
// Aggiunta riga intervento sul documento
$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', '-', 1, ".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).'))';
$ore = get_ore_intervento( $idintervento );
$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-$diritto_chiamata).', '.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);
if( $diritto_chiamata > 0 ){
// Calcolo iva
$query = 'SELECT * FROM co_iva WHERE id='.prepare($idiva);
$rs = $dbo->fetchArray($query);
$iva = $diritto_chiamata / 100 * $rs[0]['percentuale'];
$iva_indetraibile = $iva / 100 * $rs[0]['indetraibile'];
$desc_iva = $rs[0]['descrizione'];
// Calcolo rivalsa inps
$query = 'SELECT * FROM co_rivalsainps WHERE id='.prepare(get_var('Percentuale rivalsa INPS'));
$rs = $dbo->fetchArray($query);
$rivalsainps = $diritto_chiamata / 100 * $rs[0]['percentuale'];
// Calcolo ritenuta d'acconto
$query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare(get_var("Percentuale ritenuta d'acconto"));
$rs = $dbo->fetchArray($query);
$ritenutaacconto = $diritto_chiamata / 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).',
"Diritto di chiamata",
'.prepare($diritto_chiamata).',
'.prepare($sconto).',
'.prepare($sconto).",
'UNT',
'-',
".prepare($rs[0]['diritto_chiamata']).",
".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);
}
// Collego in fattura eventuali articoli collegati all'intervento
$rs2 = $dbo->fetchArray('SELECT mg_articoli_interventi.*, idarticolo FROM mg_articoli_interventi INNER JOIN mg_articoli ON mg_articoli_interventi.idarticolo=mg_articoli.id WHERE idintervento='.prepare($idintervento).' AND ( idintervento NOT IN(SELECT idintervento FROM co_righe_preventivi WHERE idpreventivo IN(SELECT idpreventivo FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).')) AND idintervento NOT IN(SELECT idintervento FROM co_righe_contratti WHERE idcontratto IN(SELECT idcontratto FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).')) )');
@ -760,7 +828,6 @@ switch (post('op')) {
$idanagrafica = $post['idanagrafica'];
$idarticolo = $post['idarticolo'];
$idpagamento = $post['idpagamento'];
$idconto = $post['idconto'];
$idddt = $post['idddt'];
$numero = get_new_numerofattura($data);
@ -770,7 +837,13 @@ switch (post('op')) {
$numero_esterno = '';
}
$tipo_documento = ($dir == 'entrata') ? 'Fattura differita di vendita' : 'Fattura differita di acquisto';
if( $dir == 'entrata' ){
$tipo_documento = 'Fattura differita di vendita';
$idconto = get_var('Conto predefinito fatture di vendita');
} else {
$tipo_documento = 'Fattura differita di acquisto';
$idconto = get_var('Conto predefinito fatture di acquisto');
}
// Creazione nuova fattura
$dbo->query('INSERT INTO co_documenti(numero, numero_esterno, data, idanagrafica, idtipodocumento, idstatodocumento, idpagamento, idconto) VALUES('.prepare($numero).', '.prepare($numero_esterno).', '.prepare($data).', '.prepare($idanagrafica).', (SELECT id FROM co_tipidocumento WHERE descrizione='.prepare($tipo_documento)."), (SELECT id FROM co_statidocumento WHERE descrizione='Bozza'), ".prepare($idpagamento).', '.prepare($idconto).')');

View File

@ -34,7 +34,7 @@ echo '
echo '
<div class="row">
<div class="col-md-6">
{[ "type": "select", "label": "'.tr('Preventivo').'", "name": "idpreventivo", "required": 1, "values": "query=SELECT id, CONCAT(\'Preventivo numero \', numero, \' - \', nome) AS descrizione, (SELECT SUM(subtotale) FROM co_righe_preventivi WHERE idpreventivo=co_preventivi.id GROUP BY idpreventivo) - (SELECT SUM(sconto) FROM co_righe_preventivi WHERE idpreventivo=co_preventivi.id GROUP BY idpreventivo) AS subtot FROM co_preventivi WHERE idanagrafica='.prepare($idanagrafica).' AND id NOT IN (SELECT idpreventivo FROM co_righe_documenti WHERE NOT idpreventivo=NULL) AND idstato IN( SELECT id FROM co_statipreventivi WHERE descrizione=\'Accettato\' OR descrizione=\'In lavorazione\' OR descrizione=\'In attesa di conferma\')", "extra": "onchange=\"$data = $(this).selectData(); $(\'#descrizione\').val($data.text); $(\'#prezzo\').val($data.subtot);\"" ]}
{[ "type": "select", "label": "'.tr('Preventivo').'", "name": "idpreventivo", "required": 1, "values": "query=SELECT id, nome AS descrizione, (SELECT SUM(subtotale) FROM co_righe_preventivi WHERE idpreventivo=co_preventivi.id GROUP BY idpreventivo) - (SELECT SUM(sconto) FROM co_righe_preventivi WHERE idpreventivo=co_preventivi.id GROUP BY idpreventivo) AS subtot FROM co_preventivi WHERE idanagrafica='.prepare($idanagrafica).' AND id NOT IN (SELECT idpreventivo FROM co_righe_documenti WHERE NOT idpreventivo=NULL) AND idstato IN( SELECT id FROM co_statipreventivi WHERE descrizione=\'Accettato\' OR descrizione=\'In lavorazione\' OR descrizione=\'In attesa di conferma\')", "extra": "onchange=\"$data = $(this).selectData(); $(\'#descrizione\').val($data.text); $(\'#prezzo\').val($data.subtot);\"" ]}
</div>
<div class="col-md-6">

View File

@ -34,16 +34,19 @@ $_SESSION['superselect']['idanagrafica'] = $records[0]['idanagrafica'];
<div class="clearfix"></div>
<div class="row">
<?php
if ($dir == 'uscita') {
echo '
<?php
if ($dir == 'uscita') {
echo '
<div class="col-md-3">
{[ "type": "span", "label": "'.tr('Numero fattura').'", "name": "numero","class": "text-center", "value": "$numero$" ]}
</div>';
$label = tr('Numero secondario');
} else {
$label = tr('Numero fattura');
}
?>
<div class="col-md-3">
{[ "type": "span", "label": "'.tr('Numero fattura').'", "name": "numero","class": "text-center", "value": "$numero$" ]}
</div>';
}
?>
<div class="col-md-3">
{[ "type": "text", "label": "<?php echo tr('Numero secondario'); ?>", "name": "numero_esterno", "class": "text-center", "value": "$numero_esterno$" ]}
{[ "type": "text", "label": "<?php echo $label; ?>", "name": "numero_esterno", "class": "text-center", "value": "$numero_esterno$" ]}
</div>
<div class="col-md-3">

View File

@ -13,8 +13,6 @@ echo '
<tr>
<th>'.tr('Descrizione riga').'</th>
<th width="100">'.tr('Imponibile').'</th>
<th width="100">'.tr('Q.').'</th>
<th width="100">'.tr('Um').'</th>
</tr>';
$totale_imponibile = 0;
@ -26,17 +24,9 @@ for ($i = 0; $i < sizeof($rs); ++$i) {
<span>'.$rs[$i]['desc_riga'].'</span>
</td>
<td>
<td class="text-right">
<span>'.Translator::numberToLocale($rs[$i]['imponibile']).' &euro; </span>
</td>
<td
<span>'.Translator::numberToLocale($rs[$i]['qta']).'</span>
</td>
<td>
<span>'.$rs[$i]['um'].'</span>
</td>
</tr>';
$totale_imponibile += $rs[$i]['imponibile'];
@ -45,10 +35,8 @@ for ($i = 0; $i < sizeof($rs); ++$i) {
echo '
<tr>
<th>'.tr('Totali').': </th>
<th width="100"><span>'.Translator::numberToLocale($totale_imponibile).' &euro;</span></th>
<th width="100"><span>'.Translator::numberToLocale($totale_qta).'</span></th>
<th width="100"></th>
<th class="text-right">'.tr('Totali').': </th>
<th width="100" class="text-right"><span>'.Translator::numberToLocale($totale_imponibile).' &euro;</span></th>
</tr>
</table>

View File

@ -3,6 +3,11 @@
include_once __DIR__.'/../../core.php';
echo '
<div class="alert alert-warning">
<i class="fa fa-warning"></i> <b>'.tr('ATTENZIONE', ['upper']).':</b> '.tr('le suddette stampe contabili non sono da considerarsi valide ai fini fiscali').'.
</div>
<div class="row">
<div class="col-xs-12 col-md-6">
<div class="panel panel-primary">
@ -32,7 +37,7 @@ echo '
<div class="col-xs-12 col-md-6">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">'.tr('Spesometro dal _START_ al _END_', [
<h3 class="panel-title">'.tr('Comunicazione dati fatture (ex-spesometro) dal _START_ al _END_', [
'_START_' => Translator::dateToLocale($_SESSION['period_start']),
'_END_' => Translator::dateToLocale($_SESSION['period_end']),
]).'</h3>
@ -44,7 +49,7 @@ echo '
<a class="btn btn-primary" href="'.$rootdir.'/pdfgen.php?ptype=spesometro" target="_blank">
<i class="fa fa-print fa-2x"></i><br>
'.tr('Stampa').'<br>
'.tr('Spesometro').'
'.tr('dati fatture').'
</a>
</div>
</div>

View File

@ -58,7 +58,7 @@
"select2-bootstrap-theme": "^0.1.0-beta.10",
"signature_pad": "^2.1.1",
"smartwizard": "^4.2.2",
"sweetalert2": "^6.6.5",
"sweetalert2": "^6.11.4",
"tooltipster": "^4.2.5"
},
"devDependencies": {

View File

@ -66,15 +66,15 @@ if ('entrata' == $dir) {
$body .= "
<table cellspacing='0' style='table-layout:fixed;'>
<col width='40'><col width='100'><col width='100'><col width='362'><col width='160'><col width='90'><col width='90'>
<col width='90'><col width='90'><col width='450'><col width='120'><col width='120'><col width='90'><col width='90'>
<thead>
<tr>
<th bgcolor='#dddddd' class='full_cell1 cell-padded'> Documento</th>
<th bgcolor='#dddddd' class='full_cell1 cell-padded'>Data</th>
<th bgcolor='#dddddd' class='full_cell1 cell-padded'>Causale<br>Ragione sociale</th>
<th bgcolor='#dddddd' class='full_cell1 cell-padded'>Aliquota</th>
<th bgcolor='#dddddd' class='full_cell1 cell-padded'>Imponibile</th>
<th bgcolor='#dddddd' class='full_cell1 cell-padded'>Imposta</th>
<th bgcolor='#dddddd' class='full_cell1 cell-padded'> doc.</th>
<th bgcolor='#dddddd' class='full_cell cell-padded'>Data</th>
<th bgcolor='#dddddd' class='full_cell cell-padded'>Causale<br>Ragione sociale</th>
<th bgcolor='#dddddd' class='full_cell cell-padded'>Aliquota</th>
<th bgcolor='#dddddd' class='full_cell cell-padded'>Imponibile</th>
<th bgcolor='#dddddd' class='full_cell cell-padded'>Imposta</th>
</tr>
</thead>
";

View File

@ -971,3 +971,7 @@ ALTER TABLE `in_interventi` ADD `deleted` TINYINT NOT NULL DEFAULT '0' AFTER `da
-- Fix nella conversione dei listini precedenti
UPDATE `mg_listini` SET `prc_guadagno` = - `prc_guadagno`;
-- Aggiunta pagamento di default "Bonifico bancario"
INSERT INTO `co_pagamenti` (`id`, `descrizione`, `giorno`, `num_giorni`, `prc`, `created_at`, `idconto_vendite`, `idconto_acquisti`) VALUES (NULL, 'Bonifico bancario', '0', '10', '100', CURRENT_TIMESTAMP, NULL, NULL);