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"> <div class="col-md-2">
<br> <br>
<div class="btn-group"> <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"> <a type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="caret"></span> <span class="caret"></span>
<span class="sr-only">Toggle Dropdown</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>'; <tbody>';
foreach ($righe as $riga) { foreach ($righe as $riga) {
renderRiga($counter++, $riga); renderRiga($counter++, $riga, $totale_dare, $totale_avere);
} }
// Totale per controllare sbilancio // Totale per controllare sbilancio
@ -169,7 +169,9 @@ renderRiga('-id-',
[ [
'iddocumento' => '-id_documento-', 'iddocumento' => '-id_documento-',
'id_scadenza' => '-id_scadenza-', 'id_scadenza' => '-id_scadenza-',
] ],
$totale_dare,
$totale_avere
); );
echo ' echo '
@ -224,7 +226,7 @@ function controllaConti() {
// Blocco degli input con valore non impostato // Blocco degli input con valore non impostato
$("input[id*=dare], input[id*=avere]").each(function() { $("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) { if (!conto_relativo) {
$(this).prop("disabled", true); $(this).prop("disabled", true);

View File

@ -22,6 +22,7 @@ namespace Modules\PrimaNota;
use Common\SimpleModelTrait; use Common\SimpleModelTrait;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Modules\Fatture\Fattura; 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. * 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; $movimenti = $movimenti ?: $this->movimenti;
// Aggiornamento delle scadenze per i singoli documenti // Aggiornamento delle scadenze per i singoli documenti
$documenti = []; $documenti = $this->getUniqueDocumenti($movimenti);
$scadenze = []; $scadenze = $this->getScadenzePerDocumenti($movimenti, $documenti);
foreach ($movimenti as $movimento) { foreach ($movimenti as $movimento) {
$scadenza = $movimento->scadenza; $this->correggiScadenza($movimento, $scadenze[$movimento->iddocumento], $movimento->iddocumento);
$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);
}
}
} }
// Fix dello stato della Fattura // Fix dello stato della Fattura
@ -157,10 +138,37 @@ class Mastrino extends Model
$stato = 'Emessa'; $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 // Relazioni Eloquent
public function fattura() public function fattura()
@ -185,31 +193,29 @@ class Mastrino extends Model
/** /**
* Funzione dedicata alla distribuzione del totale pagato del movimento nelle relative scadenze associate. * 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; $is_nota = false;
$documento = $documento ?: $scadenza->documento;
if ($scadenza && empty($documento)) { if ($scadenze) {
$scadenze = [$scadenza]; if (empty($documento)) {
$dir = $movimento->totale < 0 ? 'uscita' : 'entrata'; $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;
->where('totale', '>', 0) foreach ($scadenze as $scadenza) {
->sum('totale'); $totale_da_distribuire += Movimento::where('id_scadenza', '=', $scadenza->id)
} elseif ($scadenza) {
$scadenze = [$scadenza];
$dir = $documento->direzione;
$totale_da_distribuire = Movimento::where('id_scadenza', '=', $scadenza->id)
->where('totale', '>', 0) ->where('totale', '>', 0)
->sum('totale'); ->sum('totale');
} }
}
// Gestione delle scadenze di un documento // Gestione delle scadenze di un documento
elseif ($documento) { elseif ($documento) {
$dir = $documento->direzione; $dir = $documento->direzione;
$scadenze = $documento->scadenze->sortBy('scadenza'); $scadenze = $documento->scadenze->sortBy('scadenza')->all();
$movimenti = $documento->movimentiContabili; $movimenti = $documento->movimentiContabili;
@ -233,7 +239,8 @@ class Mastrino extends Model
// Nel caso il pagamento superi la rata, devo distribuirlo sulle rate successive // Nel caso il pagamento superi la rata, devo distribuirlo sulle rate successive
foreach ($scadenze as $scadenza) { 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 // Nel caso in cui il totale da distribuire sia stato esaurito, imposta il pagato a zero
if ($totale_da_distribuire <= 0) { if ($totale_da_distribuire <= 0) {