Compare commits
12 Commits
09bebde86c
...
a57e6db9b8
Author | SHA1 | Date |
---|---|---|
|
a57e6db9b8 | |
|
75e140d7ea | |
|
1edf80a491 | |
|
073e9806e6 | |
|
679524ef02 | |
|
0cbf1ccc84 | |
|
c8c68a5529 | |
|
ef97b26b77 | |
|
b2c76c5df9 | |
|
328e6eccd4 | |
|
a01b8ca499 | |
|
11a7542046 |
|
@ -195,3 +195,5 @@ Verificheremo se la pull request soddisferà i requisiti e, una volta approvata,
|
|||
## Licenza
|
||||
|
||||
Questo progetto è tutelato dalla licenza [**GPL 3**](https://github.com/devcode-it/openstamanager/blob/master/LICENSE).
|
||||
|
||||
Si richiede che qualsiasi distribuzione del software (o di sue versioni modificate) includa una copia del codice sorgente completo, una menzione adeguata al software originale **OpenSTAManager** e una copia della licenza GPL 3.
|
||||
|
|
|
@ -52,7 +52,7 @@ echo '
|
|||
if ($options['dir'] == 'uscita' && $articolo->fattore_um_secondaria) {
|
||||
echo '
|
||||
<div class="col-md-3">
|
||||
{[ "type": "number", "label": "'.tr('Q.tà secondaria').'", "name": "fattore_um_secondaria", "value": "'.abs((float) $articolo->fattore_um_secondaria * $result['qta']).'", "icon-after": "'.$articolo->um_secondaria.'" ]}
|
||||
{[ "type": "number", "label": "'.tr('Q.tà secondaria').'", "name": "fattore_um_secondaria", "value": "'.abs((float) $articolo->fattore_um_secondaria * $result['qta']).'", "icon-after": "'.$articolo->um_secondaria.'", "decimals": "qta"]}
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
|
|
@ -232,7 +232,7 @@ if (in_array($id_azienda, $tipi_anagrafica)) {
|
|||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "number", "label": "<?php echo tr('Distanza'); ?>", "name": "km", "decimals":"1", "class": "text-center", "value": "$km$", "icon-after": "Km" ]}
|
||||
{[ "type": "number", "label": "<?php echo tr('Distanza'); ?>", "name": "km", "decimals": "qta", "class": "text-center", "value": "$km$", "icon-after": "Km" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -30,41 +30,55 @@ class Anagrafiche extends Resource implements RetrieveInterface, CreateInterface
|
|||
{
|
||||
public function retrieve($request)
|
||||
{
|
||||
$table = '`an_anagrafiche`';
|
||||
$table = 'an_anagrafiche';
|
||||
|
||||
$select = [
|
||||
'`an_anagrafiche`.*',
|
||||
'`an_nazioni_lang`.`title` AS nazione',
|
||||
'an_anagrafiche.*',
|
||||
'an_nazioni_lang.title AS nazione',
|
||||
];
|
||||
|
||||
$joins[] = [
|
||||
'an_nazioni_lang' => '`an_nazioni_lang`.`id_record` = `an_nazioni`.`id` AND `an_nazioni_lang`.`id_lang` = '.\Models\Locale::getDefault()->id,
|
||||
'an_nazioni',
|
||||
'an_nazioni.id',
|
||||
'an_anagrafiche.id_nazione',
|
||||
];
|
||||
|
||||
$where[] = ['`an_anagrafiche`.`deleted_at`', '=', null];
|
||||
$joins[] = [
|
||||
'an_nazioni_lang',
|
||||
'an_nazioni_lang.id_record',
|
||||
'an_nazioni.id',
|
||||
'an_nazioni_lang.id_lang',
|
||||
\Models\Locale::getDefault()->id,
|
||||
];
|
||||
|
||||
$order['`an_anagrafiche`.`ragione_sociale`'] = 'ASC';
|
||||
$where[] = ['an_anagrafiche.deleted_at', '=', null];
|
||||
|
||||
$order['an_anagrafiche.ragione_sociale'] = 'ASC';
|
||||
|
||||
if ($request['resource'] != 'anagrafiche') {
|
||||
$type = 'Cliente';
|
||||
|
||||
$joins[] = [
|
||||
'`an_tipianagrafiche_anagrafiche`',
|
||||
'`an_anagrafiche`.`idanagrafica`',
|
||||
'`an_tipianagrafiche_anagrafiche`.`idanagrafica`',
|
||||
'an_tipianagrafiche_anagrafiche',
|
||||
'an_anagrafiche.idanagrafica',
|
||||
'an_tipianagrafiche_anagrafiche.idanagrafica',
|
||||
];
|
||||
|
||||
$joins[] = [
|
||||
'`an_tipianagrafiche`',
|
||||
'`an_tipianagrafiche_anagrafiche`.`idtipoanagrafica`',
|
||||
'`an_tipianagrafiche`.`id`',
|
||||
'an_tipianagrafiche',
|
||||
'an_tipianagrafiche_anagrafiche.idtipoanagrafica',
|
||||
'an_tipianagrafiche.id',
|
||||
];
|
||||
|
||||
$joins[] = [
|
||||
'an_tipianagrafiche_lang' => '`an_tipianagrafiche_lang`.`idrecord` = `an_tipianagrafiche`.`id` AND `an_tipianagrafiche_lang`.`idlang` = '.\Models\Locale::getDefault()->id,
|
||||
'an_tipianagrafiche_lang',
|
||||
'an_tipianagrafiche_lang.id_record',
|
||||
'an_tipianagrafiche.id',
|
||||
'an_tipianagrafiche_lang.id_lang',
|
||||
\Models\Locale::getDefault()->id,
|
||||
'an_tipianagrafiche_lang.title',
|
||||
''.$type.'',
|
||||
];
|
||||
|
||||
$where[] = ['`an_tipianagrafiche_lang`.`title`', '=', $type];
|
||||
}
|
||||
|
||||
return [
|
||||
|
|
|
@ -33,39 +33,51 @@ class Articoli extends Resource implements RetrieveInterface, UpdateInterface, C
|
|||
$table = 'mg_articoli';
|
||||
$select = [
|
||||
'mg_articoli.*',
|
||||
'`categorie`.`nome` AS categoria',
|
||||
'`sottocategorie`.`nome` AS sottocategoria',
|
||||
'categorie_lang.title AS categoria',
|
||||
'sottocategorie_lang.title AS sottocategoria',
|
||||
];
|
||||
|
||||
$joins[] = [
|
||||
'mg_articoli_lang' => 'mg_articoli_lang.id_record = mg_articoli.id AND mg_articoli_lang.id_lang = '.\Models\Locale::getDefault()->id,
|
||||
'mg_articoli_lang',
|
||||
'mg_articoli_lang.id_record',
|
||||
'mg_articoli.id',
|
||||
'mg_articoli_lang.id_lang',
|
||||
\Models\Locale::getDefault()->id,
|
||||
];
|
||||
|
||||
$joins[] = [
|
||||
'`mg_categorie` AS categorie',
|
||||
'`mg_articoli`.`id_categoria`',
|
||||
'`categorie`.`id`',
|
||||
'mg_categorie AS categorie',
|
||||
'mg_articoli.id_categoria',
|
||||
'categorie.id',
|
||||
];
|
||||
|
||||
$joins[] = [
|
||||
'mg_categorie_lang AS categorie_lang' => '`mg_categorie_lang`.`id_record` = `categorie`.`id` AND `mg_categorie_lang`.`id_lang` = '.\Models\Locale::getDefault()->id,
|
||||
'mg_categorie_lang AS categorie_lang',
|
||||
'categorie_lang.id_record',
|
||||
'categorie.id',
|
||||
'categorie_lang.id_lang',
|
||||
\Models\Locale::getDefault()->id,
|
||||
];
|
||||
|
||||
$joins[] = [
|
||||
'`mg_categorie` AS sottocategorie',
|
||||
'`mg_articoli`.`id_sottocategoria`',
|
||||
'`sottocategorie`.`id`',
|
||||
'mg_categorie AS sottocategorie',
|
||||
'mg_articoli.id_sottocategoria',
|
||||
'sottocategorie.id',
|
||||
];
|
||||
|
||||
$joins[] = [
|
||||
'`mg_categorie_lang` AS sottocategorie_lang' => '`mg_categorie_lang`.`id_record` = `sottocategorie`.`id` AND `mg_categorie_lang`.`id_lang` = '.\Models\Locale::getDefault()->id,
|
||||
'mg_categorie_lang AS sottocategorie_lang',
|
||||
'sottocategorie_lang.id_record',
|
||||
'sottocategorie.id',
|
||||
'sottocategorie_lang.id_lang',
|
||||
\Models\Locale::getDefault()->id,
|
||||
];
|
||||
|
||||
$where[] = ['`mg_articoli`.`deleted_at`', '=', null];
|
||||
$where[] = ['mg_articoli.deleted_at', '=', null];
|
||||
|
||||
$whereraw = [];
|
||||
|
||||
$order['`mg_articoli`.`id`'] = 'ASC';
|
||||
$order['mg_articoli.id'] = 'ASC';
|
||||
|
||||
return [
|
||||
'table' => $table,
|
||||
|
|
|
@ -27,4 +27,3 @@ echo '
|
|||
</form>
|
||||
|
||||
<button type="button" class="btn btn-primary" onclick="if( confirm(\'Confermando, tutte le checklist degli impianti di questa categoria verranno aggiornate. Continuare?\') ){ $(\'#check-impianto\').submit(); }"> <i class="fa fa-refresh"></i> '.tr('Sincronizza checklist impianti').'</button>';
|
||||
|
||||
|
|
|
@ -138,7 +138,7 @@ foreach ($righe as $riga) {
|
|||
// Quantità e unità di misura
|
||||
echo '
|
||||
<td>
|
||||
{[ "type": "number", "name": "qta_'.$riga->id.'", "value": "'.$riga->qta.'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "<span class=\'tip\' title=\''.tr('Quantità evasa').' / '.tr('totale').': '.tr('_QTA_ / _TOT_', ['_QTA_' => numberFormat($riga->qta_evasa, 'qta'), '_TOT_' => numberFormat($riga->qta, 'qta')]).'\'>'.$riga->um.' <small><i class=\'text-muted fa fa-info-circle\'></i></small></span>", "disabled": "'.($riga->isSconto() ? 1 : 0).'", "disabled": "'.($block_edit || $riga->isSconto()).'" ]}
|
||||
{[ "type": "number", "name": "qta_'.$riga->id.'", "value": "'.$riga->qta.'", "decimals": "qta", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "<span class=\'tip\' title=\''.tr('Quantità evasa').' / '.tr('totale').': '.tr('_QTA_ / _TOT_', ['_QTA_' => numberFormat($riga->qta_evasa, 'qta'), '_TOT_' => numberFormat($riga->qta, 'qta')]).'\'>'.$riga->um.' <small><i class=\'text-muted fa fa-info-circle\'></i></small></span>", "disabled": "'.($riga->isSconto() ? 1 : 0).'", "disabled": "'.($block_edit || $riga->isSconto()).'" ]}
|
||||
<div class="progress" style="height:4px;">';
|
||||
// Visualizzazione evasione righe per documento
|
||||
$evasione_bar = [];
|
||||
|
|
|
@ -326,7 +326,7 @@ if ($dir == 'entrata') {
|
|||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
{[ "type": "number", "label": "'.tr('Peso').'", "name": "peso", "value": "$peso$", "readonly": "'.intval(empty($record['peso_manuale'])).'", "help": "'.tr('Il valore del campo Peso viene calcolato in automatico sulla base degli articoli inseriti nel documento, a meno dell\'impostazione di un valore manuale in questo punto').'" ]}
|
||||
<input type="hidden" id="peso_calcolato" name="peso_calcolato" value="'.$ddt->peso_calcolato.'">
|
||||
<input type="hidden" id="peso_calcolato" name="peso_calcolato" value="'.$ddt->peso_calcolato.'", "decimals": "qta">
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
|
@ -335,7 +335,7 @@ if ($dir == 'entrata') {
|
|||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "number", "label": "'.tr('Volume').'", "name": "volume", "value": "$volume$", "readonly": "'.intval(empty($record['volume_manuale'])).'", "help": "'.tr('Il valore del campo volume viene calcolato in automatico sulla base degli articoli inseriti nel documento, a meno dell\'impostazione di un valore manuale in questo punto').'" ]}
|
||||
<input type="hidden" id="volume_calcolato" name="volume_calcolato" value="'.$ddt->volume_calcolato.'">
|
||||
<input type="hidden" id="volume_calcolato" name="volume_calcolato" value="'.$ddt->volume_calcolato.'", "decimals": "qta">
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
|
|
|
@ -159,7 +159,7 @@ foreach ($righe as $riga) {
|
|||
// Quantità e unità di misura
|
||||
echo '
|
||||
<td>
|
||||
{[ "type": "number", "name": "qta_'.$riga->id.'", "value": "'.$riga->qta.'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "<span class=\'tip\' title=\''.tr('Quantità evasa').' / '.tr('totale').': '.tr('_QTA_ / _TOT_', ['_QTA_' => numberFormat($riga->qta_evasa, 'qta'), '_TOT_' => numberFormat($riga->qta, 'qta')]).'\'>'.$riga->um.' <small><i class=\'text-muted fa fa-info-circle\'></i></small></span>", "disabled": "'.($riga->isSconto() ? 1 : 0).'", "disabled": "'.($block_edit || $riga->isSconto()).'" ]}
|
||||
{[ "type": "number", "name": "qta_'.$riga->id.'", "value": "'.$riga->qta.'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "<span class=\'tip\' title=\''.tr('Quantità evasa').' / '.tr('totale').': '.tr('_QTA_ / _TOT_', ['_QTA_' => numberFormat($riga->qta_evasa, 'qta'), '_TOT_' => numberFormat($riga->qta, 'qta')]).'\'>'.$riga->um.' <small><i class=\'text-muted fa fa-info-circle\'></i></small></span>", "disabled": "'.($riga->isSconto() ? 1 : 0).'", "disabled": "'.($block_edit || $riga->isSconto()).'", "decimals": "qta" ]}
|
||||
<div class="progress" style="height:4px;">';
|
||||
// Visualizzazione evasione righe per documento
|
||||
$evasione_bar = [];
|
||||
|
|
|
@ -709,29 +709,29 @@ $operations['exportFE-bulk'] = [
|
|||
],
|
||||
];
|
||||
|
||||
$operations['export-ricevute-bulk'] = [
|
||||
'text' => '<span class="'.((!extension_loaded('zip')) ? 'text-muted disabled' : '').'"><i class="fa fa-file-archive-o"></i> '.tr('Esporta ricevute').'</span>',
|
||||
'data' => [
|
||||
'title' => '',
|
||||
'msg' => tr('Vuoi davvero esportare le ricevute selezionate in un archivio ZIP?'),
|
||||
'button' => tr('Procedi'),
|
||||
'class' => 'btn btn-lg btn-warning',
|
||||
'blank' => true,
|
||||
],
|
||||
];
|
||||
|
||||
$operations['export-xml-bulk'] = [
|
||||
'text' => '<span class="'.((!extension_loaded('zip')) ? 'text-muted disabled' : '').'"><i class="fa fa-file-archive-o"></i> '.tr('Esporta XML').'</span>',
|
||||
'data' => [
|
||||
'title' => '',
|
||||
'msg' => tr('Vuoi davvero esportare le fatture elettroniche selezionate in un archivio ZIP?'),
|
||||
'button' => tr('Procedi'),
|
||||
'class' => 'btn btn-lg btn-warning',
|
||||
'blank' => true,
|
||||
],
|
||||
];
|
||||
|
||||
if ($module->getTranslation('title') == 'Fatture di vendita') {
|
||||
$operations['export-ricevute-bulk'] = [
|
||||
'text' => '<span class="'.((!extension_loaded('zip')) ? 'text-muted disabled' : '').'"><i class="fa fa-file-archive-o"></i> '.tr('Esporta ricevute').'</span>',
|
||||
'data' => [
|
||||
'title' => '',
|
||||
'msg' => tr('Vuoi davvero esportare le ricevute selezionate in un archivio ZIP?'),
|
||||
'button' => tr('Procedi'),
|
||||
'class' => 'btn btn-lg btn-warning',
|
||||
'blank' => true,
|
||||
],
|
||||
];
|
||||
|
||||
$operations['export-xml-bulk'] = [
|
||||
'text' => '<span class="'.((!extension_loaded('zip')) ? 'text-muted disabled' : '').'"><i class="fa fa-file-archive-o"></i> '.tr('Esporta XML').'</span>',
|
||||
'data' => [
|
||||
'title' => '',
|
||||
'msg' => tr('Vuoi davvero esportare le fatture elettroniche selezionate in un archivio ZIP?'),
|
||||
'button' => tr('Procedi'),
|
||||
'class' => 'btn btn-lg btn-warning',
|
||||
'blank' => true,
|
||||
],
|
||||
];
|
||||
|
||||
$operations['genera-xml'] = [
|
||||
'text' => '<span><i class="fa fa-file-code-o"></i> '.tr('Genera fatture elettroniche').'</span>',
|
||||
'data' => [
|
||||
|
|
|
@ -736,7 +736,7 @@ if ($record['descrizione_tipo'] == 'Fattura accompagnatoria di vendita') {
|
|||
echo '
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
{[ "type": "number", "label": "'.tr('Peso').'", "name": "peso", "value": "$peso$", "readonly": "'.intval(empty($record['peso_manuale'])).'", "help": "'.tr('Il valore del campo Peso viene calcolato in automatico sulla base degli articoli inseriti nel documento, a meno dell\'impostazione di un valore manuale in questo punto').'" ]}
|
||||
{[ "type": "number", "label": "'.tr('Peso').'", "name": "peso", "value": "$peso$", "readonly": "'.intval(empty($record['peso_manuale'])).'", "help": "'.tr('Il valore del campo Peso viene calcolato in automatico sulla base degli articoli inseriti nel documento, a meno dell\'impostazione di un valore manuale in questo punto').'", "decimals": "qta" ]}
|
||||
<input type="hidden" id="peso_calcolato" name="peso_calcolato" value="'.$fattura->peso_calcolato.'">
|
||||
</div>
|
||||
|
||||
|
@ -745,7 +745,7 @@ if ($record['descrizione_tipo'] == 'Fattura accompagnatoria di vendita') {
|
|||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "number", "label": "'.tr('Volume').'", "name": "volume", "value": "$volume$", "readonly": "'.intval(empty($record['volume_manuale'])).'", "help": "'.tr('Il valore del campo Volume viene calcolato in automatico sulla base degli articoli inseriti nel documento, a meno dell\'impostazione di un valore manuale in questo punto').'" ]}
|
||||
{[ "type": "number", "label": "'.tr('Volume').'", "name": "volume", "value": "$volume$", "readonly": "'.intval(empty($record['volume_manuale'])).'", "help": "'.tr('Il valore del campo Volume viene calcolato in automatico sulla base degli articoli inseriti nel documento, a meno dell\'impostazione di un valore manuale in questo punto').'", "decimals": "qta" ]}
|
||||
<input type="hidden" id="volume_calcolato" name="volume_calcolato" value="'.$fattura->volume_calcolato.'">
|
||||
</div>
|
||||
|
||||
|
|
|
@ -219,7 +219,7 @@ foreach ($righe as $riga) {
|
|||
// Quantità e unità di misura
|
||||
echo '
|
||||
<td>
|
||||
{[ "type": "number", "name": "qta_'.$riga->id.'", "value": "'.$riga->qta.'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "disabled": "'.($riga->isSconto() ? 1 : 0).'", "disabled": "'.($block_edit || $riga->isSconto()).'" ]}
|
||||
{[ "type": "number", "name": "qta_'.$riga->id.'", "value": "'.$riga->qta.'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "disabled": "'.($riga->isSconto() ? 1 : 0).'", "disabled": "'.($block_edit || $riga->isSconto()).'", "decimals": "qta" ]}
|
||||
</td>';
|
||||
|
||||
if ($riga->isArticolo()) {
|
||||
|
|
|
@ -59,12 +59,12 @@ class CSV extends CSVImporter
|
|||
'label' => 'Nome',
|
||||
],
|
||||
[
|
||||
'field' => 'cliente',
|
||||
'label' => 'Cliente',
|
||||
'field' => 'partita_iva',
|
||||
'label' => 'Partita IVA cliente',
|
||||
],
|
||||
[
|
||||
'field' => 'telefono',
|
||||
'label' => 'Telefono',
|
||||
'field' => 'codice_fiscale',
|
||||
'label' => 'Codice Fiscale cliente',
|
||||
],
|
||||
[
|
||||
'field' => 'categoria',
|
||||
|
@ -102,8 +102,10 @@ class CSV extends CSVImporter
|
|||
$database = database();
|
||||
$primary_key = $this->getPrimaryKey();
|
||||
|
||||
if (!empty($record['telefono'])) {
|
||||
$anagrafica = Anagrafica::where('telefono', $record['telefono'])->first();
|
||||
if (!empty($record['partita_iva'])) {
|
||||
$anagrafica = Anagrafica::where('piva', '=', $record['partita_iva'])->first();
|
||||
} elseif (!empty($record['codice_fiscale'])) {
|
||||
$anagrafica = Anagrafica::where('codice_fiscale', '=', $record['codice_fiscale'])->first();
|
||||
}
|
||||
|
||||
if (!empty($anagrafica)) {
|
||||
|
@ -229,11 +231,11 @@ class CSV extends CSVImporter
|
|||
public static function getExample()
|
||||
{
|
||||
return [
|
||||
['Matricola', 'Immagine', 'Import immagine', 'Nome', 'Cliente', 'Telefono', 'Categoria', 'Sottocategoria', 'Sede', 'Descrizione', 'Data installazione'],
|
||||
['00001', 'https://openstamanager.com/moduli/budget/budget.webp', '2', 'Lavatrice', 'Mario Rossi', '+39 0429 60 25 12', 'Elettrodomestici', 'Marca1', '', '', '2023-01-01'],
|
||||
['00002', 'https://openstamanager.com/moduli/3cx/3cx.webp', '2', 'Caldaia', 'Mario Rossi', '+39 0429 60 25 12', 'Elettrodomestici', 'Marca2', '', '', '2023-03-06'],
|
||||
['00003', 'https://openstamanager.com/moduli/disponibilita-tecnici/tecnici.webp', '2', 'Forno', 'Mario Rossi', '+39 0429 60 25 12', 'Elettrodomestici', 'Marca3', '', '', '2023-04-01'],
|
||||
['00004', 'https://openstamanager.com/moduli/distinta-base/distinta.webp', '2', 'Lavastoviglie', 'Mario Rossi', '+39 0429 60 25 12', 'Elettrodomestici', 'Marca4', '', '', '2023-08-06'],
|
||||
['Matricola', 'Immagine', 'Import immagine', 'Nome', 'Partita IVA Cliente', 'Codice Fiscale Cliente', 'Categoria', 'Sottocategoria', 'Sede', 'Descrizione', 'Data installazione'],
|
||||
['00001', 'https://openstamanager.com/moduli/budget/budget.webp', '2', 'Lavatrice', '123456789', '123456789', 'Elettrodomestici', 'Marca1', '', '', '2023-01-01'],
|
||||
['00002', 'https://openstamanager.com/moduli/3cx/3cx.webp', '2', 'Caldaia', '123456789', '123456789', 'Elettrodomestici', 'Marca2', '', '', '2023-03-06'],
|
||||
['00003', 'https://openstamanager.com/moduli/disponibilita-tecnici/tecnici.webp', '2', 'Forno', '123456789', '123456789', 'Elettrodomestici', 'Marca3', '', '', '2023-04-01'],
|
||||
['00004', 'https://openstamanager.com/moduli/distinta-base/distinta.webp', '2', 'Lavastoviglie', '123456789', '123456789', 'Elettrodomestici', 'Marca4', '', '', '2023-08-06'],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -318,7 +318,6 @@ switch (post('op')) {
|
|||
|
||||
flash()->info(tr('Attività duplicate correttamente!'));
|
||||
|
||||
|
||||
break;
|
||||
|
||||
case 'delete-bulk':
|
||||
|
|
|
@ -72,7 +72,7 @@ echo '
|
|||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "number", "label": "'.tr('Km').'", "name": "km", "value": "'.$sessione['km'].'"]}
|
||||
{[ "type": "number", "label": "'.tr('Km').'", "name": "km", "value": "'.$sessione['km'].'","decimals": "qta"]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -123,7 +123,7 @@ foreach ($righe as $riga) {
|
|||
// Quantità e unità di misura
|
||||
echo '
|
||||
<td>
|
||||
{[ "type": "number", "name": "qta_'.$riga->id.'", "value": "'.$riga->qta.'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "'.($riga->um ?: ' ').'", "disabled": "'.($riga->isSconto() ? 1 : 0).'", "disabled": "'.($block_edit || $riga->isSconto()).'" ]}
|
||||
{[ "type": "number", "name": "qta_'.$riga->id.'", "value": "'.$riga->qta.'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "'.($riga->um ?: ' ').'", "disabled": "'.($riga->isSconto() ? 1 : 0).'", "disabled": "'.($block_edit || $riga->isSconto()).'","decimals": "qta" ]}
|
||||
</td>';
|
||||
|
||||
if ($show_prezzi) {
|
||||
|
|
|
@ -51,7 +51,11 @@ class Interventi extends Resource implements RetrieveInterface, CreateInterface,
|
|||
];
|
||||
|
||||
$joins[] = [
|
||||
'in_statiintervento_lang' => 'in_statiintervento_lang.id_record = in_statiintervento.id AND in_statiintervento_lang.id_lang = '.\Models\Locale::getDefault()->id,
|
||||
'in_statiintervento_lang',
|
||||
'in_statiintervento_lang.id_record',
|
||||
'in_statiintervento.id',
|
||||
'in_statiintervento_lang.id_lang',
|
||||
\Models\Locale::getDefault()->id,
|
||||
];
|
||||
|
||||
$joins[] = [
|
||||
|
|
|
@ -44,8 +44,12 @@ class CSV extends CSVImporter
|
|||
'primary_key' => true,
|
||||
],
|
||||
[
|
||||
'field' => 'telefono',
|
||||
'label' => 'Telefono',
|
||||
'field' => 'partita_iva',
|
||||
'label' => 'Partita IVA cliente',
|
||||
],
|
||||
[
|
||||
'field' => 'codice_fiscale',
|
||||
'label' => 'Codice Fiscale cliente',
|
||||
],
|
||||
[
|
||||
'field' => 'data',
|
||||
|
@ -99,8 +103,10 @@ class CSV extends CSVImporter
|
|||
$database = database();
|
||||
$primary_key = $this->getPrimaryKey();
|
||||
|
||||
if (!empty($record['telefono'])) {
|
||||
$anagrafica = Anagrafica::where('telefono', $record['telefono'])->first();
|
||||
if (!empty($record['partita_iva'])) {
|
||||
$anagrafica = Anagrafica::where('piva', '=', $record['partita_iva'])->first();
|
||||
} elseif (!empty($record['codice_fiscale'])) {
|
||||
$anagrafica = Anagrafica::where('codice_fiscale', '=', $record['codice_fiscale'])->first();
|
||||
}
|
||||
|
||||
if (!empty($record['impianto'])) {
|
||||
|
@ -187,9 +193,9 @@ class CSV extends CSVImporter
|
|||
public static function getExample()
|
||||
{
|
||||
return [
|
||||
['Codice', 'Telefono', 'Data', 'Data richiesta', 'Ora inizio', 'Ora fine', 'Tecnico', 'Tipo', 'Note', 'Impianto', 'Richiesta', 'Descrizione', 'Stato'],
|
||||
['00001/2024', '+39 0429 60 25 12', '07/11/2024', '03/11/2024', '8:30', '9:30', 'Stefano Bianchi', '', '', '12345-85A22', 'Manutenzione ordinaria', 'eseguito intervento di manutenzione', 'Da programmare'],
|
||||
['0002/2024', '+39 0429 60 25 12', '08/11/2024', '04/11/2024', '11:20', '', 'Stefano Bianchi', '', '', '12345-85B23', 'Manutenzione ordinaria', 'eseguito intervento di manutenzione', ''],
|
||||
['Codice', 'Partita IVA Cliente', 'Codice Fiscale Cliente', 'Data', 'Data richiesta', 'Ora inizio', 'Ora fine', 'Tecnico', 'Tipo', 'Note', 'Impianto', 'Richiesta', 'Descrizione', 'Stato'],
|
||||
['00001/2024', '123456789', '123456789', '07/11/2024', '03/11/2024', '8:30', '9:30', 'Stefano Bianchi', '', '', '12345-85A22', 'Manutenzione ordinaria', 'eseguito intervento di manutenzione', 'Da programmare'],
|
||||
['0002/2024', '123456789', '123456789', '08/11/2024', '04/11/2024', '11:20', '', 'Stefano Bianchi', '', '', '12345-85B23', 'Manutenzione ordinaria', 'eseguito intervento di manutenzione', ''],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -212,7 +212,7 @@ foreach ($righe as $riga) {
|
|||
// Quantità e unità di misura
|
||||
echo '
|
||||
<td>
|
||||
{[ "type": "number", "name": "qta_'.$riga->id.'", "value": "'.$riga->qta.'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-before": "<span class=\'tip\' title=\''.($riga->confermato ? tr('Articolo confermato') : tr('Articolo non confermato')).'\'><i class=\''.($riga->confermato ? 'fa fa-check text-success' : 'fa fa-clock-o text-warning').'\'></i></span>", "icon-after": "<span class=\'tip\' title=\''.tr('Quantità evasa').' / '.tr('totale').': '.tr('_QTA_ / _TOT_', ['_QTA_' => numberFormat($riga->qta_evasa, 'qta'), '_TOT_' => numberFormat($riga->qta, 'qta')]).'\'>'.$riga->um.' <small><i class=\'text-muted fa fa-info-circle\'></i></small></span>", "disabled": "'.($riga->isSconto() ? 1 : 0).'", "disabled": "'.($block_edit || $riga->isSconto()).'" ]}
|
||||
{[ "type": "number", "name": "qta_'.$riga->id.'", "value": "'.$riga->qta.'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-before": "<span class=\'tip\' title=\''.($riga->confermato ? tr('Articolo confermato') : tr('Articolo non confermato')).'\'><i class=\''.($riga->confermato ? 'fa fa-check text-success' : 'fa fa-clock-o text-warning').'\'></i></span>", "icon-after": "<span class=\'tip\' title=\''.tr('Quantità evasa').' / '.tr('totale').': '.tr('_QTA_ / _TOT_', ['_QTA_' => numberFormat($riga->qta_evasa, 'qta'), '_TOT_' => numberFormat($riga->qta, 'qta')]).'\'>'.$riga->um.' <small><i class=\'text-muted fa fa-info-circle\'></i></small></span>", "disabled": "'.($riga->isSconto() ? 1 : 0).'", "disabled": "'.($block_edit || $riga->isSconto()).'", "decimals": "qta" ]}
|
||||
<div class="progress" style="height:4px;">';
|
||||
// Visualizzazione evasione righe per documento
|
||||
$evasione_bar = [];
|
||||
|
|
|
@ -168,7 +168,7 @@ foreach ($righe as $key => $riga) {
|
|||
// Quantità e unità di misura
|
||||
echo '
|
||||
<td class="text-center">
|
||||
{[ "type": "number", "name": "qta_'.$riga->id.'", "value": "'.$riga->qta.'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-before": "<span class=\'tip\' title=\''.($riga->confermato ? tr('Articolo confermato') : tr('Articolo non confermato')).'\'><i class=\''.($riga->confermato ? 'fa fa-check text-success' : 'fa fa-clock-o text-warning').'\'></i></span>", "icon-after": "<span class=\'tip\' title=\''.tr('Quantità evasa').' / '.tr('totale').': '.tr('_QTA_ / _TOT_', ['_QTA_' => numberFormat($riga->qta_evasa, 'qta'), '_TOT_' => numberFormat($riga->qta, 'qta')]).'\'>'.$riga->um.' <small><i class=\'text-muted fa fa-info-circle\'></i></small></span>", "disabled": "'.($riga->isSconto() ? 1 : 0).'", "disabled": "'.($block_edit || $riga->isSconto()).'" ]}
|
||||
{[ "type": "number", "name": "qta_'.$riga->id.'", "value": "'.$riga->qta.'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-before": "<span class=\'tip\' title=\''.($riga->confermato ? tr('Articolo confermato') : tr('Articolo non confermato')).'\'><i class=\''.($riga->confermato ? 'fa fa-check text-success' : 'fa fa-clock-o text-warning').'\'></i></span>", "icon-after": "<span class=\'tip\' title=\''.tr('Quantità evasa').' / '.tr('totale').': '.tr('_QTA_ / _TOT_', ['_QTA_' => numberFormat($riga->qta_evasa, 'qta'), '_TOT_' => numberFormat($riga->qta, 'qta')]).'\'>'.$riga->um.' <small><i class=\'text-muted fa fa-info-circle\'></i></small></span>", "disabled": "'.($riga->isSconto() ? 1 : 0).'", "disabled": "'.($block_edit || $riga->isSconto()).'", "decimals": "qta" ]}
|
||||
<div class="progress" style="height:4px;">';
|
||||
// Visualizzazione evasione righe per documento
|
||||
$evasione_bar = [];
|
||||
|
|
|
@ -172,6 +172,13 @@ switch (post('op')) {
|
|||
]));
|
||||
}
|
||||
|
||||
// Se non sono stati inviati alcuni i solleciti, mostro un messaggio di avviso
|
||||
if (!empty(array_diff($id_records, $list))) {
|
||||
flash()->warning(tr('_NUM_ solleciti non sono stati inviati.', [
|
||||
'_NUM_' => sizeof(array_diff($id_records, $list)),
|
||||
]));
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -212,7 +219,7 @@ $operations['send-sollecito'] = [
|
|||
'text' => '<span><i class="fa fa-envelope"></i> '.tr('Invia mail sollecito').'</span>',
|
||||
'data' => [
|
||||
'title' => tr('Inviare mail sollecito?'),
|
||||
'msg' => tr('Per ciascuna scadenza selezionata collegata ad una fattura di vendita, verrà inviata una mail con allegata la fattura di vendita corrispondente.<br>(Template utilizzato: Sollecito di pagamento raggruppato per anagrafica)'),
|
||||
'msg' => tr('Per ciascuna rata scaduta selezionata collegata ad una fattura di vendita, verrà inviata una mail con allegata la fattura di vendita corrispondente.<br>(Template utilizzato: Sollecito di pagamento raggruppato per anagrafica)'),
|
||||
'button' => tr('Invia'),
|
||||
'class' => 'btn btn-lg btn-warning',
|
||||
],
|
||||
|
|
|
@ -69,7 +69,7 @@ echo '
|
|||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "number", "label": "'.tr('Qta minima ordinabile').'", "name": "qta_minima", "required": 0, "value": "'.$fornitore['qta_minima'].'", "icon-after": "'.$articolo->um.'" ]}
|
||||
{[ "type": "number", "label": "'.tr('Qta minima ordinabile').'", "name": "qta_minima", "required": 0, "value": "'.$fornitore['qta_minima'].'", "icon-after": "'.$articolo->um.'","decimals": "qta" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
|
|
|
@ -138,7 +138,7 @@ echo '
|
|||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "number", "label": "'.tr('Qta minima ordinabile').'", "name": "qta_minima", "required": 0, "value": "'.$fornitore['qta_minima'].'", "icon-after": "'.$articolo->um.'" ]}
|
||||
{[ "type": "number", "label": "'.tr('Qta minima ordinabile').'", "name": "qta_minima", "required": 0, "value": "'.$fornitore['qta_minima'].'", "icon-after": "'.$articolo->um.'", "decimals": "qta" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
|
|
|
@ -132,7 +132,7 @@ foreach ($righe as $riga) {
|
|||
|
||||
{[ "type": "number", "label": "'.tr('Q.tà per fattura').'", "class":"qta_fattura", "name": "qta['.$riga->id.']", "required": 1, "value": "1", "decimals": "qta", "min-value": "1", "icon-after":"'.tr('su _TOT_ totali', [
|
||||
'_TOT_' => Translator::numberToLocale($riga->qta - $riga->qta_evasa),
|
||||
]).'", "options":"'.str_replace('"', '\"', $options).'" ]}
|
||||
]).'", "options":"'.str_replace('"', '\"', $options).'", "decimals": "qta" ]}
|
||||
</div>
|
||||
<div class="col-md-3" id="totali_'.$riga->id.'">
|
||||
</div>
|
||||
|
|
|
@ -98,7 +98,7 @@ echo '
|
|||
{[ "type": "select", "label": "'.tr('Zona').'", "name": "idzona", "ajax-source": "zone", "value": "$idzona$", "placeholder": "'.tr('Nessuna zona').'", "icon-after": "add|'.Module::where('name', 'Zone')->first()->id.'" ]}
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
{[ "type": "number", "label": "'.tr('Km').'", "name": "km", "value": "$km$" ]}
|
||||
{[ "type": "number", "label": "'.tr('Km').'", "name": "km", "value": "$km$", "decimals": "qta" ]}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
|
|
|
@ -180,7 +180,17 @@ class Manager
|
|||
}
|
||||
|
||||
foreach ($joins as $join) {
|
||||
$query->leftJoin($join[0], $join[1], $join[2]);
|
||||
if (count($join) >= 3) {
|
||||
$query->leftJoin($join[0], function($joinClause) use ($join) {
|
||||
$joinClause->on($join[1], $join[2]);
|
||||
|
||||
// Aggiungi condizioni aggiuntive se ci sono abbastanza elementi in $join
|
||||
if (isset($join[3])) {
|
||||
$joinClause->whereRaw($join[3] . ' = ?', [$join[4]]);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($where)) {
|
||||
|
|
|
@ -282,7 +282,7 @@ class DefaultHandler implements HandlerInterface
|
|||
|
||||
// Gestione della precisione (numero specifico, oppure "qta" per il valore previsto nell'impostazione "Cifre decimali per quantità").
|
||||
$decimals = null;
|
||||
if (isset($values['decimals'])) {
|
||||
if (!empty($values['decimals'])) {
|
||||
if (is_numeric($values['decimals'])) {
|
||||
$decimals = $values['decimals'];
|
||||
} elseif (string_starts_with($values['decimals'], 'qta')) {
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
include_once __DIR__.'/../../core.php';
|
||||
use Models\Module;
|
||||
|
||||
$dir = $_GET['dir'];
|
||||
$dir = filter('dir');
|
||||
|
||||
$id_sezionale = filter('id_sezionale');
|
||||
$sezionale = $dbo->fetchOne('SELECT `zz_segments_lang`.`title` FROM `zz_segments` LEFT JOIN `zz_segments_lang` ON (`zz_segments`.`id` = `zz_segments_lang`.`id_record` AND `zz_segments_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `zz_segments`.`id` = '.$id_sezionale)['name'];
|
||||
|
|
Loading…
Reference in New Issue