mirror of
https://github.com/chillpadclub/bedolaga-cabinet.git
synced 2026-07-30 02:23:47 +00:00
Поиск по инвойсу/клиенту, фильтры по статусу/периоду/методу, карточки статистики, кастомный диапазон дат, обработка ошибок, локализация на 4 языка.
88 lines
2.4 KiB
TypeScript
88 lines
2.4 KiB
TypeScript
import apiClient from './client';
|
|
import type { PaginatedResponse, PendingPayment, ManualCheckResponse } from '../types';
|
|
|
|
export interface PaymentsStats {
|
|
total_pending: number;
|
|
by_method: Record<string, number>;
|
|
}
|
|
|
|
export interface SearchStats {
|
|
total: number;
|
|
pending: number;
|
|
paid: number;
|
|
cancelled: number;
|
|
by_method: Record<string, number>;
|
|
}
|
|
|
|
export const adminPaymentsApi = {
|
|
// Get all pending payments (admin)
|
|
getPendingPayments: async (params?: {
|
|
page?: number;
|
|
per_page?: number;
|
|
method_filter?: string;
|
|
}): Promise<PaginatedResponse<PendingPayment>> => {
|
|
const response = await apiClient.get<PaginatedResponse<PendingPayment>>(
|
|
'/cabinet/admin/payments',
|
|
{
|
|
params,
|
|
},
|
|
);
|
|
return response.data;
|
|
},
|
|
|
|
// Get payments statistics
|
|
getStats: async (): Promise<PaymentsStats> => {
|
|
const response = await apiClient.get<PaymentsStats>('/cabinet/admin/payments/stats');
|
|
return response.data;
|
|
},
|
|
|
|
// Search payments with filters
|
|
searchPayments: async (params?: {
|
|
search?: string;
|
|
status_filter?: string;
|
|
method_filter?: string;
|
|
period?: string;
|
|
date_from?: string;
|
|
date_to?: string;
|
|
page?: number;
|
|
per_page?: number;
|
|
}): Promise<PaginatedResponse<PendingPayment>> => {
|
|
const response = await apiClient.get<PaginatedResponse<PendingPayment>>(
|
|
'/cabinet/admin/payments/search',
|
|
{ params },
|
|
);
|
|
return response.data;
|
|
},
|
|
|
|
// Get search statistics with filters
|
|
getSearchStats: async (params?: {
|
|
search?: string;
|
|
status_filter?: string;
|
|
method_filter?: string;
|
|
period?: string;
|
|
date_from?: string;
|
|
date_to?: string;
|
|
}): Promise<SearchStats> => {
|
|
const response = await apiClient.get<SearchStats>('/cabinet/admin/payments/search/stats', {
|
|
params,
|
|
});
|
|
return response.data;
|
|
},
|
|
|
|
// Get specific payment details
|
|
getPayment: async (method: string, paymentId: number): Promise<PendingPayment> => {
|
|
const response = await apiClient.get<PendingPayment>(
|
|
`/cabinet/admin/payments/${method}/${paymentId}`,
|
|
);
|
|
return response.data;
|
|
},
|
|
|
|
// Manually check payment status
|
|
checkPaymentStatus: async (method: string, paymentId: number): Promise<ManualCheckResponse> => {
|
|
const response = await apiClient.post<ManualCheckResponse>(
|
|
`/cabinet/admin/payments/${method}/${paymentId}/check`,
|
|
);
|
|
return response.data;
|
|
},
|
|
};
|