mirror of
https://github.com/crater-invoice/crater.git
synced 2025-10-28 12:11:08 -04:00
Merge branch 'add_status' into 'master'
add status dropdown and due tab See merge request mohit.panjvani/crater-web!1312
This commit is contained in:
@ -27,10 +27,11 @@
|
|||||||
</label>
|
</label>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
class="
|
class="flex flex-col space-y-3"
|
||||||
flex flex-col
|
:class="
|
||||||
space-y-3
|
rowOnXl
|
||||||
lg:flex-row lg:space-x-4 lg:space-y-0 lg:items-center
|
? 'xl:flex-row xl:space-x-4 xl:space-y-0 xl:items-center'
|
||||||
|
: 'lg:flex-row lg:space-x-4 lg:space-y-0 lg:items-center'
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<slot />
|
<slot />
|
||||||
@ -45,6 +46,10 @@ defineProps({
|
|||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false,
|
default: false,
|
||||||
},
|
},
|
||||||
|
rowOnXl: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
defineEmits(['clear'])
|
defineEmits(['clear'])
|
||||||
|
|||||||
@ -38,7 +38,11 @@
|
|||||||
</template>
|
</template>
|
||||||
</BasePageHeader>
|
</BasePageHeader>
|
||||||
|
|
||||||
<BaseFilterWrapper v-show="showFilters" @clear="clearFilter">
|
<BaseFilterWrapper
|
||||||
|
v-show="showFilters"
|
||||||
|
:row-on-xl="true"
|
||||||
|
@clear="clearFilter"
|
||||||
|
>
|
||||||
<BaseInputGroup :label="$tc('customers.customer', 1)">
|
<BaseInputGroup :label="$tc('customers.customer', 1)">
|
||||||
<BaseCustomerSelectInput
|
<BaseCustomerSelectInput
|
||||||
v-model="filters.customer_id"
|
v-model="filters.customer_id"
|
||||||
@ -48,6 +52,18 @@
|
|||||||
/>
|
/>
|
||||||
</BaseInputGroup>
|
</BaseInputGroup>
|
||||||
|
|
||||||
|
<BaseInputGroup :label="$t('invoices.status')">
|
||||||
|
<BaseMultiselect
|
||||||
|
v-model="filters.status"
|
||||||
|
:groups="true"
|
||||||
|
:options="status"
|
||||||
|
searchable
|
||||||
|
:placeholder="$t('general.select_a_status')"
|
||||||
|
@update:modelValue="setActiveTab"
|
||||||
|
@remove="clearStatusSearch()"
|
||||||
|
/>
|
||||||
|
</BaseInputGroup>
|
||||||
|
|
||||||
<BaseInputGroup :label="$t('general.from')">
|
<BaseInputGroup :label="$t('general.from')">
|
||||||
<BaseDatePicker
|
<BaseDatePicker
|
||||||
v-model="filters.from_date"
|
v-model="filters.from_date"
|
||||||
@ -116,6 +132,7 @@
|
|||||||
<!-- Tabs -->
|
<!-- Tabs -->
|
||||||
<BaseTabGroup class="-mb-5" @change="setStatusFilter">
|
<BaseTabGroup class="-mb-5" @change="setStatusFilter">
|
||||||
<BaseTab :title="$t('general.draft')" filter="DRAFT" />
|
<BaseTab :title="$t('general.draft')" filter="DRAFT" />
|
||||||
|
<BaseTab :title="$t('general.due')" filter="DUE" />
|
||||||
<BaseTab :title="$t('general.sent')" filter="SENT" />
|
<BaseTab :title="$t('general.sent')" filter="SENT" />
|
||||||
<BaseTab :title="$t('general.all')" filter="" />
|
<BaseTab :title="$t('general.all')" filter="" />
|
||||||
</BaseTabGroup>
|
</BaseTabGroup>
|
||||||
@ -265,12 +282,15 @@ const table = ref(null)
|
|||||||
const showFilters = ref(false)
|
const showFilters = ref(false)
|
||||||
|
|
||||||
const status = ref([
|
const status = ref([
|
||||||
'DRAFT',
|
{
|
||||||
'SENT',
|
label: 'Status',
|
||||||
'VIEWED',
|
options: ['DRAFT', 'DUE', 'SENT', 'VIEWED', 'OVERDUE', 'COMPLETED'],
|
||||||
'EXPIRED',
|
},
|
||||||
'ACCEPTED',
|
{
|
||||||
'REJECTED',
|
label: 'Paid Status',
|
||||||
|
options: ['UNPAID', 'PAID', 'PARTIALLY_PAID'],
|
||||||
|
},
|
||||||
|
,
|
||||||
])
|
])
|
||||||
const isRequestOngoing = ref(true)
|
const isRequestOngoing = ref(true)
|
||||||
const activeTab = ref('general.draft')
|
const activeTab = ref('general.draft')
|
||||||
@ -357,6 +377,11 @@ function hasAtleastOneAbility() {
|
|||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function clearStatusSearch(removedOption, id) {
|
||||||
|
filters.status = ''
|
||||||
|
refreshTable()
|
||||||
|
}
|
||||||
|
|
||||||
function refreshTable() {
|
function refreshTable() {
|
||||||
table.value && table.value.refresh()
|
table.value && table.value.refresh()
|
||||||
}
|
}
|
||||||
@ -404,6 +429,11 @@ function setStatusFilter(val) {
|
|||||||
case t('general.sent'):
|
case t('general.sent'):
|
||||||
filters.status = 'SENT'
|
filters.status = 'SENT'
|
||||||
break
|
break
|
||||||
|
|
||||||
|
case t('general.due'):
|
||||||
|
filters.status = 'DUE'
|
||||||
|
break
|
||||||
|
|
||||||
default:
|
default:
|
||||||
filters.status = ''
|
filters.status = ''
|
||||||
break
|
break
|
||||||
@ -472,6 +502,35 @@ function setActiveTab(val) {
|
|||||||
case 'SENT':
|
case 'SENT':
|
||||||
activeTab.value = t('general.sent')
|
activeTab.value = t('general.sent')
|
||||||
break
|
break
|
||||||
|
|
||||||
|
case 'DUE':
|
||||||
|
activeTab.value = t('general.due')
|
||||||
|
break
|
||||||
|
|
||||||
|
case 'COMPLETED':
|
||||||
|
activeTab.value = t('invoices.completed')
|
||||||
|
break
|
||||||
|
|
||||||
|
case 'PAID':
|
||||||
|
activeTab.value = t('invoices.paid')
|
||||||
|
break
|
||||||
|
|
||||||
|
case 'UNPAID':
|
||||||
|
activeTab.value = t('invoices.unpaid')
|
||||||
|
break
|
||||||
|
|
||||||
|
case 'PARTIALLY_PAID':
|
||||||
|
activeTab.value = t('invoices.partially_paid')
|
||||||
|
break
|
||||||
|
|
||||||
|
case 'VIEWED':
|
||||||
|
activeTab.value = t('invoices.viewed')
|
||||||
|
break
|
||||||
|
|
||||||
|
case 'OVERDUE':
|
||||||
|
activeTab.value = t('invoices.overdue')
|
||||||
|
break
|
||||||
|
|
||||||
default:
|
default:
|
||||||
activeTab.value = t('general.all')
|
activeTab.value = t('general.all')
|
||||||
break
|
break
|
||||||
|
|||||||
Reference in New Issue
Block a user