Merge branch 'master' of https://github.com/devcode-it/openstamanager
This commit is contained in:
commit
a58da9ebe0
|
@ -49,11 +49,8 @@ if (empty($result['idarticolo'])) {
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function (){
|
$(document).ready(function (){
|
||||||
ottieniPrezziArticolo("'.$articolo['id'].'").then(function (){
|
ottieniDettagliArticolo("'.$articolo['id'].'").then(function (){
|
||||||
verificaPrezzoArticolo();
|
verificaPrezzoArticolo();
|
||||||
});
|
|
||||||
|
|
||||||
ottieniScontiArticolo("'.$articolo['id'].'").then(function (){
|
|
||||||
verificaScontoArticolo();
|
verificaScontoArticolo();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -108,22 +105,18 @@ if ($module['name'] != 'Contratti' && $module['name'] != 'Preventivi') {
|
||||||
echo '
|
echo '
|
||||||
<script>
|
<script>
|
||||||
var direzione = "'.$options['dir'].'";
|
var direzione = "'.$options['dir'].'";
|
||||||
|
globals.aggiunta_articolo = {
|
||||||
|
};
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
if (direzione === "uscita") {
|
if (direzione === "uscita") {
|
||||||
aggiorna_qta_minima();
|
aggiornaQtaMinima();
|
||||||
$("#qta").keyup(aggiorna_qta_minima);
|
$("#qta").keyup(aggiornaQtaMinima);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#tipo_sconto").on("change", function() {
|
$("#tipo_sconto").on("change", function() {
|
||||||
let $data = $("#idarticolo").selectData();
|
verificaScontoArticolo();
|
||||||
ottieniScontiArticolo($data.id).then(function() {
|
|
||||||
if ($("#sconto").val().toEnglish() === 0){
|
|
||||||
aggiornaScontoArticolo();
|
|
||||||
} else {
|
|
||||||
verificaScontoArticolo();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#idarticolo").on("change", function() {
|
$("#idarticolo").on("change", function() {
|
||||||
|
@ -149,15 +142,13 @@ $("#idarticolo").on("change", function() {
|
||||||
|
|
||||||
// Autoimpostazione dei campi relativi all\'articolo
|
// Autoimpostazione dei campi relativi all\'articolo
|
||||||
let $data = $(this).selectData();
|
let $data = $(this).selectData();
|
||||||
ottieniPrezziArticolo($data.id).then(function() {
|
ottieniDettagliArticolo($data.id).then(function() {
|
||||||
if ($("#prezzo_unitario").val().toEnglish() === 0){
|
if ($("#prezzo_unitario").val().toEnglish() === 0){
|
||||||
aggiornaPrezzoArticolo()
|
aggiornaPrezzoArticolo();
|
||||||
} else {
|
} else {
|
||||||
verificaPrezzoArticolo();
|
verificaPrezzoArticolo();
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
|
||||||
ottieniScontiArticolo($data.id).then(function() {
|
|
||||||
if ($("#sconto").val().toEnglish() === 0){
|
if ($("#sconto").val().toEnglish() === 0){
|
||||||
aggiornaScontoArticolo();
|
aggiornaScontoArticolo();
|
||||||
} else {
|
} else {
|
||||||
|
@ -177,7 +168,7 @@ $("#idarticolo").on("change", function() {
|
||||||
else {
|
else {
|
||||||
$("#id_dettaglio_fornitore").val($data.id_dettaglio_fornitore);
|
$("#id_dettaglio_fornitore").val($data.id_dettaglio_fornitore);
|
||||||
$("#qta_minima").val($data.qta_minima);
|
$("#qta_minima").val($data.qta_minima);
|
||||||
aggiorna_qta_minima();
|
aggiornaQtaMinima();
|
||||||
}
|
}
|
||||||
|
|
||||||
let id_conto = $data.idconto_'.($options['dir'] == 'entrata' ? 'vendita' : 'acquisto').';
|
let id_conto = $data.idconto_'.($options['dir'] == 'entrata' ? 'vendita' : 'acquisto').';
|
||||||
|
@ -199,80 +190,58 @@ $(document).on("change", "input[name^=qta], input[name^=prezzo_unitario], input[
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Restituisce il prezzo registrato per una specifica quantità dell\'articolo.
|
* Restituisce il dettaglio registrato per una specifica quantità dell\'articolo.
|
||||||
*/
|
*/
|
||||||
function getPrezzoPerQuantita(qta) {
|
function getDettaglioPerQuantita(qta) {
|
||||||
const data = $("#prezzo_unitario").data("prezzi");
|
const data = globals.aggiunta_articolo.dettagli;
|
||||||
if (!data) return 0;
|
if (!data) return null;
|
||||||
|
|
||||||
let prezzo_predefinito = null;
|
let dettaglio_predefinito = null;
|
||||||
let prezzo_selezionato = null;
|
let dettaglio_selezionato = null;
|
||||||
for (const prezzo of data) {
|
for (const dettaglio of data) {
|
||||||
if (prezzo.minimo == null && prezzo.massimo == null) {
|
if (dettaglio.minimo == null && dettaglio.massimo == null) {
|
||||||
prezzo_predefinito = prezzo.prezzo_unitario;
|
dettaglio_predefinito = dettaglio;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qta >= prezzo.minimo && qta <= prezzo.massimo) {
|
if (qta >= dettaglio.minimo && qta <= dettaglio.massimo) {
|
||||||
prezzo_selezionato = prezzo.prezzo_unitario;
|
dettaglio_selezionato = dettaglio;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (prezzo_selezionato == null) {
|
if (dettaglio_selezionato == null) {
|
||||||
prezzo_selezionato = prezzo_predefinito;
|
dettaglio_selezionato = dettaglio_predefinito;
|
||||||
}
|
}
|
||||||
|
|
||||||
return parseFloat(prezzo_selezionato);
|
return dettaglio_selezionato;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce il prezzo registrato per una specifica quantità dell\'articolo.
|
||||||
|
*/
|
||||||
|
function getPrezzoPerQuantita(qta) {
|
||||||
|
const dettaglio = getDettaglioPerQuantita(qta);
|
||||||
|
|
||||||
|
return dettaglio ? parseFloat(dettaglio.prezzo_unitario) : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Restituisce lo sconto registrato per una specifica quantità dell\'articolo.
|
* Restituisce lo sconto registrato per una specifica quantità dell\'articolo.
|
||||||
*/
|
*/
|
||||||
function getScontoPerQuantita(qta) {
|
function getScontoPerQuantita(qta) {
|
||||||
const data = $("#sconto").data("sconti");
|
const dettaglio = getDettaglioPerQuantita(qta);
|
||||||
if (!data) return 0;
|
|
||||||
|
|
||||||
let sconto_predefinito = null;
|
return dettaglio ? parseFloat(dettaglio.sconto_percentuale) : 0;
|
||||||
let sconto_selezionato = null;
|
|
||||||
for (const prezzo of data) {
|
|
||||||
if (prezzo.minimo == null && prezzo.massimo == null) {
|
|
||||||
sconto_predefinito = prezzo.sconto;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (qta >= prezzo.minimo && qta <= prezzo.massimo) {
|
|
||||||
sconto_selezionato = prezzo.sconto;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sconto_selezionato == null) {
|
|
||||||
sconto_selezionato = sconto_predefinito;
|
|
||||||
}
|
|
||||||
|
|
||||||
return parseFloat(sconto_selezionato);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Funzione per registrare localmente i prezzi definiti per l\'articolo in relazione ad una specifica anagrafica.
|
|
||||||
*/
|
|
||||||
function ottieniPrezziArticolo(id_articolo) {
|
|
||||||
return $.get(globals.rootdir + "/ajax_complete.php?module=Articoli&op=prezzi_articolo&id_anagrafica='.$options['idanagrafica'].'&id_articolo=" + id_articolo + "&dir=" + direzione, function(response) {
|
|
||||||
const data = JSON.parse(response);
|
|
||||||
|
|
||||||
$("#prezzo_unitario").data("prezzi", data);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Funzione per registrare localmente gli sconti definiti per l\'articolo in relazione ad una specifica anagrafica.
|
* Funzione per registrare localmente i dettagli definiti per l\'articolo in relazione ad una specifica anagrafica.
|
||||||
*/
|
*/
|
||||||
|
function ottieniDettagliArticolo(id_articolo) {
|
||||||
function ottieniScontiArticolo(id_articolo) {
|
return $.get(globals.rootdir + "/ajax_complete.php?module=Articoli&op=dettagli_articolo&id_anagrafica='.$options['idanagrafica'].'&id_articolo=" + id_articolo + "&dir=" + direzione, function(response) {
|
||||||
return $.get(globals.rootdir + "/ajax_complete.php?module=Articoli&op=prezzi_articolo&id_anagrafica='.$options['idanagrafica'].'&id_articolo=" + id_articolo + "&dir=" + direzione, function(response) {
|
|
||||||
const data = JSON.parse(response);
|
const data = JSON.parse(response);
|
||||||
|
|
||||||
$("#sconto").data("sconti", data);
|
globals.aggiunta_articolo.dettagli = data;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -305,12 +274,12 @@ function verificaPrezzoArticolo() {
|
||||||
function verificaScontoArticolo() {
|
function verificaScontoArticolo() {
|
||||||
let qta = $("#qta").val().toEnglish();
|
let qta = $("#qta").val().toEnglish();
|
||||||
let sconto_previsto = getScontoPerQuantita(qta);
|
let sconto_previsto = getScontoPerQuantita(qta);
|
||||||
console.log(sconto_previsto);
|
|
||||||
let sconto_input = $("#sconto");
|
let sconto_input = $("#sconto");
|
||||||
let sconto = sconto_input.val().toEnglish();
|
let sconto = sconto_input.val().toEnglish();
|
||||||
|
|
||||||
let div = sconto_input.parent().next();
|
let div = sconto_input.parent().next();
|
||||||
if (sconto_previsto === sconto || $("#tipo_sconto").val() === "UNT") {
|
if (sconto_previsto === 0 || sconto_previsto === sconto || $("#tipo_sconto").val() === "UNT") {
|
||||||
div.css("padding-top", "0");
|
div.css("padding-top", "0");
|
||||||
div.html("");
|
div.html("");
|
||||||
|
|
||||||
|
@ -344,7 +313,7 @@ function aggiornaScontoArticolo() {
|
||||||
/**
|
/**
|
||||||
* Funzione per l\'aggiornamento dinamico della quantità minima per l\'articolo.
|
* Funzione per l\'aggiornamento dinamico della quantità minima per l\'articolo.
|
||||||
*/
|
*/
|
||||||
function aggiorna_qta_minima() {
|
function aggiornaQtaMinima() {
|
||||||
let qta_minima = parseFloat($("#qta_minima").val());
|
let qta_minima = parseFloat($("#qta_minima").val());
|
||||||
let qta = $("#qta").val().toEnglish();
|
let qta = $("#qta").val().toEnglish();
|
||||||
|
|
||||||
|
|
|
@ -116,7 +116,7 @@ switch ($resource) {
|
||||||
* - id_articolo
|
* - id_articolo
|
||||||
* - id_anagrafica
|
* - id_anagrafica
|
||||||
*/
|
*/
|
||||||
case 'prezzi_articolo':
|
case 'dettagli_articolo':
|
||||||
$id_articolo = get('id_articolo');
|
$id_articolo = get('id_articolo');
|
||||||
$id_anagrafica = get('id_anagrafica');
|
$id_anagrafica = get('id_anagrafica');
|
||||||
$direzione = get('dir') == 'uscita' ? 'uscita' : 'entrata';
|
$direzione = get('dir') == 'uscita' ? 'uscita' : 'entrata';
|
||||||
|
@ -127,7 +127,8 @@ switch ($resource) {
|
||||||
|
|
||||||
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
|
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
|
||||||
|
|
||||||
$query = 'SELECT minimo, massimo, sconto,
|
$query = 'SELECT minimo, massimo,
|
||||||
|
sconto_percentuale,
|
||||||
'.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario
|
'.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario
|
||||||
FROM mg_prezzi_articoli
|
FROM mg_prezzi_articoli
|
||||||
WHERE id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($direzione).' |where|
|
WHERE id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($direzione).' |where|
|
||||||
|
@ -155,6 +156,7 @@ switch ($resource) {
|
||||||
[
|
[
|
||||||
'minimo' => null,
|
'minimo' => null,
|
||||||
'massino' => null,
|
'massino' => null,
|
||||||
|
'sconto_percentuale' => 0,
|
||||||
'prezzo_unitario' => $direzione == 'uscita' ? $result['prezzo_acquisto'] : $result['prezzo_vendita'],
|
'prezzo_unitario' => $direzione == 'uscita' ? $result['prezzo_acquisto'] : $result['prezzo_vendita'],
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
|
@ -21,6 +21,9 @@ include_once __DIR__.'/../../core.php';
|
||||||
|
|
||||||
$id_anagrafica = filter('id_anagrafica');
|
$id_anagrafica = filter('id_anagrafica');
|
||||||
|
|
||||||
|
$help_codice_bic = tr("Il codice BIC (o SWIFT) è composto da 8 a 11 caratteri (lettere e numeri) ed è suddiviso in:").'<br><br><ul><li>'.tr('AAAA - codice bancario').'</li><li>'.tr('BB - codice ISO della nazione').'</li><li>'.tr('CC - codice città presso la quale è ubicata la banca').'</li><li>'.tr('DD - codice della filiale (opzionale)').'</li></ul>';
|
||||||
|
|
||||||
|
|
||||||
echo '
|
echo '
|
||||||
<form action="" method="post" id="add-form">
|
<form action="" method="post" id="add-form">
|
||||||
<input type="hidden" name="op" value="add">
|
<input type="hidden" name="op" value="add">
|
||||||
|
@ -41,7 +44,7 @@ echo '
|
||||||
{[ "type": "text", "label": "'.tr('IBAN').'", "name": "iban", "required": "1", "class": "alphanumeric-mask", "maxlength": 32, "value": "$iban$" ]}
|
{[ "type": "text", "label": "'.tr('IBAN').'", "name": "iban", "required": "1", "class": "alphanumeric-mask", "maxlength": 32, "value": "$iban$" ]}
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
{[ "type": "text", "label": "'.tr('BIC').'", "name": "bic", "required": "1", "class": "alphanumeric-mask", "maxlength": 11, "value": "$bic$" ]}
|
{[ "type": "text", "label": "'.tr('BIC').'", "name": "bic", "required": "1", "class": "alphanumeric-mask", "minlength": 8, "maxlength": 11, "value": "$bic$", "help": "'.$help_codice_bic.'" ]}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -171,6 +171,10 @@ if ($module['name'] == 'Ddt di vendita') {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-3">
|
<div class="col-md-3">
|
||||||
|
<?php
|
||||||
|
if (!empty($record['idvettore']))
|
||||||
|
echo Modules::link('Anagrafiche', $record['idvettore'], null, null, 'class="pull-right"');
|
||||||
|
?>
|
||||||
{[ "type": "select", "label": "<?php echo tr('Vettore'); ?>", "name": "idvettore", "ajax-source": "vettori", "value": "$idvettore$", "disabled": <?php echo intval($record['idspedizione'] == 3); ?>, "required": <?php echo (!empty($record['idspedizione'])) ? intval($record['idspedizione'] != 3) : 0; ?>, "icon-after": "add|<?php echo Modules::get('Anagrafiche')['id']; ?>|tipoanagrafica=Vettore&readonly_tipo=1|btn_idvettore|<?php echo (($record['idspedizione'] != 3 and intval(!$record['flag_completato']))) ? '' : 'disabled'; ?>" ]}
|
{[ "type": "select", "label": "<?php echo tr('Vettore'); ?>", "name": "idvettore", "ajax-source": "vettori", "value": "$idvettore$", "disabled": <?php echo intval($record['idspedizione'] == 3); ?>, "required": <?php echo (!empty($record['idspedizione'])) ? intval($record['idspedizione'] != 3) : 0; ?>, "icon-after": "add|<?php echo Modules::get('Anagrafiche')['id']; ?>|tipoanagrafica=Vettore&readonly_tipo=1|btn_idvettore|<?php echo (($record['idspedizione'] != 3 and intval(!$record['flag_completato']))) ? '' : 'disabled'; ?>" ]}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -75,7 +75,7 @@ switch (filter('op')) {
|
||||||
if (empty($dettaglio_predefinito)) {
|
if (empty($dettaglio_predefinito)) {
|
||||||
$dettaglio_predefinito = DettaglioPrezzo::build($articolo, $anagrafica, $direzione);
|
$dettaglio_predefinito = DettaglioPrezzo::build($articolo, $anagrafica, $direzione);
|
||||||
}
|
}
|
||||||
$dettaglio_predefinito->sconto = $sconto;
|
$dettaglio_predefinito->sconto_percentuale = $sconto;
|
||||||
$dettaglio_predefinito->setPrezzoUnitario($prezzo_unitario);
|
$dettaglio_predefinito->setPrezzoUnitario($prezzo_unitario);
|
||||||
$dettaglio_predefinito->save();
|
$dettaglio_predefinito->save();
|
||||||
|
|
||||||
|
@ -102,7 +102,7 @@ switch (filter('op')) {
|
||||||
|
|
||||||
$dettaglio->minimo = $minimi[$key];
|
$dettaglio->minimo = $minimi[$key];
|
||||||
$dettaglio->massimo = $massimi[$key];
|
$dettaglio->massimo = $massimi[$key];
|
||||||
$dettaglio->sconto = $sconti[$key];
|
$dettaglio->sconto_percentuale = $sconti[$key];
|
||||||
$dettaglio->setPrezzoUnitario($prezzo_unitario);
|
$dettaglio->setPrezzoUnitario($prezzo_unitario);
|
||||||
$dettaglio->save();
|
$dettaglio->save();
|
||||||
}
|
}
|
||||||
|
|
|
@ -123,7 +123,7 @@ if (!$clienti->isEmpty()) {
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
<td class="text-right">
|
<td class="text-right">
|
||||||
'.numberFormat($dettaglio->sconto).'%
|
'.numberFormat($dettaglio->sconto_percentuale).'%
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
<td>';
|
<td>';
|
||||||
|
@ -309,9 +309,11 @@ if (!$fornitori_disponibili->isEmpty()) {
|
||||||
<td class="text-right">
|
<td class="text-right">
|
||||||
'.moneyFormat($dettaglio->prezzo_unitario).'
|
'.moneyFormat($dettaglio->prezzo_unitario).'
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
<td class="text-right">
|
<td class="text-right">
|
||||||
'.numberFormat($dettaglio->sconto).'%
|
'.numberFormat($dettaglio->sconto_percentuale).'%
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
<td>';
|
<td>';
|
||||||
|
|
||||||
if (!isset($dettaglio->minimo) && !isset($dettaglio->massimo)) {
|
if (!isset($dettaglio->minimo) && !isset($dettaglio->massimo)) {
|
||||||
|
|
|
@ -76,7 +76,7 @@ switch (filter('op')) {
|
||||||
$type = filter('type');
|
$type = filter('type');
|
||||||
|
|
||||||
$cambia_stato = $type != 'download';
|
$cambia_stato = $type != 'download';
|
||||||
$fattura = Ricevuta::process($name, false);
|
$fattura = Ricevuta::process($name, $cambia_stato);
|
||||||
|
|
||||||
$numero_esterno = $fattura ? $fattura->numero_esterno : null;
|
$numero_esterno = $fattura ? $fattura->numero_esterno : null;
|
||||||
|
|
||||||
|
|
|
@ -128,14 +128,14 @@ function gestioneRicevuta(button, name, type) {
|
||||||
success: function(response) {
|
success: function(response) {
|
||||||
buttonRestore(button, restore);
|
buttonRestore(button, restore);
|
||||||
|
|
||||||
if(response.fattura) {
|
if (response.fattura) {
|
||||||
swal({
|
swal({
|
||||||
title: "'.tr('Importazione completata!').'",
|
title: type === "download" ? "'.tr('Ricevuta scaricata!').'" : "'.tr('Importazione della ricevuta completata!').'",
|
||||||
type: "success",
|
type: "success",
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
swal({
|
swal({
|
||||||
title: "'.tr('Importazione fallita!').'",
|
title: "'.tr('Operazione fallita!').'",
|
||||||
type: "error",
|
type: "error",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -531,6 +531,34 @@ class FatturaElettronica
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Campi obbligatori per l'anagrafica di tipo Vettore
|
||||||
|
$id_vettore = $fattura['idvettore'];
|
||||||
|
if (!empty($id_vettore)) {
|
||||||
|
$data = Anagrafica::find($id_vettore);
|
||||||
|
$fields = [
|
||||||
|
'piva' => 'Partita IVA',
|
||||||
|
'nazione' => 'Nazione',
|
||||||
|
];
|
||||||
|
|
||||||
|
$missing = [];
|
||||||
|
if (!empty($data)) {
|
||||||
|
foreach ($fields as $key => $name) {
|
||||||
|
if (empty($data[$key]) && !empty($name)) {
|
||||||
|
$missing[] = $name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($missing)) {
|
||||||
|
$link = Modules::link('Anagrafiche', $data['id']);
|
||||||
|
$errors[] = [
|
||||||
|
'link' => $link,
|
||||||
|
'name' => tr('Anagrafica Vettore'),
|
||||||
|
'errors' => $missing,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return $errors;
|
return $errors;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -926,7 +954,7 @@ class FatturaElettronica
|
||||||
|
|
||||||
$result = [];
|
$result = [];
|
||||||
|
|
||||||
//Se imposto il vettore deve essere indicata anche la p.iva nella sua anagrafica
|
// Se imposto il vettore deve essere indicata anche la p.iva nella sua anagrafica
|
||||||
if ($documento['idvettore']) {
|
if ($documento['idvettore']) {
|
||||||
$vettore = Anagrafica::find($documento['idvettore']);
|
$vettore = Anagrafica::find($documento['idvettore']);
|
||||||
$result['DatiAnagraficiVettore'] = static::getDatiAnagrafici($vettore);
|
$result['DatiAnagraficiVettore'] = static::getDatiAnagrafici($vettore);
|
||||||
|
|
|
@ -19,28 +19,44 @@
|
||||||
|
|
||||||
include_once __DIR__.'/../../core.php';
|
include_once __DIR__.'/../../core.php';
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use Modules\Fatture\Fattura;
|
||||||
use Plugins\ReceiptFE\Interaction;
|
use Plugins\ReceiptFE\Interaction;
|
||||||
|
|
||||||
echo '
|
echo '
|
||||||
<p>'.tr('Le ricevute delle Fatture Elettroniche permettono di individuare se una determinata fattura tramessa è stata accettata dal Sistema Di Interscambio').'.</p>';
|
<p>'.tr('Le ricevute delle Fatture Elettroniche permettono di individuare se una determinata fattura tramessa è stata accettata dal Sistema Di Interscambio').'.</p>';
|
||||||
|
|
||||||
if (Interaction::isEnabled()) {
|
if (Interaction::isEnabled()) {
|
||||||
echo '
|
echo '
|
||||||
<p>'.tr('Tramite il pulsante _BTN_ è possibile procedere al recupero delle ricevute, aggiornando automaticamente lo stato delle relative fatture e allegandole ad esse', [
|
<p>'.tr('Tramite il pulsante _BTN_ è possibile procedere al recupero delle ricevute, aggiornando automaticamente lo stato delle relative fatture e allegandole ad esse', [
|
||||||
'_BTN_' => '<i class="fa fa-refresh"></i> <b>'.tr('Ricerca ricevute').'</b>',
|
'_BTN_' => '<i class="fa fa-refresh"></i> <b>'.tr('Ricerca ricevute').'</b>',
|
||||||
]).'.</p>';
|
]).'.</p>';
|
||||||
|
|
||||||
//controllo se ci sono fatture in elaborazione da più di 7 giorni per le quali non ho ancora una ricevuta
|
// Controllo se ci sono fatture in elaborazione da più di 7 giorni per le quali non ho ancora una ricevuta
|
||||||
$fatture_generate = $dbo->fetchArray('SELECT `co_documenti`.`numero_esterno`, `co_documenti`.`data`, `co_documenti`.`data_stato_fe` FROM `co_documenti` JOIN `co_tipidocumento` ON `co_tipidocumento`.`id` = `co_documenti`.`idtipodocumento` WHERE `co_tipidocumento`.`dir` = \'entrata\' AND `co_documenti`.`codice_stato_fe` = \'WAIT\' AND `co_documenti`.`data_stato_fe` >= "'.$_SESSION['period_start'].'" AND `co_documenti`.`data_stato_fe`<(NOW() - INTERVAL 7 DAY) ORDER BY `co_documenti`.`data_stato_fe`');
|
$data_limite = (new Carbon())->subDays(7);
|
||||||
|
$fatture_generate = Fattura::vendite()
|
||||||
|
->where('codice_stato_fe', 'WAIT')
|
||||||
|
->where('data_stato_fe', '>=', $_SESSION['period_start'])
|
||||||
|
->where('data_stato_fe', '<', $data_limite)
|
||||||
|
->orderBy('data_stato_fe')
|
||||||
|
->get();
|
||||||
|
|
||||||
foreach ($fatture_generate as $fattura_generata) {
|
if (!empty($fatture_generate)){
|
||||||
echo '
|
echo '
|
||||||
<div class="alert alert-warning"><i class="fa fa-warning" ></i> '.tr('Attenzione: la fattura _NUM_ del _DATA_ è in attesa di una ricevuta dal _DATA_STATO_FE.', [
|
<div class="alert alert-warning">
|
||||||
'_NUM_' => $fattura_generata['numero_esterno'],
|
<p><i class="fa fa-warning"></i> '.tr('Attenzione: le seguenti fatture sono in attesa di una ricevuta').'.</p>
|
||||||
'_DATA_' => Translator::dateToLocale($fattura_generata['data']),
|
<ul>';
|
||||||
'_DATA_STATO_FE' => Translator::timestampToLocale($fattura_generata['data_stato_fe']),
|
|
||||||
]).'</div>';
|
foreach ($fatture_generate as $fattura_generata) {
|
||||||
|
echo '<li>'.reference($fattura_generata, $fattura_generata->getReference()).' ['.timestampFormat($fattura_generata['data_stato_fe']).']</li>';
|
||||||
|
}
|
||||||
|
|
||||||
|
echo '
|
||||||
|
</ul>
|
||||||
|
</div>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
echo '
|
echo '
|
||||||
<div class="box box-success">
|
<div class="box box-success">
|
||||||
<div class="box-header with-border">
|
<div class="box-header with-border">
|
||||||
|
|
|
@ -157,7 +157,7 @@ class Ricevuta
|
||||||
$module = $fattura->getModule();
|
$module = $fattura->getModule();
|
||||||
$upload_esistente = $module
|
$upload_esistente = $module
|
||||||
->uploads($fattura->id)
|
->uploads($fattura->id)
|
||||||
->where('original', $filename)
|
->where('original_name', $filename)
|
||||||
->first();
|
->first();
|
||||||
if (!empty($upload_esistente)) {
|
if (!empty($upload_esistente)) {
|
||||||
return $upload_esistente;
|
return $upload_esistente;
|
||||||
|
|
|
@ -329,7 +329,7 @@ UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `co_scadenziario`\r\n
|
||||||
DELETE FROM `zz_tokens` WHERE `zz_tokens`.`enabled` = 0;
|
DELETE FROM `zz_tokens` WHERE `zz_tokens`.`enabled` = 0;
|
||||||
|
|
||||||
-- Aggiunto colonna sconto per le coppie anagrafica articolo
|
-- Aggiunto colonna sconto per le coppie anagrafica articolo
|
||||||
ALTER TABLE `mg_prezzi_articoli` ADD `sconto` DECIMAL(15,6) NOT NULL AFTER `massimo`;
|
ALTER TABLE `mg_prezzi_articoli` ADD `sconto_percentuale` DECIMAL(15,6) NOT NULL AFTER `massimo`;
|
||||||
|
|
||||||
-- Aggiunta impostazione per mostrare o nascondere barra plugin
|
-- Aggiunta impostazione per mostrare o nascondere barra plugin
|
||||||
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `help`) VALUES (NULL, 'Nascondere la barra dei plugin di default', '0', 'boolean', '1', 'Generali', '2', NULL);
|
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `help`) VALUES (NULL, 'Nascondere la barra dei plugin di default', '0', 'boolean', '1', 'Generali', '2', NULL);
|
||||||
|
|
Loading…
Reference in New Issue