1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-02-20 21:40:48 +01:00

Modifiche a pianificazione contratti

This commit is contained in:
Beppe 2021-02-18 09:57:35 +01:00
parent 31ed2040e8
commit 8eccff451b
12 changed files with 437 additions and 113 deletions

View File

@ -76,10 +76,6 @@ switch (post('op')) {
$contratto->data_accettazione = post('data_accettazione');
$contratto->data_conclusione = post('data_conclusione');
$contratto->rinnovabile = post('rinnovabile');
$contratto->rinnovo_automatico = post('rinnovo_automatico');
$contratto->giorni_preavviso_rinnovo = post('giorni_preavviso_rinnovo');
$contratto->ore_preavviso_rinnovo = post('ore_preavviso_rinnovo');
$contratto->esclusioni = post('esclusioni');
$contratto->descrizione = post('descrizione');
$contratto->id_documento_fe = post('id_documento_fe');
@ -111,6 +107,17 @@ switch (post('op')) {
break;
case 'update_rinnovo':
$contratto->rinnovabile = post('rinnovabile');
$contratto->rinnovo_automatico = post('rinnovo_automatico');
$contratto->giorni_preavviso_rinnovo = post('giorni_preavviso_rinnovo');
$contratto->ore_preavviso_rinnovo = post('ore_preavviso_rinnovo');
$contratto->save();
flash()->info(tr('Contratto modificato correttamente!'));
break;
// Duplica contratto
case 'copy':
$new = $contratto->replicate();

View File

@ -108,37 +108,10 @@ $block_edit = $record['is_completato'];
{[ "type": "number", "label": "<?php echo tr('Validità contratto'); ?>", "name": "validita", "decimals": "0", "value": "$validita$", "icon-after": "choice|period|<?php echo $record['tipo_validita']; ?>", "help": "<?php echo tr('Il campo Validità contratto viene utilizzato per il calcolo della Data di conclusione del contratto'); ?>" ]}
</div>
<div class="col-md-3">
{[ "type": "checkbox", "label": "<?php echo tr('Rinnovabile'); ?>", "name": "rinnovabile", "help": "<?php echo tr('Il contratto è rinnovabile?'); ?>", "value": "$rinnovabile$" ]}
</div>
<div class="col-md-3">
{[ "type": "checkbox", "label": "<?php echo tr('Rinnovo automatico'); ?>", "name": "rinnovo_automatico", "help": "<?php echo tr('Il contratto è da rinnovare automaticamente alla scadenza'); ?>", "value": "$rinnovo_automatico$", "disabled": <?php echo $record['rinnovabile'] ? 0 : 1; ?> ]}
</div>
<div class="col-md-3">
{[ "type": "number", "label": "<?php echo tr('Preavviso per rinnovo'); ?>", "name": "giorni_preavviso_rinnovo", "decimals": "2", "value": "$giorni_preavviso_rinnovo$", "icon-after": "giorni", "disabled": <?php echo $record['rinnovabile'] ? 0 : 1; ?> ]}
</div>
</div>
<div class="row">
</div>
<div class="row">
<div class="col-md-3">
{[ "type": "number", "label": "<?php echo tr('Ore rimanenti rinnovo'); ?>", "name": "ore_preavviso_rinnovo", "decimals": "2", "value": "$ore_preavviso_rinnovo$", "icon-after": "ore", "disabled": <?php echo $record['rinnovabile'] ? 0 : 1; ?>, "help": "<?php echo tr('Ore residue nel contratto prima di visualizzare una avviso per un eventuale rinnovo anticipato.'); ?>" ]}
</div>
<div class="col-md-6">
<div class="col-md-9">
{[ "type": "select", "multiple": "1", "label": "<?php echo tr('Impianti'); ?>", "name": "matricolaimpianto[]", "values": "query=SELECT idanagrafica, id AS id, IF(nome = '', matricola, CONCAT(matricola, ' - ', nome)) AS descrizione FROM my_impianti WHERE idanagrafica='$idanagrafica$' ORDER BY descrizione", "value": "$idimpianti$", "icon-after": "add|<?php echo Modules::get('Impianti')['id']; ?>|||<?php echo (empty($block_edit)) ? '' : 'disabled'; ?>" ]}
</div>
</div>
<div class="row">

View File

@ -1,7 +1,7 @@
<?php
/*
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
* Copyright (C) DevCode s.r.l.
* Copyright (C) DevCode s.n.c.
*
* 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
@ -18,12 +18,15 @@
*/
use Modules\Contratti\Components\Riga;
use Modules\Contratti\Components\Articolo;
use Modules\Articoli\Articolo as ArticoloOriginale;
use Modules\Contratti\Contratto;
use Modules\Fatture\Fattura;
use Modules\Fatture\Tipo;
use Plugins\PianificazioneFatturazione\Pianificazione;
include_once __DIR__.'/../../core.php';
include_once __DIR__.'/../modutil.php';
$operazione = filter('op');
@ -32,49 +35,103 @@ switch ($operazione) {
case 'add':
$contratto = Contratto::find($id_record);
if(post('scadenza')=='Mensile'){
$timeing = '+1 month';
}
if(post('scadenza')=='Bimestrale'){
$timeing = '+2 month';
}
if(post('scadenza')=='Trimestrale'){
$timeing = '+3 month';
}
if(post('scadenza')=='Quadrimestrale'){
$timeing = '+4 month';
}
if(post('scadenza')=='Semestrale'){
$timeing = '+6 month';
}
if(post('scadenza')=='Annuale'){
$timeing = '+12 month';
}
$selezioni = collect(post('selezione_periodo'));
$periodi = post('periodo');
$numero_fatture = 0;
$date_pianificazioni = [];
$pianificazioni = [];
foreach ($selezioni as $key => $selezione) {
$data_scadenza = $periodi[$key];
if( $numero_fatture==0 && !empty(post('data_inizio')) ){
$date = new DateTime(post('data_inizio'));
}else{
$date = new DateTime($periodi[$key]);
if(post('cadenza_fatturazione')=='Inizio'){
$date->modify('first day of this month');
}elseif( post('cadenza_fatturazione')=='Giorno' && !empty(post('giorno_fisso')) ){
$date->modify('last day of this month');
$last_day = $date->format('d');
$day = post('giorno_fisso') > $last_day ? $last_day : post('giorno_fisso');
// Correzione data
$date->setDate($date->format('Y'), $date->format('m'), $day);
}
}
// Comversione della data in stringa standard
$data_scadenza = $date->format('Y-m-d');
++$numero_fatture;
// Creazione pianificazione
Pianificazione::build($contratto, $data_scadenza);
$pianificazione = Pianificazione::build($contratto, $data_scadenza);
$date_pianificazioni[] = $data_scadenza;
$pianificazioni[$numero_fatture] = $pianificazione->id;
}
if ($numero_fatture > 0) {
// Rimozione righe precedenti del contratto
$righe_contratto = $contratto->getRighe();
$iva_righe = collect($righe_contratto->toArray())->groupBy('idiva');
foreach ($righe_contratto as $riga) {
$riga->delete();
}
$subtotale = [];
// Creazione nuove righe
$descrizioni = post('descrizione');
$qta = post('qta');
foreach ($iva_righe as $id_iva => $righe) {
$iva = $righe->first()->aliquota;
$righe = $righe->toArray();
$totale = sum(array_column($righe, setting('Utilizza prezzi di vendita comprensivi di IVA') ? 'totale' : 'totale_imponibile'));
$qta_riga = $qta[$id_iva];
$descrizione_riga = $descrizioni[$id_iva];
$prezzo_unitario = $totale / $qta_riga / $numero_fatture;
foreach($righe_contratto as $r){
$qta_evasa = $r->qta_evasa;
$data_scadenza = '';
$inizio = $date_pianificazioni[0];
$fine = date("Y-m-d", strtotime($inizio.' -1 days'));
$fine = date("Y-m-d", strtotime($fine." ".$timeing));
for ($rata = 1; $rata <= $numero_fatture; ++$rata) {
$riga = Riga::build($contratto);
if( $qta_evasa<$r->qta ){
$qta_riga = ($qta[$r->id]<=($r->qta-$qta_evasa) ? $qta[$r->id] : ($r->qta-$qta_evasa) );
$descrizione = post('descrizione')[$r->id];
$riga->descrizione = $descrizione_riga;
$riga->setPrezzoUnitario($prezzo_unitario, $id_iva);
$riga->qta = $qta_riga;
$descrizione = variables($descrizione, $inizio, $fine)['descrizione'];
$riga->save();
$inizio = $fine;
$fine = date("Y-m-d", strtotime($timeing, strtotime($inizio)));
$inizio = date("Y-m-d", strtotime($inizio.' +1 days'));
$prezzo_unitario = ($r->subtotale / $r->qta);
if( !empty($r->idarticolo) ){
$articolo = ArticoloOriginale::find($r->idarticolo);
$riga = Articolo::build($contratto, $articolo);
}else{
$riga = Riga::build($contratto);
}
$riga->descrizione = $descrizione;
$riga->setPrezzoUnitario($prezzo_unitario, $r->idiva);
$riga->qta = $qta_riga;
$riga->idpianificazione = $pianificazioni[$rata];
$riga->save();
$qta_evasa += $qta_riga;
}
}
$r->delete();
}
}

View File

@ -1,7 +1,7 @@
<?php
/*
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
* Copyright (C) DevCode s.r.l.
* Copyright (C) DevCode s.n.c.
*
* 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
@ -20,9 +20,18 @@
use Modules\Contratti\Contratto;
include_once __DIR__.'/../../core.php';
include_once __DIR__.'/../modutil.php';
$contratto = Contratto::find($id_record);
$giorni_fatturazione = [];
for ($i = 1; $i <= 31; ++$i) {
$giorni_fatturazione[] = [
'id' => $i,
'text' => $i,
];
}
echo '
<form action="" method="post">
<input type="hidden" name="op" value="add">
@ -35,33 +44,34 @@ echo '
<ul class="nav nav-tabs nav-justified">
<li class="active"><a href="#periodi" data-tab="periodi" onclick="apriTab(this)" data-toggle="tab">'.tr('Periodi').'</a></li>
<li><a href="#div_righe" data-tab="div_righe" onclick="apriTab(this)" data-toggle="tab">'.tr('Righe').'</a></li>
<li><a href="#div_righe" data-tab="righe" data-toggle="tab">'.tr('Righe').'</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="periodi">
<div class="row">';
$data_corrente = $contratto->data_accettazione->startOfMonth();
$data_conclusione = $contratto->data_conclusione;
$count = 0;
while ($data_corrente->lessThanOrEqualTo($data_conclusione)) {
$data = $data_corrente->endOfMonth()->format('Y-m-d');
echo '
<br>
<div class="row">
<div class="col-md-3">
<label for="m_'.$count.'">
<input type="checkbox" class="unblockable" id="m_'.$count.'" name="selezione_periodo['.$count.']" />
'.ucfirst($data_corrente->formatLocalized('%B %Y')).'
</label>
<input type="hidden" name="periodo['.$count.']" value="'.$data.'">
</div>';
$data_corrente = $data_corrente->addDay();
++$count;
}
echo '
{[ "type": "select", "label": "'.tr('Ricorrenza fatturazione').'", "name": "scadenza", "values": "list=\"\":\"Seleziona un\'opzione\", \"Mensile\":\"Mensile\", \"Bimestrale\":\"Bimestrale\", \"Trimestrale\":\"Trimestrale\", \"Quadrimestrale\":\"Quadrimestrale\", \"Semestrale\":\"Semestrale\", \"Annuale\":\"Annuale\"", "value": "Mensile", "help":"'.tr('Specificare la cadenza con cui creare la pianificazione fatturazione').'" ]}
</div>
<div class="col-md-3">
{[ "type": "select", "label": "'.tr('Giorno di fatturazione').'", "name": "cadenza_fatturazione", "values": "list=\"\":\"Seleziona un\'opzione\", \"Inizio\":\"Inizio mese\", \"Fine\":\"Fine mese\", \"Giorno\":\"Giorno fisso\" ", "value": "Inizio", "help":"'.tr('Specificare per la pianificazione fatturazione se si desidera creare le fatture a inizio mese o alla fine. Se non specificata alcuna opzione saranno create di default a fine mese.').'" ]}
</div>
<div class="col-md-3" id="div_giorno_fisso" hidden>
{[ "type": "select", "label": "'.tr('Giorno fisso fatturazione').'", "name": "giorno_fisso", "values": '.json_encode($giorni_fatturazione).', "value": "1", "help":"'.tr('Selezionare il giorno fisso di fatturazione.').'" ]}
</div>
<div class="col-md-3">
{[ "type": "date", "label": "'.tr('Data inizio fatturazione').'", "name": "data_inizio", "value": "'.$contratto->data_accettazione.'", "help":"'.tr('Data da cui far partire la prima fattura del contratto.').'" ]}
</div>
</div>
<div class="row">
<div class="col-md-12">
<h4 id="total_check">Rate: 0</h4>
</div>
</div>
<br>
<div id="cadenza">
<script>$("#cadenza").load(</script>
</div>
<br>
@ -84,33 +94,59 @@ echo '
<div class="tab-pane" id="div_righe">';
$iva_righe = $contratto->getRighe()->groupBy('idiva');
/*
foreach ($iva_righe as $id_iva => $righe) {
$iva = $righe->first()->aliquota;
$descrizione = $righe->first()->descrizione;
$righe = $righe->toArray();
*/
$righe = $contratto->getRighe();
echo '
<div class="alert alert-info">
<p>'.tr("Puoi utilizzare le seguenti variabili nella descrizione delle righe").':</p>'.variables()['list'].'
</div>';
foreach ($righe as $riga) {
$id_iva = $riga->id_iva;
$descrizione = $riga->descrizione."\n{periodo}";
$options = [
'id' => $riga->id,
'totale_imponibile' => $riga->totale_imponibile,
'iva' => $riga->iva,
'totale' => $riga->totale,
'qta' => $riga->qta,
];
$options = json_encode($options);
echo '
<h5>'.tr('Informazioni generali sulle righe con IVA: _IVA_', [
'_IVA_' => $iva->descrizione,
]).'</h5>
<!--h5>'.tr('Informazioni generali sulle righe con IVA: _IVA_', [
'_IVA_' => $riga->iva->descrizione,
]).'</h5-->
<div class="row">
<div class="col-md-9">
{[ "type": "textarea", "label": "'.tr('Descrizione').'", "name": "descrizione['.$id_iva.']", "value": "'.tr('Canone contratto numero _NUM__IVA_', [
'_IVA_' => (count($iva_righe) > 1) ? ': '.$iva->descrizione : '',
'_NUM_' => $contratto->numero,
]).'" ]}
{[ "type": "textarea", "label": "'.tr('Descrizione').'", "name": "descrizione['.$riga->id.']", "value": "'.$descrizione.'" ]}
{[ "type": "number", "label": "'.tr('Q.tà per fattura').'", "name": "qta['.$id_iva.']", "required": 1, "value": "1", "decimals": "qta", "min-value": "1" ]}
{[ "type": "number", "label": "'.tr('Q.tà per fattura').'", "class":"qta_fattura", "name": "qta['.$riga->id.']", "required": 1, "value": "1", "decimals": "qta", "min-value": "1", "icon-after":"'.tr('Su _TOT_',[
'_TOT_' => Translator::numberToLocale( ($riga->qta-$riga->qta_evasa) ),
]).'", "options":"'.str_replace('"','\"',$options).'" ]}
</div>
<div class="col-md-3">
<p><b>'.tr('Imponibile').'</b>: '.moneyFormat(sum(array_column($righe, 'totale_imponibile'))).'</p>
<p><b>'.tr('IVA').'</b>: '.moneyFormat(sum(array_column($righe, 'iva'))).'</p>
<p><b>'.tr('Totale').'</b>: '.moneyFormat(sum(array_column($righe, 'totale'))).'</p>
<div class="col-md-3" id="totali_'.$riga->id.'">
</div>
</div>
<hr>';
}
echo '
<div class="row">
<div class="col-md-offset-9 col-md-3" id="div_totale">
</div>
</div>';
echo '
</div>
</div>
@ -127,15 +163,98 @@ echo '
<script>$(document).ready(init)</script>
<script>
function selezionaTutto(){
$("#periodi input").each(function (){
$("input:checkbox").prop("checked",true);
});
}
$(document).ready(function(){
caricaCadenza();
get_prezzi();
});
function deselezionaTutto(){
$("#periodi input").each(function (){
$("input:checkbox").prop("checked",false);
$("#scadenza").change(function(){
caricaCadenza();
});
}
$("#data_inizio").focusout(function(){
caricaCadenza();
});
function caricaCadenza() {
let container = $("#cadenza");
localLoading(container, true);
return $.get("'.$structure->fileurl('ajax_cadenza.php').'?id_module='.$id_module.'&id_record='.$id_record.'&scadenza="+$("#scadenza").val()+"&data_inizio="+$("#data_inizio").val(), function(data) {
container.html(data);
localLoading(container, false);
});
}
$("input:checkbox").click(function(){
var check = 0;
$("#periodi input").each(function (){
if( $(this).is(":checked") ){
check = check + 1;
}
});
$("#total_check").html("Rate: " + check).trigger("change");
});
function selezionaTutto(){
var check = 0;
$("#periodi input").each(function (){
$("input:checkbox").prop("checked",true);
if( $("input:checkbox").is(":checked") ){
check = check + 1;
}
});
$("#total_check").html("Rate: " + check).trigger("change");
}
function deselezionaTutto(){
var check = 0;
$("#periodi input").each(function (){
$("input:checkbox").prop("checked",false);
if( $("input:checkbox").is(":checked") ){
check = check + 1;
}
});
$("#total_check").html("Rate: " + check).trigger("change");
}
$(".qta_fattura").change(function(){
get_prezzi();
});
function get_prezzi(){
$(".qta_fattura").each(function(){
var qta = parseFloat($(this).val().replace(",",".")).toFixed(2);
var riga = JSON.parse($(this).attr("options"));
var imponibile_riga = (riga.totale_imponibile/riga.qta)*qta;
imponibile_riga = imponibile_riga.toLocaleString()+" &euro;";
var iva_riga = (riga.iva/riga.qta)*qta;
iva_riga = iva_riga.toLocaleString()+" &euro;";
var totale_riga = (riga.totale/riga.qta)*qta;
totale_riga = totale_riga.toLocaleString()+" &euro;";
$("#totali_"+riga.id).html("<p><b>Imponibile</b>: "+imponibile_riga+"</p>\
<p><b>IVA</b>: "+iva_riga+"</p>\
<p><b>Totale</b>: "+totale_riga+"</p>");
});
}
$("#cadenza_fatturazione").change(function(){
if( $(this).val()=="Giorno" ){
$("#div_giorno_fisso").show();
}else{
$("#giorno_fisso").selectReset();
$("#div_giorno_fisso").hide();
}
})
</script>';

View File

@ -0,0 +1,93 @@
<?php
/*
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
* Copyright (C) DevCode s.n.c.
*
* 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/>.
*/
use Carbon\Carbon;
use Modules\Contratti\Contratto;
include_once __DIR__.'/../../core.php';
$contratto = Contratto::find($id_record);
if(get('scadenza')=='Mensile'){
$timeing = '+1 month';
}
if(get('scadenza')=='Bimestrale'){
$timeing = '+2 month';
}
if(get('scadenza')=='Trimestrale'){
$timeing = '+3 month';
}
if(get('scadenza')=='Quadrimestrale'){
$timeing = '+4 month';
}
if(get('scadenza')=='Semestrale'){
$timeing = '+6 month';
}
if(get('scadenza')=='Annuale'){
$timeing = '+12 month';
}
$data_inizio = new Carbon(get('data_inizio'));
echo '
<div class="row" id="ajax_cadenza">';
$data_corrente = $data_inizio->startOfMonth();
$data_conclusione = $contratto->data_conclusione;
$count = 0;
while ($data_corrente->lessThanOrEqualTo($data_conclusione)) {
$data = $data_corrente->endOfMonth()->format('Y-m-d');
$data_fatturazione = ($data_fatturazione ?: date("Y-m", strtotime($data)) );
unset($checked);
if( $id_module==Modules::get('Contratti')['id'] ){
if( $data==date("Y-m-t", strtotime($timeing, strtotime($data_fatturazione)) ) ){
$checked = 'checked';
$data_fatturazione = date("Y-m", strtotime($data));
}
}
echo '
<div class="col-md-3">
<label for="m_'.$count.'">
<input type="checkbox" class="unblockable" id="m_'.$count.'" name="selezione_periodo['.$count.']" '.$checked.' />
'.ucfirst($data_corrente->formatLocalized('%B %Y')).'
</label>
<input type="hidden" name="periodo['.$count.']" value="'.$data.'">
</div>';
$data_corrente = $data_corrente->addDay();
++$count;
}
echo '
</div>
<script>
$(document).ready(function(){
var check = 0;
$("#periodi input").each(function (){
if( $(this).is(":checked") ){
check = check + 1;
}
});
$("#total_check").html("Rate: " + check).trigger("change");
});
</script>';

View File

@ -1,7 +1,7 @@
<?php
/*
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
* Copyright (C) DevCode s.r.l.
* Copyright (C) DevCode s.n.c.
*
* 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
@ -33,6 +33,7 @@ $numero_rata = $contratto->pianificazioni->search(function ($item) use ($id_pian
$module_fattura = Modules::get('Fatture di vendita');
$id_conto = setting('Conto predefinito fatture di vendita');
$data = date("Y-m",strtotime($pianificazione->data_scadenza))."-".date("d",strtotime($contratto->data_accettazione));
echo '
<form action="" method="post">
@ -47,7 +48,7 @@ echo '
echo '
<div class="row">
<div class="col-md-6">
{[ "type": "date", "label": "'.tr('Data').'", "name": "data", "required": 1, "class": "text-center", "value": "-now-" ]}
{[ "type": "date", "label": "'.tr('Data').'", "name": "data", "required": 1, "class": "text-center", "value": "'.$pianificazione->data_scadenza.'" ]}
</div>';
// Tipo di documento

View File

@ -1,7 +1,7 @@
<?php
/*
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
* Copyright (C) DevCode s.r.l.
* Copyright (C) DevCode s.n.c.
*
* 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

View File

@ -0,0 +1,37 @@
<?php
include_once __DIR__.'/../../core.php';
function variables($descrizione='', $inizio=null, $fine=null)
{
$mese = [
'01' => 'Gennaio',
'02' => 'Febbraio',
'03' => 'Marzo',
'04' => 'Aprile',
'05' => 'Maggio',
'06' => 'Giugno',
'07' => 'Luglio',
'08' => 'Agosto',
'09' => 'Settembre',
'11' => 'Ottobre',
'11' => 'Novembre',
'12' => 'Dicembre',
];
$result['list'] = "<ul>
<li><code>{periodo}</code></li>
<li><code>{data_inizio}</code></li>
<li><code>{data_fine}</code></li>
<li><code>{mese_fatturazione}</code></li>
</ul>";
if( !empty($descrizione) ){
$result['descrizione'] = str_replace("{periodo}","durata dal ".Translator::dateToLocale($inizio)." al ".Translator::dateToLocale($fine),$descrizione);
$result['descrizione'] = str_replace("{data_inizio}",Translator::dateToLocale($inizio), $result['descrizione']);
$result['descrizione'] = str_replace("{data_fine}",Translator::dateToLocale($fine), $result['descrizione']);
$result['descrizione'] = str_replace("{mese_fatturazione}", $mese[date('m',strtotime($inizio))], $result['descrizione']);
}
return $result;
}

View File

@ -1,7 +1,7 @@
<?php
/*
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
* Copyright (C) DevCode s.r.l.
* Copyright (C) DevCode s.n.c.
*
* 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

View File

@ -1,7 +1,7 @@
<?php
/*
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
* Copyright (C) DevCode s.r.l.
* Copyright (C) DevCode s.n.c.
*
* 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
@ -22,10 +22,7 @@ use Plugins\PianificazioneFatturazione\Pianificazione;
include_once __DIR__.'/../../../core.php';
$pianificazioni = Pianificazione::doesntHave('fattura')
->leftjoin('co_contratti', 'co_contratti.id', '=', 'co_fatturazione_contratti.idcontratto')
->leftjoin('an_anagrafiche', 'an_anagrafiche.idanagrafica', '=', 'co_contratti.idanagrafica')
->orderBy('data_scadenza', 'asc')
->orderBy('ragione_sociale', 'asc')
->whereHas('contratto', function($q){
$q->whereHas('stato', function($q){
$q->where('is_fatturabile', 1);

View File

@ -18,13 +18,48 @@
*/
include_once __DIR__.'/../../core.php';
include_once __DIR__.'/../init.php';
$id_contratto_precedente = $record['idcontratto_prev'];
if (empty($id_contratto_precedente)) {
echo '
<script>$("#link-tab_'.$plugin['id'].'").addClass("disabled");</script>';
}
echo '
<form action="" method="post" id="rinnovo-form">
<input type="hidden" name="backto" value="record-edit">
<input type="hidden" name="op" value="update_rinnovo">
<input type="hidden" name="id_record" value="'.$id_record.'">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">'.tr('Informazioni per rinnovo').'</h3>
</div>
<div class="panel-body">
<div class="row">
<div class="col-md-3">
{[ "type": "checkbox", "label": "'.tr('Rinnovabile').'", "name": "rinnovabile", "help": "'.tr('Il contratto è rinnovabile?').'", "value": "$rinnovabile$" ]}
</div>
<div class="col-md-3">
{[ "type": "checkbox", "label": "'.tr('Rinnovo automatico').'", "name": "rinnovo_automatico", "help": "'.tr('Il contratto è da rinnovare automaticamente alla scadenza').'", "value": "$rinnovo_automatico$", "disabled": '.($record['rinnovabile'] ? 0 : 1).' ]}
</div>
<div class="col-md-3">
{[ "type": "number", "label": "'.tr('Preavviso per rinnovo').'", "name": "giorni_preavviso_rinnovo", "decimals": "2", "value": "$giorni_preavviso_rinnovo$", "icon-after": "giorni", "disabled": '.($record['rinnovabile'] ? 0 : 1).' ]}
</div>
<div class="col-md-3">
{[ "type": "number", "label": "'.tr('Ore rimanenti rinnovo').'", "name": "ore_preavviso_rinnovo", "decimals": "2", "value": "$ore_preavviso_rinnovo$", "icon-after": "ore", "disabled": '.($record['rinnovabile'] ? 0 : 1).', "help": "'.tr('Ore residue nel contratto prima di visualizzare una avviso per un eventuale rinnovo anticipato.').'" ]}
</div>
</div>
<div class="col-md-12 text-right">
<button type="submit" class="btn btn-success"><i class="fa fa-check"></i> '.tr('Salva').'</button>
</div>
</div>
</div>
</form>';
echo '
<table class="table table-hover table-condensed table-bordered table-striped">

View File

@ -136,3 +136,8 @@ UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `co_documenti`\r\n LEF
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`='Fatture di acquisto'), '_bg_', 'IF(`d`.`conteggio`>1, \'red\', \'\')', '1', '0', '0', '0', '', '', '0', '0', '0');
INSERT INTO `zz_group_view` (`id_gruppo`, `id_vista`) (SELECT `zz_groups`.`id`, `zz_views`.`id` FROM `zz_groups`, `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` WHERE `zz_modules`.`name` = 'Fatture di acquisto' AND `zz_views`.`name` = '_bg_');
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`) VALUES (NULL, 'Descrizione fattura pianificata', 'Canone {rata} del contratto numero {numero}', 'text', '1', 'Fatturazione');
ALTER TABLE `co_righe_contratti` ADD `idpianificazione` INT NULL DEFAULT NULL AFTER `idarticolo`;