mirror of
https://github.com/devcode-it/openstamanager.git
synced 2025-03-27 08:30:07 +01:00
Merge branch 'master' into app-api
This commit is contained in:
commit
a2b7aa240b
ajax.php
assets/src/js/functions
editor.phpgulpfile.jsinclude
locale
modules
anagrafiche
articoli/ajax
contratti
dashboard
ddt
fatture
interventi
ordini
partitario
preventivi
statistiche
stato_servizi/widgets
tipi_intervento
plugins
reset.phpsrc
templates
update
10
ajax.php
10
ajax.php
@ -140,5 +140,15 @@ switch (filter('op')) {
|
||||
|
||||
echo json_encode($response);
|
||||
|
||||
break;
|
||||
|
||||
case 'summable-results':
|
||||
$ids = post('ids') ?: [];
|
||||
$results = Util\Query::getSums($structure, [
|
||||
'id' => $ids,
|
||||
]);
|
||||
|
||||
echo json_encode($results);
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -350,7 +350,7 @@ function getTable(selector) {
|
||||
|
||||
var selected = new Map();
|
||||
var selected_ids = table.data('selected') ? table.data('selected').split(';') : [];
|
||||
selected_ids.forEach(function(item, index) {
|
||||
selected_ids.forEach(function (item, index) {
|
||||
selected.set(item, true);
|
||||
});
|
||||
|
||||
@ -360,7 +360,7 @@ function getTable(selector) {
|
||||
id_module: table.data('idmodule'),
|
||||
id_plugin: table.data('idplugin'),
|
||||
|
||||
initDatatable: function() {
|
||||
initDatatable: function () {
|
||||
if (table.hasClass('datatables')) {
|
||||
start_local_datatables();
|
||||
} else {
|
||||
@ -395,10 +395,15 @@ function getTable(selector) {
|
||||
bulk_container.addClass('disabled').attr('disabled', true);
|
||||
btn_container.addClass('disabled').attr('disabled', true);
|
||||
}
|
||||
|
||||
// Aggiornamento del footer nel caso sia richiesto
|
||||
if (globals.restrict_summables_to_selected){
|
||||
this.updateSelectedFooter();
|
||||
}
|
||||
},
|
||||
addSelectedRows: function (row_ids) {
|
||||
row_ids = Array.isArray(row_ids) ? row_ids : [row_ids];
|
||||
row_ids.forEach(function(item, index) {
|
||||
row_ids.forEach(function (item, index) {
|
||||
selected.set(item, true);
|
||||
});
|
||||
|
||||
@ -406,7 +411,7 @@ function getTable(selector) {
|
||||
},
|
||||
removeSelectedRows: function (row_ids) {
|
||||
row_ids = Array.isArray(row_ids) ? row_ids : [row_ids];
|
||||
row_ids.forEach(function(item, index) {
|
||||
row_ids.forEach(function (item, index) {
|
||||
selected.delete(item);
|
||||
});
|
||||
|
||||
@ -416,5 +421,32 @@ function getTable(selector) {
|
||||
selected.clear();
|
||||
this.saveSelectedRows();
|
||||
},
|
||||
|
||||
// Aggiornamento dei campi summable
|
||||
updateSelectedFooter: function () {
|
||||
let datatable = this.datatable;
|
||||
let ids = this.getSelectedRows();
|
||||
|
||||
$.ajax({
|
||||
url: globals.rootdir + "/ajax.php",
|
||||
type: "POST",
|
||||
dataType: "json",
|
||||
data: {
|
||||
id_module: this.id_module,
|
||||
id_plugin: this.id_plugin,
|
||||
op: "summable-results",
|
||||
ids: ids,
|
||||
},
|
||||
success: function (response) {
|
||||
for (let [column, value] of Object.entries(response)) {
|
||||
let index = parseInt(column) + 1;
|
||||
let sel = datatable.column(index).footer();
|
||||
$(sel).addClass("text-right")
|
||||
.attr("id", "summable")
|
||||
.html(value);
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
};
|
||||
}
|
||||
|
@ -478,6 +478,7 @@ function replaceAll(str, find, replace) {
|
||||
}
|
||||
|
||||
function cleanup_inputs() {
|
||||
$('.bound').removeClass("bound");
|
||||
$('.superselect, .superselectajax').select2().select2("destroy");
|
||||
}
|
||||
|
||||
|
@ -359,10 +359,7 @@ if (empty($record) || !$has_access) {
|
||||
</div>
|
||||
<div class="col-md-4 text-right">
|
||||
<p><small class="label label-default tip" title="'.Translator::timestampToLocale($operation['created_at']).'"><i class="fa fa-clock-o"></i> '.Carbon::parse($operation['created_at'])->diffForHumans().'</small></p>
|
||||
<p><small class="label label-default"><i class="fa fa-user"></i> '.tr('_USER_', [
|
||||
'_USER_' => $operation['username'],
|
||||
]).
|
||||
'</small></p>
|
||||
<p><small class="label label-default"><i class="fa fa-user"></i> '.$operation['username'].'</small></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -122,6 +122,7 @@ function srcCSS() {
|
||||
|
||||
var themes = gulp.src([
|
||||
config.development + '/' + config.paths.css + '/themes/*.{css,scss,less,styl}',
|
||||
config.main.bowerDirectory + '/admin-lte/dist/css/skins/_all-skins.min.css',
|
||||
])
|
||||
.pipe(gulpIf('*.scss', sass(), gulpIf('*.less', less(), gulpIf('*.styl', stylus()))))
|
||||
.pipe(autoprefixer())
|
||||
|
194
include/common/barcode.php
Normal file
194
include/common/barcode.php
Normal file
@ -0,0 +1,194 @@
|
||||
<?php
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
$_SESSION['superselect']['dir'] = $options['dir'];
|
||||
$_SESSION['superselect']['idanagrafica'] = $options['idanagrafica'];
|
||||
|
||||
$incorpora_iva = setting('Utilizza prezzi di vendita comprensivi di IVA');
|
||||
$intestazione_prezzo = ($options['dir'] == 'uscita' ? tr('Prezzo di acquisto') : ($incorpora_iva ? tr('Prezzo vendita ivato') : tr('Prezzo vendita imponibile')));
|
||||
|
||||
// Articolo
|
||||
echo '
|
||||
<div class="row">
|
||||
<div class="col-md-offset-4 col-md-4">
|
||||
{[ "type": "text", "label": "'.tr('Barcode').'", "name": "barcode", "value": "", "icon-before": "<i class=\"fa fa-barcode\"></i>" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="alert alert-info hidden" id="articolo-missing">
|
||||
<i class="fa fa-exclamation-circle"></i> '.tr('Nessuna corrispondenza trovata!').'
|
||||
</div>
|
||||
|
||||
<div class="alert alert-warning hidden" id="articolo-qta">
|
||||
<i class="fa fa-warning"></i> '.tr('Articolo con quantità non sufficiente!').'
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<table class="table table-stripped hide" id="articoli_barcode">
|
||||
<tr>
|
||||
<th>'.tr('Articolo').'</th>
|
||||
<th width="25%">'.$intestazione_prezzo.'</th>
|
||||
<th width="20%" class="text-center">'.tr('Sconto').'</th>
|
||||
<th width="10%" class="text-center">'.tr('Q.tà').'</th>
|
||||
<th width="5%" class="text-center">#</th>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div> ';
|
||||
|
||||
echo '
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
init();
|
||||
|
||||
setTimeout(function(){
|
||||
$("#barcode").focus();
|
||||
}, 300);
|
||||
|
||||
$(".modal-body button").attr("disabled", true);
|
||||
});
|
||||
|
||||
// Gestione dell\'invio da tastiera
|
||||
$(document).keypress(function(event){
|
||||
let key = window.event ? event.keyCode : event.which; // IE vs Netscape/Firefox/Opera
|
||||
if (key == "13") {
|
||||
event.preventDefault();
|
||||
$("#barcode").blur()
|
||||
.focus();
|
||||
}
|
||||
});
|
||||
|
||||
var dir = "'.$options['dir'].'";
|
||||
$("#barcode").off("keyup").on("keyup", function (event) {
|
||||
let key = window.event ? event.keyCode : event.which; // IE vs Netscape/Firefox/Opera
|
||||
$("#articolo-missing").addClass("hidden");
|
||||
$("#articolo-qta").addClass("hidden");
|
||||
|
||||
if (key !== 13) {
|
||||
return;
|
||||
}
|
||||
|
||||
$("#barcode").attr("disabled", true);
|
||||
var barcode = $("#barcode").val();
|
||||
if (!barcode){
|
||||
barcodeReset();
|
||||
return;
|
||||
}
|
||||
|
||||
$.getJSON(globals.rootdir + "/ajax_select.php?op=articoli_barcode&barcode=" + barcode,
|
||||
function(response) {
|
||||
let result = response.results[0];
|
||||
if(!result){
|
||||
$("#articolo-missing").removeClass("hidden");
|
||||
barcodeReset();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
let qta_input = $("#riga_barcode_" + result.id).find("[name^=qta]");
|
||||
if (result.qta == 0) {
|
||||
$("#articolo-qta").removeClass("hidden");
|
||||
barcodeReset();
|
||||
return;
|
||||
}
|
||||
|
||||
// Controllo se è già presente l\'articolo, in tal caso incremento la quantità, altrimenti inserisco la riga nuova
|
||||
if (qta_input.length) {
|
||||
let qta = qta_input.val().toEnglish();
|
||||
let nuova_qta = qta + 1;
|
||||
|
||||
if (result.qta < nuova_qta) {
|
||||
$("#articolo-qta").removeClass("hidden");
|
||||
barcodeReset();
|
||||
return;
|
||||
}
|
||||
|
||||
qta_input.val(nuova_qta).trigger("change");
|
||||
} else {
|
||||
let prezzo_unitario = (dir === "uscita") ? result.prezzo_acquisto : result.prezzo_vendita;
|
||||
|
||||
let info_prezzi;
|
||||
if(dir == "entrata") {
|
||||
info_prezzi = "Acquisto: " + result.prezzo_acquisto + " €";
|
||||
}else{
|
||||
info_prezzi = "Vendita: " + result.prezzo_vendita + " €";
|
||||
}
|
||||
|
||||
$("#articoli_barcode").removeClass("hide");
|
||||
cleanup_inputs();
|
||||
|
||||
var text = replaceAll($("#barcode-template").html(), "-id-", result.id);
|
||||
text = text.replace("|prezzo_unitario|", prezzo_unitario)
|
||||
.replace("|info_prezzi|", info_prezzi)
|
||||
.replace("|descrizione|", result.descrizione)
|
||||
.replace("|codice|", result.codice)
|
||||
.replace("|qta|", 1)
|
||||
.replace("|sconto_unitario|", 0)
|
||||
.replace("|tipo_sconto|", "")
|
||||
.replace("|id_dettaglio_fornitore|", result.id_dettaglio_fornitore ? result.id_dettaglio_fornitore : "")
|
||||
|
||||
$("#articoli_barcode tr:last").after(text);
|
||||
restart_inputs();
|
||||
|
||||
$(".modal-body button").attr("disabled", false);
|
||||
}
|
||||
|
||||
barcodeReset();
|
||||
$("#barcode").val("");
|
||||
}, function(){
|
||||
$("#articolo-missing").removeClass("hidden");
|
||||
barcodeReset();
|
||||
});
|
||||
});
|
||||
|
||||
function barcodeReset() {
|
||||
setTimeout(function(){
|
||||
$("#barcode")
|
||||
.attr("disabled",false)
|
||||
.focus();
|
||||
},200);
|
||||
}
|
||||
|
||||
function rimuoviRigaBarcode(id) {
|
||||
if (confirm("'.tr('Eliminare questo articolo?').'")) {
|
||||
$("#riga_barcode_" + id).remove();
|
||||
|
||||
// Disabilito il pulsante di aggiunta se non ci sono articoli inseriti
|
||||
if ($(".inputmask-decimal").length === 0) {
|
||||
$(".modal-body button").attr("disabled", true);
|
||||
$("#articoli_barcode").addClass("hide");
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<table class="hidden">
|
||||
<tbody id="barcode-template">
|
||||
<tr id="riga_barcode_-id-">
|
||||
<td>
|
||||
|codice| - |descrizione|
|
||||
<br><small>|info_prezzi|</small>
|
||||
<input type="hidden" name="id_dettaglio_fornitore[-id-]" value="|id_dettaglio_fornitore|">
|
||||
</td>
|
||||
<td>
|
||||
{[ "type": "number", "name": "prezzo_unitario[-id-]", "value": "|prezzo_unitario|", "required": 0, "icon-after": "'.currency().'" ]}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{[ "type": "number", "name": "sconto[-id-]", "value": "|sconto_unitario|", "icon-after": "choice|untprc||tipo_sconto|", "help": "'.tr('Il valore positivo indica uno sconto. Per applicare una maggiorazione inserire un valore negativo.').'" ]}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{[ "type": "number", "name": "qta[-id-]", "required": 0, "value": "|qta|", "decimals": "qta" ]}
|
||||
</td>
|
||||
|
||||
<td width="5%" class="text-center">
|
||||
<button type="button" class="btn btn-xs btn-danger" onclick="rimuoviRigaBarcode(\'-id-\')">
|
||||
<i class="fa fa-trash"></i>
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>';
|
@ -16,7 +16,7 @@ echo '
|
||||
// Quantità
|
||||
echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "number", "label": "'.tr('Q.tà').'", "name": "qta", "required": 1, "value": "'.$result['qta'].'", "decimals": "qta"'.(isset($result['max_qta']) ? ', "icon-after": "<span class=\"tip\" title=\"'.tr("L'elemento è collegato a un documento: la quantità massima ammessa è relativa allo stato di evasione dell'elemento nel documento di osrigine (quantità dell'elemento / quantità massima ammessa)").'\">/ '.numberFormat($result['max_qta'], 'qta').' <i class=\"fa fa-question-circle-o\"></i></span>"' : '').', "min-value": "'.Translator::numberToLocale($result['qta_evasa']).'" ]}
|
||||
{[ "type": "number", "label": "'.tr('Q.tà').'", "name": "qta", "required": 1, "value": "'.$result['qta'].'", "decimals": "qta"'.(isset($result['max_qta']) ? ', "icon-after": "<span class=\"tip\" title=\"'.tr("L'elemento è collegato a un documento: la quantità massima ammessa è relativa allo stato di evasione dell'elemento nel documento di origine (quantità dell'elemento / quantità massima ammessa)").'\">/ '.numberFormat($result['max_qta'], 'qta').' <i class=\"fa fa-question-circle-o\"></i></span>"' : '').', "min-value": "'.Translator::numberToLocale($result['qta_evasa']).'" ]}
|
||||
</div>';
|
||||
|
||||
// Unità di misura
|
||||
|
@ -151,7 +151,7 @@ abstract class Description extends Model
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public function copiaIn(Document $document, $qta = null, $is_evasione = true)
|
||||
public function copiaIn(Document $document, $qta = null)
|
||||
{
|
||||
// Individuazione classe di destinazione
|
||||
$class = get_class($document);
|
||||
@ -183,6 +183,7 @@ abstract class Description extends Model
|
||||
unset($attributes[$model->getParentID()]);
|
||||
|
||||
// Riferimento di origine per l'evasione automatica della riga
|
||||
$is_evasione = true;
|
||||
if ($is_evasione) {
|
||||
$model->original_id = $this->id;
|
||||
$model->original_type = $current;
|
||||
@ -191,7 +192,7 @@ abstract class Description extends Model
|
||||
// Impostazione del genitore
|
||||
$model->setParent($document);
|
||||
|
||||
// Azioni specifiche di inizalizzazione
|
||||
// Azioni specifiche di inizializzazione
|
||||
$model->customInitCopiaIn($this);
|
||||
|
||||
$model->save();
|
||||
|
@ -23,6 +23,7 @@ abstract class Row extends Description
|
||||
protected $appends = [
|
||||
'prezzo_unitario_corrente',
|
||||
'sconto_unitario_corrente',
|
||||
'max_qta',
|
||||
];
|
||||
|
||||
public static function build(Document $document, $bypass = false)
|
||||
|
@ -174,6 +174,7 @@ if (Auth::check()) {
|
||||
order_manager_id: "'.($dbo->isInstalled() ? Modules::get('Stato dei servizi')['id'] : '').'",
|
||||
dataload_page_buffer: '.setting('Lunghezza in pagine del buffer Datatables').',
|
||||
tempo_attesa_ricerche: '.setting('Tempo di attesa ricerche in secondi').',
|
||||
restrict_summables_to_selected: '.setting('Totali delle tabelle ristretti alla selezione').',
|
||||
};
|
||||
</script>';
|
||||
} else {
|
||||
|
4344
locale/catalog.pot
4344
locale/catalog.pot
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -4,13 +4,13 @@ include_once __DIR__.'/../../../core.php';
|
||||
|
||||
switch ($resource) {
|
||||
case 'clienti':
|
||||
$query = "SELECT an_anagrafiche.idanagrafica AS id, CONCAT(ragione_sociale, IF(citta IS NULL OR citta = '', '', CONCAT(' (', citta, ')')), IF(deleted_at IS NULL, '', ' (".tr('eliminata').")')) AS descrizione, idtipointervento_default FROM an_anagrafiche INNER JOIN (an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica) ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica |where| ORDER BY ragione_sociale";
|
||||
$query = "SELECT an_anagrafiche.idanagrafica AS id, CONCAT(ragione_sociale, IF(citta IS NULL OR citta = '', '', CONCAT(' (', citta, ')')), IF(deleted_at IS NULL, '', ' (".tr('eliminata').")')) AS descrizione, idtipointervento_default, in_tipiintervento.descrizione AS idtipointervento_descrizione FROM an_anagrafiche INNER JOIN (an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica) ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica LEFT JOIN in_tipiintervento ON an_anagrafiche.idtipointervento_default=in_tipiintervento.idtipointervento |where| ORDER BY ragione_sociale";
|
||||
|
||||
foreach ($elements as $element) {
|
||||
$filter[] = 'an_anagrafiche.idanagrafica='.prepare($element);
|
||||
}
|
||||
|
||||
$where[] = "descrizione='Cliente'";
|
||||
$where[] = "an_tipianagrafiche.descrizione='Cliente'";
|
||||
if (empty($filter)) {
|
||||
$where[] = 'deleted_at IS NULL';
|
||||
}
|
||||
@ -22,6 +22,7 @@ switch ($resource) {
|
||||
}
|
||||
|
||||
$custom['idtipointervento'] = 'idtipointervento_default';
|
||||
$custom['idtipointervento_descrizione'] = 'idtipointervento_descrizione';
|
||||
|
||||
break;
|
||||
|
||||
|
@ -296,7 +296,7 @@ if ($is_cliente or $is_fornitore or $is_tecnico) {
|
||||
<div class="tab-pane '.(!$is_cliente ? 'hide' : 'active').'" id="cliente">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "'.tr('Agenti secondari').'", "multiple": "1", "name": "idagenti[]", "values": "query=SELECT an_anagrafiche.idanagrafica AS id, IF(deleted_at IS NOT NULL, CONCAT(ragione_sociale, \' (Eliminato)\'), ragione_sociale ) AS descrizione FROM an_anagrafiche INNER JOIN (an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica) ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica WHERE (descrizione=\'Agente\' AND deleted_at IS NULL AND an_anagrafiche.idanagrafica NOT IN (SELECT idagente FROM an_anagrafiche WHERE idanagrafica = '.prepare($record['idanagrafica']).')) OR (an_anagrafiche.idanagrafica IN (SELECT idagente FROM an_anagrafiche_agenti WHERE idanagrafica = '.prepare($record['idanagrafica']).') ) ORDER BY ragione_sociale", "value": "$idagenti$" ]}
|
||||
{[ "type": "select", "label": "'.tr('Tipo attività predefinita').'", "name": "idtipointervento_default", "values": "query=SELECT idtipointervento AS id, descrizione FROM in_tipiintervento ORDER BY descrizione ASC", "value": "$idtipointervento_default$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
@ -336,11 +336,11 @@ if ($is_cliente or $is_fornitore or $is_tecnico) {
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "'.tr('Tipo attività predefinita').'", "name": "idtipointervento_default", "values": "query=SELECT idtipointervento AS id, descrizione FROM in_tipiintervento ORDER BY descrizione ASC", "value": "$idtipointervento_default$" ]}
|
||||
{[ "type": "select", "label": "'.tr('Agente principale').'", "name": "idagente", "values": "query=SELECT an_anagrafiche.idanagrafica AS id, IF(deleted_at IS NOT NULL, CONCAT(ragione_sociale, \' (Eliminato)\'), ragione_sociale ) AS descrizione FROM an_anagrafiche INNER JOIN (an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica) ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica WHERE (descrizione=\'Agente\' AND deleted_at IS NULL)'.(isset($record['idagente']) ? 'OR (an_anagrafiche.idanagrafica = '.prepare($record['idagente']).' AND deleted_at IS NOT NULL) ' : '').'ORDER BY ragione_sociale", "value": "$idagente$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "'.tr('Agente principale').'", "name": "idagente", "values": "query=SELECT an_anagrafiche.idanagrafica AS id, IF(deleted_at IS NOT NULL, CONCAT(ragione_sociale, \' (Eliminato)\'), ragione_sociale ) AS descrizione FROM an_anagrafiche INNER JOIN (an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica) ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica WHERE (descrizione=\'Agente\' AND deleted_at IS NULL)'.(isset($record['idagente']) ? 'OR (an_anagrafiche.idanagrafica = '.prepare($record['idagente']).' AND deleted_at IS NOT NULL) ' : '').'ORDER BY ragione_sociale", "value": "$idagente$" ]}
|
||||
{[ "type": "select", "label": "'.tr('Agenti secondari').'", "multiple": "1", "name": "idagenti[]", "values": "query=SELECT an_anagrafiche.idanagrafica AS id, IF(deleted_at IS NOT NULL, CONCAT(ragione_sociale, \' (Eliminato)\'), ragione_sociale ) AS descrizione FROM an_anagrafiche INNER JOIN (an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica) ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica WHERE (descrizione=\'Agente\' AND deleted_at IS NULL AND an_anagrafiche.idanagrafica NOT IN (SELECT idagente FROM an_anagrafiche WHERE idanagrafica = '.prepare($record['idanagrafica']).')) OR (an_anagrafiche.idanagrafica IN (SELECT idagente FROM an_anagrafiche_agenti WHERE idanagrafica = '.prepare($record['idanagrafica']).') ) ORDER BY ragione_sociale", "value": "$idagenti$" ]}
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
@ -350,19 +350,16 @@ if ($is_cliente or $is_fornitore or $is_tecnico) {
|
||||
echo '
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
';
|
||||
<p><b>'.tr('Piano dei conti cliente').'</b></p>';
|
||||
|
||||
if (!empty($conto['numero_conto'])) {
|
||||
$piano_dei_conti_cliente = tr('_NAME_', [
|
||||
'_NAME_' => $conto['numero'].'.'.$conto['numero_conto'].' '.htmlentities($conto['descrizione']),
|
||||
]);
|
||||
echo Modules::link('Piano dei conti', null, null, null, 'class="pull-right"', 1, 'movimenti-'.$conto['id']);
|
||||
$piano_dei_conti_cliente = $conto['numero'].'.'.$conto['numero_conto'].' '.$conto['descrizione'];
|
||||
echo Modules::link('Piano dei conti', null, $piano_dei_conti_cliente, null, '', 1, 'movimenti-'.$conto['id']);
|
||||
} else {
|
||||
$piano_dei_conti_cliente = tr('Nessuno');
|
||||
}
|
||||
|
||||
echo '
|
||||
{[ "type": "select", "label": "'.tr('Piano dei conti cliente').'", "name": "piano_dei_conti_cliente", "values": "list=\"\": \"'.$piano_dei_conti_cliente.'\"", "readonly": 1 ]}
|
||||
</div>
|
||||
</div>
|
||||
</div>';
|
||||
@ -394,28 +391,21 @@ if ($is_cliente or $is_fornitore or $is_tecnico) {
|
||||
{[ "type": "select", "label": "'.tr('Listino articoli').'", "name": "idlistino_acquisti", "values": "query=SELECT id, nome AS descrizione FROM mg_listini ORDER BY nome ASC", "value": "$idlistino_acquisti$" ]}
|
||||
</div>';
|
||||
|
||||
echo '
|
||||
<div class="col-md-6">';
|
||||
|
||||
/*echo '
|
||||
<p>'.tr('Piano dei conti collegato: _NAME_', [
|
||||
'_NAME_' => $conto['numero'].'.'.$conto['numero_conto'].' '.$conto['descrizione'],
|
||||
]).Modules::link('Piano dei conti', null, '').'</p>';*/
|
||||
|
||||
// Collegamento con il conto
|
||||
$conto = $dbo->fetchOne('SELECT co_pianodeiconti2.numero as numero, co_pianodeiconti3.numero as numero_conto, co_pianodeiconti3.descrizione as descrizione FROM co_pianodeiconti3 INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE co_pianodeiconti3.id = '.prepare($record['idconto_fornitore']));
|
||||
$conto = $dbo->fetchOne('SELECT co_pianodeiconti3.id, co_pianodeiconti2.numero as numero, co_pianodeiconti3.numero as numero_conto, co_pianodeiconti3.descrizione as descrizione FROM co_pianodeiconti3 INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE co_pianodeiconti3.id = '.prepare($record['idconto_fornitore']));
|
||||
|
||||
echo '
|
||||
<div class="col-md-6">
|
||||
<p><b>'.tr('Piano dei conti fornitore').'</b></p>';
|
||||
|
||||
if (!empty($conto['numero_conto'])) {
|
||||
$piano_dei_conti_fornitore = tr('_NAME_', [
|
||||
'_NAME_' => $conto['numero'].'.'.$conto['numero_conto'].' '.$conto['descrizione'],
|
||||
]);
|
||||
echo Modules::link('Piano dei conti', null, null, null, 'class="pull-right"');
|
||||
$piano_dei_conti_fornitore = $conto['numero'].'.'.$conto['numero_conto'].' '.$conto['descrizione'];
|
||||
echo Modules::link('Piano dei conti', null, $piano_dei_conti_fornitore, null, '', 1, 'movimenti-'.$conto['id']);
|
||||
} else {
|
||||
$piano_dei_conti_fornitore = tr('Nessuno');
|
||||
}
|
||||
|
||||
echo '
|
||||
{[ "type": "select", "label": "'.tr('Piano dei conti fornitore').'", "name": "piano_dei_conti_fornitore", "values": "list=\"\": \"'.$piano_dei_conti_fornitore.'\"", "readonly": 1 ]}
|
||||
</div>
|
||||
</div>
|
||||
</div>';
|
||||
@ -444,7 +434,7 @@ if ($is_cliente or $is_fornitore or $is_tecnico) {
|
||||
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Numero d\'iscrizione registro imprese'); ?>", "name": "codiceri", "value": "$codiceri$", "help": "<?php echo tr('Il numero registro imprese è il numero di iscrizione attribuito dal Registro Imprese della Camera di Commercio.'); ?>" ]}
|
||||
</div>
|
||||
@ -454,7 +444,7 @@ if ($is_cliente or $is_fornitore or $is_tecnico) {
|
||||
'_PATTERN_' => 'RM-123456',
|
||||
]); ?>" ]}
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<!-- campi già specificati in Codice R.E.A., da eliminare nelle prossime release -->
|
||||
<!--div class="col-md-3">
|
||||
@ -464,7 +454,7 @@ if ($is_cliente or $is_fornitore or $is_tecnico) {
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Città iscr. C.C.I.A.A.'); ?>", "name": "cciaa_citta", "value": "$cciaa_citta$" ]}
|
||||
</div-->
|
||||
|
||||
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
@ -508,7 +498,7 @@ if ($is_cliente or $is_fornitore or $is_tecnico) {
|
||||
<?php
|
||||
if (in_array($id_azienda, $tipi_anagrafica)) {
|
||||
echo '
|
||||
<p class=\'badge badge-info\' >'.tr('Questa anagrafica è di tipo "Azienda"').'.</p>';
|
||||
<p class="badge badge-info">'.tr('Questa anagrafica è di tipo "Azienda"').'.</p>';
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
|
@ -6,17 +6,34 @@ switch ($resource) {
|
||||
case 'articoli':
|
||||
$sedi_non_impostate = !isset($superselect['idsede_partenza']) && !isset($superselect['idsede_destinazione']);
|
||||
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
|
||||
$usare_dettaglio_fornitore = $superselect['dir'] == 'uscita';
|
||||
|
||||
$query = 'SELECT
|
||||
mg_articoli.id,
|
||||
mg_articoli.barcode,
|
||||
mg_articoli.'.($prezzi_ivati ? 'prezzo_vendita_ivato' : 'prezzo_vendita').' AS prezzo_vendita,
|
||||
mg_articoli.prezzo_vendita_ivato AS prezzo_vendita_ivato,';
|
||||
|
||||
// Informazioni relative al fornitore specificato dal documenti di acquisto
|
||||
if ($usare_dettaglio_fornitore) {
|
||||
$query .= '
|
||||
IFNULL(mg_fornitore_articolo.codice_fornitore, mg_articoli.codice) AS codice,
|
||||
IFNULL(mg_fornitore_articolo.descrizione, mg_articoli.descrizione) AS descrizione,
|
||||
IFNULL(mg_fornitore_articolo.prezzo_acquisto, mg_articoli.prezzo_acquisto) AS prezzo_acquisto,
|
||||
mg_articoli.'.($prezzi_ivati ? 'prezzo_vendita_ivato' : 'prezzo_vendita').' AS prezzo_vendita,
|
||||
mg_articoli.prezzo_vendita_ivato AS prezzo_vendita_ivato,
|
||||
IFNULL(mg_fornitore_articolo.qta_minima, 0) AS qta_minima,
|
||||
mg_fornitore_articolo.id AS id_dettaglio_fornitore,
|
||||
mg_fornitore_articolo.id AS id_dettaglio_fornitore,';
|
||||
}
|
||||
// Informazioni dell'articolo per i documenti di vendita
|
||||
else {
|
||||
$query .= '
|
||||
mg_articoli.codice AS codice,
|
||||
mg_articoli.descrizione AS descrizione,
|
||||
mg_articoli.prezzo_acquisto AS prezzo_acquisto,
|
||||
0 AS qta_minima,
|
||||
NULL AS id_dettaglio_fornitore,';
|
||||
}
|
||||
|
||||
$query .= '
|
||||
round(mg_articoli.qta,'.setting('Cifre decimali per quantità').') AS qta,
|
||||
mg_articoli.um,
|
||||
mg_articoli.servizio,
|
||||
@ -79,6 +96,11 @@ switch ($resource) {
|
||||
$search_fields[] = 'mg_articoli.descrizione LIKE '.prepare('%'.$search.'%');
|
||||
$search_fields[] = 'mg_articoli.codice LIKE '.prepare('%'.$search.'%');
|
||||
$search_fields[] = 'mg_articoli.barcode LIKE '.prepare('%'.$search.'%');
|
||||
|
||||
if ($usare_dettaglio_fornitore) {
|
||||
$search_fields[] = 'mg_fornitore_articolo.descrizione LIKE '.prepare('%'.$search.'%');
|
||||
$search_fields[] = 'mg_fornitore_articolo.codice_fornitore LIKE '.prepare('%'.$search.'%');
|
||||
}
|
||||
}
|
||||
|
||||
$custom = [
|
||||
@ -254,5 +276,46 @@ switch ($resource) {
|
||||
$search_fields[] = 'valore LIKE '.prepare('%'.$search.'%');
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 'articoli_barcode':
|
||||
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
|
||||
|
||||
$query = 'SELECT mg_articoli.*,
|
||||
IFNULL(mg_fornitore_articolo.codice_fornitore, mg_articoli.codice) AS codice,
|
||||
IFNULL(mg_fornitore_articolo.descrizione, mg_articoli.descrizione) AS descrizione,
|
||||
IFNULL(mg_fornitore_articolo.prezzo_acquisto, mg_articoli.prezzo_acquisto) AS prezzo_acquisto,
|
||||
mg_articoli.'.($prezzi_ivati ? 'prezzo_vendita_ivato' : 'prezzo_vendita').' AS prezzo_vendita,
|
||||
mg_articoli.prezzo_vendita_ivato AS prezzo_vendita_ivato,
|
||||
IFNULL(mg_fornitore_articolo.qta_minima, 0) AS qta_minima,
|
||||
mg_fornitore_articolo.id AS id_dettaglio_fornitore
|
||||
FROM mg_articoli
|
||||
LEFT JOIN mg_fornitore_articolo ON mg_fornitore_articolo.id_articolo = mg_articoli.id AND mg_fornitore_articolo.deleted_at IS NULL AND mg_fornitore_articolo.id_fornitore = '.prepare($superselect['idanagrafica']).'
|
||||
|where|';
|
||||
|
||||
$where[] = 'barcode='.prepare(get('barcode'));
|
||||
$where[] = 'mg_articoli.attivo = 1';
|
||||
$where[] = 'mg_articoli.deleted_at IS NULL';
|
||||
|
||||
$custom = [
|
||||
'id' => 'id',
|
||||
'codice' => 'codice',
|
||||
'descrizione' => 'descrizione',
|
||||
'qta' => 'qta',
|
||||
'um' => 'um',
|
||||
'categoria' => 'categoria',
|
||||
'sottocategoria' => 'sottocategoria',
|
||||
'idiva_vendita' => 'idiva_vendita',
|
||||
'iva_vendita' => 'iva_vendita',
|
||||
'idconto_vendita' => 'idconto_vendita',
|
||||
'idconto_vendita_title' => 'idconto_vendita_title',
|
||||
'idconto_acquisto' => 'idconto_acquisto',
|
||||
'idconto_acquisto_title' => 'idconto_acquisto_title',
|
||||
'prezzo_acquisto' => 'prezzo_acquisto',
|
||||
'prezzo_vendita' => 'prezzo_vendita',
|
||||
'id_dettaglio_fornitore' => 'id_dettaglio_fornitore',
|
||||
'barcode' => 'barcode',
|
||||
];
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -114,6 +114,38 @@ switch (post('op')) {
|
||||
|
||||
break;
|
||||
|
||||
case 'manage_barcode':
|
||||
foreach (post('qta') as $id_articolo => $qta) {
|
||||
if ($id_articolo == '-id-') {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Dati di input
|
||||
$sconto = post('sconto')[$id_articolo];
|
||||
$tipo_sconto = post('tipo_sconto')[$id_articolo];
|
||||
$prezzo_unitario = post('prezzo_unitario')[$id_articolo];
|
||||
$id_dettaglio_fornitore = post('id_dettaglio_fornitore')[$id_articolo];
|
||||
$id_iva = $originale->idiva_vendita ? $originale->idiva_vendita : setting('Iva predefinita');
|
||||
|
||||
// Creazione articolo
|
||||
$originale = ArticoloOriginale::find($id_articolo);
|
||||
$articolo = Articolo::build($contratto, $originale);
|
||||
$articolo->id_dettaglio_fornitore = $id_dettaglio_fornitore ?: null;
|
||||
|
||||
$articolo->setPrezzoUnitario($prezzo_unitario, $id_iva);
|
||||
if ($dir == 'entrata') {
|
||||
$articolo->costo_unitario = $originale->prezzo_acquisto;
|
||||
}
|
||||
$articolo->setSconto($sconto, $tipo_sconto);
|
||||
$articolo->qta = $qta;
|
||||
|
||||
$articolo->save();
|
||||
}
|
||||
|
||||
flash()->info(tr('Articoli aggiunti!'));
|
||||
|
||||
break;
|
||||
|
||||
case 'manage_articolo':
|
||||
if (post('idriga') != null) {
|
||||
$articolo = Articolo::find(post('idriga'));
|
||||
|
@ -27,6 +27,7 @@ if (!empty($id_documento)) {
|
||||
$id_anagrafica = $documento_finale->idanagrafica;
|
||||
|
||||
$_SESSION['superselect']['idanagrafica'] = $id_anagrafica;
|
||||
$_SESSION['superselect']['stato'] = 'is_fatturabile';
|
||||
|
||||
echo '
|
||||
<div class="row">
|
||||
@ -36,7 +37,7 @@ echo '
|
||||
</div>
|
||||
|
||||
<div id="righe_documento">
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="alert alert-info" id="box-loading">
|
||||
@ -46,20 +47,20 @@ echo '
|
||||
$file = basename(__FILE__);
|
||||
echo '
|
||||
<script>$(document).ready(init)</script>
|
||||
|
||||
|
||||
<script>
|
||||
var content = $("#righe_documento");
|
||||
var loader = $("#box-loading");
|
||||
|
||||
|
||||
$(document).ready(function(){
|
||||
loader.hide();
|
||||
});
|
||||
|
||||
|
||||
$("#id_documento").on("change", function(){
|
||||
loader.show();
|
||||
|
||||
var id = $(this).selectData() ? $(this).selectData().id : "";
|
||||
|
||||
|
||||
content.html("");
|
||||
content.load("'.$structure->fileurl($file).'?id_module='.$id_module.'&id_record='.$id_record.'&id_documento=" + id, function() {
|
||||
loader.hide();
|
||||
|
@ -310,6 +310,11 @@ if (!$block_edit) {
|
||||
<i class="fa fa-plus"></i> '.tr('Articolo').'
|
||||
</a>';
|
||||
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary"data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_barcode" data-toggle="tooltip" data-title="'.tr('Aggiungi articoli tramite barcode').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Barcode').'
|
||||
</a>';
|
||||
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_riga" data-toggle="tooltip" data-title="'.tr('Aggiungi riga').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Riga').'
|
||||
|
@ -207,31 +207,33 @@ if (!empty($interventi)) {
|
||||
</td>
|
||||
</tr>';
|
||||
|
||||
// Totali per stato
|
||||
echo '
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<br><b>'.tr('Totale interventi per stato', [], ['upper' => true]).'</b>
|
||||
</td>
|
||||
</tr>';
|
||||
|
||||
$stati = $interventi->groupBy('idstatointervento');
|
||||
foreach ($stati as $interventi_collegati) {
|
||||
$stato = $interventi_collegati->first()->stato;
|
||||
$totale_stato = sum(array_column($interventi_collegati->toArray(), 'totale_imponibile'));
|
||||
|
||||
if (count($stati) > 0) {
|
||||
// Totali per stato
|
||||
echo '
|
||||
<tr>
|
||||
<td colspan="3"></td>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<br><b>'.tr('Totale interventi per stato', [], ['upper' => true]).'</b>
|
||||
</td>
|
||||
</tr>';
|
||||
|
||||
<td class="text-right" colspan="2" style="background:'.$stato->colore.';">
|
||||
<big><b>'.$stato->descrizione.':</b></big>
|
||||
</td>
|
||||
foreach ($stati as $interventi_collegati) {
|
||||
$stato = $interventi_collegati->first()->stato;
|
||||
$totale_stato = sum(array_column($interventi_collegati->toArray(), 'totale_imponibile'));
|
||||
|
||||
<td class="text-right">
|
||||
<big><b>'.moneyFormat($totale_stato).'</b></big>
|
||||
</td>
|
||||
</tr>';
|
||||
echo '
|
||||
<tr>
|
||||
<td colspan="3"></td>
|
||||
|
||||
<td class="text-right" colspan="2" style="background:'.$stato->colore.';">
|
||||
<big><b>'.$stato->descrizione.':</b></big>
|
||||
</td>
|
||||
|
||||
<td class="text-right">
|
||||
<big><b>'.moneyFormat($totale_stato).'</b></big>
|
||||
</td>
|
||||
</tr>';
|
||||
}
|
||||
}
|
||||
|
||||
echo '
|
||||
@ -269,16 +271,16 @@ if (!empty($totale_ore_contratto)) {
|
||||
echo '
|
||||
<div class="row">
|
||||
<big class="col-md-4 col-md-offset-4 text-center">
|
||||
<table class="table text-left">
|
||||
<table class="table text-left table-striped table-bordered">
|
||||
<tr>
|
||||
<td colspan="2">'.tr('Ore in contratto').':</td>
|
||||
<td colspan="2" class="text-right">'.Translator::numberToLocale($totale_ore_contratto).'</td>
|
||||
<td>'.tr('Ore a contratto').':</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($totale_ore_contratto).'</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>'.tr('Ore erogate totali').':</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($totale_ore).'</td>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td>'.tr('Ore residue totali').':</td>
|
||||
<td class="text-right">'.Translator::numberToLocale(floatval($totale_ore_contratto) - floatval($totale_ore)).'</td>
|
||||
</tr>
|
||||
@ -286,8 +288,9 @@ if (!empty($totale_ore_contratto)) {
|
||||
<tr>
|
||||
<td>'.tr('Ore erogate concluse').':</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($totale_ore_completate).'</td>
|
||||
|
||||
<td>'.tr('Ore residue').':</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>'.tr('Ore residue concluse').':</td>
|
||||
<td class="text-right">'.Translator::numberToLocale(floatval($totale_ore_contratto) - floatval($totale_ore_completate)).'</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
@ -53,6 +53,10 @@ if (get('is_descrizione') !== null) {
|
||||
$file = 'sconto';
|
||||
|
||||
$options['op'] = 'manage_sconto';
|
||||
} elseif (get('is_barcode') !== null) {
|
||||
$file = 'barcode';
|
||||
|
||||
$options['op'] = 'manage_barcode';
|
||||
}
|
||||
|
||||
echo App::load($file.'.php', $result, $options);
|
||||
|
@ -170,16 +170,16 @@ switch (get('op')) {
|
||||
foreach ($rsp as $r) {
|
||||
if ($r['mese'] == $mese) {
|
||||
if (date('Ymd', strtotime($r['data_richiesta'])) < date('Ymd')) {
|
||||
$class = 'fc-event-danger';
|
||||
$class = 'danger';
|
||||
} else {
|
||||
$class = 'fc-event-primary';
|
||||
$class = 'primary';
|
||||
}
|
||||
|
||||
echo '
|
||||
<div class="fc-event '.$class.'" data-id="'.$r['id'].'" data-idcontratto="'.$r['idcontratto'].'" data-ref="'.$r['ref'].'">'.(($r['ref'] == 'intervento') ? '<i class=\'fa fa-wrench pull-right\'></i>' : '<i class=\'fa fa-file-text-o pull-right\'></i>').'
|
||||
<div class="fc-event fc-event-'.$class.'" data-id="'.$r['id'].'" data-idcontratto="'.$r['idcontratto'].'" data-ref="'.$r['ref'].'">'.(($r['ref'] == 'intervento') ? '<i class=\'fa fa-wrench pull-right\'></i>' : '<i class=\'fa fa-file-text-o pull-right\'></i>').'
|
||||
<b>'.$r['ragione_sociale'].'</b><br>'.Translator::dateToLocale($r['data_richiesta']).' ('.$r['tipointervento'].')<div class="request" >'.(!empty($r['richiesta']) ? ' - '.$r['richiesta'] : '').'</div>'.(!empty($r['nomecontratto']) ? '<br><b>Contratto:</b> '.$r['nomecontratto'] : '').
|
||||
(!empty($r['data_scadenza'] and $r['data_scadenza'] != '0000-00-00 00:00:00') ? '<br><small>'.tr('entro il: ').Translator::dateToLocale($r['data_scadenza']).'</small>' : '').
|
||||
(($r['ref'] == 'intervento') ? (Modules::link('Interventi', $r['id'], '<i class="fa fa-eye"></i>', null, 'title="'.tr('Visualizza scheda').'" class="btn btn-primary btn-xs pull-right"')).'<br>' : (Modules::link('Contratti', $r['idcontratto'], '<i class="fa fa-eye"></i>', null, 'title="'.tr('Visualizza scheda').'" class="btn btn-primary btn-xs pull-right"')).'<br>').
|
||||
(($r['ref'] == 'intervento') ? (Modules::link('Interventi', $r['id'], '<i class="fa fa-eye"></i>', null, 'title="'.tr('Visualizza scheda').'" class="btn btn-'.$class.' btn-xs pull-right"')).'<br>' : (Modules::link('Contratti', $r['idcontratto'], '<i class="fa fa-eye"></i>', null, 'title="'.tr('Visualizza scheda').'" class="btn btn-'.$class.' btn-xs pull-right"')).'<br>').
|
||||
'</div>';
|
||||
}
|
||||
} ?>
|
||||
|
@ -133,6 +133,38 @@ switch (post('op')) {
|
||||
flash()->info(tr('Ddt modificato correttamente!'));
|
||||
break;
|
||||
|
||||
case 'manage_barcode':
|
||||
foreach (post('qta') as $id_articolo => $qta) {
|
||||
if ($id_articolo == '-id-') {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Dati di input
|
||||
$sconto = post('sconto')[$id_articolo];
|
||||
$tipo_sconto = post('tipo_sconto')[$id_articolo];
|
||||
$prezzo_unitario = post('prezzo_unitario')[$id_articolo];
|
||||
$id_dettaglio_fornitore = post('id_dettaglio_fornitore')[$id_articolo];
|
||||
$id_iva = $originale->idiva_vendita ? $originale->idiva_vendita : setting('Iva predefinita');
|
||||
|
||||
// Creazione articolo
|
||||
$originale = ArticoloOriginale::find($id_articolo);
|
||||
$articolo = Articolo::build($ddt, $originale);
|
||||
$articolo->id_dettaglio_fornitore = $id_dettaglio_fornitore ?: null;
|
||||
|
||||
$articolo->setPrezzoUnitario($prezzo_unitario, $id_iva);
|
||||
if ($dir == 'entrata') {
|
||||
$articolo->costo_unitario = $originale->prezzo_acquisto;
|
||||
}
|
||||
$articolo->setSconto($sconto, $tipo_sconto);
|
||||
$articolo->qta = $qta;
|
||||
|
||||
$articolo->save();
|
||||
}
|
||||
|
||||
flash()->info(tr('Articoli aggiunti!'));
|
||||
|
||||
break;
|
||||
|
||||
case 'manage_articolo':
|
||||
if (post('idriga') != null) {
|
||||
$articolo = Articolo::find(post('idriga'));
|
||||
@ -277,7 +309,7 @@ switch (post('op')) {
|
||||
if (post('evadere')[$riga->id] == 'on' and !empty(post('qta_da_evadere')[$riga->id])) {
|
||||
$qta = post('qta_da_evadere')[$riga->id];
|
||||
|
||||
$copia = $riga->copiaIn($ddt, $qta, $is_evasione);
|
||||
$copia = $riga->copiaIn($ddt, $qta);
|
||||
|
||||
// Aggiornamento seriali dalla riga dell'ordine
|
||||
if ($copia->isArticolo()) {
|
||||
|
@ -50,43 +50,45 @@ switch (post('op')) {
|
||||
$id_anagrafica = $anagrafica->id;
|
||||
|
||||
// Proseguo solo se i documenti scelti sono fatturabili
|
||||
$righe = $documento_import->getRighe();
|
||||
if (!empty($righe)) {
|
||||
++$numero_totale;
|
||||
if ($documento_import->isImportabile()) {
|
||||
$righe = $documento_import->getRighe();
|
||||
if (!empty($righe)) {
|
||||
++$numero_totale;
|
||||
|
||||
// Ricerca fattura per anagrafica tra le registrate
|
||||
$fattura = $documenti->first(function ($item, $key) use ($id_anagrafica) {
|
||||
return $item->anagrafica->id == $id_anagrafica;
|
||||
});
|
||||
// Ricerca fattura per anagrafica tra le registrate
|
||||
$fattura = $documenti->first(function ($item, $key) use ($id_anagrafica) {
|
||||
return $item->anagrafica->id == $id_anagrafica;
|
||||
});
|
||||
|
||||
// Ricerca fattura per anagrafica se l'impostazione di accodamento è selezionata
|
||||
if (!empty($accodare) && empty($fattura)) {
|
||||
$fattura = Fattura::where('idanagrafica', $id_anagrafica)
|
||||
->where('idstatodocumento', $stato_documenti_accodabili->id)
|
||||
->where('idtipodocumento', $tipo_documento->id)
|
||||
->first();
|
||||
// Ricerca fattura per anagrafica se l'impostazione di accodamento è selezionata
|
||||
if (!empty($accodare) && empty($fattura)) {
|
||||
$fattura = Fattura::where('idanagrafica', $id_anagrafica)
|
||||
->where('idstatodocumento', $stato_documenti_accodabili->id)
|
||||
->where('idtipodocumento', $tipo_documento->id)
|
||||
->first();
|
||||
|
||||
if (!empty($fattura)) {
|
||||
if (!empty($fattura)) {
|
||||
$documenti->push($fattura);
|
||||
}
|
||||
}
|
||||
|
||||
// Creazione fattura per anagrafica
|
||||
if (empty($fattura)) {
|
||||
$fattura = Fattura::build($anagrafica, $tipo_documento, $data, $id_segment);
|
||||
$documenti->push($fattura);
|
||||
}
|
||||
}
|
||||
|
||||
// Creazione fattura per anagrafica
|
||||
if (empty($fattura)) {
|
||||
$fattura = Fattura::build($anagrafica, $tipo_documento, $data, $id_segment);
|
||||
$documenti->push($fattura);
|
||||
}
|
||||
// Inserimento righe
|
||||
foreach ($righe as $riga) {
|
||||
$qta = $riga->qta_rimanente;
|
||||
|
||||
// Inserimento righe
|
||||
foreach ($righe as $riga) {
|
||||
$qta = $riga->qta_rimanente;
|
||||
if ($qta > 0) {
|
||||
$copia = $riga->copiaIn($fattura, $qta);
|
||||
|
||||
if ($qta > 0) {
|
||||
$copia = $riga->copiaIn($fattura, $qta);
|
||||
|
||||
// Aggiornamento seriali dalla riga dell'ordine
|
||||
if ($copia->isArticolo()) {
|
||||
$copia->serials = $riga->serials;
|
||||
// Aggiornamento seriali dalla riga dell'ordine
|
||||
if ($copia->isArticolo()) {
|
||||
$copia->serials = $riga->serials;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -329,6 +329,11 @@ if (!$block_edit) {
|
||||
<i class="fa fa-plus"></i> '.tr('Articolo').'
|
||||
</a>';
|
||||
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary"data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_barcode" data-toggle="tooltip" data-title="'.tr('Aggiungi articoli tramite barcode').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Barcode').'
|
||||
</a>';
|
||||
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_riga" data-toggle="tooltip" data-title="'.tr('Aggiungi riga').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Riga').'
|
||||
|
@ -54,6 +54,10 @@ if (get('is_descrizione') !== null) {
|
||||
$file = 'sconto';
|
||||
|
||||
$options['op'] = 'manage_sconto';
|
||||
} elseif (get('is_barcode') !== null) {
|
||||
$file = 'barcode';
|
||||
|
||||
$options['op'] = 'manage_barcode';
|
||||
}
|
||||
|
||||
echo App::load($file.'.php', $result, $options);
|
||||
|
@ -392,6 +392,43 @@ switch (post('op')) {
|
||||
|
||||
break;
|
||||
|
||||
case 'manage_barcode':
|
||||
foreach (post('qta') as $id_articolo => $qta) {
|
||||
if ($id_articolo == '-id-') {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Dati di input
|
||||
$sconto = post('sconto')[$id_articolo];
|
||||
$tipo_sconto = post('tipo_sconto')[$id_articolo];
|
||||
$prezzo_unitario = post('prezzo_unitario')[$id_articolo];
|
||||
$id_dettaglio_fornitore = post('id_dettaglio_fornitore')[$id_articolo];
|
||||
$id_iva = $originale->idiva_vendita ? $originale->idiva_vendita : setting('Iva predefinita');
|
||||
|
||||
// Inversione quantità per Note
|
||||
if (!empty($record['is_reversed'])) {
|
||||
$qta = -$qta;
|
||||
}
|
||||
|
||||
// Creazione articolo
|
||||
$originale = ArticoloOriginale::find($id_articolo);
|
||||
$articolo = Articolo::build($fattura, $originale);
|
||||
$articolo->id_dettaglio_fornitore = $id_dettaglio_fornitore ?: null;
|
||||
|
||||
$articolo->setPrezzoUnitario($prezzo_unitario, $id_iva);
|
||||
if ($dir == 'entrata') {
|
||||
$articolo->costo_unitario = $originale->prezzo_acquisto;
|
||||
}
|
||||
$articolo->setSconto($sconto, $tipo_sconto);
|
||||
$articolo->qta = $qta;
|
||||
|
||||
$articolo->save();
|
||||
}
|
||||
|
||||
flash()->info(tr('Articoli aggiunti!'));
|
||||
|
||||
break;
|
||||
|
||||
case 'manage_articolo':
|
||||
if (post('idriga') != null) {
|
||||
$articolo = Articolo::find(post('idriga'));
|
||||
@ -402,6 +439,7 @@ switch (post('op')) {
|
||||
}
|
||||
|
||||
$qta = post('qta');
|
||||
// Inversione quantità per Note
|
||||
if (!empty($record['is_reversed'])) {
|
||||
$qta = -$qta;
|
||||
}
|
||||
@ -637,7 +675,7 @@ switch (post('op')) {
|
||||
if (post('evadere')[$riga->id] == 'on') {
|
||||
$qta = post('qta_da_evadere')[$riga->id];
|
||||
|
||||
$copia = $riga->copiaIn($fattura, $qta, $is_evasione);
|
||||
$copia = $riga->copiaIn($fattura, $qta);
|
||||
$copia->id_conto = $id_conto;
|
||||
|
||||
$copia->calcolo_ritenuta_acconto = $calcolo_ritenuta_acconto;
|
||||
|
@ -28,6 +28,7 @@ if (!empty($id_documento)) {
|
||||
$id_anagrafica = $documento_finale->idanagrafica;
|
||||
|
||||
$_SESSION['superselect']['idanagrafica'] = $id_anagrafica;
|
||||
$_SESSION['superselect']['stato'] = 'is_fatturabile';
|
||||
|
||||
echo '
|
||||
<div class="row">
|
||||
@ -37,7 +38,7 @@ echo '
|
||||
</div>
|
||||
|
||||
<div id="righe_documento">
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="alert alert-info" id="box-loading">
|
||||
@ -47,20 +48,20 @@ echo '
|
||||
$file = basename(__FILE__);
|
||||
echo '
|
||||
<script>$(document).ready(init)</script>
|
||||
|
||||
|
||||
<script>
|
||||
var content = $("#righe_documento");
|
||||
var loader = $("#box-loading");
|
||||
|
||||
|
||||
$(document).ready(function(){
|
||||
loader.hide();
|
||||
});
|
||||
|
||||
|
||||
$("#id_documento").on("change", function(){
|
||||
loader.show();
|
||||
|
||||
var id = $(this).selectData() ? $(this).selectData().id : "";
|
||||
|
||||
|
||||
content.html("");
|
||||
content.load("'.$structure->fileurl($file).'?id_module='.$id_module.'&id_record='.$id_record.'&id_documento=" + id, function() {
|
||||
loader.hide();
|
||||
|
@ -3,6 +3,7 @@
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
use Modules\Fatture\Fattura;
|
||||
use Modules\Fatture\Stato;
|
||||
use Plugins\ExportFE\FatturaElettronica;
|
||||
use Plugins\ExportFE\Interaction;
|
||||
use Util\Zip;
|
||||
@ -173,8 +174,10 @@ switch (post('op')) {
|
||||
break;
|
||||
|
||||
case 'copy-bulk':
|
||||
$list = array();
|
||||
foreach ($id_records as $id) {
|
||||
$fattura = Fattura::find($id);
|
||||
array_push($list, $fattura->numero_esterno);
|
||||
|
||||
$id_segment = (post('id_segment') ? post('id_segment') : $fattura->id_segment);
|
||||
$dir = $dbo->fetchOne('SELECT dir FROM co_tipidocumento WHERE id='.prepare($fattura->idtipodocumento))['dir'];
|
||||
@ -199,11 +202,16 @@ switch (post('op')) {
|
||||
$data = date('Y-m-d', strtotime('+1 year', strtotime($fattura->data)));
|
||||
}
|
||||
|
||||
$stato = Stato::where('descrizione', 'Bozza')->first();
|
||||
|
||||
$new = $fattura->replicate();
|
||||
$new->codice_stato_fe = null;
|
||||
$new->id_segment = $id_segment;
|
||||
$new->numero_esterno = Fattura::getNextNumeroSecondario($data, $dir, $id_segment);
|
||||
$new->numero = Fattura::getNextNumero($data, $dir, $id_segment);
|
||||
$new->idstatodocumento = 2;
|
||||
if (!empty($fattura->numero_esterno)) {
|
||||
$new->numero_esterno = Fattura::getNextNumeroSecondario($data, $dir, $id_segment);
|
||||
}
|
||||
$new->stato()->associate($stato);
|
||||
$new->data = $data;
|
||||
$new->save();
|
||||
|
||||
@ -231,7 +239,9 @@ switch (post('op')) {
|
||||
}
|
||||
}
|
||||
|
||||
flash()->info(tr('Fatture duplicate correttamente!'));
|
||||
flash()->info(tr('Fatture _LIST_ duplicate correttamente!', [
|
||||
'_LIST_' => implode(',', $list),
|
||||
]));
|
||||
|
||||
break;
|
||||
|
||||
@ -257,7 +267,7 @@ if (App::debug()) {
|
||||
$operations['copy-bulk'] = [
|
||||
'text' => '<span><i class="fa fa-copy"></i> '.tr('Duplica selezionati').'</span>',
|
||||
'data' => [
|
||||
'msg' => tr('Vuoi davvero duplicare le righe selezionate?').'<br><br>{[ "type": "select", "label": "", "name": "skip_time", "required": 1, "values": "list=\"Giorno\":\"'.tr('Giorno').'\", \"Settimana\":\"'.tr('Settimana').'\", \"Mese\":\"'.tr('Mese').'\", \"Anno\":\"'.tr('Anno').'\" ", "value": "Giorno" ]}<br>{[ "type": "select", "label": "", "name": "id_segment", "required": 1, "values": "query=SELECT id, name AS descrizione FROM zz_segments WHERE id_module='.$id_module.' ORDER BY name", "value": "Giorno" ]}<br>{[ "type": "checkbox", "placeholder": "'.tr('Aggiungere i riferimenti ai documenti esterni?').'", "name": "riferimenti" ]}',
|
||||
'msg' => tr('Vuoi davvero duplicare le righe selezionate?').'<br><br>{[ "type": "select", "label": "'.tr('Fattura in avanti di').'", "name": "skip_time", "required": 1, "values": "list=\"Giorno\":\"'.tr('Un giorno').'\", \"Settimana\":\"'.tr('Una settimana').'\", \"Mese\":\"'.tr('Un mese').'\", \"Anno\":\"'.tr('Un anno').'\" ", "value": "Giorno" ]}<br>{[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "values": "query=SELECT id, name AS descrizione FROM zz_segments WHERE id_module='.$id_module.' ORDER BY name", "value": "'.$_SESSION['module_'.$id_module]['id_segment'].'" ]}<br>{[ "type": "checkbox", "placeholder": "'.tr('Aggiungere i riferimenti ai documenti esterni?').'", "name": "riferimenti" ]}',
|
||||
'button' => tr('Procedi'),
|
||||
'class' => 'btn btn-lg btn-warning',
|
||||
],
|
||||
|
@ -3,13 +3,7 @@
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
echo '
|
||||
|
||||
<form action="" class="text-right" method="post" id="form-copy">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="op" value="copy">
|
||||
</form>
|
||||
|
||||
<button type="button" class="btn btn-primary" '.(empty($record['reversed']) ? '' : 'disabled').' onclick="if( confirm(\'Duplicare questa fattura?\') ){ $(\'#form-copy\').submit(); }">
|
||||
<button type="button" class="btn btn-primary ask btn-primary" '.(empty($record['is_reversed']) ? '' : 'disabled').' data-msg="'.tr('Duplicare questa fattura?').'" data-op="copy" data-button="'.tr('Duplica').'" data-class="btn btn-lg btn-warning" data-backto="record-edit" >
|
||||
<i class="fa fa-copy"></i> '.tr('Duplica fattura').'
|
||||
</button>';
|
||||
|
||||
@ -25,7 +19,7 @@ if ($module->name == 'Fatture di vendita') {
|
||||
if ($dir == 'entrata') {
|
||||
echo '
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-primary unblockable dropdown-toggle '.(((!empty($record['ref_documento']) || $record['stato'] != 'Bozza') and empty($record['reversed'])) ? '' : 'disabled').'" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<button type="button" class="btn btn-primary unblockable dropdown-toggle '.(((!empty($record['ref_documento']) || $record['stato'] != 'Bozza') and empty($record['is_reversed'])) ? '' : 'disabled').'" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<i class="fa fa-magic"></i> '.tr('Crea').' <span class="caret"></span>
|
||||
<span class="sr-only">Toggle Dropdown</span>
|
||||
</button>
|
||||
|
@ -672,6 +672,10 @@ if (!$block_edit) {
|
||||
<a class="btn btn-sm btn-primary'.(!empty($articoli) ? '' : ' disabled').'" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_articolo" data-toggle="tooltip" data-title="'.tr('Aggiungi articolo').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Articolo').'
|
||||
</a>';
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary"data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_barcode" data-toggle="tooltip" data-title="'.tr('Aggiungi articoli tramite barcode').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Barcode').'
|
||||
</a>';
|
||||
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_riga" data-toggle="tooltip" data-title="'.tr('Aggiungi riga').'">
|
||||
|
@ -76,6 +76,10 @@ if (get('is_descrizione') !== null) {
|
||||
$file = 'sconto';
|
||||
|
||||
$options['op'] = 'manage_sconto';
|
||||
} elseif (get('is_barcode') !== null) {
|
||||
$file = 'barcode';
|
||||
|
||||
$options['op'] = 'manage_barcode';
|
||||
}
|
||||
|
||||
echo App::load($file.'.php', $result, $options);
|
||||
|
@ -55,9 +55,8 @@ foreach ($righe as $riga) {
|
||||
}
|
||||
|
||||
$descrizione_conto = $dbo->fetchOne('SELECT descrizione FROM co_pianodeiconti3 WHERE id = '.prepare($riga->id_conto))['descrizione'];
|
||||
//dump($documento_originale);exit();
|
||||
|
||||
$extra_riga = tr('_DESCRIZIONE_CONTO__ID_DOCUMENTO__NUMERO_RIGA__CODICE_CIG__CODICE_CUP__RITENUTA_ACCONTO__RITENUTA_CONTRIBUTI__RIVALSA_', [
|
||||
$extra_riga = replace('_DESCRIZIONE_CONTO__ID_DOCUMENTO__NUMERO_RIGA__CODICE_CIG__CODICE_CUP__RITENUTA_ACCONTO__RITENUTA_CONTRIBUTI__RIVALSA_', [
|
||||
'_RIVALSA_' => $riga->rivalsa_inps ? '<br>Rivalsa: '.moneyFormat(abs($riga->rivalsa_inps)) : null,
|
||||
'_RITENUTA_ACCONTO_' => $riga->ritenuta_acconto ? '<br>Ritenuta acconto: '.moneyFormat(abs($riga->ritenuta_acconto)) : null,
|
||||
'_RITENUTA_CONTRIBUTI_' => $riga->ritenuta_contributi ? '<br>Ritenuta contributi: '.moneyFormat(abs($riga->ritenuta_contributi)) : null,
|
||||
|
@ -205,6 +205,38 @@ $riga = $intervento->getRiga($type, $id_riga);
|
||||
|
||||
break;
|
||||
|
||||
case 'manage_barcode':
|
||||
foreach (post('qta') as $id_articolo => $qta) {
|
||||
if ($id_articolo == '-id-') {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Dati di input
|
||||
$sconto = post('sconto')[$id_articolo];
|
||||
$tipo_sconto = post('tipo_sconto')[$id_articolo];
|
||||
$prezzo_unitario = post('prezzo_unitario')[$id_articolo];
|
||||
$id_dettaglio_fornitore = post('id_dettaglio_fornitore')[$id_articolo];
|
||||
$id_iva = $originale->idiva_vendita ? $originale->idiva_vendita : setting('Iva predefinita');
|
||||
|
||||
// Creazione articolo
|
||||
$originale = ArticoloOriginale::find($id_articolo);
|
||||
$articolo = Articolo::build($intervento, $originale);
|
||||
$articolo->id_dettaglio_fornitore = $id_dettaglio_fornitore ?: null;
|
||||
|
||||
$articolo->setPrezzoUnitario($prezzo_unitario, $id_iva);
|
||||
if ($dir == 'entrata') {
|
||||
$articolo->costo_unitario = $originale->prezzo_acquisto;
|
||||
}
|
||||
$articolo->setSconto($sconto, $tipo_sconto);
|
||||
$articolo->qta = $qta;
|
||||
|
||||
$articolo->save();
|
||||
}
|
||||
|
||||
flash()->info(tr('Articoli aggiunti!'));
|
||||
|
||||
break;
|
||||
|
||||
case 'manage_articolo':
|
||||
if (post('idriga') != null) {
|
||||
$articolo = Articolo::find(post('idriga'));
|
||||
|
@ -370,6 +370,9 @@ if (!empty($id_intervento)) {
|
||||
}
|
||||
// session_set('superselect,idzona', $(this).selectData().idzona, 0);
|
||||
}
|
||||
|
||||
// Settaggio tipo intervento da anagrafica
|
||||
$('#modals > div #idtipointervento').selectSetNew($(this).selectData().idtipointervento, $(this).selectData().idtipointervento_descrizione);
|
||||
});
|
||||
|
||||
$('#modals > div #idsede_destinazione').change( function(){
|
||||
@ -392,7 +395,6 @@ if (!empty($id_intervento)) {
|
||||
}
|
||||
|
||||
if($(this).val()){
|
||||
//TODO: disattivato perché genera problemi con il change successivo di iditpointervento per il tempo standard*
|
||||
$('#modals > div #idtipointervento').selectSetNew($(this).selectData().idtipointervento, $(this).selectData().idtipointervento_descrizione);
|
||||
}
|
||||
});
|
||||
|
@ -7,9 +7,11 @@ $block_edit = $record['flag_completato'];
|
||||
unset($_SESSION['superselect']['idanagrafica']);
|
||||
unset($_SESSION['superselect']['idsede_partenza']);
|
||||
unset($_SESSION['superselect']['idsede_destinazione']);
|
||||
unset($_SESSION['superselect']['idintervento']);
|
||||
$_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
|
||||
$_SESSION['superselect']['idsede_partenza'] = $record['idsede_partenza'];
|
||||
$_SESSION['superselect']['idsede_partenza'];
|
||||
$_SESSION['superselect']['idintervento'] = $id_record;
|
||||
$_SESSION['superselect']['idsede_destinazione'] = $record['idsede_destinazione'];
|
||||
$_SESSION['superselect']['permetti_movimento_a_zero'] = false;
|
||||
|
||||
@ -233,6 +235,11 @@ if (!$block_edit) {
|
||||
<i class="fa fa-plus"></i> '.tr('Articolo').'
|
||||
</a>';
|
||||
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary"data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_barcode" data-toggle="tooltip" data-title="'.tr('Aggiungi articoli tramite barcode').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Barcode').'
|
||||
</a>';
|
||||
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_riga" data-toggle="tooltip" data-title="'.tr('Aggiungi riga').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Riga').'
|
||||
@ -257,7 +264,7 @@ $articoli = $intervento->articoli;
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "select", "label": "<?php echo tr('Partenza merce'); ?>", "name": "idsede_partenza", "ajax-source": "sedi_azienda", "value": "$idsede_partenza$", "readonly": "<?php echo ($record['flag_completato'] || !empty($articoli)) ? 1 : 0; ?>" ]}
|
||||
{[ "type": "select", "label": "<?php echo tr('Partenza merce'); ?>", "name": "idsede_partenza", "ajax-source": "sedi_azienda", "value": "$idsede_partenza$", "readonly": "<?php echo ($record['flag_completato'] || !$articoli->isEmpty()) ? 1 : 0; ?>" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -56,6 +56,10 @@ if (get('is_descrizione') !== null) {
|
||||
$file = 'sconto';
|
||||
|
||||
$options['op'] = 'manage_sconto';
|
||||
} elseif (get('is_barcode') !== null) {
|
||||
$file = 'barcode';
|
||||
|
||||
$options['op'] = 'manage_barcode';
|
||||
}
|
||||
|
||||
echo App::load($file.'.php', $result, $options);
|
||||
|
@ -112,6 +112,38 @@ switch (post('op')) {
|
||||
|
||||
break;
|
||||
|
||||
case 'manage_barcode':
|
||||
foreach (post('qta') as $id_articolo => $qta) {
|
||||
if ($id_articolo == '-id-') {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Dati di input
|
||||
$sconto = post('sconto')[$id_articolo];
|
||||
$tipo_sconto = post('tipo_sconto')[$id_articolo];
|
||||
$prezzo_unitario = post('prezzo_unitario')[$id_articolo];
|
||||
$id_dettaglio_fornitore = post('id_dettaglio_fornitore')[$id_articolo];
|
||||
$id_iva = $originale->idiva_vendita ? $originale->idiva_vendita : setting('Iva predefinita');
|
||||
|
||||
// Creazione articolo
|
||||
$originale = ArticoloOriginale::find($id_articolo);
|
||||
$articolo = Articolo::build($ordine, $originale);
|
||||
$articolo->id_dettaglio_fornitore = $id_dettaglio_fornitore ?: null;
|
||||
|
||||
$articolo->setPrezzoUnitario($prezzo_unitario, $id_iva);
|
||||
if ($dir == 'entrata') {
|
||||
$articolo->costo_unitario = $originale->prezzo_acquisto;
|
||||
}
|
||||
$articolo->setSconto($sconto, $tipo_sconto);
|
||||
$articolo->qta = $qta;
|
||||
|
||||
$articolo->save();
|
||||
}
|
||||
|
||||
flash()->info(tr('Articoli aggiunti!'));
|
||||
|
||||
break;
|
||||
|
||||
case 'manage_articolo':
|
||||
if (post('idriga') != null) {
|
||||
$articolo = Articolo::find(post('idriga'));
|
||||
|
@ -29,12 +29,12 @@ $_SESSION['superselect']['permetti_movimento_a_zero'] = true;
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-3">
|
||||
<div class="col-md-3" <?php echo ($dir == 'entrata') ? 'hidden' : ''; ?>>
|
||||
{[ "type": "text", "label": "<?php echo tr('Numero ordine'); ?>", "name": "numero", "required": 1, "class": "text-center", "value": "$numero$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Numero secondario'); ?>", "name": "numero_esterno", "class": "text-center", "value": "$numero_esterno$" ]}
|
||||
{[ "type": "text", "label": "<?php echo ($dir == 'entrata') ? tr('Numero ordine') : tr('Numero ordine fornitore'); ?>", "name": "numero_esterno", "class": "text-center", "value": "$numero_esterno$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
@ -116,7 +116,7 @@ $_SESSION['superselect']['permetti_movimento_a_zero'] = true;
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "textarea", "label": "<?php echo tr('Note aggiuntive'); ?>", "name": "note_aggiuntive", "help": "<?php echo tr('Note interne'); ?>", "value": "$note_aggiuntive$" ]}
|
||||
{[ "type": "textarea", "label": "<?php echo tr('Note interne'); ?>", "name": "note_aggiuntive", "value": "$note_aggiuntive$" ]}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -186,6 +186,11 @@ if (!$block_edit) {
|
||||
<i class="fa fa-plus"></i> '.tr('Articolo').'
|
||||
</a>';
|
||||
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary"data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_barcode" data-toggle="tooltip" data-title="'.tr('Aggiungi articoli tramite barcode').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Barcode').'
|
||||
</a>';
|
||||
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_riga" data-toggle="tooltip" data-title="'.tr('Aggiungi riga').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Riga').'
|
||||
@ -208,7 +213,7 @@ if (!$block_edit) {
|
||||
echo '
|
||||
<div class="pull-right">
|
||||
<a class="btn btn-sm btn-info" data-href="'.$structure->fileurl('quantita_impegnate.php').'?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="tooltip" data-title="'.tr('Controllo sulle quantità impegnate').'">
|
||||
<i class="fa fa-check"></i> '.tr('Quantità impegnate').'
|
||||
<i class="fa fa-question-circle"></i> '.tr('Verifica disponibilità').'
|
||||
</a>
|
||||
</div>';
|
||||
}
|
||||
|
@ -54,6 +54,10 @@ if (get('is_descrizione') !== null) {
|
||||
$file = 'sconto';
|
||||
|
||||
$options['op'] = 'manage_sconto';
|
||||
} elseif (get('is_barcode') !== null) {
|
||||
$file = 'barcode';
|
||||
|
||||
$options['op'] = 'manage_barcode';
|
||||
}
|
||||
|
||||
echo App::load($file.'.php', $result, $options);
|
||||
|
@ -28,7 +28,7 @@ $info = $dbo->fetchOne($query);
|
||||
</div>
|
||||
|
||||
<div class="col-md-8">
|
||||
{[ "type": "text", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "required": 1, "value": "<?php echo $info['descrizione']; ?>" ]}
|
||||
{[ "type": "text", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "required": 1, "value": <?php echo json_encode($info['descrizione']); ?> ]}
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
|
@ -147,6 +147,38 @@ switch (post('op')) {
|
||||
|
||||
break;
|
||||
|
||||
case 'manage_barcode':
|
||||
foreach (post('qta') as $id_articolo => $qta) {
|
||||
if ($id_articolo == '-id-') {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Dati di input
|
||||
$sconto = post('sconto')[$id_articolo];
|
||||
$tipo_sconto = post('tipo_sconto')[$id_articolo];
|
||||
$prezzo_unitario = post('prezzo_unitario')[$id_articolo];
|
||||
$id_dettaglio_fornitore = post('id_dettaglio_fornitore')[$id_articolo];
|
||||
$id_iva = $originale->idiva_vendita ? $originale->idiva_vendita : setting('Iva predefinita');
|
||||
|
||||
// Creazione articolo
|
||||
$originale = ArticoloOriginale::find($id_articolo);
|
||||
$articolo = Articolo::build($preventivo, $originale);
|
||||
$articolo->id_dettaglio_fornitore = $id_dettaglio_fornitore ?: null;
|
||||
|
||||
$articolo->setPrezzoUnitario($prezzo_unitario, $id_iva);
|
||||
if ($dir == 'entrata') {
|
||||
$articolo->costo_unitario = $originale->prezzo_acquisto;
|
||||
}
|
||||
$articolo->setSconto($sconto, $tipo_sconto);
|
||||
$articolo->qta = $qta;
|
||||
|
||||
$articolo->save();
|
||||
}
|
||||
|
||||
flash()->info(tr('Articoli aggiunti!'));
|
||||
|
||||
break;
|
||||
|
||||
case 'manage_articolo':
|
||||
if (post('idriga') != null) {
|
||||
$articolo = Articolo::find(post('idriga'));
|
||||
|
@ -15,7 +15,7 @@ switch ($resource) {
|
||||
$where[] = 'an_anagrafiche.idanagrafica='.prepare($superselect['idanagrafica']);
|
||||
$where[] = 'co_preventivi.default_revision=1';
|
||||
|
||||
$stato = !empty($superselect['stato']) ? $superselect['stato'] : 'is_fatturabile';
|
||||
$stato = !empty($superselect['stato']) ? $superselect['stato'] : 'is_pianificabile';
|
||||
$where[] = 'idstato IN (SELECT `id` FROM `co_statipreventivi` WHERE '.$stato.' = 1)';
|
||||
}
|
||||
|
||||
@ -30,18 +30,5 @@ switch ($resource) {
|
||||
$custom['sconto'] = 'sconto';
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 'preventivi_aperti':
|
||||
$query = 'SELECT co_preventivi.id AS id, CONCAT(numero, " ", co_preventivi.nome, " (", ragione_sociale, ")") AS descrizione FROM co_preventivi INNER JOIN an_anagrafiche ON co_preventivi.idanagrafica=an_anagrafiche.idanagrafica |where| ORDER BY id';
|
||||
|
||||
foreach ($elements as $element) {
|
||||
$filter[] = 'idpreventivo='.prepare($element);
|
||||
}
|
||||
$where[] = 'idstato IN (1)';
|
||||
if (!empty($search)) {
|
||||
$search_fields[] = 'nome LIKE '.prepare('%'.$search.'%');
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -208,6 +208,16 @@ if (!$block_edit) {
|
||||
<i class="fa fa-plus"></i> '.tr('Articolo').'
|
||||
</a>';
|
||||
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary"data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_barcode" data-toggle="tooltip" data-title="'.tr('Aggiungi articoli tramite barcode').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Barcode').'
|
||||
</a>';
|
||||
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary"data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_barcode" data-toggle="tooltip" data-title="'.tr('Aggiungi articoli tramite barcode').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Barcode').'
|
||||
</a>';
|
||||
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_riga" data-toggle="tooltip" data-title="'.tr('Aggiungi riga').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Riga').'
|
||||
|
@ -206,31 +206,33 @@ if (!empty($interventi)) {
|
||||
</td>
|
||||
</tr>';
|
||||
|
||||
// Totali per stato
|
||||
echo '
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<br><b>'.tr('Totale interventi per stato', [], ['upper' => true]).'</b>
|
||||
</td>
|
||||
</tr>';
|
||||
|
||||
$stati = $interventi->groupBy('idstatointervento');
|
||||
foreach ($stati as $interventi_collegati) {
|
||||
$stato = $interventi_collegati->first()->stato;
|
||||
$totale_stato = sum(array_column($interventi_collegati->toArray(), 'totale_imponibile'));
|
||||
|
||||
if (count($stati) > 0) {
|
||||
// Totali per stato
|
||||
echo '
|
||||
<tr>
|
||||
<td colspan="3"></td>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<br><b>'.tr('Totale interventi per stato', [], ['upper' => true]).'</b>
|
||||
</td>
|
||||
</tr>';
|
||||
|
||||
<td class="text-right" colspan="2" style="background:'.$stato->colore.';">
|
||||
<big><b>'.$stato->descrizione.':</b></big>
|
||||
</td>
|
||||
foreach ($stati as $interventi_collegati) {
|
||||
$stato = $interventi_collegati->first()->stato;
|
||||
$totale_stato = sum(array_column($interventi_collegati->toArray(), 'totale_imponibile'));
|
||||
|
||||
<td class="text-right">
|
||||
<big><b>'.moneyFormat($totale_stato).'</b></big>
|
||||
</td>
|
||||
</tr>';
|
||||
echo '
|
||||
<tr>
|
||||
<td colspan="3"></td>
|
||||
|
||||
<td class="text-right" colspan="2" style="background:'.$stato->colore.';">
|
||||
<big><b>'.$stato->descrizione.':</b></big>
|
||||
</td>
|
||||
|
||||
<td class="text-right">
|
||||
<big><b>'.moneyFormat($totale_stato).'</b></big>
|
||||
</td>
|
||||
</tr>';
|
||||
}
|
||||
}
|
||||
|
||||
echo '
|
||||
|
@ -53,6 +53,10 @@ if (get('is_descrizione') !== null) {
|
||||
$file = 'sconto';
|
||||
|
||||
$options['op'] = 'manage_sconto';
|
||||
} elseif (get('is_barcode') !== null) {
|
||||
$file = 'barcode';
|
||||
|
||||
$options['op'] = 'manage_barcode';
|
||||
}
|
||||
|
||||
echo App::load($file.'.php', $result, $options);
|
||||
|
@ -85,6 +85,11 @@ var chart_options = {
|
||||
}
|
||||
}
|
||||
},
|
||||
elements: {
|
||||
line: {
|
||||
tension: 0
|
||||
}
|
||||
},
|
||||
annotation: {
|
||||
annotations: [{
|
||||
type: "line",
|
||||
|
@ -33,11 +33,11 @@ class LineChart extends Stat {
|
||||
chart.data.datasets.push({
|
||||
calendar_id: calendar_id,
|
||||
label: label,
|
||||
backgroundColor: color,
|
||||
backgroundColor: color + '55',
|
||||
borderColor: color,
|
||||
data: dataset,
|
||||
labels: labels,
|
||||
fill: false,
|
||||
fill: true,
|
||||
});
|
||||
|
||||
chart.update();
|
||||
|
@ -53,7 +53,7 @@ function crea_grafico(values){
|
||||
if (element.count<element.dbCount){
|
||||
var diff = (element.dbCount-element.count);
|
||||
|
||||
$("#message").append("<div class=\"label label-warning\" ><i class=\"fa fa-exclamation-triangle\" aria-hidden=\"true\"></i> "+diff+" di file mancanti per allegati.</div><br>");
|
||||
$("#message").append("<div class=\"label label-warning\" ><i class=\"fa fa-exclamation-triangle\" aria-hidden=\"true\"></i> "+diff+" file non trovati sul disco.</div><br>");
|
||||
|
||||
}
|
||||
}
|
||||
@ -61,7 +61,7 @@ function crea_grafico(values){
|
||||
//Numero di file in Allegati per estensione
|
||||
if (element.dbExtensions.length > 0){
|
||||
|
||||
$("#message").append("<p><b>Top 10 allegati:</b></p>");
|
||||
$("#message").append("<br><p><b>Top 10 allegati:</b></p>");
|
||||
|
||||
element.dbExtensions.forEach(function(extension) {
|
||||
|
||||
|
@ -72,24 +72,65 @@ include_once __DIR__.'/../../core.php';
|
||||
//Permetto eliminazione tipo intervento solo se questo non è utilizzado da nessun'altra parte nel gestionale
|
||||
//UNION SELECT `in_tariffe`.`idtipointervento` FROM `in_tariffe` WHERE `in_tariffe`.`idtipointervento` = '.prepare($id_record).'
|
||||
//UNION SELECT `co_contratti_tipiintervento`.`idtipointervento` FROM `co_contratti_tipiintervento` WHERE `co_contratti_tipiintervento`.`idtipointervento` = '.prepare($id_record).'
|
||||
$elementi = $dbo->fetchArray('SELECT `in_interventi`.`idtipointervento` FROM `in_interventi` WHERE `in_interventi`.`idtipointervento` = '.prepare($id_record).'
|
||||
$elementi = $dbo->fetchArray('SELECT `in_interventi`.`idtipointervento`, id, codice AS numero, data_richiesta AS data, "Intervento" AS tipo_documento FROM `in_interventi` WHERE `in_interventi`.`idtipointervento` = '.prepare($id_record).'
|
||||
UNION
|
||||
SELECT `an_anagrafiche`.`idtipointervento_default` AS `idtipointervento` FROM `an_anagrafiche` WHERE `an_anagrafiche`.`idtipointervento_default` = '.prepare($id_record).'
|
||||
SELECT `in_interventi_tecnici`.`idtipointervento`, idintervento AS id, codice AS numero, orario_inizio AS data, "Sessione intervento" AS tipo_documento FROM `in_interventi_tecnici` LEFT JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id WHERE `in_interventi_tecnici`.`idtipointervento` = '.prepare($id_record).'
|
||||
UNION
|
||||
SELECT `co_preventivi`.`idtipointervento` FROM `co_preventivi` WHERE `co_preventivi`.`idtipointervento` = '.prepare($id_record).'
|
||||
SELECT `an_anagrafiche`.`idtipointervento_default` AS `idtipointervento`, idanagrafica AS id, codice, "0000-00-00" AS data, "Anagrafica" AS tipo_documento FROM `an_anagrafiche` WHERE `an_anagrafiche`.`idtipointervento_default` = '.prepare($id_record).'
|
||||
UNION
|
||||
SELECT `co_promemoria`.`idtipointervento` FROM `co_promemoria` WHERE `co_promemoria`.`idtipointervento` = '.prepare($id_record).'
|
||||
SELECT `co_preventivi`.`idtipointervento`, id, numero, data_bozza AS data, "Preventivo" AS tipo_documento FROM `co_preventivi` WHERE `co_preventivi`.`idtipointervento` = '.prepare($id_record).'
|
||||
UNION
|
||||
SELECT `in_interventi_tecnici`.`idtipointervento` FROM `in_interventi_tecnici` WHERE `in_interventi_tecnici`.`idtipointervento` = '.prepare($id_record).'
|
||||
SELECT `co_promemoria`.`idtipointervento`, idcontratto AS id, numero, data_richiesta AS data, "Promemoria contratto" AS tipo_documento FROM `co_promemoria` LEFT JOIN co_contratti ON co_promemoria.idcontratto=co_contratti.id WHERE `co_promemoria`.`idtipointervento` = '.prepare($id_record).'
|
||||
ORDER BY `idtipointervento`');
|
||||
|
||||
|
||||
|
||||
if (!empty($elementi)) {
|
||||
echo '
|
||||
<div class="alert alert-danger">
|
||||
'.tr('Ci sono _NUM_ records collegati', [
|
||||
<div class="box box-warning collapsable collapsed-box">
|
||||
<div class="box-header with-border">
|
||||
<h3 class="box-title"><i class="fa fa-warning"></i> '.tr('Documenti collegati: _NUM_', [
|
||||
'_NUM_' => count($elementi),
|
||||
]).'.
|
||||
</div>';
|
||||
]).'</h3>
|
||||
<div class="box-tools pull-right">
|
||||
<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-plus"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-body">
|
||||
<ul>';
|
||||
|
||||
foreach ($elementi as $elemento) {
|
||||
$descrizione = tr('_DOC_ num. _NUM_ del _DATE_', [
|
||||
'_DOC_' => $elemento['tipo_documento'],
|
||||
'_NUM_' => $elemento['numero'],
|
||||
'_DATE_' => Translator::dateToLocale($elemento['data']),
|
||||
]);
|
||||
|
||||
if (in_array($elemento['tipo_documento'], ['Intervento'])) {
|
||||
$modulo = 'Interventi';
|
||||
}
|
||||
if (in_array($elemento['tipo_documento'], ['Sessione intervento'])) {
|
||||
$modulo = 'Interventi';
|
||||
}
|
||||
if (in_array($elemento['tipo_documento'], ['Anagrafica'])) {
|
||||
$modulo = 'Anagrafiche';
|
||||
}
|
||||
if (in_array($elemento['tipo_documento'], ['Preventivo'])) {
|
||||
$modulo = 'Preventivi';
|
||||
}
|
||||
if (in_array($elemento['tipo_documento'], ['Promemoria contratto'])) {
|
||||
$modulo = 'Contratti';
|
||||
}
|
||||
$id = $elemento['id'];
|
||||
|
||||
echo '
|
||||
<li>'.Modules::link($modulo, $id, $descrizione).'</li>';
|
||||
}
|
||||
|
||||
echo '
|
||||
</ul>
|
||||
</div>
|
||||
</div>';
|
||||
} else {
|
||||
echo '
|
||||
<a class="btn btn-danger ask" data-backto="record-list">
|
||||
|
@ -87,10 +87,24 @@ if ($structure->permission == 'rw') {
|
||||
<!-- PULSANTI -->
|
||||
<div class="row">
|
||||
<div class="col-md-12 text-right">
|
||||
<button type="sumbit" class="btn btn-primary">
|
||||
<button type="submit" class="btn btn-primary" disabled id="aggiungi_nota" >
|
||||
<i class="fa fa-plus"></i> '.tr('Aggiungi').'
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>';
|
||||
}
|
||||
|
||||
echo '
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
CKEDITOR.instances["contenuto"].on("key", function() {
|
||||
setTimeout(function(){
|
||||
if(CKEDITOR.instances["contenuto"].getData() == ""){
|
||||
$("#aggiungi_nota").prop("disabled", true);
|
||||
}
|
||||
else $("#aggiungi_nota").prop("disabled", false);
|
||||
}, 10);
|
||||
});
|
||||
});
|
||||
</script>';
|
||||
|
30
reset.php
30
reset.php
@ -21,25 +21,27 @@ switch (post('op')) {
|
||||
'stato' => Auth::getStatus()['failed']['code'],
|
||||
]);
|
||||
|
||||
$utente = User::where('username', $username)->where('email', $email)->first();
|
||||
if (!empty($utente)) {
|
||||
$utente->reset_token = secure_random_string();
|
||||
$utente->save();
|
||||
try {
|
||||
$utente = User::where('username', $username)->where('email', $email)->first();
|
||||
if (!empty($utente)) {
|
||||
$utente->reset_token = secure_random_string();
|
||||
$utente->save();
|
||||
|
||||
$template = Template::get('Reset password');
|
||||
$template = Template::get('Reset password');
|
||||
|
||||
$mail = Mail::build($utente, $template, $utente->id);
|
||||
$mail->addReceiver($utente->email);
|
||||
$mail->save();
|
||||
$mail = Mail::build($utente, $template, $utente->id);
|
||||
$mail->addReceiver($utente->email);
|
||||
$mail->save();
|
||||
|
||||
$email = EmailNotification::build($mail);
|
||||
$email->send();
|
||||
$email = EmailNotification::build($mail);
|
||||
$email->send();
|
||||
}
|
||||
|
||||
flash()->info(tr("Se le informazioni inserite corrispondono ai dati di un utente, riceverai a breve un'email all'indirizzo collegato").'.');
|
||||
} catch (Exception $e) {
|
||||
flash()->error(tr("Errore durante la gestione della richiesta: si prega di contattare l'amministratore").'.');
|
||||
}
|
||||
|
||||
//$message_email = substr($email, 0, 2).str_repeat('*', strlen($email)-8).substr($email, -6);
|
||||
|
||||
flash()->info(tr("Se le informazioni inserite corrispondono ai dati di un utente, riceverai a breve un'email all'indirizzo collegato").'.');
|
||||
|
||||
redirect(ROOTDIR.'/index.php');
|
||||
exit();
|
||||
break;
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Api\Common;
|
||||
namespace API\Common;
|
||||
|
||||
use API\Interfaces\CreateInterface;
|
||||
use API\Resource;
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Api\Common;
|
||||
namespace API\Common;
|
||||
|
||||
use API\Interfaces\RetrieveInterface;
|
||||
use API\Resource;
|
||||
|
@ -140,11 +140,11 @@ class Query
|
||||
return '';
|
||||
}
|
||||
|
||||
// Filtri di ricerica
|
||||
// Filtri di ricerca
|
||||
$search_filters = [];
|
||||
foreach ($search as $field => $value) {
|
||||
foreach ($search as $field => $original_value) {
|
||||
$pos = array_search($field, $total['fields']);
|
||||
$value = trim($value);
|
||||
$value = trim($original_value);
|
||||
|
||||
if (isset($value) && $pos !== false) {
|
||||
$search_query = $total['search_inside'][$pos];
|
||||
@ -201,7 +201,14 @@ class Query
|
||||
|
||||
// Campo id: ricerca tramite comparazione
|
||||
elseif ($field == 'id') {
|
||||
$search_filters[] = $field.' = '.prepare($value);
|
||||
// Filtro per una serie di ID
|
||||
if (is_array($original_value)) {
|
||||
if (!empty($original_value)) {
|
||||
$search_filters[] = $field.' IN ('.implode(', ', $original_value).')';
|
||||
}
|
||||
} else {
|
||||
$search_filters[] = $field.' = '.prepare($value);
|
||||
}
|
||||
}
|
||||
|
||||
// Ricerca
|
||||
@ -264,7 +271,7 @@ class Query
|
||||
*/
|
||||
public static function getSums($structure, $search = [])
|
||||
{
|
||||
$total = self::readQuery($structure, $search);
|
||||
$total = self::readQuery($structure);
|
||||
|
||||
// Calcolo di eventuali somme
|
||||
if (empty($total['summable'])) {
|
||||
|
@ -123,6 +123,8 @@ table#contents tbody td {
|
||||
}
|
||||
|
||||
.fake-footer p,
|
||||
.fake-footer span,
|
||||
.fake-footer div,
|
||||
.fake-footer table,
|
||||
.fake-footer table.table-bordered th,
|
||||
.fake-footer table.table-striped tbody tr td,
|
||||
|
@ -59,7 +59,7 @@ if ($pricing || !empty($totale_ore)) {
|
||||
<th colspan="2" class="text-center">
|
||||
<b>'.Translator::numberToLocale($totale_ore - $totale_ore_impiegate).'</b><br>
|
||||
<p>'.tr('Ore erogate').': '.Translator::numberToLocale($totale_ore_impiegate).'</p>
|
||||
<p>'.tr('Ore in contratto').': '.Translator::numberToLocale($totale_ore).'</p>
|
||||
<p>'.tr('Ore a contratto').': '.Translator::numberToLocale($totale_ore).'</p>
|
||||
</th>
|
||||
</tr>';
|
||||
}
|
||||
|
@ -7,7 +7,7 @@ $v_totale = [];
|
||||
|
||||
// Creazione righe fantasma
|
||||
$autofill = new \Util\Autofill(6, 40);
|
||||
$rows_per_page = $fattura_accompagnatoria ? 15 : 20;
|
||||
$rows_per_page = $fattura_accompagnatoria ? 13 : 18;
|
||||
if (!empty($options['last-page-footer'])) {
|
||||
$rows_per_page += 7;
|
||||
}
|
||||
@ -90,7 +90,7 @@ foreach ($righe as $riga) {
|
||||
if (setting('Riferimento dei documenti nelle stampe') && $riga->hasOriginal()) {
|
||||
$ref = $riga->getOriginal()->parent->getReference();
|
||||
if (!empty($riga->getOriginal()->parent->numero_cliente)) {
|
||||
$ref .= tr('<br>_DOC_ num. _NUM_ del _DATE_', [
|
||||
$ref .= '<br>'.tr('_DOC_ num. _NUM_ del _DATE_', [
|
||||
'_DOC_' => 'Rif. Vs. ordine cliente',
|
||||
'_NUM_' => $riga->getOriginal()->parent->numero_cliente,
|
||||
'_DATE_' => dateFormat($riga->getOriginal()->parent->data_cliente),
|
||||
@ -113,7 +113,7 @@ foreach ($righe as $riga) {
|
||||
$codice_cup = $documento_originale['codice_cup'];
|
||||
$id_documento_fe = $documento_originale['id_documento_fe'];
|
||||
|
||||
$extra_riga = tr('_ID_DOCUMENTO__NUMERO_RIGA__CODICE_CIG__CODICE_CUP_', [
|
||||
$extra_riga = replace('_ID_DOCUMENTO__NUMERO_RIGA__CODICE_CIG__CODICE_CUP_', [
|
||||
'_ID_DOCUMENTO_' => $id_documento_fe ? 'DOC: '.$id_documento_fe : null,
|
||||
'_NUMERO_RIGA_' => $num_item ? ', NRI: '.$num_item : null,
|
||||
'_CODICE_CIG_' => $codice_cig ? ', CIG: '.$codice_cig : null,
|
||||
@ -185,8 +185,8 @@ $dicitura = $dbo->fetchOne('SELECT diciturafissafattura AS dicitura FROM an_anag
|
||||
|
||||
if (!empty($dicitura['dicitura'])) {
|
||||
echo '
|
||||
<p class="text-center">
|
||||
<b>'.nl2br($dicitura['dicitura']).'</b>
|
||||
<p class="text-left">
|
||||
<span>'.nl2br($dicitura['dicitura']).'</span>
|
||||
</p>';
|
||||
}
|
||||
|
||||
|
@ -383,8 +383,8 @@ if ($fattura_accompagnatoria) {
|
||||
}
|
||||
|
||||
echo '
|
||||
<div style="font-size: 7pt; color: #999; text-align: center">
|
||||
<p>$dicitura_fissa_fattura$</p>
|
||||
<div style="font-size: 6pt; text-align: left;" class="text-muted">
|
||||
<span>$dicitura_fissa_fattura$</span>
|
||||
</div>';
|
||||
|
||||
if (empty($options['last-page-footer'])) {
|
||||
|
@ -58,7 +58,7 @@ echo '
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" style="height:10mm;padding-top:2mm;">
|
||||
<td colspan="2" style="height:10mm;padding-top:2mm;white-space: nowrap;">
|
||||
<p class="small-bold">'.tr('IBAN').'</p>
|
||||
<p>$codiceiban$</p>
|
||||
</td>
|
||||
|
@ -119,7 +119,7 @@ $replaces = array_merge($replaces, [
|
||||
'rootdir' => ROOTDIR,
|
||||
'directory' => Prints::get($id_print)['full_directory'],
|
||||
'footer' => !empty($footer) ? $footer : '',
|
||||
'dicitura_fissa_fattura' => setting('Dicitura fissa fattura').((!empty(setting('OSMCloud Services API Token'))) ? tr(' Documento privo di valenza fiscale (art 21 dpr 633/72).') : ''),
|
||||
'dicitura_fissa_fattura' => setting('Dicitura fissa fattura').((!empty(setting('OSMCloud Services API Token'))) ? tr('Documento privo di valenza fiscale (art 21 dpr 633/72).') : ''),
|
||||
]);
|
||||
|
||||
unset($replace);
|
||||
|
@ -26,7 +26,7 @@ $query = Query::getQuery($structure, $where, 0, []);
|
||||
$query = Modules::replaceAdditionals($id_module, $query);
|
||||
|
||||
// Modifiche alla query principale
|
||||
$query = preg_replace('/ FROM `mg_articoli` /', ' FROM mg_articoli LEFT JOIN (SELECT idarticolo, SUM(qta) AS qta_totale FROM mg_movimenti GROUP BY idarticolo) movimenti ON movimenti.idarticolo=mg_articoli.id ', $query);
|
||||
$query = preg_replace('/ FROM `mg_articoli` /', ' FROM mg_articoli LEFT JOIN (SELECT idarticolo, SUM(qta) AS qta_totale FROM mg_movimenti WHERE data <='.prepare($period_end).' GROUP BY idarticolo) movimenti ON movimenti.idarticolo=mg_articoli.id ', $query);
|
||||
|
||||
$query = preg_replace('/^SELECT /', 'SELECT mg_articoli.prezzo_acquisto,', $query);
|
||||
$query = preg_replace('/^SELECT /', 'SELECT mg_articoli.prezzo_vendita,', $query);
|
||||
|
@ -33,30 +33,28 @@ echo '
|
||||
], ['upper' => true]).'</b>
|
||||
</div>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td colspan="2" style="height:10mm;padding-top:2mm;">
|
||||
<p class="small-bold">'.tr('Pagamento', [], ['upper' => true]).'</p>
|
||||
<p>'.$pagamento['descrizione'].'</p>
|
||||
</td>
|
||||
<td colspan="2" style="height:10mm;padding-top:2mm;">
|
||||
<p class="small-bold">'.tr('Banca di appoggio', [], ['upper' => true]).'</p>
|
||||
<p><small>'.$banca['nome'].'</small></p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" style="height:10mm;padding-top:2mm;">
|
||||
<p class="small-bold">'.tr('IBAN').'</p>
|
||||
<p>'.$banca['iban'].'</p>
|
||||
</td>
|
||||
<td colspan="2" style="height:10mm;padding-top:2mm;">
|
||||
<p class="small-bold">'.tr('BIC').'</p>
|
||||
<p>'.$banca['bic'].'</p>
|
||||
</td>
|
||||
</tr>
|
||||
<table class="table">
|
||||
<tr>
|
||||
<td colspan="2" style="height:10mm;padding-top:2mm;">
|
||||
<p class="small-bold">'.tr('Pagamento', [], ['upper' => true]).'</p>
|
||||
<p>'.$pagamento['descrizione'].'</p>
|
||||
</td>
|
||||
<td colspan="2" style="height:10mm;padding-top:2mm;">
|
||||
<p class="small-bold">'.tr('Banca di appoggio', [], ['upper' => true]).'</p>
|
||||
<p><small>'.$banca['nome'].'</small></p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" style="height:10mm;padding-top:2mm;white-space: nowrap;">
|
||||
<p class="small-bold">'.tr('IBAN').'</p>
|
||||
<p>'.$banca['iban'].'</p>
|
||||
</td>
|
||||
<td colspan="2" style="height:10mm;padding-top:2mm;">
|
||||
<p class="small-bold">'.tr('BIC').'</p>
|
||||
<p>'.$banca['bic'].'</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-xs-6" style="margin-left: 10px">
|
||||
|
@ -38,7 +38,7 @@ echo '<h4><b>'.$titolo.'</b></h4>
|
||||
<th>'.tr('Data comp.').'</th>
|
||||
<th>'.tr('Tipo').'</th>
|
||||
<th>'.$tipo.'</th>
|
||||
<th>'.tr('Tot. doc.').'</th>
|
||||
<th>'.tr('Tot. doc.').'</th>
|
||||
<th>'.tr('Imponibile').'</th>
|
||||
<th>%</th>
|
||||
<th>'.tr('Iva').'</th>
|
||||
|
@ -134,19 +134,16 @@ UPDATE `or_righe_ordini` SET `qta` = IF(`qta` = 0, 1, `qta`),
|
||||
`prezzo_unitario` = `subtotale` / `qta`,
|
||||
`iva_unitaria` = `iva` / `qta`,
|
||||
`prezzo_unitario_ivato` = `prezzo_unitario` + `iva_unitaria`,
|
||||
`sconto_unitario_ivato` = `sconto_unitario`,
|
||||
`sconto_percentuale` = IF(`tipo_sconto` = 'PRC', `sconto_unitario`, 0),
|
||||
`sconto_unitario` = IF(`tipo_sconto` = 'PRC', `sconto` / `qta`, `sconto_unitario`),
|
||||
`sconto_unitario_ivato` = `sconto_unitario`;
|
||||
UPDATE `in_righe_interventi` SET `qta` = IF(`qta` = 0, 1, `qta`),
|
||||
`prezzo_unitario_ivato` = `prezzo_unitario` + `iva_unitaria`,
|
||||
`iva_unitaria` = `iva` / `qta`,
|
||||
`prezzo_unitario_ivato` = `prezzo_unitario` + `iva_unitaria`,
|
||||
`sconto_percentuale` = IF(`tipo_sconto` = 'PRC', `sconto_unitario`, 0),
|
||||
`sconto_unitario` = IF(`tipo_sconto` = 'PRC', `sconto` / `qta`, `sconto_unitario`),
|
||||
`sconto_unitario_ivato` = `sconto_unitario`;
|
||||
UPDATE `co_promemoria_righe` SET `qta` = IF(`qta` = 0, 1, `qta`),
|
||||
`prezzo_unitario_ivato` = `prezzo_unitario` + `iva_unitaria`,
|
||||
`iva_unitaria` = `iva` / `qta`,
|
||||
`prezzo_unitario_ivato` = `prezzo_unitario` + `iva_unitaria`,
|
||||
`sconto_percentuale` = IF(`tipo_sconto` = 'PRC', `sconto_unitario`, 0),
|
||||
|
@ -123,6 +123,49 @@ UPDATE `em_accounts` SET `connected_at` = NOW();
|
||||
-- Aggiunta del flag is_importabile sulle causali per permettere/bloccare l'importazione dei DDT
|
||||
ALTER TABLE `dt_causalet` ADD `is_importabile` BOOLEAN DEFAULT TRUE AFTER `descrizione`;
|
||||
|
||||
-- Impostazione "Totali delle tabelle ristretti alla selezione"
|
||||
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`) VALUES (NULL, 'Totali delle tabelle ristretti alla selezione', '0', 'boolean', '1', 'Generali', 119);
|
||||
|
||||
-- Ottimizzazione caricamento lista fatture
|
||||
ALTER TABLE `co_righe_documenti` ADD INDEX(`iddocumento`);
|
||||
|
||||
-- Aggiunta colonna data negli ordini
|
||||
INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `format`, `default`, `visible`) VALUES
|
||||
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Ordini fornitore'), 'Data', 'or_ordini.data', 3, 1, 0, 0, 1);
|
||||
|
||||
-- Plugin storico attività scheda Aanagrafiche
|
||||
INSERT INTO `zz_plugins` (`id`, `name`, `title`, `idmodule_from`, `idmodule_to`, `position`, `script`, `enabled`, `default`, `order`, `compatibility`, `version`, `options2`, `options`, `directory`, `help`) VALUES (NULL, 'Storico attività', 'Storico attività', (SELECT id FROM zz_modules WHERE name = 'Interventi'), (SELECT id FROM zz_modules WHERE name='Anagrafiche'), 'tab', '', '1', '1', '0', '2.*', '0.1', NULL, '{ "main_query": [ { "type": "table", "fields": "Numero, Data inizio, Data fine, Tipo", "query": "SELECT in_interventi.id, in_interventi.codice AS Numero, DATE_FORMAT(MAX(orario_inizio),''%d/%m/%Y'') AS ''Data inizio'', DATE_FORMAT(MAX(orario_fine),''%d/%m/%Y'') AS ''Data fine'', (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=in_interventi.idtipointervento) AS ''Tipo'', (SELECT `id` FROM `zz_modules` WHERE `name` = ''Interventi'') AS _link_module_, in_interventi.id AS _link_record_ FROM in_interventi LEFT JOIN `in_interventi_tecnici` ON `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id` LEFT JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento`=`in_statiintervento`.`idstatointervento` WHERE 1=1 AND in_interventi.deleted_at IS NULL AND idanagrafica = |id_parent| HAVING 2=2 ORDER BY in_interventi.id DESC"} ]}', '', '');
|
||||
|
||||
-- Fix prezzo_unitario_ivato e sconto_iva_unitario per i documenti
|
||||
UPDATE `co_righe_contratti` SET `prezzo_unitario_ivato` = `prezzo_unitario` + `iva_unitaria`;
|
||||
UPDATE `co_righe_documenti` SET `prezzo_unitario_ivato` = `prezzo_unitario` + `iva_unitaria`;
|
||||
|
||||
UPDATE `co_righe_documenti` INNER JOIN `co_iva` ON `co_iva`.`id` = `co_righe_documenti`.`idiva` SET
|
||||
`sconto_iva_unitario` = (`co_iva`.`percentuale` * `sconto_unitario` / 100),
|
||||
`sconto_unitario_ivato` = `sconto_unitario` + `sconto_iva_unitario`;
|
||||
UPDATE `co_righe_preventivi` INNER JOIN `co_iva` ON `co_iva`.`id` = `co_righe_preventivi`.`idiva` SET
|
||||
`sconto_iva_unitario` = (`co_iva`.`percentuale` * `sconto_unitario` / 100),
|
||||
`sconto_unitario_ivato` = `sconto_unitario` + `sconto_iva_unitario`;
|
||||
UPDATE `co_righe_contratti` INNER JOIN `co_iva` ON `co_iva`.`id` = `co_righe_contratti`.`idiva` SET
|
||||
`sconto_iva_unitario` = (`co_iva`.`percentuale` * `sconto_unitario` / 100),
|
||||
`sconto_unitario_ivato` = `sconto_unitario` + `sconto_iva_unitario`;
|
||||
UPDATE `dt_righe_ddt` INNER JOIN `co_iva` ON `co_iva`.`id` = `dt_righe_ddt`.`idiva` SET
|
||||
`sconto_iva_unitario` = (`co_iva`.`percentuale` * `sconto_unitario` / 100),
|
||||
`sconto_unitario_ivato` = `sconto_unitario` + `sconto_iva_unitario`;
|
||||
UPDATE `or_righe_ordini` INNER JOIN `co_iva` ON `co_iva`.`id` = `or_righe_ordini`.`idiva` SET
|
||||
`sconto_iva_unitario` = (`co_iva`.`percentuale` * `sconto_unitario` / 100),
|
||||
`sconto_unitario_ivato` = `sconto_unitario` + `sconto_iva_unitario`;
|
||||
UPDATE `in_righe_interventi` INNER JOIN `co_iva` ON `co_iva`.`id` = `in_righe_interventi`.`idiva` SET
|
||||
`sconto_iva_unitario` = (`co_iva`.`percentuale` * `sconto_unitario` / 100),
|
||||
`sconto_unitario_ivato` = `sconto_unitario` + `sconto_iva_unitario`;
|
||||
UPDATE `co_righe_promemoria` INNER JOIN `co_iva` ON `co_iva`.`id` = `co_righe_promemoria`.`idiva` SET
|
||||
`sconto_iva_unitario` = (`co_iva`.`percentuale` * `sconto_unitario` / 100),
|
||||
`sconto_unitario_ivato` = `sconto_unitario` + `sconto_iva_unitario`;
|
||||
|
||||
-- Fix namespace classi Stampa e Allegato per API
|
||||
UPDATE `zz_api_resources` SET `class` = 'API\\Common\\Stampa' WHERE `class` = 'Api\\Common\\Stampa';
|
||||
UPDATE `zz_api_resources` SET `class` = 'API\\Common\\Allegato' WHERE `class` = 'Api\\Common\\Allegato';
|
||||
|
||||
-- Aggiunta risorse dedicate all'applicazione
|
||||
DELETE FROM `zz_api_resources` WHERE `version` = 'app-v1';
|
||||
INSERT INTO `zz_api_resources` (`id`, `version`, `type`, `resource`, `class`, `enabled`) VALUES
|
||||
|
Loading…
x
Reference in New Issue
Block a user