fixes
Build And Push Image / docker (push) Successful in 3m9s
Details
Build And Push Image / docker (push) Successful in 3m9s
Details
This commit is contained in:
parent
d36209818a
commit
13fa95a9a2
|
|
@ -12,7 +12,7 @@
|
|||
size="small"
|
||||
variant="flat"
|
||||
>
|
||||
{{ member['Membership Status'] }}
|
||||
{{ member.membership_status }}
|
||||
</v-chip>
|
||||
</div>
|
||||
|
||||
|
|
@ -31,18 +31,18 @@
|
|||
|
||||
<div class="flex-grow-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>
|
||||
<div class="d-flex align-center">
|
||||
<CountryFlag
|
||||
v-if="member.Nationality"
|
||||
:country-code="member.Nationality"
|
||||
v-if="member.nationality"
|
||||
:country-code="member.nationality"
|
||||
:show-name="false"
|
||||
size="small"
|
||||
class="mr-2"
|
||||
/>
|
||||
<span class="text-body-2 text-medium-emphasis">
|
||||
{{ getCountryName(member.Nationality) || 'Unknown' }}
|
||||
{{ getCountryName(member.nationality) || 'Unknown' }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -52,17 +52,17 @@
|
|||
<div class="member-info">
|
||||
<div class="info-row mb-2">
|
||||
<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 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>
|
||||
<span class="text-body-2">{{ member.FormattedPhone || member.Phone }}</span>
|
||||
<span class="text-body-2">{{ member.FormattedPhone || member.phone }}</span>
|
||||
</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>
|
||||
<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>
|
||||
|
||||
|
|
@ -79,14 +79,14 @@
|
|||
</v-chip>
|
||||
|
||||
<v-chip
|
||||
v-if="member['Payment Due Date']"
|
||||
v-if="member.payment_due_date"
|
||||
color="warning"
|
||||
variant="tonal"
|
||||
size="small"
|
||||
:class="{ 'text-error': isOverdue }"
|
||||
>
|
||||
<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>
|
||||
</div>
|
||||
</v-card-text>
|
||||
|
|
@ -148,11 +148,11 @@ const props = withDefaults(defineProps<Props>(), {
|
|||
defineEmits<Emits>();
|
||||
|
||||
// Computed properties
|
||||
const memberInitials = computed(() => {
|
||||
const firstName = props.member['First Name'] || '';
|
||||
const lastName = props.member['Last Name'] || '';
|
||||
return `${firstName.charAt(0)}${lastName.charAt(0)}`.toUpperCase();
|
||||
});
|
||||
const memberInitials = computed(() => {
|
||||
const firstName = props.member.first_name || '';
|
||||
const lastName = props.member.last_name || '';
|
||||
return `${firstName.charAt(0)}${lastName.charAt(0)}`.toUpperCase();
|
||||
});
|
||||
|
||||
const avatarColor = computed(() => {
|
||||
// Generate consistent color based on member ID using high-contrast colors
|
||||
|
|
@ -162,11 +162,11 @@ const avatarColor = computed(() => {
|
|||
});
|
||||
|
||||
const isActive = computed(() => {
|
||||
return props.member['Membership Status'] === 'Active';
|
||||
return props.member.membership_status === 'Active';
|
||||
});
|
||||
|
||||
const statusColor = computed(() => {
|
||||
const status = props.member['Membership Status'];
|
||||
const status = props.member.membership_status;
|
||||
switch (status) {
|
||||
case 'Active': return 'success';
|
||||
case 'Inactive': return 'grey';
|
||||
|
|
@ -177,26 +177,26 @@ const statusColor = 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(() => {
|
||||
return props.member['Current Year Dues Paid'] === 'true' ? 'tonal' : 'flat';
|
||||
return props.member.current_year_dues_paid === 'true' ? 'tonal' : 'flat';
|
||||
});
|
||||
|
||||
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(() => {
|
||||
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(() => {
|
||||
if (!props.member['Payment Due Date']) return false;
|
||||
const dueDate = new Date(props.member['Payment Due Date']);
|
||||
if (!props.member.payment_due_date) return false;
|
||||
const dueDate = new Date(props.member.payment_due_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
|
||||
|
|
|
|||
|
|
@ -21,18 +21,18 @@
|
|||
|
||||
<div class="flex-grow-1">
|
||||
<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>
|
||||
<div class="d-flex align-center mt-1">
|
||||
<CountryFlag
|
||||
v-if="member.Nationality"
|
||||
:country-code="member.Nationality"
|
||||
v-if="member.nationality"
|
||||
:country-code="member.nationality"
|
||||
:show-name="false"
|
||||
size="small"
|
||||
class="mr-2"
|
||||
/>
|
||||
<span class="text-white text-body-2">
|
||||
{{ getCountryName(member.Nationality) || 'Unknown Country' }}
|
||||
{{ getCountryName(member.nationality) || 'Unknown Country' }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -56,7 +56,7 @@
|
|||
size="small"
|
||||
>
|
||||
<v-icon start size="16">{{ statusIcon }}</v-icon>
|
||||
{{ member['Membership Status'] }}
|
||||
{{ member.membership_status }}
|
||||
</v-chip>
|
||||
|
||||
<v-chip
|
||||
|
|
@ -69,7 +69,7 @@
|
|||
</v-chip>
|
||||
|
||||
<v-chip
|
||||
v-if="member['Payment Due Date']"
|
||||
v-if="member.payment_due_date"
|
||||
:color="isOverdue ? 'error' : 'warning'"
|
||||
variant="tonal"
|
||||
size="small"
|
||||
|
|
@ -88,41 +88,41 @@
|
|||
<div class="info-group">
|
||||
<div class="info-item mb-3">
|
||||
<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 class="info-item mb-3">
|
||||
<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 class="info-item mb-3">
|
||||
<label class="text-body-2 font-weight-bold text-medium-emphasis">Email</label>
|
||||
<p class="text-body-1 ma-0">
|
||||
<a v-if="member.Email" :href="`mailto:${member.Email}`" class="text-primary">
|
||||
{{ member.Email }}
|
||||
<a v-if="member.email" :href="`mailto:${member.email}`" class="text-primary">
|
||||
{{ member.email }}
|
||||
</a>
|
||||
<span v-else>Not provided</span>
|
||||
</p>
|
||||
</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>
|
||||
<p class="text-body-1 ma-0">
|
||||
<a :href="`tel:${member.Phone}`" class="text-primary">
|
||||
{{ member.FormattedPhone || member.Phone }}
|
||||
<a :href="`tel:${member.phone}`" class="text-primary">
|
||||
{{ member.FormattedPhone || member.phone }}
|
||||
</a>
|
||||
</p>
|
||||
</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>
|
||||
<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 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>
|
||||
<p class="text-body-1 ma-0">{{ member.Address }}</p>
|
||||
<p class="text-body-1 ma-0">{{ member.address }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</v-col>
|
||||
|
|
@ -134,14 +134,14 @@
|
|||
<div class="info-group">
|
||||
<div class="info-item mb-3">
|
||||
<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 class="info-item mb-3">
|
||||
<label class="text-body-2 font-weight-bold text-medium-emphasis">Membership Status</label>
|
||||
<p class="text-body-1 ma-0">
|
||||
<v-chip :color="statusColor" size="small" variant="tonal">
|
||||
{{ member['Membership Status'] }}
|
||||
{{ member.membership_status }}
|
||||
</v-chip>
|
||||
</p>
|
||||
</div>
|
||||
|
|
@ -150,20 +150,20 @@
|
|||
<label class="text-body-2 font-weight-bold text-medium-emphasis">Current Year Dues</label>
|
||||
<p class="text-body-1 ma-0">
|
||||
<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>
|
||||
</p>
|
||||
</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>
|
||||
<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 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>
|
||||
<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>
|
||||
</p>
|
||||
</div>
|
||||
|
|
@ -208,8 +208,8 @@ defineEmits<Emits>();
|
|||
// Computed properties
|
||||
const memberInitials = computed(() => {
|
||||
if (!props.member) return '';
|
||||
const firstName = props.member['First Name'] || '';
|
||||
const lastName = props.member['Last Name'] || '';
|
||||
const firstName = props.member.first_name || '';
|
||||
const lastName = props.member.last_name || '';
|
||||
return `${firstName.charAt(0)}${lastName.charAt(0)}`.toUpperCase();
|
||||
});
|
||||
|
||||
|
|
@ -222,7 +222,7 @@ const avatarColor = computed(() => {
|
|||
|
||||
const statusColor = computed(() => {
|
||||
if (!props.member) return 'grey';
|
||||
const status = props.member['Membership Status'];
|
||||
const status = props.member.membership_status;
|
||||
switch (status) {
|
||||
case 'Active': return 'success';
|
||||
case 'Inactive': return 'grey';
|
||||
|
|
@ -234,7 +234,7 @@ const statusColor = computed(() => {
|
|||
|
||||
const statusIcon = computed(() => {
|
||||
if (!props.member) return 'mdi-help';
|
||||
const status = props.member['Membership Status'];
|
||||
const status = props.member.membership_status;
|
||||
switch (status) {
|
||||
case 'Active': return 'mdi-check-circle';
|
||||
case 'Inactive': return 'mdi-pause-circle';
|
||||
|
|
@ -246,29 +246,29 @@ const statusIcon = computed(() => {
|
|||
|
||||
const duesColor = computed(() => {
|
||||
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(() => {
|
||||
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(() => {
|
||||
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(() => {
|
||||
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(() => {
|
||||
if (!props.member || !props.member['Payment Due Date']) return false;
|
||||
const dueDate = new Date(props.member['Payment Due Date']);
|
||||
if (!props.member || !props.member.payment_due_date) return false;
|
||||
const dueDate = new Date(props.member.payment_due_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
|
||||
|
|
|
|||
Loading…
Reference in New Issue