Merge branch 'master' into plugin-sidebar
This commit is contained in:
commit
12deba4c2a
59
CHANGELOG.md
59
CHANGELOG.md
|
@ -4,6 +4,7 @@ Tutti i maggiori cambiamenti di questo progetto saranno documentati in questo fi
|
|||
|
||||
Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://keepachangelog.com/), e il progetto segue il [Semantic Versioning](http://semver.org/) per definire le versioni delle release.
|
||||
|
||||
- [2.4.16 (2020-07-28)](#2416-2020-07-28)
|
||||
- [2.4.15 (2020-05-01)](#2415-2020-05-01)
|
||||
- [2.4.14 (2020-04-23)](#2414-2020-04-23)
|
||||
- [2.4.13 (2020-02-05)](#2413-2020-02-05)
|
||||
|
@ -25,7 +26,63 @@ Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://k
|
|||
- [2.2 (2016-11-10)](#22-2016-11-10)
|
||||
- [2.1 (2015-04-02)](#21-2015-04-02)
|
||||
|
||||
## 2.4.15 (2020-05-01)
|
||||
## 2.4.16 (2020-07-28)
|
||||
|
||||
### Aggiunto (Added)
|
||||
- Aggiunta possibilità di creare un contratto dalla scheda del preventivo
|
||||
- Aggiunta in supersearch la ricerca articoli per barcode
|
||||
- Aggiunta rivalsa INPS e relativa IVA per il calcolo del totale ivato del documento
|
||||
- Aggiunta colonna immagine per stampa preventivi
|
||||
- Aggiunto pulsante visualizza la scheda del promemoria
|
||||
- Aggiunta gestione allegati nello scadenzario
|
||||
- Aggiunto ID per righe documenti
|
||||
- Aggiunto avviso se ci sono fatture in elaborazione da più di 7 giorni per le quali non ho ancora ricevuto in feedback
|
||||
- Aggiunta possibilità di duplicare l'attività (anche in bulk)
|
||||
- Aggiunte operazioni di verifica notifica FE
|
||||
- Aggiunta scelta del sezionale prima della stampa del registro IVA
|
||||
- Aggiunta visualizzazione quantità disponibile in ordine
|
||||
- Agginata possibilità di specificare riferimenti tra i documenti (#822)
|
||||
- Aggiunti dettagli Fornitori per gli Articoli (#810)
|
||||
- Aggiunto prezzo vendita ivato per gli Articoli
|
||||
- Aggiunti periodi temporali per campo “Validità” (#806)
|
||||
- Aggiunto supporto alle Causali DDT non fatturabili
|
||||
- Aggiunti totali delle tabelle ristretti alla selezione
|
||||
- Aggiunta articoli in sequenza tramite barcode
|
||||
|
||||
|
||||
### Modificato (Changed)
|
||||
- Allineamento Fattura Elettronica a versione schema XML 1.2.1
|
||||
- Aggiornamento foglio di stile FE Asso Invoice
|
||||
- Migliorato caricamento files con Dropzone
|
||||
- Aggiornamento a Gulp4
|
||||
- Migliorata stampa registro IVA
|
||||
- Compattazione grafica righe documenti
|
||||
- Ottimizzazione caricamento lista fatture
|
||||
|
||||
|
||||
### Fixed
|
||||
- Fix pulsante compilazione automatica campi in fase di import Fattura Elettronica passiva
|
||||
- Fix statistiche per anagrafiche eliminate
|
||||
- Fix creazione sottocategoria articoli
|
||||
- Fix riporto sconti da attività a fattura (#817)
|
||||
- Fix calcolo numero progressivo in fase di duplicazione dei preventivi (#825)
|
||||
- Fix stampa preventivo per descrizioni lunghe con testo troppo piccolo (#759)
|
||||
- Ripristino TD01 per fatture differite
|
||||
- Fix widget "Contratti in scadenza"
|
||||
- Fix IVA con prezzi fino a 6 decimali
|
||||
- Fix valorizzazione campi anagrafica fornitore creata in fase di import Fattura Elettronica passiva (#840)
|
||||
- Fix sconto attività (#841)
|
||||
- Fix filtro articoli con caratteri speciali (#838)
|
||||
- Fix lunghezza campo PrezzoUnitario per problemi di arrotondamento e calcolo FE
|
||||
- Fix calcolo sconto su riga per prezzi ivati
|
||||
- Fix calcolo ore Consuntivo Contratti
|
||||
- Fix movimentazioni per Note di credito/debito
|
||||
- Fix Validazione codice articolo (#854)
|
||||
- Fix dicitura footer stampa fattura
|
||||
- Fix calcolo quantità per inventario
|
||||
- Fix stato dei Preventivi selezionabili
|
||||
|
||||
## 2.4.15 (2020-05-01)
|
||||
|
||||
### Aggiunto (Added)
|
||||
- Aggiunta impostazione per abilitare la notifica di nuove pre-release oltre a release stabili
|
||||
|
|
|
@ -8,12 +8,18 @@ if (!isset($resource)) {
|
|||
$page = filter('page') ?: 0;
|
||||
$length = filter('length') ?: 100;
|
||||
|
||||
// Opzioni di selezione sugli elementi
|
||||
$options = filter('options') ?: [];
|
||||
$options_compatibility = $_SESSION['superselect'] ?: [];
|
||||
$options = array_merge($options_compatibility, $options);
|
||||
|
||||
// Preselezione su $elements dichiarato da file precedente
|
||||
if (!isset($elements)) {
|
||||
$elements = [];
|
||||
}
|
||||
$elements = (!is_array($elements)) ? explode(',', $elements) : $elements;
|
||||
|
||||
$results = AJAX::select($op, $elements, $search, $page, $length);
|
||||
$results = AJAX::select($op, $elements, $search, $page, $length, $options);
|
||||
|
||||
echo json_encode($results);
|
||||
}
|
||||
|
|
|
@ -898,7 +898,7 @@ input.small-width {
|
|||
border: 2px dashed #337ab7;
|
||||
border-radius: 5px;
|
||||
background: white;
|
||||
margin-top:10px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.dropzone .dz-message {
|
||||
|
@ -912,6 +912,40 @@ input.small-width {
|
|||
margin-top: 1.4rem;
|
||||
}
|
||||
|
||||
/* Fancy checkbox: https://bootsnipp.com/snippets/M2bda */
|
||||
.form-group input[type="checkbox"] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.form-group input[type="checkbox"] + .btn-group > label span {
|
||||
width: 20px;
|
||||
}
|
||||
|
||||
.form-group input[type="checkbox"] + .btn-group {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.form-group input[type="checkbox"] + .btn-group label:last-child {
|
||||
flex-grow: 100;
|
||||
}
|
||||
|
||||
.form-group input[type="checkbox"] + .btn-group > label span:first-child {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.form-group input[type="checkbox"] + .btn-group > label span:last-child {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.form-group input[type="checkbox"]:checked + .btn-group > label span:first-child {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.form-group input[type="checkbox"]:checked + .btn-group > label span:last-child {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.control-sidebar-bg {
|
||||
top: 50px;
|
||||
}
|
||||
|
|
|
@ -70,11 +70,24 @@ function start_superselect() {
|
|||
dataType: 'json',
|
||||
delay: 250,
|
||||
data: function (params) {
|
||||
return {
|
||||
const data = {
|
||||
search: params.term,
|
||||
page: params.page || 0,
|
||||
length: params.length || 100,
|
||||
}
|
||||
options: {}, // Dati aggiuntivi
|
||||
};
|
||||
|
||||
// Lettura dei dati aggiuntivi
|
||||
$(this).each(function () {
|
||||
$.each(this.attributes, function () {
|
||||
if (this.specified && this.name.startsWith('data-select-')) {
|
||||
const name = this.name.replace('data-select-', '');
|
||||
data.options[name] = this.value;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
return data;
|
||||
},
|
||||
processResults: function (data, params) {
|
||||
params.page = params.page || 0;
|
||||
|
@ -163,7 +176,7 @@ jQuery.fn.selectAdd = function (values) {
|
|||
|
||||
values.forEach(function (item) {
|
||||
if (item.data) {
|
||||
Object.keys(item.data).forEach(function(element) {
|
||||
Object.keys(item.data).forEach(function (element) {
|
||||
item['data-' + element] = item.data[element];
|
||||
});
|
||||
}
|
||||
|
@ -196,3 +209,12 @@ jQuery.fn.selectData = function () {
|
|||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Imposta le informazioni aggiuntive di un <select> creato con select2.
|
||||
*/
|
||||
jQuery.fn.selectInfo = function (name, value) {
|
||||
this.attr('data-select-' + name, value);
|
||||
|
||||
return this;
|
||||
};
|
||||
|
|
|
@ -388,10 +388,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())
|
||||
|
|
|
@ -117,6 +117,8 @@ echo '
|
|||
}
|
||||
|
||||
$("#um").selectSetNew($data.um, $data.um);
|
||||
// Aggiornamento automatico di guadagno e margine
|
||||
aggiorna_guadagno();
|
||||
}';
|
||||
|
||||
if ($module['name'] != 'Contratti' && $module['name'] != 'Preventivi') {
|
||||
|
|
|
@ -64,14 +64,27 @@ if (!empty($options['create_document'])) {
|
|||
}
|
||||
|
||||
echo '
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "'.tr('Ritenuta contributi').'", "name": "id_ritenuta_contributi", "value": "$id_ritenuta_contributi$", "values": "query=SELECT * FROM co_ritenuta_contributi" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-12">
|
||||
{[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "values": "query=SELECT id, name AS descrizione FROM zz_segments WHERE id_module='.prepare($final_module['id']).' ORDER BY name", "value": "'.$id_segment.'" ]}
|
||||
</div>';
|
||||
} elseif ($options['op'] == 'add_ordine_cliente') {
|
||||
}
|
||||
// Opzioni aggiuntive per gli Interventi
|
||||
elseif ($final_module['name'] == 'Interventi') {
|
||||
echo '
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato_intervento", "required": 1, "values": "query=SELECT idstatointervento AS id, descrizione, colore AS _bgcolor_ FROM in_statiintervento WHERE deleted_at IS NULL" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "'.tr('Tipo').'", "name": "id_tipo_intervento", "required": 1, "values": "query=SELECT idtipointervento AS id, descrizione FROM in_tipiintervento" ]}
|
||||
</div>';
|
||||
}
|
||||
// Selezione fornitore per Ordine fornitore
|
||||
elseif ($options['op'] == 'add_ordine_cliente') {
|
||||
$tipo_anagrafica = tr('Fornitore');
|
||||
$ajax = 'fornitori';
|
||||
|
||||
|
@ -87,7 +100,7 @@ if (!empty($options['create_document'])) {
|
|||
</div>';
|
||||
}
|
||||
|
||||
// Conto, rivalsa INPS, ritenuta d'acconto e ritenuta contributi
|
||||
// Conto, rivalsa INPS, ritenuta d'acconto e ritenuta contributi
|
||||
if (in_array($final_module['name'], ['Fatture di vendita', 'Fatture di acquisto']) && !in_array($original_module['name'], ['Fatture di vendita', 'Fatture di acquisto'])) {
|
||||
$id_rivalsa_inps = setting('Percentuale rivalsa');
|
||||
if ($dir == 'uscita') {
|
||||
|
|
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
|
@ -10,10 +10,12 @@ $id = post('id');
|
|||
switch (filter('op')) {
|
||||
case 'check':
|
||||
$result = UpdateHook::isAvailable();
|
||||
$versione = $result[0].' ('.$result[1].')';
|
||||
|
||||
Cache::get('Ultima versione di OpenSTAManager disponibile')->set($result[0].' ('.$result[1].')');
|
||||
// Salvataggio della versione nella cache
|
||||
Cache::get('Ultima versione di OpenSTAManager disponibile')->set($versione);
|
||||
|
||||
echo $result[0];
|
||||
echo $versione;
|
||||
|
||||
break;
|
||||
|
||||
|
|
|
@ -125,10 +125,11 @@ function search(button) {
|
|||
op: "check",
|
||||
},
|
||||
success: function(data){
|
||||
if (data == "none" || data == "" ) {
|
||||
if (data === "none" || !data) {
|
||||
$("#update-search").html("'.tr('Nessun aggiornamento disponibile').'.");
|
||||
} else {
|
||||
$("#update-search").html("'.tr("E' stato individuato un nuovo aggiornamento").': " + data + ".<br>'.tr('Scaricalo ora: _LINK_', [
|
||||
let beta_warning = data.includes("beta") ? "<br><b>'.tr('Attenzione: la versione individuata è in fase sperimentale, e pertanto può presentare diversi bug e malfunzionamenti').'.</b>" : "";
|
||||
$("#update-search").html("'.tr("E' stato individuato un nuovo aggiornamento").': " + data + "." + beta_warning + "<br>'.tr('Scaricalo ora: _LINK_', [
|
||||
'_LINK_' => "<a target='_blank' href='https://github.com/devcode-it/openstamanager/releases'>https://github.com/devcode-it/openstamanager/releases</a>",
|
||||
]).'");
|
||||
}
|
||||
|
|
|
@ -51,7 +51,7 @@ class UpdateHook extends CachedManager
|
|||
|
||||
if (!$api['prerelease'] or setting('Abilita canale pre-release per aggiornamenti')) {
|
||||
$version[0] = ltrim($api['tag_name'], 'v');
|
||||
$version[1] = (($api['prerelease']) ? 'prerelease' : 'stable');
|
||||
$version[1] = !empty($api['prerelease']) ? 'beta' : 'stabile';
|
||||
$current = Update::getVersion();
|
||||
|
||||
if (version_compare($current, $version[0]) < 0) {
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ if (!empty($google)) {
|
|||
}
|
||||
|
||||
if (!$is_cliente && !$is_fornitore && $is_tecnico) {
|
||||
$ignore = $dbo->fetchArray("SELECT id FROM zz_plugins WHERE name='Sedi' OR name='Referenti' OR name='Dichiarazioni d\'intento'");
|
||||
$ignore = $dbo->fetchArray("SELECT id FROM zz_plugins WHERE name='Sedi' OR name='Referenti' OR name='Dichiarazioni d\'intento'");
|
||||
|
||||
foreach ($ignore as $plugin) {
|
||||
echo '
|
||||
|
@ -232,7 +232,7 @@ if (!empty($google)) {
|
|||
} else {
|
||||
echo '
|
||||
<div class="alert alert-info">
|
||||
'.Modules::link('Impostazioni', $dbo->fetchOne("SELECT `id` FROM `zz_settings` WHERE sezione='Generali'")['id'], tr('Per abilitare la visualizzazione delle anagrafiche nella mappa, inserire la Google Maps API Key nella scheda Impostazioni')).'.
|
||||
'.Modules::link('Impostazioni', $dbo->fetchOne("SELECT `id` FROM `zz_settings` WHERE nome='Google Maps API key'")['id'], tr('Per abilitare la visualizzazione delle anagrafiche nella mappa, inserire la Google Maps API Key nella scheda Impostazioni')).'.
|
||||
</div>';
|
||||
}
|
||||
|
||||
|
@ -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>
|
||||
|
|
|
@ -161,16 +161,20 @@ switch (post('op')) {
|
|||
// Duplica articolo
|
||||
case 'copy':
|
||||
$new = $articolo->replicate();
|
||||
$new->codice = post('codice');
|
||||
$new->qta = 0;
|
||||
$new->save();
|
||||
|
||||
// Copia degli allegati
|
||||
$allegati = $articolo->uploads();
|
||||
foreach ($allegati as $allegato) {
|
||||
$allegato->copia([
|
||||
'id_module' => $new->getModule()->id,
|
||||
'id_record' => $new->id,
|
||||
]);
|
||||
$copia_allegati = post('copia_allegati');
|
||||
if (!empty($copia_allegati)) {
|
||||
$allegati = $articolo->uploads();
|
||||
foreach ($allegati as $allegato) {
|
||||
$allegato->copia([
|
||||
'id_module' => $new->getModule()->id,
|
||||
'id_record' => $new->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
// Salvataggio immagine relativa
|
||||
|
|
|
@ -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 = [
|
||||
|
|
|
@ -3,12 +3,12 @@
|
|||
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" onclick="if( confirm(\'Duplicare questo articolo?\') ){ $(\'#form-copy\').submit(); }">
|
||||
<button type="button" class="btn btn-primary" onclick="duplicaArticolo()">
|
||||
<i class="fa fa-copy"></i> '.tr('Duplica articolo').'
|
||||
</button>';
|
||||
</button>
|
||||
|
||||
<script>
|
||||
function duplicaArticolo() {
|
||||
openModal("'.tr('Duplica articolo').'", "'.$module->fileurl('modals/duplicazione.php').'?id_module='.$id_module.'&id_record='.$id_record.'");
|
||||
}
|
||||
</script>';
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
|
||||
include_once __DIR__.'/../../../core.php';
|
||||
|
||||
echo '
|
||||
<form action="" method="post" id="form-copy">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="op" value="copy">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-9">
|
||||
{[ "type": "text", "label": "'.tr('Codice').'", "name": "codice", "required": 1, "value": "", "validation": "codice" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "checkbox", "label": "'.tr('Copia allegati').'", "name": "copia_allegati", "value": 1 ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PULSANTI -->
|
||||
<div class="row">
|
||||
<div class="col-md-12 text-right">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
<i class="fa fa-copy"></i> '.tr('Duplica').'
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>';
|
||||
|
||||
echo '
|
||||
<script>$(document).ready(init)</script>';
|
|
@ -436,12 +436,17 @@ $riga = $contratto->getRiga($type, $id_riga);
|
|||
}
|
||||
$documento = $class::find($id_documento);
|
||||
|
||||
// Individuazione sede
|
||||
$id_sede = ($documento->direzione == 'entrata') ? $documento->idsede_destinazione : $documento->idsede_partenza;
|
||||
$id_sede = $id_sede ?: $documento->idsede;
|
||||
$id_sede = $id_sede ?: 0;
|
||||
|
||||
// Creazione del contratto al volo
|
||||
if (post('create_document') == 'on') {
|
||||
$contratto = Contratto::build($documento->anagrafica, $documento->nome);
|
||||
|
||||
$contratto->idpagamento = $documento->idpagamento;
|
||||
$contratto->idsede = $documento->idsede;
|
||||
$contratto->idsede = $id_sede;
|
||||
|
||||
$contratto->id_documento_fe = $documento->id_documento_fe;
|
||||
$contratto->codice_cup = $documento->codice_cup;
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -25,7 +25,9 @@ echo '
|
|||
|
||||
// Duplica contratto
|
||||
echo'
|
||||
<button type="button" class="btn btn-primary" onclick="if( confirm(\''.tr('Duplicare questo contratto?').'\') ){ $(\'#copia-contratto\').submit(); }"> <i class="fa fa-copy"></i> '.tr('Duplica contratto').'</button>';
|
||||
<button type="button" class="btn btn-primary" onclick="if( confirm(\''.tr('Duplicare questo contratto?').'\') ){ $(\'#copia-contratto\').submit(); }">
|
||||
<i class="fa fa-copy"></i> '.tr('Duplica contratto').'
|
||||
</button>';
|
||||
|
||||
echo '
|
||||
<form action="" method="post" id="copia-contratto">
|
||||
|
|
|
@ -286,6 +286,11 @@ switch (post('op')) {
|
|||
}
|
||||
$documento = $class::find($id_documento);
|
||||
|
||||
// Individuazione sede
|
||||
$id_sede = ($documento->direzione == 'entrata') ? $documento->idsede_destinazione : $documento->idsede_partenza;
|
||||
$id_sede = $id_sede ?: $documento->idsede;
|
||||
$id_sede = $id_sede ?: 0;
|
||||
|
||||
// Creazione del ddt al volo
|
||||
if (post('create_document') == 'on') {
|
||||
$tipo = Tipo::where('dir', $documento->direzione)->first();
|
||||
|
@ -297,7 +302,7 @@ switch (post('op')) {
|
|||
$ddt->codice_cup = $documento->codice_cup;
|
||||
$ddt->codice_cig = $documento->codice_cig;
|
||||
$ddt->num_item = $documento->num_item;
|
||||
$ddt->idsede_destinazione = $documento->idsede;
|
||||
$ddt->idsede_destinazione = $id_sede;
|
||||
|
||||
$ddt->save();
|
||||
|
||||
|
|
|
@ -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 = [];
|
||||
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>
|
||||
|
|
|
@ -172,9 +172,9 @@ elseif ($record['stato'] == 'Bozza') {
|
|||
<div class="col-md-2" <?php echo ($dir == 'entrata') ? 'hidden' : ''; ?>>
|
||||
{[ "type": "date", "label": "<?php echo tr('Data registrazione'); ?>", <?php echo $readonly; ?> "name": "data_registrazione", "required": 0, "value": "$data_registrazione$", "help": "<?php echo tr('Data in cui si è effettuata la registrazione della fattura in contabilità'); ?>" ]}
|
||||
</div>
|
||||
|
||||
<!-- TODO: da nascondere per le fatture di vendita in quanto questa data sarà sempre uguale alla data di emissione -->
|
||||
<div class="col-md-2" <?php echo ($is_fiscale) ? '' : 'hidden'; ?>>
|
||||
{[ "type": "date", "label": "<?php echo tr('Data competenza'); ?>", "name": "data_competenza", "required": 1, "value": "$data_competenza$", "min-date": "$data_registrazione$", "help": "<?php echo tr('Data nella quale considerare il movimento contabile, che può essere posticipato rispetto la data della fattura'); ?>" ]}
|
||||
{[ "type": "date", "class":"<?php echo (dateFormat($fattura->data_competenza) < dateFormat($fattura->data)) ? 'unblockable' : ''; ?>", "label": "<?php echo tr('Data competenza'); ?>", "name": "data_competenza", "required": 1, "value": "$data_competenza$", "min-date": "$data_registrazione$", "help": "<?php echo tr('Data nella quale considerare il movimento contabile, che può essere posticipato rispetto la data della fattura'); ?>" ]}
|
||||
</div>
|
||||
|
||||
|
||||
|
|
|
@ -258,7 +258,7 @@ function aggiungi_movimento($iddocumento, $dir, $primanota = 0)
|
|||
$importo_cliente = sum($importo_cliente, -$iva_fattura, 2);
|
||||
}
|
||||
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, data_documento, iddocumento, idanagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($data_documento).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_controparte).', '.prepare(($importo_cliente + $totale_bolli) * $segno_mov1_cliente).', '.prepare($primanota).' )';
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, iddocumento, idanagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_controparte).', '.prepare(($importo_cliente + $totale_bolli) * $segno_mov1_cliente).', '.prepare($primanota).' )';
|
||||
$dbo->query($query2);
|
||||
|
||||
// 2) Aggiungo il totale sul conto dei ricavi/spese scelto
|
||||
|
@ -269,7 +269,7 @@ function aggiungi_movimento($iddocumento, $dir, $primanota = 0)
|
|||
// Retrocompatibilità
|
||||
$idconto_riga = !empty($riga['idconto']) ? $riga['idconto'] : $idconto;
|
||||
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, data_documento, iddocumento, idanagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($data_documento).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_riga).', '.prepare($riga['imponibile'] * $segno_mov2_ricavivendite).', '.prepare($primanota).')';
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, iddocumento, idanagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_riga).', '.prepare($riga['imponibile'] * $segno_mov2_ricavivendite).', '.prepare($primanota).')';
|
||||
$dbo->query($query2);
|
||||
}
|
||||
|
||||
|
@ -279,7 +279,7 @@ function aggiungi_movimento($iddocumento, $dir, $primanota = 0)
|
|||
$descrizione_conto_iva = ($dir == 'entrata') ? 'Iva su vendite' : 'Iva su acquisti';
|
||||
$idconto_iva = setting('Conto per '.$descrizione_conto_iva);
|
||||
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, data_documento, iddocumento, idanagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($data_documento).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_iva).', '.prepare($iva_fattura * $segno_mov3_iva).', '.prepare($primanota).')';
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, iddocumento, idanagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_iva).', '.prepare($iva_fattura * $segno_mov3_iva).', '.prepare($primanota).')';
|
||||
$dbo->query($query2);
|
||||
}
|
||||
|
||||
|
@ -287,7 +287,7 @@ function aggiungi_movimento($iddocumento, $dir, $primanota = 0)
|
|||
if ($iva_indetraibile_fattura != 0 && !$split_payment) {
|
||||
$idconto_iva2 = setting('Conto per Iva indetraibile');
|
||||
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, data_documento, iddocumento, idanagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($data_documento).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_iva2).', '.prepare($iva_indetraibile_fattura * $segno_mov3_iva).', '.prepare($primanota).')';
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, iddocumento, idanagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_iva2).', '.prepare($iva_indetraibile_fattura * $segno_mov3_iva).', '.prepare($primanota).')';
|
||||
$dbo->query($query2);
|
||||
}
|
||||
|
||||
|
@ -296,7 +296,7 @@ function aggiungi_movimento($iddocumento, $dir, $primanota = 0)
|
|||
if ($totale_rivalsainps != 0) {
|
||||
$idconto_inps = setting('Conto per Erario c/INPS');
|
||||
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, data_documento, iddocumento, idanagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($data_documento).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_inps).', '.prepare($totale_rivalsainps * $segno_mov4_inps).', '.prepare($primanota).')';
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, iddocumento, idanagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_inps).', '.prepare($totale_rivalsainps * $segno_mov4_inps).', '.prepare($primanota).')';
|
||||
$dbo->query($query2);
|
||||
}
|
||||
|
||||
|
@ -306,11 +306,11 @@ function aggiungi_movimento($iddocumento, $dir, $primanota = 0)
|
|||
$idconto_ritenutaacconto = setting("Conto per Erario c/ritenute d'acconto");
|
||||
|
||||
// DARE nel conto ritenuta
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, data_documento, iddocumento, idanagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($data_documento).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_ritenutaacconto).', '.prepare($totale_ritenutaacconto * $segno_mov5_ritenutaacconto).', '.prepare($primanota).')';
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, iddocumento, idanagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_ritenutaacconto).', '.prepare($totale_ritenutaacconto * $segno_mov5_ritenutaacconto).', '.prepare($primanota).')';
|
||||
$dbo->query($query2);
|
||||
|
||||
// AVERE nel riepilogativo clienti
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, data_documento, iddocumento, idanagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($data_documento).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_controparte).', '.prepare(($totale_ritenutaacconto * $segno_mov5_ritenutaacconto) * -1).', '.prepare($primanota).')';
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, iddocumento, idanagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_controparte).', '.prepare(($totale_ritenutaacconto * $segno_mov5_ritenutaacconto) * -1).', '.prepare($primanota).')';
|
||||
$dbo->query($query2);
|
||||
}
|
||||
|
||||
|
@ -320,11 +320,11 @@ function aggiungi_movimento($iddocumento, $dir, $primanota = 0)
|
|||
$idconto_ritenutaenasarco = setting('Conto per Erario c/enasarco');
|
||||
|
||||
// DARE nel conto ritenuta
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, data_documento, iddocumento, idanagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($data_documento).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_ritenutaenasarco).', '.prepare($totale_ritenutacontributi * $segno_mov5_ritenutaacconto).', '.prepare($primanota).')';
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, iddocumento, idanagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_ritenutaenasarco).', '.prepare($totale_ritenutacontributi * $segno_mov5_ritenutaacconto).', '.prepare($primanota).')';
|
||||
$dbo->query($query2);
|
||||
|
||||
// AVERE nel riepilogativo clienti
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, data_documento, iddocumento, idanagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($data_documento).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_controparte).', '.prepare(($totale_ritenutacontributi * $segno_mov5_ritenutaacconto) * -1).', '.prepare($primanota).')';
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, iddocumento, idanagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_controparte).', '.prepare(($totale_ritenutacontributi * $segno_mov5_ritenutaacconto) * -1).', '.prepare($primanota).')';
|
||||
$dbo->query($query2);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -333,6 +333,58 @@ $riga = $intervento->getRiga($type, $id_riga);
|
|||
aggiorna_sedi_movimenti('interventi', $id_record);
|
||||
break;
|
||||
|
||||
// Aggiunta di un documento in ordine
|
||||
case 'add_documento':
|
||||
$class = post('class');
|
||||
$id_documento = post('id_documento');
|
||||
|
||||
// Individuazione del documento originale
|
||||
if (!is_subclass_of($class, \Common\Document::class)) {
|
||||
return;
|
||||
}
|
||||
$documento = $class::find($id_documento);
|
||||
|
||||
// Individuazione sede
|
||||
$id_sede = ($documento->direzione == 'entrata') ? $documento->idsede_destinazione : $documento->idsede_partenza;
|
||||
$id_sede = $id_sede ?: $documento->idsede;
|
||||
$id_sede = $id_sede ?: 0;
|
||||
|
||||
// Creazione dell' ordine al volo
|
||||
if (post('create_document') == 'on') {
|
||||
$stato = Stato::find(post('id_stato_intervento'));
|
||||
$tipo = TipoSessione::find(post('id_tipo_intervento'));
|
||||
|
||||
$intervento = Intervento::build($documento->anagrafica, $tipo, $stato, post('data'));
|
||||
$intervento->idsede_destinazione = $id_sede;
|
||||
|
||||
$intervento->id_documento_fe = $documento->id_documento_fe;
|
||||
$intervento->codice_cup = $documento->codice_cup;
|
||||
$intervento->codice_cig = $documento->codice_cig;
|
||||
$intervento->num_item = $documento->num_item;
|
||||
|
||||
$intervento->save();
|
||||
|
||||
$id_record = $intervento->id;
|
||||
}
|
||||
|
||||
$righe = $documento->getRighe();
|
||||
foreach ($righe as $riga) {
|
||||
if (post('evadere')[$riga->id] == 'on' and !empty(post('qta_da_evadere')[$riga->id])) {
|
||||
$qta = post('qta_da_evadere')[$riga->id];
|
||||
|
||||
$copia = $riga->copiaIn($intervento, $qta);
|
||||
$copia->save();
|
||||
}
|
||||
}
|
||||
|
||||
// Messaggio informativo
|
||||
$message = tr('_DOC_ aggiunto!', [
|
||||
'_DOC_' => $documento->getReference(),
|
||||
]);
|
||||
flash()->info($message);
|
||||
|
||||
break;
|
||||
|
||||
case 'firma':
|
||||
if (directory($docroot.'/files/interventi')) {
|
||||
if (post('firma_base64') != '') {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
});
|
||||
|
|
|
@ -16,16 +16,23 @@ if (empty($record['firma_file'])) {
|
|||
|
||||
// Duplica intervento
|
||||
echo'
|
||||
<button type="button" class="btn btn-primary " onclick="launch_modal( \''.tr('Duplica attività').'\', globals.rootdir + \'/modules/interventi/copia_attivita.php?id_module='.$id_module.'&id_record='.$id_record.'\');" >
|
||||
<i class="fa fa-copy"></i> '.tr('Duplica attività').'...
|
||||
</button>';
|
||||
|
||||
// Disabilito il tasto di firma per gli interventi completati
|
||||
echo '
|
||||
<button type="button" class="btn btn-primary " onclick="duplicaIntervento()">
|
||||
<i class="fa fa-copy"></i> '.tr('Duplica attività').'
|
||||
</button>
|
||||
|
||||
<!-- EVENTUALE FIRMA GIA\' EFFETTUATA -->
|
||||
'.$info_firma.'
|
||||
|
||||
<button type="button" class="btn btn-primary " onclick="launch_modal( \''.tr('Anteprima e firma').'\', globals.rootdir + \'/modules/interventi/add_firma.php?id_module='.$id_module.'&id_record='.$id_record.'&anteprima=1\');" '.($record['flag_completato'] ? 'disabled' : '').'>
|
||||
<button type="button" class="btn btn-primary" onclick="anteprimaFirma()" '.($record['flag_completato'] ? 'disabled' : '').'>
|
||||
<i class="fa fa-desktop"></i> '.$frase.'...
|
||||
</button>';
|
||||
</button>
|
||||
|
||||
<script>
|
||||
function duplicaIntervento() {
|
||||
openModal("'.tr('Duplica attività').'", "'.$module->fileurl('modals/duplicazione.php').'?id_module='.$id_module.'&id_record='.$id_record.'");
|
||||
}
|
||||
|
||||
function anteprimaFirma() {
|
||||
openModal("'.tr('Anteprima e firma').'", "'.$module->fileurl('add_firma.php').'?id_module='.$id_module.'&id_record='.$id_record.'&anteprima=1");
|
||||
}
|
||||
</script>';
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
@ -119,7 +121,6 @@ $_SESSION['superselect']['permetti_movimento_a_zero'] = false;
|
|||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- RIGA 5 -->
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
|
@ -262,7 +263,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>
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
<?php
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
include_once __DIR__.'/../../../core.php';
|
||||
|
||||
echo '
|
||||
<form action="" method="post" id="copia-intervento">
|
||||
<form action="" method="post" id="form-copy">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="op" value="copy">
|
||||
|
||||
|
@ -11,27 +11,31 @@ echo '
|
|||
<div class="col-md-6">
|
||||
{[ "type": "timestamp", "label": "'.tr('Data/ora richiesta').'", "name": "data_richiesta", "required": 0, "value": "-now-", "required":1 ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "'.tr('Stato').'", "name": "idstatointervento", "required": 1, "values": "query=SELECT idstatointervento AS id, descrizione, colore AS _bgcolor_ FROM in_statiintervento WHERE deleted_at IS NULL", "value": "" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{["type":"checkbox", "label":"'.tr('Duplica righe').'", "name":"righe", "value":"", "help":"'.tr('Selezione per riportare anche le righe nella nuova attività').'" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{["type":"checkbox", "label":"'.tr('Duplica sessioni').'", "name":"sessioni", "value":"", "help":"'.tr('Selezione per riportare anche le sessioni di lavoro nella nuova attività').'" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12 text-right">
|
||||
<button type="submit" class="btn btn-primary"><i class="fa fa-copy"></i> '.tr('Duplica attività').'...</button>
|
||||
</div>
|
||||
</div>
|
||||
<!-- PULSANTI -->
|
||||
<div class="row">
|
||||
<div class="col-md-12 text-right">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
<i class="fa fa-copy"></i> '.tr('Duplica').'
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>';
|
||||
|
||||
</form>
|
||||
|
||||
<script>
|
||||
init();
|
||||
</script>';
|
||||
echo '
|
||||
<script>$(document).ready(init)</script>';
|
|
@ -323,13 +323,18 @@ switch (post('op')) {
|
|||
}
|
||||
$documento = $class::find($id_documento);
|
||||
|
||||
// Individuazione sede
|
||||
$id_sede = ($documento->direzione == 'entrata') ? $documento->idsede_destinazione : $documento->idsede_partenza;
|
||||
$id_sede = $id_sede ?: $documento->idsede;
|
||||
$id_sede = $id_sede ?: 0;
|
||||
|
||||
// Creazione dell' ordine al volo
|
||||
if (post('create_document') == 'on') {
|
||||
$tipo = Tipo::where('dir', $documento->direzione)->first();
|
||||
|
||||
$ordine = Ordine::build($documento->anagrafica, $tipo, post('data'));
|
||||
$ordine->idpagamento = $documento->idpagamento;
|
||||
$ordine->idsede = $documento->idsede;
|
||||
$ordine->idsede = $id_sede;
|
||||
|
||||
$ordine->id_documento_fe = $documento->id_documento_fe;
|
||||
$ordine->codice_cup = $documento->codice_cup;
|
||||
|
|
|
@ -8,26 +8,29 @@ echo '
|
|||
<i class="fa fa-magic"></i> '.tr('Crea').'...
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-right">';
|
||||
|
||||
echo '
|
||||
<li>
|
||||
<a data-href="'.$structure->fileurl('crea_documento.php').'?id_module='.$id_module.'&id_record='.$id_record.'&documento=ordine_fornitore" data-toggle="modal" data-title="'.tr('Crea ordine fornitore').'" class="'.(in_array($record['stato'], ['Accettato', 'Parzialmente evaso']) ? '' : 'disabled').'"><i class="fa fa-file-o"></i> '.tr('Ordine fornitore').'
|
||||
<ul class="dropdown-menu dropdown-menu-right">
|
||||
<li>
|
||||
<a data-href="'.$structure->fileurl('crea_documento.php').'?id_module='.$id_module.'&id_record='.$id_record.'&documento=intervento" data-toggle="modal" data-title="'.tr('Crea attività').'">
|
||||
<i class="fa fa-wrench"></i> '.tr('Attività').'
|
||||
</a>
|
||||
</li>';
|
||||
</li>
|
||||
|
||||
echo '
|
||||
<li>
|
||||
<a data-href="'.$structure->fileurl('crea_documento.php').'?id_module='.$id_module.'&id_record='.$id_record.'&documento=ddt" data-toggle="modal" data-title="'.tr('Crea ddt').'" class="'.(in_array($record['stato'], ['Accettato', 'Parzialmente evaso']) ? '' : 'disabled').'"><i class="fa fa-truck"></i> '.tr('Ddt').'
|
||||
<a data-href="'.$structure->fileurl('crea_documento.php').'?id_module='.$id_module.'&id_record='.$id_record.'&documento=ordine_fornitore" data-toggle="modal" data-title="'.tr('Crea ordine fornitore').'">
|
||||
<i class="fa fa-file-o"></i> '.tr('Ordine fornitore').'
|
||||
</a>
|
||||
</li>';
|
||||
</li>
|
||||
|
||||
echo '
|
||||
<li>
|
||||
<a data-href="'.$structure->fileurl('crea_documento.php').'?id_module='.$id_module.'&id_record='.$id_record.'&documento=fattura" data-toggle="modal" data-title="'.tr('Crea fattura').'" class="'.(in_array($record['stato'], ['Accettato', 'Parzialmente fatturato']) ? '' : 'disabled').'"><i class="fa fa-file"></i> '.tr('Fattura').'
|
||||
<a data-href="'.$structure->fileurl('crea_documento.php').'?id_module='.$id_module.'&id_record='.$id_record.'&documento=ddt" data-toggle="modal" data-title="'.tr('Crea ddt').'">
|
||||
<i class="fa fa-truck"></i> '.tr('Ddt').'
|
||||
</a>
|
||||
</li>';
|
||||
</li>
|
||||
|
||||
echo '
|
||||
<li>
|
||||
<a data-href="'.$structure->fileurl('crea_documento.php').'?id_module='.$id_module.'&id_record='.$id_record.'&documento=fattura" data-toggle="modal" data-title="'.tr('Crea fattura').'">
|
||||
<i class="fa fa-file"></i> '.tr('Fattura').'
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>';
|
||||
|
|
|
@ -14,6 +14,9 @@ if (get('documento') == 'fattura') {
|
|||
} elseif (get('documento') == 'ordine_fornitore') {
|
||||
$final_module = 'Ordini fornitore';
|
||||
$op = 'add_ordine_cliente';
|
||||
} elseif (get('documento') == 'intervento') {
|
||||
$final_module = 'Interventi';
|
||||
$op = 'add_documento';
|
||||
} else {
|
||||
$final_module = $module['name'] == 'Ordini cliente' ? 'Ddt di vendita' : 'Ddt di acquisto';
|
||||
$op = 'add_ordine';
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -3,13 +3,17 @@
|
|||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
echo'
|
||||
<button type="button" class="btn btn-primary" onclick="if( confirm(\'Duplicare questo preventivo?\') ){ $(\'#copia-preventivo\').submit(); }"> <i class="fa fa-copy"></i> '.tr('Duplica preventivo').'</button>';
|
||||
<button type="button" class="btn btn-primary" onclick="if( confirm(\'Duplicare questo preventivo?\') ){ $(\'#copia-preventivo\').submit(); }">
|
||||
<i class="fa fa-copy"></i> '.tr('Duplica preventivo').'
|
||||
</button>';
|
||||
|
||||
$stati_abilitati = $dbo->fetchOne('SELECT GROUP_CONCAT(`descrizione` SEPARATOR ", ") AS stati_abilitati FROM `co_statipreventivi` WHERE `is_revisionabile` = 1 ')['stati_abilitati'];
|
||||
|
||||
// Crea revisione
|
||||
echo '
|
||||
<button type="button" class="btn btn-warning '.($record['is_revisionabile'] ? '' : 'disabled tip').'" onclick="if(confirm(\'Vuoi creare un nuova revisione?\')){$(\'#crea-revisione\').submit();}" '.($record['is_revisionabile'] ? '' : 'disabled').' title="'.($record['is_revisionabile'] ? '' : tr('Per creare una nuova revisione lo stato del preventivo deve essere tra: ').$stati_abilitati).'" ><i class="fa fa-edit"></i> '.tr('Crea nuova revisione...').'</button>';
|
||||
<button type="button" class="btn btn-warning '.($record['is_revisionabile'] ? '' : 'disabled tip').'" onclick="if(confirm(\'Vuoi creare un nuova revisione?\')){$(\'#crea-revisione\').submit();}" '.($record['is_revisionabile'] ? '' : 'disabled').' title="'.($record['is_revisionabile'] ? '' : tr('Per creare una nuova revisione lo stato del preventivo deve essere tra: ').$stati_abilitati).'">
|
||||
<i class="fa fa-edit"></i> '.tr('Crea nuova revisione...').'
|
||||
</button>';
|
||||
|
||||
$rs_documento = $dbo->fetchArray('SELECT * FROM co_righe_preventivi WHERE idpreventivo='.prepare($id_record));
|
||||
|
||||
|
@ -20,14 +24,16 @@ $stati_abilitati = $dbo->fetchOne('SELECT GROUP_CONCAT(`descrizione` SEPARATOR "
|
|||
// Creazione altri documenti
|
||||
echo '
|
||||
<div style="margin-left:4px;" class="dropdown pull-right">
|
||||
<button class="btn btn-info dropdown-toggle '.($disabled ? '' : 'disabled tip').'" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true" '.($disabled ? '' : 'disabled').' title="'.($disabled ? '' : tr('Per creare un documento deve essere inserita almeno una riga e lo stato del preventivo deve essere tra: ').$stati_abilitati).'" >
|
||||
<button class="btn btn-info dropdown-toggle '.($disabled ? '' : 'disabled tip').'" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true" '.($disabled ? '' : 'disabled').' title="'.($disabled ? '' : tr('Per creare un documento deve essere inserita almeno una riga e lo stato del preventivo deve essere tra: _STATE_LIST_', [
|
||||
'_STATE_LIST_' => $stati_abilitati,
|
||||
])).'" >
|
||||
<i class="fa fa-magic"></i> '.tr('Crea').'...
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-right">
|
||||
<li>
|
||||
<a class="'.($disabled ? '' : 'disabled').'" data-href="'.$structure->fileurl('crea_documento.php').'?id_module='.$id_module.'&id_record='.$id_record.'&documento=ddt" data-toggle="modal" data-title="'.tr('Crea ordine cliente').'">
|
||||
<i class="fa fa-truck"></i> '.tr('DDT in uscita').'
|
||||
<li>
|
||||
<a class="'.($disabled ? '' : 'disabled').'" data-href="'.$structure->fileurl('crea_documento.php').'?id_module='.$id_module.'&id_record='.$id_record.'&documento=contratto" data-toggle="modal" data-title="'.tr('Crea contratto').'">
|
||||
<i class="fa fa-file-o"></i> '.tr('Contratto').'
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
@ -37,17 +43,17 @@ echo '
|
|||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a class="'.($disabled ? '' : 'disabled').'" data-href="'.$structure->fileurl('crea_documento.php').'?id_module='.$id_module.'&id_record='.$id_record.'&documento=ddt" data-toggle="modal" data-title="'.tr('Crea ordine cliente').'">
|
||||
<i class="fa fa-truck"></i> '.tr('DDT in uscita').'
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a class="'.($disabled ? '' : 'disabled').'" data-href="'.$structure->fileurl('crea_documento.php').'?id_module='.$id_module.'&id_record='.$id_record.'&documento=fattura" data-toggle="modal" data-title="'.tr('Crea fattura').'">
|
||||
<i class="fa fa-file"></i> '.tr('Fattura').'
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a class="'.($disabled ? '' : 'disabled').'" data-href="'.$structure->fileurl('crea_documento.php').'?id_module='.$id_module.'&id_record='.$id_record.'&documento=contratto" data-toggle="modal" data-title="'.tr('Crea contratto').'">
|
||||
<i class="fa fa-file-o"></i> '.tr('Contratto').'
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>';
|
||||
|
||||
|
|
|
@ -213,11 +213,6 @@ if (!$block_edit) {
|
|||
<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').'
|
||||
|
|
|
@ -30,7 +30,6 @@ class Movimento extends Model
|
|||
|
||||
$documento = $scadenza ? $scadenza->documento : null;
|
||||
if (!empty($documento)) {
|
||||
$model->data_documento = $documento->data;
|
||||
$model->iddocumento = $documento->id;
|
||||
$model->idanagrafica = $documento->idanagrafica;
|
||||
}
|
||||
|
|
|
@ -18,16 +18,16 @@ switch (post('op')) {
|
|||
}
|
||||
|
||||
if ($i > 0) {
|
||||
flash()->info(tr($i.' email rimosse dalla coda di invio.'));
|
||||
flash()->info(tr('Email rimosse dalla coda di invio'));
|
||||
} else {
|
||||
flash()->warning(tr('Nessuna email rimossa dalla coda di invio.'));
|
||||
flash()->warning(tr('Nessuna email rimossa dalla coda di invio'));
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
$operations['delete-bulk'] = [
|
||||
'text' => '<span><i class="fa fa-trash"></i> '.tr('Elimina selezionati').'</span>',
|
||||
'text' => '<span><i class="fa fa-trash"></i> '.tr('Elimina email selezionate e non ancora inviate').'</span>',
|
||||
'data' => [
|
||||
'msg' => tr('Vuoi davvero eliminare dalla coda di invio le email selezionate?'),
|
||||
'button' => tr('Procedi'),
|
||||
|
|
|
@ -72,24 +72,63 @@ 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">
|
||||
|
|
|
@ -126,7 +126,7 @@ if (!empty($google)) {
|
|||
} else {
|
||||
echo '
|
||||
<div class="alert alert-info">
|
||||
'.Modules::link('Impostazioni', $dbo->fetchOne("SELECT `id` FROM `zz_settings` WHERE sezione='Generali'")['id'], tr('Per abilitare la visualizzazione delle anagrafiche nella mappa, inserire la Google Maps API Key nella scheda Impostazioni')).'.
|
||||
'.Modules::link('Impostazioni', $dbo->fetchOne("SELECT `id` FROM `zz_settings` WHERE nome='Google Maps API key'")['id'], tr('Per abilitare la visualizzazione delle anagrafiche nella mappa, inserire la Google Maps API Key nella scheda Impostazioni')).'.
|
||||
</div>';
|
||||
}
|
||||
|
||||
|
|
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;
|
||||
|
|
19
src/AJAX.php
19
src/AJAX.php
|
@ -25,10 +25,11 @@ class AJAX
|
|||
* @param mixed $search
|
||||
* @param int $page
|
||||
* @param int $length
|
||||
* @param array $options
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function select($resource, $elements = [], $search = null, $page = 0, $length = 100)
|
||||
public static function select($resource, $elements = [], $search = null, $page = 0, $length = 100, $options = [])
|
||||
{
|
||||
if (!isset($elements)) {
|
||||
$elements = [];
|
||||
|
@ -215,13 +216,12 @@ class AJAX
|
|||
* @param array $elements
|
||||
* @param array $limit
|
||||
* @param mixed $search
|
||||
* @param array $options
|
||||
*
|
||||
* @return array|null
|
||||
*/
|
||||
protected static function getSelectResults($file, $resource, $elements = [], $limit = [], $search = null)
|
||||
protected static function getSelectResults($file, $resource, $elements = [], $limit = [], $search = null, $options = [])
|
||||
{
|
||||
$superselect = self::getSelectInfo();
|
||||
|
||||
$where = [];
|
||||
$filter = [];
|
||||
$search_fields = [];
|
||||
|
@ -234,6 +234,9 @@ class AJAX
|
|||
// Database
|
||||
$dbo = $database = database();
|
||||
|
||||
// Opzioni di selezione
|
||||
$superselect = $options;
|
||||
|
||||
require $file;
|
||||
|
||||
if (!isset($results) && !empty($query)) {
|
||||
|
@ -243,14 +246,6 @@ class AJAX
|
|||
return isset($results) ? $results : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce le informazioni aggiuntive per i select.
|
||||
*/
|
||||
protected static function getSelectInfo()
|
||||
{
|
||||
return !empty($_SESSION['superselect']) ? $_SESSION['superselect'] : [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Ottiene i risultati della ricerca all'interno di un file specifico (modulo).
|
||||
*
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -49,13 +49,19 @@ class ChoicesHandler implements HandlerInterface
|
|||
// Generazione del codice HTML
|
||||
// "+ this.checked" rende il valore booleano un numero
|
||||
$result = '
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon before">
|
||||
<input |attr| onchange="$(this).parent().find(\'[type=hidden]\').val( + this.checked)">
|
||||
<div class="form-group">
|
||||
<input type="hidden" name="|name|" value="|value|">
|
||||
</span>
|
||||
<input type="text" class="form-control" placeholder="|placeholder|" disabled>
|
||||
</div>';
|
||||
<input type="checkbox" id="|id|" value="|value|" autocomplete="off" class="hidden" |attr| onchange="$(this).parent().find(\'[type = hidden]\').val(+this.checked)"/>
|
||||
<div class="btn-group">
|
||||
<label for="|id|" class="btn btn-default">
|
||||
<span class="fa fa-check"></span>
|
||||
<span class="fa fa-close"></span>
|
||||
</label>
|
||||
<label for="|id|" class="btn btn-default active">
|
||||
|placeholder|
|
||||
</label>
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
namespace HTMLBuilder\Handler;
|
||||
|
||||
use AJAX;
|
||||
|
||||
/**
|
||||
* Gestione dell'input di tipo "select".
|
||||
*
|
||||
|
@ -28,6 +30,21 @@ class SelectHandler implements HandlerInterface
|
|||
$values['value'] = setting($values['valore_predefinito']);
|
||||
}
|
||||
|
||||
// Informazioni aggiuntive per il select
|
||||
$infos = [];
|
||||
if (!empty($values['ajax-info'])) {
|
||||
$list = explode(',', $values['ajax-info']);
|
||||
|
||||
foreach ($list as $element) {
|
||||
list($name, $value) = explode('=', $element);
|
||||
|
||||
$values['data-select-'.$name] = $value;
|
||||
$infos[$name] = $value;
|
||||
}
|
||||
|
||||
unset($values['ajax-info']);
|
||||
}
|
||||
|
||||
$values['value'] = (array) $values['value'];
|
||||
|
||||
// Inizializzazione del codice HTML
|
||||
|
@ -38,7 +55,7 @@ class SelectHandler implements HandlerInterface
|
|||
// Gestione delle richieste AJAX (se il campo "ajax-source" è impostato)
|
||||
if (!empty($values['ajax-source'])) {
|
||||
if (!empty($values['value']) || is_numeric($values['value'])) {
|
||||
$result .= $this->select2($values['ajax-source'], $values['value']);
|
||||
$result .= $this->select2($values['ajax-source'], $values['value'], $infos);
|
||||
}
|
||||
} else {
|
||||
if (!in_array('multiple', $extras)) {
|
||||
|
@ -102,24 +119,20 @@ class SelectHandler implements HandlerInterface
|
|||
|
||||
/**
|
||||
* Gestione dell'input di tipo "select" con richieste AJAX (nome della richiesta indicato tramite attributo "ajax-source").
|
||||
* Esempio: {[ "type": "select", "label": "Select di test", "name": "test", "ajax-source": "test" ]}.
|
||||
* Esempio: {[ "type": "select", "label": "Select di test", "name": "test", "ajax-source": "test", "ajax-info": "id_test=1,test=si" ]}.
|
||||
*
|
||||
* @param string $op
|
||||
* @param array $elements
|
||||
* @param array $elements
|
||||
* @param array $info
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function select2($op, $elements)
|
||||
protected function select2($op, $elements, $info)
|
||||
{
|
||||
// Richiamo del file dedicato alle richieste AJAX per ottenere il valore iniziale del select
|
||||
ob_start();
|
||||
$dbo = database();
|
||||
include DOCROOT.'/ajax_select.php';
|
||||
$text = ob_get_clean();
|
||||
$response = AJAX::select($op, $elements, null, 0, 100, $info);
|
||||
|
||||
$html = '';
|
||||
|
||||
$response = (array) json_decode($text, true);
|
||||
$results = $response['results'];
|
||||
foreach ($results as $element) {
|
||||
$element = (array) $element;
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -134,4 +134,34 @@ INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `format
|
|||
((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"} ]}', '', '');
|
||||
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';
|
||||
|
|
|
@ -0,0 +1,50 @@
|
|||
-- Aggiunta data competenza nel filtro temporale per le fatture di acquisto
|
||||
UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `co_documenti`
|
||||
LEFT JOIN `an_anagrafiche` ON `co_documenti`.`idanagrafica` = `an_anagrafiche`.`idanagrafica`
|
||||
LEFT JOIN `co_tipidocumento` ON `co_documenti`.`idtipodocumento` = `co_tipidocumento`.`id`
|
||||
LEFT JOIN `co_statidocumento` ON `co_documenti`.`idstatodocumento` = `co_statidocumento`.`id`
|
||||
LEFT JOIN (
|
||||
SELECT `iddocumento`,
|
||||
SUM(`subtotale` - `sconto`) AS `totale_imponibile`,
|
||||
SUM(`subtotale` - `sconto` + `iva`) AS `totale`
|
||||
FROM `co_righe_documenti`
|
||||
GROUP BY `iddocumento`
|
||||
) AS righe ON `co_documenti`.`id` = `righe`.`iddocumento`
|
||||
WHERE 1=1 AND `dir` = \'uscita\' |segment(`co_documenti`.`id_segment`)||date_period(custom, \'|period_start|\' <= `co_documenti`.`data` AND \'|period_end|\' >= `co_documenti`.`data`, \'|period_start|\' <= `co_documenti`.`data_competenza` AND \'|period_end|\' >= `co_documenti`.`data_competenza` )|
|
||||
HAVING 2=2
|
||||
ORDER BY `co_documenti`.`data` DESC, CAST(IF(`co_documenti`.`numero` = \'\', `co_documenti`.`numero_esterno`, `co_documenti`.`numero`) AS UNSIGNED) DESC' WHERE `name` = 'Fatture di acquisto';
|
||||
|
||||
|
||||
-- Allineo per i movimenti relativi alle fatture di vendita, la data del movimento con la data del documento
|
||||
UPDATE `co_movimenti` SET `co_movimenti`.`data` = `co_movimenti`.`data_documento` WHERE `iddocumento` IN (SELECT `co_documenti`.`id` FROM `co_documenti` INNER JOIN `co_tipidocumento` ON `co_documenti`.`idtipodocumento` = `co_tipidocumento`.`id` WHERE `co_tipidocumento`.`dir` = 'entrata' );
|
||||
|
||||
-- Allineo per le fatture di vendita, la data_competenza con data emissione del documento
|
||||
UPDATE `co_documenti` SET `co_documenti`.`data_competenza` = `co_documenti`.`data` WHERE `co_documenti`.`idtipodocumento` IN (SELECT `co_tipidocumento`.`id` FROM `co_tipidocumento` WHERE `co_tipidocumento`.`dir` = 'entrata');
|
||||
|
||||
-- Elimino data_documento per co_documenti
|
||||
ALTER TABLE `co_movimenti` DROP `data_documento`;
|
||||
|
||||
-- Allineamento idarticolo nelle tabelle delle righe
|
||||
ALTER TABLE `co_righe_documenti` CHANGE `idarticolo` `idarticolo` INT(11) NULL;
|
||||
UPDATE `co_righe_documenti` SET `idarticolo` = NULL WHERE `idarticolo` = 0;
|
||||
|
||||
ALTER TABLE `co_righe_preventivi` CHANGE `idarticolo` `idarticolo` INT(11) NULL;
|
||||
UPDATE `co_righe_preventivi` SET `idarticolo` = NULL WHERE `idarticolo` = 0;
|
||||
|
||||
ALTER TABLE `co_righe_contratti` CHANGE `idarticolo` `idarticolo` INT(11) NULL;
|
||||
UPDATE `co_righe_contratti` SET `idarticolo` = NULL WHERE `idarticolo` = 0;
|
||||
|
||||
ALTER TABLE `dt_righe_ddt` CHANGE `idarticolo` `idarticolo` INT(11) NULL;
|
||||
UPDATE `dt_righe_ddt` SET `idarticolo` = NULL WHERE `idarticolo` = 0;
|
||||
|
||||
ALTER TABLE `or_righe_ordini` CHANGE `idarticolo` `idarticolo` INT(11) NULL;
|
||||
UPDATE `or_righe_ordini` SET `idarticolo` = NULL WHERE `idarticolo` = 0;
|
||||
|
||||
ALTER TABLE `or_righe_ordini` CHANGE `idarticolo` `idarticolo` INT(11) NULL;
|
||||
UPDATE `or_righe_ordini` SET `idarticolo` = NULL WHERE `idarticolo` = 0;
|
||||
|
||||
ALTER TABLE `co_righe_promemoria` CHANGE `idarticolo` `idarticolo` INT(11) NULL;
|
||||
UPDATE `co_righe_promemoria` SET `idarticolo` = NULL WHERE `idarticolo` = 0;
|
||||
|
||||
-- Fix link del plugin "Ddt del cliente"
|
||||
UPDATE `zz_plugins` SET `options` = ' { "main_query": [ { "type": "table", "fields": "Numero, Data, Descrizione, Qtà", "query": "SELECT dt_ddt.id, IF(dt_tipiddt.dir = \'entrata\', (SELECT `id` FROM `zz_modules` WHERE `name` = \'Ddt di vendita\'), (SELECT `id` FROM `zz_modules` WHERE `name` = \'Ddt di acquisto\')) AS _link_module_, dt_ddt.id AS _link_record_, IF(dt_ddt.numero_esterno = \'\', dt_ddt.numero, dt_ddt.numero_esterno) AS Numero, DATE_FORMAT(dt_ddt.data, \'%d/%m/%Y\') AS Data, dt_righe_ddt.descrizione AS `Descrizione`, REPLACE(REPLACE(REPLACE(FORMAT(dt_righe_ddt.qta, 2), \',\', \'#\'), \'.\', \',\'), \'#\', \'.\') AS `Qtà` FROM dt_ddt LEFT JOIN dt_righe_ddt ON dt_ddt.id=dt_righe_ddt.idddt JOIN dt_tipiddt ON dt_ddt.idtipoddt = dt_tipiddt.id WHERE dt_ddt.idanagrafica=|id_parent| GROUP BY dt_ddt.id HAVING 2=2 ORDER BY dt_ddt.id DESC"} ]}' WHERE `zz_plugins`.`name` = 'Ddt del cliente';
|
Loading…
Reference in New Issue