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"
|
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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue