fixes
Build And Push Image / docker (push) Successful in 3m9s Details

This commit is contained in:
Matt 2025-08-07 22:01:02 +02:00
parent d36209818a
commit 13fa95a9a2
2 changed files with 61 additions and 61 deletions

View File

@ -12,7 +12,7 @@
size="small" size="small"
variant="flat" variant="flat"
> >
{{ member['Membership Status'] }} {{ member.membership_status }}
</v-chip> </v-chip>
</div> </div>
@ -31,18 +31,18 @@
<div class="flex-grow-1"> <div class="flex-grow-1">
<h3 class="text-h6 font-weight-bold mb-1"> <h3 class="text-h6 font-weight-bold mb-1">
{{ member.FullName || `${member['First Name']} ${member['Last Name']}` }} {{ member.FullName || `${member.first_name} ${member.last_name}` }}
</h3> </h3>
<div class="d-flex align-center"> <div class="d-flex align-center">
<CountryFlag <CountryFlag
v-if="member.Nationality" v-if="member.nationality"
:country-code="member.Nationality" :country-code="member.nationality"
:show-name="false" :show-name="false"
size="small" size="small"
class="mr-2" class="mr-2"
/> />
<span class="text-body-2 text-medium-emphasis"> <span class="text-body-2 text-medium-emphasis">
{{ getCountryName(member.Nationality) || 'Unknown' }} {{ getCountryName(member.nationality) || 'Unknown' }}
</span> </span>
</div> </div>
</div> </div>
@ -52,17 +52,17 @@
<div class="member-info"> <div class="member-info">
<div class="info-row mb-2"> <div class="info-row mb-2">
<v-icon size="16" class="mr-2 text-medium-emphasis">mdi-email</v-icon> <v-icon size="16" class="mr-2 text-medium-emphasis">mdi-email</v-icon>
<span class="text-body-2">{{ member.Email || 'No email' }}</span> <span class="text-body-2">{{ member.email || 'No email' }}</span>
</div> </div>
<div class="info-row mb-2" v-if="member.Phone"> <div class="info-row mb-2" v-if="member.phone">
<v-icon size="16" class="mr-2 text-medium-emphasis">mdi-phone</v-icon> <v-icon size="16" class="mr-2 text-medium-emphasis">mdi-phone</v-icon>
<span class="text-body-2">{{ member.FormattedPhone || member.Phone }}</span> <span class="text-body-2">{{ member.FormattedPhone || member.phone }}</span>
</div> </div>
<div class="info-row mb-2" v-if="member['Member Since']"> <div class="info-row mb-2" v-if="member.member_since">
<v-icon size="16" class="mr-2 text-medium-emphasis">mdi-calendar</v-icon> <v-icon size="16" class="mr-2 text-medium-emphasis">mdi-calendar</v-icon>
<span class="text-body-2">Member since {{ formatDate(member['Member Since']) }}</span> <span class="text-body-2">Member since {{ formatDate(member.member_since) }}</span>
</div> </div>
</div> </div>
@ -79,14 +79,14 @@
</v-chip> </v-chip>
<v-chip <v-chip
v-if="member['Payment Due Date']" v-if="member.payment_due_date"
color="warning" color="warning"
variant="tonal" variant="tonal"
size="small" size="small"
:class="{ 'text-error': isOverdue }" :class="{ 'text-error': isOverdue }"
> >
<v-icon start size="14">mdi-calendar-alert</v-icon> <v-icon start size="14">mdi-calendar-alert</v-icon>
{{ isOverdue ? 'Overdue' : `Due ${formatDate(member['Payment Due Date'])}` }} {{ isOverdue ? 'Overdue' : `Due ${formatDate(member.payment_due_date)}` }}
</v-chip> </v-chip>
</div> </div>
</v-card-text> </v-card-text>
@ -149,8 +149,8 @@ defineEmits<Emits>();
// Computed properties // Computed properties
const memberInitials = computed(() => { const memberInitials = computed(() => {
const firstName = props.member['First Name'] || ''; const firstName = props.member.first_name || '';
const lastName = props.member['Last Name'] || ''; const lastName = props.member.last_name || '';
return `${firstName.charAt(0)}${lastName.charAt(0)}`.toUpperCase(); return `${firstName.charAt(0)}${lastName.charAt(0)}`.toUpperCase();
}); });
@ -162,11 +162,11 @@ const avatarColor = computed(() => {
}); });
const isActive = computed(() => { const isActive = computed(() => {
return props.member['Membership Status'] === 'Active'; return props.member.membership_status === 'Active';
}); });
const statusColor = computed(() => { const statusColor = computed(() => {
const status = props.member['Membership Status']; const status = props.member.membership_status;
switch (status) { switch (status) {
case 'Active': return 'success'; case 'Active': return 'success';
case 'Inactive': return 'grey'; case 'Inactive': return 'grey';
@ -177,26 +177,26 @@ const statusColor = computed(() => {
}); });
const duesColor = computed(() => { const duesColor = computed(() => {
return props.member['Current Year Dues Paid'] === 'true' ? 'success' : 'error'; return props.member.current_year_dues_paid === 'true' ? 'success' : 'error';
}); });
const duesVariant = computed(() => { const duesVariant = computed(() => {
return props.member['Current Year Dues Paid'] === 'true' ? 'tonal' : 'flat'; return props.member.current_year_dues_paid === 'true' ? 'tonal' : 'flat';
}); });
const duesIcon = computed(() => { const duesIcon = computed(() => {
return props.member['Current Year Dues Paid'] === 'true' ? 'mdi-check-circle' : 'mdi-alert-circle'; return props.member.current_year_dues_paid === 'true' ? 'mdi-check-circle' : 'mdi-alert-circle';
}); });
const duesText = computed(() => { const duesText = computed(() => {
return props.member['Current Year Dues Paid'] === 'true' ? 'Dues Paid' : 'Dues Outstanding'; return props.member.current_year_dues_paid === 'true' ? 'Dues Paid' : 'Dues Outstanding';
}); });
const isOverdue = computed(() => { const isOverdue = computed(() => {
if (!props.member['Payment Due Date']) return false; if (!props.member.payment_due_date) return false;
const dueDate = new Date(props.member['Payment Due Date']); const dueDate = new Date(props.member.payment_due_date);
const today = new Date(); const today = new Date();
return dueDate < today && props.member['Current Year Dues Paid'] !== 'true'; return dueDate < today && props.member.current_year_dues_paid !== 'true';
}); });
// Methods // Methods

View File

@ -21,18 +21,18 @@
<div class="flex-grow-1"> <div class="flex-grow-1">
<h2 class="text-h5 text-white font-weight-bold"> <h2 class="text-h5 text-white font-weight-bold">
{{ member.FullName || `${member['First Name']} ${member['Last Name']}` }} {{ member.FullName || `${member.first_name} ${member.last_name}` }}
</h2> </h2>
<div class="d-flex align-center mt-1"> <div class="d-flex align-center mt-1">
<CountryFlag <CountryFlag
v-if="member.Nationality" v-if="member.nationality"
:country-code="member.Nationality" :country-code="member.nationality"
:show-name="false" :show-name="false"
size="small" size="small"
class="mr-2" class="mr-2"
/> />
<span class="text-white text-body-2"> <span class="text-white text-body-2">
{{ getCountryName(member.Nationality) || 'Unknown Country' }} {{ getCountryName(member.nationality) || 'Unknown Country' }}
</span> </span>
</div> </div>
</div> </div>
@ -56,7 +56,7 @@
size="small" size="small"
> >
<v-icon start size="16">{{ statusIcon }}</v-icon> <v-icon start size="16">{{ statusIcon }}</v-icon>
{{ member['Membership Status'] }} {{ member.membership_status }}
</v-chip> </v-chip>
<v-chip <v-chip
@ -69,7 +69,7 @@
</v-chip> </v-chip>
<v-chip <v-chip
v-if="member['Payment Due Date']" v-if="member.payment_due_date"
:color="isOverdue ? 'error' : 'warning'" :color="isOverdue ? 'error' : 'warning'"
variant="tonal" variant="tonal"
size="small" size="small"
@ -88,41 +88,41 @@
<div class="info-group"> <div class="info-group">
<div class="info-item mb-3"> <div class="info-item mb-3">
<label class="text-body-2 font-weight-bold text-medium-emphasis">First Name</label> <label class="text-body-2 font-weight-bold text-medium-emphasis">First Name</label>
<p class="text-body-1 ma-0">{{ member['First Name'] || 'Not provided' }}</p> <p class="text-body-1 ma-0">{{ member.first_name || 'Not provided' }}</p>
</div> </div>
<div class="info-item mb-3"> <div class="info-item mb-3">
<label class="text-body-2 font-weight-bold text-medium-emphasis">Last Name</label> <label class="text-body-2 font-weight-bold text-medium-emphasis">Last Name</label>
<p class="text-body-1 ma-0">{{ member['Last Name'] || 'Not provided' }}</p> <p class="text-body-1 ma-0">{{ member.last_name || 'Not provided' }}</p>
</div> </div>
<div class="info-item mb-3"> <div class="info-item mb-3">
<label class="text-body-2 font-weight-bold text-medium-emphasis">Email</label> <label class="text-body-2 font-weight-bold text-medium-emphasis">Email</label>
<p class="text-body-1 ma-0"> <p class="text-body-1 ma-0">
<a v-if="member.Email" :href="`mailto:${member.Email}`" class="text-primary"> <a v-if="member.email" :href="`mailto:${member.email}`" class="text-primary">
{{ member.Email }} {{ member.email }}
</a> </a>
<span v-else>Not provided</span> <span v-else>Not provided</span>
</p> </p>
</div> </div>
<div class="info-item mb-3" v-if="member.Phone"> <div class="info-item mb-3" v-if="member.phone">
<label class="text-body-2 font-weight-bold text-medium-emphasis">Phone</label> <label class="text-body-2 font-weight-bold text-medium-emphasis">Phone</label>
<p class="text-body-1 ma-0"> <p class="text-body-1 ma-0">
<a :href="`tel:${member.Phone}`" class="text-primary"> <a :href="`tel:${member.phone}`" class="text-primary">
{{ member.FormattedPhone || member.Phone }} {{ member.FormattedPhone || member.phone }}
</a> </a>
</p> </p>
</div> </div>
<div class="info-item mb-3" v-if="member['Date of Birth']"> <div class="info-item mb-3" v-if="member.date_of_birth">
<label class="text-body-2 font-weight-bold text-medium-emphasis">Date of Birth</label> <label class="text-body-2 font-weight-bold text-medium-emphasis">Date of Birth</label>
<p class="text-body-1 ma-0">{{ formatDate(member['Date of Birth']) }}</p> <p class="text-body-1 ma-0">{{ formatDate(member.date_of_birth) }}</p>
</div> </div>
<div class="info-item mb-3" v-if="member.Address"> <div class="info-item mb-3" v-if="member.address">
<label class="text-body-2 font-weight-bold text-medium-emphasis">Address</label> <label class="text-body-2 font-weight-bold text-medium-emphasis">Address</label>
<p class="text-body-1 ma-0">{{ member.Address }}</p> <p class="text-body-1 ma-0">{{ member.address }}</p>
</div> </div>
</div> </div>
</v-col> </v-col>
@ -134,14 +134,14 @@
<div class="info-group"> <div class="info-group">
<div class="info-item mb-3"> <div class="info-item mb-3">
<label class="text-body-2 font-weight-bold text-medium-emphasis">Member Since</label> <label class="text-body-2 font-weight-bold text-medium-emphasis">Member Since</label>
<p class="text-body-1 ma-0">{{ formatDate(member['Member Since']) || 'Not specified' }}</p> <p class="text-body-1 ma-0">{{ formatDate(member.member_since) || 'Not specified' }}</p>
</div> </div>
<div class="info-item mb-3"> <div class="info-item mb-3">
<label class="text-body-2 font-weight-bold text-medium-emphasis">Membership Status</label> <label class="text-body-2 font-weight-bold text-medium-emphasis">Membership Status</label>
<p class="text-body-1 ma-0"> <p class="text-body-1 ma-0">
<v-chip :color="statusColor" size="small" variant="tonal"> <v-chip :color="statusColor" size="small" variant="tonal">
{{ member['Membership Status'] }} {{ member.membership_status }}
</v-chip> </v-chip>
</p> </p>
</div> </div>
@ -150,20 +150,20 @@
<label class="text-body-2 font-weight-bold text-medium-emphasis">Current Year Dues</label> <label class="text-body-2 font-weight-bold text-medium-emphasis">Current Year Dues</label>
<p class="text-body-1 ma-0"> <p class="text-body-1 ma-0">
<v-chip :color="duesColor" size="small" variant="tonal"> <v-chip :color="duesColor" size="small" variant="tonal">
{{ member['Current Year Dues Paid'] ? 'Paid' : 'Outstanding' }} {{ member.current_year_dues_paid === 'true' ? 'Paid' : 'Outstanding' }}
</v-chip> </v-chip>
</p> </p>
</div> </div>
<div class="info-item mb-3" v-if="member['Membership Date Paid']"> <div class="info-item mb-3" v-if="member.membership_date_paid">
<label class="text-body-2 font-weight-bold text-medium-emphasis">Last Payment Date</label> <label class="text-body-2 font-weight-bold text-medium-emphasis">Last Payment Date</label>
<p class="text-body-1 ma-0">{{ formatDate(member['Membership Date Paid']) }}</p> <p class="text-body-1 ma-0">{{ formatDate(member.membership_date_paid) }}</p>
</div> </div>
<div class="info-item mb-3" v-if="member['Payment Due Date']"> <div class="info-item mb-3" v-if="member.payment_due_date">
<label class="text-body-2 font-weight-bold text-medium-emphasis">Payment Due Date</label> <label class="text-body-2 font-weight-bold text-medium-emphasis">Payment Due Date</label>
<p class="text-body-1 ma-0" :class="{ 'text-error': isOverdue }"> <p class="text-body-1 ma-0" :class="{ 'text-error': isOverdue }">
{{ formatDate(member['Payment Due Date']) }} {{ formatDate(member.payment_due_date) }}
<span v-if="isOverdue" class="text-error font-weight-bold"> (Overdue)</span> <span v-if="isOverdue" class="text-error font-weight-bold"> (Overdue)</span>
</p> </p>
</div> </div>
@ -208,8 +208,8 @@ defineEmits<Emits>();
// Computed properties // Computed properties
const memberInitials = computed(() => { const memberInitials = computed(() => {
if (!props.member) return ''; if (!props.member) return '';
const firstName = props.member['First Name'] || ''; const firstName = props.member.first_name || '';
const lastName = props.member['Last Name'] || ''; const lastName = props.member.last_name || '';
return `${firstName.charAt(0)}${lastName.charAt(0)}`.toUpperCase(); return `${firstName.charAt(0)}${lastName.charAt(0)}`.toUpperCase();
}); });
@ -222,7 +222,7 @@ const avatarColor = computed(() => {
const statusColor = computed(() => { const statusColor = computed(() => {
if (!props.member) return 'grey'; if (!props.member) return 'grey';
const status = props.member['Membership Status']; const status = props.member.membership_status;
switch (status) { switch (status) {
case 'Active': return 'success'; case 'Active': return 'success';
case 'Inactive': return 'grey'; case 'Inactive': return 'grey';
@ -234,7 +234,7 @@ const statusColor = computed(() => {
const statusIcon = computed(() => { const statusIcon = computed(() => {
if (!props.member) return 'mdi-help'; if (!props.member) return 'mdi-help';
const status = props.member['Membership Status']; const status = props.member.membership_status;
switch (status) { switch (status) {
case 'Active': return 'mdi-check-circle'; case 'Active': return 'mdi-check-circle';
case 'Inactive': return 'mdi-pause-circle'; case 'Inactive': return 'mdi-pause-circle';
@ -246,29 +246,29 @@ const statusIcon = computed(() => {
const duesColor = computed(() => { const duesColor = computed(() => {
if (!props.member) return 'grey'; if (!props.member) return 'grey';
return props.member['Current Year Dues Paid'] === 'true' ? 'success' : 'error'; return props.member.current_year_dues_paid === 'true' ? 'success' : 'error';
}); });
const duesVariant = computed(() => { const duesVariant = computed(() => {
if (!props.member) return 'tonal'; if (!props.member) return 'tonal';
return props.member['Current Year Dues Paid'] === 'true' ? 'tonal' : 'flat'; return props.member.current_year_dues_paid === 'true' ? 'tonal' : 'flat';
}); });
const duesIcon = computed(() => { const duesIcon = computed(() => {
if (!props.member) return 'mdi-help'; if (!props.member) return 'mdi-help';
return props.member['Current Year Dues Paid'] === 'true' ? 'mdi-check-circle' : 'mdi-alert-circle'; return props.member.current_year_dues_paid === 'true' ? 'mdi-check-circle' : 'mdi-alert-circle';
}); });
const duesText = computed(() => { const duesText = computed(() => {
if (!props.member) return ''; if (!props.member) return '';
return props.member['Current Year Dues Paid'] === 'true' ? 'Dues Paid' : 'Dues Outstanding'; return props.member.current_year_dues_paid === 'true' ? 'Dues Paid' : 'Dues Outstanding';
}); });
const isOverdue = computed(() => { const isOverdue = computed(() => {
if (!props.member || !props.member['Payment Due Date']) return false; if (!props.member || !props.member.payment_due_date) return false;
const dueDate = new Date(props.member['Payment Due Date']); const dueDate = new Date(props.member.payment_due_date);
const today = new Date(); const today = new Date();
return dueDate < today && props.member['Current Year Dues Paid'] !== 'true'; return dueDate < today && props.member.current_year_dues_paid !== 'true';
}); });
// Methods // Methods