diff --git a/lib/helpers.php b/lib/helpers.php
index ae18b01aa..85ee4e4b4 100755
--- a/lib/helpers.php
+++ b/lib/helpers.php
@@ -274,10 +274,17 @@ function currency()
*/
function moneyFormat($number, $decimals = null)
{
- return tr('_TOTAL_ _CURRENCY_', [
- '_TOTAL_' => numberFormat($number, $decimals),
- '_CURRENCY_' => currency(),
- ]);
+ if (setting('Posizione del simbolo valuta') == 'Prima'){
+ return tr('_CURRENCY_ _TOTAL_', [
+ '_CURRENCY_' => currency(),
+ '_TOTAL_' => numberFormat($number, $decimals),
+ ]);
+ } else {
+ return tr('_TOTAL_ _CURRENCY_', [
+ '_TOTAL_' => numberFormat($number, $decimals),
+ '_CURRENCY_' => currency(),
+ ]);
+ }
}
/**
diff --git a/modules/anagrafiche/actions.php b/modules/anagrafiche/actions.php
index 40896fdd1..f283909e4 100755
--- a/modules/anagrafiche/actions.php
+++ b/modules/anagrafiche/actions.php
@@ -94,6 +94,7 @@ switch (post('op')) {
$anagrafica->riferimento_amministrazione = post('riferimento_amministrazione');
$anagrafica->colore = post('colore');
$anagrafica->idtipointervento_default = post('idtipointervento_default') ?: null;
+ $anagrafica->id_dichiarazione_intento_default = post('id_dichiarazione_intento_default') ?: null;
$anagrafica->provvigione_default = post('provvigione_default');
$anagrafica->id_ritenuta_acconto_acquisti = post('id_ritenuta_acconto_acquisti');
$anagrafica->id_ritenuta_acconto_vendite = post('id_ritenuta_acconto_vendite');
diff --git a/modules/anagrafiche/edit.php b/modules/anagrafiche/edit.php
index 5b643e635..721a17c6d 100755
--- a/modules/anagrafiche/edit.php
+++ b/modules/anagrafiche/edit.php
@@ -17,6 +17,7 @@
* along with this program. If not, see .
*/
+use Carbon\Carbon;
use Modules\Anagrafiche\Anagrafica;
use Modules\Banche\Banca;
@@ -529,6 +530,10 @@ if ($is_cliente or $is_fornitore or $is_tecnico) {
{[ "type": "select", "label": "'.tr('Tipo attività predefinita').'", "name": "idtipointervento_default", "values": "query=SELECT idtipointervento AS id, descrizione FROM in_tipiintervento ORDER BY descrizione ASC", "value": "$idtipointervento_default$" ]}
+
+
+
+ {[ "type": "select", "label": "'.tr("Dichiarazione d'intento").'", "name": "id_dichiarazione_intento_default", "ajax-source": "dichiarazioni_intento", "select-options": {"idanagrafica": '.$id_record.', "data": "'.Carbon::now().'"},"value": "$id_dichiarazione_intento_default$" ]}
';
// Collegamento con il conto
diff --git a/modules/fatture/bulk.php b/modules/fatture/bulk.php
index 5a96f1c3d..6a69b8662 100755
--- a/modules/fatture/bulk.php
+++ b/modules/fatture/bulk.php
@@ -308,7 +308,6 @@ switch (post('op')) {
$list = [];
foreach ($id_records as $id) {
$fattura = Fattura::find($id);
- array_push($list, $fattura->numero_esterno);
$id_segment = (post('id_segment') ? post('id_segment') : $fattura->id_segment);
$dir = $dbo->fetchOne('SELECT dir FROM co_tipidocumento WHERE id='.prepare($fattura->idtipodocumento))['dir'];
@@ -332,9 +331,10 @@ switch (post('op')) {
if (post('skip_time') == 'Anno') {
$data = date('Y-m-d', strtotime('+1 year', strtotime($fattura->data)));
}
-
+
+
$new = $fattura->replicate();
-
+
$new->data = $data;
$new->id_segment = $id_segment;
$new->numero = Fattura::getNextNumero($data, $dir, $id_segment);
@@ -360,6 +360,10 @@ switch (post('op')) {
$new_riga->movimenta($new_riga->qta);
}
}
+
+ if (!empty($fattura->numero_esterno)){
+ array_push($list, $fattura->numero_esterno);
+ }
}
flash()->info(tr('Fatture _LIST_ duplicate correttamente!', [
diff --git a/modules/fatture/src/Fattura.php b/modules/fatture/src/Fattura.php
index 0e2e78169..d609b6382 100755
--- a/modules/fatture/src/Fattura.php
+++ b/modules/fatture/src/Fattura.php
@@ -188,9 +188,15 @@ class Fattura extends Document
$model->split_payment = $split_payment;
}
- // Gestione della Dichiarazione d'Intento associata all'anargafica Controparte
+ // Gestione della Dichiarazione d'Intento associata all'anagrafica Controparte
$now = new Carbon();
$dichiarazione = $anagrafica->dichiarazioni()
+ ->where('massimale', '>', 'totale')
+ ->where('data_inizio', '<', $now)
+ ->where('data_fine', '>', $now)
+ ->where('id', $anagrafica->id_dichiarazione_intento_default)
+ ->first();
+ $dichiarazione = $dichiarazione ?: $anagrafica->dichiarazioni()
->where('massimale', '>', 'totale')
->where('data_inizio', '<', $now)
->where('data_fine', '>', $now)
@@ -694,7 +700,7 @@ class Fattura extends Document
// In fase di duplicazione di una fattura non deve essere calcolato il numero progressivo ma questo deve
// essere generato in fase di emissione della stessa.
- $new->numero_esterno = '';
+ $new->numero_esterno = null;
$new->numero = Fattura::getNextNumero($now, $new->direzione, $new->id_segment);
// Rimozione informazioni di Fattura Elettronica
diff --git a/plugins/pianificazione_fatturazione/widgets/rate_contrattuali.php b/plugins/pianificazione_fatturazione/widgets/rate_contrattuali.php
index e17830e0e..8d40106c0 100644
--- a/plugins/pianificazione_fatturazione/widgets/rate_contrattuali.php
+++ b/plugins/pianificazione_fatturazione/widgets/rate_contrattuali.php
@@ -17,7 +17,7 @@
* along with this program. If not, see
.
*/
-use Plugins\PianificazioneFatturazione\Pianificazione;
+
include_once __DIR__.'/../../../core.php';
@@ -36,40 +36,6 @@ $mesi = [
12 => 'Dicembre',
];
-$pianificazioni = Pianificazione::doesntHave('fattura')
- ->whereHas('contratto', function ($q) {
- $q->whereHas('stato', function ($q) {
- $q
- ->where('is_fatturabile', 1)
- ->where('descrizione', '<>', 'Concluso');
- });
- })->get();
-
-
- if ($pianificazioni->isEmpty()) {
- echo '
'.tr('Non ci sono fatture da emettere').'.
';
- return;
- }
-
- $conteggio = Pianificazione::doesntHave('fattura')
- ->selectRaw('month(co_fatturazione_contratti.data_scadenza) mese, count(*) conto')
- ->whereHas('contratto', function ($q) {
- $q->whereHas('stato', function ($q) {
- $q
- ->where('is_fatturabile', 1)
- ->where('descrizione', '<>', 'Concluso');
- });
- })
- ->whereYear('co_fatturazione_contratti.data_scadenza', date('Y'))
- ->groupBy('mese')
- ->get();
-
- $raggruppamenti = $pianificazioni->groupBy(function ($item) {
- return ucfirst($item->data_scadenza->formatLocalized('%B %Y'));
- });
-
-
-
echo
'
diff --git a/update/2_4_40.sql b/update/2_4_40.sql
index 1a44fd4ea..369f3beef 100644
--- a/update/2_4_40.sql
+++ b/update/2_4_40.sql
@@ -151,5 +151,19 @@ HAVING
ORDER BY
`scadenza` ASC" WHERE `name` = 'Scadenzario';
+-- Aggiunta dichiarazione d'intento predefinita
+ALTER TABLE `an_anagrafiche` ADD `id_dichiarazione_intento_default` INT NULL AFTER `idtipointervento_default`, ADD FOREIGN KEY (`id_dichiarazione_intento_default`) REFERENCES `co_dichiarazioni_intento`(`id`);
+
-- Aggiunta impostazione Movimentazione articoli da fatture di acquisto
-INSERT INTO zz_settings(nome, valore, tipo, editable, sezione) VALUES ('Movimenta magazzino da fatture di acquisto','1','boolean','1','Fatturazione Elettronica');
\ No newline at end of file
+INSERT INTO zz_settings(nome, valore, tipo, editable, sezione) VALUES ('Movimenta magazzino da fatture di acquisto','1','boolean','1','Fatturazione Elettronica');
+
+-- Permetto valore null per numero_esterno di co_documenti
+ALTER TABLE `co_documenti` CHANGE `numero_esterno` `numero_esterno` VARCHAR(100) NULL DEFAULT NULL;
+
+-- Aggiunta impostazione Posizione della valuta
+INSERT INTO zz_settings(nome, valore, tipo, editable, sezione) VALUES ('Posizione del simbolo valuta','Dopo','list[Prima,Dopo]','1','Generali');
+
+-- Miglioria segmenti scadenzario
+UPDATE `zz_segments` SET `name` = 'Scadenzario completo' WHERE `zz_segments`.`name` = 'Scadenziaro completo';
+UPDATE `zz_segments` SET `clause` = '(`co_scadenziario`.`scadenza` BETWEEN \'|period_start|\' AND \'|period_end|\' AND idtipodocumento < 14)' WHERE `zz_segments`.`name` = 'Scadenzario completo';
+INSERT INTO `zz_segments` (`id_module`, `name`, `clause`, `position`, `pattern`,`note`, `dicitura_fissa`,`predefined`, `predefined_accredito`, `predefined_addebito`, `autofatture`, `is_sezionale`) VALUES ((SELECT `id` FROM `zz_modules` WHERE `name` = 'Scadenzario'), 'Scadenzario autofatture', '(idtipodocumento >= 14)', 'WHR', '####', '', '', 0, 0, 0, 0, 0);
\ No newline at end of file