Fix registrazione scadenze da bulk

This commit is contained in:
Pek5892 2024-05-27 16:02:12 +02:00
parent 3573737eb9
commit 50e0e95e2a
3 changed files with 55 additions and 46 deletions

View File

@ -41,7 +41,7 @@ if (sizeof($rs_doc) > 0) {
<div class="col-md-2">
<br>
<div class="btn-group">
<a href="<?php echo base_path(); ?>/editor.php?id_module=<?php echo (new Module())->getByField('title', 'Preventivi', Models\Locale::getPredefined()->id); ?>&id_record=<?php echo $rs_doc[0]['iddocumento']; ?>" class="btn btn-info"><i class="fa fa-chevron-left"></i> <?php echo tr('Vai alla fattura'); ?></a>
<a href="<?php echo base_path(); ?>/editor.php?id_module=<?php echo (new Module())->getByField('title', 'Fatture di vendita', Models\Locale::getPredefined()->id); ?>&id_record=<?php echo $rs_doc[0]['iddocumento']; ?>" class="btn btn-info"><i class="fa fa-chevron-left"></i> <?php echo tr('Vai alla fattura'); ?></a>
<a type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="caret"></span>
<span class="sr-only">Toggle Dropdown</span>

View File

@ -78,7 +78,7 @@ function renderTabella($nome, $righe, $totale_dare = null, $totale_avere = null)
<tbody>';
foreach ($righe as $riga) {
renderRiga($counter++, $riga);
renderRiga($counter++, $riga, $totale_dare, $totale_avere);
}
// Totale per controllare sbilancio
@ -169,7 +169,9 @@ renderRiga('-id-',
[
'iddocumento' => '-id_documento-',
'id_scadenza' => '-id_scadenza-',
]
],
$totale_dare,
$totale_avere
);
echo '
@ -224,7 +226,7 @@ function controllaConti() {
// Blocco degli input con valore non impostato
$("input[id*=dare], input[id*=avere]").each(function() {
let conto_relativo = $(this).parent().parent().parent().find("select").val();
let conto_relativo = $(this).parent().parent().parent().parent().find("select").val();
if (!conto_relativo) {
$(this).prop("disabled", true);

View File

@ -22,6 +22,7 @@ namespace Modules\PrimaNota;
use Common\SimpleModelTrait;
use Illuminate\Database\Eloquent\Model;
use Modules\Fatture\Fattura;
use Modules\Fatture\Stato;
/*
* Struttura ausiliaria dedicata alla raggruppamento e alla gestione di un insieme di Movimenti, unificati attraverso il numero di mastrino.
*
@ -112,31 +113,11 @@ class Mastrino extends Model
$movimenti = $movimenti ?: $this->movimenti;
// Aggiornamento delle scadenze per i singoli documenti
$documenti = [];
$scadenze = [];
$documenti = $this->getUniqueDocumenti($movimenti);
$scadenze = $this->getScadenzePerDocumenti($movimenti, $documenti);
foreach ($movimenti as $movimento) {
$scadenza = $movimento->scadenza;
$documento = $movimento->documento;
// Retrocompatibilità per versioni <= 2.4.11
if (!empty($documento)) {
if (!in_array($documento->id, $documenti)) {
$documenti[] = $documento->id;
$this->correggiScadenza($movimento, $scadenza, $documento);
}
} elseif (!empty($scadenza)) {
$id_documento = $scadenza->documento->id;
if (!in_array($id_documento, $documenti) && !in_array($scadenza->id, $scadenze)) {
if (!empty($id_documento)) {
$documenti[] = $id_documento;
}
$scadenze[] = $scadenza->id;
$this->correggiScadenza($movimento, $scadenza);
}
}
$this->correggiScadenza($movimento, $scadenze[$movimento->iddocumento], $movimento->iddocumento);
}
// Fix dello stato della Fattura
@ -157,10 +138,37 @@ class Mastrino extends Model
$stato = 'Emessa';
}
$database->query('UPDATE `co_documenti` SET `idstatodocumento` = (SELECT `co_statidocumento`.`id` FROM `co_statidocumento` LEFT JOIN `co_statidocumento_lang` ON (`co_statidocumento`.`id` = `co_statidocumento_lang`.`id_record` AND `co_statidocumento_lang`.`id_lang` = '.prepare(\Models\Locale::getDefault()->id).') WHERE `title` = '.prepare($stato).') WHERE id = '.prepare($id_documento));
$documento = Fattura::find($id_documento);
$stato = (new Stato())->getByField('title', $stato, \Models\Locale::getPredefined()->id);
$documento->stato()->associate($stato);
$documento->save();
}
}
private function getUniqueDocumenti($movimenti)
{
$documentIds = [];
foreach ($movimenti as $movimento) {
if (!in_array($movimento->iddocumento, $documentIds)) {
$documentIds[] = $movimento->documento->id;
}
}
return $documentIds;
}
private function getScadenzePerDocumenti($movimenti, $documenti)
{
$scadenze = [];
foreach ($movimenti as $movimento) {
if (in_array($movimento->iddocumento, $documenti)) {
if (!in_array($movimento->id_scadenza, $scadenze[$movimento->iddocumento] ?? [])) {
$scadenze[$movimento->iddocumento][] = $movimento->id_scadenza;
}
}
}
return $scadenze;
}
// Relazioni Eloquent
public function fattura()
@ -185,31 +193,29 @@ class Mastrino extends Model
/**
* Funzione dedicata alla distribuzione del totale pagato del movimento nelle relative scadenze associate.
*/
protected function correggiScadenza(Movimento $movimento, ?Scadenza $scadenza = null, ?Fattura $documento = null)
protected function correggiScadenza(Movimento $movimento, $scadenze = null, $documento = null)
{
$is_nota = false;
$documento = $documento ?: $scadenza->documento;
if ($scadenza && empty($documento)) {
$scadenze = [$scadenza];
$dir = $movimento->totale < 0 ? 'uscita' : 'entrata';
if ($scadenze) {
if (empty($documento)) {
$dir = $movimento->totale < 0 ? 'uscita' : 'entrata';
} else {
$dir = Fattura::find($documento)->direzione;
}
$totale_da_distribuire = Movimento::where('id_scadenza', '=', $scadenza->id)
$totale_da_distribuire = 0;
foreach ($scadenze as $scadenza) {
$totale_da_distribuire += Movimento::where('id_scadenza', '=', $scadenza->id)
->where('totale', '>', 0)
->sum('totale');
} elseif ($scadenza) {
$scadenze = [$scadenza];
$dir = $documento->direzione;
$totale_da_distribuire = Movimento::where('id_scadenza', '=', $scadenza->id)
->where('totale', '>', 0)
->sum('totale');
}
}
}
// Gestione delle scadenze di un documento
elseif ($documento) {
$dir = $documento->direzione;
$scadenze = $documento->scadenze->sortBy('scadenza');
$scadenze = $documento->scadenze->sortBy('scadenza')->all();
$movimenti = $documento->movimentiContabili;
@ -233,7 +239,8 @@ class Mastrino extends Model
// Nel caso il pagamento superi la rata, devo distribuirlo sulle rate successive
foreach ($scadenze as $scadenza) {
$scadenza_da_pagare = abs($scadenza['da_pagare']);
$scadenza = Scadenza::find($scadenza);
$scadenza_da_pagare = abs($scadenza->da_pagare);
// Nel caso in cui il totale da distribuire sia stato esaurito, imposta il pagato a zero
if ($totale_da_distribuire <= 0) {