Skip to content

Commit 6ec8411

Browse files
committed
feat: #1582 blocco modifica di alcuni conti predefiniti
1 parent 0e2df98 commit 6ec8411

3 files changed

Lines changed: 110 additions & 1 deletion

File tree

modules/partitario/actions.php

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,20 @@
6666
$numero = post('numero');
6767
$descrizione = post('descrizione');
6868
$dir = post('dir');
69+
$conto_bloccato = post('conto_bloccato');
6970

7071
$lvl = post('lvl');
72+
73+
if ($conto_bloccato) {
74+
if ($lvl == 2) {
75+
$original_query = 'SELECT descrizione FROM co_pianodeiconti2 WHERE id='.prepare($idconto);
76+
} else {
77+
$original_query = 'SELECT descrizione FROM co_pianodeiconti3 WHERE id='.prepare($idconto);
78+
}
79+
$original = $dbo->fetchOne($original_query);
80+
$descrizione = $original['descrizione'];
81+
}
82+
7183
if ($lvl == 2) {
7284
$duplicate_query = 'SELECT numero FROM co_pianodeiconti2 WHERE numero='.prepare($numero).' AND NOT id='.prepare($idconto).' AND idpianodeiconti1='.prepare($idpianodeiconti);
7385

@@ -81,7 +93,11 @@
8193
// Controllo che non sia stato usato un numero non valido del conto
8294
if ($dbo->fetchNum($duplicate_query) == 0) {
8395
if ($dbo->query($update_query)) {
84-
flash()->info(tr('Descrizione conto modificata!'));
96+
if ($conto_bloccato) {
97+
flash()->info(tr('Conto speciale aggiornato! La descrizione non è stata modificata.'));
98+
} else {
99+
flash()->info(tr('Descrizione conto modificata!'));
100+
}
85101
}
86102
} else {
87103
flash()->error(tr('Il numero scelto è già esistente!'));

modules/partitario/edit_conto.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,31 @@
3131
}
3232

3333
$info = $dbo->fetchOne($query);
34+
35+
$conto_bloccato = [
36+
'Cassa e banche',
37+
'Crediti clienti e crediti diversi',
38+
'Debiti fornitori e debiti diversi',
39+
'Perdite e profitti',
40+
'Iva su vendite',
41+
'Iva su acquisti',
42+
'Iva indetraibile',
43+
'Compensazione per autofattura'
44+
];
45+
46+
$conto_bloccato = in_array($info['descrizione'], $conto_bloccato);
47+
48+
if (!$conto_bloccato && $lvl == 3) {
49+
$parent_query = 'SELECT descrizione FROM co_pianodeiconti2 WHERE id = '.prepare($info['idpianodeiconti2']);
50+
$parent_info = $dbo->fetchOne($parent_query);
51+
$conto_bloccato = $parent_info && $parent_info['descrizione'] == 'Perdite e profitti';
52+
}
53+
54+
if (!$conto_bloccato && $lvl == 3) {
55+
$parent_query = 'SELECT descrizione FROM co_pianodeiconti2 WHERE id = '.prepare($info['idpianodeiconti2']);
56+
$parent_info = $dbo->fetchOne($parent_query);
57+
$conto_bloccato = $parent_info && ($parent_info['descrizione'] == 'Conti transitori' || $parent_info['descrizione'] == 'Conti compensativi');
58+
}
3459
?>
3560
<form action="<?php echo base_path(); ?>/editor.php?id_module=<?php echo Module::where('name', 'Piano dei conti')->first()->id; ?>" method="post">
3661
<input type="hidden" name="op" value="edit">
@@ -46,7 +71,12 @@
4671
</div>
4772

4873
<div class="col-md-8">
74+
<?php if ($conto_bloccato): ?>
75+
{[ "type": "text", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "required": 1, "value": <?php echo json_encode($info['descrizione']); ?>, "readonly": 1, "help": "<?php echo tr('Questo è un conto speciale utilizzato dal sistema. La descrizione non può essere modificata.'); ?>" ]}
76+
<input type="hidden" name="conto_bloccato" value="1">
77+
<?php else: ?>
4978
{[ "type": "text", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "required": 1, "value": <?php echo json_encode($info['descrizione']); ?> ]}
79+
<?php endif; ?>
5080
</div>
5181
</div>
5282
<div class="row">

update/2_8.php

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,67 @@
4848
echo $file;
4949
$filename = basename($file);
5050
rename($file, $new_folder.$filename);
51+
}
52+
53+
// Verifica presenza conti
54+
$conti_speciali_livello2 = [
55+
'Conti transitori' => [
56+
'Iva su vendite',
57+
'Iva su acquisti',
58+
'Iva indetraibile',
59+
],
60+
'Conti compensativi' => [
61+
'Compensazione per autofattura',
62+
],
63+
'Perdite e profitti' => [],
64+
];
65+
66+
$conti_speciali_livello3 = [
67+
'Cassa e banca',
68+
'Crediti clienti e crediti diversi',
69+
'Debiti fornitori e debiti diversi',
70+
];
71+
72+
foreach ($conti_speciali_livello2 as $conto_livello2 => $sottoconti) {
73+
$conto2 = database()->fetchOne('SELECT id FROM co_pianodeiconti2 WHERE descrizione = '.prepare($conto_livello2));
74+
75+
if (empty($conto2)) {
76+
$conto1 = database()->fetchOne('SELECT id FROM co_pianodeiconti1 WHERE descrizione = "Patrimoniale"');
77+
78+
if (!empty($conto1)) {
79+
$max_numero = database()->fetchOne('SELECT MAX(CAST(numero AS UNSIGNED)) AS max_numero FROM co_pianodeiconti2 WHERE idpianodeiconti1 = '.prepare($conto1['id']));
80+
$nuovo_numero = $max_numero ? $max_numero['max_numero'] + 1 : 1;
81+
$nuovo_numero = str_pad($nuovo_numero, 6, '0', STR_PAD_LEFT);
82+
$id_conto2 = database()->query('INSERT INTO co_pianodeiconti2 (numero, descrizione, idpianodeiconti1, dir) VALUES ('.prepare($nuovo_numero).', '.prepare($conto_livello2).', '.prepare($conto1['id']).', "entrata/uscita")');
83+
$conto2 = ['id' => database()->lastInsertedID()];
84+
}
85+
}
86+
87+
foreach ($sottoconti as $sottoconto) {
88+
$conto3 = database()->fetchOne('SELECT id FROM co_pianodeiconti3 WHERE descrizione = '.prepare($sottoconto).' AND idpianodeiconti2 = '.prepare($conto2['id']));
89+
90+
if (empty($conto3)) {
91+
$max_numero = database()->fetchOne('SELECT MAX(CAST(numero AS UNSIGNED)) AS max_numero FROM co_pianodeiconti3 WHERE idpianodeiconti2 = '.prepare($conto2['id']));
92+
$nuovo_numero = $max_numero ? $max_numero['max_numero'] + 1 : 1;
93+
$nuovo_numero = str_pad($nuovo_numero, 6, '0', STR_PAD_LEFT);
94+
database()->query('INSERT INTO co_pianodeiconti3 (numero, descrizione, idpianodeiconti2, dir, percentuale_deducibile) VALUES ('.prepare($nuovo_numero).', '.prepare($sottoconto).', '.prepare($conto2['id']).', "entrata/uscita", 100)');
95+
echo "Creato conto di terzo livello: ".$sottoconto." (numero: ".$nuovo_numero.")\n";
96+
}
97+
}
98+
}
99+
100+
foreach ($conti_speciali_livello3 as $conto_livello3) {
101+
$conto3 = database()->fetchOne('SELECT id FROM co_pianodeiconti3 WHERE descrizione = '.prepare($conto_livello3));
102+
103+
if (empty($conto3)) {
104+
$conto2 = database()->fetchOne('SELECT id FROM co_pianodeiconti2 WHERE idpianodeiconti1 = (SELECT id FROM co_pianodeiconti1 WHERE descrizione = "Patrimoniale") LIMIT 1');
105+
106+
if (!empty($conto2)) {
107+
$max_numero = database()->fetchOne('SELECT MAX(CAST(numero AS UNSIGNED)) AS max_numero FROM co_pianodeiconti3 WHERE idpianodeiconti2 = '.prepare($conto2['id']));
108+
$nuovo_numero = $max_numero ? $max_numero['max_numero'] + 1 : 1;
109+
$nuovo_numero = str_pad($nuovo_numero, 6, '0', STR_PAD_LEFT);
110+
database()->query('INSERT INTO co_pianodeiconti3 (numero, descrizione, idpianodeiconti2, dir, percentuale_deducibile) VALUES ('.prepare($nuovo_numero).', '.prepare($conto_livello3).', '.prepare($conto2['id']).', "entrata/uscita", 100)');
111+
echo "Creato conto di terzo livello speciale: ".$conto_livello3." (numero: ".$nuovo_numero.")\n";
112+
}
113+
}
51114
}

0 commit comments

Comments
 (0)