feat: analytic

This commit is contained in:
ferdiansyah783
2025-08-08 17:59:39 +07:00
parent 7beee4c3a1
commit 67b747f0ff
34 changed files with 1227 additions and 2834 deletions
+97 -7
View File
@@ -1,5 +1,5 @@
import { useQuery } from '@tanstack/react-query'
import { ProductSalesReport, SalesReport } from '../../types/services/analytic'
import { DashboardReport, PaymentReport, ProductSalesReport, ProfitLossReport, SalesReport } from '../../types/services/analytic'
import { api } from '../api'
import { formatDateDDMMYYYY } from '../../utils/transform'
@@ -10,11 +10,11 @@ interface AnalyticQueryParams {
export function useSalesAnalytics(params: AnalyticQueryParams = {}) {
const today = new Date()
const sevenDaysAgo = new Date()
sevenDaysAgo.setDate(today.getDate() - 30)
const monthAgo = new Date()
monthAgo.setDate(today.getDate() - 30)
const defaultDateTo = formatDateDDMMYYYY(today)
const defaultDateFrom = formatDateDDMMYYYY(sevenDaysAgo)
const defaultDateFrom = formatDateDDMMYYYY(monthAgo)
const { date_from = defaultDateFrom, date_to = defaultDateTo, ...filters } = params
@@ -40,11 +40,11 @@ export function useSalesAnalytics(params: AnalyticQueryParams = {}) {
export function useProductSalesAnalytics(params: AnalyticQueryParams = {}) {
const today = new Date()
const sevenDaysAgo = new Date()
sevenDaysAgo.setDate(today.getDate() - 30)
const monthAgo = new Date()
monthAgo.setDate(today.getDate() - 30)
const defaultDateTo = formatDateDDMMYYYY(today)
const defaultDateFrom = formatDateDDMMYYYY(sevenDaysAgo)
const defaultDateFrom = formatDateDDMMYYYY(monthAgo)
const { date_from = defaultDateFrom, date_to = defaultDateTo, ...filters } = params
@@ -67,3 +67,93 @@ export function useProductSalesAnalytics(params: AnalyticQueryParams = {}) {
}
})
}
export function usePaymentAnalytics(params: AnalyticQueryParams = {}) {
const today = new Date()
const monthAgo = new Date()
monthAgo.setDate(today.getDate() - 30)
const defaultDateTo = formatDateDDMMYYYY(today)
const defaultDateFrom = formatDateDDMMYYYY(monthAgo)
const { date_from = defaultDateFrom, date_to = defaultDateTo, ...filters } = params
return useQuery<PaymentReport>({
queryKey: ['analytics-payment-methods', { date_from, date_to, ...filters }],
queryFn: async () => {
const queryParams = new URLSearchParams()
queryParams.append('date_from', date_from)
queryParams.append('date_to', date_to)
Object.entries(filters).forEach(([key, value]) => {
if (value !== undefined && value !== null && value !== '') {
queryParams.append(key, value.toString())
}
})
const res = await api.get(`/analytics/payment-methods?${queryParams.toString()}`)
return res.data.data
}
})
}
export function useDashboardAnalytics(params: AnalyticQueryParams = {}) {
const today = new Date()
const monthAgo = new Date()
monthAgo.setDate(today.getDate() - 30)
const defaultDateTo = formatDateDDMMYYYY(today)
const defaultDateFrom = formatDateDDMMYYYY(monthAgo)
const { date_from = defaultDateFrom, date_to = defaultDateTo, ...filters } = params
return useQuery<DashboardReport>({
queryKey: ['analytics-dashboard', { date_from, date_to, ...filters }],
queryFn: async () => {
const queryParams = new URLSearchParams()
queryParams.append('date_from', date_from)
queryParams.append('date_to', date_to)
Object.entries(filters).forEach(([key, value]) => {
if (value !== undefined && value !== null && value !== '') {
queryParams.append(key, value.toString())
}
})
const res = await api.get(`/analytics/dashboard?${queryParams.toString()}`)
return res.data.data
}
})
}
export function useProfitLossAnalytics(params: AnalyticQueryParams = {}) {
const today = new Date()
const monthAgo = new Date()
monthAgo.setDate(today.getDate() - 30)
const defaultDateTo = formatDateDDMMYYYY(today)
const defaultDateFrom = formatDateDDMMYYYY(monthAgo)
const { date_from = defaultDateFrom, date_to = defaultDateTo, ...filters } = params
return useQuery<ProfitLossReport>({
queryKey: ['analytics-profit-loss', { date_from, date_to, ...filters }],
queryFn: async () => {
const queryParams = new URLSearchParams()
queryParams.append('date_from', date_from)
queryParams.append('date_to', date_to)
Object.entries(filters).forEach(([key, value]) => {
if (value !== undefined && value !== null && value !== '') {
queryParams.append(key, value.toString())
}
})
const res = await api.get(`/analytics/profit-loss?${queryParams.toString()}`)
return res.data.data
}
})
}