fix
This commit is contained in:
@@ -87,14 +87,22 @@ function isPartiallyPaid(inv) {
|
||||
return !inv.paid_date && amountPaid > 0 && balance > 0;
|
||||
}
|
||||
|
||||
function getLastSentDate(inv) {
|
||||
const sentDates = Array.isArray(inv.sent_dates) ? inv.sent_dates.filter(Boolean) : [];
|
||||
function getFirstSentDate(inv) {
|
||||
const sentDates = Array.isArray(inv.sent_dates)
|
||||
? inv.sent_dates.filter(Boolean)
|
||||
: [];
|
||||
|
||||
if (sentDates.length > 0) {
|
||||
return sentDates[sentDates.length - 1];
|
||||
if (sentDates.length === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return null;
|
||||
// Sicherheit: nicht auf Array-Reihenfolge verlassen,
|
||||
// sondern wirklich das früheste Versanddatum nehmen.
|
||||
const sortedDates = sentDates
|
||||
.map(d => String(d).split('T')[0])
|
||||
.sort();
|
||||
|
||||
return sortedDates[0];
|
||||
}
|
||||
|
||||
function getTermDays(inv) {
|
||||
@@ -132,22 +140,18 @@ function isBeforeToday(dateObj) {
|
||||
|
||||
return compare < today;
|
||||
}
|
||||
|
||||
function getEffectiveDueDate(inv) {
|
||||
const lastSentDate = getLastSentDate(inv);
|
||||
const firstSentDate = getFirstSentDate(inv);
|
||||
|
||||
// Wichtig: Nie versendete Rechnungen können nicht overdue sein.
|
||||
if (!lastSentDate) {
|
||||
// Nie versendet = nicht overdue
|
||||
if (!firstSentDate) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Wenn due_date vorhanden ist, darf es genutzt werden,
|
||||
// aber nur nachdem die Rechnung tatsächlich gesendet wurde.
|
||||
if (inv.due_date) {
|
||||
return parseLocalDate(inv.due_date);
|
||||
}
|
||||
|
||||
return addDays(lastSentDate, getTermDays(inv));
|
||||
// WICHTIG:
|
||||
// Für Overdue zählt der erste tatsächliche Versand.
|
||||
// Bei Net 30 also first_sent_date + 30 Tage.
|
||||
return addDays(firstSentDate, getTermDays(inv));
|
||||
}
|
||||
|
||||
function getOverdueDays(inv) {
|
||||
@@ -166,7 +170,7 @@ function isOverdue(inv) {
|
||||
return !!inv.qbo_id
|
||||
&& !isPaid(inv)
|
||||
&& !isPartiallyPaid(inv)
|
||||
&& !!getLastSentDate(inv)
|
||||
&& !!getFirstSentDate(inv)
|
||||
&& isBeforeToday(getEffectiveDueDate(inv));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user