mirror of
				https://github.com/crater-invoice/crater.git
				synced 2025-10-31 13:41:09 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			87 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import { defineStore } from 'pinia'
 | |
| import { useGlobalStore } from '@/scripts/stores/global'
 | |
| import { handleError } from '@/scripts/helpers/error-handling'
 | |
| 
 | |
| export const useDashboardStore = (useWindow = false) => {
 | |
|   const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore
 | |
|   const { global } = window.i18n
 | |
| 
 | |
|   return defineStoreFunc({
 | |
|     id: 'dashboard',
 | |
| 
 | |
|     state: () => ({
 | |
|       stats: {
 | |
|         totalAmountDue: 0,
 | |
|         totalCustomerCount: 0,
 | |
|         totalInvoiceCount: 0,
 | |
|         totalEstimateCount: 0,
 | |
|       },
 | |
| 
 | |
|       chartData: {
 | |
|         months: [],
 | |
|         invoiceTotals: [],
 | |
|         expenseTotals: [],
 | |
|         receiptTotals: [],
 | |
|         netIncomeTotals: [],
 | |
|       },
 | |
| 
 | |
|       totalSales: null,
 | |
|       totalReceipts: null,
 | |
|       totalExpenses: null,
 | |
|       totalNetIncome: null,
 | |
| 
 | |
|       recentDueInvoices: [],
 | |
|       recentEstimates: [],
 | |
| 
 | |
|       isDashboardDataLoaded: false,
 | |
|     }),
 | |
| 
 | |
|     actions: {
 | |
|       loadData(params) {
 | |
|         return new Promise((resolve, reject) => {
 | |
|           axios
 | |
|             .get(`/api/v1/dashboard`, { params })
 | |
|             .then((response) => {
 | |
|               // Stats
 | |
|               this.stats.totalAmountDue = response.data.total_amount_due
 | |
|               this.stats.totalCustomerCount = response.data.total_customer_count
 | |
|               this.stats.totalInvoiceCount = response.data.total_invoice_count
 | |
|               this.stats.totalEstimateCount = response.data.total_estimate_count
 | |
| 
 | |
|               // Dashboard Chart
 | |
|               if (this.chartData && response.data.chart_data) {
 | |
|                 this.chartData.months = response.data.chart_data.months
 | |
|                 this.chartData.invoiceTotals =
 | |
|                   response.data.chart_data.invoice_totals
 | |
|                 this.chartData.expenseTotals =
 | |
|                   response.data.chart_data.expense_totals
 | |
|                 this.chartData.receiptTotals =
 | |
|                   response.data.chart_data.receipt_totals
 | |
|                 this.chartData.netIncomeTotals =
 | |
|                   response.data.chart_data.net_income_totals
 | |
|               }
 | |
| 
 | |
|               // Dashboard Chart Labels
 | |
|               this.totalSales = response.data.total_sales
 | |
|               this.totalReceipts = response.data.total_receipts
 | |
|               this.totalExpenses = response.data.total_expenses
 | |
|               this.totalNetIncome = response.data.total_net_income
 | |
| 
 | |
|               // Dashboard Table Data
 | |
|               this.recentDueInvoices = response.data.recent_due_invoices
 | |
|               this.recentEstimates = response.data.recent_estimates
 | |
| 
 | |
|               this.isDashboardDataLoaded = true
 | |
| 
 | |
|               resolve(response)
 | |
|             })
 | |
|             .catch((err) => {
 | |
|               handleError(err)
 | |
|               reject(err)
 | |
|             })
 | |
|         })
 | |
|       },
 | |
|     },
 | |
|   })()
 | |
| }
 |