1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-02-11 00:50:37 +01:00
This commit is contained in:
Beppe 2021-10-28 11:31:07 +02:00
commit 5dd7692c5d
36 changed files with 394 additions and 121 deletions

View File

@ -4,6 +4,7 @@ Tutti i maggiori cambiamenti di questo progetto saranno documentati in questo fi
Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://keepachangelog.com/), e il progetto segue il [Semantic Versioning](http://semver.org/) per definire le versioni delle release.
- [2.4.27 (2021-10-25)](#2427-2021-10-26)
- [2.4.26 (2021-09-24)](#2426-2021-09-24)
- [2.4.25 (2021-08-25)](#2425-2021-08-25)
- [2.4.24 (2021-07-28)](#2424-2021-07-28)
@ -37,6 +38,40 @@ Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://k
- [2.2 (2016-11-10)](#22-2016-11-10)
- [2.1 (2015-04-02)](#21-2015-04-02)
## 2.4.27 (2021-10-26)
### Aggiunto (Added)
- Aggiunta selezione automatica **banca** in fase di importazione fattura elettronica
- Aggiunta selezione automatica del **conto di acquisto** articolo in fase di importazione fattura elettronica
- Aggiunto select **conto acquisto/vendita** in fase di creazione articolo
- Aggiunto select per aggiornare i prezzi di acquisto dell'articolo in fase di importazione fattura elettronica
- Aggiunto filtro per mostrare gli impianti ai tecnici assegnati
- Aggiunto ordinamento righe in interventi
- Aggiunta azione di gruppo per **rincaro prezzi di vendita** articoli con possibilità di scelta del prezzo di partenza
- Aggiunta azione di gruppo per cambiare la **categoria** degli articoli
- Aggiunta azione di gruppo per aggiornare l'aliquota iva degli articoli
- Aggiunto **Mese prossimo** nel calendario
- Aggiunta variabile ragione sociale per l'invio mail da ddt
- Aggiunta immagine in import CSV articoli
- Aggiunta selezione prezzo di acquisto per stampa inventario
- Aggiunto costo medio in fase di aggiunta riga articolo
- Aggiunta azione di gruppo per aggiornare il prezzo di acquisto per gli articoli a cui non è impostato, in base all'ultima fattura di acquisto
### Modificato (Changed)
- Ampliata **ricerca articoli** in importazione fatturazione elettronica per collegamento automatico
- Ridotto il valid time per la cache
- Ordinamento **gestione documentale** per data decrescente
- Spostamento stampe situazione contabile e bilancio in **Stampe contabili**
### Fixed
- Fix sconti in **fatturazione interventi**
- Fix statistiche **fatture**
- Fix aggiunta intervento da dashboard vista mese
- Fix selezione iva in aggiunta riga articolo
- Fix cambio stato intervento in fase di eliminazione riga da fattura
- Fix selezione iva in **crea fattura** da contratto
- Fix filigrana stampe
- Fix arrotondamento automatico
- Fix azzeramento revisione in duplicazione **preventivo**
## 2.4.26 (2021-09-24)
### Aggiunto (Added)

View File

@ -1096,3 +1096,12 @@ div.tip {
-ms-user-select: none;
user-select: none;
}
.table-extra-condensed > thead > tr > th,
.table-extra-condensed > tbody > tr > th,
.table-extra-condensed > tfoot > tr > th,
.table-extra-condensed > thead > tr > td,
.table-extra-condensed > tbody > tr > td,
.table-extra-condensed > tfoot > tr > td {
padding: 2px;
}

View File

@ -277,7 +277,7 @@ function srcFonts() {
function ckeditor() {
return gulp.src([
config.nodeDirectory + '/ckeditor4/{adapters,lang,skins,plugins,core}/**/*.{js,json,css,png}',
config.nodeDirectory + '/ckeditor4/{adapters,lang,skins,plugins,core}/**/*.{js,json,css,png,gif,html}',
config.nodeDirectory + '/ckeditor4/*.{js,css}',
])
.pipe(gulp.dest(config.production + '/' + config.paths.js + '/ckeditor'));

View File

@ -53,8 +53,7 @@ if (empty($result['idarticolo'])) {
$qta_minima = $articolo['qta_minima'];
echo '
<p><strong>'.tr('Articolo').':</strong> '.$articolo['codice'].' - '.$articolo['descrizione'].'.</p>
<input type="hidden" name="idarticolo" id="idarticolo" value="'.$articolo['id'].'">
{[ "type": "select", "disabled":"1", "label": "'.tr('Articolo').'", "name": "idarticolo", "required": 1, "value": "'.$result['idarticolo'].'", "ajax-source": "articoli", "select-options": '.json_encode($options['select-options']['articoli']).', "icon-after": "add|'.Modules::get('Articoli')['id'].'" ]}
<script>
$(document).ready(function (){
@ -267,7 +266,7 @@ function verificaPrezzoArticolo() {
let div = prezzo_unitario_input.closest("div").parent().find("div[id*=errors]");
if (prezzo_previsto === prezzo_unitario) {
if (prezzo_previsto === prezzo_unitario || prezzo_previsto === 0 ) {
div.css("padding-top", "0");
div.html("");
@ -275,7 +274,7 @@ function verificaPrezzoArticolo() {
}
div.css("padding-top", "5px");
div.html(`<small class="label label-warning" >'.tr('Prezzo suggerito').': ` + prezzo_previsto.toLocale() + globals.currency + `<button type="button" class="btn btn-xs btn-info pull-right" onclick="aggiornaPrezzoArticolo()"><i class="fa fa-refresh"></i> '.tr('Aggiorna').'</button></small>`);
div.html(`<small class="label label-info" >'.tr('Prezzo suggerito').': ` + prezzo_previsto.toLocale() + " " + globals.currency + `<button type="button" class="btn btn-xs btn-info pull-right" onclick="aggiornaPrezzoArticolo()"><i class="fa fa-refresh"></i> '.tr('Aggiorna').'</button></small>`);
}
/**
@ -297,7 +296,7 @@ function verificaScontoArticolo() {
}
div.css("padding-top", "5px");
div.html(`<small class="label label-warning" >'.tr('Sconto suggerito').': ` + sconto_previsto.toLocale() + `%<button type="button" class="btn btn-xs btn-info pull-right" onclick="aggiornaScontoArticolo()"><i class="fa fa-refresh"></i> '.tr('Aggiorna').'</button></small>`);
div.html(`<small class="label label-info" >'.tr('Sconto suggerito').': ` + sconto_previsto.toLocale() + `%<button type="button" class="btn btn-xs btn-info pull-right" onclick="aggiornaScontoArticolo()"><i class="fa fa-refresh"></i> '.tr('Aggiorna').'</button></small>`);
}
/**
@ -353,7 +352,5 @@ function aggiornaQtaMinima() {
div.removeClass("text-danger").addClass("text-success");
}
}
if (direzione === "entrata") {
aggiorna_guadagno();
}
</script>';

View File

@ -268,7 +268,7 @@ function verificaPrezzoArticolo(tr) {
let div = prezzo_unitario_input.closest("div").parent().find("div[id*=errors]");
if (prezzo_previsto === prezzo_unitario) {
if (prezzo_previsto === prezzo_unitario || prezzo_previsto === 0) {
div.css("padding-top", "0");
div.html("");
@ -276,7 +276,7 @@ function verificaPrezzoArticolo(tr) {
}
div.css("padding-top", "5px");
div.html(`<small class="label label-warning" >'.tr('Prezzo suggerito').': ` + prezzo_previsto.toLocale() + globals.currency + `<button type="button" class="btn btn-xs btn-info pull-right" onclick="aggiornaPrezzoArticolo(this)"><i class="fa fa-refresh"></i> '.tr('Aggiorna').'</button></small>`);
div.html(`<small class="label label-info" >'.tr('Prezzo suggerito').': ` + prezzo_previsto.toLocale() + " " + globals.currency + `<button type="button" class="btn btn-xs btn-info pull-right" onclick="aggiornaPrezzoArticolo(this)"><i class="fa fa-refresh"></i> '.tr('Aggiorna').'</button></small>`);
}
/**
@ -314,7 +314,7 @@ function verificaScontoArticolo(tr) {
}
div.css("padding-top", "5px");
div.html(`<small class="label label-warning" >'.tr('Sconto suggerito').': ` + sconto_previsto.toLocale() + `%<button type="button" class="btn btn-xs btn-info pull-right" onclick="aggiornaScontoArticolo(this)"><i class="fa fa-refresh"></i> '.tr('Aggiorna').'</button></small>`);
div.html(`<small class="label label-info" >'.tr('Sconto suggerito').': ` + sconto_previsto.toLocale() + `%<button type="button" class="btn btn-xs btn-info pull-right" onclick="aggiornaScontoArticolo(this)"><i class="fa fa-refresh"></i> '.tr('Aggiorna').'</button></small>`);
}
/**

View File

@ -71,10 +71,50 @@ if ($options['dir'] == 'entrata') {
var margine = (((prezzo - sconto) * 100) / costo_unitario) - 100;
var parent = $("#costo_unitario").closest("div").parent();
var div = parent.find("div[id*=\"errors\"]");
var mediaponderata = 0;
margine = isNaN(margine) || !isFinite(margine) ? 0: margine; // Fix per magine NaN
div.html("<small>&nbsp;'.tr('Guadagno').': " + guadagno.toLocale() + " " + globals.currency + " &nbsp; '.tr('Margine').': " + margine.toLocale() + " %</small>");
if ($("#idarticolo").val()) {
mediaponderata = parseFloat($("#idarticolo").selectData().media_ponderata);
}
div.html("<table class=\"table table-extra-condensed\" style=\"margin-top:7px;\" >\
<tr>\
<td>\
<small>&nbsp;'.tr('Guadagno').':</small>\
</td>\
<td align=\"right\">\
<small>" + guadagno.toLocale() + "</small>\
</td>\
<td align=\"center\">\
<small>" + globals.currency + "</small>\
</td>\
</tr>\
<tr>\
<td>\
<small>&nbsp;'.tr('Margine').':</small>\
</td>\
<td align=\"right\">\
<small>" + margine.toLocale() + "<small>\
</td>\
<td align=\"center\">\
<small>&nbsp;%<small>\
</td>\
</tr>\
<tr>\
<td>\
<small>&nbsp;'.tr('Costo medio').':</small>\
</td>\
<td align=\"right\">\
<small>" + (mediaponderata!=0 ? mediaponderata.toLocale() : "- ") + "</small>\
</td>\
<td align=\"center\">\
<small>" + globals.currency + "</small>\
</td>\
</tr>\
</table>");
if (guadagno < 0) {
parent.addClass("has-error");
div.addClass("label-danger").removeClass("label-success");
@ -123,7 +163,7 @@ if (in_array($module['name'], ['Ordini cliente', 'Ordini fornitore', 'Preventivi
$confermato = $result['confermato'];
}
echo '
<div class="box box-warning collapsable collapsed-box">
<div class="box box-info collapsable collapsed-box">
<div class="box-header with-border">
<h3 class="box-title">'.tr('Informazioni aggiuntive').'</h3>
<div class="box-tools pull-right">

View File

@ -213,21 +213,22 @@ if (Auth::check()) {
["Undo","Redo","-","Cut","Copy","Paste","PasteText","PasteFromWord","-","SpellChecker", "Scayt", "-","Link","Unlink","-","Bold","Italic","Underline","Superscript","SpecialChar","HorizontalRule","-","JustifyLeft","JustifyCenter","JustifyRight","JustifyBlock","-","NumberedList","BulletedList","Outdent","Indent","Blockquote","-","Styles","Format","Image","Table", "TextColor", "BGColor" ],
],
ckeditorToolbar_Full: [
{ name: "document", items : [ "Source" ] },
{ name: "document", items : [ "Source", "ExportPdf", "Preview", "Print", "-", "Templates" ] },
{ name: "clipboard", items : [ "Cut","Copy","Paste","PasteText","PasteFromWord","-","Undo","Redo" ] },
{ name: "editing", items : [ "Find","Replace","-","SelectAll","-","SpellChecker", "Scayt" ] },
{ name: "forms", items : [ "Form", "Checkbox", "Radio", "TextField", "Textarea", "Select", "Button", "ImageButton",
"HiddenField" ] },
"/",
{ name: "basicstyles", items : [ "Bold","Italic","Underline","Strike","Subscript","Superscript","-","RemoveFormat" ] },
{ name: "basicstyles", items : [ "Bold","Italic","Underline","Strike","Subscript","Superscript","-","CopyFormatting","RemoveFormat" ] },
{ name: "paragraph", items : [ "NumberedList","BulletedList","-","Outdent","Indent","-","Blockquote","CreateDiv",
"-","JustifyLeft","JustifyCenter","JustifyRight","JustifyBlock","-","BidiLtr","BidiRtl" ] },
"-","JustifyLeft","JustifyCenter","JustifyRight","JustifyBlock","-","BidiLtr","BidiRtl","Language" ] },
{ name: "links", items : [ "Link","Unlink","Anchor" ] },
{ name: "insert", items : [ "Image","Flash","Table","HorizontalRule","Smiley","SpecialChar","PageBreak","Iframe" ] },
"/",
{ name: "styles", items : [ "Styles","Format","Font","FontSize" ] },
{ name: "colors", items : [ "TextColor","BGColor" ] },
{ name: "tools", items : [ "Maximize", "ShowBlocks","-","About" ] }
{ name: "tools", items : [ "Maximize", "ShowBlocks" ] },
{ name: "about", items: [ "About" ] }
],
order_manager_id: "'.($dbo->isInstalled() ? Modules::get('Stato dei servizi')['id'] : '').'",
dataload_page_buffer: '.setting('Lunghezza in pagine del buffer Datatables').',

View File

@ -54,7 +54,7 @@ if (function_exists('customComponents')) {
echo '
</table>
<p><strong>'.tr("Si sconsiglia l'aggiornamento senza il supporto dell'assistenza ufficiale").'.</strong></p>';
<div class="alert alert-warning" role="alert"> <i class="fa fa-exclamation-triangle"></i> '.tr("Attenzione, il gestionale presenta delle personalizzazioni: si sconsiglia l'aggiornamento senza il supporto dell'assistenza ufficiale").'.</div>';
} else {
echo '
<p>'.tr('Non ci sono strutture personalizzate').'.</p>';
@ -115,7 +115,7 @@ if (setting('Attiva aggiornamenti')) {
if (!empty($alerts)) {
echo '
<div class="alert alert-warning">
<div class="alert alert-info">
<p>'.tr('Devi modificare il seguenti parametri del file di configurazione PHP (_FILE_) per poter caricare gli aggiornamenti', [
'_FILE_' => '<b>php.ini</b>',
]).':<ul>';
@ -198,7 +198,25 @@ function search(button) {
{[ "type": "file", "name": "blob", "required": 1, "accept": ".zip" ]}
<button type="button" class="btn btn-primary pull-right" onclick="update()">
';
if (!empty($custom) || !empty($tables)) {
$disabled = 'disabled';
echo ' <input type="checkbox" id="aggiorna_custom" class="pull-left" style="margin-top:10px;" value="1" >&nbsp;
<label for="aggiorna_custom" style="margin-top:7px;" >'.tr("Desidero comunque procedere all'aggiornamento").'.</label>
<script>
$("#aggiorna_custom").change(function() {
if(this.checked) {
$("#aggiorna").removeClass("disabled");
}else{
$("#aggiorna").addClass("disabled");
}
});
</script>';
}
echo '
<button type="button" class="btn btn-primary pull-right '.$disabled.'" id="aggiorna" onclick="update()">
<i class="fa fa-upload"></i> '.tr('Carica').'
</button>
</form>

View File

@ -80,7 +80,7 @@ class DatiFattureElettroniche extends Controllo
}
// Se riscontro un'anomalia
if ($fattura_vendita->anagrafica->piva != $dati_anagrafici['IdFiscaleIVA']['IdCodice'] || $fattura_vendita->anagrafica->codice_fiscale != $dati_anagrafici['CodiceFiscale'] || $fattura_vendita->totale != $totale_documento_xml) {
if ($fattura_vendita->anagrafica->piva != $dati_anagrafici['IdFiscaleIVA']['IdCodice'] || $fattura_vendita->anagrafica->codice_fiscale != $dati_anagrafici['CodiceFiscale'] || numberFormat($fattura_vendita->totale) != numberFormat($totale_documento_xml)) {
$anomalia = [
'fattura_vendita' => $fattura_vendita,
'codice_fiscale_xml' => !empty($dati_anagrafici['CodiceFiscale']) ? $dati_anagrafici['CodiceFiscale'] : null,

View File

@ -35,7 +35,7 @@ switch ($resource) {
SELECT idddt AS id, "Ddt" AS tipo, "Ddt di vendita" AS modulo, (subtotale-sconto)/qta AS costo_unitario, (SELECT numero FROM dt_ddt WHERE id=idddt) AS n_documento, (SELECT numero_esterno FROM dt_ddt WHERE id=idddt) AS n2_documento, (SELECT data FROM dt_ddt WHERE id=idddt) AS data_documento FROM dt_righe_ddt WHERE idarticolo='.$idarticolo.' AND idddt IN(SELECT id FROM dt_ddt WHERE idtipoddt IN(SELECT id FROM dt_tipiddt WHERE dir="entrata") AND idanagrafica='.prepare($idanagrafica).') LIMIT 0,5');
if (sizeof($documenti) > 0) {
echo "<br/><table cellspacing='0' class='table-striped table-bordered' >\n";
echo "<br/><table class='table table-striped table-bordered table-extra-condensed' >\n";
echo "<tr><th width='180'>Documento</th>\n";
echo "<th width='100' class='text-right' >Totale</th></tr>\n";
@ -64,7 +64,7 @@ switch ($resource) {
SELECT idddt AS id, "Ddt" AS tipo, "Ddt di vendita" AS modulo, (subtotale-sconto)/qta AS costo_unitario, (SELECT numero FROM dt_ddt WHERE id=idddt) AS n_documento, (SELECT numero_esterno FROM dt_ddt WHERE id=idddt) AS n2_documento, (SELECT data FROM dt_ddt WHERE id=idddt) AS data_documento FROM dt_righe_ddt WHERE idarticolo='.prepare($idarticolo).' AND idddt IN(SELECT id FROM dt_ddt WHERE idtipoddt IN(SELECT id FROM dt_tipiddt WHERE dir="entrata")) LIMIT 0,5');
if (sizeof($documenti) > 0) {
echo "<br/><table cellspacing='0' class='table-striped table-bordered' >\n";
echo "<br/><table class='table table-striped table-bordered table-extra-condensed' >\n";
echo "<tr><th width='180'>Documento</th>\n";
echo "<th width='100' class='text-right' >Totale</th></tr>\n";
@ -92,7 +92,7 @@ switch ($resource) {
SELECT idddt AS id, "Ddt" AS tipo, "Ddt di acquisto" AS modulo, (subtotale-sconto)/qta AS costo_unitario, (SELECT numero FROM dt_ddt WHERE id=idddt) AS n_documento, (SELECT numero_esterno FROM dt_ddt WHERE id=idddt) AS n2_documento, (SELECT data FROM dt_ddt WHERE id=idddt) AS data_documento FROM dt_righe_ddt WHERE idarticolo='.prepare($idarticolo).' AND idddt IN(SELECT id FROM dt_ddt WHERE idtipoddt IN(SELECT id FROM dt_tipiddt WHERE dir="uscita")) LIMIT 0,5');
if (sizeof($documenti) > 0) {
echo "<br/><table cellspacing='0' class='table-striped table-bordered' >\n";
echo "<br/><table class='table table-striped table-bordered table-extra-condensed' >\n";
echo "<tr><th width='180'>Documento</th>\n";
echo "<th width='100' class='text-right' >Totale</th></tr>\n";
@ -140,14 +140,6 @@ switch ($resource) {
]);
$results = $database->fetchArray($query_anagrafica);
// Lettura dei prezzi relativi all'articolo, senza anagrafica collegata
if (empty($results)) {
$query_predefinito = replace($query, [
'|where|' => '',
]);
$results = $database->fetchArray($query_predefinito);
}
// Lettura dei prezzi registrati direttamente sull'articolo, per compatibilità con il formato standard
if (empty($results)) {
$result = $database->fetchOne('SELECT prezzo_acquisto, '.($prezzi_ivati ? 'prezzo_vendita_ivato' : 'prezzo_vendita').' AS prezzo_vendita FROM mg_articoli WHERE id = '.prepare($id_articolo));

View File

@ -79,6 +79,7 @@ switch ($resource) {
mg_articoli.idconto_acquisto,
categoria.`nome` AS categoria,
sottocategoria.`nome` AS sottocategoria,
(SUM((co_righe_documenti.prezzo_unitario-co_righe_documenti.sconto_unitario)*co_righe_documenti.qta)/SUM(co_righe_documenti.qta)) AS media_ponderata,
CONCAT(conto_vendita_categoria .numero, '.', conto_vendita_sottocategoria.numero, ' ', conto_vendita_sottocategoria.descrizione) AS idconto_vendita_title,
CONCAT(conto_acquisto_categoria .numero, '.', conto_acquisto_sottocategoria.numero, ' ', conto_acquisto_sottocategoria.descrizione) AS idconto_acquisto_title
@ -91,6 +92,9 @@ switch ($resource) {
LEFT JOIN co_pianodeiconti3 AS conto_acquisto_sottocategoria ON conto_acquisto_sottocategoria.id=mg_articoli.idconto_acquisto
LEFT JOIN co_pianodeiconti2 AS conto_acquisto_categoria ON conto_acquisto_sottocategoria.idpianodeiconti2=conto_acquisto_categoria.id
LEFT JOIN co_righe_documenti ON co_righe_documenti.idarticolo=mg_articoli.id
LEFT JOIN co_documenti ON co_documenti.id=co_righe_documenti.iddocumento
LEFT JOIN co_tipidocumento ON co_tipidocumento.id=co_documenti.idtipodocumento
LEFT JOIN co_iva AS iva_articolo ON iva_articolo.id = mg_articoli.idiva_vendita
LEFT JOIN co_iva AS iva_predefinita ON iva_predefinita.id = (SELECT valore FROM zz_settings WHERE nome = 'Iva predefinita')";
@ -133,6 +137,7 @@ switch ($resource) {
$where[] = 'mg_articoli.attivo = 1';
$where[] = 'mg_articoli.deleted_at IS NULL';
$where[] = '(co_tipidocumento.dir="uscita" OR co_tipidocumento.dir IS NULL)';
if (!empty($search)) {
$search_fields[] = 'mg_articoli.descrizione LIKE '.prepare('%'.$search.'%');

View File

@ -214,6 +214,29 @@ switch (post('op')) {
flash()->warning(tr('Nessun articolo modificato!'));
}
break;
case 'set-acquisto-ifzero':
$n_art = 0;
foreach ($id_records as $id) {
$articolo = Articolo::find($id);
if ($articolo->prezzo_acquisto==0 && empty($articolo->idfornitore)) {
$new_prezzo_acquisto = $dbo->fetchOne('SELECT (prezzo_unitario-sconto_unitario) AS prezzo_acquisto FROM co_righe_documenti LEFT JOIN co_documenti ON co_righe_documenti.iddocumento=co_documenti.id LEFT JOIN co_tipidocumento ON co_tipidocumento.id=co_documenti.idtipodocumento WHERE idarticolo='.prepare($id).' AND dir="uscita" ORDER BY co_documenti.data DESC, co_righe_documenti.id DESC LIMIT 0,1')['prezzo_acquisto'];
$articolo->prezzo_acquisto = $new_prezzo_acquisto;
$articolo->save();
if ($new_prezzo_acquisto!=0) {
$n_art++;
}
}
}
flash()->info(tr('Prezzi di acquisto aggiornati per _NUM_ articoli!', [
'_NUM_' => $n_art,
]));
break;
}
@ -322,4 +345,15 @@ $operations['change-iva'] = [
],
];
$operations['set-acquisto-ifzero'] = [
'text' => '<span><i class="fa fa-refresh"></i> '.tr('Imposta prezzo di acquisto da fattura ').'</span>',
'data' => [
'title' => tr('Impostare il prezzo di acquisto per gli articoli selezionati?'),
'msg' => 'Il prezzo di acquisto verrà impostato sugli articoli che non hanno nessun prezzo di acquisto inserito e verrà aggiornato in base alla fattura di acquisto più recente',
'button' => tr('Procedi'),
'class' => 'btn btn-lg btn-warning',
'blank' => false,
],
];
return $operations;

View File

@ -173,7 +173,7 @@ include_once __DIR__.'/../../core.php';
<div class="row">
<div class="col-md-12">
{[ "type": "select", "label": "<?php echo tr('Fornitore predefinito'); ?>", "name": "id_fornitore", "ajax-source": "fornitori-articolo", "select-options": <?php echo json_encode(['id_articolo' => $id_record]); ?>, "value":"$id_fornitore$", "help": "<?php echo tr('Fornitore predefinito selezionabile tra i fornitori presenti nel plugin \"Prezzi di listino\"'); ?>." ]}
{[ "type": "select", "label": "<?php echo tr('Fornitore predefinito'); ?>", "name": "id_fornitore", "ajax-source": "fornitori-articolo", "select-options": <?php echo json_encode(['id_articolo' => $id_record]); ?>, "value":"$id_fornitore$", "help": "<?php echo tr('Fornitore predefinito selezionabile tra i fornitori presenti nel plugin \"Listino fornitori\"'); ?>." ]}
</div>
</div>

View File

@ -237,8 +237,8 @@ if (file_exists($backup_dir)) {
<a class="btn btn-primary" href="'.base_path().'/modules/backups/actions.php?op=getfile&number='.$id.'" target="_blank"><i class="fa fa-download"></i> '.tr('Scarica').'</a>
<div class="pull-right">
<a class="btn btn-warning ask" data-backto="record-edit" data-method="post" data-op="restore" data-number="'.$id.'" data-msg="'.tr('Vuoi ripristinare questo backup?').'" data-button="Ripristina" data-class="btn btn-lg btn-warning">
<i class="fa fa-upload"></i>
<a class="btn btn-warning ask" data-backto="record-edit" data-method="post" data-op="restore" data-number="'.$id.'" data-msg="'.tr('Clicca su Ripristina per ripristinare questo backup').'" data-button="Ripristina" data-class="btn btn-lg btn-warning">
<i class="fa fa-upload"></i> '.tr('Ripristina').'
</a>
<a class="btn btn-danger ask" title="'.tr('Elimina backup').'" data-backto="record-list" data-op="del" data-number="'.$id.'">

View File

@ -36,6 +36,7 @@ switch (post('op')) {
$dbo->update('do_documenti', [
'idcategoria' => post('idcategoria'),
'nome' => post('nome'),
'descrizione' => post('descrizione', true) ?: null,
'data' => post('data') ?: null,
], ['id' => $id_record]);

View File

@ -37,8 +37,6 @@ include_once __DIR__.'/../../core.php';
{[ "type": "text", "label": "Nome", "name": "nome", "required": 1, "value": "$nome$", "extra": "" ]}
</div>
<div class="col-md-3">
{[ "type": "select", "label": "Categoria", "name": "idcategoria", "required": 1, "ajax-source": "categorie_documenti", "value": "$idcategoria$", "extra": "" ]}
</div>
@ -49,6 +47,12 @@ include_once __DIR__.'/../../core.php';
</div>
</div>
<div class="row">
<div class="col-md-12">
{[ "type": "ckeditor", "use_full_ckeditor": 1, "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "value": "$descrizione$" ]}
</div>
</div>
</div>
</div>

View File

@ -43,7 +43,7 @@ $id_anagrafica = filter('id_anagrafica');
</div>
<div class="col-md-4">
{[ "type": "select", "label": "<?php echo tr('Tecnico assegnato'); ?>", "name": "idtecnico", "ajax-source": "tecnici" ]}
{[ "type": "select", "label": "<?php echo tr('Tecnico assegnato'); ?>", "name": "idtecnico", "ajax-source": "tecnici", "icon-after": "add|<?php echo Modules::get('Anagrafiche')['id']; ?>|tipoanagrafica=Tecnico&readonly_tipo=1" ]}
</div>
</div>

View File

@ -213,7 +213,7 @@ echo '
$espandi_dettagli = setting('Espandi automaticamente la sezione "Dettagli aggiuntivi"');
echo '
<!-- DATI AGGIUNTIVI -->
<div class="box box-warning collapsable '.(empty($espandi_dettagli) ? 'collapsed-box' : '').'">
<div class="box box-info collapsable '.(empty($espandi_dettagli) ? 'collapsed-box' : '').'">
<div class="box-header with-border">
<h3 class="box-title">'.tr('Dettagli aggiuntivi').'</h3>
<div class="box-tools pull-right">
@ -277,10 +277,10 @@ if (empty($id_intervento)) {
}
echo '
<!-- ORE DI LAVORO -->
<div class="box box-primary collapsable '.($origine_dashboard ? '' : 'collapsed-box').'">
<!-- ORE LAVORO -->
<div class="box box-info collapsable '.($origine_dashboard ? '' : 'collapsed-box').'">
<div class="box-header with-border">
<h3 class="box-title">'.tr('Ore di lavoro').'</h3>
<h3 class="box-title">'.tr('Ore lavoro').'</h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse">
<i class="fa fa-'.($origine_dashboard ? 'minus' : 'plus').'"></i>
@ -315,7 +315,7 @@ echo '
</div>
<!-- RICORRENZA -->
<div class="box box-warning collapsable collapsed-box">
<div class="box box-info collapsable collapsed-box">
<div class="box-header with-border">
<h3 class="box-title">'.tr('Ricorrenza').'</h3>
<div class="box-tools pull-right">
@ -328,7 +328,7 @@ echo '
<div class="box-body">
<div class="row">
<div class="col-md-4">
{[ "type": "checkbox", "label": "'.tr('Ricorsiva').'", "name": "ricorsiva", "value": "" ]}
{[ "type": "checkbox", "label": "'.tr('Attività ricorrente').'", "name": "ricorsiva", "value": "" ]}
</div>
<div class="col-md-4 ricorrenza">
@ -367,7 +367,7 @@ echo '
</div>
<!-- DETTAGLI CLIENTE -->
<div class="box box-success collapsable collapsed-box">
<div class="box box-info collapsable collapsed-box">
<div class="box-header with-border">
<h3 class="box-title">'.tr('Dettagli cliente').'</h3>
<div class="box-tools pull-right">
@ -378,7 +378,7 @@ echo '
</div>
<div class="box-body" id="dettagli_cliente">
'.tr('Prima seleziona un cliente').'...
'.tr('Seleziona prima un cliente').'...
</div>
</div>

View File

@ -381,7 +381,7 @@ echo '
<!-- ORE LAVORO -->
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title"><?php echo tr('Ore di lavoro'); ?></h3>
<h3 class="panel-title"><?php echo tr('Ore lavoro'); ?></h3>
</div>
<div class="panel-body">

View File

@ -46,7 +46,7 @@ switch (filter('op')) {
$newsletter->completed_at = filter('completed_at');
$newsletter->subject = filter('subject');
$newsletter->content = $_POST['content']; //filter('content');
$newsletter->content = post('content', true); //filter('content');
$newsletter->save();

View File

@ -32,7 +32,6 @@ if ($bilancio_gia_aperto) {
echo '
<div class="text-right">
<button type="button" class="btn btn-lg btn-info" data-toggle="modal" data-title="'.tr('Stampa Bilancio').'" data-href="'.base_path().'/modules/partitario/stampa_bilancio.php" ><i class="fa fa-print"></i> '.tr('Stampa Bilancio').'</button>
<button type="button" class="btn btn-lg '.$btn_class.'" data-op="apri-bilancio" data-title="'.tr('Apertura bilancio').'" data-backto="record-list" data-msg="'.$msg.'" data-button="'.tr('Riprendi saldi').'" data-class="btn btn-lg btn-warning" onclick="message( this );">
<i class="fa fa-folder-open"></i> '.tr('Apertura bilancio').'
</button>
@ -60,9 +59,6 @@ foreach ($primo_livello as $conto_primo) {
<i class="fa fa-plus-circle"></i>
</button>
</h3>
<div class="pull-right">
'.Prints::getLink('Mastrino', $conto_primo['id'], null, tr('Stampa'), null, 'lev=1').'
</div>
</div>
<div class="box-body">';

View File

@ -74,4 +74,22 @@ echo '
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">'.tr('Piano dei conti').'</h3>
</div>
<div class="panel-body">
<button type="button" class="btn btn-primary col-md-2" data-toggle="modal" data-title="'.tr('Stampa Bilancio').'" data-href="'.base_path().'/modules/stampe_contabili/stampa_bilancio.php" ><i class="fa fa-print fa-2x"></i> <br>'.tr('Stampa').'<br>'.tr('bilancio').'</button>
'.Prints::getLink('Mastrino', 1, 'btn-primary col-md-4 col-md-push-1', '<br>'.tr('Stampa situazione').'<br>'.tr('patrimoniale'), '|default| fa-2x', 'lev=1').'
'.Prints::getLink('Mastrino', 2, 'btn-primary col-md-4 col-md-push-2', '<br>'.tr('Stampa situazione').'<br>'.tr('economica'), '|default| fa-2x', 'lev=1').'
</div>
</div>
</div>
</div>';

View File

@ -49,6 +49,7 @@ if (Services::isEnabled()) {
<th width="50%">'.tr('Nome').'</th>
<th>'.tr('Tipo').'</th>
<th width="30%">'.tr('Scadenza').'</th>
<th width="10%" class="text-center" >'.tr('#').'</th>
</tr>
</thead>
@ -61,11 +62,28 @@ if (Services::isEnabled()) {
<td>'.$servizio['codice'].' - '.$servizio['nome'].'</td>
<td>'.$servizio['sottocategoria'].'</td>
<td>'.dateFormat($scadenza).' ('.$scadenza->diffForHumans().')</td>
<td class="text-center" >
<input type="checkbox" class="check_rinnova '.($scadenza->lessThan($limite_scadenze) ? "" : "hide").'" name="rinnova[]" value="'.$servizio['codice'].'">
</td>
</tr>';
}
$servizi_in_scadenza = Services::getServiziInScadenza($limite_scadenze);
$servizi_scaduti = Services::getServiziScaduti();
if (!$servizi_in_scadenza->isEmpty() || !$servizi_scaduti->isEmpty()){
//TODO: Il tasto deve preparare correttamente il carrello con servizi e le risorse in scadenza, considerando anche eventuali ampliamenti (es. spazio FE esaurito o in esaurimento)
echo ' </tbody>
<tfoot>
<tr>
<td colspan="4">
<a type="button" href="https://marketplace.devcode.it/" target="_blank" id="btn_rinnova" class="btn btn-xs btn-primary pull-right disabled" ><i class="fa fa-shopping-cart"></i> '.tr('Rinnova').'</a>
</td>
</tr>
</tfoot>';
}
echo '
</tbody>
</table>';
} else {
echo '
@ -98,26 +116,26 @@ if (Services::isEnabled()) {
if (!$risorse_in_scadenza->isEmpty() || !$risorse_scadute->isEmpty() ) {
if (!$risorse_scadute->isEmpty()){
echo '
<div class="alert alert-danger" role="alert"> <i class="fa fa-exclamation-triangle"></i> '.tr('Attenzione, alcune risorse sono scadute o hanno esaurito i crediti:', [
'_NUM_' => $risorse_scadute->count(),
]).'</div>';
}
if (!$risorse_in_scadenza->isEmpty()){
echo '
<div class="alert alert-warning" role="alert"> <i class="fa fa-clock-o"></i> '.tr('Attenzione, _NUM_ risorse sono in scadenza o stanno per esaurire i crediti:', [
<div class="alert alert-warning" role="alert"> <i class="fa fa-clock-o"></i> '.tr('Attenzione, alcune risorse sono in scadenza o stanno per esaurire i crediti:', [
'_NUM_' => $risorse_in_scadenza->count(),
]).'</div>';
}
if (!$risorse_scadute->isEmpty()){
echo '
<div class="alert alert-danger" role="alert"> <i class="fa fa-exclamation-triangle"></i> '.tr('Attenzione, _NUM_ risorse sono scadute o hanno esaurito i crediti:', [
'_NUM_' => $risorse_scadute->count(),
]).'</div>';
}
} else {
echo '
/*echo '
<div class="alert alert-success" role="alert"> <i class="fa fa-check-circle"></i> '.tr('Bene, tutte le risorse sono attive e non presentano avvisi:', [
'_NUM_' => $risorse_attive->count(),
]).'</div>';
]).'</div>';*/
}
echo '
@ -137,8 +155,8 @@ if (Services::isEnabled()) {
echo '
<tr class="'.($scadenza->lessThan(Carbon::now()) ? 'danger' : ($scadenza->lessThan($limite_scadenze) ? 'warning' : '')).'">
<td>'.$servizio['name'].'</td>
<td>'.(($servizio['credits'] < 100 && $servizio['credits']) ? '<b><i class="fa fa-icon fa-warning" ></i>' : '').(($servizio['credits']) ? $servizio['credits'] : '-').(($servizio['credits'] < 100 && $servizio['credits']) ? '</b>' : '').'</td>
<td>'.((Carbon::now()->diffInDays($scadenza, false) < $days && $scadenza) ? '<b><i class="fa fa-icon fa-warning" ></i>' : '').dateFormat($scadenza).' ('.$scadenza->diffForHumans().')'.((Carbon::now()->diffInDays($scadenza, false) < $days && $scadenza) ? '</b>' : '').'</td>
<td>'.(($servizio['credits'] < 100 && $servizio['credits'] !== null) ? '<b><i class="fa fa-icon fa-warning text-warning" ></i> ' : '').(($servizio['credits'] !== null) ? $servizio['credits'] : '-').(($servizio['credits'] < 100 && $servizio['credits'] !== null) ? '</b>' : '').'</td>
<td>'.((Carbon::now()->diffInDays($scadenza, false) < $days && $scadenza) ? '<b><i class="fa fa-icon fa-warning text-warning" ></i> ' : '').dateFormat($scadenza).' ('.$scadenza->diffForHumans().')'.((Carbon::now()->diffInDays($scadenza, false) < $days && $scadenza) ? '</b>' : '').'</td>
</tr>';
}
@ -150,26 +168,26 @@ if (Services::isEnabled()) {
if (Services::getRisorseAttive()->where('name', 'Fatturazione Elettronica')->count()) {
echo '
<div class="panel panel-info">
<div class="panel panel-primary">
<div class="panel-heading" > <i class="fa fa-bar-chart"></i> '.tr('Statistiche su Fatture Elettroniche').'</div>
<div class="panel-body">
<div class="alert hidden" role="alert" id="spazio-fe">
<i id="spazio-fe-icon" class=""></i> <span>'.tr('Spazio per fatture elettroniche _TEXT_: _NUM_ utilizzati su _TOT_ disponibili', [
<i id="spazio-fe-icon" class=""></i> <span>'.tr('Attenzione, spazio per fatture elettroniche _TEXT_: _NUM_ utilizzati su _TOT_ disponibili', [
'_TEXT_' => '<span id="spazio-fe-text"></span>',
'_NUM_' => '<span id="spazio-fe-occupato"></span>',
'_TOT_' => '<span id="spazio-fe-totale"></span>',
]).'.<br>'.tr("Contatta l'assistenza per risolvere il problema").'</span>.
]).'.<br>'.tr("Contattare l'assistenza per risolvere il problema").'</span>.
</div>
<div class="alert hidden" role="alert" id="numero-fe">
<i id="numero-fe-icon" class=""></i> <span>'.tr('Numero di fatture elettroniche per l\'annualità _TEXT_: _NUM_ documenti transitati su _TOT_ disponibili', [
<i id="numero-fe-icon" class=""></i> <span>'.tr('Attenzione, numero di fatture elettroniche per l\'annualità _TEXT_: _NUM_ documenti transitati su _TOT_ disponibili', [
'_TEXT_' => '<span id="numero-fe-text"></span>',
'_NUM_' => '<span id="numero-fe-occupato"></span>',
'_TOT_' => '<span id="numero-fe-totale"></span>',
]).'.<br>'.tr("Contatta l'assistenza per risolvere il problema").'</span>.
]).'.<br>'.tr("Contattare l'assistenza per risolvere il problema").'</span>.
</div>
@ -178,14 +196,14 @@ if (Services::isEnabled()) {
<tr>
<th>'.tr('Anno').'</th>
<th>
'.tr('Documenti archiviati').'
'.tr('N. documenti archiviati').'
<span class="tip" title="'.tr('Fatture attive e relative ricevute, fatture passive').'.">
<i class="fa fa-question-circle-o"></i>
</span>
</th>
<th>
'.tr('Totale spazio occupato').'
'.tr('Spazio utilizzato').'
<span class="tip" title="'.tr('Fatture attive con eventuali allegati e ricevute, fatture passive con eventuali allegati').'.">
<i class="fa fa-question-circle-o"></i>
</span>
@ -193,13 +211,13 @@ if (Services::isEnabled()) {
</tr>
</thead>
<tbody id="elenco-fe">
<tfoot id="elenco-fe">
<tr style="background-color:#CCCCCC;" >
<td>'.tr('Totale').'</td>
<td id="fe_numero"></td>
<td id="fe_spazio"></td>
</tr>
</tbody>
</tfoot>
</table>
</div>
</div>
@ -263,6 +281,24 @@ echo '
</div>
<script>
$(".check_rinnova").each(function() {
var len = 0;
input(this).change(function() {
len = $("input[type=checkbox]:checked.check_rinnova").length;
if (len>0){
$("#btn_rinnova").removeClass("disabled");
}else{
$("#btn_rinnova").addClass("disabled");
}
});
});
function aggiornaStatisticheFE(){
$.ajax({
url: globals.rootdir + "/actions.php",
@ -277,35 +313,39 @@ function aggiornaStatisticheFE(){
$("#fe_spazio").html(response.spazio_occupato);
if (response.spazio_totale){
$("#fe_spazio").html($("#fe_spazio").html() + " / " + response.spazio_totale);
if (response.spazio_occupato>response.spazio_totale && response.avviso_spazio){
$("#fe_spazio").html("<span style=\"font-weight:bold;\" ><i class=\"fa fa-warning\" ></i> " + $("#fe_spazio").html() + "</span>");
}
}
// Informazioni sullo spazio occupato
$("#spazio-fe-occupato").html(response.spazio_occupato);
$("#spazio-fe-totale").html(response.spazio_totale);
if (response.avviso_spazio) {
$("#spazio-fe").removeClass("hidden");
$("input.check_rinnova").addClass("disabled");
response.spazio_occupato = parseFloat(response.spazio_occupato);
response.spazio_totale = parseFloat(response.spazio_totale);
if (response.spazio_totale){
$("#fe_spazio").html($("#fe_spazio").html() + " / " + response.spazio_totale);
if (response.spazio_occupato>response.spazio_totale && response.avviso_spazio){
$("#fe_spazio").html("<span style=\"font-weight:bold;\" ><i class=\"fa fa-warning text-warning\" ></i> " + $("#fe_spazio").html() + "</span>");
}
}
if (response.spazio_occupato<response.spazio_totale){
$("#spazio-fe-icon").addClass("fa fa-warning");
$("#spazio-fe-icon").addClass("fa fa-clock-o");
$("#spazio-fe").addClass("alert-warning");
$("#spazio-fe-text").html("'.tr('in esaurimento').'");
}
else if (response.spazio_occupato>=response.spazio_totale){
$("#spazio-fe-icon").addClass("fa fa-times");
$("#spazio-fe-icon").addClass("fa fa-warning");
$("#spazio-fe").addClass("alert-danger");
$("#spazio-fe-text").html("'.tr('terminato').'");
}
}
if (response.history.length) {
for (let i = 0; i < response.history.length; i++) {
@ -319,7 +359,7 @@ function aggiornaStatisticheFE(){
data["number"] = number + " / " + response.maxNumber;
if (response.avviso_numero)
data["number"] = "<span style=\"font-weight:bold;\" > <i class=\"fa fa-warning\" ></i> " + data["number"] + "</span>";
data["number"] = "<span style=\"font-weight:bold;\" > <i class=\"fa fa-warning text-warning\" ></i> " + data["number"] + "</span>";
$("#numero-fe-occupato").html(number);
$("#numero-fe-totale").html(response.maxNumber);
@ -327,21 +367,21 @@ function aggiornaStatisticheFE(){
if (response.avviso_numero) {
$("#numero-fe").removeClass("hidden");
$("input.check_rinnova").addClass("disabled");
if (number<response.maxNumber){
$("#numero-fe-icon").addClass("fa fa-warning");
$("#numero-fe-icon").addClass("fa fa-clock-o");
$("#numero-fe").addClass("alert-warning");
$("#numero-fe-text").html("'.tr('in esaurimento').'");
}
else if (number>=response.maxNumber){
$("#numero-fe-icon").addClass("fa fa-times");
$("#numero-fe-icon").addClass("fa fa-warning");
$("#numero-fe").addClass("alert-danger");
$("#numero-fe-text").html("'.tr('esaurito').'");
}
}
}else{
var highlight = "<tr>";
}

View File

@ -20,7 +20,7 @@
"dropzone": "^5.7.2",
"eonasdan-bootstrap-datetimepicker": "^4.17.47",
"font-awesome": "^4.7.0",
"fullcalendar": "^3.4.0",
"fullcalendar": "^3.10.4",
"geocomplete": "^1.7.0",
"hotkeys-js": "^3.8.5",
"html5sortable": "^0.13.2",

View File

@ -60,9 +60,9 @@ echo '
<th class="text-center col-md-4">'.($direzione == 'entrata' ? tr('Cliente') : tr('Fornitore')).'</th>
<th class="text-center col-md-4">'.tr('Prezzo predefinito').'</th>';
if ($direzione == 'uscita') {
echo '<th class="text-center col-md-4">'.tr('Fornitore predefinito').'</th>';
echo '<th class="text-center col-md-4">'.tr('E\' il fornitore predefinito?').'</th>';
} else {
echo '<th class="text-center col-md-4"></th>';
echo '<th class="text-center col-md-4">'.tr('Fornitore predefinito').'</th>';
}
echo '
</tr>
@ -72,7 +72,7 @@ echo '
if ($direzione == 'uscita') {
echo '<td class="text-center"><i class="fa fa-'.$icon.' text-'.$color.'"></i> '.$text.'</td>';
} else {
echo '<td></td>';
echo '<td class="text-center">'.(!empty($articolo->id_fornitore) ? Anagrafica::find($articolo->id_fornitore)->ragione_sociale : tr('Nessuno')).'</td>';
}
echo '
</tr>
@ -89,7 +89,7 @@ echo '
<div class="row">
<div class="col-md-4">
{[ "type": "checkbox", "label": "'.tr('Imposta prezzo per questa anagrafica').'", "name": "modifica_prezzi", "value": "'.intval(!empty($dettaglio_predefinito)).'" ]}
{[ "type": "checkbox", "label": "'.tr('Imposta prezzo specifico per questa anagrafica').'", "name": "modifica_prezzi", "value": "'.intval(!empty($dettaglio_predefinito)).'" ]}
</div>
</div>
@ -97,6 +97,7 @@ echo '
<div class="info_prezzi">
<div class="col-md-4">
{[ "type": "number", "label": "'.tr('Prezzo specifico').'", "name": "prezzo_unitario_fisso", "value": "'.($prezzi_ivati ? $dettaglio_predefinito->prezzo_unitario_ivato : $dettaglio_predefinito->prezzo_unitario).'", "icon-after": "'.currency().'", "help": "'.($prezzi_ivati ? tr('Importo IVA inclusa') : '').'" ]}
<button type="button" style="margin-top:-10px;" class="btn btn-xs btn-info pull-right '.($prezzo_predefinito>0 ? "" : "disabled").'" onclick="copiaPrezzoPredefinito()"><i class="fa fa-refresh"></i> '.tr('Importa').'</button>
</div>
<div class="col-md-4">
@ -107,7 +108,7 @@ echo '
<div class="row">
<div id="imposta_prezzo_qta" class="col-md-4">
{[ "type": "checkbox", "label": "'.tr('Imposta un prezzo in base alla quantità').'", "name": "prezzo_qta", "value": "'.intval($dettagli->count() != 0).'" ]}
{[ "type": "checkbox", "label": "'.tr('Imposta prezzo in base alla quantità').'", "name": "prezzo_qta", "value": "'.intval($dettagli->count() != 0).'" ]}
</div>
</div>
@ -214,6 +215,11 @@ echo '
<script>$(document).ready(init);</script>
<script>
function copiaPrezzoPredefinito() {
$("#prezzo_unitario_fisso").val('.$prezzo_predefinito.').trigger("change");
}
var key = '.$dettagli->count().';
function aggiungiPrezzo(button) {
cleanup_inputs();
@ -266,5 +272,5 @@ input("prezzo_qta").change(function () {
})
$(document).ready(cambioImpostazioni);
content_was_modified = false;
content_was_modified = false;
</script>';

View File

@ -23,6 +23,7 @@ use Plugins\ListinoClienti\DettaglioPrezzo;
include_once __DIR__.'/../../core.php';
$id_articolo = $id_record;
echo '
<div class="box">
<div class="box-header">
@ -32,7 +33,7 @@ echo '
<div class="box-body">
<div class="row">
<div class="col-md-9">
{[ "type": "select", "label": "'.tr('Cliente').'", "name": "id_cliente_informazioni", "required":"1", "ajax-source": "clienti" ]}
{[ "type": "select", "label": "'.tr('Cliente').'", "name": "id_cliente_informazioni", "required":"1", "ajax-source": "clienti", "icon-after": "add|'.Modules::get('Anagrafiche')['id'].'|tipoanagrafica=Cliente&readonly_tipo=1" ]}
</div>
<div class="col-md-3">

View File

@ -38,9 +38,9 @@ if (!empty($id_riga)) {
}
echo '
<p>'.tr('Informazioni relative al fornitore _NAME_', [
'_NAME_' => $anagrafica->ragione_sociale,
]).'.</p>
<p>'.tr('Informazioni relative al fornitore: _NAME_', [
'_NAME_' => '<b>'.$anagrafica->ragione_sociale.'</b>',
]).'</p>
<form action="" method="post">
<input type="hidden" name="backto" value="record-edit">

View File

@ -32,7 +32,7 @@ echo '
<div class="box-body">
<div class="row">
<div class="col-md-9">
{[ "type": "select", "label": "'.tr('Fornitore').'", "name": "id_fornitore_informazioni", "required":"1", "ajax-source": "fornitori" ]}
{[ "type": "select", "label": "'.tr('Fornitore').'", "name": "id_fornitore_informazioni", "required":"1", "ajax-source": "fornitori","icon-after": "add|'.Modules::get('Anagrafiche')['id'].'|tipoanagrafica=Fornitore&readonly_tipo=1" ]}
</div>
<div class="col-md-3">

View File

@ -55,10 +55,10 @@ 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.').'" ]}
{[ "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 ad inizio o alla fine del mese. 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 class="col-md-3">
{[ "type": "select", "label": "'.tr('Giorno fisso fatturazione').'", "disabled": 1, "name": "giorno_fisso", "id":"giorno_fisso", "values": '.json_encode($giorni_fatturazione).', "value": "", "help":"'.tr('Selezionare il giorno fisso di fatturazione.').'" ]}
</div>
<input type="hidden" name="data_inizio" value="'.$contratto->data_accettazione.'">
</div>
@ -127,16 +127,25 @@ foreach ($righe as $riga) {
<div class="row">
<div class="col-md-9">
{[ "type": "textarea", "label": "'.tr('Descrizione').'", "name": "descrizione['.$riga->id.']", "value": "'.$descrizione.'" ]}
{[ "type": "textarea", "label": "'.tr('Descrizione').'", "name": "descrizione['.$riga->id.']", "value": "'.$descrizione.'", "extra": "rows=6" ]}
{[ "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_', [
{[ "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_ totali', [
'_TOT_' => Translator::numberToLocale(($riga->qta - $riga->qta_evasa)),
]).'", "options":"'.str_replace('"', '\"', $options).'" ]}
</div>
<div class="col-md-3" id="totali_'.$riga->id.'">
</div>
</div>
<hr>';
</div>';
echo ' <div class="label label-warning alert_rate hide">
<i class="fa fa-warning"></i> <span>'.tr('Attenzione, sono previste _RATE_ rate su _TOT_ quantità totali', [
'_RATE_' => '<span class="num_rate"></span>',
'_TOT_' => '<span class="qta_disponibili">'.Translator::numberToLocale(($riga->qta - $riga->qta_evasa)).'</span>',
]).'</span>.
</div><hr>';
}
echo '
@ -148,7 +157,7 @@ echo '
echo '
<div class="row">
<div class="col-md-12 text-right">
<button type="submit" class="btn btn-primary"><i class="fa fa-chevron-right"></i> '.tr('Procedi').'</button>
<button type="submit" class="btn btn-primary" id="btn_procedi" ><i class="fa fa-chevron-right"></i> '.tr('Procedi').'</button>
</div>
</div>
</div>
@ -167,6 +176,7 @@ echo '
get_prezzi();
});
$("#scadenza").change(function(){
caricaCadenza();
});
@ -181,6 +191,20 @@ echo '
});
}
function controlloProcedi(){
var len = 0;
$(this).change(function() {
len = $("input[type=checkbox]:checked.check_periodo").length;
if (len>0){
$("#btn_procedi").removeClass("disabled");
}else{
$("#btn_procedi").addClass("disabled");
}
});
}
function selezionaTutto(){
var check = 0;
@ -192,6 +216,17 @@ echo '
});
$("#total_check").html("Rate: " + check).trigger("change");
$(".num_rate").html(check).trigger("change");
var qta_disponibili = 0;
$(".alert_rate").each(function (){
qta_disponibili = parseFloat($(this).find(".qta_disponibili").text());
if (check > qta_disponibili ){
$(this).removeClass("hide");
}else{
$(this).addClass("hide");
}
});
}
function deselezionaTutto(){
@ -204,6 +239,18 @@ echo '
});
$("#total_check").html("Rate: " + check).trigger("change");
$(".num_rate").html(check).trigger("change");
var qta_disponibili = 0;
$(".alert_rate").each(function (){
qta_disponibili = parseFloat($(this).find(".qta_disponibili").text());
if (check > qta_disponibili ){
$(this).removeClass("hide");
}else{
$(this).addClass("hide");
}
});
}
$(".qta_fattura").change(function(){
@ -232,12 +279,14 @@ echo '
});
}
$("#cadenza_fatturazione").change(function(){
$("#cadenza_fatturazione").change(function(event){
event.preventDefault();
if( $(this).val()=="Giorno" ){
$("#div_giorno_fisso").show();
$("#giorno_fisso").prop("required", true);
input("giorno_fisso").enable();
}else{
$("#giorno_fisso").selectReset();
$("#div_giorno_fisso").hide();
$("#giorno_fisso").prop("required", false);
input("giorno_fisso").disable();
}
})

View File

@ -67,7 +67,7 @@ echo '
echo '
<div class="col-md-3">
<label for="m_'.$count.'">
<input type="checkbox" class="unblockable" id="m_'.$count.'" name="selezione_periodo['.$count.']" '.$checked.' />
<input type="checkbox" onchange="controlloProcedi();" class="unblockable check_periodo" id="m_'.$count.'" name="selezione_periodo['.$count.']" '.$checked.' />
'.ucfirst($data_corrente->formatLocalized('%B %Y')).'
</label>
<input type="hidden" name="periodo['.$count.']" value="'.$data.'">
@ -89,6 +89,18 @@ echo '
}
});
$("#total_check").html("Rate: " + check).trigger("change");
$(".num_rate").html(check).trigger("change");
var qta_disponibili = 0;
$(".alert_rate").each(function (){
qta_disponibili = parseFloat($(this).find(".qta_disponibili").text());
if (check > qta_disponibili ){
$(this).removeClass("hide");
}else{
$(this).addClass("hide");
}
});
});
$("#periodi input").change(function(){
@ -99,5 +111,17 @@ echo '
}
});
$("#total_check").html("Rate: " + check).trigger("change");
$(".num_rate").html(check).trigger("change");
var qta_disponibili = 0;
$(".alert_rate").each(function (){
qta_disponibili = parseFloat($(this).find(".qta_disponibili").text());
if (check > qta_disponibili ){
$(this).removeClass("hide");
}else{
$(this).addClass("hide");
}
});
});
</script>';

