This commit is contained in:
MatteoPistorello 2023-05-08 15:39:36 +02:00
commit 1fc9d9ebcd
35 changed files with 705 additions and 170 deletions

View File

@ -1109,7 +1109,7 @@ div.tip {
.local-loader>div {
position: absolute;
top: 100px;
top: 0px;
z-index: 2;
opacity: 0.5;
width: 100%

View File

@ -74,4 +74,10 @@ if (in_array($id_cliente, $tipi_anagrafica) or in_array($id_fornitore, $tipi_ana
echo '
</ul>
</div>';
} else if (in_array($id_agente, $tipi_anagrafica)) {
//Aggiunta liquidazione provvigioni per agente
echo'
<button type="button" class="btn btn-primary" data-title="'.tr('Liquida Provvigioni').'" data-href="'.base_path().'/modules/anagrafiche/liquida_provvigioni.php?nome_stampa=Provvigioni&id_record='.$id_record.'" ><i class="fa fa-print"></i>'.tr(' Liquida Provvigioni').'</button>
</div>';
}

View File

@ -0,0 +1,116 @@
<?php
/*
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
* Copyright (C) DevCode s.r.l.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
include_once __DIR__.'/../../core.php';
use Models\Module;
use Carbon\Carbon;
$id_record = filter('id_record');
$dir = filter('dir');
$nome_stampa = filter('nome_stampa');
$id_print = $dbo->fetchOne('SELECT id FROM zz_prints WHERE name='.prepare($nome_stampa))['id'];
$id_module = Module::pool('Stampe contabili')->id;
$year = (new Carbon($_SESSION['period_end']))->format('Y');
// Trovo id_print della stampa
$link = Prints::getHref($nome_stampa, $id_record);
echo '
<div class="alert alert-info hidden" id="period">
<i class="fa fa-exclamation-circle"></i> '.tr('Non è possibile creare la stampa definitiva nel periodo selezionato, è necessario prima impostare un periodo!').'
</div>
<form action="" method="post" id="form" >
<div class="row">';
echo '
<div class="col-md-4">
{[ "type": "date", "label": "'.tr('Data inizio').'", "required": "1", "name": "date_start", "value": "'.$_SESSION['period_start'].'" ]}
</div>
<div class="col-md-4">
{[ "type": "date", "label": "'.tr('Data fine').'", "required": "1", "name": "date_end", "value": "'.$_SESSION['period_end'].'" ]}
</div>
<div class="col-md-4">
{[ "type": "checkbox", "label": "'.tr('Includi emesse').'", "name": "is_emessa" ]}
</div>
</div>
<div class="row">
<div class="col-md-4">
{[ "type": "select", "label": "'.tr('Formato').'", "name": "format", "required": "1", "values": "list=\"A4\": \"'.tr('A4').'\", \"A3\": \"'.tr('A3').'\"", "value": "'.$_SESSION['stampe_contabili']['format'].'" ]}
</div>
<div class="col-md-4">
{[ "type": "select", "label": "'.tr('Orientamento').'", "name": "orientation", "required": "1", "values": "list=\"L\": \"'.tr('Orizzontale').'\", \"P\": \"'.tr('Verticale').'\"", "value": "'.$_SESSION['stampe_contabili']['orientation'].'" ]}
</div>
<div class="col-md-4">
{[ "type": "checkbox", "label": "'.tr('Includi parzialmente pagate').'", "name": "is_parz_pagata" ]}
</div>
';
echo '
<div class="col-md-4 pull-right">
<p style="line-height:14px;">&nbsp;</p>
<button type="button" class="btn btn-primary btn-block" onclick="if($(\'#form\').parsley().validate()) { return avvia_stampa(); }">
<i class="fa fa-print"></i> '.tr('Stampa').'
</button>
</div>
</div>
</form>
<br>';
echo '
<script>
$(document).ready(init);
function avvia_stampa (){
var is_emessa = $("#is_emessa").is(":checked");
var is_parz_pagata = $("#is_parz_pagata").is(":checked");
window.open("'.$link.'&dir='.$dir.'&is_emessa="+is_emessa+"&is_parz_pagata="+is_parz_pagata+"&notdefinitiva=1&id_sezionale="+$("#id_sezionale").val()+"&date_start="+$("#date_start").val()+"&date_end="+$("#date_end").val()+"");
$("#modals > div").modal("hide");
}
$("#format").change(function() {
session_set("stampe_contabili,format", $(this).val(), 0, 0);
});
$("#orientation").change(function() {
session_set("stampe_contabili,orientation", $(this).val(), 0, 0);
});
$("#periodo").change(function() {
if ($(this).val()=="manuale") {
input("date_start").enable();
input("date_end").enable();
} else {
$("#date_start").data("DateTimePicker").date(new Date(input("periodo").getData().date_start));
$("#date_end").data("DateTimePicker").date(new Date(input("periodo").getData().date_end));
input("date_start").disable();
input("date_end").disable();
}';
if ($nome_stampa != 'Liquidazione IVA') {
echo 'eseguiControlli();';
}
echo '
});
</script>';

View File

@ -39,7 +39,7 @@ function renderChecklist($check, $level = 1, $parent = 0) {
$result .= '
<td style="border-top:0px;">
<span class="text">'.$check->content.' </span>';
<span class="text" style="'.(!empty($check->checked_at)?'text-decoration:line-through;':'').'">'.$check->content.' </span>';
if (intval($check->assignedUsers->pluck('id')->toArray())>0){
$result .= ' <span class="label label-info pull-right" style="padding:6px 8px;" data-toggle="tooltip" title="Assegnato a '. implode(', ', $check->assignedUsers->pluck('username')->toArray()).'"><i class="fa fa-user"></i></span>';

View File

@ -667,6 +667,7 @@ switch (post('op')) {
case 'edit-price':
$righe = $post['righe'];
$numero_totale = 0;
foreach ($righe as $riga) {
if (($riga['id']) != null) {
@ -676,12 +677,25 @@ switch (post('op')) {
$articolo = Articolo::build($fattura, $originale);
$articolo->id_dettaglio_fornitore = post('id_dettaglio_fornitore') ?: null;
}
$articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
$articolo->save();
flash()->info(tr('Prezzi aggiornati!'));
if ($articolo['prezzo_unitario'] != $riga['price']) {
$articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
$articolo->save();
++$numero_totale;
}
}
if ($numero_totale > 1) {
flash()->info(tr('_NUM_ prezzi modificati!', [
'_NUM_' => $numero_totale,
]));
} else if ($numero_totale == 1) {
flash()->info(tr('_NUM_ prezzo modificato!', [
'_NUM_' => $numero_totale,
]));
} else {
flash()->warning(tr('Nessun prezzo modificato!'));
}
break;
}
}

View File

@ -43,7 +43,7 @@ $righe = $dbo->fetchArray(
<th><?php echo tr('Descrizione'); ?></th>
<th class="text-center" width="150"><?php echo tr('Prezzo corrente'); ?></th>
<th class="text-center" width="150"><?php echo tr('Ultimo preventivo'); ?></th>
<th class="text-center" width="150"><?php echo tr('Ultima vendita'); ?></th>
<th class="text-center" width="150"><?php echo tr('Ultima fattura'); ?></th>
</tr>
</thead>
<tbody>

View File

@ -21,6 +21,7 @@ include_once __DIR__.'/init.php';
$block_edit = $record['is_completato'];
$righe = $contratto->getRighe();
$direzione = $contratto->direzione;
$colspan = ($block_edit ? '5' : '6');
echo '
@ -325,11 +326,13 @@ if (!$block_edit && sizeof($righe) > 0) {
<button type="button" class="btn btn-xs btn-default disabled" id="elimina_righe" onclick="rimuoviRiga(getSelectData());">
<i class="fa fa-trash"></i>
</button>
<button type="button" class="btn btn-xs btn-default disabled" id="confronta_righe" onclick="confrontaRighe(getSelectData());">
Confronta prezzi
</button>
</button>';
if ($direzione == 'entrata') {
echo'
<button type="button" class="btn btn-xs btn-default disabled" id="confronta_righe" onclick="confrontaRighe(getSelectData());">
Confronta prezzi
</button>';
} echo'
</div>';
}
echo '

View File

@ -692,6 +692,7 @@ switch (filter('op')) {
case 'edit-price':
$righe = $post['righe'];
$numero_totale = 0;
foreach ($righe as $riga) {
if (($riga['id']) != null) {
@ -702,15 +703,29 @@ switch (filter('op')) {
$articolo->id_dettaglio_fornitore = post('id_dettaglio_fornitore') ?: null;
}
$articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
$articolo->save();
flash()->info(tr('Prezzi aggiornati!'));
if ($articolo['prezzo_unitario'] != $riga['price']) {
$articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
$articolo->save();
++$numero_totale;
}
}
if ($numero_totale > 1) {
flash()->info(tr('_NUM_ prezzi modificati!', [
'_NUM_' => $numero_totale,
]));
} else if ($numero_totale == 1) {
flash()->info(tr('_NUM_ prezzo modificato!', [
'_NUM_' => $numero_totale,
]));
} else {
flash()->warning(tr('Nessun prezzo modificato!'));
}
break;
}
// Aggiornamento stato degli ordini presenti in questa fattura in base alle quantità totali evase
if (!empty($id_record) && setting('Cambia automaticamente stato ordini fatturati')) {
$rs = $dbo->fetchArray('SELECT idordine FROM dt_righe_ddt WHERE idddt='.prepare($id_record).' AND idordine!=0');

View File

@ -43,7 +43,7 @@ $righe = $dbo->fetchArray(
<th><?php echo tr('Descrizione'); ?></th>
<th class="text-center" width="150"><?php echo tr('Prezzo corrente'); ?></th>
<th class="text-center" width="150"><?php echo tr('Ultimo preventivo'); ?></th>
<th class="text-center" width="150"><?php echo tr('Ultima vendita'); ?></th>
<th class="text-center" width="150"><?php echo tr('Ultima fattura'); ?></th>
</tr>
</thead>
<tbody>

View File

@ -22,6 +22,7 @@ include_once __DIR__.'/init.php';
$block_edit = $record['flag_completato'];
$righe = $ddt->getRighe();
$colspan = ($block_edit ? '5' : '6');
$direzione = $ddt->direzione;
echo '
<div class="table-responsive row-list">
@ -371,11 +372,13 @@ if (!$block_edit && sizeof($righe) > 0) {
<button type="button" class="btn btn-xs btn-default disabled" id="elimina_righe" onclick="rimuoviRiga(getSelectData());">
<i class="fa fa-trash"></i>
</button>
<button type="button" class="btn btn-xs btn-default disabled" id="confronta_righe" onclick="confrontaRighe(getSelectData());">
Confronta prezzi
</button>
</button>';
if ($dir == 'entrata') {
echo'
<button type="button" class="btn btn-xs btn-default disabled" id="confronta_righe" onclick="confrontaRighe(getSelectData());">
Confronta prezzi
</button>';
} echo'
</div>';
}
echo '

View File

@ -1066,6 +1066,7 @@ switch (post('op')) {
case 'edit-price':
$righe = $post['righe'];
$numero_totale = 0;
foreach ($righe as $riga) {
if (($riga['id']) != null) {
@ -1076,12 +1077,25 @@ switch (post('op')) {
$articolo->id_dettaglio_fornitore = post('id_dettaglio_fornitore') ?: null;
}
$articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
$articolo->save();
flash()->info(tr('Prezzi aggiornati!'));
if ($articolo['prezzo_unitario'] != $riga['price']) {
$articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
$articolo->save();
++$numero_totale;
}
}
if ($numero_totale > 1) {
flash()->info(tr('_NUM_ prezzi modificati!', [
'_NUM_' => $numero_totale,
]));
} else if ($numero_totale == 1) {
flash()->info(tr('_NUM_ prezzo modificato!', [
'_NUM_' => $numero_totale,
]));
} else {
flash()->warning(tr('Nessun prezzo modificato!'));
}
break;
}

View File

@ -43,7 +43,7 @@ $righe = $dbo->fetchArray(
<th><?php echo tr('Descrizione'); ?></th>
<th class="text-center" width="150"><?php echo tr('Prezzo corrente'); ?></th>
<th class="text-center" width="150"><?php echo tr('Ultimo preventivo'); ?></th>
<th class="text-center" width="150"><?php echo tr('Ultima vendita'); ?></th>
<th class="text-center" width="150"><?php echo tr('Ultima fattura'); ?></th>
</tr>
</thead>
<tbody>

View File

@ -21,6 +21,7 @@ use Modules\Interventi\Intervento;
include_once __DIR__.'/init.php';
$direzione = $fattura->direzione;
$block_edit = !empty($note_accredito) || in_array($record['stato'], ['Emessa', 'Pagato', 'Parzialmente pagato']) || !$abilita_genera;
$righe = $fattura->getRighe();
@ -505,10 +506,13 @@ if (!$block_edit && sizeof($righe) > 0) {
<button type="button" class="btn btn-xs btn-default disabled" id="elimina_righe" onclick="rimuoviRiga(getSelectData());">
<i class="fa fa-trash"></i>
</button>
<button type="button" class="btn btn-xs btn-default disabled" id="confronta_righe" onclick="confrontaRighe(getSelectData());">
Confronta prezzi
</button>
</button>';
if ($direzione == 'entrata') {
echo'
<button type="button" class="btn btn-xs btn-default disabled" id="confronta_righe" onclick="confrontaRighe(getSelectData());">
Confronta prezzi
</button>';
} echo'
</div>';
}
echo '

View File

@ -1160,6 +1160,7 @@ switch (post('op')) {
case 'edit-price':
$righe = $post['righe'];
$numero_totale = 0;
foreach ($righe as $riga) {
if (($riga['id']) != null) {
@ -1170,11 +1171,24 @@ switch (post('op')) {
$articolo->id_dettaglio_fornitore = post('id_dettaglio_fornitore') ?: null;
}
$articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
$articolo->save();
flash()->info(tr('Prezzi aggiornati!'));
if ($articolo['prezzo_unitario'] != $riga['price']) {
$articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
$articolo->save();
++$numero_totale;
}
}
if ($numero_totale > 1) {
flash()->info(tr('_NUM_ prezzi modificati!', [
'_NUM_' => $numero_totale,
]));
} else if ($numero_totale == 1) {
flash()->info(tr('_NUM_ prezzo modificato!', [
'_NUM_' => $numero_totale,
]));
} else {
flash()->warning(tr('Nessun prezzo modificato!'));
}
break;
}

View File

@ -134,7 +134,7 @@ if ($show_prezzi) {
echo '
<tr>
<td colspan="3" class="text-right">
<b>'.tr('Totale', [], ['upper' => true]).':</b>
<b>'.tr('Totale documento', [], ['upper' => true]).':</b>
</td>
<td class="text-right">
'.moneyFormat($totale, 2).'

View File

@ -43,7 +43,7 @@ $righe = $dbo->fetchArray(
<th><?php echo tr('Descrizione'); ?></th>
<th class="text-center" width="150"><?php echo tr('Prezzo corrente'); ?></th>
<th class="text-center" width="150"><?php echo tr('Ultimo preventivo'); ?></th>
<th class="text-center" width="150"><?php echo tr('Ultima vendita'); ?></th>
<th class="text-center" width="150"><?php echo tr('Ultima fattura'); ?></th>
</tr>
</thead>
<tbody>

View File

@ -22,6 +22,7 @@ include_once __DIR__.'/init.php';
$block_edit = $record['flag_completato'];
$righe = $intervento->getRighe();
$colspan = ($block_edit ? '5' : '6');
$direzione = $intervento->direzione;
$show_prezzi = Auth::user()['gruppo'] != 'Tecnici' || (Auth::user()['gruppo'] == 'Tecnici' && setting('Mostra i prezzi al tecnico'));
@ -280,10 +281,13 @@ if (!$block_edit && sizeof($righe) > 0) {
<button type="button" class="btn btn-xs btn-default disabled" id="elimina_righe" onclick="rimuoviRiga(getSelectData());">
<i class="fa fa-trash"></i>
</button>
<button type="button" class="btn btn-xs btn-default disabled" id="confronta_righe" onclick="confrontaRighe(getSelectData());">
Confronta prezzi
</button>
</button>';
if ($direzione == 'entrata') {
echo'
<button type="button" class="btn btn-xs btn-default disabled" id="confronta_righe" onclick="confrontaRighe(getSelectData());">
Confronta prezzi
</button>';
} echo'
</div>';
}
echo '

View File

@ -626,80 +626,76 @@ switch (post('op')) {
$qta_articolo = $dbo->selectOne('mg_articoli', 'qta', ['id' => $id_articolo])['qta'];
$originale = ArticoloOriginale::find($id_articolo);
$articolo = Articolo::build($ordine, $originale);
$qta = 1;
if ($qta_articolo <= 0 && !$permetti_movimenti_sotto_zero && !$originale->servizio && $dir == 'entrata') {
$response['error'] = tr('Quantità a magazzino non sufficiente');
echo json_encode($response);
} else {
$articolo = Articolo::build($ordine, $originale);
$qta = 1;
$articolo->descrizione = $originale->descrizione;
$articolo->um = $originale->um;
$articolo->qta = 1;
$articolo->costo_unitario = $originale->prezzo_acquisto;
$articolo->descrizione = $originale->descrizione;
$articolo->um = $originale->um;
$articolo->qta = 1;
$articolo->costo_unitario = $originale->prezzo_acquisto;
if ($dir == 'entrata') {
$id_iva = ($ordine->anagrafica->idiva_vendite ?: $originale->idiva_vendita) ?: setting('Iva predefinita');
} else {
$id_iva = ($ordine->anagrafica->idiva_acquisti ?: setting('Iva predefinita'));
}
$id_anagrafica = $ordine->idanagrafica;
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
// CALCOLO PREZZO UNITARIO
$prezzo_unitario = 0;
$sconto = 0;
// Prezzi netti clienti / listino fornitore
$prezzi = $dbo->fetchArray('SELECT minimo, massimo, sconto_percentuale, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario
FROM mg_prezzi_articoli
WHERE id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND id_anagrafica = '.prepare($id_anagrafica));
if ($prezzi) {
foreach ($prezzi as $prezzo) {
if ($qta >= $prezzo['minimo'] && $qta <= $prezzo['massimo']) {
$prezzo_unitario = $prezzo['prezzo_unitario'];
$sconto = $prezzo['sconto_percentuale'];
continue;
}
if ($prezzo['minimo'] == null && $prezzo['massimo'] == null && $prezzo['prezzo_unitario'] != null) {
$prezzo_unitario = $prezzo['prezzo_unitario'];
$sconto = $prezzo['sconto_percentuale'];
continue;
}
}
}
if (empty($prezzo_unitario)) {
// Prezzi listini clienti
$listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino
FROM mg_listini
LEFT JOIN mg_listini_articoli ON mg_listini.id=mg_listini_articoli.id_listino
LEFT JOIN an_anagrafiche ON mg_listini.id=an_anagrafiche.id_listino
WHERE mg_listini.data_attivazione<=NOW() AND mg_listini_articoli.data_scadenza>=NOW() AND mg_listini.attivo=1 AND id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND idanagrafica = '.prepare($id_anagrafica));
if ($listino) {
$prezzo_unitario = $listino['prezzo_unitario_listino'];
$sconto = $listino['sconto_percentuale_listino'];
}
}
if ($dir == 'entrata') {
$prezzo_unitario = $prezzo_unitario ?: ($prezzi_ivati ? $originale->prezzo_vendita_ivato : $originale->prezzo_vendita);
} else {
$prezzo_unitario = $prezzo_unitario ?: $originale->prezzo_acquisto;
}
$provvigione = $dbo->selectOne('an_anagrafiche', 'provvigione_default', ['idanagrafica' => $ordine->idagente])['provvigione_default'];
$articolo->confermato = ($dir = 'entrata' ? setting('Conferma automaticamente le quantità negli ordini cliente') : setting('Conferma automaticamente le quantità negli ordini fornitore'));
$articolo->setPrezzoUnitario($prezzo_unitario, $id_iva);
$articolo->setSconto($sconto, 'PRC');
$articolo->setProvvigione($provvigione ?: 0, 'PRC');
$articolo->save();
flash()->info(tr('Nuovo articolo aggiunto!'));
if ($dir == 'entrata') {
$id_iva = ($ordine->anagrafica->idiva_vendite ?: $originale->idiva_vendita) ?: setting('Iva predefinita');
} else {
$id_iva = ($ordine->anagrafica->idiva_acquisti ?: setting('Iva predefinita'));
}
$id_anagrafica = $ordine->idanagrafica;
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
// CALCOLO PREZZO UNITARIO
$prezzo_unitario = 0;
$sconto = 0;
// Prezzi netti clienti / listino fornitore
$prezzi = $dbo->fetchArray('SELECT minimo, massimo, sconto_percentuale, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario
FROM mg_prezzi_articoli
WHERE id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND id_anagrafica = '.prepare($id_anagrafica));
if ($prezzi) {
foreach ($prezzi as $prezzo) {
if ($qta >= $prezzo['minimo'] && $qta <= $prezzo['massimo']) {
$prezzo_unitario = $prezzo['prezzo_unitario'];
$sconto = $prezzo['sconto_percentuale'];
continue;
}
if ($prezzo['minimo'] == null && $prezzo['massimo'] == null && $prezzo['prezzo_unitario'] != null) {
$prezzo_unitario = $prezzo['prezzo_unitario'];
$sconto = $prezzo['sconto_percentuale'];
continue;
}
}
}
if (empty($prezzo_unitario)) {
// Prezzi listini clienti
$listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino
FROM mg_listini
LEFT JOIN mg_listini_articoli ON mg_listini.id=mg_listini_articoli.id_listino
LEFT JOIN an_anagrafiche ON mg_listini.id=an_anagrafiche.id_listino
WHERE mg_listini.data_attivazione<=NOW() AND mg_listini_articoli.data_scadenza>=NOW() AND mg_listini.attivo=1 AND id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND idanagrafica = '.prepare($id_anagrafica));
if ($listino) {
$prezzo_unitario = $listino['prezzo_unitario_listino'];
$sconto = $listino['sconto_percentuale_listino'];
}
}
if ($dir == 'entrata') {
$prezzo_unitario = $prezzo_unitario ?: ($prezzi_ivati ? $originale->prezzo_vendita_ivato : $originale->prezzo_vendita);
} else {
$prezzo_unitario = $prezzo_unitario ?: $originale->prezzo_acquisto;
}
$provvigione = $dbo->selectOne('an_anagrafiche', 'provvigione_default', ['idanagrafica' => $ordine->idagente])['provvigione_default'];
$articolo->confermato = ($dir = 'entrata' ? setting('Conferma automaticamente le quantità negli ordini cliente') : setting('Conferma automaticamente le quantità negli ordini fornitore'));
$articolo->setPrezzoUnitario($prezzo_unitario, $id_iva);
$articolo->setSconto($sconto, 'PRC');
$articolo->setProvvigione($provvigione ?: 0, 'PRC');
$articolo->save();
flash()->info(tr('Nuovo articolo aggiunto!'));
} else {
$response['error'] = tr('Nessun articolo corrispondente a magazzino');
echo json_encode($response);
@ -724,7 +720,8 @@ switch (post('op')) {
case 'edit-price':
$righe = $post['righe'];
$numero_totale = 0;
foreach ($righe as $riga) {
if (($riga['id']) != null) {
$articolo = Articolo::find($riga['id']);
@ -734,11 +731,24 @@ switch (post('op')) {
$articolo->id_dettaglio_fornitore = post('id_dettaglio_fornitore') ?: null;
}
$articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
$articolo->save();
flash()->info(tr('Prezzi aggiornati!'));
if ($articolo['prezzo_unitario'] != $riga['price']) {
$articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
$articolo->save();
++$numero_totale;
}
}
if ($numero_totale > 1) {
flash()->info(tr('_NUM_ prezzi modificati!', [
'_NUM_' => $numero_totale,
]));
} else if ($numero_totale == 1) {
flash()->info(tr('_NUM_ prezzo modificato!', [
'_NUM_' => $numero_totale,
]));
} else {
flash()->warning(tr('Nessun prezzo modificato!'));
}
break;
}
}

View File

@ -43,7 +43,7 @@ $righe = $dbo->fetchArray(
<th><?php echo tr('Descrizione'); ?></th>
<th class="text-center" width="150"><?php echo tr('Prezzo corrente'); ?></th>
<th class="text-center" width="150"><?php echo tr('Ultimo preventivo'); ?></th>
<th class="text-center" width="150"><?php echo tr('Ultima vendita'); ?></th>
<th class="text-center" width="150"><?php echo tr('Ultima fattura'); ?></th>
</tr>
</thead>
<tbody>

View File

@ -24,6 +24,7 @@ use Modules\Articoli\Articolo;
$block_edit = $record['flag_completato'];
$righe = $ordine->getRighe();
$colspan = ($block_edit ? '6' : '7');
$direzione = $ordine->direzione;
echo '
<div class="table-responsive row-list">
@ -416,11 +417,13 @@ if (!$block_edit && sizeof($righe) > 0) {
<button type="button" class="btn btn-xs btn-default disabled" id="elimina_righe" onclick="rimuoviRiga(getSelectData());">
<i class="fa fa-trash"></i>
</button>
<button type="button" class="btn btn-xs btn-default disabled" id="confronta_righe" onclick="confrontaRighe(getSelectData());">
Confronta prezzi
</button>
</button>';
if ($direzione == 'entrata') {
echo'
<button type="button" class="btn btn-xs btn-default disabled" id="confronta_righe" onclick="confrontaRighe(getSelectData());">
Confronta prezzi
</button>';
} echo'
</div>';
}
echo '

View File

@ -542,7 +542,8 @@ switch (post('op')) {
case 'edit-price':
$righe = $post['righe'];
$numero_totale = 0;
foreach ($righe as $riga) {
if (($riga['id']) != null) {
$articolo = Articolo::find($riga['id']);
@ -551,13 +552,25 @@ switch (post('op')) {
$articolo = Articolo::build($fattura, $originale);
$articolo->id_dettaglio_fornitore = post('id_dettaglio_fornitore') ?: null;
}
$articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
$articolo->save();
flash()->info(tr('Prezzi aggiornati!'));
if ($articolo['prezzo_unitario'] != $riga['price']) {
$articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
$articolo->save();
++$numero_totale;
}
}
break;
}
if ($numero_totale > 1) {
flash()->info(tr('_NUM_ prezzi modificati!', [
'_NUM_' => $numero_totale,
]));
} else if ($numero_totale == 1) {
flash()->info(tr('_NUM_ prezzo modificato!', [
'_NUM_' => $numero_totale,
]));
} else {
flash()->warning(tr('Nessun prezzo modificato!'));
}
break;
}

View File

@ -43,7 +43,7 @@ $righe = $dbo->fetchArray(
<th><?php echo tr('Descrizione'); ?></th>
<th class="text-center" width="150"><?php echo tr('Prezzo corrente'); ?></th>
<th class="text-center" width="150"><?php echo tr('Ultimo preventivo'); ?></th>
<th class="text-center" width="150"><?php echo tr('Ultima vendita'); ?></th>
<th class="text-center" width="150"><?php echo tr('Ultima fattura'); ?></th>
</tr>
</thead>
<tbody>

View File

@ -22,6 +22,7 @@ include_once __DIR__.'/init.php';
$block_edit = $record['is_completato'];
$righe = $preventivo->getRighe();
$colspan = ($block_edit ? '6' : '7');
$direzione = $preventivo->direzione;
echo '
<div class="table-responsive row-list">
@ -384,10 +385,13 @@ if (!$block_edit && sizeof($righe) > 0) {
<button type="button" class="btn btn-xs btn-default disabled" id="elimina_righe" onclick="rimuoviRiga(getSelectData());">
<i class="fa fa-trash"></i>
</button>
<button type="button" class="btn btn-xs btn-default disabled" id="confronta_righe" onclick="confrontaRighe(getSelectData());">
Confronta prezzi
</button>
</button>';
if ($direzione == 'entrata') {
echo'
<button type="button" class="btn btn-xs btn-default disabled" id="confronta_righe" onclick="confrontaRighe(getSelectData());">
Confronta prezzi
</button>';
} echo'
</div>';
}
echo '

View File

@ -73,7 +73,6 @@ class Preventivo extends Document
$id_agente = $anagrafica->idagente;
$id_pagamento = $anagrafica->idpagamento_vendite;
$id_segment = $id_segment ?: getSegmentPredefined($model->getModule()->id);
$id_agente = $anagrafica->idagente;
$id_iva = setting('Iva predefinita');
if (empty($id_pagamento)) {

View File

@ -124,8 +124,12 @@ $(".checkbox").click(function(){
$.post("'.$checklist_module->fileurl('ajax.php').'", {
op: "save_checkbox",
id: $(this).attr("data-id"),
},function(result){
reload();
});
$(this).parent().parent().find(".text").css("text-decoration", "line-through");
parent = $(this).attr("data-id");
$("tr.sonof_"+parent).find("input[type=checkbox]").each(function(){
if(!$(this).is(":checked")){
@ -136,8 +140,12 @@ $(".checkbox").click(function(){
$.post("'.$checklist_module->fileurl('ajax.php').'", {
op: "remove_checkbox",
id: $(this).attr("data-id"),
},function(result){
reload();
});
$(this).parent().parent().find(".text").css("text-decoration", "none");
parent = $(this).attr("data-id");
$("tr.sonof_"+parent).find("input[type=checkbox]").each(function(){
if($(this).is(":checked")){
@ -162,6 +170,15 @@ function edit_check(id){
launch_modal("Modifica checklist", "'.$checklist_module->fileurl('components/edit-check.php').'?id_record="+id, 1);
}
function reload(){
$("#loading_'.$checks_id.'").removeClass("hide");
$("#loading_'.$checks_id.'").addClass("show");
$("#'.$checks_id.'").load(globals.rootdir + "/ajax.php?op=checklists&id_module='.$id_module.'&id_record='.$id_record.'&id_plugin='.$id_plugin.'", function() {
$("#loading_'.$checks_id.'").removeClass("show");
$("#loading_'.$checks_id.'").addClass("hide");
});
}
</script>';
?>

View File

@ -237,8 +237,14 @@ class FatturaOrdinaria extends FatturaElettronica
// Nel caso il prezzo sia negativo viene gestito attraverso l'inversione della quantità (come per le note di credito)
// TODO: per migliorare la visualizzazione, sarebbe da lasciare negativo il prezzo e invertire gli sconti.
$prezzo = $totale_righe > 0 ? $riga['PrezzoUnitario'] : -$riga['PrezzoUnitario'];
$qta = (!empty($articolo->um) && !empty($articolo->fattore_um_secondaria) && $riga['UnitaMisura'] == $articolo->um_secondaria) ? $riga['Quantita'] / $articolo->fattore_um_secondaria : ($riga['Quantita'] ?: 1);
if (!empty($articolo->um) && !empty($articolo->fattore_um_secondaria) && $riga['UnitaMisura'] == $articolo->um_secondaria) {
$qta = (($riga['Quantita'] ?: 1) / $articolo->fattore_um_secondaria);
$prezzo = $totale_righe > 0 ? $totale_righe/$qta : -($totale_righe/$qta);
} else {
$qta = ($riga['Quantita'] ?: 1);
$prezzo = $totale_righe > 0 ? $riga['PrezzoUnitario'] : -$riga['PrezzoUnitario'];
}
// Prezzo e quantità
$obj->prezzo_unitario = $prezzo;

View File

@ -877,10 +877,19 @@
Identificativo fiscale ai fini IVA:
<span>
<xsl:value-of select="IdFiscaleIVA/IdPaese" />
<xsl:value-of select="IdFiscaleIVA/IdCodice" />
<xsl:choose>
<xsl:when test="string(number(substring(IdFiscaleIVA/IdCodice,1,2)))='NaN'">
<xsl:if test="IdFiscaleIVA/IdPaese = 'FR' or (substring(IdFiscaleIVA/IdCodice,1,2)='GD') or (substring(IdFiscaleIVA/IdCodice,1,2)='HA')">
<xsl:value-of select="IdFiscaleIVA/IdPaese" />
</xsl:if>
<xsl:value-of select="IdFiscaleIVA/IdCodice" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="IdFiscaleIVA/IdPaese" />
<xsl:value-of select="IdFiscaleIVA/IdCodice" />
</xsl:otherwise>
</xsl:choose>
</span>
</xsl:if>
</div>
@ -1135,10 +1144,20 @@
<xsl:if test="IdFiscaleIVA">
Identificativo fiscale ai fini IVA:
<span>
<xsl:value-of select="IdFiscaleIVA/IdPaese" />
<xsl:value-of select="IdFiscaleIVA/IdCodice" />
</span>
<span>
<xsl:choose>
<xsl:when test="string(number(substring(IdFiscaleIVA/IdCodice,1,2)))='NaN'">
<xsl:if test="IdFiscaleIVA/IdPaese = 'FR' or (substring(IdFiscaleIVA/IdCodice,1,2)='GD') or (substring(IdFiscaleIVA/IdCodice,1,2)='HA')">
<xsl:value-of select="IdFiscaleIVA/IdPaese" />
</xsl:if>
<xsl:value-of select="IdFiscaleIVA/IdCodice" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="IdFiscaleIVA/IdPaese" />
<xsl:value-of select="IdFiscaleIVA/IdCodice" />
</xsl:otherwise>
</xsl:choose>
</span>
</xsl:if>
</div>
@ -1360,10 +1379,20 @@
<xsl:if test="IdFiscaleIVA">
Identificativo fiscale ai fini IVA:
<span>
<xsl:value-of select="IdFiscaleIVA/IdPaese" />
<xsl:value-of select="IdFiscaleIVA/IdCodice" />
</span>
<span>
<xsl:choose>
<xsl:when test="string(number(substring(IdFiscaleIVA/IdCodice,1,2)))='NaN'">
<xsl:if test="IdFiscaleIVA/IdPaese = 'FR' or (substring(IdFiscaleIVA/IdCodice,1,2)='GD') or (substring(IdFiscaleIVA/IdCodice,1,2)='HA')">
<xsl:value-of select="IdFiscaleIVA/IdPaese" />
</xsl:if>
<xsl:value-of select="IdFiscaleIVA/IdCodice" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="IdFiscaleIVA/IdPaese" />
<xsl:value-of select="IdFiscaleIVA/IdCodice" />
</xsl:otherwise>
</xsl:choose>
</span>
</xsl:if>
</div>
@ -1455,8 +1484,18 @@
Identificativo fiscale ai fini IVA:
<span>
<xsl:value-of select="IdFiscaleIVA/IdPaese" />
<xsl:value-of select="IdFiscaleIVA/IdCodice" />
<xsl:choose>
<xsl:when test="string(number(substring(IdFiscaleIVA/IdCodice,1,2)))='NaN'">
<xsl:if test="IdFiscaleIVA/IdPaese = 'FR' or (substring(IdFiscaleIVA/IdCodice,1,2)='GD') or (substring(IdFiscaleIVA/IdCodice,1,2)='HA')">
<xsl:value-of select="IdFiscaleIVA/IdPaese" />
</xsl:if>
<xsl:value-of select="IdFiscaleIVA/IdCodice" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="IdFiscaleIVA/IdPaese" />
<xsl:value-of select="IdFiscaleIVA/IdCodice" />
</xsl:otherwise>
</xsl:choose>
</span>
</xsl:if>
@ -1602,8 +1641,18 @@
Identificativo fiscale ai fini IVA:
<span>
<xsl:value-of select="IdFiscaleIVA/IdPaese" />
<xsl:value-of select="IdFiscaleIVA/IdCodice" />
<xsl:choose>
<xsl:when test="string(number(substring(IdFiscaleIVA/IdCodice,1,2)))='NaN'">
<xsl:if test="IdFiscaleIVA/IdPaese = 'FR' or (substring(IdFiscaleIVA/IdCodice,1,2)='GD') or (substring(IdFiscaleIVA/IdCodice,1,2)='HA')">
<xsl:value-of select="IdFiscaleIVA/IdPaese" />
</xsl:if>
<xsl:value-of select="IdFiscaleIVA/IdCodice" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="IdFiscaleIVA/IdPaese" />
<xsl:value-of select="IdFiscaleIVA/IdCodice" />
</xsl:otherwise>
</xsl:choose>
</span>
</xsl:if>

View File

@ -201,25 +201,28 @@ class Query
$equal = string_starts_with($real_value, '=');
$notequal = string_starts_with($real_value, '!=');
if ($minus || $more || $equal || $notequal) {
if ($minus || $more) {
$sign = string_contains($real_value, '=') ? '=' : '';
if ($more) {
$sign = '>'.$sign;
} elseif ($minus) {
$sign = '<'.$sign;
} elseif ($equal) {
$sign = '=';
} else {
$sign = '!=';
}
$value = trim(str_replace(['&lt;', '=', '&gt;', '!'], '', $value));
$value = trim(str_replace(['&lt;', '&gt;'], '', $value));
if ($more || $minus) {
$search_filters[] = 'CAST('.$search_query.' AS UNSIGNED) '.$sign.' '.prepare($value);
} else {
$search_filters[] = $search_query.' '.$sign.' '.prepare($value);
}
} else if ($equal){
$value = trim(str_replace(['='], '', $value));
$search_filters[] = ($search_query.' = '.prepare($value). ' OR '.$search_query.' LIKE '.prepare('% '.$value) . ' OR '.$search_query.' LIKE '.prepare($value.' %').' OR '.$search_query.' LIKE '.prepare('% '.$value.' %'));
} else if ($notequal) {
$value = trim(str_replace(['!='], '', $value));
$search_filters[] = ($search_query.' != '.prepare($value). ' AND '.$search_query.' NOT LIKE '.prepare('% '.$value) . ' AND '.$search_query.' NOT LIKE '.prepare($value.' %').' AND '.$search_query.' NOT LIKE '.prepare('% '.$value.' %'));
} else {
$search_filters[] = $search_query.' LIKE '.prepare('%'.$value.'%');
}

View File

@ -190,7 +190,7 @@ foreach ($righe as $riga) {
echo '
<tr>
<td class="text-center" style="vertical-align: middle" width="25">
<td class="text-center" nowrap="nowrap" style="vertical-align: middle" width="25">
'.$num.'
</td>';

View File

@ -0,0 +1,32 @@
<?php
/*
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
* Copyright (C) DevCode s.r.l.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
include_once __DIR__.'/../../core.php';
$totale_provvigioni = sum(array_column($records, 'provvigione'));
echo '
<tr>
<td colspan="4" class="text-right">
<b>'.tr('Totale provvigioni', [], ['upper' => true]).':</b>
</td>
<td class="text-center">'.moneyFormat($totale_provvigioni, 2).'</td>
</tr>
</tbody>
</table>';

View File

@ -0,0 +1,72 @@
<?php
/*
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
* Copyright (C) DevCode s.r.l.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
include_once __DIR__.'/../../core.php';
$module = Modules::get('Fatture di vendita');
$id_module = $module['id'];
$module_query = '
SELECT
numero_esterno,
an_anagrafiche.ragione_sociale,
SUM(prezzo_unitario*qta) as \'Totale\',
provvigione_percentuale,
provvigione
FROM
`co_documenti`
LEFT JOIN `an_anagrafiche` ON `co_documenti`.`idanagrafica` = `an_anagrafiche`.`idanagrafica`
LEFT JOIN `co_tipidocumento` ON `co_documenti`.`idtipodocumento` = `co_tipidocumento`.`id`
LEFT JOIN (SELECT `iddocumento`, SUM(`subtotale` - `sconto`) AS `totale_imponibile`, SUM(`iva`) AS `iva` FROM `co_righe_documenti` GROUP BY `iddocumento`) AS righe ON `co_documenti`.`id` = `righe`.`iddocumento`
LEFT JOIN `co_statidocumento` ON `co_documenti`.`idstatodocumento` = `co_statidocumento`.`id`
LEFT JOIN an_anagrafiche as agenti ON agenti.idanagrafica = co_documenti.idagente
LEFT JOIN co_righe_documenti ON co_righe_documenti.iddocumento = co_documenti.id
WHERE
1=1 AND provvigione > 0
GROUP BY
co_documenti.id
HAVING
2=2
ORDER BY
`co_documenti`.`data` DESC';
if(!empty(get('date_start'))){
$module_query = str_replace('1=1', '1=1 AND DATE_FORMAT(`data`, "%Y%m%d") >= "'.date('Ymd', strtotime(get('date_start'))).'"', $module_query);
$date_start = get('date_start');
}
if(!empty(get('date_end'))){
$module_query = str_replace('1=1', '1=1 AND DATE_FORMAT(`data`, "%Y%m%d") <= "'.date('Ymd', strtotime(get('date_end'))).'"', $module_query);
$date_end = get('date_end');
}
$module_query = str_replace('1=1', '1=1 AND co_documenti.idstatodocumento IN (SELECT id FROM co_statidocumento WHERE descrizione = "Pagato")', $module_query);
if(get('is_emessa')=='true' && get('is_parz_pagata')=='true'){
$module_query = str_replace('1=1 AND co_documenti.idstatodocumento IN (SELECT id FROM co_statidocumento WHERE descrizione = "Pagato")', '1=1 AND co_documenti.idstatodocumento IN (SELECT id FROM co_statidocumento WHERE descrizione = "Pagato" OR descrizione = "Emessa" OR descrizione = "Parzialmente pagato")', $module_query);
} else if(get('is_emessa')=='true'){
$module_query = str_replace('1=1 AND co_documenti.idstatodocumento IN (SELECT id FROM co_statidocumento WHERE descrizione = "Pagato")', '1=1 AND co_documenti.idstatodocumento IN (SELECT id FROM co_statidocumento WHERE descrizione = "Pagato" OR descrizione = "Emessa")', $module_query);
} else if(get('is_parz_pagata')=='true'){
$module_query = str_replace('1=1 AND co_documenti.idstatodocumento IN (SELECT id FROM co_statidocumento WHERE descrizione = "Pagato")', '1=1 AND co_documenti.idstatodocumento IN (SELECT id FROM co_statidocumento WHERE descrizione = "Pagato" OR descrizione = "Parzialmente pagato")', $module_query);
}
$module_query = str_replace('1=1', '1=1 AND co_documenti.idagente='.prepare($id_record), $module_query);
$records = $dbo->fetchArray($module_query);

View File

@ -0,0 +1,29 @@
<?php
/*
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
* Copyright (C) DevCode s.r.l.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
include_once __DIR__.'/../../core.php';
echo '
<tr>
<td> Fattura n. '.$record['numero_esterno'].'</td>
<td>'.$record['ragione_sociale'].'</td>
<td class="text-center">'.moneyFormat($record['Totale'], 2).'</td>
<td class="text-center">'.numberFormat($record['provvigione_percentuale'], 0).' % </td>
<td class="text-center">'.moneyFormat($record['provvigione'], 2).'</td>
</tr>';

View File

@ -0,0 +1,27 @@
<?php
/*
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
* Copyright (C) DevCode s.r.l.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
$format = (isset($_SESSION['stampe_contabili']['format'])) ? $_SESSION['stampe_contabili']['format'] : 'A4';
$orientation = (isset($_SESSION['stampe_contabili']['orientation'])) ? $_SESSION['stampe_contabili']['orientation'] : 'L';
return [
'format' => $format,
'orientation' => $orientation,
'font-size' => '11pt',
];

View File

@ -0,0 +1,71 @@
<?php
/*
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
* Copyright (C) DevCode s.r.l.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
include_once __DIR__.'/../../core.php';
use Modules\Anagrafiche\Anagrafica;
$agente = Anagrafica::where([
['idanagrafica', '=', $id_record],
])->first();
if(get('is_parz_pagata')=='true'){
$text[] = "'Parzialmente pagato'";
}
if(get('is_emessa')=='true'){
$text[] = "'Emessa'";
}
echo '
<h4><b>'.tr('Liquidazione provvigioni agente _ANAG_', [
'_ANAG_' => $agente->ragione_sociale,
], ['upper' => true]).'</b></h4>';
if(!empty($date_start) AND !empty($date_end)) {
echo '
<h4><b>'.tr('Provvigioni dal _START_ al _END_', [
'_START_' => Translator::dateToLocale($date_start),
'_END_' => Translator::dateToLocale($date_end),
], ['upper' => true]).'</b>
</h4>';
}else{
echo '
<h5><b>'.tr('Provvigioni').'</b>
</h5>';
}
echo '
<p style="color:#aaa; font-size:10px;" class="text-right">
'.tr("_TEXT_",
[
"_TEXT_" => (empty($text) ? 'Solo fatture con stato \'Pagato\'' : 'Include fatture con stato \'Pagato\', '.implode(', ', $text)),
]).'
</p>
<table class="table table-striped table-bordered" id="contents">
<thead>
<tr>
<th width="20%">'.tr('Documento', [], ['upper' => true]).'</th>
<th width="50%">'.tr('Anagrafica', [], ['upper' => true]).'</th>
<th width="10%" class="text-center">'.tr('Importo', [], ['upper' => true]).'</th>
<th width="10%" class="text-center">'.tr('Percentuale', [], ['upper' => true]).'</th>
<th width="10%" class="text-center">'.tr('Provvigione', [], ['upper' => true]).'</th>
</tr>
</thead>
<tbody>';

View File

@ -96,4 +96,11 @@ HAVING
2=2
ORDER BY
`data` DESC,
CAST(`numero_esterno` AS UNSIGNED) DESC" WHERE `name` = 'Ordini fornitore';
CAST(`numero_esterno` AS UNSIGNED) DESC" WHERE `name` = 'Ordini fornitore';
-- Aggiornamento data ultima sessione in rapportino intervento
UPDATE `em_templates` SET `body` = '<p>Gentile Cliente,</p>\n<p>inviamo in allegato il rapportino numero {numero} del {data fine intervento}.</p>\n<p>Distinti saluti</p>', `subject` = 'Invio rapportino numero {numero} del {data fine intervento}' WHERE `em_templates`.`name` = "Rapportino intervento";
-- Aggiunta stampa liquidazione provvigioni
INSERT INTO `zz_prints` (`id_module`, `is_record`, `name`, `title`, `filename`, `directory`, `previous`, `options`, `icon`, `version`, `compatibility`, `order`, `predefined`, `default`, `enabled`, `available_options`) VALUES
((SELECT id FROM zz_modules WHERE `name` = 'Anagrafiche'), 1, 'Provvigioni', 'Provvigioni', 'Provvigioni {ragione_sociale}', 'provvigione', 'idanagrafica', '', 'fa fa-print', '', '', 0, 0, 0, 1, NULL);