Skip to content

Commit 30ad090

Browse files
feat: Descrizione aggiuntiva personalizzata in fatturazione
1 parent 6121800 commit 30ad090

2 files changed

Lines changed: 110 additions & 1 deletion

File tree

modules/fatture/src/Components/RelationTrait.php

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,109 @@ public function fattura()
4242
return $this->document();
4343
}
4444

45+
/**
46+
* Azione personalizzata per la copia dell'oggetto (dopo la copia).
47+
* Aggiunge la descrizione aggiuntiva personalizzata se impostata.
48+
*/
49+
protected function customAfterDataCopiaIn($original)
50+
{
51+
// Chiama il metodo parent per mantenere la compatibilità
52+
parent::customAfterDataCopiaIn($original);
53+
54+
// Verifica se l'impostazione "Descrizione aggiuntiva personalizzata in fatturazione" è configurata
55+
$descrizione_aggiuntiva = setting('Descrizione aggiuntiva personalizzata in fatturazione');
56+
57+
if ($descrizione_aggiuntiva) {
58+
// Sostituisce i placeholder con i valori effettivi dalla riga originale
59+
$descrizione_personalizzata = $this->replacePlaceholders($descrizione_aggiuntiva, $original);
60+
61+
// Aggiunge la descrizione personalizzata alla descrizione esistente
62+
if ($descrizione_personalizzata) {
63+
$this->descrizione = $this->descrizione . "\n" . $descrizione_personalizzata;
64+
}
65+
}
66+
}
67+
68+
/**
69+
* Sostituisce i placeholder nella descrizione con i valori dalla riga originale.
70+
*
71+
* @param string $text Testo con placeholder da sostituire
72+
* @param mixed $original Riga originale da cui prendere i valori
73+
* @return string Testo con placeholder sostituiti
74+
*/
75+
private function replacePlaceholders($text, $original)
76+
{
77+
// Trova tutti i placeholder nel formato {campo}
78+
preg_match_all('/\{([^}]+)\}/', $text, $matches);
79+
80+
if (empty($matches[1])) {
81+
return $text;
82+
}
83+
84+
$result = $text;
85+
86+
foreach ($matches[1] as $field) {
87+
$placeholder = '{' . $field . '}';
88+
$value = '';
89+
90+
// Prova ad accedere al campo dalla riga originale
91+
if (isset($original->$field)) {
92+
$value = $original->$field;
93+
}
94+
// Se il campo non esiste direttamente, prova con getAttributes()
95+
elseif (method_exists($original, 'getAttributes')) {
96+
$attributes = $original->getAttributes();
97+
if (isset($attributes[$field])) {
98+
$value = $attributes[$field];
99+
}
100+
}
101+
102+
// Formatta il valore se è una data
103+
if ($value) {
104+
$value = $this->formatFieldValue($field, $value);
105+
}
106+
107+
// Sostituisce il placeholder con il valore trovato
108+
$result = str_replace($placeholder, $value, $result);
109+
}
110+
111+
return $result;
112+
}
113+
114+
/**
115+
* Formatta il valore del campo in base al tipo.
116+
* Se il campo è una data, la formatta usando Translator.
117+
*
118+
* @param string $field Nome del campo
119+
* @param mixed $value Valore del campo
120+
* @return string Valore formattato
121+
*/
122+
private function formatFieldValue($field, $value)
123+
{
124+
if ($this->isDateFormat($value)) {
125+
// Usa Translator per formattare la data
126+
return \Translator::dateToLocale($value);
127+
}
128+
129+
return $value;
130+
}
131+
132+
/**
133+
* Verifica se un valore ha il formato di una data.
134+
*
135+
* @param mixed $value Valore da verificare
136+
* @return bool True se il valore è una data
137+
*/
138+
private function isDateFormat($value)
139+
{
140+
if (!is_string($value) || empty($value)) {
141+
return false;
142+
}
143+
144+
// Verifica formati data comuni: YYYY-MM-DD, YYYY-MM-DD HH:MM:SS
145+
return preg_match('/^\d{4}-\d{2}-\d{2}(\s\d{2}:\d{2}:\d{2})?$/', $value) === 1;
146+
}
147+
45148
/**
46149
* Restituisce i dati aggiuntivi per la fattura elettronica dell'elemento.
47150
*

update/2_10.sql

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,4 +159,10 @@ INSERT INTO `zz_settings_lang` (`id_lang`, `id_record`, `title`, `help`) VALUES
159159
(2, (SELECT MAX(`id`) FROM `zz_settings`), 'Account to use for VAT collection', '');
160160

161161
-- Aggiunta campo idmastrino alla tabella co_stampecontabili
162-
ALTER TABLE `co_stampecontabili` ADD `idmastrino` INT NULL;
162+
ALTER TABLE `co_stampecontabili` ADD `idmastrino` INT NULL;
163+
164+
-- Descrizione aggiuntiva personalizzata in fatturazione
165+
INSERT INTO `zz_settings` (`nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `is_user_setting`) VALUES ('Descrizione aggiuntiva personalizzata in fatturazione', '', 'textarea', '1', 'Fatturazione', NULL, '0');
166+
INSERT INTO `zz_settings_lang` (`id_lang`, `id_record`, `title`, `help`) VALUES
167+
(1, (SELECT MAX(`id`) FROM `zz_settings`), 'Descrizione aggiuntiva personalizzata in fatturazione', ''),
168+
(2, (SELECT MAX(`id`) FROM `zz_settings`), 'Additional custom description in invoices', '');

0 commit comments

Comments
 (0)