View File

@ -117,7 +117,7 @@ if (!$pianificazioni->isEmpty()) {
} else {
echo '
<div class="alert alert-info">
<i class="fa fa-info-circle"></i> '.tr('Pianificazione della fatturazione non impostata per questo contratto').'.
<i class="fa fa-info-circle"></i> '.tr('Nessuna pianificazione della fatturazione impostata per questo contratto').'.
</div>
<button type="button" '.(!empty($is_pianificabile) ? '' : 'disabled').' title="'.tr('Aggiungi una nuova pianificazione').'" data-toggle="tooltip" class="btn btn-primary pull-right tip" id="pianifica">

View File

@ -115,7 +115,7 @@ if (!empty($impianti)) {
echo '
<tr>
<td colspan="2" class="text-left" >'.tr('Matricola').': <b>'.$impianti[$i]['matricola'].'</b></td>
<td colspan="2" class="text-left" >'.tr('Data').': <b>'.Translator::dataToLocale($impianti[$i]['data']).'</b></td>
<td colspan="2" class="text-left" >'.tr('Data').': <b>'.Translator::dateToLocale($impianti[$i]['data']).'</b></td>
</tr>
<tr>
<td colspan="4" class="text-left" >'.tr('Nome').': <b>'.$impianti[$i]['nome'].'</b></td>

View File

@ -17,7 +17,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
if ($options['hide_header']) {
if ($options['hide-header']) {
echo '
<!-- Intestazione vuota fornitore -->
<div class="row" style="height:111px;">

View File

@ -22,7 +22,7 @@ include_once __DIR__.'/../../core.php';
if ($record['titolo'] != $prev_titolo && get('lev') == 1) {
echo '
<tr>
<th colspan="4">'.$record['titolo'].'</th>
<th colspan="5">'.$record['titolo'].'</th>
</tr>';
}

View File

@ -22,10 +22,13 @@ UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `do_documenti`\nINNER
-- Task per l'eliminazione automatica della coda d'invio
INSERT INTO `zz_tasks` (`id`, `name`, `class`, `expression`, `next_execution_at`, `last_executed_at`) VALUES
(NULL, 'Eliminazione automatica coda d\'invio', 'Modules\\StatoEmail\\EliminaMailTask', '0 */4 * * *', NULL, NULL);
(NULL, "Eliminazione automatica coda d'invio", 'Modules\\StatoEmail\\EliminaMailTask', '0 */4 * * *', NULL, NULL);
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `help`) VALUES
(NULL, 'Numero di giorni mantenimento coda di invio', '0', 'integer', 1, 'Mail', 1, NULL);
-- Plugin contratti del cliente
INSERT INTO `zz_plugins` (`id`, `name`, `title`, `idmodule_from`, `idmodule_to`, `position`, `script`, `enabled`, `default`, `order`, `compatibility`, `version`, `options2`, `options`, `directory`, `help`) VALUES (NULL, 'Contratti del cliente', 'Contratti del cliente', '2', '2', 'tab', 'contratti_cliente.php', '1', '0', '0', '', '', NULL, NULL, '', '');
INSERT INTO `zz_plugins` (`id`, `name`, `title`, `idmodule_from`, `idmodule_to`, `position`, `script`, `enabled`, `default`, `order`, `compatibility`, `version`, `options2`, `options`, `directory`, `help`) VALUES (NULL, 'Contratti del cliente', 'Contratti del cliente', '2', '2', 'tab', 'contratti_cliente.php', '1', '0', '0', '', '', NULL, NULL, '', '');
-- Aggiunto campo descrizione (facoltativo) in gestione documentale
ALTER TABLE `do_documenti` ADD `descrizione` TEXT NULL AFTER `nome`;