Aggiunta anagrafica nelle scadenze e migliorie creazione file xml
This commit is contained in:
parent
731039c9a9
commit
5976e096f5
|
@ -59,7 +59,7 @@
|
|||
"symfony/var-dumper": "^3.3",
|
||||
"thenetworg/oauth2-azure": "^2.0",
|
||||
"willdurand/geocoder": "^4.2",
|
||||
"digitick/sepa-xml": "^1.6",
|
||||
"digitick/sepa-xml": "^2.1",
|
||||
"wdog/sdd_ita": "dev-master"
|
||||
},
|
||||
"require-dev": {
|
||||
|
|
|
@ -101,8 +101,9 @@ class Scadenze
|
|||
{
|
||||
$numero = $fattura->numero_esterno ?: $fattura->numero;
|
||||
$descrizione = $fattura->tipo->descrizione.' numero '.$numero;
|
||||
$idanagrafica = $fattura->idanagrafica;
|
||||
|
||||
$scadenza = Scadenza::build($descrizione, $importo, $data_scadenza, $type, $is_pagato);
|
||||
$scadenza = Scadenza::build($idanagrafica, $descrizione, $importo, $data_scadenza, $type, $is_pagato);
|
||||
|
||||
$scadenza->documento()->associate($fattura);
|
||||
$scadenza->data_emissione = $fattura->data;
|
||||
|
|
|
@ -21,12 +21,13 @@ include_once __DIR__.'/../../core.php';
|
|||
|
||||
switch (post('op')) {
|
||||
case 'add':
|
||||
$idanagrafica = post('idanagrafica');
|
||||
$data = post('data');
|
||||
$tipo = post('tipo');
|
||||
$da_pagare = post('da_pagare');
|
||||
$descrizione = post('descrizione');
|
||||
|
||||
$dbo->query('INSERT INTO co_scadenziario(descrizione, tipo, data_emissione, scadenza, da_pagare, pagato) VALUES('.prepare($descrizione).', '.prepare($tipo).', CURDATE(), '.prepare($data).', '.prepare($da_pagare).", '0')");
|
||||
$dbo->query('INSERT INTO co_scadenziario(idanagrafica, descrizione, tipo, data_emissione, scadenza, da_pagare, pagato) VALUES('.prepare($idanagrafica).', '.prepare($descrizione).', '.prepare($tipo).', CURDATE(), '.prepare($data).', '.prepare($da_pagare).", '0')");
|
||||
$id_record = $dbo->lastInsertedID();
|
||||
|
||||
flash()->info(tr('Scadenza inserita!'));
|
||||
|
|
|
@ -28,15 +28,19 @@ include_once __DIR__.'/../../core.php';
|
|||
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "<?php echo tr('Tipo'); ?>", "name": "tipo", "required": 1, "ajax-source": "tipi_scadenze", "icon-after": "add|<?php echo Modules::get('Tipi scadenze')['id']; ?>" ]}
|
||||
{[ "type": "select", "label": "<?php echo tr('Anagrafica'); ?>", "name": "idanagrafica", "required": 1, "ajax-source": "anagrafiche" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "date", "label": "<?php echo tr('Data scadenza'); ?>", "name": "data", "required": 1, "value": "-now-" ]}
|
||||
{[ "type": "select", "label": "<?php echo tr('Tipo'); ?>", "name": "tipo", "required": 1, "ajax-source": "tipi_scadenze", "icon-after": "add|<?php echo Modules::get('Tipi scadenze')['id']; ?>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "number", "label": "<?php echo tr('Importo'); ?>", "name": "da_pagare", "required": 1, "value": "", "help": "Le scadenze inserite con importo positivo indicano un credito da un cliente, le scadenze inserite con importo negativo indicano un debito verso un fornitore" ]}
|
||||
<div class="col-md-2">
|
||||
{[ "type": "date", "label": "<?php echo tr('Data scadenza'); ?>", "name": "data", "required": 1, "value": "-now-" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-2">
|
||||
{[ "type": "number", "label": "<?php echo tr('Importo'); ?>", "name": "da_pagare", "required": 1, "value": "", "help": "Le scadenze inserite con importo positivo indicano un credito da un cliente, le scadenze inserite con importo negativo indicano un debito verso un fornitore" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -46,18 +46,16 @@ echo '
|
|||
<div class="row">
|
||||
|
||||
<!-- Info scadenza -->
|
||||
<div class="col-md-6">';
|
||||
|
||||
if (!empty($documento)) {
|
||||
echo '
|
||||
<div class="col-md-6">
|
||||
<table class="table table-striped table-hover table-condensed table-bordered">
|
||||
<tr>
|
||||
<th width="120">'.($dir == 'entrata' ? tr('Cliente') : tr('Fornitore')).':</th>
|
||||
<th width="125">'.($dir == 'entrata' ? tr('Cliente') : ($dir == 'uscita' ? tr('Fornitore') : tr('Anagrafica'))).':</th>
|
||||
<td>
|
||||
'.Modules::link('Anagrafiche', $documento->anagrafica->id, $documento->anagrafica->ragione_sociale).'
|
||||
'.Modules::link('Anagrafiche', $record['idanagrafica'], $record['ragione_sociale']).'
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</tr>';
|
||||
if (!empty($documento)) {
|
||||
echo '
|
||||
<tr>
|
||||
<th>'.tr('Documento').':</th>
|
||||
<td>'.$documento->tipo->descrizione.'</td>
|
||||
|
@ -76,8 +74,20 @@ if (!empty($documento)) {
|
|||
<tr>
|
||||
<th>'.tr('Netto a pagare').':</th>
|
||||
<td>'.moneyFormat($documento->netto).'</td>
|
||||
</tr>
|
||||
</tr>';
|
||||
} else {
|
||||
|
||||
$scadenza = $dbo->fetchOne('SELECT * FROM co_scadenziario WHERE id = '.prepare($id_record));
|
||||
echo '
|
||||
<tr>
|
||||
<th>'.tr('Descrizione').':</th>
|
||||
<td>
|
||||
{[ "type": "textarea", "name": "descrizione", "value": "'.$record['descrizione'].'" ]}
|
||||
</td>
|
||||
</tr>';
|
||||
}
|
||||
|
||||
echo '
|
||||
<tr>
|
||||
<th>'.tr('Note').':</th>
|
||||
<td>
|
||||
|
@ -99,31 +109,12 @@ if (!empty($documento)) {
|
|||
}else{
|
||||
$export_riba = '<i class="fa fa-clock-o text-warning"></i> '.tr('Non ancora esportata');
|
||||
}
|
||||
|
||||
echo '
|
||||
|
||||
</table>
|
||||
|
||||
'.Modules::link($documento->module, $record['iddocumento'], '<i class="fa fa-folder-open"></i> '.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 '
|
||||
</table>';
|
||||
|
||||
if (!empty($documento)) {
|
||||
echo Modules::link($documento->module, $record['iddocumento'], '<i class="fa fa-folder-open"></i> '.tr('Apri documento'), null, 'class="btn btn-primary"');
|
||||
}
|
||||
echo '
|
||||
</div>
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 '
|
||||
<p>'.tr('Nessun pagamento disponibile secondo la selezione effettuata').'.</p>';
|
||||
|
@ -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 '
|
||||
<h3>
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
$scadenze = $dbo->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']]);
|
||||
}
|
||||
|
||||
?>
|
|
@ -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;
|
||||
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';
|
Loading…
Reference in New Issue