Skip to content

Commit 37516a7

Browse files
committed
fix: miglioria gestione conti in piano dei conti
1 parent 04e9ce6 commit 37516a7

4 files changed

Lines changed: 127 additions & 149 deletions

File tree

assets/src/css/style.css

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4623,4 +4623,111 @@ table.dataTable thead th:nth-child(6) {
46234623

46244624
.colorpicker{
46254625
box-sizing: border-box;
4626+
}
4627+
4628+
/* DataTable sottoconti - override stile length menu */
4629+
.sottoconti-dt .dataTables_length label {
4630+
gap: .4rem;
4631+
}
4632+
.sottoconti-dt .dataTables_length .select2-container {
4633+
display: inline-block !important;
4634+
width: auto !important;
4635+
min-width: 4.5rem;
4636+
vertical-align: middle;
4637+
}
4638+
4639+
/* DataTable sottoconti - override stile campo ricerca */
4640+
.sottoconti-dt .dataTables_filter input {
4641+
width: 16rem;
4642+
max-width: 100%;
4643+
height: calc(2.25rem + 2px);
4644+
margin: 0;
4645+
padding: .375rem .75rem;
4646+
font-size: 1rem;
4647+
line-height: 1.5;
4648+
color: #495057;
4649+
background-color: #fff;
4650+
border: 1px solid #ced4da;
4651+
border-radius: .25rem !important;
4652+
box-shadow: none;
4653+
}
4654+
4655+
/* DataTable sottoconti - override stile riga paginazione */
4656+
.sottoconti-dt .dt-pagination-col {
4657+
gap: .5rem .75rem;
4658+
padding-top: .5rem;
4659+
}
4660+
.sottoconti-dt .dt-pagination-col .dataTables_paginate {
4661+
padding-top: 0;
4662+
text-align: right;
4663+
}
4664+
.sottoconti-dt .dt-goto {
4665+
width: auto;
4666+
flex: 0 0 auto;
4667+
margin: 0;
4668+
}
4669+
.sottoconti-dt .dt-goto .input-group-text {
4670+
border-top-right-radius: 0 !important;
4671+
border-bottom-right-radius: 0 !important;
4672+
}
4673+
.sottoconti-dt .dt-goto input {
4674+
width: 4.5rem;
4675+
border-top-left-radius: 0 !important;
4676+
border-bottom-left-radius: 0 !important;
4677+
}
4678+
4679+
/* DataTable sottoconti - override stile bottoni paginazione BS4 */
4680+
.sottoconti-dt .dataTables_paginate .paginate_button {
4681+
display: inline-block;
4682+
box-sizing: border-box;
4683+
min-width: 2.25rem;
4684+
padding: .375rem .75rem !important;
4685+
border: 1px solid #dee2e6;
4686+
background: #fff;
4687+
color: #007bff;
4688+
line-height: 1.25;
4689+
text-align: center;
4690+
cursor: pointer;
4691+
}
4692+
.sottoconti-dt .dataTables_paginate .paginate_button:hover {
4693+
background: #e9ecef;
4694+
color: #0056b3;
4695+
text-decoration: none;
4696+
}
4697+
.sottoconti-dt .dataTables_paginate .paginate_button.current,
4698+
.sottoconti-dt .dataTables_paginate .paginate_button.current:hover {
4699+
border-color: #007bff;
4700+
background: #007bff;
4701+
color: #fff;
4702+
}
4703+
.sottoconti-dt .dataTables_paginate .paginate_button.disabled,
4704+
.sottoconti-dt .dataTables_paginate .paginate_button.disabled:hover {
4705+
color: #6c757d;
4706+
background: #fff;
4707+
cursor: default;
4708+
}
4709+
.sottoconti-dt .dataTables_paginate span a.paginate_button {
4710+
margin-left: -1px;
4711+
border-radius: 0;
4712+
}
4713+
.sottoconti-dt .dataTables_paginate span a.paginate_button:first-child {
4714+
margin-left: 0;
4715+
border-top-left-radius: .25rem;
4716+
border-bottom-left-radius: .25rem;
4717+
}
4718+
.sottoconti-dt .dataTables_paginate span a.paginate_button:last-child {
4719+
border-top-right-radius: .25rem;
4720+
border-bottom-right-radius: .25rem;
4721+
}
4722+
.sottoconti-dt .dataTables_paginate .paginate_button.previous {
4723+
border-radius: .25rem;
4724+
margin-right: .5rem;
4725+
}
4726+
.sottoconti-dt .dataTables_paginate .paginate_button.next {
4727+
border-radius: .25rem;
4728+
margin-left: .5rem;
4729+
}
4730+
.sottoconti-dt .dataTables_paginate .paginate_button.previous:before,
4731+
.sottoconti-dt .dataTables_paginate .paginate_button.next:after {
4732+
content: none !important;
46264733
}

modules/partitario/dettagli_conto2.php

Lines changed: 4 additions & 134 deletions
Original file line numberDiff line numberDiff line change
@@ -274,135 +274,6 @@ function partitario_sottoconto_cells($conto_terzo, $conto_secondo, $conto_primo)
274274
$columns_js .= ', { data: "'.($is_economico ? '3' : '2').'" }';
275275

276276
echo '
277-
<style>
278-
/* Stile scoped alla DataTable dei sottoconti (override delle regole BS3 di datatables.css) */
279-
280-
/* Length menu: select2 inline, tutto su una riga */
281-
.sottoconti-dt .dataTables_length label {
282-
display: inline-flex;
283-
align-items: center;
284-
gap: .4rem;
285-
margin: 0;
286-
font-weight: normal;
287-
}
288-
.sottoconti-dt .dataTables_length .select2-container {
289-
display: inline-block !important;
290-
width: auto !important;
291-
min-width: 4.5rem;
292-
vertical-align: middle;
293-
}
294-
295-
/* Campo ricerca: come #input-cerca in cima alla pagina, solo piu\' piccola (no -lg) */
296-
.sottoconti-dt .dataTables_filter label {
297-
display: flex;
298-
justify-content: flex-end;
299-
width: 100%;
300-
margin: 0;
301-
}
302-
.sottoconti-dt .dataTables_filter input {
303-
display: block;
304-
width: 16rem;
305-
max-width: 100%;
306-
height: calc(2.25rem + 2px);
307-
margin: 0;
308-
padding: .375rem .75rem;
309-
font-size: 1rem;
310-
line-height: 1.5;
311-
color: #495057;
312-
background-color: #fff;
313-
border: 1px solid #ced4da;
314-
border-radius: .25rem !important;
315-
box-shadow: none;
316-
}
317-
318-
/* Riga paginazione: campo "Vai a pagina" + pager, allineati a destra */
319-
.sottoconti-dt .dt-pagination-col {
320-
display: flex;
321-
align-items: center;
322-
justify-content: flex-end;
323-
flex-wrap: wrap;
324-
gap: .5rem .75rem;
325-
padding-top: .5rem;
326-
}
327-
.sottoconti-dt .dt-pagination-col .dataTables_paginate {
328-
padding-top: 0;
329-
text-align: right;
330-
}
331-
.sottoconti-dt .dt-goto {
332-
width: auto;
333-
flex: 0 0 auto;
334-
margin: 0;
335-
}
336-
.sottoconti-dt .dt-goto .input-group-text {
337-
/* !important per battere la regola globale .input-group-text di style.css */
338-
border-top-right-radius: 0 !important;
339-
border-bottom-right-radius: 0 !important;
340-
}
341-
.sottoconti-dt .dt-goto input {
342-
width: 4.5rem;
343-
border-top-left-radius: 0 !important;
344-
border-bottom-left-radius: 0 !important;
345-
}
346-
347-
/* Bottoni paginazione in stile BS4 */
348-
.sottoconti-dt .dataTables_paginate .paginate_button {
349-
display: inline-block;
350-
box-sizing: border-box;
351-
min-width: 2.25rem;
352-
padding: .375rem .75rem !important; /* !important per battere il padding 24px BS3 su prev/next */
353-
border: 1px solid #dee2e6;
354-
background: #fff;
355-
color: #007bff;
356-
line-height: 1.25;
357-
text-align: center;
358-
cursor: pointer;
359-
}
360-
.sottoconti-dt .dataTables_paginate .paginate_button:hover {
361-
background: #e9ecef;
362-
color: #0056b3;
363-
text-decoration: none;
364-
}
365-
.sottoconti-dt .dataTables_paginate .paginate_button.current,
366-
.sottoconti-dt .dataTables_paginate .paginate_button.current:hover {
367-
border-color: #007bff;
368-
background: #007bff;
369-
color: #fff;
370-
}
371-
.sottoconti-dt .dataTables_paginate .paginate_button.disabled,
372-
.sottoconti-dt .dataTables_paginate .paginate_button.disabled:hover {
373-
color: #6c757d;
374-
background: #fff;
375-
cursor: default;
376-
}
377-
/* Gruppo numeri: bottoni uniti, estremi arrotondati */
378-
.sottoconti-dt .dataTables_paginate span a.paginate_button {
379-
margin-left: -1px;
380-
border-radius: 0;
381-
}
382-
.sottoconti-dt .dataTables_paginate span a.paginate_button:first-child {
383-
margin-left: 0;
384-
border-top-left-radius: .25rem;
385-
border-bottom-left-radius: .25rem;
386-
}
387-
.sottoconti-dt .dataTables_paginate span a.paginate_button:last-child {
388-
border-top-right-radius: .25rem;
389-
border-bottom-right-radius: .25rem;
390-
}
391-
/* Prec/Succ: bottoni separati dal gruppo numeri */
392-
.sottoconti-dt .dataTables_paginate .paginate_button.previous {
393-
border-radius: .25rem;
394-
margin-right: .5rem;
395-
}
396-
.sottoconti-dt .dataTables_paginate .paginate_button.next {
397-
border-radius: .25rem;
398-
margin-left: .5rem;
399-
}
400-
/* niente frecce FontAwesome doppie: solo le icone passate via language.paginate */
401-
.sottoconti-dt .dataTables_paginate .paginate_button.previous:before,
402-
.sottoconti-dt .dataTables_paginate .paginate_button.next:after {
403-
content: none !important;
404-
}
405-
</style>
406277
<script>
407278
$(function() {
408279
var $dt = $("#'.$datatable_id.'");
@@ -446,10 +317,8 @@ function partitario_sottoconto_cells($conto_terzo, $conto_secondo, $conto_primo)
446317
dom: "<\'row\'<\'col-sm-12 col-md-6\'l><\'col-sm-12 col-md-6\'f>>rt<\'row\'<\'col-sm-12 col-md-5\'i><\'col-sm-12 col-md-7\'p>>",
447318
initComplete: function () {
448319
var api = this.api();
449-
// Classe sul wrapper per agganciare le regole CSS scoped (sopra)
450320
var $container = $(api.table().container()).addClass("sottoconti-dt");
451321
452-
// Length menu: select2 tema bootstrap4 (coerente con gli altri select dell\'app)
453322
$container.find(".dataTables_length select").select2({
454323
theme: "bootstrap4",
455324
language: "it",
@@ -458,12 +327,13 @@ function partitario_sottoconto_cells($conto_terzo, $conto_secondo, $conto_primo)
458327
allowClear: false,
459328
});
460329
461-
// Campo ricerca: come #input-cerca in cima alla pagina, solo piu\' piccolo
330+
$container.find(".dataTables_length label").addClass("d-inline-flex align-items-center m-0 font-weight-normal");
331+
$container.find(".dataTables_filter label").addClass("d-flex justify-content-end w-100 m-0");
462332
$container.find(".dataTables_filter input").addClass("form-control text-center");
463333
464-
// Campo "Vai a pagina" accanto al pager (fratello del pager: il redraw non lo cancella)
465334
var $pagCol = $container.find(".dataTables_paginate").parent().addClass("dt-pagination-col");
466-
var $goto = $(\'<div class="dt-goto input-group input-group-sm"><div class="input-group-prepend"><span class="input-group-text">'.tr('Vai a pagina').'</span></div><input type="number" min="1" class="form-control text-center"></div>\');
335+
$pagCol.addClass("d-flex align-items-center justify-content-end flex-wrap");
336+
var $goto = $('<div class="dt-goto input-group input-group-sm"><div class="input-group-prepend"><span class="input-group-text">'.tr('Vai a pagina').'</span></div><input type="number" min="1" class="form-control text-center"></div>');
467337
$goto.prependTo($pagCol);
468338
$goto.find("input").on("keydown change", function (e) {
469339
if (e.type === "keydown" && e.key !== "Enter") {

update/2_12.sql

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,19 @@ INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `slow`,
5252
INSERT INTO `zz_views_lang` (`id_lang`, `id_record`, `title`) VALUES ('1', (SELECT `id` FROM `zz_views` WHERE `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Tags') AND `name` = 'color_Colore'), 'color_Colore'),('2', (SELECT `id` FROM `zz_views` WHERE `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Tags') AND `name` = 'color_Colore'), 'color_Color');
5353

5454
-- Aggiunte colonne Ore, Stato, Tecnico e Descrizione nel plugin Anagrafiche -> Storico Attività
55-
UPDATE `zz_plugins` SET `options` = '{ \"main_query\": [ { \"type\": \"table\", \"fields\": \"Numero, Data inizio, Data fine, Tipo, Ore, Stato, Tecnico, Descrizione\", \"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\', `in_tipi_intervento_lang`.`title`AS \'Tipo\', (SELECT `id` FROM `zz_modules` WHERE `name` = \'Interventi\' LIMIT 1) AS _link_module_, in_interventi.id AS _link_record_, FORMAT(`in_interventi_tecnici`.`ore`, 2) AS Ore, `in_stati_intervento`.`name` AS Stato, `an_anagrafiche`.`ragione_sociale` AS Tecnico, `in_interventi`.`descrizione` AS Descrizione FROM in_interventi LEFT JOIN `in_interventi_tecnici` ON `in_interventi_tecnici`.`id_intervento` = `in_interventi`.`id` INNER JOIN `in_stati_intervento` ON `in_interventi`.`id_stato`=`in_stati_intervento`.`id` INNER JOIN `in_tipi_intervento` ON (`in_interventi`.`id_tipo_intervento` = `in_tipi_intervento`.`id`) LEFT JOIN `in_tipi_intervento_lang` ON (`in_tipi_intervento_lang`.`id_record` = `in_tipi_intervento`.`id` AND `in_tipi_intervento_lang`.`id_lang` = (SELECT `valore` FROM `zz_settings` WHERE `nome` = \'Lingua\')) LEFT JOIN `an_anagrafiche` ON `in_interventi_tecnici`.`id_tecnico` = `an_anagrafiche`.`id` WHERE 1=1 AND in_interventi.deleted_at IS NULL AND id_anagrafica = |id_parent| GROUP BY `in_interventi`.`id` HAVING 2=2 ORDER BY in_interventi.id DESC\"}]}' WHERE `zz_plugins`.`name`= 'Storico attività';
55+
UPDATE `zz_plugins` SET `options` = '{ \"main_query\": [ { \"type\": \"table\", \"fields\": \"Numero, Data inizio, Data fine, Tipo, Ore, Stato, Tecnico, Descrizione\", \"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\', `in_tipi_intervento_lang`.`title`AS \'Tipo\', (SELECT `id` FROM `zz_modules` WHERE `name` = \'Interventi\' LIMIT 1) AS _link_module_, in_interventi.id AS _link_record_, FORMAT(`in_interventi_tecnici`.`ore`, 2) AS Ore, `in_stati_intervento`.`name` AS Stato, `an_anagrafiche`.`ragione_sociale` AS Tecnico, `in_interventi`.`descrizione` AS Descrizione FROM in_interventi LEFT JOIN `in_interventi_tecnici` ON `in_interventi_tecnici`.`id_intervento` = `in_interventi`.`id` INNER JOIN `in_stati_intervento` ON `in_interventi`.`id_stato`=`in_stati_intervento`.`id` INNER JOIN `in_tipi_intervento` ON (`in_interventi`.`id_tipo_intervento` = `in_tipi_intervento`.`id`) LEFT JOIN `in_tipi_intervento_lang` ON (`in_tipi_intervento_lang`.`id_record` = `in_tipi_intervento`.`id` AND `in_tipi_intervento_lang`.`id_lang` = (SELECT `valore` FROM `zz_settings` WHERE `nome` = \'Lingua\')) LEFT JOIN `an_anagrafiche` ON `in_interventi_tecnici`.`id_tecnico` = `an_anagrafiche`.`id` WHERE 1=1 AND in_interventi.deleted_at IS NULL AND id_anagrafica = |id_parent| GROUP BY `in_interventi`.`id` HAVING 2=2 ORDER BY in_interventi.id DESC\"}]}' WHERE `zz_plugins`.`name`= 'Storico attività';
56+
57+
-- Soglia oltre la quale i sottoconti di un mastro del Piano dei conti vengono mostrati come tabella con ricerca e impaginazione
58+
INSERT INTO `zz_settings` (`nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `is_user_setting`) VALUES
59+
('Soglia datatable sottoconti', '500', 'integer', 1, 'Piano dei conti', 10, 0);
60+
61+
INSERT INTO `zz_settings_lang` (`id_lang`, `id_record`, `title`, `help`) VALUES
62+
(1, (SELECT `id` FROM `zz_settings` WHERE `nome` = 'Soglia datatable sottoconti'), 'Soglia datatable sottoconti', 'Numero di sottoconti oltre il quale, espandendo un mastro nel Piano dei conti, i sottoconti vengono mostrati in una tabella con ricerca e impaginazione invece dell\'elenco semplice. Default 500.'),
63+
(2, (SELECT `id` FROM `zz_settings` WHERE `nome` = 'Soglia datatable sottoconti'), 'Subaccount datatable threshold', 'Number of subaccounts above which, when expanding an account in the Chart of accounts, subaccounts are shown in a searchable, paginated table instead of the plain list. Default 500.');
64+
65+
-- Indice per la selezione paginata dei sottoconti per mastro
66+
ALTER TABLE `co_piano_dei_conti3` ADD INDEX `idx_id_piano_dei_conti2_numero` (`id_piano_dei_conti2`, `numero`);
67+
68+
-- Indici per il join anagrafica del dettaglio sottoconti
69+
ALTER TABLE `an_anagrafiche` ADD INDEX `idx_id_conto_cliente` (`id_conto_cliente`);
70+
ALTER TABLE `an_anagrafiche` ADD INDEX `idx_id_conto_fornitore` (`id_conto_fornitore`);

update/2_13.sql

Lines changed: 0 additions & 14 deletions
This file was deleted.

0 commit comments

Comments
 (0)