';
-
-if (!empty($documento)) {
- echo '
+
- '.($dir == 'entrata' ? tr('Cliente') : tr('Fornitore')).': |
+ '.($dir == 'entrata' ? tr('Cliente') : ($dir == 'uscita' ? tr('Fornitore') : tr('Anagrafica'))).': |
- '.Modules::link('Anagrafiche', $documento->anagrafica->id, $documento->anagrafica->ragione_sociale).'
+ '.Modules::link('Anagrafiche', $record['idanagrafica'], $record['ragione_sociale']).'
|
-
-
+ ';
+if (!empty($documento)) {
+ echo '
'.tr('Documento').': |
'.$documento->tipo->descrizione.' |
@@ -76,8 +74,20 @@ if (!empty($documento)) {
'.tr('Netto a pagare').': |
'.moneyFormat($documento->netto).' |
-
+ ';
+} else {
+
+ $scadenza = $dbo->fetchOne('SELECT * FROM co_scadenziario WHERE id = '.prepare($id_record));
+ echo '
+
+ '.tr('Descrizione').': |
+
+ {[ "type": "textarea", "name": "descrizione", "value": "'.$record['descrizione'].'" ]}
+ |
+
';
+}
+echo '
'.tr('Note').': |
@@ -99,31 +109,12 @@ if (!empty($documento)) {
}else{
$export_riba = ' '.tr('Non ancora esportata');
}
-
- echo '
-
- |
-
- '.Modules::link($documento->module, $record['iddocumento'], '
'.tr('Apri documento'), null, 'class="btn btn-primary"');
-} else {
- $scadenza = $dbo->fetchOne('SELECT * FROM co_scadenziario WHERE id = '.prepare($id_record));
-
- echo input([
- 'type' => 'textarea',
- 'label' => tr('Descrizione'),
- 'name' => 'descrizione',
- 'required' => 1,
- 'value' => $scadenza['descrizione'],
- ]);
-
- echo input([
- 'type' => 'text',
- 'label' => tr('Info distinta'),
- 'name' => 'distinta',
- 'value' => $scadenza['distinta'],
- ]);
-}
-
+echo '
+ ';
+
+ if (!empty($documento)) {
+ echo Modules::link($documento->module, $record['iddocumento'], '
'.tr('Apri documento'), null, 'class="btn btn-primary"');
+ }
echo '
diff --git a/modules/scadenzario/init.php b/modules/scadenzario/init.php
index 9b7d6ad1c..b93db7463 100755
--- a/modules/scadenzario/init.php
+++ b/modules/scadenzario/init.php
@@ -22,7 +22,7 @@ use Modules\Fatture\Fattura;
include_once __DIR__.'/../../core.php';
if (isset($id_record)) {
- $record = $dbo->fetchOne('SELECT * FROM co_scadenziario WHERE id = '.prepare($id_record));
+ $record = $dbo->fetchOne('SELECT co_scadenziario.*, an_anagrafiche.ragione_sociale FROM co_scadenziario LEFT JOIN an_anagrafiche ON co_scadenziario.idanagrafica=an_anagrafiche.idanagrafica WHERE id = '.prepare($id_record));
$documento = Fattura::find($record['iddocumento']);
// Scelgo la query in base alla scadenza
diff --git a/modules/scadenzario/src/Scadenza.php b/modules/scadenzario/src/Scadenza.php
index d846cb490..905b1de60 100755
--- a/modules/scadenzario/src/Scadenza.php
+++ b/modules/scadenzario/src/Scadenza.php
@@ -21,6 +21,7 @@ namespace Modules\Scadenzario;
use Common\SimpleModelTrait;
use Illuminate\Database\Eloquent\Model;
+use Modules\Anagrafiche\Anagrafica;
use Modules\Fatture\Fattura;
class Scadenza extends Model
@@ -34,10 +35,11 @@ class Scadenza extends Model
'data_pagamento',
];
- public static function build($descrizione, $importo, $data_scadenza, $type = 'fattura', $is_pagato = false)
+ public static function build($idanagrafica, $descrizione, $importo, $data_scadenza, $type = 'fattura', $is_pagato = false)
{
$model = new static();
+ $model->idanagrafica = $idanagrafica;
$model->descrizione = $descrizione;
$model->scadenza = $data_scadenza;
$model->da_pagare = $importo;
@@ -55,4 +57,9 @@ class Scadenza extends Model
{
return $this->belongsTo(Fattura::class, 'iddocumento');
}
+
+ public function anagrafica()
+ {
+ return $this->belongsTo(Anagrafica::class, 'idanagrafica');
+ }
}
diff --git a/plugins/presentazioni_bancarie/actions.php b/plugins/presentazioni_bancarie/actions.php
index 08781cfc2..b2d6aab85 100644
--- a/plugins/presentazioni_bancarie/actions.php
+++ b/plugins/presentazioni_bancarie/actions.php
@@ -38,24 +38,22 @@ switch (filter('op')) {
foreach ($scadenze as $key => $scadenza) {
$documento = $scadenza->documento;
- if (empty($documento)) {
- continue;
- }
+ $descrizione = $scadenza->descrizione;
+ if (!empty($documento)) {
+ // Individuazione altre scadenze del documento
+ $scadenze_documento = $documento->scadenze->sortBy('scadenza');
+ $pos = $scadenze_documento->search(function ($item, $key) use ($scadenza) {
+ return $item->id == $scadenza->id;
+ });
- // Individuazione altre scadenze del documento
- $scadenze_documento = $documento->scadenze->sortBy('scadenza');
- $pos = $scadenze_documento->search(function ($item, $key) use ($scadenza) {
- return $item->id == $scadenza->id;
- });
-
- // Generazione della descrizione del pagamento
- $descrizione = $documento->getReference();
- if ($scadenze_documento->count() > 1) {
- $descrizione .= tr('_DOC_, pagamento _NUM_/_TOT_', [
- '_DOC_' => $descrizione,
- '_NUM_' => $pos + 1,
- '_TOT_' => $scadenze_documento->count(),
- ]);
+ // Generazione della descrizione del pagamento
+ if ($scadenze_documento->count() > 1) {
+ $descrizione .= tr('_DOC_, pagamento _NUM_/_TOT_', [
+ '_DOC_' => $descrizione,
+ '_NUM_' => $pos + 1,
+ '_TOT_' => $scadenze_documento->count(),
+ ]);
+ }
}
// Controllo sulla banca aziendale collegata alla scadenza
diff --git a/plugins/presentazioni_bancarie/generate.php b/plugins/presentazioni_bancarie/generate.php
index e24642888..a01f47b35 100644
--- a/plugins/presentazioni_bancarie/generate.php
+++ b/plugins/presentazioni_bancarie/generate.php
@@ -58,7 +58,7 @@ if (!$esporta_processati) {
$scadenze = $scadenze->get();
$id_scadenze = $scadenze->pluck('id');
-$raggruppamento = $scadenze->groupBy('documento.idanagrafica');
+$raggruppamento = $scadenze->groupBy('idanagrafica');
if ($raggruppamento->isEmpty()) {
echo '
'.tr('Nessun pagamento disponibile secondo la selezione effettuata').'.
';
@@ -67,7 +67,7 @@ if ($raggruppamento->isEmpty()) {
}
foreach ($raggruppamento as $id_anagrafica => $scadenze_anagrafica) {
- $anagrafica = $scadenze_anagrafica->first()->documento->anagrafica;
+ $anagrafica = $scadenze_anagrafica->first()->anagrafica;
echo '
diff --git a/plugins/presentazioni_bancarie/src/Gestore.php b/plugins/presentazioni_bancarie/src/Gestore.php
index 2aaac2b6b..8f491e866 100644
--- a/plugins/presentazioni_bancarie/src/Gestore.php
+++ b/plugins/presentazioni_bancarie/src/Gestore.php
@@ -128,17 +128,19 @@ class Gestore
public function aggiungi(Scadenza $scadenza, int $identifier, string $descrizione, string $codice_sequenza = null)
{
$documento = $scadenza->documento;
- $controparte = $documento->anagrafica;
+ $controparte = $scadenza->anagrafica;
$banca_controparte = self::getBancaControparte($scadenza);
if (empty($banca_controparte)) {
return false;
}
+ $ctgypurp = $this->getTipo($scadenza)['ctgypurp'] ?: 'SUPP';
$pagamento = $documento->pagamento;
$direzione = $documento->direzione;
+ $importo = $scadenza->da_pagare - $scadenza->pagato;
$totale = (abs($scadenza->da_pagare) - abs($scadenza->pagato));
- $is_credito_diretto = $direzione == 'uscita' && in_array($pagamento->codice_modalita_pagamento_fe, ['MP09', 'MP10', 'MP11', 'MP19', 'MP20', 'MP21']);
+ $is_credito_diretto = ($direzione == 'uscita' && in_array($pagamento->codice_modalita_pagamento_fe, ['MP05','MP09', 'MP10', 'MP11', 'MP19', 'MP20', 'MP21'])) || (empty($documento) && $importo < 0);
$is_debito_diretto = $direzione == 'entrata' && in_array($pagamento->codice_modalita_pagamento_fe, ['MP09', 'MP10', 'MP11', 'MP19', 'MP20', 'MP21']) && !empty($this->banca_azienda->creditor_id); // Mandato SEPA disponibile
$is_riba = $direzione == 'entrata' && in_array($pagamento->codice_modalita_pagamento_fe, ['MP12']) && !empty($this->banca_azienda->codice_sia);
@@ -149,7 +151,7 @@ class Gestore
}
if ($is_credito_diretto) {
- return $this->aggiungiCreditoDiretto($identifier, $controparte, $banca_controparte, $descrizione, $totale, $scadenza->scadenza);
+ return $this->aggiungiCreditoDiretto($identifier, $controparte, $banca_controparte, $descrizione, $totale, $scadenza->scadenza, $ctgypurp);
} elseif ($is_debito_diretto) {
return $this->aggiungiDebitoDiretto($identifier, $controparte, $banca_controparte, $descrizione, $totale, $scadenza->scadenza, $method, $codice_sequenza);
} elseif ($is_riba) {
@@ -213,27 +215,29 @@ class Gestore
return true;
}
- public function aggiungiCreditoDiretto(int $identifier, Anagrafica $controparte, Banca $banca_controparte, string $descrizione, $totale, DateTime $data_prevista)
+ public function aggiungiCreditoDiretto(int $identifier, Anagrafica $controparte, Banca $banca_controparte, string $descrizione, $totale, DateTime $data_prevista, $ctgypurp)
{
$id = 'pagamento_'.$identifier;
// Esportazione del pagamento
- $this->credito_diretto->addPaymentInfo($id, [
+ $payment = $this->credito_diretto->addPaymentInfo($id, [
'id' => $identifier,
- 'dueDate' => $data_prevista->format('dmy'),
+ 'dueDate' => $data_prevista->format('Y-m-d'),
'debtorName' => $this->azienda->ragione_sociale,
'debtorAccountIBAN' => $this->banca_azienda->iban,
'debtorAgentBIC' => $this->banca_azienda->bic,
]);
$this->credito_diretto->addTransfer($id, [
- 'amount' => $totale,
+ 'amount' => $totale*100,
'creditorIban' => $banca_controparte->iban,
'creditorBic' => $banca_controparte->bic,
'creditorName' => $controparte->ragione_sociale,
'remittanceInformation' => $descrizione,
]);
+ $payment->setCategoryPurposeCode($ctgypurp);
+
return true;
}
@@ -255,7 +259,7 @@ class Gestore
// Add a Single Transaction to the named payment
$mandato = $this->getMandato($banca_controparte);
$this->debito_diretto->addTransfer($id, [
- 'amount' => $totale,
+ 'amount' => $totale*100,
'debtorName' => $controparte->ragione_sociale,
'debtorIban' => $banca_controparte->iban,
'debtorBic' => $banca_controparte->bic,
@@ -305,11 +309,10 @@ class Gestore
public static function getBancaControparte(Scadenza $scadenza): ?Banca
{
$documento = $scadenza->documento;
- $anagrafica = $documento->anagrafica;
$banca_controparte = $documento->id_banca_controparte ? Banca::find($documento->id_banca_controparte) : null;
if (empty($banca_controparte)) {
- $banca_controparte = Banca::where('id_anagrafica', $anagrafica->id)
+ $banca_controparte = Banca::where('id_anagrafica', $scadenza->idanagrafica)
->where('predefined', 1)
->first();
}
@@ -419,4 +422,9 @@ class Gestore
return [];
}
}
+
+ protected function getTipo(Scadenza $scadenza)
+ {
+ return database()->fetchOne('SELECT * FROM co_tipi_scadenze WHERE nome = '.prepare($scadenza->tipo));
+ }
}
diff --git a/update/2_4_36.php b/update/2_4_36.php
new file mode 100644
index 000000000..c5db43ee6
--- /dev/null
+++ b/update/2_4_36.php
@@ -0,0 +1,12 @@
+fetchArray('SELECT * FROM co_scadenziario');
+
+foreach ($scadenze as $scadenza) {
+ $idanagrafica = $dbo->selectOne('co_documenti', 'idanagrafica', ['id' => $scadenza['iddocumento']])['idanagrafica'];
+ $dbo->update('co_scadenziario', [
+ 'idanagrafica' => $idanagrafica ?: setting('Azienda predefinita'),
+ ], ['id' => $scadenza['id']]);
+}
+
+?>
\ No newline at end of file
diff --git a/update/2_4_36.sql b/update/2_4_36.sql
index 4edccd024..dec7c1030 100644
--- a/update/2_4_36.sql
+++ b/update/2_4_36.sql
@@ -4,4 +4,18 @@ ALTER TABLE `in_interventi` ADD CONSTRAINT `in_interventi_ibfk_3` FOREIGN KEY (`
ALTER TABLE `in_interventi` DROP FOREIGN KEY `in_interventi_ibfk_4`;
ALTER TABLE `in_interventi` ADD CONSTRAINT `in_interventi_ibfk_4` FOREIGN KEY (`id_contratto`) REFERENCES `co_contratti`(`id`) ON DELETE SET NULL ON UPDATE RESTRICT;
ALTER TABLE `in_interventi` DROP FOREIGN KEY `in_interventi_ibfk_7`;
-ALTER TABLE `in_interventi` ADD CONSTRAINT `in_interventi_ibfk_7` FOREIGN KEY (`id_ordine`) REFERENCES `or_ordini`(`id`) ON DELETE SET NULL ON UPDATE RESTRICT;
\ No newline at end of file
+ALTER TABLE `in_interventi` ADD CONSTRAINT `in_interventi_ibfk_7` FOREIGN KEY (`id_ordine`) REFERENCES `or_ordini`(`id`) ON DELETE SET NULL ON UPDATE RESTRICT;
+
+-- Aggiunta anagrafica alle scadenze
+ALTER TABLE `co_scadenziario` ADD `idanagrafica` INT NOT NULL AFTER `iddocumento`;
+
+-- Aggiunto campo ctgypurp per esportazione xml bonifici
+ALTER TABLE `co_tipi_scadenze` ADD `ctgypurp` VARCHAR(255) NOT NULL AFTER `descrizione`;
+
+UPDATE `co_tipi_scadenze` SET `ctgypurp` = 'TAXS' WHERE `co_tipi_scadenze`.`nome` = 'f24';
+UPDATE `co_tipi_scadenze` SET `ctgypurp` = 'SUPP' WHERE `co_tipi_scadenze`.`nome` = 'generico';
+INSERT INTO `co_tipi_scadenze` (`id`, `nome`, `descrizione`, `ctgypurp`, `can_delete`) VALUES (NULL, 'stipendio', 'Stipendi', 'SALA', '1');
+
+UPDATE `zz_views` SET `query` = 'an_anagrafiche.ragione_sociale' WHERE `zz_views`.`name` = 'Anagrafica' AND `id_module`=(SELECT `id` FROM `zz_modules` WHERE `name`='Scadenzario');
+
+UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `co_scadenziario`\nLEFT JOIN `co_documenti` ON `co_scadenziario`.`iddocumento` = `co_documenti`.`id`\nLEFT JOIN `an_anagrafiche` ON `co_scadenziario`.`idanagrafica` = `an_anagrafiche`.`idanagrafica`\nLEFT JOIN `co_pagamenti` ON `co_documenti`.`idpagamento` = `co_pagamenti`.`id`\nLEFT JOIN `co_tipidocumento` ON `co_documenti`.`idtipodocumento` = `co_tipidocumento`.`id`\nLEFT JOIN `co_statidocumento` ON `co_documenti`.`idstatodocumento` = `co_statidocumento`.`id`\nLEFT JOIN (\n SELECT `zz_operations`.`id_email`, `zz_operations`.`id_record`\n FROM `zz_operations`\n INNER JOIN `em_emails` ON `zz_operations`.`id_email` = `em_emails`.`id`\n INNER JOIN `em_templates` ON `em_emails`.`id_template` = `em_templates`.`id`\n INNER JOIN `zz_modules` ON `zz_operations`.`id_module` = `zz_modules`.`id`\n WHERE `zz_modules`.`name` = \'Scadenzario\' AND `zz_operations`.`op` = \'send-email\'\n GROUP BY `zz_operations`.`id_record`\n ) AS `email` ON `email`.`id_record` = `co_scadenziario`.`id`\nWHERE 1=1 AND\n(`co_statidocumento`.`descrizione` IS NULL OR `co_statidocumento`.`descrizione` IN(\'Emessa\',\'Parzialmente pagato\',\'Pagato\'))\nHAVING 2=2\nORDER BY `scadenza` ASC' WHERE `zz_modules`.`name` = 'Scadenzario';
\ No newline at end of file