1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-02-16 11:30:55 +01:00
This commit is contained in:
MatteoPistorello 2021-07-02 10:17:43 +02:00
commit 983a62c535
7 changed files with 211 additions and 20 deletions

View File

@ -287,6 +287,33 @@ switch (post('op')) {
break;
// Elenco fatture Scadute per il cliente
case 'fatture_scadute':
$id_anagrafica = post('id_anagrafica');
$stato1 = Stato::where('descrizione', 'Emessa')->first();
$stato2 = Stato::where('descrizione', 'Prazialmente pagato')->first();
$fatture = Fattura::vendita()
->select('*', 'co_documenti.id AS id', 'co_documenti.data AS data')
->where('idanagrafica', $id_anagrafica)
->whereIn('idstatodocumento', [$stato1->id, $stato2->id])
->join('co_scadenziario', 'co_documenti.id', '=', 'co_scadenziario.iddocumento')
->where('co_scadenziario.da_pagare', '>', 'co_scadenziario.pagato')
->whereRaw('co_scadenziario.scadenza < NOW()')
->groupBy('co_scadenziario.iddocumento')
->get();
$results = [];
foreach ($fatture as $result) {
$results[] = Modules::link('Fatture di vendita', $result->id, reference($result));
}
echo json_encode($results);
break;
// eliminazione documento
case 'delete':
try {

View File

@ -77,17 +77,36 @@ $idtipodocumento = $dbo->selectOne('co_tipidocumento', ['id'], [
{[ "type": "select", "label": "<?php echo tr('Sezionale'); ?>", "name": "id_segment", "required": 1, "values": "query=SELECT id, name AS descrizione FROM zz_segments WHERE id_module='<?php echo $id_module; ?>' ORDER BY name", "value": "<?php echo $_SESSION['module_'.$id_module]['id_segment']; ?>" ]}
</div>
</div>
<div class="box hidden" id="info">
<div class="box-header with-border">
<h3 class="box-title"><?php echo tr('Fatture in stato Bozza del cliente'); ?></h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse">
<i class="fa fa-minus"></i>
</button>
<div id="info" class="hidden">
<div class="row">
<div class="col-md-6 ">
<div id="info-title-bozza" class="box">
<div class="box-header with-border">
<h3 class="box-title"><?php echo tr('Fatture in stato Bozza del cliente'); ?></h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse">
<i class="fa fa-minus"></i>
</button>
</div>
</div>
<div class="box-body" id="info-content-bozza"></div>
</div>
</div>
<div class="col-md-6">
<div id="info-title-scadute" class="box">
<div class="box-header with-border">
<h3 class="box-title"><?php echo tr('Fatture con termini di pagamento trascorsi'); ?></h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse">
<i class="fa fa-minus"></i>
</button>
</div>
</div>
<div class="box-body" id="info-content-scadute"></div>
</div>
</div>
</div>
<div class="box-body" id="info-content">
</div>
</div>
@ -109,10 +128,8 @@ $(document).ready(function () {
let data = $(this).selectData();
if (data !== undefined) {
if (!data.id){
$("#info").addClass("hidden");
return;
}
$("#info").removeClass("hidden");
$.ajax({
url: globals.rootdir + "/actions.php",
@ -124,23 +141,61 @@ $(document).ready(function () {
op: "fatture_bozza",
},
success: function (results) {
$("#info").removeClass("hidden");
$("#info").removeClass("box-info");
$("#info").removeClass("box-warning");
if (results.length === 0){
$("#info").addClass("box-info");
$("#info-content").html("<p>'.tr('Per il cliente selezionato non è presente alcuna fattura in stato di Bozza').'</p>")
$("#info-title-bozza").addClass("box-info");
$("#info-title-bozza").removeClass("box-warning");
$("#info-content-bozza").html("<p>'.tr('Per il cliente selezionato non è presente alcuna fattura in stato Bozza').'</p>")
} else {
let content = "";
results.forEach(function(item) {
content += "<li>" + item + "</li>";
});
$("#info").addClass("box-warning");
$("#info-content").html("<p>'.tr('Attenzione: per il cliente selezionato sono presenti le seguenti fatture in stato Bozza').':</p><ul>" + content + "</ul>")
$("#info-title-bozza").addClass("box-warning");
$("#info-title-bozza").removeClass("box-info");
$("#info-content-bozza").html("<p>'.tr('Attenzione: per il cliente selezionato sono presenti le seguenti fatture in stato Bozza').':</p><ul>" + content + "</ul>")
}
}
});
$.ajax({
url: globals.rootdir + "/actions.php",
type: "POST",
dataType: "json",
data: {
id_module: globals.id_module,
id_anagrafica: data.id,
op: "fatture_scadute",
},
success: function (results) {
$("#info").removeClass("box-info");
$("#info").removeClass("box-warning");
if (results.length === 0){
$("#info-title-scadute").addClass("box-info");
$("#info-title-scadute").removeClass("box-warning");
$("#info-content-scadute").html("<p>'.tr('Per il cliente selezionato non è presente alcuna fattura Scaduta').'</p>")
} else {
let content = "";
results.forEach(function(item) {
content += "<li>" + item + "</li>";
});
$("#info-title-scadute").addClass("box-warning");
$("#info-title-scadute").removeClass("box-info");
$("#info-content-scadute").html("<p>'.tr('Attenzione: per il cliente selezionato le seguenti fatture presentamento una o più rate scadute').':</p><ul>" + content + "</ul>")
}
}
});
}else{
$("#info").addClass("hidden");
return;
}
})
})

View File

@ -188,7 +188,7 @@ foreach ($righe as $riga) {
echo '
<td class="text-right">
'.moneyFormat($riga->iva_unitaria_scontata).'
<br><small class="'.(($riga->aliquota->deleted_at) ? 'text-red' : '').' text-muted">'.$riga->aliquota->descrizione.(($riga->aliquota->esente) ? ' ('.$riga->aliquota->codice_natura_fe.')' : null).'</small>
<br><small class="'.(($riga->aliquota->deleted_at) ? 'text-red' : '').' text-muted">'.$riga->aliquota->descrizione.' ('.$riga->aliquota->esigibilita.') '.(($riga->aliquota->esente) ? ' ('.$riga->aliquota->codice_natura_fe.')' : null).'</small>
</td>';
// Importo

View File

@ -315,6 +315,24 @@ echo '
</div>
</div>
<!-- DETTAGLI CLIENTE -->
<div class="box box-success collapsable collapsed-box">
<div class="box-header with-border">
<h3 class="box-title">'.tr('Dettagli cliente').'</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" id="dettagli_ciente">
Prima seleziona un cliente...
</div>
</div>
<!-- PULSANTI -->
<div class="row">
<div class="col-md-12 text-right">
@ -429,6 +447,15 @@ echo '
input("idtipointervento").getElement()
.selectSetNew(data.idtipointervento, data.idtipointervento_descrizione);
}
if (data !== undefined) {
//Carico nel panel i dettagli del cliente
$.get("'.$rootdir.'/modules/interventi/ajax_details.php?op=dettagli&id_anagrafica="+$(this).val(), function(data){
$("#dettagli_ciente").html(data);
});
}else{
$("#dettagli_ciente").html("Prima seleziona un cliente...");
}
});
// Gestione della modifica della sede selezionato

View File

@ -0,0 +1,78 @@
<?php
include_once __DIR__.'/../../core.php';
$id_anagrafica = get('id_anagrafica');
$op = get('op');
switch($op){
case "dettagli":
echo "
<div class='row'>";
//Contratti attivi
$rs_contratti = $dbo->fetchArray("SELECT co_contratti.id AS id, CONCAT('Contratto ', numero, ' del ', DATE_FORMAT(data_bozza, '%d/%m/%Y'), ' - ', co_contratti.nome, ' [', (SELECT `descrizione` FROM `co_staticontratti` WHERE `co_staticontratti`.`id` = `idstato`) , ']') AS descrizione FROM co_contratti INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica WHERE idstato IN (SELECT `id` FROM `co_staticontratti` WHERE is_pianificabile=1) AND co_contratti.idanagrafica=".prepare($id_anagrafica));
echo "
<div class='col-md-4'>
<b>CONTRATTI:</b><hr style='margin-top:5px;margin-bottom:15px;'>";
if(sizeof($rs_contratti)>0){
foreach($rs_contratti AS $contratto){
echo "
<div class='alert alert-info' style='margin-bottom: 10px;'>
".$contratto['descrizione']."
</div>";
}
}else{
echo "Nessun contratto per questo cliente...";
}
echo "
</div>";
//Fatture emesse o parzialnente pagate
$rs_documenti = $dbo->fetchArray("SELECT co_documenti.id AS id, CONCAT('Fattura ', numero_esterno, ' del ', DATE_FORMAT(data, '%d/%m/%Y')) AS descrizione FROM co_documenti WHERE idstatodocumento IN(SELECT id FROM co_statidocumento WHERE descrizione IN('Emessa', 'Parzialmente pagato')) AND idanagrafica=".prepare($id_anagrafica));
echo "
<div class='col-md-4'>
<b>Fatture:</b><hr style='margin-top:5px;margin-bottom:15px;'>";
if(sizeof($rs_documenti)>0){
foreach($rs_documenti AS $documento){
$rs_scadenze = $dbo->fetchArray("SELECT * FROM co_scadenziario WHERE iddocumento=".prepare($documento['id']));
echo "
<div class='alert alert-info' style='margin-bottom: 10px;'>
".$documento['descrizione']."<br>";
foreach($rs_scadenze AS $scadenza){
echo Translator::dateToLocale($scadenza['scadenza'])." - ".Translator::numberToLocale($scadenza['da_pagare'])." €<br>";
}
echo "
</div>";
}
}else{
echo "Nessuna fattura per questo cliente...";
}
echo "
</div>";
//Note dell'anagrafica
$rs_anagrafica = $dbo->fetchOne("SELECT note FROM an_anagrafiche WHERE idanagrafica=".prepare($id_anagrafica));
if($rs_anagrafica['note']!=''){
echo "
<div class='col-md-4'>
<b>NOTE CLIENTE:</b><hr style='margin-top:5px;margin-bottom:15px;'>
<div class='alert alert-info' style='margin-bottom: 10px;'>".$rs_anagrafica['note']."</div>
</div>";
}else{
echo "Nessuna nota per questo cliente...";
}
echo "
</div>";
break;
}
?>

View File

@ -1363,6 +1363,7 @@ class FatturaElettronica
$descrizione = str_replace('&gt;', ' ', $riga['descrizione']);
$descrizione = str_replace('…', '...', $descrizione);
$descrizione = str_replace('', ' ', $descrizione);
$descrizione = str_replace('ø', 'diametro', $descrizione);
// Aggiunta dei riferimenti ai documenti
if (setting('Riferimento dei documenti in Fattura Elettronica') && $riga->hasOriginalComponent()) {

View File

@ -61,3 +61,6 @@ UPDATE `co_righe_preventivi` SET `confermato` = 1;
-- Aggiunta impostazione per impegnare o meno automaticamente le quantità nei preventivi
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `help`) VALUES (NULL, 'Conferma automaticamente le quantità nei preventivi', '1', 'boolean', '1', 'Preventivi', NULL, NULL);
-- Aggiunta vista "Esigibilità" per il modulo "IVA"
INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `search_inside`, `order_by`, `visible`, `summable`, `default`) VALUES
(NULL, (SELECT `zz_modules`.`id` FROM `zz_modules` WHERE `zz_modules`.`name`='IVA'), 'Esigibilità', 'IF(esigibilita=\'I\', \'IVA ad esigibilità immediata\', IF(esigibilita=\'D\', \'IVA ad esigibilità differita\', \'Scissione dei pagamenti\'))', 5, 1, 0, 0, '', '', 1, 0, 0);