new features
This commit is contained in:
117
frontend/src/services/bestellung.ts
Normal file
117
frontend/src/services/bestellung.ts
Normal file
@@ -0,0 +1,117 @@
|
||||
import { api } from './api';
|
||||
import type {
|
||||
Lieferant,
|
||||
LieferantFormData,
|
||||
Bestellung,
|
||||
BestellungFormData,
|
||||
BestellungDetailResponse,
|
||||
Bestellposition,
|
||||
BestellpositionFormData,
|
||||
BestellungDatei,
|
||||
BestellungErinnerung,
|
||||
ErinnerungFormData,
|
||||
BestellungHistorie,
|
||||
} from '../types/bestellung.types';
|
||||
|
||||
export const bestellungApi = {
|
||||
// ── Vendors ──
|
||||
getVendors: async (): Promise<Lieferant[]> => {
|
||||
const r = await api.get('/api/bestellungen/vendors');
|
||||
return r.data.data;
|
||||
},
|
||||
getVendor: async (id: number): Promise<Lieferant> => {
|
||||
const r = await api.get(`/api/bestellungen/vendors/${id}`);
|
||||
return r.data.data;
|
||||
},
|
||||
createVendor: async (data: LieferantFormData): Promise<Lieferant> => {
|
||||
const r = await api.post('/api/bestellungen/vendors', data);
|
||||
return r.data.data;
|
||||
},
|
||||
updateVendor: async (id: number, data: LieferantFormData): Promise<Lieferant> => {
|
||||
const r = await api.patch(`/api/bestellungen/vendors/${id}`, data);
|
||||
return r.data.data;
|
||||
},
|
||||
deleteVendor: async (id: number): Promise<void> => {
|
||||
await api.delete(`/api/bestellungen/vendors/${id}`);
|
||||
},
|
||||
|
||||
// ── Orders ──
|
||||
getOrders: async (filters?: { status?: string; lieferant_id?: number }): Promise<Bestellung[]> => {
|
||||
const params = new URLSearchParams();
|
||||
if (filters?.status) params.set('status', filters.status);
|
||||
if (filters?.lieferant_id) params.set('lieferant_id', String(filters.lieferant_id));
|
||||
const r = await api.get(`/api/bestellungen?${params.toString()}`);
|
||||
return r.data.data;
|
||||
},
|
||||
getOrder: async (id: number): Promise<BestellungDetailResponse> => {
|
||||
const r = await api.get(`/api/bestellungen/${id}`);
|
||||
return r.data.data;
|
||||
},
|
||||
createOrder: async (data: BestellungFormData): Promise<Bestellung> => {
|
||||
const r = await api.post('/api/bestellungen', data);
|
||||
return r.data.data;
|
||||
},
|
||||
updateOrder: async (id: number, data: Partial<BestellungFormData>): Promise<Bestellung> => {
|
||||
const r = await api.patch(`/api/bestellungen/${id}`, data);
|
||||
return r.data.data;
|
||||
},
|
||||
deleteOrder: async (id: number): Promise<void> => {
|
||||
await api.delete(`/api/bestellungen/${id}`);
|
||||
},
|
||||
updateStatus: async (id: number, status: string): Promise<Bestellung> => {
|
||||
const r = await api.patch(`/api/bestellungen/${id}/status`, { status });
|
||||
return r.data.data;
|
||||
},
|
||||
|
||||
// ── Line Items ──
|
||||
addLineItem: async (orderId: number, data: BestellpositionFormData): Promise<Bestellposition> => {
|
||||
const r = await api.post(`/api/bestellungen/${orderId}/items`, data);
|
||||
return r.data.data;
|
||||
},
|
||||
updateLineItem: async (itemId: number, data: Partial<BestellpositionFormData>): Promise<Bestellposition> => {
|
||||
const r = await api.patch(`/api/bestellungen/items/${itemId}`, data);
|
||||
return r.data.data;
|
||||
},
|
||||
deleteLineItem: async (itemId: number): Promise<void> => {
|
||||
await api.delete(`/api/bestellungen/items/${itemId}`);
|
||||
},
|
||||
updateReceivedQty: async (itemId: number, menge: number): Promise<Bestellposition> => {
|
||||
const r = await api.patch(`/api/bestellungen/items/${itemId}/received`, { erhalten_menge: menge });
|
||||
return r.data.data;
|
||||
},
|
||||
|
||||
// ── Files ──
|
||||
uploadFile: async (orderId: number, file: File): Promise<BestellungDatei> => {
|
||||
const formData = new FormData();
|
||||
formData.append('datei', file);
|
||||
const r = await api.post(`/api/bestellungen/${orderId}/files`, formData, {
|
||||
headers: { 'Content-Type': 'multipart/form-data' },
|
||||
});
|
||||
return r.data.data;
|
||||
},
|
||||
deleteFile: async (fileId: number): Promise<void> => {
|
||||
await api.delete(`/api/bestellungen/files/${fileId}`);
|
||||
},
|
||||
getFiles: async (orderId: number): Promise<BestellungDatei[]> => {
|
||||
const r = await api.get(`/api/bestellungen/${orderId}/files`);
|
||||
return r.data.data;
|
||||
},
|
||||
|
||||
// ── Reminders ──
|
||||
addReminder: async (orderId: number, data: ErinnerungFormData): Promise<BestellungErinnerung> => {
|
||||
const r = await api.post(`/api/bestellungen/${orderId}/reminders`, data);
|
||||
return r.data.data;
|
||||
},
|
||||
markReminderDone: async (reminderId: number): Promise<void> => {
|
||||
await api.patch(`/api/bestellungen/reminders/${reminderId}`, { erledigt: true });
|
||||
},
|
||||
deleteReminder: async (reminderId: number): Promise<void> => {
|
||||
await api.delete(`/api/bestellungen/reminders/${reminderId}`);
|
||||
},
|
||||
|
||||
// ── History ──
|
||||
getHistory: async (orderId: number): Promise<BestellungHistorie[]> => {
|
||||
const r = await api.get(`/api/bestellungen/${orderId}/history`);
|
||||
return r.data.data;
|
||||
},
|
||||
};
|
||||
73
frontend/src/services/shop.ts
Normal file
73
frontend/src/services/shop.ts
Normal file
@@ -0,0 +1,73 @@
|
||||
import { api } from './api';
|
||||
import type {
|
||||
ShopArtikel,
|
||||
ShopArtikelFormData,
|
||||
ShopAnfrage,
|
||||
ShopAnfrageDetailResponse,
|
||||
ShopAnfrageFormItem,
|
||||
} from '../types/shop.types';
|
||||
|
||||
export const shopApi = {
|
||||
// ── Catalog Items ──
|
||||
getItems: async (filters?: { kategorie?: string; aktiv?: boolean }): Promise<ShopArtikel[]> => {
|
||||
const params = new URLSearchParams();
|
||||
if (filters?.kategorie) params.set('kategorie', filters.kategorie);
|
||||
if (filters?.aktiv !== undefined) params.set('aktiv', String(filters.aktiv));
|
||||
const r = await api.get(`/api/shop/items?${params.toString()}`);
|
||||
return r.data.data;
|
||||
},
|
||||
getItem: async (id: number): Promise<ShopArtikel> => {
|
||||
const r = await api.get(`/api/shop/items/${id}`);
|
||||
return r.data.data;
|
||||
},
|
||||
createItem: async (data: ShopArtikelFormData): Promise<ShopArtikel> => {
|
||||
const r = await api.post('/api/shop/items', data);
|
||||
return r.data.data;
|
||||
},
|
||||
updateItem: async (id: number, data: Partial<ShopArtikelFormData>): Promise<ShopArtikel> => {
|
||||
const r = await api.patch(`/api/shop/items/${id}`, data);
|
||||
return r.data.data;
|
||||
},
|
||||
deleteItem: async (id: number): Promise<void> => {
|
||||
await api.delete(`/api/shop/items/${id}`);
|
||||
},
|
||||
getCategories: async (): Promise<string[]> => {
|
||||
const r = await api.get('/api/shop/categories');
|
||||
return r.data.data;
|
||||
},
|
||||
|
||||
// ── Requests ──
|
||||
getRequests: async (filters?: { status?: string }): Promise<ShopAnfrage[]> => {
|
||||
const params = new URLSearchParams();
|
||||
if (filters?.status) params.set('status', filters.status);
|
||||
const r = await api.get(`/api/shop/requests?${params.toString()}`);
|
||||
return r.data.data;
|
||||
},
|
||||
getMyRequests: async (): Promise<ShopAnfrage[]> => {
|
||||
const r = await api.get('/api/shop/requests/my');
|
||||
return r.data.data;
|
||||
},
|
||||
getRequest: async (id: number): Promise<ShopAnfrageDetailResponse> => {
|
||||
const r = await api.get(`/api/shop/requests/${id}`);
|
||||
return r.data.data;
|
||||
},
|
||||
createRequest: async (items: ShopAnfrageFormItem[], notizen?: string): Promise<ShopAnfrage> => {
|
||||
const r = await api.post('/api/shop/requests', { items, notizen });
|
||||
return r.data.data;
|
||||
},
|
||||
updateRequestStatus: async (id: number, status: string, admin_notizen?: string): Promise<ShopAnfrage> => {
|
||||
const r = await api.patch(`/api/shop/requests/${id}/status`, { status, admin_notizen });
|
||||
return r.data.data;
|
||||
},
|
||||
deleteRequest: async (id: number): Promise<void> => {
|
||||
await api.delete(`/api/shop/requests/${id}`);
|
||||
},
|
||||
|
||||
// ── Linking ──
|
||||
linkToOrder: async (anfrageId: number, bestellungId: number): Promise<void> => {
|
||||
await api.post(`/api/shop/requests/${anfrageId}/link`, { bestellung_id: bestellungId });
|
||||
},
|
||||
unlinkFromOrder: async (anfrageId: number, bestellungId: number): Promise<void> => {
|
||||
await api.delete(`/api/shop/requests/${anfrageId}/link/${bestellungId}`);
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user