Merge branch 'master' of https://github.com/devcode-it/openstamanager
This commit is contained in:
commit
80fe5f4e49
|
@ -38,7 +38,7 @@
|
|||
"ifsnop/mysqldump-php": "^2.3",
|
||||
"illuminate/database": "^6.0",
|
||||
"intervention/image": "^2.3",
|
||||
"league/csv": "^8.2",
|
||||
"league/csv": "9.5.0",
|
||||
"league/oauth2-client": "^2.6",
|
||||
"league/oauth2-google": "^3.0",
|
||||
"maximebf/debugbar": "^1.15",
|
||||
|
|
|
@ -258,6 +258,19 @@ if (in_array($final_module['name'], ['Fatture di vendita', 'Fatture di acquisto'
|
|||
</div>';
|
||||
}
|
||||
|
||||
$has_serial = 0;
|
||||
if (!empty($options['serials'])) {
|
||||
foreach ($righe as $riga) {
|
||||
if (!empty($riga['abilita_serial'])) {
|
||||
$serials = $riga->serials ?: 0;
|
||||
|
||||
if (!empty($serials)) {
|
||||
$has_serial = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Righe del documento
|
||||
echo '
|
||||
<div class="box box-success">
|
||||
|
@ -279,7 +292,7 @@ echo '
|
|||
<th width="15%">'.tr('Q.tà da evadere').'</th>
|
||||
<th width="20%" class="text-center">'.tr('Subtot.').'</th>';
|
||||
|
||||
if (!empty($options['serials'])) {
|
||||
if (!empty($has_serial)) {
|
||||
echo '
|
||||
<th width="20%">'.tr('Seriali').'</th>';
|
||||
}
|
||||
|
@ -322,6 +335,19 @@ foreach ($righe as $i => $riga) {
|
|||
|
||||
echo ' '.nl2br($descrizione);
|
||||
|
||||
if ($riga->isArticolo() && !empty($riga->abilita_serial)) {
|
||||
$serials = $riga->serials;
|
||||
$mancanti = abs($riga->qta) - count($serials);
|
||||
|
||||
if (!empty($mancanti)) {
|
||||
echo '
|
||||
<br><b><small class="text-danger">'.tr('_NUM_ serial mancanti', [
|
||||
'_NUM_' => $mancanti,
|
||||
]).'</small></b>';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
echo '
|
||||
</td>';
|
||||
|
||||
|
@ -343,7 +369,7 @@ foreach ($righe as $i => $riga) {
|
|||
</td>';
|
||||
|
||||
// Seriali
|
||||
if (!empty($options['serials'])) {
|
||||
if (!empty($has_serial)) {
|
||||
echo '
|
||||
<td style="vertical-align:middle">';
|
||||
|
||||
|
@ -521,10 +547,10 @@ echo '
|
|||
}
|
||||
|
||||
$("input[name=righe]").each(function() {
|
||||
ricalcolaTotaleRiga($(this).val());
|
||||
ricalcolaTotaleRiga($(this).val(), first = true);
|
||||
});
|
||||
|
||||
function ricalcolaTotaleRiga(r) {
|
||||
function ricalcolaTotaleRiga(r, first) {
|
||||
let prezzo_unitario = $("#prezzo_unitario_" + r).val();
|
||||
let sconto = $("#sconto_unitario_" + r).val();
|
||||
|
||||
|
@ -551,11 +577,12 @@ echo '
|
|||
qta = 0;
|
||||
}
|
||||
|
||||
let serial_select = $("#serial_" + r);
|
||||
serial_select.selectClear();
|
||||
serial_select.select2("destroy");
|
||||
serial_select.data("maximum", qta);
|
||||
start_superselect();
|
||||
if (!first) {
|
||||
let serial_select = $("#serial_" + r);
|
||||
serial_select.selectClear();
|
||||
serial_select.data("maximum", qta);
|
||||
initSelectInput("#serial_" + r);
|
||||
}
|
||||
|
||||
let subtotale = (prezzo_scontato * qta).toLocale();
|
||||
|
||||
|
|
19
mail.php
19
mail.php
|
@ -28,16 +28,20 @@ $smtp = $template->account;
|
|||
$body = $module->replacePlaceholders($id_record, $template['body']);
|
||||
$subject = $module->replacePlaceholders($id_record, $template['subject']);
|
||||
|
||||
$emails = explode(';', $module->replacePlaceholders($id_record, '{email}'));
|
||||
$emails = [];
|
||||
if ($module->replacePlaceholders($id_record, '{email}')) {
|
||||
$emails = explode(';', $module->replacePlaceholders($id_record, '{email}'));
|
||||
}
|
||||
|
||||
$id_anagrafica = $module->replacePlaceholders($id_record, '{id_anagrafica}');
|
||||
|
||||
// Aggiungo email referenti in base alla mansione impostata nel template
|
||||
$mansioni = $dbo->select('em_mansioni_template', 'idmansione', ['id_template' => $template->id]);
|
||||
foreach ($mansioni as $mansione) {
|
||||
$referenti = $dbo->select('an_referenti', 'email', ['idmansione' => $mansione['idmansione'], 'idanagrafica' => $id_anagrafica]);
|
||||
$referenti = $dbo->table('an_referenti')->where('idmansione', $mansione['idmansione'])->where('idanagrafica', $id_anagrafica)->where('email', '!=', '')->get();
|
||||
foreach ($referenti as $referente) {
|
||||
if (!in_array($referente['email'], $emails)) {
|
||||
$emails[] = $referente['email'];
|
||||
if (!in_array($referente->email, $emails)) {
|
||||
$emails[] = $referente->email;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -101,6 +105,13 @@ echo '
|
|||
{[ "type": "email", "name": "destinatari['.$idx++.']", "value": "'.$email.'", "icon-before": "choice|email", "extra": "onkeyup=\'aggiungiDestinatario();\'", "class": "destinatari", "required": 0 ]}
|
||||
</div>';
|
||||
}
|
||||
|
||||
if (empty($emails)) {
|
||||
echo '
|
||||
<div class="col-md-12">
|
||||
{[ "type": "email", "name": "destinatari['.$idx++.']", "value": "", "icon-before": "choice|email", "extra": "onkeyup=\'aggiungiDestinatario();\'", "class": "destinatari", "required": 0 ]}
|
||||
</div>';
|
||||
}
|
||||
echo '
|
||||
</div>
|
||||
|
||||
|
|
|
@ -356,8 +356,9 @@ switch ($resource) {
|
|||
* Opzioni utilizzate:
|
||||
* - idanagrafica
|
||||
*/
|
||||
|
||||
case 'dichiarazioni_intento':
|
||||
$query = "SELECT id, CONCAT(CONCAT_WS(' - ', numero_protocollo, numero_progressivo), ' data di fine ', DATE_FORMAT(data_fine, '%d/%m/%Y')) AS descrizione FROM co_dichiarazioni_intento |where| ORDER BY data";
|
||||
$query = "SELECT id, CONCAT('Prot. ', numero_protocollo, ' con data fine ', DATE_FORMAT(data_fine, '%d/%m/%Y'),' - utilizzati ',REPLACE(REPLACE(REPLACE(FORMAT(SUM(totale),2), ',', '#'), '.', ','), '#', '.'), ' su ' , REPLACE(REPLACE(REPLACE(FORMAT(SUM(massimale),2), ',', '#'), '.', ','), '#', '.'), ' €' ) AS descrizione FROM co_dichiarazioni_intento |where| ORDER BY data";
|
||||
|
||||
foreach ($elements as $element) {
|
||||
$filter[] = 'id='.prepare($element);
|
||||
|
|
|
@ -58,8 +58,12 @@ switch (post('op')) {
|
|||
|
||||
$articolo->barcode = post('barcode');
|
||||
$articolo->threshold_qta = post('threshold_qta');
|
||||
$articolo->coefficiente = post('coefficiente');
|
||||
$articolo->idiva_vendita = post('idiva_vendita');
|
||||
$articolo->prezzo_acquisto = post('prezzo_acquisto');
|
||||
$articolo->setPrezzoVendita(post('prezzo_vendita'), post('idiva_vendita'));
|
||||
if (empty(post('coefficiente'))) {
|
||||
$articolo->setPrezzoVendita(post('prezzo_vendita'), post('idiva_vendita'));
|
||||
}
|
||||
$articolo->idconto_vendita = post('idconto_vendita');
|
||||
$articolo->idconto_acquisto = post('idconto_acquisto');
|
||||
$articolo->save();
|
||||
|
@ -116,6 +120,8 @@ switch (post('op')) {
|
|||
$articolo->abilita_serial = post('abilita_serial');
|
||||
$articolo->ubicazione = post('ubicazione');
|
||||
$articolo->threshold_qta = post('threshold_qta');
|
||||
$articolo->coefficiente = post('coefficiente');
|
||||
$articolo->idiva_vendita = post('idiva_vendita');
|
||||
$articolo->prezzo_acquisto = post('prezzo_acquisto');
|
||||
$articolo->idconto_vendita = post('idconto_vendita');
|
||||
$articolo->idconto_acquisto = post('idconto_acquisto');
|
||||
|
@ -129,7 +135,9 @@ switch (post('op')) {
|
|||
$articolo->fattore_um_secondaria = post('fattore_um_secondaria');
|
||||
$articolo->qta_multipla = post('qta_multipla');
|
||||
|
||||
$articolo->setPrezzoVendita(post('prezzo_vendita'), post('idiva_vendita'));
|
||||
if (empty(post('coefficiente'))) {
|
||||
$articolo->setPrezzoVendita(post('prezzo_vendita'), post('idiva_vendita'));
|
||||
}
|
||||
|
||||
$componente = post('componente_filename');
|
||||
$articolo->componente_filename = $componente;
|
||||
|
|
|
@ -19,6 +19,12 @@
|
|||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
use Modules\Iva\Aliquota;
|
||||
|
||||
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
|
||||
$iva_predefinita = setting('Iva predefinita');
|
||||
$aliquota_predefinita = floatval(Aliquota::find($iva_predefinita)->percentuale);
|
||||
|
||||
?><form action="" method="post" id="add-form">
|
||||
<input type="hidden" name="op" value="add">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
|
@ -63,16 +69,10 @@ include_once __DIR__.'/../../core.php';
|
|||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "number", "label": "<?php echo tr('Quantità iniziale'); ?>", "name": "qta", "decimals": "qta" ]}
|
||||
{[ "type": "number", "label": "<?php echo tr('Coefficiente di vendita'); ?>", "name": "coefficiente", "help": "<?php echo tr('Imposta un coefficiente per calcolare automaticamente il prezzo di vendita quando cambia il prezzo di acquisto'); ?>." ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "number", "label": "<?php echo tr('Soglia minima quantità'); ?>", "name": "threshold_qta", "decimals": "qta", "min-value": "undefined" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<?php
|
||||
if (!setting('Utilizza prezzi di vendita comprensivi di IVA')) {
|
||||
echo '
|
||||
|
@ -82,9 +82,22 @@ include_once __DIR__.'/../../core.php';
|
|||
|
||||
{[ "type": "number", "label": "<?php echo tr('Prezzo di vendita'); ?>", "name": "prezzo_vendita", "icon-after": "<?php echo currency(); ?>", "help": "<?php echo setting('Utilizza prezzi di vendita comprensivi di IVA') ? tr('Importo IVA inclusa') : ''; ?>" ]}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
{[ "type": "number", "label": "<?php echo tr('Quantità iniziale'); ?>", "name": "qta", "decimals": "qta" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "number", "label": "<?php echo tr('Soglia minima quantità'); ?>", "name": "threshold_qta", "decimals": "qta", "min-value": "undefined" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "<?php echo tr('Iva di vendita'); ?>", "name": "idiva_vendita", "ajax-source": "iva", "valore_predefinito": "Iva predefinita", "help": "<?php echo tr('Se non specificata, verrà utilizzata l\'iva di default delle impostazioni'); ?>" ]}
|
||||
<input type="hidden" name="prezzi_ivati" value="<?php echo $prezzi_ivati; ?>">
|
||||
<input type="hidden" name="aliquota_predefinita" value="<?php echo $aliquota_predefinita; ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -109,6 +122,9 @@ include_once __DIR__.'/../../core.php';
|
|||
</form>
|
||||
|
||||
<script>
|
||||
iva_vendita = $("#add-form").find("#idiva_vendita");
|
||||
percentuale = 0;
|
||||
|
||||
$(document).ready(function () {
|
||||
var sub = $('#add-form').find('#subcategoria_add');
|
||||
var original = sub.parent().find(".input-group-addon button").attr("onclick");
|
||||
|
@ -128,24 +144,65 @@ $(document).ready(function () {
|
|||
}
|
||||
});
|
||||
|
||||
input("coefficiente").on('keyup', function(){
|
||||
if (iva_vendita.val()) {
|
||||
percentuale = parseFloat(iva_vendita.selectData().percentuale);
|
||||
}
|
||||
if (!percentuale) {
|
||||
percentuale = parseFloat(input("aliquota_predefinita").get());
|
||||
}
|
||||
if (input("coefficiente").get()) {
|
||||
let prezzo_vendita = input('prezzo_acquisto').get() * input("coefficiente").get();
|
||||
if (parseFloat(input("prezzi_ivati").get())) {
|
||||
prezzo_vendita = prezzo_vendita + (prezzo_vendita * percentuale / 100);
|
||||
}
|
||||
input("prezzo_vendita").set(prezzo_vendita);
|
||||
input("prezzo_vendita").disable();
|
||||
$("#scorpora_iva_add").addClass("disabled");
|
||||
} else {
|
||||
input("prezzo_vendita").enable();
|
||||
$("#scorpora_iva_add").removeClass("disabled");
|
||||
}
|
||||
});
|
||||
|
||||
input("prezzo_acquisto").on('keyup change', function(){
|
||||
if (iva_vendita.val()) {
|
||||
percentuale = parseFloat(iva_vendita.selectData().percentuale);
|
||||
}
|
||||
if (!percentuale) {
|
||||
percentuale = parseFloat(input("aliquota_predefinita").get());
|
||||
}
|
||||
if (input("coefficiente").get()) {
|
||||
let prezzo_vendita = input('prezzo_acquisto').get() * input("coefficiente").get();
|
||||
if (parseFloat(input("prezzi_ivati").get())) {
|
||||
prezzo_vendita = prezzo_vendita + (prezzo_vendita * percentuale / 100);
|
||||
}
|
||||
input("prezzo_vendita").set(prezzo_vendita);
|
||||
input("prezzo_vendita").disable();
|
||||
$("#scorpora_iva_add").addClass("disabled");
|
||||
} else {
|
||||
input("prezzo_vendita").enable();
|
||||
$("#scorpora_iva_add").removeClass("disabled");
|
||||
}
|
||||
});
|
||||
|
||||
$("#scorpora_iva_add").click( function() {
|
||||
scorpora_iva_add();
|
||||
});
|
||||
});
|
||||
|
||||
function scorpora_iva_add() {
|
||||
if ($("#add-form").find("#idiva_vendita").val() != '') {
|
||||
var percentuale = parseFloat($("#add-form").find("#idiva_vendita").selectData().percentuale);
|
||||
if(!percentuale) return;
|
||||
|
||||
var input = $("#add-form").find("#prezzo_vendita");
|
||||
var prezzo = input.val().toEnglish();
|
||||
|
||||
var scorporato = prezzo * 100 / (100 + percentuale);
|
||||
|
||||
input.val(scorporato);
|
||||
}else{
|
||||
swal("<?php echo tr('Attenzione'); ?>", "<?php echo tr('Seleziona Iva di vendita.'); ?>", "warning");
|
||||
if (iva_vendita.val()) {
|
||||
percentuale = parseFloat(iva_vendita.selectData().percentuale);
|
||||
}
|
||||
if (!percentuale) {
|
||||
percentuale = parseFloat(input("aliquota_predefinita").get());
|
||||
}
|
||||
if(!percentuale) return;
|
||||
|
||||
let input = $("#prezzo_vendita");
|
||||
let prezzo = input.val().toEnglish();
|
||||
let scorporato = prezzo * 100 / (100 + percentuale);
|
||||
input.val(scorporato);
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -55,36 +55,59 @@ switch (post('op')) {
|
|||
$tipologia = post('tipologia');
|
||||
$arrotondamento = post('arrotondamento');
|
||||
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
|
||||
$articoli_coeff = 0;
|
||||
|
||||
foreach ($id_records as $id) {
|
||||
$articolo = Articolo::find($id);
|
||||
$prezzo_partenza = post('prezzo_partenza') == 'vendita' ? $articolo->prezzo_vendita : $articolo->prezzo_acquisto;
|
||||
$aliquota_iva = floatval(Aliquota::find($articolo->idiva_vendita)->percentuale);
|
||||
|
||||
$new_prezzo_vendita = $prezzo_partenza + ($prezzo_partenza * $percentuale / 100);
|
||||
if (empty((int)$articolo->coefficiente)) {
|
||||
$prezzo_partenza = post('prezzo_partenza') == 'vendita' ? $articolo->prezzo_vendita : $articolo->prezzo_acquisto;
|
||||
$aliquota_iva = floatval(Aliquota::find($articolo->idiva_vendita)->percentuale);
|
||||
|
||||
// Arrotondamento
|
||||
if (!empty($tipologia) && !empty($arrotondamento)) {
|
||||
if ($tipologia == 'ivato') {
|
||||
$new_prezzo_vendita = $prezzo_partenza + ($prezzo_partenza * $percentuale / 100);
|
||||
|
||||
// Arrotondamento
|
||||
if (!empty($tipologia) && !empty($arrotondamento)) {
|
||||
if ($tipologia == 'ivato') {
|
||||
$new_prezzo_vendita = $new_prezzo_vendita + ($new_prezzo_vendita * $aliquota_iva / 100);
|
||||
}
|
||||
|
||||
$new_prezzo_vendita = ceil($new_prezzo_vendita / $arrotondamento) * $arrotondamento;
|
||||
}
|
||||
|
||||
if (in_array($tipologia, ['ivato', '']) && !$prezzi_ivati) {
|
||||
$new_prezzo_vendita = $new_prezzo_vendita * 100 / (100 + $aliquota_iva);
|
||||
}
|
||||
|
||||
if (in_array($tipologia, ['imponibile', '']) && $prezzi_ivati) {
|
||||
$new_prezzo_vendita = $new_prezzo_vendita + ($new_prezzo_vendita * $aliquota_iva / 100);
|
||||
}
|
||||
|
||||
$new_prezzo_vendita = ceil($new_prezzo_vendita / $arrotondamento) * $arrotondamento;
|
||||
$articolo->setPrezzoVendita($new_prezzo_vendita, $articolo->idiva_vendita);
|
||||
$articolo->save();
|
||||
} else {
|
||||
$articoli_coeff++;
|
||||
}
|
||||
|
||||
if (in_array($tipologia, ['ivato', '']) && !$prezzi_ivati) {
|
||||
$new_prezzo_vendita = $new_prezzo_vendita * 100 / (100 + $aliquota_iva);
|
||||
}
|
||||
|
||||
if (in_array($tipologia, ['imponibile', '']) && $prezzi_ivati) {
|
||||
$new_prezzo_vendita = $new_prezzo_vendita + ($new_prezzo_vendita * $aliquota_iva / 100);
|
||||
}
|
||||
|
||||
$articolo->setPrezzoVendita($new_prezzo_vendita, $articolo->idiva_vendita);
|
||||
$articolo->save();
|
||||
}
|
||||
|
||||
flash()->info(tr('Prezzi di vendita aggiornati!'));
|
||||
flash()->warning(tr('_NUM_ prezzi di vendita non aggiornati per coefficiente impostato!', [
|
||||
'_NUM_' => $articoli_coeff,
|
||||
]));
|
||||
|
||||
break;
|
||||
|
||||
case 'change-coefficiente':
|
||||
foreach ($id_records as $id) {
|
||||
$articolo = Articolo::find($id);
|
||||
$coefficiente = post('coefficiente');
|
||||
|
||||
$articolo->coefficiente = $coefficiente;
|
||||
$articolo->prezzo_acquisto = $articolo->prezzo_acquisto;
|
||||
$articolo->save();
|
||||
}
|
||||
|
||||
flash()->info(tr('Coefficienti di vendita aggiornati!'));
|
||||
|
||||
break;
|
||||
|
||||
|
@ -356,7 +379,7 @@ $operations['change-acquisto'] = [
|
|||
'text' => '<span><i class="fa fa-refresh"></i> '.tr('Aggiorna prezzo di acquisto').'</span>',
|
||||
'data' => [
|
||||
'title' => tr('Aggiornare il prezzo di acquisto per gli articoli selezionati?'),
|
||||
'msg' => 'Per indicare uno sconto inserire la percentuale con il segno meno, al contrario per un rincaro inserire la percentuale senza segno.<br><br>{[ "type": "number", "label": "'.tr('Percentuale sconto/magg.').'", "name": "percentuale", "required": 1, "icon-after": "%" ]}',
|
||||
'msg' => tr('Per indicare uno sconto inserire la percentuale con il segno meno, al contrario per un rincaro inserire la percentuale senza segno.').'<br><br>{[ "type": "number", "label": "'.tr('Percentuale sconto/magg.').'", "name": "percentuale", "required": 1, "icon-after": "%" ]}',
|
||||
'button' => tr('Procedi'),
|
||||
'class' => 'btn btn-lg btn-warning',
|
||||
'blank' => false,
|
||||
|
@ -367,7 +390,7 @@ $operations['change-vendita'] = [
|
|||
'text' => '<span><i class="fa fa-refresh"></i> '.tr('Aggiorna prezzo di vendita').'</span>',
|
||||
'data' => [
|
||||
'title' => tr('Aggiornare il prezzo di vendita per gli articoli selezionati?'),
|
||||
'msg' => 'Per indicare uno sconto inserire la percentuale con il segno meno, al contrario per un rincaro inserire la percentuale senza segno.<br><br>
|
||||
'msg' => tr('Per indicare uno sconto inserire la percentuale con il segno meno, al contrario per un rincaro inserire la percentuale senza segno.').'<br><br>
|
||||
{[ "type": "select", "label": "'.tr('Partendo da:').'", "name": "prezzo_partenza", "required": 1, "values": "list=\"acquisto\":\"Prezzo di acquisto\",\"vendita\":\"Prezzo di vendita\"" ]}<br>
|
||||
{[ "type": "number", "label": "'.tr('Percentuale sconto/magg.').'", "name": "percentuale", "required": 1, "icon-after": "%" ]}<br>
|
||||
{[ "type": "select", "label": "'.tr('Arrotonda prezzo:').'", "name": "tipologia", "values": "list=\"0\":\"Non arrotondare\",\"imponibile\":\"Imponibile\",\"ivato\":\"Ivato\"", "value": 0 ]}<br>
|
||||
|
@ -378,6 +401,17 @@ $operations['change-vendita'] = [
|
|||
],
|
||||
];
|
||||
|
||||
$operations['change-coefficiente'] = [
|
||||
'text' => '<span><i class="fa fa-refresh"></i> '.tr('Aggiorna coefficiente di vendita').'</span>',
|
||||
'data' => [
|
||||
'title' => tr('Aggiornare il coefficiente di vendita per gli articoli selezionati?'),
|
||||
'msg' => tr('Per ciascun articolo selezionato, verrà modificato il coefficiente e il relativo prezzo di vendita').'<br><br>{[ "type": "number", "label": "'.tr('Coefficiente di vendita').'", "name": "coefficiente", "required": 1 ]}',
|
||||
'button' => tr('Procedi'),
|
||||
'class' => 'btn btn-lg btn-warning',
|
||||
'blank' => false,
|
||||
],
|
||||
];
|
||||
|
||||
$operations['stampa-etichette'] = [
|
||||
'text' => '<span><i class="fa fa-barcode"></i> '.tr('Stampa etichette').'</span>',
|
||||
'data' => [
|
||||
|
|
|
@ -19,6 +19,8 @@
|
|||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
use Modules\Iva\Aliquota;
|
||||
|
||||
?><form action="" method="post" id="edit-form" enctype="multipart/form-data">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="op" value="update">
|
||||
|
@ -162,11 +164,15 @@ include_once __DIR__.'/../../core.php';
|
|||
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-4">
|
||||
{[ "type": "number", "label": "<?php echo tr('Prezzo di acquisto'); ?>", "name": "prezzo_acquisto", "value": "$prezzo_acquisto$", "icon-after": "<?php echo currency(); ?>", "help": "<?php echo tr('Prezzo di acquisto previsto per i fornitori i cui dati non sono stati inseriti nel plugin Fornitori'); ?>." ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-4">
|
||||
{[ "type": "number", "label": "<?php echo tr('Coefficiente di vendita'); ?>", "name": "coefficiente", "value": "$coefficiente$", "help": "<?php echo tr('Imposta un coefficiente per calcolare automaticamente il prezzo di vendita quando cambia il prezzo di acquisto'); ?>." ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "number", "label": "<?php echo tr('Soglia minima quantità'); ?>", "name": "threshold_qta", "value": "$threshold_qta$", "decimals": "qta", "min-value": "undefined" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -215,21 +221,25 @@ include_once __DIR__.'/../../core.php';
|
|||
<div class="col-md-6">
|
||||
<?php
|
||||
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
|
||||
$iva_predefinita = setting('Iva predefinita');
|
||||
$aliquota_predefinita = floatval(Aliquota::find($iva_predefinita)->percentuale);
|
||||
if (empty($prezzi_ivati)) {
|
||||
echo '
|
||||
<button type="button" class="btn btn-info btn-xs pull-right tip pull-right" title="'.tr('Scorpora l\'IVA dal prezzo di vendita.').'" id="scorporaIva">
|
||||
<button type="button" class="btn btn-info btn-xs pull-right tip pull-right '.(!empty((int)$articolo->coefficiente) ? 'disabled' : '').'" title="'.tr('Scorpora l\'IVA dal prezzo di vendita.').'" id="scorporaIva">
|
||||
<i class="fa fa-calculator"></i>
|
||||
</button>';
|
||||
}
|
||||
|
||||
echo '
|
||||
{[ "type": "number", "label": "'.tr('Prezzo di vendita').'", "name": "prezzo_vendita", "value": "'.($prezzi_ivati ? $articolo->prezzo_vendita_ivato : $articolo->prezzo_vendita).'", "icon-after": "'.currency().'", "help": "'.($prezzi_ivati ? tr('Importo IVA inclusa') : '').'" ]}
|
||||
{[ "type": "number", "label": "'.tr('Prezzo di vendita').'", "name": "prezzo_vendita", "value": "'.($prezzi_ivati ? $articolo->prezzo_vendita_ivato : $articolo->prezzo_vendita).'", "icon-after": "'.currency().'", "help": "'.($prezzi_ivati ? tr('Importo IVA inclusa') : '').'", "disabled": "'.(!empty((int)$articolo->coefficiente) ? 1 : 0).'" ]}
|
||||
</div>';
|
||||
|
||||
?>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Iva di vendita'); ?>", "name": "idiva_vendita", "ajax-source": "iva", "value": "$idiva_vendita$", "help": "<?php echo tr('Se non specificata, verrà utilizzata l\'iva di default delle impostazioni'); ?>" ]}
|
||||
<input type="hidden" name="prezzi_ivati" value="<?php echo $prezzi_ivati; ?>">
|
||||
<input type="hidden" name="aliquota_predefinita" value="<?php echo $aliquota_predefinita; ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -306,6 +316,48 @@ echo '
|
|||
{( "name": "filelist_and_upload", "id_module": "$id_module$", "id_record": "$id_record$" )}
|
||||
|
||||
<script>
|
||||
let iva_vendita = $("#idiva_vendita");
|
||||
let percentuale = 0;
|
||||
|
||||
$(document).ready(function() {
|
||||
if (iva_vendita.val()) {
|
||||
percentuale = parseFloat(iva_vendita.selectData().percentuale);
|
||||
}
|
||||
if (!percentuale) {
|
||||
percentuale = parseFloat(input("aliquota_predefinita").get());
|
||||
}
|
||||
|
||||
input("coefficiente").on('keyup', function(){
|
||||
if (input("coefficiente").get()) {
|
||||
let prezzo_vendita = input('prezzo_acquisto').get() * input("coefficiente").get();
|
||||
if (parseFloat(input("prezzi_ivati").get())) {
|
||||
prezzo_vendita = prezzo_vendita + (prezzo_vendita * percentuale / 100);
|
||||
}
|
||||
input("prezzo_vendita").set(prezzo_vendita);
|
||||
input("prezzo_vendita").disable();
|
||||
$("#scorporaIva").addClass("disabled");
|
||||
} else {
|
||||
input("prezzo_vendita").enable();
|
||||
$("#scorporaIva").removeClass("disabled");
|
||||
}
|
||||
});
|
||||
|
||||
input("prezzo_acquisto").on('keyup change', function(){
|
||||
if (input("coefficiente").get()) {
|
||||
let prezzo_vendita = input('prezzo_acquisto').get() * input("coefficiente").get();
|
||||
if (parseFloat(input("prezzi_ivati").get())) {
|
||||
prezzo_vendita = prezzo_vendita + (prezzo_vendita * percentuale / 100);
|
||||
}
|
||||
input("prezzo_vendita").set(prezzo_vendita);
|
||||
input("prezzo_vendita").disable();
|
||||
$("#scorporaIva").addClass("disabled");
|
||||
} else {
|
||||
input("prezzo_vendita").enable();
|
||||
$("#scorporaIva").removeClass("disabled");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$("#categoria").change(function() {
|
||||
updateSelectOption("id_categoria", $(this).val());
|
||||
|
||||
|
@ -313,27 +365,17 @@ $("#categoria").change(function() {
|
|||
});
|
||||
|
||||
function scorporaIva() {
|
||||
let iva_vendita = $("#idiva_vendita");
|
||||
|
||||
if (iva_vendita.val()) {
|
||||
let percentuale = parseFloat(iva_vendita.selectData().percentuale);
|
||||
if(!percentuale) return;
|
||||
|
||||
let input = $("#prezzo_vendita");
|
||||
let prezzo = input.val().toEnglish();
|
||||
|
||||
let scorporato = prezzo * 100 / (100 + percentuale);
|
||||
|
||||
input.val(scorporato);
|
||||
}else{
|
||||
swal("<?php echo tr('Attenzione'); ?>", "<?php echo tr('Seleziona Iva di vendita.'); ?>", "warning");
|
||||
}
|
||||
if(!percentuale) return;
|
||||
|
||||
let input = $("#prezzo_vendita");
|
||||
let prezzo = input.val().toEnglish();
|
||||
let scorporato = prezzo * 100 / (100 + percentuale);
|
||||
input.val(scorporato);
|
||||
}
|
||||
|
||||
$("#scorporaIva").click( function() {
|
||||
scorporaIva();
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
|
|
|
@ -142,6 +142,30 @@ class Articolo extends Model
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Imposta il prezzo di acquisto e aggiorna il prezzo di vendita in base al coefficiente.
|
||||
*
|
||||
* @param $value
|
||||
*/
|
||||
public function setPrezzoAcquistoAttribute($value)
|
||||
{
|
||||
$this->attributes['prezzo_acquisto'] = $value;
|
||||
|
||||
if (!empty($this->coefficiente)) {
|
||||
$prezzo_vendita = $value * $this->coefficiente;
|
||||
|
||||
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
|
||||
$id_iva = $this->idiva_vendita ?: setting('Iva predefinita');
|
||||
$percentuale_aliquota = floatval(Aliquota::find($id_iva)->percentuale);
|
||||
|
||||
if ($prezzi_ivati) {
|
||||
$prezzo_vendita = $prezzo_vendita * (1 + $percentuale_aliquota / 100);
|
||||
}
|
||||
|
||||
$this->setPrezzoVendita($prezzo_vendita, $this->idiva_vendita);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Verifica se l'articolo corrente è una variante per una Combinazione.
|
||||
*
|
||||
|
|
|
@ -28,7 +28,7 @@ echo '
|
|||
<div class="row">
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "'.tr('Articoli da stampare').'", "name": "tipo", "required": "1", "values": "list=\"full\": \"'.tr('Tutti').'\", \"nozero\": \"'.tr('Solo esistenti').'\"", "value": "nozero" ]}
|
||||
{[ "type": "select", "label": "'.tr('Articoli da stampare').'", "name": "tipo", "required": "1", "values": "list=\"full\": \"'.tr('Tutti').'\", \"nozero\": \"'.tr('Solo esistenti').'\"", "value": "nozero", "help": "'.tr("''Solo esistenti'' indica articoli (attivi o disattivi) con quantità totale maggiore di 0").'." ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
|
|
|
@ -40,7 +40,7 @@ if (!isset($_SESSION['module_'.$id_fatture]['id_segment'])) {
|
|||
$_SESSION['module_'.$id_fatture]['id_segment'] = isset($segments[0]['id']) ? $segments[0]['id'] : null;
|
||||
}
|
||||
$id_segment = $_SESSION['module_'.$id_fatture]['id_segment'];
|
||||
$idconto = setting('Conto predefinito fatture di vendita');
|
||||
$idconto = $module_fatture == 'Fatture di vendita' ? setting('Conto predefinito fatture di vendita') : setting('Conto predefinito fatture di acquisto');
|
||||
$idtipodocumento = $dbo->selectOne('co_tipidocumento', ['id'], [
|
||||
'predefined' => 1,
|
||||
'dir' => $dir,
|
||||
|
|
|
@ -213,7 +213,6 @@ if (!empty($numero_previsto)) {
|
|||
|
||||
<script>
|
||||
$("#idspedizione").change(function() {
|
||||
//Per tutti tipi di spedizione, a parte "Espressa" o "Vettore", il campo vettore non deve essere richiesto
|
||||
if($(this).val()){
|
||||
if (!$(this).selectData().esterno) {
|
||||
$("#idvettore").attr("required", false);
|
||||
|
|
|
@ -38,22 +38,16 @@ if ($dir == 'entrata') {
|
|||
}
|
||||
|
||||
// Informazioni sulla dichiarazione d'intento, visibili solo finchè la fattura è in bozza
|
||||
if ($dir == 'entrata' && !empty($fattura->dichiarazione) && $fattura->stato->descrizione == 'Bozza') {
|
||||
if ($dir == 'entrata' && !empty($fattura->dichiarazione) ) {
|
||||
$diff = $fattura->dichiarazione->massimale - $fattura->dichiarazione->totale;
|
||||
$diff_in_days = Carbon::parse($fattura->dichiarazione->data_fine)->diffAsCarbonInterval($fattura->data);
|
||||
|
||||
$id_iva = setting("Iva per lettere d'intento");
|
||||
$iva = Aliquota::find($id_iva);
|
||||
|
||||
if (!empty($iva)) {
|
||||
if ($diff > 0) {
|
||||
echo '
|
||||
<div class="alert alert-info">
|
||||
<i class="fa fa-warning"></i> '.tr("La fattura è collegata a una dichiarazione d'intento con diponibilità di _MONEY_: per collegare una riga alla dichiarazione è sufficiente inserire come IVA _IVA_", [
|
||||
'_MONEY_' => moneyFormat(abs($diff)),
|
||||
'_IVA_' => '"'.$iva->descrizione.'"',
|
||||
]).'.</b>
|
||||
</div>';
|
||||
} elseif ($diff == 0) {
|
||||
|
||||
if ($diff == 0) {
|
||||
echo '
|
||||
<div class="alert alert-warning">
|
||||
<i class="fa fa-warning"></i> '.tr("La dichiarazione d'intento ha raggiunto il massimale previsto di _MONEY_: le nuove righe della fattura devono presentare IVA diversa da _IVA_", [
|
||||
|
@ -61,15 +55,25 @@ if ($dir == 'entrata' && !empty($fattura->dichiarazione) && $fattura->stato->des
|
|||
'_IVA_' => '"'.$iva->descrizione.'"',
|
||||
]).'.</b>
|
||||
</div>';
|
||||
} else {
|
||||
} elseif ($diff < 0) {
|
||||
echo '
|
||||
<div class="alert alert-danger">
|
||||
<div class="alert alert-warning">
|
||||
<i class="fa fa-warning"></i> '.tr("La dichiarazione d'intento ha superato il massimale previsto di _MONEY_: per rimuovere righe della fattura dalla dichiarazione è sufficiente modificare l'IVA in qualcosa di diverso da _IVA_", [
|
||||
'_MONEY_' => moneyFormat(abs($diff)),
|
||||
'_IVA_' => '"'.$iva->descrizione.'"',
|
||||
]).'.</b>
|
||||
</div>';
|
||||
}
|
||||
elseif ($diff_in_days < 0) {
|
||||
echo '
|
||||
<div class="alert alert-warning">
|
||||
<i class="fa fa-warning"></i> '.tr("La dichiarazione d'intento ha come data fine validità _SCADENZA_ mentre la fattura ha data _DATA_", [
|
||||
'_SCADENZA_' => dateFormat($fattura->dichiarazione->data_fine),
|
||||
'_DATA_' => dateFormat($fattura->data),
|
||||
]).'.</b>
|
||||
</div>';
|
||||
}
|
||||
|
||||
} else {
|
||||
//TODO link ad impostazioni con nuova ricerca rapida
|
||||
echo '
|
||||
|
@ -81,6 +85,18 @@ if ($dir == 'entrata' && !empty($fattura->dichiarazione) && $fattura->stato->des
|
|||
}
|
||||
}
|
||||
|
||||
// Ricordo che si sta emettendo una fattura conto terzi
|
||||
if ($dir == 'entrata' && $fattura->stato->descrizione == 'Bozza' ) {
|
||||
if ($fattura->is_fattura_conto_terzi){
|
||||
|
||||
echo '
|
||||
<div class="alert alert-info">
|
||||
<i class="fa fa-info"></i> '.tr("Questa è una fattura per conto di terzi. Nell'XML della Fattura Elettronica sarà indicato il fornitore _FORNITORE_ come cessionario e il cliente come cedente/prestatore", ['_FORNITORE_' => '"<b>'.stripslashes($database->fetchOne('SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica = '.prepare(setting('Azienda predefinita')))['ragione_sociale']).'</b>"',]).'.</b>
|
||||
</div>';
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
// Verifica aggiuntive sulla sequenzialità dei numeri
|
||||
if ($dir == 'entrata') {
|
||||
$numero_previsto = verifica_numero_fattura($fattura);
|
||||
|
@ -378,25 +394,33 @@ elseif ($record['stato'] == 'Bozza') {
|
|||
}
|
||||
?>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- Split payment + Fattura per conto terzi (solo uscita) + Sconto in fattura (solo uscita) -->
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Split payment'); ?>", "name": "split_payment", "value": "$split_payment$", "help": "<?php echo tr('Abilita lo split payment per questo documento. Le aliquote iva con natura N6.X (reverse charge) non saranno disponibili.'); ?>", "placeholder": "<?php echo tr('Split payment'); ?>" ]}
|
||||
</div>
|
||||
|
||||
<?php
|
||||
// TODO: Fattura per conto del fornitore (es. cooperative agricole che emettono la fattura per conto dei propri soci produttori agricoli conferenti)
|
||||
if ($dir == 'entrata') {
|
||||
?>
|
||||
<div class="col-md-3">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Fattura per conto terzi'); ?>", "name": "is_fattura_conto_terzi", "value": "$is_fattura_conto_terzi$", "help": "<?php echo tr('Nell\'xml della FE imposta il fornitore ('.stripslashes($database->fetchOne('SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica = '.prepare(setting('Azienda predefinita')))['ragione_sociale']).') come cessionario e il cliente come cedente/prestatore.'); ?>", "placeholder": "<?php echo tr('Fattura per conto terzi'); ?>" ]}
|
||||
</div>
|
||||
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Split payment'); ?>", "name": "split_payment", "value": "$split_payment$", "help": "<?php echo tr('Abilita lo split payment per questo documento. Le aliquote iva con natura N6.X (reverse charge) non saranno disponibili.'); ?>", "placeholder": "<?php echo tr('Split payment'); ?>" ]}
|
||||
</div>
|
||||
|
||||
<?php
|
||||
// TODO: Fattura per conto del fornitore (es. cooperative agricole che emettono la fattura per conto dei propri soci produttori agricoli conferenti)
|
||||
if ($dir == 'entrata') {
|
||||
?>
|
||||
<div class="col-md-3">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Fattura per conto terzi'); ?>", "name": "is_fattura_conto_terzi", "value": "$is_fattura_conto_terzi$", "help": "<?php echo tr('Nell\'XML della Fattura Elettronica sarà indicato il fornitore ('.stripslashes($database->fetchOne('SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica = '.prepare(setting('Azienda predefinita')))['ragione_sociale']).') come cessionario e il cliente come cedente/prestatore.'); ?>", "placeholder": "<?php echo tr('Fattura per conto terzi'); ?>" ]}
|
||||
</div>
|
||||
|
||||
<?php
|
||||
echo '<div class="col-md-3">
|
||||
{[ "type": "number", "label": "'.tr('Sconto in fattura').'", "name": "sconto_finale", "value": "'.($fattura->sconto_finale_percentuale ?: $fattura->sconto_finale).'", "icon-after": "choice|untprc|'.(empty($fattura->sconto_finale) ? 'PRC' : 'UNT').'", "help": "'.tr('Sconto in fattura, utilizzabile per applicare sconti sul Netto a pagare del documento e le relative scadenze').'. '.tr('Per utilizzarlo in relazione a una riga della Fattura Elettronica, inserire il tipo di dato in \'\'Attributi avanzati\'\' -> \'\'Altri Dati Gestionali\'\' -> \'\'TipoDato\'\' e il testo di descrizione in \'\'Attributi avanzati\'\' -> \'\'Altri Dati Gestionali\'\' -> \'\'RiferimentoTesto\'\' della specifica riga').'. '.tr('Nota: lo sconto in fattura non influenza i movimenti contabili').'." ]}
|
||||
</div>';
|
||||
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<?php echo !empty($record['id_ritenuta_contributi']) ? Modules::link('Ritenute previdenziali', $record['id_ritenuta_contributi'], null, null, 'class="pull-right"') : ''; ?>
|
||||
{[ "type": "select", "label": "<?php echo tr('Ritenuta previdenziale'); ?>", "name": "id_ritenuta_contributi", "value": "$id_ritenuta_contributi$", "values": "query=SELECT *, CONCAT(descrizione,(IF(percentuale>0, CONCAT(\" - \", percentuale, \"% sul \", percentuale_imponibile, \"% imponibile\"), \"\"))) AS descrizione FROM co_ritenuta_contributi", "help": "<?php echo tr('Ritenuta previdenziale da applicare alle righe della fattura.'); ?>" ]}
|
||||
</div>
|
||||
|
@ -404,20 +428,20 @@ elseif ($record['stato'] == 'Bozza') {
|
|||
<?php
|
||||
if ($dir == 'uscita') {
|
||||
echo '
|
||||
<div class="col-md-3">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "checkbox", "label": "'.tr('Ritenuta pagata dal fornitore').'", "name": "is_ritenuta_pagata", "value": "$is_ritenuta_pagata$" ]}
|
||||
</div>';
|
||||
}
|
||||
if ($dir == 'entrata') {
|
||||
echo '
|
||||
<div class="col-md-3">';
|
||||
<div class="col-md-6">';
|
||||
|
||||
if (!empty($record['id_dichiarazione_intento'])) {
|
||||
echo Plugins::link("Dichiarazioni d'Intento", $record['idanagrafica'], null, null, 'class="pull-right"');
|
||||
}
|
||||
|
||||
echo '
|
||||
{[ "type": "select", "label": "'.tr("Dichiarazione d'intento").'", "name": "id_dichiarazione_intento", "ajax-source": "dichiarazioni_intento", "select-options": {"idanagrafica": '.$record['idanagrafica'].', "data": "'.$record['data'].'"},"value": "$id_dichiarazione_intento$" ]}
|
||||
{[ "type": "select", "label": "'.tr("Dichiarazione d'intento").'", "name": "id_dichiarazione_intento", "help": "'.tr('Elenco delle dichiarazioni d\'intento definite all\'interno dell\'anagrafica del cliente').'.", "ajax-source": "dichiarazioni_intento", "select-options": {"idanagrafica": '.$record['idanagrafica'].', "data": "'.$record['data'].'"},"value": "$id_dichiarazione_intento$" ]}
|
||||
</div>';
|
||||
}
|
||||
echo '
|
||||
|
@ -439,10 +463,6 @@ elseif ($record['stato'] == 'Bozza') {
|
|||
<div class="col-md-3 bollo">
|
||||
{[ "type": "number", "label": "'.tr('Importo marca da bollo').'", "name": "bollo", "value": "$bollo$"]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "number", "label": "'.tr('Sconto in fattura').'", "name": "sconto_finale", "value": "'.($fattura->sconto_finale_percentuale ?: $fattura->sconto_finale).'", "icon-after": "choice|untprc|'.(empty($fattura->sconto_finale) ? 'PRC' : 'UNT').'", "help": "'.tr('Sconto in fattura, utilizzabile per applicare sconti sul Netto a pagare del documento e le relative scadenze').'. '.tr('Per utilizzarlo in relazione a una riga della Fattura Elettronica, inserire il tipo di dato in \'\'Attributi avanzati\'\' -> \'\'Altri Dati Gestionali\'\' -> \'\'TipoDato\'\' e il testo di descrizione in \'\'Attributi avanzati\'\' -> \'\'Altri Dati Gestionali\'\' -> \'\'RiferimentoTesto\'\' della specifica riga').'. '.tr('Nota: lo sconto in fattura non influenza i movimenti contabili').'." ]}
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
$bollo = new Bollo($fattura);
|
||||
|
@ -491,37 +511,58 @@ if ($record['descrizione_tipo'] == 'Fattura accompagnatoria di vendita') {
|
|||
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
{[ "type": "select", "label": "'.tr('Tipo di spedizione').'", "name": "idspedizione", "values": "query=SELECT id, descrizione FROM dt_spedizione ORDER BY descrizione ASC", "value": "$idspedizione$" ]}
|
||||
{[ "type": "select", "label": "'.tr('Tipo di spedizione').'", "name": "idspedizione", "values": "query=SELECT id, descrizione, esterno FROM dt_spedizione ORDER BY descrizione ASC", "value": "$idspedizione$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "select", "label": "'.tr('Vettore').'", "name": "idvettore", "ajax-source": "vettori", "value": "$idvettore$", "icon-after": "add|'.Modules::get('Anagrafiche')['id'].'|tipoanagrafica=Vettore|'.((($record['idspedizione'] != 3) and ($record['stato'] == 'Bozza')) ? '' : 'disabled').'", "disabled": '.intval($record['idspedizione'] == 3).', "required": '.intval($record['idspedizione'] != 3).' ]}
|
||||
<div class="col-md-3">';
|
||||
if (!empty($record['idvettore'])) {
|
||||
echo Modules::link('Anagrafiche', $record['idvettore'], null, null, 'class="pull-right"');
|
||||
}
|
||||
$esterno = $dbo->selectOne('dt_spedizione', 'esterno', [
|
||||
'id' => $record['idspedizione'],
|
||||
])['esterno'];
|
||||
?>
|
||||
|
||||
{[ "type": "select", "label": "<?php echo tr('Vettore'); ?>", "name": "idvettore", "ajax-source": "vettori", "value": "$idvettore$", "disabled": <?php echo empty($esterno) || (!empty($esterno) && !empty($record['idvettore'])) ? 1 : 0; ?>, "required": <?php echo !empty($esterno) ?: 0; ?>, "icon-after": "add|<?php echo Modules::get('Anagrafiche')['id']; ?>|tipoanagrafica=Vettore&readonly_tipo=1|btn_idvettore|<?php echo ($esterno and (intval(!$record['flag_completato']) || empty($record['idvettore']))) ? '' : 'disabled'; ?>", "class": "<?php echo empty($record['idvettore']) ? 'unblockable' : ''; ?>" ]}
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$("#idspedizione").change(function() {
|
||||
if ($(this).val() == 3) {
|
||||
if($(this).val()){
|
||||
if (!$(this).selectData().esterno) {
|
||||
$("#idvettore").attr("required", false);
|
||||
input("idvettore").disable();
|
||||
$("label[for=idvettore]").text("<?php echo tr('Vettore'); ?>");
|
||||
$("#idvettore").selectReset("<?php echo tr("Seleziona un\'opzione"); ?>");
|
||||
$(".btn_idvettore").prop("disabled", true);
|
||||
$(".btn_idvettore").addClass("disabled");
|
||||
}else{
|
||||
$("#idvettore").attr("required", true);
|
||||
input("idvettore").enable();
|
||||
$("label[for=idvettore]").text("<?php echo tr('Vettore'); ?>*");
|
||||
$(".btn_idvettore").prop("disabled", false);
|
||||
$(".btn_idvettore").removeClass("disabled");
|
||||
|
||||
}
|
||||
} else{
|
||||
$("#idvettore").attr("required", false);
|
||||
$("#idvettore").attr("disabled", true);
|
||||
$("label[for=idvettore]").text("'.tr('Vettore').'");
|
||||
$("#idvettore").selectReset(" '.tr("Seleziona un'opzione").'");
|
||||
$("#idvettore").next().next().find("button.bound:nth-child(1)").prop("disabled", true);
|
||||
}else{
|
||||
$("#idvettore").attr("required", true);
|
||||
$("#idvettore").attr("disabled", false);
|
||||
$("label[for=idvettore]").text("'.tr('Vettore').'*");
|
||||
$("#idvettore").next().next().find("button.bound:nth-child(1)").prop("disabled", false);
|
||||
input("idvettore").disable();
|
||||
$("label[for=idvettore]").text("<?php echo tr('Vettore'); ?>");
|
||||
$("#idvettore").selectReset("<?php echo tr("Seleziona un\'opzione"); ?>");
|
||||
$(".btn_idvettore").prop("disabled", true);
|
||||
$(".btn_idvettore").addClass("disabled");
|
||||
}
|
||||
});
|
||||
|
||||
$("#idcausalet").change(function() {
|
||||
$("#idcausalet").change(function() {
|
||||
if ($(this).val() == 3) {
|
||||
$("#tipo_resa").attr("disabled", false);
|
||||
}else{
|
||||
$("#tipo_resa").attr("disabled", true);
|
||||
$("#tipo_resa").attr("disabled", true);
|
||||
}
|
||||
});
|
||||
</script>';
|
||||
</script>
|
||||
<?php
|
||||
|
||||
$tipo_resa = [
|
||||
[
|
||||
|
@ -609,8 +650,23 @@ if ($record['descrizione_tipo'] == 'Fattura accompagnatoria di vendita') {
|
|||
}
|
||||
|
||||
echo '
|
||||
</form>
|
||||
</form>';
|
||||
|
||||
//Dich. intento collegata
|
||||
if ($dir == 'entrata' && !empty($fattura->dichiarazione)){
|
||||
|
||||
if ($fattura->stato->descrizione == 'Bozza'){
|
||||
|
||||
echo '
|
||||
<div class="alert alert-info">
|
||||
<i class="fa fa-info"></i> '.tr("La fattura è collegata ad una dichiarazione d'intento con diponibilità residura pari a _MONEY_.", [ '_MONEY_' => moneyFormat(abs($diff)),]).'<br>'.tr("Per collegare una riga alla dichiarazione è sufficiente specificare come IVA _IVA_", ['_IVA_' => '"<b>'.$iva->codice.' - '.$iva->descrizione.'</b>"',]).'.</b>
|
||||
</div>';
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
echo '
|
||||
<!-- RIGHE -->
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
|
|
|
@ -165,7 +165,7 @@ class Fattura extends Document
|
|||
$id_banca_azienda = $anagrafica->{'idbanca_'.$conto};
|
||||
if (empty($id_banca_azienda)) {
|
||||
$azienda = Anagrafica::find(setting('Azienda predefinita'));
|
||||
$id_banca_azienda = $database->fetchOne('SELECT id FROM co_banche WHERE id_pianodeiconti3 = (SELECT idconto_'.$conto.' FROM co_pagamenti WHERE id = :id_pagamento) AND id_anagrafica = :id_anagrafica', [
|
||||
$id_banca_azienda = $database->fetchOne('SELECT id FROM co_banche WHERE deleted_at IS NULL AND id_pianodeiconti3 = (SELECT idconto_'.$conto.' FROM co_pagamenti WHERE id = :id_pagamento) AND id_anagrafica = :id_anagrafica', [
|
||||
':id_pagamento' => $id_pagamento,
|
||||
':id_anagrafica' => $azienda->id,
|
||||
])['id'];
|
||||
|
@ -210,6 +210,13 @@ class Fattura extends Document
|
|||
}
|
||||
|
||||
$model->note = implode("\n", $notes);
|
||||
|
||||
if ($tipo_documento->descrizione == 'Fattura accompagnatoria di vendita') {
|
||||
$model->idporto = database()->fetchOne('SELECT id FROM dt_porto WHERE predefined = 1')['id'];
|
||||
$model->idcausalet = database()->fetchOne('SELECT id FROM dt_causalet WHERE predefined = 1')['id'];
|
||||
$model->idspedizione = database()->fetchOne('SELECT id FROM dt_spedizione WHERE predefined = 1')['id'];
|
||||
}
|
||||
|
||||
$model->save();
|
||||
|
||||
return $model;
|
||||
|
|
|
@ -101,7 +101,7 @@ if (!empty($record['idcontratto'])) {
|
|||
}
|
||||
echo '
|
||||
|
||||
{[ "type": "select", "label": "'.tr('Contratto').'", "name": "idcontratto", "value": "'.$record['id_contratto'].'", "ajax-source": "contratti", "select-options": '.json_encode(['idanagrafica' => $record['idanagrafica']]).', "readonly": "'.$record['flag_completato'].'" ]}
|
||||
{[ "type": "select", "label": "'.tr('Contratto').'", "name": "idcontratto", "value": "'.$record['id_contratto'].'", "ajax-source": "contratti", "select-options": '.json_encode(['idanagrafica' => $record['idanagrafica']]).', "readonly": "'.$record['flag_completato'].'", "icon-after": "add|'.Modules::get('Contratti')['id'].'|pianificabile=1&idanagrafica='.$record['idanagrafica'].'" ]}
|
||||
|
||||
<input type="hidden" name="idcontratto_riga" value="'.$idcontratto_riga.'">
|
||||
</div>
|
||||
|
|
|
@ -36,11 +36,11 @@ include_once __DIR__.'/../../core.php';
|
|||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Spedizione predefinita'); ?>", "name": "predefined", "value": "$predefined$", "help":"<?php echo tr('Impostare questo tipo di spedizione come predefinito per i ddt'); ?>." ]}
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Spedizione predefinita'); ?>", "name": "predefined", "value": "$predefined$", "help":"<?php echo tr('Impostare questo tipo di spedizione come predefinito per i documenti'); ?>." ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Spedizione con vettore'); ?>", "name": "esterno", "value": "$esterno$", "help":"<?php echo tr('Impostare per rendere obbligatorio il campo vettore in fase di modifica ddt'); ?>." ]}
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Rendi obbligatorio il vettore'); ?>", "name": "esterno", "value": "$esterno$", "help":"<?php echo tr('Impostare per rendere obbligatorio il campo vettore in fase di modifica documento'); ?>." ]}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -0,0 +1,53 @@
|
|||
<?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';
|
||||
|
||||
switch (filter('op')) {
|
||||
case 'crea_definitiva':
|
||||
$year = date('Y', strtotime(post('date_start')));
|
||||
$print = Prints::render(post('id_print'), null, null, true);
|
||||
$pages = count($print['pages']);
|
||||
|
||||
$first_page = $dbo->fetchOne('SELECT MAX(last_page) AS last_page FROM co_stampecontabili WHERE `id_print`='.prepare(post('id_print')).' AND YEAR(`date_end`)='.prepare($year).' AND `dir`='.prepare(post('dir')))['last_page']+1;
|
||||
$last_page = $first_page + $pages - 1;
|
||||
|
||||
$result = $dbo->table('co_stampecontabili')->insertGetId([
|
||||
'id_print' => post('id_print'),
|
||||
'date_start' => post('date_start'),
|
||||
'date_end' => post('date_end'),
|
||||
'first_page' => $first_page,
|
||||
'last_page' => $last_page,
|
||||
'dir' => post('dir'),
|
||||
]);
|
||||
|
||||
$print = Prints::render(post('id_print'), null, null, true);
|
||||
$name = 'Registro_iva_'.(post('dir') == 'entrata' ? 'vendite' : 'acquisti').'_del_'.post('date_start');
|
||||
$upload = Uploads::upload($print['pdf'], [
|
||||
'name' => $name,
|
||||
'original_name' => $name.'.pdf',
|
||||
'category' => 'Generale',
|
||||
'id_module' => $id_module,
|
||||
'id_record' => $result,
|
||||
]);
|
||||
|
||||
echo json_encode($result);
|
||||
|
||||
break;
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
<?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';
|
||||
|
||||
switch ($resource) {
|
||||
case 'controlla_stampa':
|
||||
$date_start = get('date_start');
|
||||
$date_end = get('date_end');
|
||||
$id_print = get('id_print');
|
||||
$dir = get('dir');
|
||||
|
||||
$stampa_definitiva = $database->fetchOne('SELECT id FROM co_stampecontabili WHERE id_print='.prepare($id_print).' AND dir='.prepare($dir).' AND date_start='.prepare($date_start).' AND date_end='.prepare($date_end))['id'];
|
||||
|
||||
echo json_encode($stampa_definitiva ?: 0);
|
||||
|
||||
break;
|
||||
}
|
|
@ -19,36 +19,46 @@
|
|||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
use Models\Module;
|
||||
|
||||
$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;
|
||||
|
||||
// Trovo id_print della stampa
|
||||
$link = Prints::getHref($nome_stampa, $id_record);
|
||||
|
||||
echo '
|
||||
<form action="" method="post" onsubmit="if($(this).parsley().validate()) { return avvia_stampa(); }" >
|
||||
<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 trimestre!').'
|
||||
</div>
|
||||
|
||||
<div class="alert alert-warning hidden" id="is_definitiva">
|
||||
<i class="fa fa-warning"></i> '.tr('È già presente la stampa definitiva per il periodo selezionato!').'
|
||||
</div>
|
||||
|
||||
<form action="" method="post" id="form" >
|
||||
<div class="row">';
|
||||
|
||||
if ($nome_stampa != 'Liquidazione IVA') {
|
||||
echo '
|
||||
if ($nome_stampa != 'Liquidazione IVA') {
|
||||
echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_sezionale", "required": "1", "values": "query=SELECT id AS id, name AS descrizione FROM zz_segments WHERE id_module = (SELECT id FROM zz_modules WHERE name = \''.(($dir == 'entrata') ? 'Fatture di vendita' : 'Fatture di acquisto').'\') AND is_fiscale = 1 UNION SELECT 0 AS id, \'Tutti i sezionali\' AS descrizione" ]}
|
||||
</div>';
|
||||
}
|
||||
echo '
|
||||
}
|
||||
echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "date", "label": "'.tr('Data inizio').'", "required": "1", "name": "date_start", "value": "'.Translator::dateToLocale($_SESSION['period_start']).'" ]}
|
||||
{[ "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": "'.Translator::dateToLocale($_SESSION['period_end']).'" ]}
|
||||
{[ "type": "date", "label": "'.tr('Data fine').'", "required": "1", "name": "date_end", "value": "'.$_SESSION['period_end'].'" ]}
|
||||
</div>
|
||||
|
||||
</div>';
|
||||
|
||||
echo '
|
||||
echo '
|
||||
<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'].'" ]}
|
||||
|
@ -56,34 +66,180 @@ echo '
|
|||
|
||||
<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>';
|
||||
|
||||
if ($nome_stampa != 'Liquidazione IVA') {
|
||||
echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "checkbox", "label": "'.tr('Definitiva').'", "disabled": "1", "name": "definitiva", "help": "'.tr('Per abilitare il pulsante è necessario impostare nei campi Data inizio e Data fine uno dei 4 trimestri e non deve essere già stata creata la stampa definitiva del periodo selezionato').'" ]}
|
||||
</div>';
|
||||
}
|
||||
|
||||
echo '
|
||||
<div class="col-md-4 pull-right">
|
||||
<p style="line-height:14px;"> </p>
|
||||
<button type="submit" class="btn btn-primary btn-block">
|
||||
<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>';
|
||||
|
||||
<script>$(document).ready(init)</script>';
|
||||
if ($nome_stampa != 'Liquidazione IVA') {
|
||||
$elementi = $dbo->fetchArray('SELECT * FROM co_stampecontabili WHERE date_end BETWEEN '.prepare($_SESSION['period_start']).' AND '.prepare($_SESSION['period_end']).' AND id_print='.prepare($id_print).' AND dir='.prepare($dir));
|
||||
echo '
|
||||
<div class="box box-primary collapsable collapsed-box">
|
||||
<div class="box-header with-border">
|
||||
<h3 class="box-title"><i class="fa fa-print"></i> '.tr('Stampe definitive registro iva _DIR_ dal _START_ al _END_', [
|
||||
'_DIR_' => $dir == 'entrata' ? 'vendite' : 'acquisti',
|
||||
'_START_' => dateFormat($_SESSION['period_start']),
|
||||
'_END_' => dateFormat($_SESSION['period_end']),
|
||||
]).'</h3>
|
||||
<div class="box-tools pull-right">
|
||||
<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-plus"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-body">
|
||||
<ul>';
|
||||
|
||||
foreach ($elementi as $elemento) {
|
||||
$descrizione = tr('Stampa definitiva dal _START_ al _END_ (_FIRST_-_LAST_)', [
|
||||
'_START_' => dateFormat($elemento['date_start']),
|
||||
'_END_' => dateFormat($elemento['date_end']),
|
||||
'_FIRST_' => $elemento['first_page'],
|
||||
'_LAST_' => $elemento['last_page'],
|
||||
]);
|
||||
|
||||
$file = $dbo->selectOne('zz_files', '*', ['id_module' => $id_module, 'id_record' => $elemento['id']]);
|
||||
|
||||
echo '
|
||||
<li>
|
||||
<a class="btn btn-xs btn-primary" href="'.base_path().'/actions.php?id_module='.$id_module.'&op=download-allegato&id='.$file['id'].'&filename='.$file['filename'].'" target="_blank"><i class="fa fa-download"></i>
|
||||
</a>
|
||||
'.$descrizione.'
|
||||
</li>';
|
||||
}
|
||||
|
||||
if (empty($elementi)) {
|
||||
echo '<p class="text-center">'.tr('Nessuna stampa presente').'</p>';
|
||||
}
|
||||
|
||||
echo '
|
||||
</ul>
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
echo '
|
||||
<script>
|
||||
$(document).ready(init);
|
||||
|
||||
$(document).ready(function () {
|
||||
eseguiControlli();
|
||||
});
|
||||
|
||||
$("#date_start").blur(function(){
|
||||
eseguiControlli();
|
||||
});
|
||||
|
||||
$("#date_end").blur(function(){
|
||||
eseguiControlli();
|
||||
});
|
||||
|
||||
function eseguiControlli() {
|
||||
let date_start = $("#date_start").data("DateTimePicker").date().format("YYYY-MM-DD");
|
||||
let date_end = $("#date_end").data("DateTimePicker").date().format("YYYY-MM-DD");
|
||||
|
||||
controllaDate(date_start, date_end);
|
||||
}
|
||||
|
||||
// Controllo se le date inserite corrispondono ad uno dei 4 trimestri
|
||||
function controllaDate(date_start, date_end) {
|
||||
let intervallo_corretto = 0;
|
||||
let date = new Date(date_start);
|
||||
let year = date.getFullYear();
|
||||
let m_start = 0;
|
||||
let m_end = 3;
|
||||
|
||||
for (i=0; i<=3; i++) {
|
||||
let start = new Date(year, m_start, 1);
|
||||
let end = new Date(year, m_end, 0);
|
||||
|
||||
int_start = start.getFullYear() + "-" + ("0" + (start.getMonth() + 1)).slice(-2) + "-" + ("0" + start.getDate()).slice(-2);
|
||||
int_end = end.getFullYear() + "-" + ("0" + (end.getMonth() + 1)).slice(-2) + "-" + ("0" + end.getDate()).slice(-2);
|
||||
|
||||
if (date_start == int_start && date_end == int_end) {
|
||||
intervallo_corretto = 1;
|
||||
}
|
||||
m_start += 3;
|
||||
m_end += 3;
|
||||
}
|
||||
$("#is_definitiva").addClass("hidden");
|
||||
|
||||
if (intervallo_corretto) {
|
||||
$("#period").addClass("hidden");
|
||||
controllaStampa(date_start, date_end);
|
||||
} else {
|
||||
$("#period").removeClass("hidden");
|
||||
input("definitiva").disable();
|
||||
$("#definitiva").prop("checked", false);
|
||||
}
|
||||
}
|
||||
|
||||
// Controllo se è già stata creata una stampa definitiva nel periodo selezionato
|
||||
function controllaStampa(date_start, date_end) {
|
||||
$(document).load(globals.rootdir + "/ajax_complete.php?module=stampe_contabili&op=controlla_stampa&dir='.$dir.'&id_print='.$id_print.'&date_start=" + date_start + "&date_end=" + date_end, function(response) {
|
||||
let stampa_definitiva = response;
|
||||
|
||||
if (stampa_definitiva==0) {
|
||||
$("#is_definitiva").addClass("hidden");
|
||||
input("definitiva").enable();
|
||||
} else {
|
||||
$("#is_definitiva").removeClass("hidden");
|
||||
input("definitiva").disable();
|
||||
$("#definitiva").prop("checked", false);
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>';
|
||||
}
|
||||
|
||||
echo '
|
||||
<script>
|
||||
function avvia_stampa (){
|
||||
window.open("'.$link.'&dir='.$dir.'&id_sezionale="+$("#id_sezionale").val()+"&date_start="+$("#date_start").val()+"&date_end="+$("#date_end").val()+"");
|
||||
if ($("#definitiva").is(":checked")) {
|
||||
let date_start = $("#date_start").data("DateTimePicker").date().format("YYYY-MM-DD");
|
||||
let date_end = $("#date_end").data("DateTimePicker").date().format("YYYY-MM-DD");
|
||||
|
||||
$.ajax({
|
||||
url: globals.rootdir + "/actions.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
id_module: globals.id_module,
|
||||
op: "crea_definitiva",
|
||||
date_start: date_start,
|
||||
date_end: date_end,
|
||||
id_print: '.$id_print.',
|
||||
id_sezionale: $("#id_sezionale").val(),
|
||||
dir: "'.$dir.'",
|
||||
},
|
||||
success: function(result) {
|
||||
window.open("'.$link.'&dir='.$dir.'&id_sezionale="+$("#id_sezionale").val()+"&date_start="+$("#date_start").val()+"&date_end="+$("#date_end").val()+"");
|
||||
$("#modals > div").modal("hide");
|
||||
}
|
||||
});
|
||||
} else {
|
||||
window.open("'.$link.'&dir='.$dir.'¬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);
|
||||
});
|
||||
$("#format").change(function() {
|
||||
session_set("stampe_contabili,format", $(this).val(), 0, 0);
|
||||
});
|
||||
|
||||
$(function() {
|
||||
|
||||
});
|
||||
$("#orientation").change(function() {
|
||||
session_set("stampe_contabili,orientation", $(this).val(), 0, 0);
|
||||
});
|
||||
</script>';
|
||||
|
|
|
@ -25,6 +25,9 @@ echo '
|
|||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="op" value="add">
|
||||
|
||||
<!-- Fix creazione da Anagrafica -->
|
||||
<input type="hidden" name="id_record" value="">
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-4">
|
||||
|
@ -40,18 +43,18 @@ echo '
|
|||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "date", "label": "'.tr('Data di ricezione').'", "name": "data", "required": 1, "value": "-now-" ]}
|
||||
{[ "type": "date", "label": "'.tr('Data ricezione').'", "name": "data", "required": 1, "value": "-now-" ]}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
{[ "type": "date", "label": "'.tr('Data di inizio').'", "name": "data_inizio", "required": 1 ]}
|
||||
{[ "type": "date", "label": "'.tr('Data inizio').'", "name": "data_inizio", "required": 1 ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "date", "label": "'.tr('Data di fine').'", "name": "data_fine", "required": 1 ]}
|
||||
{[ "type": "date", "label": "'.tr('Data fine').'", "name": "data_fine", "required": 1 ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
|
|
|
@ -42,18 +42,18 @@ echo '
|
|||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "date", "label": "'.tr('Data di ricezione').'", "name": "data", "required": 1, "value": "'.$record['data'].'" ]}
|
||||
{[ "type": "date", "label": "'.tr('Data ricezione').'", "name": "data", "required": 1, "value": "'.$record['data'].'" ]}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
{[ "type": "date", "label": "'.tr('Data di inizio').'", "name": "data_inizio", "required": 1, "value": "'.$record['data_inizio'].'" ]}
|
||||
{[ "type": "date", "label": "'.tr('Data inizio').'", "name": "data_inizio", "required": 1, "value": "'.$record['data_inizio'].'" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "date", "label": "'.tr('Data di fine').'", "name": "data_fine", "required": 1, "value": "'.$record['data_fine'].'" ]}
|
||||
{[ "type": "date", "label": "'.tr('Data fine').'", "name": "data_fine", "required": 1, "value": "'.$record['data_fine'].'" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
|
@ -61,7 +61,7 @@ echo '
|
|||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "date", "label": "'.tr('Data di emissione').'", "name": "data_emissione", "value": "'.$record['data_emissione'].'", "required": 1 ]}
|
||||
{[ "type": "date", "label": "'.tr('Data emissione').'", "name": "data_emissione", "value": "'.$record['data_emissione'].'", "required": 1 ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Modules\DDT\DDT;
|
||||
use Modules\Ordini\Ordine;
|
||||
use Modules\Fatture\Fattura;
|
||||
|
@ -228,15 +229,6 @@ switch (filter('op')) {
|
|||
});
|
||||
$id_tipo = $tipi->sort()->keys()->last();
|
||||
|
||||
// Ricerca del tipo di pagamento più utilizzato
|
||||
$pagamenti = $fatture->mapToGroups(function ($item, $key) {
|
||||
return [$item->pagamento->id => $item->pagamento];
|
||||
});
|
||||
$id_pagamento = $pagamenti->map(function ($item, $key) {
|
||||
return $item->count();
|
||||
})->sort()->keys()->last();
|
||||
$pagamento = $pagamenti[$id_pagamento]->first();
|
||||
|
||||
// Ricerca del conto più utilizzato
|
||||
$conti = $righe->groupBy(function ($item, $key) {
|
||||
return $item->idconto;
|
||||
|
@ -289,10 +281,40 @@ switch (filter('op')) {
|
|||
|
||||
$results = [];
|
||||
|
||||
// Dati ordini
|
||||
$DatiOrdini = $fattura_pa->getBody()['DatiGenerali']['DatiOrdineAcquisto'];
|
||||
$DatiDDT = $fattura_pa->getBody()['DatiGenerali']['DatiDDT'];
|
||||
|
||||
|
||||
// Riorganizzazione dati ordini per numero di riga
|
||||
$dati_ordini = [];
|
||||
foreach ($DatiOrdini as $dato) {
|
||||
foreach ($dato['RiferimentoNumeroLinea'] as $dati => $linea) {
|
||||
$dati_ordini[(int)$linea] = [
|
||||
'numero' => $dato['IdDocumento'],
|
||||
'anno' => ( new Carbon($dato['Data']) )->format('Y'),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
// Riorganizzazione dati ordini per numero di riga
|
||||
$dati_ddt = [];
|
||||
foreach ($DatiDDT as $dato) {
|
||||
foreach ($dato['RiferimentoNumeroLinea'] as $dati => $linea) {
|
||||
$dati_ddt[(int)$linea] = [
|
||||
'numero' => $dato['NumeroDDT'],
|
||||
'anno' => ( new Carbon($dato['DataDDT']) )->format('Y'),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
// Iterazione sulle singole righe
|
||||
$righe = $fattura_pa->getRighe();
|
||||
foreach ($righe as $key => $riga) {
|
||||
$collegamento = null;
|
||||
$match_documento_da_fe = true;
|
||||
|
||||
$numero_linea = (int)$riga['NumeroLinea'];
|
||||
|
||||
// Visualizzazione codici articoli
|
||||
$codici = $riga['CodiceArticolo'] ?: [];
|
||||
|
@ -303,10 +325,18 @@ switch (filter('op')) {
|
|||
foreach ($codici as $codice) {
|
||||
if (!empty($anagrafica) && empty($id_articolo)) {
|
||||
$id_articolo = $database->fetchOne('SELECT id_articolo AS id FROM mg_fornitore_articolo WHERE codice_fornitore = '.prepare($codice['CodiceValore']).' AND id_fornitore = '.prepare($anagrafica->id))['id'];
|
||||
|
||||
if (empty($id_articolo)) {
|
||||
$id_articolo = $database->fetchOne('SELECT id_articolo AS id FROM mg_fornitore_articolo WHERE REPLACE(codice_fornitore, " ", "") = '.prepare($codice['CodiceValore']).' AND id_fornitore = '.prepare($anagrafica->id))['id'];
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($id_articolo)) {
|
||||
$id_articolo = $database->fetchOne('SELECT id FROM mg_articoli WHERE codice = '.prepare($codice['CodiceValore']))['id'];
|
||||
$id_articolo = $database->fetchOne('SELECT id FROM mg_articoli WHERE codice = '.prepare($codice['CodiceValore']).' AND deleted_at IS NULL')['id'];
|
||||
|
||||
if (empty($id_articolo)) {
|
||||
$id_articolo = $database->fetchOne('SELECT id FROM mg_articoli WHERE REPLACE(codice, " ", "") = '.prepare($codice['CodiceValore']).' AND deleted_at IS NULL')['id'];
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($id_articolo)) {
|
||||
|
@ -314,46 +344,126 @@ switch (filter('op')) {
|
|||
}
|
||||
}
|
||||
|
||||
// Se nella fattura elettronica è indicato un DDT cerco quel documento specifico
|
||||
$ddt = $dati_ddt[$numero_linea];
|
||||
$query = "SELECT dt_righe_ddt.id, dt_righe_ddt.idddt AS id_documento, dt_righe_ddt.is_descrizione, dt_righe_ddt.idarticolo, dt_righe_ddt.is_sconto, 'ddt' AS ref,
|
||||
CONCAT('DDT num. ', IF(numero_esterno != '', numero_esterno, numero), ' del ', DATE_FORMAT(data, '%d/%m/%Y'), ' [', (SELECT descrizione FROM dt_statiddt WHERE id = idstatoddt) , ']') AS opzione
|
||||
FROM dt_righe_ddt
|
||||
INNER JOIN dt_ddt ON dt_ddt.id = dt_righe_ddt.idddt
|
||||
WHERE dt_ddt.idanagrafica = ".prepare($anagrafica->id)." AND |where_ddt|
|
||||
CONCAT('DDT num. ', IF(numero_esterno != '', numero_esterno, numero), ' del ', DATE_FORMAT(data, '%d/%m/%Y'), ' [', (SELECT descrizione FROM dt_statiddt WHERE id = idstatoddt) , ']') AS opzione
|
||||
FROM dt_righe_ddt
|
||||
INNER JOIN dt_ddt ON dt_ddt.id = dt_righe_ddt.idddt
|
||||
WHERE
|
||||
dt_ddt.numero_esterno = ".prepare($ddt['numero'])."
|
||||
AND
|
||||
YEAR(dt_ddt.data) = ".prepare($ddt['anno'])."
|
||||
AND
|
||||
dt_ddt.idanagrafica = ".prepare($anagrafica->id)."
|
||||
AND
|
||||
|where|";
|
||||
|
||||
UNION SELECT or_righe_ordini.id, or_righe_ordini.idordine AS id_documento, or_righe_ordini.is_descrizione, or_righe_ordini.idarticolo, or_righe_ordini.is_sconto, 'ordine' AS ref,
|
||||
CONCAT('Ordine num. ', IF(numero_esterno != '', numero_esterno, numero), ' del ', DATE_FORMAT(data, '%d/%m/%Y'), ' [', (SELECT descrizione FROM or_statiordine WHERE id = idstatoordine) , ']') AS opzione
|
||||
FROM or_righe_ordini
|
||||
INNER JOIN or_ordini ON or_ordini.id = or_righe_ordini.idordine
|
||||
WHERE or_ordini.idanagrafica = ".prepare($anagrafica->id).' AND |where_ordini|';
|
||||
|
||||
// Ricerca di righe DDT/Ordine con stesso Articolo
|
||||
// Ricerca di righe DDT con stesso Articolo
|
||||
if (!empty($id_articolo)) {
|
||||
$query_articolo = replace($query, [
|
||||
'|where_ddt|' => 'dt_righe_ddt.idarticolo = '.prepare($id_articolo),
|
||||
'|where_ordini|' => 'or_righe_ordini.idarticolo = '.prepare($id_articolo),
|
||||
'|where|' => 'dt_righe_ddt.idarticolo = '.prepare($id_articolo),
|
||||
]);
|
||||
|
||||
$collegamento = $database->fetchOne($query_articolo);
|
||||
}
|
||||
|
||||
// Ricerca di righe DDT/Ordine per stessa descrizione
|
||||
// Ricerca di righe DDT per stessa descrizione
|
||||
if (empty($collegamento)) {
|
||||
$match_documento_da_fe = false;
|
||||
$query_descrizione = replace($query, [
|
||||
'|where_ddt|' => 'dt_righe_ddt.descrizione = '.prepare($riga['Descrizione']),
|
||||
'|where_ordini|' => 'or_righe_ordini.descrizione = '.prepare($riga['Descrizione']),
|
||||
'|where|' => 'dt_righe_ddt.descrizione = '.prepare($riga['Descrizione']),
|
||||
]);
|
||||
|
||||
$collegamento = $database->fetchOne($query_descrizione);
|
||||
}
|
||||
|
||||
// Ricerca di righe DDT/Ordine per stesso importo
|
||||
if (empty($collegamento)) {
|
||||
$query_descrizione = replace($query, [
|
||||
'|where_ddt|' => 'dt_righe_ddt.prezzo_unitario = '.prepare($riga['PrezzoUnitario']),
|
||||
'|where_ordini|' => 'or_righe_ordini.prezzo_unitario = '.prepare($riga['PrezzoUnitario']),
|
||||
]);
|
||||
|
||||
$collegamento = $database->fetchOne($query_descrizione);
|
||||
// Se nella fattura elettronica NON è indicato un DDT ed è indicato anche un ordine
|
||||
// cerco per quell'ordine
|
||||
if (empty($collegamento)) {
|
||||
$ordine = $dati_ordini[$numero_linea];
|
||||
$query = "SELECT or_righe_ordini.id, or_righe_ordini.idordine AS id_documento, or_righe_ordini.is_descrizione, or_righe_ordini.idarticolo, or_righe_ordini.is_sconto, 'ordine' AS ref,
|
||||
CONCAT('Ordine num. ', IF(numero_esterno != '', numero_esterno, numero), ' del ', DATE_FORMAT(data, '%d/%m/%Y'), ' [', (SELECT descrizione FROM or_statiordine WHERE id = idstatoordine) , ']') AS opzione
|
||||
FROM or_righe_ordini
|
||||
INNER JOIN or_ordini ON or_ordini.id = or_righe_ordini.idordine
|
||||
WHERE
|
||||
or_ordini.numero_esterno = ".prepare($ddt['numero'])."
|
||||
AND
|
||||
YEAR(or_ordini.data) = ".prepare($ddt['anno'])."
|
||||
AND
|
||||
or_ordini.idanagrafica = ".prepare($anagrafica->id)."
|
||||
AND
|
||||
|where|";
|
||||
|
||||
// Ricerca di righe Ordine con stesso Articolo
|
||||
if (!empty($id_articolo)) {
|
||||
$query_articolo = replace($query, [
|
||||
'|where|' => 'or_righe_ordini.idarticolo = '.prepare($id_articolo),
|
||||
]);
|
||||
|
||||
$collegamento = $database->fetchOne($query_articolo);
|
||||
}
|
||||
|
||||
// Ricerca di righe Ordine per stessa descrizione
|
||||
if (empty($collegamento)) {
|
||||
$query_descrizione = replace($query, [
|
||||
'|where|' => 'or_righe_ordini.descrizione = '.prepare($riga['Descrizione']),
|
||||
]);
|
||||
|
||||
$collegamento = $database->fetchOne($query_descrizione);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* TENTATIVO 2: ricerca solo per articolo o descrizione su documenti
|
||||
* non referenziati nella fattura elettronica
|
||||
*/
|
||||
// Se non ci sono Ordini o DDT cerco per contenuto
|
||||
if (empty($collegamento)) {
|
||||
$match_documento_da_fe = false;
|
||||
$query = "SELECT dt_righe_ddt.id, dt_righe_ddt.idddt AS id_documento, dt_righe_ddt.is_descrizione, dt_righe_ddt.idarticolo, dt_righe_ddt.is_sconto, 'ddt' AS ref,
|
||||
CONCAT('DDT num. ', IF(numero_esterno != '', numero_esterno, numero), ' del ', DATE_FORMAT(data, '%d/%m/%Y'), ' [', (SELECT descrizione FROM dt_statiddt WHERE id = idstatoddt) , ']') AS opzione
|
||||
FROM dt_righe_ddt
|
||||
INNER JOIN dt_ddt ON dt_ddt.id = dt_righe_ddt.idddt
|
||||
WHERE dt_ddt.idanagrafica = ".prepare($anagrafica->id)." AND |where_ddt|
|
||||
|
||||
UNION SELECT or_righe_ordini.id, or_righe_ordini.idordine AS id_documento, or_righe_ordini.is_descrizione, or_righe_ordini.idarticolo, or_righe_ordini.is_sconto, 'ordine' AS ref,
|
||||
CONCAT('Ordine num. ', IF(numero_esterno != '', numero_esterno, numero), ' del ', DATE_FORMAT(data, '%d/%m/%Y'), ' [', (SELECT descrizione FROM or_statiordine WHERE id = idstatoordine) , ']') AS opzione
|
||||
FROM or_righe_ordini
|
||||
INNER JOIN or_ordini ON or_ordini.id = or_righe_ordini.idordine
|
||||
WHERE or_ordini.idanagrafica = ".prepare($anagrafica->id).' AND |where_ordini|';
|
||||
|
||||
// Ricerca di righe DDT/Ordine con stesso Articolo
|
||||
if (!empty($id_articolo)) {
|
||||
$query_articolo = replace($query, [
|
||||
'|where_ddt|' => 'dt_righe_ddt.idarticolo = '.prepare($id_articolo),
|
||||
'|where_ordini|' => 'or_righe_ordini.idarticolo = '.prepare($id_articolo),
|
||||
]);
|
||||
|
||||
$collegamento = $database->fetchOne($query_articolo);
|
||||
}
|
||||
|
||||
// Ricerca di righe DDT/Ordine per stessa descrizione
|
||||
if (empty($collegamento)) {
|
||||
$query_descrizione = replace($query, [
|
||||
'|where_ddt|' => 'dt_righe_ddt.descrizione = '.prepare($riga['Descrizione']),
|
||||
'|where_ordini|' => 'or_righe_ordini.descrizione = '.prepare($riga['Descrizione']),
|
||||
]);
|
||||
|
||||
$collegamento = $database->fetchOne($query_descrizione);
|
||||
}
|
||||
|
||||
// Ricerca di righe DDT/Ordine per stesso importo
|
||||
if (empty($collegamento)) {
|
||||
$query_descrizione = replace($query, [
|
||||
'|where_ddt|' => 'dt_righe_ddt.prezzo_unitario = '.prepare($riga['PrezzoUnitario']),
|
||||
'|where_ordini|' => 'or_righe_ordini.prezzo_unitario = '.prepare($riga['PrezzoUnitario']),
|
||||
]);
|
||||
|
||||
$collegamento = $database->fetchOne($query_descrizione);
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($collegamento)) {
|
||||
|
@ -383,6 +493,7 @@ switch (filter('op')) {
|
|||
'id' => $collegamento['id_documento'],
|
||||
'descrizione' => reference($documento, tr('Origine')),
|
||||
'opzione' => $collegamento['opzione'],
|
||||
'match_documento_da_fe' => $match_documento_da_fe,
|
||||
],
|
||||
'riga' => [
|
||||
'tipo' => get_class($riga),
|
||||
|
|
|
@ -106,11 +106,13 @@ function compilaRiferimenti(btn) {
|
|||
return;
|
||||
}
|
||||
|
||||
for (const [id_riga, data] of response.entries()) {
|
||||
// Selezione dinamica
|
||||
$("#selezione_riferimento" + id_riga).selectSetNew(data.documento.id, data.documento.opzione);
|
||||
for (id_riga in response) {
|
||||
data = response[id_riga];
|
||||
|
||||
// Impostazione del riferiment
|
||||
// Selezione dinamica
|
||||
$("#selezione_riferimento" + id_riga).addClass("already-loaded").selectSetNew(data.documento.id, data.documento.opzione).removeClass("already-loaded");
|
||||
|
||||
// Impostazione del riferimento
|
||||
impostaRiferimento(id_riga, data.documento, data.riga);
|
||||
}
|
||||
},
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
*/
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Modules\Pagamenti\Pagamento;
|
||||
use Plugins\ImportFE\FatturaElettronica;
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
@ -262,6 +263,7 @@ echo '
|
|||
</div>';
|
||||
|
||||
// Pagamento
|
||||
$pagamento = Pagamento::where('codice_modalita_pagamento_fe', $codice_modalita_pagamento)->where('predefined', '1')->first();
|
||||
echo '
|
||||
<div class="row" >
|
||||
<div class="col-md-3">
|
||||
|
@ -269,7 +271,7 @@ echo '
|
|||
<i class="fa fa-refresh"></i> '.tr('Visualizza tutte le modalità').'
|
||||
</button>
|
||||
|
||||
{[ "type": "select", "label": "'.tr('Pagamento').'", "name": "pagamento", "required": 1, "ajax-source": "pagamenti", "select-options": '.json_encode(['codice_modalita_pagamento_fe' => $codice_modalita_pagamento]).' ]}
|
||||
{[ "type": "select", "label": "'.tr('Pagamento').'", "name": "pagamento", "required": 1, "ajax-source": "pagamenti", "select-options": '.json_encode(['codice_modalita_pagamento_fe' => $codice_modalita_pagamento]).', "value": "'.$pagamento->id.'" ]}
|
||||
</div>';
|
||||
|
||||
// Movimentazioni
|
||||
|
@ -323,6 +325,34 @@ if (!empty($righe)) {
|
|||
</thead>
|
||||
|
||||
<tbody>';
|
||||
|
||||
// Dati ordini
|
||||
$DatiOrdini = $fattura_pa->getBody()['DatiGenerali']['DatiOrdineAcquisto'];
|
||||
$DatiDDT = $fattura_pa->getBody()['DatiGenerali']['DatiDDT'];
|
||||
|
||||
|
||||
// Riorganizzazione dati ordini per numero di riga
|
||||
$dati_ordini = [];
|
||||
foreach ($DatiOrdini as $dato) {
|
||||
foreach ($dato['RiferimentoNumeroLinea'] as $dati => $linea) {
|
||||
$dati_ordini[(int)$linea] = [
|
||||
'numero' => $dato['IdDocumento'],
|
||||
'data' => ( new Carbon($dato['Data']) )->format('d/m/Y'),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
// Riorganizzazione dati ordini per numero di riga
|
||||
$dati_ddt = [];
|
||||
foreach ($DatiDDT as $dato) {
|
||||
foreach ($dato['RiferimentoNumeroLinea'] as $dati => $linea) {
|
||||
$dati_ddt[(int)$linea] = [
|
||||
'numero' => $dato['NumeroDDT'],
|
||||
'data' => ( new Carbon($dato['DataDDT']) )->format('d/m/Y'),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
foreach ($righe as $key => $riga) {
|
||||
$query = "SELECT id, IF(codice IS NULL, descrizione, CONCAT(codice, ' - ', descrizione)) AS descrizione FROM co_iva WHERE deleted_at IS NULL AND percentuale = ".prepare($riga['AliquotaIVA']);
|
||||
|
@ -374,11 +404,23 @@ if (!empty($righe)) {
|
|||
$prezzo_unitario = $riga['PrezzoUnitario'] ?: $riga['Importo'];
|
||||
$is_descrizione = empty((float)$riga['Quantita']) && empty((float)$prezzo_unitario);
|
||||
|
||||
$riferimento_fe = '';
|
||||
|
||||
if ($dati_ddt[(int)$riga['NumeroLinea']]) {
|
||||
$riferimento_fe = tr('DDT _NUMERO_ del _DATA_',
|
||||
[
|
||||
'_NUMERO_' => $dati_ddt[(int)$riga['NumeroLinea']]['numero'],
|
||||
'_DATA_' => $dati_ddt[(int)$riga['NumeroLinea']]['data'],
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
echo '
|
||||
<tr data-id="'.$key.'" data-qta="'.$qta.'" data-prezzo_unitario="'.$prezzo_unitario.'" data-iva_percentuale="'.$riga['AliquotaIVA'].'">
|
||||
<td>
|
||||
'.(empty($codice_principale) ? '<span class="label label-warning pull-right text-muted articolo-warning hidden">'.tr('Creazione automatica articolo non disponibile').'</span>' : '').'
|
||||
<small class="pull-right text-muted" id="riferimento_'.$key.'"></small>
|
||||
<small class="pull-right text-muted" id="riferimento_'.$key.'"></small><br>
|
||||
<small class="pull-right text-muted">'.$riferimento_fe.'</small>
|
||||
|
||||
|
||||
'.$riga['Descrizione'].'<br>
|
||||
|
@ -560,13 +602,15 @@ input("crea_articoli").on("change", function (){
|
|||
}
|
||||
});
|
||||
|
||||
$("select[name^=selezione_riferimento").change(function() {
|
||||
let $this = $(this);
|
||||
let data = $this.selectData();
|
||||
$("select[name^=selezione_riferimento").change(function() {
|
||||
if (!$(this).hasClass("already-loaded")) {
|
||||
let $this = $(this);
|
||||
let data = $this.selectData();
|
||||
|
||||
if (data) {
|
||||
let riga = $this.closest("tr").prev();
|
||||
selezionaRiferimento(riga, data.tipo, data.id, data.dir);
|
||||
if (data) {
|
||||
let riga = $this.closest("tr").prev();
|
||||
selezionaRiferimento(riga, data.tipo, data.id, data.dir);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -649,23 +693,29 @@ function impostaRiferimento(id_riga, documento, riga) {
|
|||
let riga_fe = $("#id_riga_riferimento_" + id_riga).closest("tr").prev();
|
||||
|
||||
// Informazioni visibili sulla quantità
|
||||
impostaContenuto(riga_fe.data("qta"), riga.qta, (riga.um ? " " + riga.um : ""), "#riferimento_" + id_riga + "_qta");
|
||||
impostaContenuto(riga_fe.data("qta"), riga.qta, (riga.um ? " " + riga.um : ""), "#riferimento_" + id_riga + "_qta", true);
|
||||
|
||||
// Informazioni visibili sul prezzo unitario
|
||||
impostaContenuto(riga_fe.data("prezzo_unitario"), riga.prezzo_unitario, " " + globals.currency, "#riferimento_" + id_riga + "_prezzo");
|
||||
impostaContenuto(riga_fe.data("prezzo_unitario"), riga.prezzo_unitario, " " + globals.currency, "#riferimento_" + id_riga + "_prezzo", true);
|
||||
|
||||
// Informazioni visibili sull\'aliquota IVA
|
||||
impostaContenuto(riga_fe.data("iva_percentuale"), riga.iva_percentuale, "%", "#riferimento_" + id_riga + "_iva");
|
||||
impostaContenuto(riga_fe.data("iva_percentuale"), parseInt(riga.iva_percentuale), "%", "#riferimento_" + id_riga + "_iva", false);
|
||||
|
||||
$("#riferimento_" + id_riga).html(documento.descrizione ? documento.descrizione : "");
|
||||
|
||||
var descrizione = riga.descrizione;
|
||||
console.log(descrizione);
|
||||
if(typeof descrizione !== "undefined"){
|
||||
descrizione = descrizione.replace(/_/g, " ");
|
||||
descrizione = descrizione.replace(/_/g, " ").replace(/\n/g, "<br>");
|
||||
}
|
||||
|
||||
$("#riferimento_" + id_riga + "_descrizione").html(descrizione ? descrizione : "");
|
||||
// Dettagli del documento trovato
|
||||
icona_documento = documento.match_documento_da_fe ? "fa-check-circle text-success" : "fa-question-circle text-orange";
|
||||
tooltip_icona = documento.match_documento_da_fe ? "La corrispondenza trovata è avvenuta in base a quanto ha specificato il fornitore nella fattura elettronica" : "Nessuna corrispondenza con quanto ha specificato il fornitore nella fattura elettronica, il riferimento potrebbe non essere corretto";
|
||||
|
||||
$("#riferimento_" + id_riga + "_descrizione").html("<br><b class=\"tip\" title=\"" + tooltip_icona + "\"><i class=\"fa " + icona_documento + "\"></i> " + documento.opzione + "</b><br>");
|
||||
|
||||
// Dettagli della riga trovata
|
||||
$("#riferimento_" + id_riga + "_descrizione").append(descrizione ? descrizione : "");
|
||||
|
||||
// Colorazione dell\'intera riga
|
||||
let warnings = riga_fe.find(".text-warning");
|
||||
|
@ -677,7 +727,7 @@ function impostaRiferimento(id_riga, documento, riga) {
|
|||
}
|
||||
|
||||
// Informazioni visibili sull\'aliquota IVA
|
||||
function impostaContenuto(valore_riga, valore_riferimento, contenuto_successivo, id_elemento) {
|
||||
function impostaContenuto(valore_riga, valore_riferimento, contenuto_successivo, id_elemento, parse_riferimento) {
|
||||
let elemento = $(id_elemento);
|
||||
if (valore_riferimento === undefined) {
|
||||
elemento.html("");
|
||||
|
@ -687,7 +737,7 @@ function impostaContenuto(valore_riga, valore_riferimento, contenuto_successivo,
|
|||
valore_riga = parseFloat(valore_riga);
|
||||
valore_riferimento = parseFloat(valore_riferimento);
|
||||
|
||||
let contenuto = valore_riferimento.toLocale() + contenuto_successivo;
|
||||
let contenuto = (parse_riferimento ? valore_riferimento.toLocale() + contenuto_successivo : valore_riferimento + contenuto_successivo);
|
||||
if (valore_riferimento === valore_riga) {
|
||||
contenuto = `<i class="fa fa-check"></i> ` + contenuto;
|
||||
elemento.addClass("text-success").removeClass("text-warning");
|
||||
|
|
|
@ -126,6 +126,11 @@ class FatturaOrdinaria extends FatturaElettronica
|
|||
$ritenuta_contributi = !empty($fattura->id_ritenuta_contributi);
|
||||
$conto_arrotondamenti = null;
|
||||
|
||||
// Disattivo temporaneamente l'impostazione per evadere solo le quantità previste
|
||||
$original_setting_evasione = setting('Permetti il superamento della soglia quantità dei documenti di origine');
|
||||
|
||||
\Settings::setValue('Permetti il superamento della soglia quantità dei documenti di origine', 1);
|
||||
|
||||
foreach ($righe as $key => $riga) {
|
||||
$articolo = ArticoloOriginale::find($articoli[$key]);
|
||||
|
||||
|
@ -178,9 +183,9 @@ class FatturaOrdinaria extends FatturaElettronica
|
|||
$obj->descrizione = $riga['Descrizione'];
|
||||
|
||||
// Collegamento al documento di riferimento
|
||||
if (!empty($tipi_riferimenti[$key]) && is_subclass_of($tipi_riferimenti[$key], Component::class)) {
|
||||
if (!empty($tipi_riferimenti[$key]) && is_subclass_of($tipi_riferimenti[$key], Component::class) && !empty($id_riferimenti[$key])) {
|
||||
$riga_origine = ($tipi_riferimenti[$key])::find($id_riferimenti[$key]);
|
||||
list($riferimento_precedente, $nuovo_riferimento) = $obj->impostaOrigine($riga_origine);
|
||||
list($riferimento_precedente, $nuovo_riferimento) = $obj->impostaOrigine($tipi_riferimenti[$key], $id_riferimenti[$key]);
|
||||
|
||||
// Correzione della descrizione
|
||||
$obj->descrizione = str_replace($riferimento_precedente, '', $obj->descrizione);
|
||||
|
@ -316,6 +321,9 @@ class FatturaOrdinaria extends FatturaElettronica
|
|||
$obj->save();
|
||||
}
|
||||
|
||||
// Ripristino l'impostazione iniziale di evasione quantità
|
||||
\Settings::setValue('Permetti il superamento della soglia quantità dei documenti di origine', $original_setting_evasione);
|
||||
|
||||
// Ricaricamento della fattura
|
||||
$fattura->refresh();
|
||||
|
||||
|
|
|
@ -25,6 +25,9 @@ echo '
|
|||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="op" value="addreferente">
|
||||
|
||||
<!-- Fix creazione da Anagrafica -->
|
||||
<input type="hidden" name="id_record" value="">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "text", "label": "'.tr('Nominativo').'", "name": "nome", "required": 1 ]}
|
||||
|
|
|
@ -25,6 +25,9 @@ echo '
|
|||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="op" value="addsede">
|
||||
|
||||
<!-- Fix creazione da Anagrafica -->
|
||||
<input type="hidden" name="id_record" value="">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "'.tr('Anagrafica').'", "name": "id_anagrafica", "required": "1", "value": "'.$id_parent.'", "ajax-source": "anagrafiche", "disabled": 1 ]}
|
||||
|
|
|
@ -698,6 +698,8 @@ class Prints
|
|||
$file = self::getFile($infos, $id_record, $directory, $replaces);
|
||||
$file['pdf'] = file_get_contents($filename);
|
||||
}
|
||||
|
||||
$file['pages'] = $mpdf->pages;
|
||||
|
||||
return $file;
|
||||
}
|
||||
|
|
|
@ -48,6 +48,12 @@ class XML
|
|||
throw new Exception($message);
|
||||
}
|
||||
|
||||
$xpath = '//*[not(normalize-space())]';
|
||||
|
||||
foreach (array_reverse($xml->xpath($xpath)) as $remove) {
|
||||
unset($remove[0]);
|
||||
}
|
||||
|
||||
$result = json_decode(json_encode($xml), true);
|
||||
|
||||
return $result;
|
||||
|
|
|
@ -17,18 +17,14 @@
|
|||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
echo '
|
||||
<table style="color:#aaa; font-size:10px;">
|
||||
<tr>
|
||||
<td align="left" style="width:97mm;">
|
||||
'.tr('Stampato con OpenSTAManager il _DATE_', ['_DATE_' => date('d/m/Y')]).'
|
||||
</td>
|
||||
|
||||
<td class="text-right" style="width:97mm;">
|
||||
'.tr('Pagina _PAGE_ di _TOTAL_', [
|
||||
'_PAGE_' => '{PAGENO}',
|
||||
'_TOTAL_' => '{nb}',
|
||||
if (!empty($page)) {
|
||||
echo '
|
||||
<p class="text-right">
|
||||
'.tr('_YEAR_/_PAGE_', [
|
||||
'_PAGE_' => $page++,
|
||||
'_YEAR_' => date('Y'),
|
||||
]).'
|
||||
</td>
|
||||
</tr>
|
||||
</table>';
|
||||
</p>';
|
||||
} else {
|
||||
echo '<p></p>';
|
||||
}
|
||||
|
|
|
@ -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/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Header di default.
|
||||
* I contenuti di questo file vengono utilizzati per generare l'header delle stampe nel caso non esista un file header.php all'interno della stampa.
|
||||
*
|
||||
* Per modificare l'header della stampa basta aggiungere un file header.php all'interno della cartella della stampa con i contenuti da mostrare (vedasi templates/fatture/header.php).
|
||||
*
|
||||
* La personalizzazione specifica dell'header deve comunque seguire lo standard della cartella custom: anche se il file header.php non esiste nella stampa originaria, se si vuole personalizzare l'header bisogna crearlo all'interno della cartella custom.
|
||||
*/
|
||||
|
||||
echo '
|
||||
<div class="text-right">
|
||||
<p><b>'.$f_ragionesociale.'</b></p>
|
||||
</div>';
|
|
@ -51,6 +51,10 @@ GROUP BY co_documenti.id, co_righe_documenti.idiva
|
|||
ORDER BY CAST(co_documenti.'.(($dir == 'entrata') ? 'data' : 'numero').' AS '.(($dir == 'entrata') ? 'DATE' : 'UNSIGNED').'), co_documenti.'.(($dir == 'entrata') ? 'numero_esterno' : 'data_competenza');
|
||||
$records = $dbo->fetchArray($query);
|
||||
|
||||
if (empty(get('notdefinitiva'))) {
|
||||
$page = $dbo->fetchOne('SELECT first_page FROM co_stampecontabili WHERE dir='.prepare(filter('dir')).' AND date_start='.prepare(filter('date_start')).' AND date_end='.prepare(filter('date_end')))['first_page'];
|
||||
}
|
||||
|
||||
// Sostituzioni specifiche
|
||||
$custom = [
|
||||
'tipo' => $tipo,
|
||||
|
|
|
@ -32,4 +32,63 @@ ALTER TABLE `zz_views` ADD `html_format` TINYINT NOT NULL DEFAULT '1' AFTER `for
|
|||
UPDATE `zz_views` SET `html_format` = '1';
|
||||
|
||||
-- Correzione widget valore magazzino
|
||||
UPDATE `zz_widgets` SET `query` = 'SELECT CONCAT_WS(\" \", REPLACE(REPLACE(REPLACE(FORMAT(SUM(prezzo_acquisto*qta),2), \",\", \"#\"), \".\", \",\"), \"#\", \".\"), \"€\") AS dato FROM mg_articoli WHERE qta>0 AND deleted_at IS NULL AND servizio=0' WHERE `zz_widgets`.`name` = 'Valore magazzino';
|
||||
UPDATE `zz_widgets` SET `query` = 'SELECT CONCAT_WS(\" \", REPLACE(REPLACE(REPLACE(FORMAT(SUM(prezzo_acquisto*qta),2), \",\", \"#\"), \".\", \",\"), \"#\", \".\"), \"€\") AS dato FROM mg_articoli WHERE qta>0 AND deleted_at IS NULL AND servizio=0 AND 1=1', `help` = 'Articoli a magazzino (tutti o solo attivi secondo il segmento)' WHERE `zz_widgets`.`name` = 'Valore magazzino';
|
||||
|
||||
-- Aggiunte informazioni nella colonna sede per la Sede legale in Interventi
|
||||
UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `in_interventi`\nINNER JOIN `an_anagrafiche` ON `in_interventi`.`idanagrafica` = `an_anagrafiche`.`idanagrafica`\nLEFT JOIN `in_interventi_tecnici` ON `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id`\nLEFT JOIN `in_interventi_tecnici_assegnati` ON `in_interventi_tecnici_assegnati`.`id_intervento` = `in_interventi`.`id`\nLEFT JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento`=`in_statiintervento`.`idstatointervento`\nLEFT JOIN (\n SELECT an_sedi.id, CONCAT(an_sedi.nomesede, \'<br />\',IF(an_sedi.telefono!=\'\',CONCAT(an_sedi.telefono,\'<br />\'),\'\'),IF(an_sedi.cellulare!=\'\',CONCAT(an_sedi.cellulare,\'<br />\'),\'\'),an_sedi.citta,IF(an_sedi.indirizzo!=\'\',CONCAT(\' - \',an_sedi.indirizzo),\'\')) AS info FROM an_sedi\n) AS sede_destinazione ON sede_destinazione.id = in_interventi.idsede_destinazione\nLEFT JOIN (\n SELECT co_righe_documenti.idintervento, CONCAT(\'Fatt. \', co_documenti.numero_esterno, \' del \', DATE_FORMAT(co_documenti.data, \'%d/%m/%Y\')) AS info FROM co_documenti INNER JOIN co_righe_documenti ON co_documenti.id = co_righe_documenti.iddocumento\n) AS fattura ON fattura.idintervento = in_interventi.id\nLEFT JOIN (SELECT `zz_operations`.`id_email`, `zz_operations`.`id_record`\n FROM `zz_operations`\n INNER JOIN `em_emails` ON `zz_operations`.`id_email` = `em_emails`.`id`\n INNER JOIN `em_templates` ON `em_emails`.`id_template` = `em_templates`.`id`\n INNER JOIN `zz_modules` ON `zz_operations`.`id_module` = `zz_modules`.`id` \n WHERE `zz_modules`.`name` = \'Interventi\' AND `zz_operations`.`op` = \'send-email\' \n GROUP BY `zz_operations`.`id_record`) AS email ON email.id_record=in_interventi.id\nWHERE 1=1 |date_period(`orario_inizio`,`data_richiesta`)|\nGROUP BY `in_interventi`.`id`\nHAVING 2=2\nORDER BY IFNULL(`orario_fine`, `data_richiesta`) DESC' WHERE `zz_modules`.`name` = 'Interventi';
|
||||
UPDATE `zz_views` SET `query` = 'IF(in_interventi.idsede_destinazione > 0, sede_destinazione.info, CONCAT(\'Sede legale<br>\',IF(an_anagrafiche.telefono!=\'\',CONCAT(an_anagrafiche.telefono,\'<br />\'),\'\'),IF(an_anagrafiche.cellulare!=\'\',CONCAT(an_anagrafiche.cellulare,\'<br />\'),\'\'),IF(an_anagrafiche.citta!=\'\',an_anagrafiche.citta,\'\'),IF(an_anagrafiche.indirizzo!=\'\',CONCAT(\' - \',an_anagrafiche.indirizzo),\'\')))' WHERE `zz_views`.`name` = 'Sede' AND `id_module`=(SELECT `id` FROM `zz_modules` WHERE `name` = 'Interventi');
|
||||
|
||||
-- Aggiunto pagamenti predefiniti per importazione FE
|
||||
ALTER TABLE `co_pagamenti` ADD `predefined` TINYINT NOT NULL AFTER `idconto_acquisti`;
|
||||
INSERT INTO `co_pagamenti` (`id`, `descrizione`, `giorno`, `num_giorni`, `prc`, `idconto_vendite`, `idconto_acquisti`, `predefined`, `codice_modalita_pagamento_fe`) VALUES (NULL, 'Ri.Ba.', '0', '0', '100.00', '2', '2', '1', 'MP12');
|
||||
UPDATE `co_pagamenti` SET `predefined` = '1' WHERE `co_pagamenti`.`descrizione` = 'Contanti' AND `codice_modalita_pagamento_fe`='MP01';
|
||||
UPDATE `co_pagamenti` SET `predefined` = '1' WHERE `co_pagamenti`.`descrizione` = 'Assegno' AND `codice_modalita_pagamento_fe`='MP02';
|
||||
UPDATE `co_pagamenti` SET `predefined` = '1' WHERE `co_pagamenti`.`descrizione` = 'Assegno circolare' AND `codice_modalita_pagamento_fe`='MP03';
|
||||
UPDATE `co_pagamenti` SET `predefined` = '1' WHERE `co_pagamenti`.`descrizione` = 'Contanti presso Tesoreria' AND `codice_modalita_pagamento_fe`='MP04';
|
||||
UPDATE `co_pagamenti` SET `predefined` = '1' WHERE `co_pagamenti`.`descrizione` = 'Bonifico bancario' AND `codice_modalita_pagamento_fe`='MP05';
|
||||
UPDATE `co_pagamenti` SET `predefined` = '1' WHERE `co_pagamenti`.`descrizione` = 'Vaglia cambiario' AND `codice_modalita_pagamento_fe`='MP06';
|
||||
UPDATE `co_pagamenti` SET `predefined` = '1' WHERE `co_pagamenti`.`descrizione` = 'Bollettino bancario' AND `codice_modalita_pagamento_fe`='MP07';
|
||||
UPDATE `co_pagamenti` SET `predefined` = '1' WHERE `co_pagamenti`.`descrizione` = 'Bancomat' AND `codice_modalita_pagamento_fe`='MP08';
|
||||
UPDATE `co_pagamenti` SET `predefined` = '1' WHERE `co_pagamenti`.`descrizione` = 'RID' AND `codice_modalita_pagamento_fe`='MP09';
|
||||
UPDATE `co_pagamenti` SET `predefined` = '1' WHERE `co_pagamenti`.`descrizione` = 'RID utenze' AND `codice_modalita_pagamento_fe`='MP10';
|
||||
UPDATE `co_pagamenti` SET `predefined` = '1' WHERE `co_pagamenti`.`descrizione` = 'RID veloce' AND `codice_modalita_pagamento_fe`='MP11';
|
||||
UPDATE `co_pagamenti` SET `predefined` = '1' WHERE `co_pagamenti`.`descrizione` = 'MAV' AND `codice_modalita_pagamento_fe`='MP13';
|
||||
UPDATE `co_pagamenti` SET `predefined` = '1' WHERE `co_pagamenti`.`descrizione` = 'Quietanza erario' AND `codice_modalita_pagamento_fe`='MP14';
|
||||
UPDATE `co_pagamenti` SET `predefined` = '1' WHERE `co_pagamenti`.`descrizione` = 'Giroconto su conti di contabilità speciale' AND `codice_modalita_pagamento_fe`='MP15';
|
||||
UPDATE `co_pagamenti` SET `predefined` = '1' WHERE `co_pagamenti`.`descrizione` = 'Domiciliazione bancaria' AND `codice_modalita_pagamento_fe`='MP16';
|
||||
UPDATE `co_pagamenti` SET `predefined` = '1' WHERE `co_pagamenti`.`descrizione` = 'Domiciliazione postale' AND `codice_modalita_pagamento_fe`='MP17';
|
||||
UPDATE `co_pagamenti` SET `predefined` = '1' WHERE `co_pagamenti`.`descrizione` = 'Bollettino di c/c postale' AND `codice_modalita_pagamento_fe`='MP18';
|
||||
UPDATE `co_pagamenti` SET `predefined` = '1' WHERE `co_pagamenti`.`descrizione` = 'SEPA Direct Debit' AND `codice_modalita_pagamento_fe`='MP19';
|
||||
UPDATE `co_pagamenti` SET `predefined` = '1' WHERE `co_pagamenti`.`descrizione` = 'SEPA Direct Debit CORE' AND `codice_modalita_pagamento_fe`='MP20';
|
||||
UPDATE `co_pagamenti` SET `predefined` = '1' WHERE `co_pagamenti`.`descrizione` = 'SEPA Direct Debit B2B' AND `codice_modalita_pagamento_fe`='MP21';
|
||||
UPDATE `co_pagamenti` SET `predefined` = '1' WHERE `co_pagamenti`.`descrizione` = 'Trattenuta su somme già riscosse' AND `codice_modalita_pagamento_fe`='MP22';
|
||||
UPDATE `co_pagamenti` SET `predefined` = '1' WHERE `co_pagamenti`.`descrizione` = 'PagoPA' AND `codice_modalita_pagamento_fe`='MP23';
|
||||
|
||||
-- Segmento Tutti/Solo attivi per articoli.
|
||||
INSERT INTO `zz_segments` (`id`, `id_module`, `name`, `clause`, `position`, `pattern`, `note`, `predefined`, `predefined_accredito`, `predefined_addebito`, `is_fiscale`) VALUES
|
||||
(NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Articoli'), 'Tutti', '1=1', 'WHR', '####', '', 1, 0, 0, 0),
|
||||
(NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Articoli'), 'Solo attivi', 'attivo=1', 'WHR', '####', '', 0, 0, 0, 0);
|
||||
|
||||
-- Correzione widget articoli in magazzino
|
||||
UPDATE `zz_widgets` SET `query` = 'SELECT CONCAT_WS(\" \", REPLACE(REPLACE(REPLACE(FORMAT(SUM(qta),2), \",\", \"#\"), \".\", \",\"), \"#\", \".\"), \"unità\") AS dato FROM mg_articoli WHERE qta>0 AND deleted_at IS NULL AND servizio=0 AND 1=1', `help` = 'Articoli a magazzino (tutti o solo attivi secondo il segmento)' WHERE `zz_widgets`.`name` = 'Articoli in magazzino';
|
||||
|
||||
-- Aggiunta colonna "Servizio" per vista Articoli
|
||||
INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `visible`, `format`, `default`) VALUES
|
||||
(NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Articoli'), 'Servizio', 'IF(mg_articoli.servizio, ''Sì'', ''No'')', 13, 1, 0, 1);
|
||||
|
||||
-- Summable per Q.tà, Q.tà disponibile, Q.tà impegnata e Q.tà ordinata
|
||||
UPDATE `zz_views` SET `summable` = '1' WHERE (`zz_views`.`name` = 'Q.tà ordinata' OR `zz_views`.`name` = 'Q.tà' OR `zz_views`.`name` = 'Q.tà disponibile' OR `zz_views`.`name` = 'Q.tà impegnata') AND `zz_views`.`id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Articoli');
|
||||
|
||||
-- Stampe definitive registri iva
|
||||
CREATE TABLE `co_stampecontabili` ( `id` INT NOT NULL AUTO_INCREMENT , `id_print` INT NOT NULL , `date_start` DATE NOT NULL , `date_end` DATE NOT NULL , `first_page` INT NOT NULL , `last_page` INT NOT NULL , `dir` VARCHAR(255) NOT NULL , PRIMARY KEY (`id`));
|
||||
|
||||
-- Coefficiente di vendita
|
||||
ALTER TABLE `mg_articoli` ADD `coefficiente` DECIMAL(12,6) NOT NULL AFTER `prezzo_acquisto`;
|
||||
|
||||
-- Codice iva in selezione Iva per lettere d'intento
|
||||
UPDATE `zz_settings` SET `tipo` = 'query=SELECT id, CONCAT(codice,\' - \',descrizione) AS descrizione FROM `co_iva` WHERE codice_natura_fe LIKE \'N3.%\' AND deleted_at IS NULL ORDER BY descrizione ASC' WHERE `zz_settings`.`nome` = 'Iva per lettere d''intento';
|
||||
|
||||
-- Aggiunte colonne codice e barcode fornitore in listini
|
||||
INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `html_format`, `search_inside`, `order_by`, `visible`, `summable`, `default`) VALUES
|
||||
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Listini'), 'Codice', '(SELECT codice_fornitore FROM mg_fornitore_articolo WHERE id_articolo=mg_prezzi_articoli.id_articolo AND id_fornitore=mg_prezzi_articoli.id_anagrafica AND deleted_at IS NULL)', 8, 1, 0, 0, 1, '', '', 0, 0, 1),
|
||||
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Listini'), 'Barcode', '(SELECT barcode_fornitore FROM mg_fornitore_articolo WHERE id_articolo=mg_prezzi_articoli.id_articolo AND id_fornitore=mg_prezzi_articoli.id_anagrafica AND deleted_at IS NULL)', 9, 1, 0, 0, 1, '', '', 0, 0, 1);
|
Loading…
Reference in New Issue