diff --git a/src/modules/warehouse/services/warehouseService.ts b/src/modules/warehouse/services/warehouseService.ts
index 5c26432..f45c612 100644
--- a/src/modules/warehouse/services/warehouseService.ts
+++ b/src/modules/warehouse/services/warehouseService.ts
@@ -1,5 +1,5 @@
import api from '../../../services/api';
-import type { WarehousesResponse } from '../types/warehouse';
+import type { WarehousesResponse, CreateWarehouseData } from '../types/warehouse';
export const warehouseService = {
async getWarehouses() {
@@ -11,5 +11,16 @@ export const warehouseService = {
console.error('Error fetching warehouses:', error);
throw error;
}
+ },
+
+ async createWarehouse(data: CreateWarehouseData) {
+ try {
+ const response = await api.post('/api/warehouses', data);
+ console.log('Warehouse created:', response);
+ return response;
+ } catch (error) {
+ console.error('Error creating warehouse:', error);
+ throw error;
+ }
}
};
diff --git a/src/modules/warehouse/stores/classificationStore.ts b/src/modules/warehouse/stores/classificationStore.ts
new file mode 100644
index 0000000..94198bd
--- /dev/null
+++ b/src/modules/warehouse/stores/classificationStore.ts
@@ -0,0 +1,115 @@
+import { defineStore } from 'pinia';
+import { ref, computed } from 'vue';
+import { warehouseClassificationService } from '../services/warehouseClasificationService';
+import type { Classification } from '../types/warehouse.clasification';
+
+export const useClassificationStore = defineStore('warehouseClassifications', () => {
+ // State
+ const classifications = ref([]);
+ const loading = ref(false);
+ const loaded = ref(false);
+ const error = ref(null);
+
+ // Getters
+ const rootClassifications = computed(() =>
+ classifications.value.filter(c => c.parent_id === null)
+ );
+
+ const activeClassifications = computed(() =>
+ classifications.value.filter(c => c.is_active)
+ );
+
+ const getClassificationById = computed(() => {
+ return (id: number) => classifications.value.find(c => c.id === id);
+ });
+
+ const getChildrenOf = computed(() => {
+ return (parentId: number) =>
+ classifications.value.filter(c => c.parent_id === parentId);
+ });
+
+ // Actions
+ const fetchClassifications = async (force = false) => {
+ if (loaded.value && !force) {
+ return classifications.value;
+ }
+
+ try {
+ loading.value = true;
+ error.value = null;
+ const response = await warehouseClassificationService.getClassifications();
+ classifications.value = response.data.data.warehouse_classifications.data;
+ loaded.value = true;
+ return classifications.value;
+ } catch (err) {
+ error.value = 'Error al cargar las clasificaciones';
+ console.error('Error fetching classifications:', err);
+ throw err;
+ } finally {
+ loading.value = false;
+ }
+ };
+
+ const refreshClassifications = async () => {
+ return fetchClassifications(true);
+ };
+
+ const clearClassifications = () => {
+ classifications.value = [];
+ loaded.value = false;
+ error.value = null;
+ };
+
+ const createClassification = async (data: any) => {
+ try {
+ const response = await warehouseClassificationService.createClassification(data);
+ await refreshClassifications();
+ return response;
+ } catch (err) {
+ error.value = 'Error al crear la clasificación';
+ throw err;
+ }
+ };
+
+ const updateClassification = async (id: number, data: any) => {
+ try {
+ const response = await warehouseClassificationService.updateClassification(id, data);
+ await refreshClassifications();
+ return response;
+ } catch (err) {
+ error.value = 'Error al actualizar la clasificación';
+ throw err;
+ }
+ };
+
+ const deleteClassification = async (id: number) => {
+ try {
+ const response = await warehouseClassificationService.deleteClassification(id);
+ await refreshClassifications();
+ return response;
+ } catch (err) {
+ error.value = 'Error al eliminar la clasificación';
+ throw err;
+ }
+ };
+
+ return {
+ // State
+ classifications,
+ loading,
+ loaded,
+ error,
+ // Getters
+ rootClassifications,
+ activeClassifications,
+ getClassificationById,
+ getChildrenOf,
+ // Actions
+ fetchClassifications,
+ refreshClassifications,
+ clearClassifications,
+ createClassification,
+ updateClassification,
+ deleteClassification
+ };
+});
diff --git a/src/modules/warehouse/types/warehouse.d.ts b/src/modules/warehouse/types/warehouse.d.ts
index f5b265b..eb78ea4 100644
--- a/src/modules/warehouse/types/warehouse.d.ts
+++ b/src/modules/warehouse/types/warehouse.d.ts
@@ -11,6 +11,13 @@ export interface Warehouse {
classifications: any[];
}
+export interface CreateWarehouseData {
+ code: string;
+ name: string;
+ description: string;
+ classifications: number[];
+}
+
export interface WarehousePagination {
current_page: number;
data: Warehouse[];