Merge branch 'master' of https://github.com/devcode-it/openstamanager
This commit is contained in:
commit
1fc9d9ebcd
|
@ -1109,7 +1109,7 @@ div.tip {
|
|||
|
||||
.local-loader>div {
|
||||
position: absolute;
|
||||
top: 100px;
|
||||
top: 0px;
|
||||
z-index: 2;
|
||||
opacity: 0.5;
|
||||
width: 100%
|
||||
|
|
|
@ -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>';
|
||||
}
|
||||
|
|
|
@ -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;"> </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+"¬definitiva=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>';
|
|
@ -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>';
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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>
|
||||
|
|
|
@ -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 '
|
||||
|
|
|
@ -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');
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 '
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 '
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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).'
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 '
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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>
|
||||
|
|
|
@ -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 '
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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>
|
||||
|
|
|
@ -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 '
|
||||
|
|
|
@ -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)) {
|
||||
|
|
|
@ -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>';
|
||||
|
||||
?>
|
|
@ -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;
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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(['<', '=', '>', '!'], '', $value));
|
||||
$value = trim(str_replace(['<', '>'], '', $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.'%');
|
||||
}
|
||||
|
|
|
@ -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>';
|
||||
|
||||
|
|
|
@ -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>';
|
|
@ -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);
|
|
@ -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>';
|
|
@ -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',
|
||||
];
|
|
@ -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>';
|
||||
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue