This commit is contained in:
Beppe 2020-02-03 15:21:41 +01:00
commit b808d4578d
23 changed files with 241 additions and 76 deletions

View File

@ -121,7 +121,16 @@ function updateHook(hook) {
// Rimozione eventuale della rotella di caricamento // Rimozione eventuale della rotella di caricamento
var counter = $("#hooks-counter").text(); var counter = $("#hooks-counter").text();
var number = $("#hooks > li").length; var number = $("#hooks > li").length;
$("#hooks-notified").text(number);
if (number == 0) {
$("#hooks-notified").html('<i class="fa fa-check" aria-hidden="true"></i>');
$("#hooks-label").removeClass('label-warning');
$("#hooks-label").addClass('label-success');
}else{
$("#hooks-notified").text(number);
$("#hooks-label").removeClass('label-success');
$("#hooks-label").addClass('label-warning');
}
if (counter == $("#hooks-number").text()) { if (counter == $("#hooks-number").text()) {
$("#hooks-loading").hide(); $("#hooks-loading").hide();

View File

@ -3,6 +3,6 @@
echo ' echo '
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
{[ "type": "textarea", "label": "'.tr('Descrizione').'", "name": "descrizione", "id": "descrizione_riga", "value": '.json_encode($result['descrizione']).', "required": 1 ]} {[ "type": "textarea", "label": "'.tr('Descrizione').'", "name": "descrizione", "id": "descrizione_riga", "value": '.json_encode($result['descrizione']).', "required": 1, "extra": "rows=\"4\"" ]}
</div> </div>
</div>'; </div>';

View File

@ -312,7 +312,7 @@ if (Auth::check()) {
<li class="dropdown notifications-menu" > <li class="dropdown notifications-menu" >
<a href="#" class="dropdown-toggle" data-toggle="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-bell-o"></i> <i class="fa fa-bell-o"></i>
<span class="label label-warning"> <span id="hooks-label" class="label label-warning">
<span id="hooks-loading"><i class="fa fa-spinner fa-spin"></i></span> <span id="hooks-loading"><i class="fa fa-spinner fa-spin"></i></span>
<span id="hooks-notified"></span> <span id="hooks-notified"></span>
<span id="hooks-counter" class="hide">0</span> <span id="hooks-counter" class="hide">0</span>

View File

@ -47,13 +47,25 @@ $_SESSION['superselect']['id_categoria'] = $record['id_categoria'];
{[ "type": "textarea", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "required": 1, "value": "$descrizione$" ]} {[ "type": "textarea", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "required": 1, "value": "$descrizione$" ]}
</div> </div>
</div> </div>
<div class="row">
<div class="col-md-4">
{[ "type": "checkbox", "label": "<?php echo tr('Abilita serial number'); ?>", "name": "abilita_serial", "value": "$abilita_serial$", "help": "<?php echo tr('Abilita serial number in fase di aggiunta articolo in fattura o ddt'); ?>", "placeholder": "<?php echo tr('Serial number'); ?>", "extra": "<?php echo ($record['serial'] > 0) ? 'readonly' : ''; ?>" ]}
</div>
<div class="col-md-4">
{[ "type": "checkbox", "label": "<?php echo tr('Attivo'); ?>", "name": "attivo", "help": "<?php echo tr('Seleziona per rendere attivo l\'articolo'); ?>", "value": "$attivo$", "placeholder": "<?php echo tr('Articolo attivo'); ?>" ]}
</div>
<div class="col-md-4">
{[ "type": "text", "label": "<?php echo tr('Ubicazione'); ?>", "name": "ubicazione", "value": "$ubicazione$" ]}
</div>
</div>
<div class="row"> <div class="row">
<div class="col-md-2"> <div class="col-md-4">
{[ "type": "number", "label": "<?php echo tr('Quantità'); ?>", "name": "qta", "required": 1, "value": "$qta$", "readonly": 1, "decimals": "qta", "min-value": "undefined" ]} {[ "type": "number", "label": "<?php echo tr('Quantità'); ?>", "name": "qta", "required": 1, "value": "$qta$", "readonly": 1, "decimals": "qta", "min-value": "undefined" ]}
<input type="hidden" id="old_qta" value="<?php echo $record['qta']; ?>"> <input type="hidden" id="old_qta" value="<?php echo $record['qta']; ?>">
</div> </div>
<div class="col-md-2"> <div class="col-md-4">
{[ "type": "checkbox", "label": "<?php echo tr('Modifica quantità'); ?>", "name": "qta_manuale", "value": 0, "help": "<?php echo tr('Seleziona per modificare manualmente la quantità'); ?>", "placeholder": "<?php echo tr('Quantità manuale'); ?>", "extra": "<?php echo ($record['servizio']) ? 'disabled' : ''; ?>" ]} {[ "type": "checkbox", "label": "<?php echo tr('Modifica quantità'); ?>", "name": "qta_manuale", "value": 0, "help": "<?php echo tr('Seleziona per modificare manualmente la quantità'); ?>", "placeholder": "<?php echo tr('Quantità manuale'); ?>", "extra": "<?php echo ($record['servizio']) ? 'disabled' : ''; ?>" ]}
<script type="text/javascript"> <script type="text/javascript">
@ -85,28 +97,15 @@ $_SESSION['superselect']['id_categoria'] = $record['id_categoria'];
</div> </div>
<div class="col-md-2"> <div class="col-md-4">
{[ "type": "select", "label": "<?php echo tr('Unità di misura'); ?>", "name": "um", "value": "$um$", "ajax-source": "misure", "icon-after": "add|<?php echo Modules::get('Unità di misura')['id']; ?>" ]} {[ "type": "select", "label": "<?php echo tr('Unità di misura'); ?>", "name": "um", "value": "$um$", "ajax-source": "misure", "icon-after": "add|<?php echo Modules::get('Unità di misura')['id']; ?>" ]}
</div>
<div class="col-md-2">
{[ "type": "checkbox", "label": "<?php echo tr('Abilita serial number'); ?>", "name": "abilita_serial", "value": "$abilita_serial$", "help": "<?php echo tr('Abilita serial number in fase di aggiunta articolo in fattura o ddt'); ?>", "placeholder": "<?php echo tr('Serial number'); ?>", "extra": "<?php echo ($record['serial'] > 0) ? 'readonly' : ''; ?>" ]}
</div> </div>
</div>
<div class="col-md-2">
{[ "type": "checkbox", "label": "<?php echo tr('Attivo'); ?>", "name": "attivo", "help": "<?php echo tr('Seleziona per rendere attivo l\'articolo'); ?>", "value": "$attivo$", "placeholder": "<?php echo tr('Articolo attivo'); ?>" ]}
</div>
<div class="col-md-2">
{[ "type": "text", "label": "<?php echo tr('Ubicazione'); ?>", "name": "ubicazione", "value": "$ubicazione$" ]}
</div>
</div>
<div class='row' id="div_modifica_manuale" style="display:none;"> <div class='row' id="div_modifica_manuale" style="display:none;">
<div class='col-md-3'> <div class='col-md-8'>
{[ "type": "text", "label": "<?php echo tr('Descrizione movimento'); ?>", "name": "descrizione_movimento" ]} {[ "type": "text", "label": "<?php echo tr('Descrizione movimento'); ?>", "name": "descrizione_movimento" ]}
</div> </div>
<div class='col-md-3'> <div class='col-md-4'>
{[ "type": "date", "label": "<?php echo tr('Data movimento'); ?>", "name": "data_movimento", "value": "-now-" ]} {[ "type": "date", "label": "<?php echo tr('Data movimento'); ?>", "name": "data_movimento", "value": "-now-" ]}
</div> </div>
</div> </div>

View File

@ -570,6 +570,7 @@ if ($vista == 'mese') {
var calendar = $('#calendar').fullCalendar({ var calendar = $('#calendar').fullCalendar({
locale: globals.locale, locale: globals.locale,
height: "auto",
<?php <?php
$domenica = setting('Visualizzare la domenica sul calendario'); $domenica = setting('Visualizzare la domenica sul calendario');
if (empty($domenica)) { if (empty($domenica)) {

View File

@ -31,6 +31,9 @@ switch (post('op')) {
$ddt = DDT::build($anagrafica, $tipo, $data); $ddt = DDT::build($anagrafica, $tipo, $data);
$id_record = $ddt->id; $id_record = $ddt->id;
$ddt->idcausalet = post('idcausalet');
$ddt->save();
flash()->info(tr('Aggiunto ddt in _TYPE_ numero _NUM_!', [ flash()->info(tr('Aggiunto ddt in _TYPE_ numero _NUM_!', [
'_TYPE_' => $dir, '_TYPE_' => $dir,
'_NUM_' => $ddt->numero, '_NUM_' => $ddt->numero,

View File

@ -179,7 +179,7 @@ if (empty($record['is_fiscale'])) {
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-3"> <div class="col-md-6">
<?php <?php
echo Modules::link('Anagrafiche', $record['idanagrafica'], null, null, 'class="pull-right"'); echo Modules::link('Anagrafiche', $record['idanagrafica'], null, null, 'class="pull-right"');
@ -191,44 +191,62 @@ if (empty($record['is_fiscale'])) {
} else { } else {
?> ?>
{[ "type": "select", "label": "<?php echo tr('Fornitore'); ?>", "name": "idanagrafica", "required": 1, "ajax-source": "fornitori", "value": "$idanagrafica$" ]} {[ "type": "select", "label": "<?php echo tr('Fornitore'); ?>", "name": "idanagrafica", "required": 1, "ajax-source": "fornitori", "value": "$idanagrafica$" ]}
<?php <?php } ?>
} </div>
?>
<?php if ($dir == 'entrata') { ?>
<div class="col-md-6">
{[ "type": "select", "label": "<?php echo tr('Agente di riferimento'); ?>", "name": "idagente", "ajax-source": "agenti", "value": "$idagente_fattura$" ]}
</div> </div>
<?php } ?>
<?php <?php
// Conteggio numero articoli fatture // Conteggio numero articoli fatture
$articolo = $dbo->fetchArray('SELECT mg_articoli.id FROM ((mg_articoli INNER JOIN co_righe_documenti ON mg_articoli.id=co_righe_documenti.idarticolo) INNER JOIN co_documenti ON co_documenti.id=co_righe_documenti.iddocumento) WHERE co_documenti.id='.prepare($id_record)); $articolo = $dbo->fetchArray('SELECT mg_articoli.id FROM ((mg_articoli INNER JOIN co_righe_documenti ON mg_articoli.id=co_righe_documenti.idarticolo) INNER JOIN co_documenti ON co_documenti.id=co_righe_documenti.iddocumento) WHERE co_documenti.id='.prepare($id_record));
if ($dir == 'uscita') { if ($dir == 'uscita') {
?> ?>
<div class="col-md-3"> <div class="col-md-6">
<?php
echo Plugins::link('Sedi', $record['idsede_partenza'], null, null, 'class="pull-right"');
?>
{[ "type": "select", "label": "<?php echo tr('Partenza merce'); ?>", "name": "idsede_partenza", "ajax-source": "sedi", "placeholder": "Sede legale", "value": "$idsede_partenza$", "icon-after": "add|<?php echo Modules::get('Anagrafiche')['id']; ?>|id_plugin=<?php echo Plugins::get('Sedi')['id']; ?>&id_parent=<?php echo $record['idanagrafica']; ?>||<?php echo (intval($block_edit)) ? 'disabled' : ''; ?>" ]} {[ "type": "select", "label": "<?php echo tr('Partenza merce'); ?>", "name": "idsede_partenza", "ajax-source": "sedi", "placeholder": "Sede legale", "value": "$idsede_partenza$", "icon-after": "add|<?php echo Modules::get('Anagrafiche')['id']; ?>|id_plugin=<?php echo Plugins::get('Sedi')['id']; ?>&id_parent=<?php echo $record['idanagrafica']; ?>||<?php echo (intval($block_edit)) ? 'disabled' : ''; ?>" ]}
</div> </div>
<div class="col-md-3"> <div class="col-md-6">
<?php
echo Plugins::link('Sedi', $record['idsede_destinazione'], null, null, 'class="pull-right"');
?>
{[ "type": "select", "label": "<?php echo tr('Destinazione merce'); ?>", "name": "idsede_destinazione", "ajax-source": "sedi_azienda", "value": "$idsede_destinazione$", "readonly": "<?php echo (sizeof($articolo)) ? 1 : 0; ?>" ]} {[ "type": "select", "label": "<?php echo tr('Destinazione merce'); ?>", "name": "idsede_destinazione", "ajax-source": "sedi_azienda", "value": "$idsede_destinazione$", "readonly": "<?php echo (sizeof($articolo)) ? 1 : 0; ?>" ]}
</div> </div>
<?php <?php
} else { } else {
?> ?>
<div class="col-md-3"> <div class="col-md-6">
<?php
echo Plugins::link('Sedi', $record['idsede_partenza'], null, null, 'class="pull-right"');
?>
{[ "type": "select", "label": "<?php echo tr('Partenza merce'); ?>", "name": "idsede_partenza", "ajax-source": "sedi_azienda", "placeholder": "Sede legale", "value": "$idsede_partenza$", "readonly": "<?php echo (sizeof($articolo)) ? 1 : 0; ?>" ]} {[ "type": "select", "label": "<?php echo tr('Partenza merce'); ?>", "name": "idsede_partenza", "ajax-source": "sedi_azienda", "placeholder": "Sede legale", "value": "$idsede_partenza$", "readonly": "<?php echo (sizeof($articolo)) ? 1 : 0; ?>" ]}
</div> </div>
<div class="col-md-3"> <div class="col-md-6">
<?php
echo Plugins::link('Sedi', $record['idsede_destinazione'], null, null, 'class="pull-right"');
?>
{[ "type": "select", "label": "<?php echo tr('Destinazione merce'); ?>", "name": "idsede_destinazione", "ajax-source": "sedi", "value": "$idsede_destinazione$", "readonly": "", "icon-after": "add|<?php echo Modules::get('Anagrafiche')['id']; ?>|id_plugin=<?php echo Plugins::get('Sedi')['id']; ?>&id_parent=<?php echo $record['idanagrafica']; ?>||<?php echo (intval($block_edit)) ? 'disabled' : ''; ?>" ]} {[ "type": "select", "label": "<?php echo tr('Destinazione merce'); ?>", "name": "idsede_destinazione", "ajax-source": "sedi", "value": "$idsede_destinazione$", "readonly": "", "icon-after": "add|<?php echo Modules::get('Anagrafiche')['id']; ?>|id_plugin=<?php echo Plugins::get('Sedi')['id']; ?>&id_parent=<?php echo $record['idanagrafica']; ?>||<?php echo (intval($block_edit)) ? 'disabled' : ''; ?>" ]}
</div> </div>
<?php <?php
} }
?> ?>
<?php if ($dir == 'entrata') {
?>
<div class="col-md-3">
{[ "type": "select", "label": "<?php echo tr('Agente di riferimento'); ?>", "name": "idagente", "ajax-source": "agenti", "value": "$idagente_fattura$" ]}
</div>
<?php
} ?>
</div> </div>
<hr> <hr>

View File

@ -6,11 +6,19 @@ switch (filter('op')) {
case 'update': case 'update':
$is_all_valid = true; $is_all_valid = true;
foreach (post('setting') as $id => $value) { foreach (post('setting') as $id => $value) {
$result = Settings::get($id);
if (preg_match("/multiple\[(.+?)\]/", $result['tipo'], $m)) {
$value = implode(",", $value);
}
$is_valid = Settings::setValue($id, $value); $is_valid = Settings::setValue($id, $value);
if (!$is_valid) { if (!$is_valid) {
$result = Settings::get($id);
// integer // integer
if ($result['tipo'] == 'integer') { if ($result['tipo'] == 'integer') {
@ -26,6 +34,8 @@ switch (filter('op')) {
'_NAME_' => '"'.$result['nome'].'"', '_NAME_' => '"'.$result['nome'].'"',
])); ]));
} }
} }
$is_all_valid &= $is_valid; $is_all_valid &= $is_valid;

View File

@ -165,16 +165,16 @@ class Intervento extends Document
*/ */
public static function getNextCodice($data) public static function getNextCodice($data)
{ {
$maschera = setting('Formato codice intervento'); $maschera = setting('Formato codice attività');
//$ultimo = Generator::getPreviousFrom($maschera, 'in_interventi', 'codice'); //$ultimo = Generator::getPreviousFrom($maschera, 'in_interventi', 'codice');
if (setting('Continua la numerazione')){ if (setting('Ingnora il periodo temporale per il calcolo del codice attività')){
$ultimo = Generator::getPreviousFrom($maschera, 'in_interventi', 'codice', []);
}else{
$ultimo = Generator::getPreviousFrom($maschera, 'in_interventi', 'codice', [ $ultimo = Generator::getPreviousFrom($maschera, 'in_interventi', 'codice', [
'YEAR(data_richiesta) = '.prepare(date('Y', strtotime($data))), 'YEAR(data_richiesta) = '.prepare(date('Y', strtotime($data))),
]); ]);
}else{
$ultimo = Generator::getPreviousFrom($maschera, 'in_interventi', 'codice', []);
} }
$numero = Generator::generate($maschera, $ultimo); $numero = Generator::generate($maschera, $ultimo);

View File

@ -68,7 +68,7 @@ switch (post('op')) {
case 'copy': case 'copy':
// Copia del preventivo // Copia del preventivo
$new = $preventivo->replicate(); $new = $preventivo->replicate();
$new->numero = Preventivo::getNextNumero(); $new->numero = Preventivo::getNextNumero($new->data_bozza);
$new->idstato = 1; $new->idstato = 1;
$new->save(); $new->save();

View File

@ -49,7 +49,7 @@ class Preventivo extends Document
$model->stato()->associate($stato_documento); $model->stato()->associate($stato_documento);
$model->tipoSessione()->associate($tipo_sessione); $model->tipoSessione()->associate($tipo_sessione);
$model->numero = static::getNextNumero(); $model->numero = static::getNextNumero($data_bozza);
// Salvataggio delle informazioni // Salvataggio delle informazioni
$model->nome = $nome; $model->nome = $nome;
@ -233,11 +233,20 @@ class Preventivo extends Document
* *
* @return string * @return string
*/ */
public static function getNextNumero() public static function getNextNumero($data)
{ {
$maschera = setting('Formato codice preventivi'); $maschera = setting('Formato codice preventivi');
$ultimo = Generator::getPreviousFrom($maschera, 'co_preventivi', 'numero'); if ((strpos($maschera, 'YYYY') !== false) or (strpos($maschera, 'yy') !== false)) {
$ultimo = Generator::getPreviousFrom($maschera, 'co_preventivi', 'numero', [
'YEAR(data_bozza) = '.prepare(date('Y', strtotime($data))),
]);
}else{
$ultimo = Generator::getPreviousFrom($maschera, 'co_preventivi', 'numero');
}
$numero = Generator::generate($maschera, $ultimo); $numero = Generator::generate($maschera, $ultimo);
return $numero; return $numero;

View File

@ -19,7 +19,7 @@ class InvoiceHook extends Manager
} }
$remaining = Fattura::where('hook_send', 1) $remaining = Fattura::where('hook_send', 1)
->where('codice_stato_fe', 'ERR') ->where('codice_stato_fe', 'QUEUE')
->count(); ->count();
return !empty($remaining); return !empty($remaining);
@ -28,7 +28,7 @@ class InvoiceHook extends Manager
public function execute() public function execute()
{ {
$fattura = Fattura::where('hook_send', 1) $fattura = Fattura::where('hook_send', 1)
->where('codice_stato_fe', 'ERR') ->where('codice_stato_fe', 'QUEUE')
->first(); ->first();
$result = Interaction::sendInvoice($fattura->id); $result = Interaction::sendInvoice($fattura->id);

View File

@ -442,7 +442,7 @@ class Prints
// Instanziamento dell'oggetto mPDF // Instanziamento dell'oggetto mPDF
$mpdf = new \Mpdf\Mpdf([ $mpdf = new \Mpdf\Mpdf([
'mode' => 'utf-8', 'mode' => 'c',
'format' => $settings['format'], 'format' => $settings['format'],
'orientation' => strtoupper($settings['orientation']) == 'L' ? 'L' : 'P', 'orientation' => strtoupper($settings['orientation']) == 'L' ? 'L' : 'P',
'font-size' => $settings['font-size'], 'font-size' => $settings['font-size'],
@ -450,6 +450,7 @@ class Prints
'margin_right' => $settings['margins']['right'], 'margin_right' => $settings['margins']['right'],
'setAutoBottomMargin' => 'stretch', 'setAutoBottomMargin' => 'stretch',
'setAutoTopMargin' => 'stretch', 'setAutoTopMargin' => 'stretch',
'default_font' => 'helvetica',
// Abilitazione per lo standard PDF/A // Abilitazione per lo standard PDF/A
//'PDFA' => true, //'PDFA' => true,

View File

@ -48,7 +48,7 @@ class Settings
} }
/** /**
* Restituisce le informazioni relative a una singolo impostazione specificata. * Restituisce le informazioni relative ad una singola impostazione specificata.
* *
* @param string|int $setting * @param string|int $setting
* *
@ -87,8 +87,10 @@ class Settings
*/ */
public static function setValue($setting, $value) public static function setValue($setting, $value)
{ {
$setting = self::get($setting); $setting = self::get($setting);
// Trasformazioni // Trasformazioni
// Boolean (checkbox) // Boolean (checkbox)
if ($setting->tipo == 'boolean') { if ($setting->tipo == 'boolean') {
@ -105,6 +107,15 @@ class Settings
// verifico che il valore scelto sia nella lista enumerata nel db // verifico che il valore scelto sia nella lista enumerata nel db
elseif (preg_match("/list\[(.+?)\]/", $setting->tipo, $m)) { elseif (preg_match("/list\[(.+?)\]/", $setting->tipo, $m)) {
$validator = v::in(explode(',', $m[1])); $validator = v::in(explode(',', $m[1]));
}
// multiple
// verifico che il valore scelto sia nella lista enumerata nel db
elseif (preg_match("/multiple\[(.+?)\]/", $setting->tipo, $m[0][0])) {
//$validator = v::in(explode(',', $m[0][0][1]));
} }
// Boolean (checkbox) // Boolean (checkbox)
@ -150,6 +161,22 @@ class Settings
{[ "type": "select", "label": "'.$setting->nome.'", "name": "setting['.$setting->id.']", "values": '.json_encode($list).', "value": "'.$setting->valore.'", "required": "'.intval($required).'", "help": "'.$setting->help.'" ]}'; {[ "type": "select", "label": "'.$setting->nome.'", "name": "setting['.$setting->id.']", "values": '.json_encode($list).', "value": "'.$setting->valore.'", "required": "'.intval($required).'", "help": "'.$setting->help.'" ]}';
} }
// Lista multipla
if (preg_match("/multiple\[(.+?)\]/", $setting->tipo, $m)) {
$values = explode(',', $m[1]);
$list = [];
foreach ($values as $value) {
$list[] = [
'id' => $value,
'text' => $value,
];
}
$result = '
{[ "type": "select", "multiple": 1, "label": "'.$setting->nome.'", "name": "setting['.$setting->id.'][]", "values": '.json_encode($list).', "value": "'.$setting->valore.'", "required": "'.intval($required).'", "help": "'.$setting->help.'" ]}';
}
// Lista da query // Lista da query
elseif (preg_match('/^query=(.+?)$/', $setting->tipo, $m)) { elseif (preg_match('/^query=(.+?)$/', $setting->tipo, $m)) {
$result = ' $result = '

View File

@ -107,11 +107,12 @@ echo '
</tr>'; </tr>';
// Descrizione // Descrizione
// Rimosso nl2br, non necessario con ckeditor
echo ' echo '
<tr> <tr>
<td colspan="4" style="height:20mm;"> <td colspan="4" style="height:20mm;">
<b>'.tr('Descrizione').':</b> <b>'.tr('Descrizione').':</b>
<p>'.nl2br($documento['descrizione']).'</p> <p>'.($documento['descrizione']).'</p>
</td> </td>
</tr>'; </tr>';

View File

@ -39,18 +39,18 @@ if (!empty($search['descrizione'])) {
} }
if (!empty($search['categoria'])) { if (!empty($search['categoria'])) {
$where[] = 'id_categoria IN (SELECT id FROM mg_categorie WHERE descrizione LIKE '.prepare('%'.$search['categoria'].'%').')'; $where[] = 'id_categoria IN (SELECT id FROM mg_categorie WHERE nome LIKE '.prepare('%'.$search['categoria'].'%').' AND parent IS NULL)';
} }
if (!empty($search['subcategoria'])) { if (!empty($search['subcategoria'])) {
$where[] = 'id_sottocategoria IN (SELECT id FROM mg_categorie WHERE descrizione LIKE '.prepare('%'.$search['subcategoria'].'%').')'; $where[] = 'id_sottocategoria IN (SELECT id FROM mg_categorie WHERE nome LIKE '.prepare('%'.$search['subcategoria'].'%').' AND parent NOT NULL)';
} }
$period_end = $_SESSION['period_end']; $period_end = $_SESSION['period_end'];
$query = 'SELECT *, $query = 'SELECT *,
(SELECT SUM(qta) FROM mg_movimenti WHERE mg_movimenti.idarticolo=mg_articoli.id AND (mg_movimenti.idintervento IS NULL) AND data <= '.prepare($period_end).') AS qta (SELECT SUM(qta) FROM mg_movimenti WHERE mg_movimenti.idarticolo=mg_articoli.id AND (mg_movimenti.idintervento IS NULL) AND data <= '.prepare($period_end).') AS qta
FROM mg_articoli WHERE 1=1 FROM mg_articoli LEFT OUTER JOIN (SELECT id, nome FROM mg_categorie) AS categoria ON mg_articoli.id_categoria = categoria.id WHERE 1=1
ORDER BY codice ASC'; ORDER BY codice ASC';
$query = str_replace('1=1', '1=1'.(!empty($where) ? ' AND '.implode(' AND ', $where) : ''), $query); $query = str_replace('1=1', '1=1'.(!empty($where) ? ' AND '.implode(' AND ', $where) : ''), $query);
@ -65,6 +65,7 @@ echo '
<thead> <thead>
<tr> <tr>
<th class="text-center" width="150">'.tr('Codice', [], ['upper' => true]).'</th> <th class="text-center" width="150">'.tr('Codice', [], ['upper' => true]).'</th>
<th class="text-center">'.tr('Categoria', [], ['upper' => true]).'</th>
<th class="text-center">'.tr('Descrizione', [], ['upper' => true]).'</th> <th class="text-center">'.tr('Descrizione', [], ['upper' => true]).'</th>
<th class="text-center" width="70">'.tr('Prezzo di vendita', [], ['upper' => true]).'</th> <th class="text-center" width="70">'.tr('Prezzo di vendita', [], ['upper' => true]).'</th>
<th class="text-center" width="70">'.tr('Q.', [], ['upper' => true]).'</th> <th class="text-center" width="70">'.tr('Q.', [], ['upper' => true]).'</th>
@ -82,6 +83,7 @@ foreach ($rs as $r) {
echo ' echo '
<tr> <tr>
<td>'.$r['codice'].'</td> <td>'.$r['codice'].'</td>
<td>'.$r['nome'].'</td>
<td>'.$r['descrizione'].'</td> <td>'.$r['descrizione'].'</td>
<td class="text-right">'.moneyFormat($r['prezzo_vendita']).'</td> <td class="text-right">'.moneyFormat($r['prezzo_vendita']).'</td>
<td class="text-right">'.Translator::numberToLocale($r['qta']).' '.$r['um'].'</td> <td class="text-right">'.Translator::numberToLocale($r['qta']).' '.$r['um'].'</td>

View File

@ -1,6 +1,6 @@
<?php <?php
return [ return [
//'orientation' => 'L', 'orientation' => 'L',
'font-size' => '11pt', 'font-size' => '11pt',
]; ];

View File

@ -19,13 +19,25 @@ $pricing = isset($pricing) ? $pricing : true;
// Informazioni intervento // Informazioni intervento
echo ' echo '
<tr> <tr>
<td colspan="2"> <td colspan="2">';
if (dateFormat($intervento->inizio)){
echo '
<p>'.tr('Intervento _NUM_ del _DATE_', [ <p>'.tr('Intervento _NUM_ del _DATE_', [
'_NUM_' => $intervento->codice, '_NUM_' => $intervento->codice,
'_DATE_' => dateFormat($intervento->inizio), '_DATE_' => dateFormat($intervento->inizio),
]).'</p> ]).'</p>';
}else{
echo '
<p>'.tr('Promemoria _NUM_', [
'_NUM_' => $intervento->codice,
]).'</p>';
}
echo '
<p><small><b>'.tr('Cliente').':</b> '.$intervento->anagrafica->ragione_sociale.'</small></p> <p><small><b>'.tr('Cliente').':</b> '.$intervento->anagrafica->ragione_sociale.'</small></p>
<p><small><b>'.tr('Stato').':</b> '.$intervento->stato->descrizione.'</small></p> <p><small><b>'.tr('Stato').':</b> '.$intervento->stato->descrizione.'</small></p>
<p><small><b>'.tr('Data richiesta').':</b> '.dateFormat($intervento->data_richiesta).'</small></p>
<p><small><b>'.tr('Richiesta').':</b> '.$intervento->richiesta.'</small></p>
</td> </td>
<td class="text-center">'.($pricing ? moneyFormat($imponibile, 2) : '-').'</td> <td class="text-center">'.($pricing ? moneyFormat($imponibile, 2) : '-').'</td>
<td class="text-center">'.($pricing && empty($options['dir']) ? moneyFormat($sconto, 2) : '-').'</td> <td class="text-center">'.($pricing && empty($options['dir']) ? moneyFormat($sconto, 2) : '-').'</td>
@ -34,7 +46,7 @@ echo '
// Sessioni // Sessioni
$sessioni = $intervento->sessioni; $sessioni = $intervento->sessioni;
if (!empty($sessioni)) { if (count($sessioni)>0) {
echo ' echo '
<tr> <tr>
<td style="border-top: 0; border-bottom: 0;"></td> <td style="border-top: 0; border-bottom: 0;"></td>

View File

@ -25,7 +25,7 @@ UPDATE `zz_hooks` SET `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name`
ALTER TABLE `zz_hooks` ADD FOREIGN KEY (`id_module`) REFERENCES `zz_modules`(`id`) ON DELETE CASCADE; ALTER TABLE `zz_hooks` ADD FOREIGN KEY (`id_module`) REFERENCES `zz_modules`(`id`) ON DELETE CASCADE;
INSERT INTO `zz_hooks` (`id`, `name`, `class`, `frequency`, `id_module`) VALUES INSERT INTO `zz_hooks` (`id`, `name`, `class`, `frequency`, `id_module`) VALUES
(NULL, 'Ricevute', 'Modules\\Aggiornamenti\\UpdateHook', '7 day', (SELECT `id` FROM `zz_modules` WHERE `name` = 'Aggiornamenti')); (NULL, 'Aggiornamenti', 'Modules\\Aggiornamenti\\UpdateHook', '7 day', (SELECT `id` FROM `zz_modules` WHERE `name` = 'Aggiornamenti'));
-- --
-- Aggiunta nuovi campi per tracciamento sedi -- Aggiunta nuovi campi per tracciamento sedi

59
update/2_4_13.php Normal file
View File

@ -0,0 +1,59 @@
<?php
// File e cartelle deprecate
$files = [
'lib\init.js',
'lib\functions.js',
'include\src\HookManager.php',
'plugins\xml\AT_v1.0.xml',
'plugins\xml\DT_v1.0.xml',
'plugins\xml\EC_v1.0.xml',
'plugins\xml\MC_v1.0.xml',
'plugins\xml\MT_v1.0.xml',
'plugins\xml\NE_v1.0.xml',
'plugins\xml\NS_v1.0.xml',
'plugins\xml\RC_v1.0.xml',
'plugins\xml\SE_v1.0.xml',
'plugins\importFE\rows.php',
'plugins\exportFE\view.php',
'plugins\exportFE\src\stylesheet-1.2.1.xsl',
'plugins\exportFE\src\Connection.php',
'templates\riepilogo_interventi\pdfgen.riepilogo_interventi.php',
'templates\riepilogo_interventi\intervento_body.html',
'templates\riepilogo_interventi\intervento.html',
'templates\scadenzario\pdfgen.scadenzario.php',
'templates\scadenzario\scadenzario_body.html',
'templates\scadenzario\scadenzario.html',
'templates\registro_iva\pdfgen.registro_iva.php',
'templates\registro_iva\registroiva_body.html',
'templates\registro_iva\header.php',
'templates\registro_iva\body.php',
'templates\preventivi_cons\body.php',
'templates\contratti_cons\body.php',
'templates\magazzino_inventario\pdfgen.magazzino_inventario.php',
'templates\magazzino_inventario\magazzino_inventario_body.html',
'templates\magazzino_inventario\magazzino_inventario.html',
'modules\contratti\modutil.php',
'modules\contratti\plugins\contratti.ordiniservizio.interventi.php',
'modules\contratti\plugins\contratti.ordiniservizio.php',
'modules\interventi\src\TipoSessione.php',
'modules\anagrafiche\plugins\statistiche.php',
'modules\partitario\dettagli_movimento.php',
'modules\interventi\api\*',
'modules\anagrafiche\api\*',
'modules\articoli\api\*',
'modules\aggiornamenti\api\*',
'modules\stati_contratto\api\*',
'modules\stati_intervento\api\*',
'modules\stati_preventivo\api\*',
'modules\tipi_intervento\api\*',
'modules\utenti\api\*',
'templates\interventi_ordiniservizio\*',
'modules\automezzi\*',
];
foreach ($files as $key => $value) {
$files[$key] = realpath(DOCROOT.'/'.$value);
}
delete($files);

View File

@ -146,10 +146,25 @@ ALTER TABLE `co_scadenziario` ADD `note` VARCHAR(255) DEFAULT NULL AFTER `data_p
-- Aggiunta note in vista scadenzario -- -- Aggiunta note in vista scadenzario --
INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `search_inside`, `order_by`, `visible`, `summable`, `default`) VALUES (NULL, (SELECT `zz_modules`.`id` FROM `zz_modules` WHERE `zz_modules`.`name`='Scadenzario' ), 'Note', 'co_scadenziario.note', '5', '1', '0', '0', '', '', '0', '0', '0'); INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `search_inside`, `order_by`, `visible`, `summable`, `default`) VALUES (NULL, (SELECT `zz_modules`.`id` FROM `zz_modules` WHERE `zz_modules`.`name`='Scadenzario' ), 'Note', 'co_scadenziario.note', '5', '1', '0', '0', '', '', '0', '0', '0');
UPDATE `zz_settings` SET `nome` = 'Ora inizio sul calendario' WHERE `zz_settings`.`nome` = 'Inizio orario lavorativo'; UPDATE `zz_settings` SET `nome` = 'Ora inizio sul calendario' WHERE `zz_settings`.`nome` = 'Inizio orario lavorativo';
UPDATE `zz_settings` SET `nome` = 'Ora fine sul calendario' WHERE `zz_settings`.`nome` = 'Fine orario lavorativo'; UPDATE `zz_settings` SET `nome` = 'Ora fine sul calendario' WHERE `zz_settings`.`nome` = 'Fine orario lavorativo';
UPDATE `zz_settings` SET `nome` = 'Formato codice attività' WHERE `zz_settings`.`nome` = 'Formato codice intervento';
-- Flag per decisere se continuare attraverso gli anni la numerazione delle attività sulla base dello stesso contatore -- Flag per decisere se continuare attraverso gli anni la numerazione delle attività sulla base dello stesso contatore
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `help`) VALUES (NULL, 'Continua la numerazione', '0', 'boolean', '1', 'Interventi', 'Continua attraverso gli anni la numerazione delle attività sulla base dello stesso contatore.'); INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `help`) VALUES (NULL, 'Ingnora il periodo temporale per il calcolo del codice attività', '0', 'boolean', '1', 'Interventi', 'Continua attraverso gli anni la numerazione delle attività sulla base dello stesso contatore.');
-- Inizio orario lavorativo
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `help`) VALUES (NULL, 'Inizio orario lavorativo', '08:00:00', 'time', '1', 'Interventi', 'Inizio dell''orario lavorativo standard.');
-- Fine orario lavorativo
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `help`) VALUES (NULL, 'Fine orario lavorativo', '18:00:00', 'time', '1', 'Interventi', 'Fine dell''orario lavorativo standard.');
-- Giorni lavorativi
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`,`help`) VALUES (NULL, 'Giorni lavorativi', 'Lunedì,Martedì,Mercoledì,Giovedì,Venerdì', 'multiple[Lunedì,Martedì,Mercoledì,Giovedì,Venerdì,Sabato,Domenica]', '1', 'Interventi', '');
ALTER TABLE `zz_settings` CHANGE `help` `help` TEXT;
UPDATE `zz_settings` SET `help` = '<p>Impostare la maschera senza indicare l''anno per evitare il reset del contatore.</p><ul><li><b>####</b>: Numero progressivo del documento, con zeri non significativi per raggiungere il numero desiderato di caratteri</li><li><b>YYYY</b>: Anno corrente a 4 cifre</li><li><b>yy</b>: Anno corrente a 2 cifre</li></ul>' WHERE `zz_settings`.`nome` = 'Formato codice preventivi';
UPDATE `zz_hooks` SET `name` = 'Aggiornamenti' WHERE `class` = 'Modules\Aggiornamenti\UpdateHook';

View File

@ -200,17 +200,17 @@ $dbo->query('ALTER TABLE `in_interventi` DROP `sconto_globale`, DROP `tipo_scont
// File e cartelle deprecate // File e cartelle deprecate
$files = [ $files = [
'plugins/xml/AT_v1.0.xml', 'plugins\xml\AT_v1.0.xml',
'plugins/xml/DT_v1.0.xml', 'plugins\xml\DT_v1.0.xml',
'plugins/xml/EC_v1.0.xml', 'plugins\xml\EC_v1.0.xml',
'plugins/xml/MC_v1.0.xml', 'plugins\xml\MC_v1.0.xml',
'plugins/xml/MT_v1.0.xml', 'plugins\xml\MT_v1.0.xml',
'plugins/xml/NE_v1.0.xml', 'plugins\xml\NE_v1.0.xml',
'plugins/xml/NS_v1.0.xml', 'plugins\xml\NS_v1.0.xml',
'plugins/xml/RC_v1.0.xml', 'plugins\xml\RC_v1.0.xml',
'plugins/xml/SE_v1.0.xml', 'plugins\xml\SE_v1.0.xml',
'plugins/exportFE/view.php', 'plugins\exportFE\view.php',
'plugins/exportFE/src/stylesheet-1.2.1.xsl', 'plugins\exportFE\src\stylesheet-1.2.1.xsl',
]; ];
foreach ($files as $key => $value) { foreach ($files as $key => $value) {

View File

@ -4,7 +4,6 @@ namespace Update\v2_4_10;
use Common\Model; use Common\Model;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
use Modules\Fatture\Fattura;
use Modules\TipiIntervento\Tipo as TipoSessione; use Modules\TipiIntervento\Tipo as TipoSessione;
use Settings; use Settings;
use Traits\RecordTrait; use Traits\RecordTrait;