fixes
Build And Push Image / docker (push) Successful in 1m34s
Details
Build And Push Image / docker (push) Successful in 1m34s
Details
This commit is contained in:
parent
c6edd6d25d
commit
4b78080f53
|
|
@ -217,6 +217,11 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import type { Member } from '~/utils/types';
|
import type { Member } from '~/utils/types';
|
||||||
import { getCountryName } from '~/utils/countries';
|
import { getCountryName } from '~/utils/countries';
|
||||||
|
import {
|
||||||
|
isPaymentOverOneYear as checkPaymentOverOneYear,
|
||||||
|
isDuesActuallyCurrent as checkDuesActuallyCurrent,
|
||||||
|
calculateOverdueDays
|
||||||
|
} from '~/utils/dues-calculations';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
member: Member;
|
member: Member;
|
||||||
|
|
@ -308,36 +313,18 @@ const isInGracePeriod = computed(() => {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if a member's last payment is over 1 year old
|
* Check if a member's last payment is over 1 year old
|
||||||
* Uses the same logic as dues-status API
|
* Uses standardized dues calculation function
|
||||||
*/
|
*/
|
||||||
const isPaymentOverOneYear = computed(() => {
|
const isPaymentOverOneYear = computed(() => {
|
||||||
if (!props.member.membership_date_paid) return false;
|
return checkPaymentOverOneYear(props.member);
|
||||||
|
|
||||||
try {
|
|
||||||
const lastPaidDate = new Date(props.member.membership_date_paid);
|
|
||||||
const oneYearFromPayment = new Date(lastPaidDate);
|
|
||||||
oneYearFromPayment.setFullYear(oneYearFromPayment.getFullYear() + 1);
|
|
||||||
const today = new Date();
|
|
||||||
|
|
||||||
return today > oneYearFromPayment;
|
|
||||||
} catch {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if dues are actually current
|
* Check if dues are actually current
|
||||||
* Uses the same logic as dues-status API
|
* Uses standardized dues calculation function
|
||||||
*/
|
*/
|
||||||
const isDuesActuallyCurrent = computed(() => {
|
const isDuesActuallyCurrent = computed(() => {
|
||||||
const paymentTooOld = isPaymentOverOneYear.value;
|
return checkDuesActuallyCurrent(props.member);
|
||||||
const duesCurrentlyPaid = props.member.current_year_dues_paid === 'true';
|
|
||||||
const gracePeriod = isInGracePeriod.value;
|
|
||||||
|
|
||||||
// Member is NOT overdue if they're in grace period OR (dues paid AND payment not too old)
|
|
||||||
const isOverdue = paymentTooOld || (!duesCurrentlyPaid && !gracePeriod);
|
|
||||||
|
|
||||||
return !isOverdue;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const duesColor = computed(() => {
|
const duesColor = computed(() => {
|
||||||
|
|
|
||||||
|
|
@ -39,24 +39,15 @@ export default defineEventHandler(async (event) => {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the highest existing member ID number to continue sequence
|
// Use the same generation method as new members to maintain consistency
|
||||||
const existingMemberIds = allMembers
|
// Generate unique 6-digit member IDs for consistency with existing format
|
||||||
.filter((member: Member) => member.member_id)
|
|
||||||
.map((member: Member) => extractMemberIDNumber(member.member_id!))
|
|
||||||
.filter(num => num !== null) as number[];
|
|
||||||
|
|
||||||
// Start from next available number, or 1 if no existing IDs
|
|
||||||
let nextIdNumber = existingMemberIds.length > 0 ? Math.max(...existingMemberIds) + 1 : 1;
|
|
||||||
console.log(`[api/admin/assign-member-ids.post] Starting with member ID number: ${nextIdNumber}`);
|
|
||||||
|
|
||||||
// Assign IDs to members without them
|
|
||||||
const updatedMembers = [];
|
const updatedMembers = [];
|
||||||
|
|
||||||
for (const member of membersWithoutIds) {
|
for (const member of membersWithoutIds) {
|
||||||
// Use 4-digit padding for member IDs (MUSA-0001, MUSA-0002, etc.)
|
|
||||||
const memberId = `MUSA-${nextIdNumber.toString().padStart(4, '0')}`;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
// Use the same generateMemberID function to ensure consistency
|
||||||
|
const memberId = await generateMemberID();
|
||||||
|
|
||||||
await updateMember(member.Id, {
|
await updateMember(member.Id, {
|
||||||
member_id: memberId
|
member_id: memberId
|
||||||
});
|
});
|
||||||
|
|
@ -69,7 +60,6 @@ export default defineEventHandler(async (event) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log(`[api/admin/assign-member-ids.post] Assigned ${memberId} to ${member.first_name} ${member.last_name}`);
|
console.log(`[api/admin/assign-member-ids.post] Assigned ${memberId} to ${member.first_name} ${member.last_name}`);
|
||||||
nextIdNumber++;
|
|
||||||
|
|
||||||
} catch (updateError: any) {
|
} catch (updateError: any) {
|
||||||
console.error(`[api/admin/assign-member-ids.post] Failed to assign ID to member ${member.Id}:`, updateError);
|
console.error(`[api/admin/assign-member-ids.post] Failed to assign ID to member ${member.Id}:`, updateError);
|
||||||
|
|
@ -86,8 +76,8 @@ export default defineEventHandler(async (event) => {
|
||||||
totalMembers: allMembers.length,
|
totalMembers: allMembers.length,
|
||||||
membersUpdated: updatedMembers.length,
|
membersUpdated: updatedMembers.length,
|
||||||
updatedMembers: updatedMembers.slice(0, 10), // Return first 10 for display
|
updatedMembers: updatedMembers.slice(0, 10), // Return first 10 for display
|
||||||
startingId: updatedMembers.length > 0 ? `MUSA-${(nextIdNumber - updatedMembers.length).toString().padStart(4, '0')}` : null,
|
firstAssignedId: updatedMembers.length > 0 ? updatedMembers[0].memberId : null,
|
||||||
endingId: updatedMembers.length > 0 ? updatedMembers[updatedMembers.length - 1].memberId : null
|
lastAssignedId: updatedMembers.length > 0 ? updatedMembers[updatedMembers.length - 1].memberId : null
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue