erp-pos-ecommerce-shared 0.2.2 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/services/config.ts","../src/services/attributes.service.ts","../src/utils/notifications.tsx","../src/queries/attributes.queries.ts","../src/services/user.service.ts","../src/queries/user.queries.ts","../src/services/category.service.ts","../src/queries/category.queries.ts","../src/services/warehouse.service.ts","../src/queries/warehouse.queries.ts","../src/services/client.service.ts","../src/queries/client.queries.ts","../src/services/bankTerminal.service.ts","../src/queries/bankTerminal.queries.ts","../src/services/batch.service.ts","../src/queries/batch.queries.ts","../src/services/role.service.ts","../src/queries/role.queries.ts","../src/services/provider.service.ts","../src/queries/provider.queries.ts","../src/services/location.service.ts","../src/queries/location.queries.ts","../src/services/material.service.ts","../src/queries/material.queries.ts","../src/services/priceType.service.ts","../src/queries/priceType.queries.ts","../src/services/product.service.ts","../src/queries/product.queries.ts","../src/services/exchange.service.ts","../src/queries/exchange.queries.ts","../src/services/permission.service.ts","../src/queries/permission.queries.ts","../src/services/promotion.service.ts","../src/queries/promotion.queries.ts","../src/services/order.service.ts","../src/queries/order.queries.ts","../src/services/payment.service.ts","../src/queries/payment.queries.ts","../src/services/auth.service.ts","../src/queries/auth.queries.ts","../src/services/tax.service.ts","../src/queries/tax.queries.ts","../src/services/gender.service.ts","../src/queries/gender.queries.ts","../src/services/state.service.ts","../src/queries/state.queries.ts","../src/services/module.service.ts","../src/queries/module.queries.ts","../src/services/folio.service.ts","../src/queries/folio.queries.ts","../src/services/health.service.ts","../src/queries/health.queries.ts","../src/services/productTags.service.ts","../src/queries/productTags.queries.ts","../src/services/pricePerGram.service.ts","../src/queries/pricePerGram.queries.ts","../src/services/qr.service.ts","../src/queries/qr.queries.ts","../src/services/report.service.ts","../src/queries/report.queries.ts","../src/services/return.service.ts","../src/queries/return.queries.ts","../src/services/shift.service.ts","../src/queries/shift.queries.ts","../src/services/stockmovement.service.ts","../src/queries/stockmovement.queries.ts"],"names":["attributes","queryOptions"],"mappings":"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","file":"queries.js","sourcesContent":["import axios, { type AxiosInstance } from 'axios'\n\n/**\n * Configuration for the shared API client.\n * Each consuming app must call configureApi() with its own baseURL and auth.\n */\nexport interface IApiConfig {\n /** Backend base URL (e.g. \"http://localhost:4000/\" or \"https://api.myapp.com/\") */\n baseURL: string\n /** Returns the current auth token for request headers */\n getToken: () => string | undefined\n /** Called when a new token is received after refresh (e.g. update your store) */\n onTokenRefresh?: (newToken: string) => void\n /** Called when refresh fails (e.g. clear session, redirect to login) */\n onUnauthorized?: () => void\n}\n\n// Default instance; replaced when configureApi() is called by the consuming app\nlet api: AxiosInstance = axios.create({\n baseURL: '',\n headers: { 'Content-Type': 'application/json' }\n})\n\n/**\n * Configure the shared API client. Must be called by the consuming app before using any service.\n * @example\n * // In your app (e.g. main.tsx or before first API call):\n * import { configureApi } from 'erp-pos-ecommerce-shared'\n * import { useAuthStore } from './store/authStore'\n *\n * configureApi({\n * baseURL: import.meta.env.VITE_API_URL ?? 'http://localhost:4000/',\n * getToken: () => useAuthStore.getState().token,\n * onTokenRefresh: (newToken) => useAuthStore.setState({ token: newToken }),\n * onUnauthorized: () => { useAuthStore.setState({ token: undefined }); redirectToLogin() }\n * })\n */\nexport function configureApi(config: IApiConfig): AxiosInstance {\n const { baseURL, getToken, onTokenRefresh, onUnauthorized } = config\n\n const newApi = axios.create({\n baseURL,\n headers: {\n 'Content-Type': 'application/json',\n ...(getToken() && { Authorization: `Bearer ${getToken()}` })\n }\n })\n\n newApi.interceptors.request.use((reqConfig) => {\n const token = getToken()\n if (token) {\n reqConfig.headers.Authorization = `Bearer ${token}`\n }\n return reqConfig\n })\n\n const refreshAxios = axios.create({ baseURL })\n\n newApi.interceptors.response.use(\n (response) => response,\n async (error) => {\n const originalRequest = error.config\n\n if (error.response?.status === 401 && !originalRequest._retry && onTokenRefresh && onUnauthorized) {\n originalRequest._retry = true\n\n try {\n const response = await refreshAxios.get('/auth/refresh', {\n headers: getToken() ? { Authorization: `Bearer ${getToken()}` } : {}\n })\n const newToken = response.data?.token\n if (newToken) {\n onTokenRefresh(newToken)\n originalRequest.headers.Authorization = `Bearer ${newToken}`\n return newApi(originalRequest)\n }\n } catch {\n onUnauthorized()\n return Promise.reject(error)\n }\n }\n\n return Promise.reject(error)\n }\n )\n\n api = newApi\n return api\n}\n\n/**\n * Shared axios instance used by all services.\n * Valid only after the consuming app has called configureApi().\n */\nexport { api }\n","import type {\n IAttribute,\n IAttributeFilter,\n IAttributeResponse,\n IAttributeValue\n} from '../interfaces/attribute.interface'\nimport { api } from './config'\n\nexport const getAttributes = async ({\n skip,\n limit,\n query\n}: {\n skip: number\n limit: number\n query: string\n}): Promise<IAttributeResponse> => {\n const { data } = await api.get('/attribute/category', { params: { skip, limit, query } })\n return data\n}\n\nexport const getAttributesForSelect = async (): Promise<IAttribute[]> => {\n const { data } = await api.get('/attribute/select')\n return data\n}\n\nexport const getAttributesTable = async ({\n skip,\n limit,\n filters\n}: {\n skip?: number\n limit?: number\n filters?: IAttributeFilter\n}): Promise<IAttributeResponse> => {\n const queryParams = new URLSearchParams({\n skip: skip?.toString() ?? \"\",\n limit: limit?.toString() ?? \"\",\n ...(filters?.query && { query: filters.query }),\n ...(filters?.categoryId && { categoryId: filters.categoryId.toString() }),\n ...(filters?.productId && { productId: filters.productId.toString() }),\n ...(filters?.materialId && { materialId: filters.materialId.toString() }),\n })\n const { data } = await api.get(`/attribute?${queryParams}`)\n return data\n}\n\nexport const getAttributeById = async ({\n attributeId\n}: {\n attributeId: string\n}): Promise<IAttribute> => {\n const { data } = await api.get(`/attribute/${attributeId}`)\n return data\n}\n\nexport const getAttributesByProductID = async ({\n productId\n}: {\n productId: string\n}): Promise<IAttribute[]> => {\n const { data } = await api.get(`/attribute/${productId}/product`)\n return data\n}\n\nexport const getAttributesByCategoryID = async ({\n categoryID\n}: {\n categoryID: string\n}): Promise<IAttribute[]> => {\n const { data } = await api.get(`/attribute/${categoryID}/category/`)\n return data\n}\n\nexport const getAttributeValues = async ({\n attributeId\n}: {\n attributeId: string\n}): Promise<IAttributeValue[]> => {\n const { data } = await api.get(`/attribute/${attributeId}/values`)\n return data\n}\n\nexport const createAttribute = async ({\n attribute\n}: {\n attribute: {\n name: string\n values: string[]\n productId: number\n }\n}): Promise<IAttribute> => {\n const { data } = await api.post('/attribute', attribute)\n return data\n}\n\nexport const createAttributesValuesBatch = async ({\n productId,\n attributeValues,\n}: {\n productId: number;\n attributeValues: {\n attribute: string;\n values: string[];\n }[];\n}): Promise<IAttributeValue[]> => {\n const { data } = await api.post(`/attribute/batch`, {\n productId,\n attributeValues,\n });\n return data;\n};\n\nexport const createAttributesForCategory = async ({\n attributes\n}: {\n attributes: {\n categoryId: string\n attributes: {\n name: string\n values: string[]\n pricePerGram?: number | null\n }[]\n }\n}): Promise<IAttribute> => {\n const { data } = await api.post(`/attribute/category/`, {\n categoryID: attributes.categoryId,\n attributes: attributes.attributes\n })\n return data\n}\n\nexport const updateAttribute = async ({\n attributeId,\n attribute\n}: {\n attributeId: string\n attribute: IAttribute\n}): Promise<IAttribute> => {\n const { data } = await api.put(`/attribute/${attributeId}`, attribute)\n return data\n}\n\nexport const updateAttributesForCategory = async ({\n categoryId,\n attributes\n}: {\n categoryId: string\n attributes: {\n attributes: string[]\n }\n}): Promise<IAttribute> => {\n const { data } = await api.put(`/attribute/category/${categoryId}`, attributes)\n return data\n}\n\nexport const deleteAttribute = async ({\n attributeId\n}: {\n attributeId: string\n}): Promise<IAttribute> => {\n const { data } = await api.delete(`/attribute/${attributeId}`)\n return data\n}\n\nexport const undeleteAttribute = async ({\n attributeId\n}: {\n attributeId: string\n}): Promise<IAttribute> => {\n const { data } = await api.patch(`/attribute/${attributeId}`)\n return data\n}\n\n//create attribute value\nexport const createAttributeValue = async ({\n attributeId,\n value\n}: {\n attributeId: number\n value: string\n}): Promise<IAttributeValue> => {\n const { data } = await api.post(`/attribute/${attributeId}/values`, {\n attributeID: attributeId,\n value\n })\n return data\n}\n","import type { ReactNode } from 'react';\nimport { notifications } from '@mantine/notifications';\nimport { Text } from '@mantine/core';\n\n// Icons are provided by the consuming app so this library stays icon-agnostic\nlet defaultSuccessIcon: ReactNode = undefined;\nlet defaultErrorIcon: ReactNode = undefined;\n\n/**\n * Configure default icons for success and error notifications.\n * Call this once at app startup (e.g. in your root layout) with your preferred icon library.\n * @example\n * // With lucide-react\n * configureNotificationIcons({ successIcon: <Check />, errorIcon: <X /> });\n * // With react-icons\n * configureNotificationIcons({ successIcon: <FiCheck />, errorIcon: <FiX /> });\n */\nexport const configureNotificationIcons = (config: {\n successIcon?: ReactNode;\n errorIcon?: ReactNode;\n}): void => {\n if (config.successIcon !== undefined) defaultSuccessIcon = config.successIcon;\n if (config.errorIcon !== undefined) defaultErrorIcon = config.errorIcon;\n};\n\nexport const successNotification = ({\n title,\n message,\n icon,\n}: {\n title: string;\n message: string;\n /** Override the default success icon for this call (optional) */\n icon?: ReactNode;\n}): void => {\n notifications.show({\n title: <Text>{title}</Text>,\n message: message,\n color: 'teal',\n icon: icon ?? defaultSuccessIcon,\n });\n};\n\nexport const errorNotification = ({\n title,\n message,\n icon,\n}: {\n title: string;\n message: string;\n /** Override the default error icon for this call (optional) */\n icon?: ReactNode;\n}): void => {\n notifications.show({\n title: <Text>{title}</Text>,\n message: message,\n color: 'red',\n icon: icon ?? defaultErrorIcon,\n });\n};\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getAttributes,\n getAttributesForSelect,\n getAttributeById,\n getAttributesByProductID,\n getAttributesByCategoryID,\n getAttributeValues,\n createAttribute,\n createAttributesValuesBatch,\n createAttributesForCategory,\n createAttributeValue,\n updateAttribute,\n updateAttributesForCategory,\n deleteAttribute,\n undeleteAttribute,\n getAttributesTable,\n} from \"../services/attributes.service\";\nimport type {\n IAttribute,\n IAttributeQueryParams,\n IAttributeResponse,\n IAttributeValue,\n} from \"../interfaces/attribute.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst attributeQueryKeys = {\n all: [\"attributes\"] as const,\n table: (params: IAttributeQueryParams = {}) => [...attributeQueryKeys.all, \"table\", { skip: params.skip, limit: params.limit, filters: params.filters ?? {} }] as const,\n lists: () => [...attributeQueryKeys.all, \"list\"] as const,\n list: (params: TableQueryParams) =>\n [\n ...attributeQueryKeys.lists(),\n { skip: params.skip, limit: params.limit, query: params.query },\n ] as const,\n details: () => [...attributeQueryKeys.all, \"detail\"] as const,\n detail: (id: string) => [...attributeQueryKeys.details(), id] as const,\n forSelect: () => [...attributeQueryKeys.all, \"select\"] as const,\n byProduct: (productId: string) =>\n [...attributeQueryKeys.all, \"product\", productId] as const,\n byCategory: (categoryId: string) =>\n [...attributeQueryKeys.all, \"category\", categoryId] as const,\n values: (attributeId: string) =>\n [...attributeQueryKeys.all, \"values\", attributeId] as const,\n};\n\nexport const attributes = {\n queries: {\n all: [\"attributes\"] as const,\n getAttributes: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getAttributes({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query ?? \"\",\n }),\n queryKey: attributeQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getAttributesTable: (params: IAttributeQueryParams = {}) =>\n queryOptions({\n queryFn: () => getAttributesTable({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n filters: params.filters ?? undefined,\n }),\n queryKey: attributeQueryKeys.table(params),\n staleTime: 30_000,\n }),\n getAttributesForSelect: () =>\n queryOptions({\n queryFn: getAttributesForSelect,\n queryKey: attributeQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n getAttributeById: (id: string) =>\n queryOptions({\n queryFn: () => getAttributeById({ attributeId: id }),\n queryKey: attributeQueryKeys.detail(id),\n enabled: !!id,\n staleTime: 5 * 60 * 1000,\n }),\n getAttributesByProductID: (productId: string) =>\n queryOptions({\n queryFn: () => getAttributesByProductID({ productId }),\n queryKey: attributeQueryKeys.byProduct(productId),\n enabled: !!productId,\n staleTime: 5 * 60 * 1000,\n }),\n getAttributesByCategoryID: (categoryId: string) =>\n queryOptions({\n queryFn: () => getAttributesByCategoryID({ categoryID: categoryId }),\n queryKey: attributeQueryKeys.byCategory(categoryId),\n enabled: !!categoryId,\n staleTime: 5 * 60 * 1000,\n }),\n getAttributeValues: (attributeId: string) =>\n queryOptions({\n queryFn: () => getAttributeValues({ attributeId }),\n queryKey: attributeQueryKeys.values(attributeId),\n enabled: !!attributeId,\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n createAttribute: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IAttribute,\n Error,\n { attribute: { name: string; values: string[]; productId: number } }\n > => ({\n mutationFn: createAttribute,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n successNotification({\n title: \"Atributo creado\",\n message: \"El atributo se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error al crear atributo\",\n message: error.message || \"No se pudo crear el atributo.\",\n });\n },\n }),\n\n createAttributesValuesBatch: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IAttributeValue[],\n Error,\n {\n productId: number;\n attributeValues: { attribute: string; values: string[] }[];\n }\n > => ({\n mutationFn: createAttributesValuesBatch,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n successNotification({\n title: \"Valores creados\",\n message: \"Los valores de atributos se han creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudieron crear los valores.\",\n });\n },\n }),\n\n createAttributesForCategory: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IAttribute,\n Error,\n {\n attributes: {\n categoryId: string;\n attributes: {\n name: string;\n values: string[];\n pricePerGram?: number | null;\n }[];\n };\n }\n > => ({\n mutationFn: createAttributesForCategory,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n successNotification({\n title: \"Atributos creados\",\n message: \"Los atributos para la categoría se han creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudieron crear los atributos.\",\n });\n },\n }),\n\n createAttributeValue: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IAttributeValue,\n Error,\n { attributeId: number; value: string }\n > => ({\n mutationFn: createAttributeValue,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n successNotification({\n title: \"Valor creado\",\n message: \"El valor del atributo se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el valor.\",\n });\n },\n }),\n\n updateAttribute: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IAttribute,\n Error,\n { attributeId: string; attribute: IAttribute }\n > => ({\n mutationFn: updateAttribute,\n onSuccess: (_, { attributeId }) => {\n queryClient.invalidateQueries({\n queryKey: attributeQueryKeys.detail(attributeId),\n });\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n successNotification({\n title: \"Atributo actualizado\",\n message: \"El atributo se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el atributo.\",\n });\n },\n }),\n\n updateAttributesForCategory: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IAttribute,\n Error,\n { categoryId: string; attributes: { attributes: string[] } }\n > => ({\n mutationFn: updateAttributesForCategory,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n successNotification({\n title: \"Atributos actualizados\",\n message:\n \"Los atributos de la categoría se han actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudieron actualizar los atributos.\",\n });\n },\n }),\n\n deleteAttribute: (\n queryClient: QueryClient,\n ): UseMutationOptions<IAttribute, Error, { attributeId: string }> => ({\n mutationFn: deleteAttribute,\n onSuccess: (_, { attributeId }) => {\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n queryClient.removeQueries({\n queryKey: attributeQueryKeys.detail(attributeId),\n });\n successNotification({\n title: \"Atributo eliminado\",\n message: \"El atributo se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el atributo.\",\n });\n },\n }),\n\n undeleteAttribute: (\n queryClient: QueryClient,\n ): UseMutationOptions<IAttribute, Error, { attributeId: string }> => ({\n mutationFn: undeleteAttribute,\n onSuccess: (_, { attributeId }) => {\n queryClient.invalidateQueries({\n queryKey: attributeQueryKeys.detail(attributeId),\n });\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n successNotification({\n title: \"Atributo restaurado\",\n message: \"El atributo se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el atributo.\",\n });\n },\n }),\n },\n};\n\nexport { attributeQueryKeys };\n","import type { AgentResponse, IUser, IUserForm, UserResponse } from '../interfaces/user.interface'\nimport { api } from './config'\n\ninterface UserQuery {\n skip?: number\n limit?: number\n query?: string\n roleId?: string\n}\n\nexport const getSellersWithShift = async (): Promise<AgentResponse> => {\n const { data } = await api.get<AgentResponse>(`user/getSellersWithShift/`)\n return data\n}\n\nexport const getSellersOfDayForSelect = async ({\n date\n}: {\n date: string\n}): Promise<AgentResponse> => {\n const { data } = await api.get<AgentResponse>(`user/getSellersOfDayForSelect/${date}`)\n return data\n}\n\nexport const getAllAgents = async (): Promise<AgentResponse> => {\n const { data } = await api.get<AgentResponse>('user/getallagents')\n return data\n}\n\nexport const getUsers = async ({\n skip = 0,\n limit = 10,\n query = '',\n roleId,\n}: UserQuery): Promise<UserResponse> => {\n const params = new URLSearchParams({\n skip: String(skip),\n limit: String(limit),\n ...(query && { query }),\n ...(roleId && { roleId }),\n });\n const { data } = await api.get<UserResponse>(`user/?${params}`)\n return data\n}\n\nexport const getUserById = async ({ userId }: { userId: number }): Promise<IUser> => {\n const { data } = await api.get<IUser>(`user/${userId}`)\n return data\n}\n\nexport const createUser = async ({ user }: { user: IUserForm }): Promise<void> => {\n await api.post('user/', user)\n}\n\nexport const updateUser = async ({\n userId,\n user\n}: {\n userId: number\n user: IUserForm\n}): Promise<void> => {\n await api.put(`user/${userId}`, user)\n}\n\nexport const deleteUser = async ({ userId }: { userId: number }): Promise<void> => {\n await api.delete(`user/${userId}`)\n}\nexport const restoreUser = async ({ userId }: { userId: number }): Promise<void> => {\n await api.patch(`user/${userId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getUsers,\n getUserById,\n getSellersWithShift,\n getSellersOfDayForSelect,\n getAllAgents,\n createUser,\n updateUser,\n deleteUser,\n restoreUser,\n} from \"../services/user.service\";\nimport type {\n IUserForm,\n} from \"../interfaces/user.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst userQueryKeys = {\n all: [\"users\"] as const,\n lists: () => [...userQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...userQueryKeys.lists(), { filters: params }] as const,\n details: () => [...userQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...userQueryKeys.details(), id] as const,\n sellersWithShift: () => [...userQueryKeys.all, \"sellersWithShift\"] as const,\n sellersOfDay: (date: string) =>\n [...userQueryKeys.all, \"sellersOfDay\", date] as const,\n agents: () => [...userQueryKeys.all, \"agents\"] as const,\n};\n\nexport const users = {\n queries: {\n all: [\"users\"] as const,\n getUsers: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getUsers({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: userQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getUsersForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getUsers({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n roleId: params.columnFilters\n ?.find((f) => f.id === \"tblRoles_tblUsers_roleIDTotblRoles.role\")\n ?.value as string | undefined,\n }),\n queryKey: userQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getUserById: (id: number) =>\n queryOptions({\n queryFn: () => getUserById({ userId: id }),\n queryKey: userQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getSellersWithShift: () =>\n queryOptions({\n queryFn: getSellersWithShift,\n queryKey: userQueryKeys.sellersWithShift(),\n staleTime: 30_000,\n }),\n getSellersOfDayForSelect: (date: string) =>\n queryOptions({\n queryFn: () => getSellersOfDayForSelect({ date }),\n queryKey: userQueryKeys.sellersOfDay(date),\n enabled: !!date,\n staleTime: 5 * 60 * 1000,\n }),\n getAllAgents: () =>\n queryOptions({\n queryFn: getAllAgents,\n queryKey: userQueryKeys.agents(),\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n createUser: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { user: IUserForm }> => ({\n mutationFn: createUser,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: userQueryKeys.all });\n successNotification({\n title: \"Usuario creado\",\n message: \"El usuario se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el usuario.\",\n });\n },\n }),\n\n updateUser: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { userId: number; user: IUserForm }> => ({\n mutationFn: updateUser,\n onSuccess: (_, { userId }) => {\n queryClient.invalidateQueries({\n queryKey: userQueryKeys.detail(userId),\n });\n queryClient.invalidateQueries({ queryKey: userQueryKeys.lists() });\n successNotification({\n title: \"Usuario actualizado\",\n message: \"El usuario se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el usuario.\",\n });\n },\n }),\n\n deleteUser: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { userId: number }> => ({\n mutationFn: deleteUser,\n onSuccess: (_, { userId }) => {\n queryClient.invalidateQueries({ queryKey: userQueryKeys.lists() });\n queryClient.removeQueries({\n queryKey: userQueryKeys.detail(userId),\n });\n successNotification({\n title: \"Usuario eliminado\",\n message: \"El usuario se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el usuario.\",\n });\n },\n }),\n\n restoreUser: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { userId: number }> => ({\n mutationFn: restoreUser,\n onSuccess: (_, { userId }) => {\n queryClient.invalidateQueries({\n queryKey: userQueryKeys.detail(userId),\n });\n queryClient.invalidateQueries({ queryKey: userQueryKeys.lists() });\n successNotification({\n title: \"Usuario restaurado\",\n message: \"El usuario se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el usuario.\",\n });\n },\n }),\n },\n};\n\nexport { userQueryKeys };\n","import type {\n ICategory,\n ICategoryResponse,\n} from '../interfaces/category.interface'\nimport { api } from './config'\n\ninterface CategoryQuery {\n skip?: number\n limit?: number\n query?: string\n}\n\nexport const getCategoriesForSelect = async (): Promise<ICategory[]> => {\n const { data } = await api.get<ICategory[]>('category/categoriesSelect')\n return data\n}\n\nexport const getAllCategories = async (): Promise<ICategory[]> => {\n const { data } = await api.get<ICategory[]>('category/')\n return data\n}\n\nexport const getCategories = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: CategoryQuery): Promise<ICategoryResponse> => {\n const { data } = await api.get<ICategoryResponse>(\n `category/categoriesTable?skip=${skip}&limit=${limit}&query=${query}`\n )\n\n return data\n}\n\nexport const getCategoryById = async ({\n categoryId\n}: {\n categoryId: number\n}): Promise<ICategory> => {\n const { data } = await api.get(`/category/${categoryId}`)\n return data.data\n}\n\nexport const updateCategory = async ({\n categoryId,\n category\n}: {\n categoryId: number\n category: ICategory\n}): Promise<ICategory> => {\n const { data } = await api.put<ICategory>(`/category/${categoryId}`, category)\n return data\n}\n\nexport const createCategory = async ({ category }: { category: ICategory }): Promise<ICategory> => {\n const { data } = await api.post<ICategory>('category/', category)\n return data\n}\n\nexport const deleteCategory = async ({ categoryId }: { categoryId: number }): Promise<void> => {\n await api.delete(`/category/${categoryId}`)\n}\n\nexport const restoreCategory = async ({ categoryId }: { categoryId: number }): Promise<void> => {\n await api.patch(`/category/${categoryId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getCategories,\n getCategoryById,\n getCategoriesForSelect,\n getAllCategories,\n createCategory,\n updateCategory,\n deleteCategory,\n restoreCategory,\n} from \"../services/category.service\";\nimport type {\n ICategory,\n ICategoryResponse,\n} from \"../interfaces/category.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst categoryQueryKeys = {\n all: [\"categories\"] as const,\n lists: () => [...categoryQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...categoryQueryKeys.lists(), { filters: params }] as const,\n details: () => [...categoryQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...categoryQueryKeys.details(), id] as const,\n forSelect: () => [...categoryQueryKeys.all, \"select\"] as const,\n allList: () => [...categoryQueryKeys.all, \"all\"] as const,\n};\n\nexport const categories = {\n queries: {\n all: [\"categories\"] as const,\n getCategories: (params: {\n skip?: number;\n limit?: number;\n query?: string | null;\n }) =>\n queryOptions({\n queryFn: () =>\n getCategories({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: categoryQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getCategoriesForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getCategories({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: categoryQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getCategoryById: (id: number) =>\n queryOptions({\n queryFn: () => getCategoryById({ categoryId: id }),\n queryKey: categoryQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getCategoriesForSelect: () =>\n queryOptions({\n queryFn: getCategoriesForSelect,\n queryKey: categoryQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n getAllCategories: () =>\n queryOptions({\n queryFn: getAllCategories,\n queryKey: categoryQueryKeys.allList(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createCategory: (\n queryClient: QueryClient,\n ): UseMutationOptions<ICategory, Error, { category: ICategory }> => ({\n mutationFn: createCategory,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: categoryQueryKeys.all });\n successNotification({\n title: \"Categoría creada\",\n message: \"La categoría se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear la categoría.\",\n });\n },\n }),\n\n updateCategory: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n ICategory,\n Error,\n { categoryId: number; category: ICategory }\n > => ({\n mutationFn: updateCategory,\n onSuccess: (_, { categoryId }) => {\n queryClient.invalidateQueries({\n queryKey: categoryQueryKeys.detail(categoryId),\n });\n queryClient.invalidateQueries({ queryKey: categoryQueryKeys.lists() });\n successNotification({\n title: \"Categoría actualizada\",\n message: \"La categoría se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar la categoría.\",\n });\n },\n }),\n\n deleteCategory: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { categoryId: number }> => ({\n mutationFn: deleteCategory,\n onSuccess: (_, { categoryId }) => {\n queryClient.invalidateQueries({ queryKey: categoryQueryKeys.lists() });\n queryClient.removeQueries({\n queryKey: categoryQueryKeys.detail(categoryId),\n });\n successNotification({\n title: \"Categoría eliminada\",\n message: \"La categoría se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar la categoría.\",\n });\n },\n }),\n\n restoreCategory: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { categoryId: number }> => ({\n mutationFn: restoreCategory,\n onSuccess: (_, { categoryId }) => {\n queryClient.invalidateQueries({\n queryKey: categoryQueryKeys.detail(categoryId),\n });\n queryClient.invalidateQueries({ queryKey: categoryQueryKeys.lists() });\n successNotification({\n title: \"Categoría restaurada\",\n message: \"La categoría se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar la categoría.\",\n });\n },\n }),\n },\n};\n\nexport { categoryQueryKeys };\n","import type { IWareHouse, IWareHouseResponse } from '../interfaces/warehouse.interface'\nimport { api } from './config'\n\ninterface WareHouseQuery {\n skip?: number\n limit?: number\n query?: string\n}\n\nexport interface WarehouseResponse {\n wareHouseID: number\n wareHouse: string\n wareHouseWithLocation: string\n physicialLocationID: number\n isShowroom: boolean\n syncStatusID: number\n masterCodeID: null\n savedBy: null\n savedDate: null\n deletedBy: null\n deletedDate: null\n}\n\nexport const getWarehousesForSelect = async (): Promise<WarehouseResponse[]> => {\n const { data } = await api.get<WarehouseResponse[]>('warehouse/warehousesForSelect')\n return data\n}\n\nexport const getWarehouses = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: WareHouseQuery): Promise<IWareHouseResponse> => {\n const { data } = await api.get<IWareHouseResponse>(\n `warehouse/warehouses?skip=${skip}&limit=${limit}&query=${query}`\n )\n return data\n}\n\nexport const getWarehouseById = async ({\n warehouseId\n}: {\n warehouseId: number\n}): Promise<IWareHouse> => {\n const { data } = await api.get(`/warehouse/${warehouseId}`)\n return data.data\n}\n\nexport const updateWarehouse = async ({\n warehouseId,\n warehouse\n}: {\n warehouseId: number\n warehouse: FormData\n}): Promise<IWareHouse> => {\n const { data } = await api.put<IWareHouse>(`/warehouse/${warehouseId}`, warehouse, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const createWareHouse = async (warehouse: FormData): Promise<IWareHouse> => {\n const { data } = await api.post<IWareHouse>('warehouse/', warehouse, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const deleteWarehouse = async ({\n warehouseId\n}: {\n warehouseId: number\n}): Promise<void> => {\n await api.delete(`/warehouse/${warehouseId}`)\n}\n\nexport const restoreWarehouse = async ({\n warehouseId\n}: {\n warehouseId: number\n}): Promise<void> => {\n await api.patch(`/warehouse/${warehouseId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getWarehouses,\n getWarehouseById,\n getWarehousesForSelect,\n createWareHouse,\n updateWarehouse,\n deleteWarehouse,\n restoreWarehouse,\n} from \"../services/warehouse.service\";\nimport type { IWareHouse, IWareHouseResponse } from \"../interfaces/warehouse.interface\";\nimport type { WarehouseResponse } from \"../services/warehouse.service\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst warehouseQueryKeys = {\n all: [\"warehouses\"] as const,\n lists: () => [...warehouseQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...warehouseQueryKeys.lists(), { filters: params }] as const,\n details: () => [...warehouseQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...warehouseQueryKeys.details(), id] as const,\n forSelect: () => [...warehouseQueryKeys.all, \"select\"] as const,\n};\n\nexport const warehouses = {\n queries: {\n all: [\"warehouses\"] as const,\n getWarehouses: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getWarehouses({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: warehouseQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getWarehousesForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getWarehouses({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: warehouseQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getWarehouseById: (id: number) =>\n queryOptions({\n queryFn: () => getWarehouseById({ warehouseId: id }),\n queryKey: warehouseQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getWarehousesForSelect: () =>\n queryOptions({\n queryFn: getWarehousesForSelect,\n queryKey: warehouseQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createWarehouse: (\n queryClient: QueryClient,\n ): UseMutationOptions<IWareHouse, Error, FormData> => ({\n mutationFn: createWareHouse,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: warehouseQueryKeys.all });\n successNotification({\n title: \"Almacén creado\",\n message: \"El almacén se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el almacén.\",\n });\n },\n }),\n updateWarehouse: (\n queryClient: QueryClient,\n ): UseMutationOptions<IWareHouse, Error, { warehouseId: number; warehouse: FormData }> => ({\n mutationFn: updateWarehouse,\n onSuccess: (_, { warehouseId }) => {\n queryClient.invalidateQueries({ queryKey: warehouseQueryKeys.detail(warehouseId) });\n queryClient.invalidateQueries({ queryKey: warehouseQueryKeys.lists() });\n successNotification({\n title: \"Almacén actualizado\",\n message: \"El almacén se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el almacén.\",\n });\n },\n }),\n deleteWarehouse: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { warehouseId: number }> => ({\n mutationFn: deleteWarehouse,\n onSuccess: (_, { warehouseId }) => {\n queryClient.invalidateQueries({ queryKey: warehouseQueryKeys.lists() });\n queryClient.removeQueries({ queryKey: warehouseQueryKeys.detail(warehouseId) });\n successNotification({\n title: \"Almacén eliminado\",\n message: \"El almacén se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el almacén.\",\n });\n },\n }),\n restoreWarehouse: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { warehouseId: number }> => ({\n mutationFn: restoreWarehouse,\n onSuccess: (_, { warehouseId }) => {\n queryClient.invalidateQueries({ queryKey: warehouseQueryKeys.detail(warehouseId) });\n queryClient.invalidateQueries({ queryKey: warehouseQueryKeys.lists() });\n successNotification({\n title: \"Almacén restaurado\",\n message: \"El almacén se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el almacén.\",\n });\n },\n }),\n },\n};\n\nexport { warehouseQueryKeys };\n","import type {\n IClient,\n IClientRequest,\n IClientResponse,\n IClientResponseById\n} from '../interfaces/client.interface'\nimport { api } from './config'\n\nexport const getAllClients = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: {\n skip: number\n limit: number\n query?: string\n}): Promise<IClientResponse> => {\n const { data } = await api.get<IClientResponse>(\n `client/?skip=${skip}&limit=${limit}&query=${query}`\n )\n return data\n}\n\nexport const getClientsForSelect = async (): Promise<IClient[]> => {\n const { data } = await api.get<IClient[]>('client/select')\n return data\n}\n\nexport const getClientById = async ({\n clientId\n}: {\n clientId: number\n}): Promise<IClientResponseById> => {\n const { data } = await api.get<IClientResponseById>(`client/${clientId}`)\n return data\n}\n\nexport const createClient = async (client: IClientRequest): Promise<IClientResponse> => {\n const { data } = await api.post<IClientResponse>('client/', client)\n return data\n}\n\nexport const updateClient = async ({\n client,\n id\n}: {\n id: string\n client: IClient\n}): Promise<IClientResponse> => {\n const { data } = await api.put<IClientResponse>(`client/${id}`, client)\n return data\n}\n\nexport const deleteClient = async ({\n clientId\n}: {\n clientId: number\n}): Promise<IClientResponse> => {\n const { data } = await api.delete<IClientResponse>(`client/${clientId}`)\n return data\n}\n\nexport const restoreClient = async ({\n clientId\n}: {\n clientId: number\n}): Promise<IClientResponse> => {\n const { data } = await api.patch<IClientResponse>(`client/${clientId}`)\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getAllClients,\n getClientById,\n getClientsForSelect,\n createClient,\n updateClient,\n deleteClient,\n restoreClient,\n} from \"../services/client.service\";\nimport type {\n IClient,\n IClientRequest,\n IClientResponse,\n IClientResponseById,\n} from \"../interfaces/client.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst clientQueryKeys = {\n all: [\"clients\"] as const,\n lists: () => [...clientQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...clientQueryKeys.lists(), { filters: params }] as const,\n details: () => [...clientQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...clientQueryKeys.details(), id] as const,\n forSelect: () => [...clientQueryKeys.all, \"select\"] as const,\n};\n\nexport const clients = {\n queries: {\n all: [\"clients\"] as const,\n getClients: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getAllClients({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: clientQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getClientsForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getAllClients({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: clientQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getClientById: (id: number) =>\n queryOptions({\n queryFn: () => getClientById({ clientId: id }),\n queryKey: clientQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getClientsForSelect: () =>\n queryOptions({\n queryFn: getClientsForSelect,\n queryKey: clientQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createClient: (\n queryClient: QueryClient,\n ): UseMutationOptions<IClientResponse, Error, IClientRequest> => ({\n mutationFn: createClient,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: clientQueryKeys.all });\n successNotification({\n title: \"Cliente creado\",\n message: \"El cliente se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el cliente.\",\n });\n },\n }),\n updateClient: (\n queryClient: QueryClient,\n ): UseMutationOptions<IClientResponse, Error, { id: string; client: IClient }> => ({\n mutationFn: updateClient,\n onSuccess: (_, { id }) => {\n queryClient.invalidateQueries({ queryKey: clientQueryKeys.details() });\n queryClient.invalidateQueries({ queryKey: clientQueryKeys.lists() });\n successNotification({\n title: \"Cliente actualizado\",\n message: \"El cliente se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el cliente.\",\n });\n },\n }),\n deleteClient: (\n queryClient: QueryClient,\n ): UseMutationOptions<IClientResponse, Error, { clientId: number }> => ({\n mutationFn: deleteClient,\n onSuccess: (_, { clientId }) => {\n queryClient.invalidateQueries({ queryKey: clientQueryKeys.lists() });\n queryClient.removeQueries({ queryKey: clientQueryKeys.detail(clientId) });\n successNotification({\n title: \"Cliente eliminado\",\n message: \"El cliente se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el cliente.\",\n });\n },\n }),\n restoreClient: (\n queryClient: QueryClient,\n ): UseMutationOptions<IClientResponse, Error, { clientId: number }> => ({\n mutationFn: restoreClient,\n onSuccess: (_, { clientId }) => {\n queryClient.invalidateQueries({ queryKey: clientQueryKeys.detail(clientId) });\n queryClient.invalidateQueries({ queryKey: clientQueryKeys.lists() });\n successNotification({\n title: \"Cliente restaurado\",\n message: \"El cliente se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el cliente.\",\n });\n },\n }),\n },\n};\n\nexport { clientQueryKeys };\n","import type {\n IBankTerminal,\n IBankTerminalResponse,\n IBankTerminalForm,\n BankTerminalQuery,\n BankTerminalResponse\n} from '../interfaces/bankTerminal.interface'\nimport { api } from './config'\n\nexport const getBankTerminalsForSelect = async (): Promise<BankTerminalResponse[]> => {\n const { data } = await api.get<BankTerminalResponse[]>('bank-terminals/bankTerminalsSelect')\n return data\n}\n\nexport const getAllBankTerminals = async (): Promise<BankTerminalResponse[]> => {\n const { data } = await api.get<BankTerminalResponse[]>('bank-terminals/')\n return data\n}\n\nexport const getBankTerminals = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: BankTerminalQuery): Promise<IBankTerminalResponse> => {\n const { data } = await api.get<IBankTerminalResponse>(\n `bank-terminals/bankTerminalsTable/?skip=${skip}&limit=${limit}&query=${query}`\n )\n\n return data\n}\n\nexport const getBankTerminalById = async ({\n terminalId\n}: {\n terminalId: number\n}): Promise<IBankTerminal> => {\n const { data } = await api.get(`/bank-terminals/${terminalId}`)\n return data.data\n}\n\nexport const updateBankTerminal = async ({\n terminalId,\n terminal\n}: {\n terminalId: number\n terminal: IBankTerminalForm\n}): Promise<IBankTerminal> => {\n const { data } = await api.put<IBankTerminal>(`/bank-terminals/${terminalId}`, terminal)\n return data\n}\n\nexport const createBankTerminal = async ({\n terminal\n}: {\n terminal: IBankTerminalForm\n}): Promise<IBankTerminal> => {\n const { data } = await api.post<IBankTerminal>('bank-terminals/', terminal)\n return data\n}\n\nexport const deleteBankTerminal = async ({ terminalId }: { terminalId: number }): Promise<void> => {\n await api.delete(`/bank-terminals/${terminalId}`)\n}\n\nexport const restoreBankTerminal = async ({\n terminalId\n}: {\n terminalId: number\n}): Promise<void> => {\n await api.patch(`/bank-terminals/${terminalId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getBankTerminals,\n getBankTerminalById,\n getBankTerminalsForSelect,\n getAllBankTerminals,\n createBankTerminal,\n updateBankTerminal,\n deleteBankTerminal,\n restoreBankTerminal,\n} from \"../services/bankTerminal.service\";\nimport type {\n IBankTerminal,\n IBankTerminalForm,\n IBankTerminalResponse,\n} from \"../interfaces/bankTerminal.interface\";\nimport type { BankTerminalResponse } from \"../interfaces/bankTerminal.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst bankTerminalQueryKeys = {\n all: [\"bankTerminals\"] as const,\n lists: () => [...bankTerminalQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...bankTerminalQueryKeys.lists(), { filters: params }] as const,\n details: () => [...bankTerminalQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...bankTerminalQueryKeys.details(), id] as const,\n forSelect: () => [...bankTerminalQueryKeys.all, \"select\"] as const,\n allList: () => [...bankTerminalQueryKeys.all, \"all\"] as const,\n};\n\nexport const bankTerminals = {\n queries: {\n all: [\"bankTerminals\"] as const,\n getBankTerminals: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getBankTerminals({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: bankTerminalQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getBankTerminalsForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getBankTerminals({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: bankTerminalQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getBankTerminalById: (id: number) =>\n queryOptions({\n queryFn: () => getBankTerminalById({ terminalId: id }),\n queryKey: bankTerminalQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getBankTerminalsForSelect: () =>\n queryOptions({\n queryFn: getBankTerminalsForSelect,\n queryKey: bankTerminalQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n getAllBankTerminals: () =>\n queryOptions({\n queryFn: getAllBankTerminals,\n queryKey: bankTerminalQueryKeys.allList(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createBankTerminal: (\n queryClient: QueryClient,\n ): UseMutationOptions<IBankTerminal, Error, { terminal: IBankTerminalForm }> => ({\n mutationFn: createBankTerminal,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: bankTerminalQueryKeys.all });\n successNotification({\n title: \"Terminal creado\",\n message: \"El terminal se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el terminal.\",\n });\n },\n }),\n updateBankTerminal: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IBankTerminal,\n Error,\n { terminalId: number; terminal: IBankTerminalForm }\n > => ({\n mutationFn: updateBankTerminal,\n onSuccess: (_, { terminalId }) => {\n queryClient.invalidateQueries({ queryKey: bankTerminalQueryKeys.detail(terminalId) });\n queryClient.invalidateQueries({ queryKey: bankTerminalQueryKeys.lists() });\n successNotification({\n title: \"Terminal actualizado\",\n message: \"El terminal se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el terminal.\",\n });\n },\n }),\n deleteBankTerminal: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { terminalId: number }> => ({\n mutationFn: deleteBankTerminal,\n onSuccess: (_, { terminalId }) => {\n queryClient.invalidateQueries({ queryKey: bankTerminalQueryKeys.lists() });\n queryClient.removeQueries({ queryKey: bankTerminalQueryKeys.detail(terminalId) });\n successNotification({\n title: \"Terminal eliminado\",\n message: \"El terminal se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el terminal.\",\n });\n },\n }),\n restoreBankTerminal: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { terminalId: number }> => ({\n mutationFn: restoreBankTerminal,\n onSuccess: (_, { terminalId }) => {\n queryClient.invalidateQueries({ queryKey: bankTerminalQueryKeys.detail(terminalId) });\n queryClient.invalidateQueries({ queryKey: bankTerminalQueryKeys.lists() });\n successNotification({\n title: \"Terminal restaurado\",\n message: \"El terminal se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el terminal.\",\n });\n },\n }),\n },\n};\n\nexport { bankTerminalQueryKeys };\n","import type { IBatch, IBatchResponse } from '../interfaces/batch.interface'\nimport { api } from './config'\n\ninterface BatchQuery {\n skip?: number\n limit?: number\n query?: string\n productId?: number\n}\n\nexport const getBatchesForSelect = async (): Promise<IBatch[]> => {\n const { data } = await api.get<IBatch[]>('batch/batches-for-select')\n return data\n}\n\nexport const getBatches = async ({\n skip = 0,\n limit = 10,\n query = '',\n productId = 0\n}: BatchQuery): Promise<IBatchResponse> => {\n const { data } = await api.get<IBatchResponse>(\n `batch?skip=${skip}&limit=${limit}&query=${query}&productID=${productId}`\n )\n return data\n}\n\nexport const createBatch = async (batch: FormData): Promise<IBatch> => {\n const { data } = await api.post<IBatch>('batch/', batch)\n return data\n}\n\nexport const createBatchAndUpdateOtherBatches = async (batch: FormData): Promise<IBatch> => {\n const { data } = await api.post<IBatch>('batch/create-batch-and-update-other-batches', batch)\n return data\n}\n\nexport const getMatchedBatches = async ({\n productDetailId\n}: {\n productDetailId: number\n}): Promise<IBatch[]> => {\n const { data } = await api.get<IBatch[]>(\n `batch/matched-batches?productDetailID=${productDetailId}`\n )\n return data\n}\n\nexport interface UpdateBatchData {\n unitCost?: number\n unitSellingPrice?: number\n profitPercentage?: number\n}\n\nexport const updateBatch = async ({\n batchId,\n batchData\n}: {\n batchId: number\n batchData: UpdateBatchData\n}): Promise<IBatch> => {\n const { data } = await api.put<IBatch>(`batch/${batchId}`, batchData)\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getBatches,\n getBatchesForSelect,\n getMatchedBatches,\n createBatch,\n createBatchAndUpdateOtherBatches,\n updateBatch,\n type UpdateBatchData,\n} from \"../services/batch.service\";\nimport type { IBatch, IBatchResponse } from \"../interfaces/batch.interface\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst batchQueryKeys = {\n all: [\"batches\"] as const,\n lists: () => [...batchQueryKeys.all, \"list\"] as const,\n list: (params: {\n skip?: number;\n limit?: number;\n query?: string | null;\n productId?: number;\n }) => [...batchQueryKeys.lists(), { filters: params }] as const,\n forSelect: () => [...batchQueryKeys.all, \"select\"] as const,\n matched: (productDetailId: number) =>\n [...batchQueryKeys.all, \"matched\", productDetailId] as const,\n};\n\nexport const batches = {\n queries: {\n all: [\"batches\"] as const,\n getBatches: (params: {\n skip?: number;\n limit?: number;\n query?: string | null;\n productId?: number;\n }) =>\n queryOptions({\n queryFn: () =>\n getBatches({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n productId: params.productId,\n }),\n queryKey: batchQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getBatchesForSelect: () =>\n queryOptions({\n queryFn: getBatchesForSelect,\n queryKey: batchQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n getMatchedBatches: (productDetailId: number) =>\n queryOptions({\n queryFn: () => getMatchedBatches({ productDetailId }),\n queryKey: batchQueryKeys.matched(productDetailId),\n enabled: !!productDetailId && productDetailId > 0,\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n createBatch: (\n queryClient: QueryClient,\n ): UseMutationOptions<IBatch, Error, FormData> => ({\n mutationFn: createBatch,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: batchQueryKeys.all });\n successNotification({\n title: \"Lote creado\",\n message: \"El lote se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el lote.\",\n });\n },\n }),\n createBatchAndUpdateOtherBatches: (\n queryClient: QueryClient,\n ): UseMutationOptions<IBatch, Error, FormData> => ({\n mutationFn: createBatchAndUpdateOtherBatches,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: batchQueryKeys.all });\n successNotification({\n title: \"Lote creado\",\n message: \"El lote se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el lote.\",\n });\n },\n }),\n updateBatch: (\n queryClient: QueryClient,\n ): UseMutationOptions<IBatch, Error, { batchId: number; batchData: UpdateBatchData }> => ({\n mutationFn: updateBatch,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: batchQueryKeys.all });\n successNotification({\n title: \"Lote actualizado\",\n message: \"El lote se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el lote.\",\n });\n },\n }),\n },\n};\n\nexport { batchQueryKeys };\n","import type { IRole } from '../interfaces/role.interface'\nimport { api } from './config'\n\nexport const getRoles = async (): Promise<IRole[]> => {\n const response = await api.get('/role')\n return response.data\n}\n\nexport const getRoleByID = async ({\n roleId\n}: {\n roleId: number\n}): Promise<IRole> => {\n const response = await api.get(`/role/${roleId}`)\n return response.data\n}\n\nexport const createRole = async (role: IRole): Promise<IRole> => {\n const response = await api.post('/role', role)\n return response.data\n}\n\nexport const updateRole = async ({\n roleId,\n role\n}: {\n roleId: number\n role: IRole\n}): Promise<IRole> => {\n const response = await api.put(`/role/${roleId}`, role)\n return response.data\n}\n\nexport const deleteRole = async ({\n roleId\n}: {\n roleId: number\n}): Promise<void> => {\n await api.delete(`/role/${roleId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getRoles,\n getRoleByID,\n createRole,\n updateRole,\n deleteRole,\n} from \"../services/role.service\";\nimport type { IRole } from \"../interfaces/role.interface\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst roleQueryKeys = {\n all: [\"roles\"] as const,\n lists: () => [...roleQueryKeys.all, \"list\"] as const,\n details: () => [...roleQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...roleQueryKeys.details(), id] as const,\n};\n\nexport const roles = {\n queries: {\n all: [\"roles\"] as const,\n getRoles: () =>\n queryOptions({\n queryFn: getRoles,\n queryKey: roleQueryKeys.lists(),\n staleTime: 10 * 60 * 1000,\n }),\n getRoleById: (id: number) =>\n queryOptions({\n queryFn: () => getRoleByID({ roleId: id }),\n queryKey: roleQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n createRole: (\n queryClient: QueryClient,\n ): UseMutationOptions<IRole, Error, IRole> => ({\n mutationFn: createRole,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: roleQueryKeys.all });\n successNotification({\n title: \"Rol creado\",\n message: \"El rol se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el rol.\",\n });\n },\n }),\n updateRole: (\n queryClient: QueryClient,\n ): UseMutationOptions<IRole, Error, { roleId: number; role: IRole }> => ({\n mutationFn: updateRole,\n onSuccess: (_, { roleId }) => {\n queryClient.invalidateQueries({ queryKey: roleQueryKeys.detail(roleId) });\n queryClient.invalidateQueries({ queryKey: roleQueryKeys.lists() });\n successNotification({\n title: \"Rol actualizado\",\n message: \"El rol se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el rol.\",\n });\n },\n }),\n deleteRole: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { roleId: number }> => ({\n mutationFn: deleteRole,\n onSuccess: (_, { roleId }) => {\n queryClient.invalidateQueries({ queryKey: roleQueryKeys.lists() });\n queryClient.removeQueries({ queryKey: roleQueryKeys.detail(roleId) });\n successNotification({\n title: \"Rol eliminado\",\n message: \"El rol se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el rol.\",\n });\n },\n }),\n },\n};\n\nexport { roleQueryKeys };\n","import type {\n IProvider,\n IProviderForSelect,\n IProviderRequest,\n IProviderResponse\n} from '../interfaces/provider.interface'\nimport { api } from './config'\n\nexport const getAllProviders = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: {\n skip: number\n limit: number\n query?: string\n}): Promise<IProviderResponse> => {\n const { data } = await api.get<IProviderResponse>(\n `provider/?skip=${skip}&limit=${limit}&query=${query}`\n )\n return data\n}\n\nexport const getProviderById = async ({\n providerId\n}: {\n providerId: number\n}): Promise<IProvider> => {\n const { data } = await api.get<IProvider>(`provider/${providerId}`)\n return data\n}\n\nexport const getProvidersForSelect = async (): Promise<IProviderForSelect[]> => {\n const { data } = await api.get<IProviderForSelect[]>('provider/providersForSelect')\n return data\n}\n\nexport const createProvider = async (provider: IProviderRequest): Promise<IProviderResponse> => {\n const { data } = await api.post<IProviderResponse>('provider/', provider)\n return data\n}\n\nexport const updateProvider = async ({\n providerId,\n provider\n}: {\n providerId: string\n provider: IProvider\n}): Promise<IProviderResponse> => {\n const { data } = await api.put<IProviderResponse>(`provider/${providerId}`, provider)\n return data\n}\n\nexport const deleteProvider = async ({\n providerId\n}: {\n providerId: number\n}): Promise<IProviderResponse> => {\n const { data } = await api.delete<IProviderResponse>(`provider/${providerId}`)\n return data\n}\n\nexport const restoreProvider = async ({\n providerId\n}: {\n providerId: number\n}): Promise<IProviderResponse> => {\n const { data } = await api.patch<IProviderResponse>(`provider/${providerId}`)\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getAllProviders,\n getProviderById,\n getProvidersForSelect,\n createProvider,\n updateProvider,\n deleteProvider,\n restoreProvider,\n} from \"../services/provider.service\";\nimport type {\n IProvider,\n IProviderForSelect,\n IProviderRequest,\n IProviderResponse,\n} from \"../interfaces/provider.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst providerQueryKeys = {\n all: [\"providers\"] as const,\n lists: () => [...providerQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...providerQueryKeys.lists(), { filters: params }] as const,\n details: () => [...providerQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...providerQueryKeys.details(), id] as const,\n forSelect: () => [...providerQueryKeys.all, \"select\"] as const,\n};\n\nexport const providers = {\n queries: {\n all: [\"providers\"] as const,\n getProviders: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getAllProviders({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: providerQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getProvidersForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getAllProviders({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: providerQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getProviderById: (id: number) =>\n queryOptions({\n queryFn: () => getProviderById({ providerId: id }),\n queryKey: providerQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getProvidersForSelect: () =>\n queryOptions({\n queryFn: getProvidersForSelect,\n queryKey: providerQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createProvider: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProviderResponse, Error, IProviderRequest> => ({\n mutationFn: createProvider,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: providerQueryKeys.all });\n successNotification({\n title: \"Proveedor creado\",\n message: \"El proveedor se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el proveedor.\",\n });\n },\n }),\n updateProvider: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IProviderResponse,\n Error,\n { providerId: string; provider: IProvider }\n > => ({\n mutationFn: updateProvider,\n onSuccess: (_, { providerId }) => {\n const id = parseInt(providerId, 10);\n if (!isNaN(id)) {\n queryClient.invalidateQueries({ queryKey: providerQueryKeys.detail(id) });\n }\n queryClient.invalidateQueries({ queryKey: providerQueryKeys.lists() });\n successNotification({\n title: \"Proveedor actualizado\",\n message: \"El proveedor se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el proveedor.\",\n });\n },\n }),\n deleteProvider: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProviderResponse, Error, { providerId: number }> => ({\n mutationFn: deleteProvider,\n onSuccess: (_, { providerId }) => {\n queryClient.invalidateQueries({ queryKey: providerQueryKeys.lists() });\n queryClient.removeQueries({ queryKey: providerQueryKeys.detail(providerId) });\n successNotification({\n title: \"Proveedor eliminado\",\n message: \"El proveedor se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el proveedor.\",\n });\n },\n }),\n restoreProvider: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProviderResponse, Error, { providerId: number }> => ({\n mutationFn: restoreProvider,\n onSuccess: (_, { providerId }) => {\n queryClient.invalidateQueries({ queryKey: providerQueryKeys.detail(providerId) });\n queryClient.invalidateQueries({ queryKey: providerQueryKeys.lists() });\n successNotification({\n title: \"Proveedor restaurado\",\n message: \"El proveedor se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el proveedor.\",\n });\n },\n }),\n },\n};\n\nexport { providerQueryKeys };\n","import type { ILocation, ILocationResponse } from '../interfaces/location.interface'\nimport { api } from './config'\n\ninterface LocationQuery {\n skip?: number\n limit?: number\n query?: string\n}\n\nexport interface LocationResponse {\n physicalLocationID: number\n name: string\n addressID: number\n isOpen: boolean\n syncStatusID: number\n masterCodeID: null\n savedBy: null\n savedDate: null\n deletedBy: null\n deletedDate: null\n}\n\nexport const getAllLocations = async (): Promise<LocationResponse[]> => {\n const { data } = await api.get<LocationResponse[]>('location/')\n return data\n}\n\nexport const getLocationsForSelect = async (): Promise<LocationResponse[]> => {\n const { data } = await api.get<LocationResponse[]>('location/locationsForSelect')\n return data\n}\n\nexport const getLocations = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: LocationQuery): Promise<ILocationResponse> => {\n const { data } = await api.get<ILocationResponse>(\n `location/locations?skip=${skip}&limit=${limit}&query=${query}`\n )\n return data\n}\n\nexport const getLocationById = async ({\n locationId\n}: {\n locationId: number\n}): Promise<ILocation> => {\n const { data } = await api.get(`/location/${locationId}`)\n return data.data\n}\n\nexport const updateLocation = async ({\n locationId,\n location\n}: {\n locationId: number\n location: FormData\n}): Promise<ILocation> => {\n const { data } = await api.put<ILocation>(`/location/${locationId}`, location, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const createLocation = async (location: FormData): Promise<ILocation> => {\n const { data } = await api.post<ILocation>('location/', location, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const deleteLocation = async ({\n physicalLocationId\n}: {\n physicalLocationId: number\n}): Promise<void> => {\n await api.delete(`/location/${physicalLocationId}`)\n}\n\nexport const restoreLocation = async ({\n physicalLocationId\n}: {\n physicalLocationId: number\n}): Promise<void> => {\n await api.patch(`/location/${physicalLocationId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getLocations,\n getLocationById,\n getLocationsForSelect,\n getAllLocations,\n createLocation,\n updateLocation,\n deleteLocation,\n restoreLocation,\n} from \"../services/location.service\";\nimport type { ILocation, ILocationResponse } from \"../interfaces/location.interface\";\nimport type { LocationResponse } from \"../services/location.service\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst locationQueryKeys = {\n all: [\"locations\"] as const,\n lists: () => [...locationQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...locationQueryKeys.lists(), { filters: params }] as const,\n details: () => [...locationQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...locationQueryKeys.details(), id] as const,\n forSelect: () => [...locationQueryKeys.all, \"select\"] as const,\n allList: () => [...locationQueryKeys.all, \"all\"] as const,\n};\n\nexport const locations = {\n queries: {\n all: [\"locations\"] as const,\n getLocations: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getLocations({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: locationQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getLocationsForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getLocations({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: locationQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getLocationById: (id: number) =>\n queryOptions({\n queryFn: () => getLocationById({ locationId: id }),\n queryKey: locationQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getLocationsForSelect: () =>\n queryOptions({\n queryFn: getLocationsForSelect,\n queryKey: locationQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n getAllLocations: () =>\n queryOptions({\n queryFn: getAllLocations,\n queryKey: locationQueryKeys.allList(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createLocation: (\n queryClient: QueryClient,\n ): UseMutationOptions<ILocation, Error, FormData> => ({\n mutationFn: createLocation,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: locationQueryKeys.all });\n successNotification({\n title: \"Ubicación creada\",\n message: \"La ubicación se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear la ubicación.\",\n });\n },\n }),\n updateLocation: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n ILocation,\n Error,\n { locationId: number; location: FormData }\n > => ({\n mutationFn: updateLocation,\n onSuccess: (_, { locationId }) => {\n queryClient.invalidateQueries({ queryKey: locationQueryKeys.detail(locationId) });\n queryClient.invalidateQueries({ queryKey: locationQueryKeys.lists() });\n successNotification({\n title: \"Ubicación actualizada\",\n message: \"La ubicación se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar la ubicación.\",\n });\n },\n }),\n deleteLocation: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { physicalLocationId: number }> => ({\n mutationFn: deleteLocation,\n onSuccess: (_, { physicalLocationId }) => {\n queryClient.invalidateQueries({ queryKey: locationQueryKeys.lists() });\n queryClient.removeQueries({\n queryKey: locationQueryKeys.detail(physicalLocationId),\n });\n successNotification({\n title: \"Ubicación eliminada\",\n message: \"La ubicación se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar la ubicación.\",\n });\n },\n }),\n restoreLocation: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { physicalLocationId: number }> => ({\n mutationFn: restoreLocation,\n onSuccess: (_, { physicalLocationId }) => {\n queryClient.invalidateQueries({\n queryKey: locationQueryKeys.detail(physicalLocationId),\n });\n queryClient.invalidateQueries({ queryKey: locationQueryKeys.lists() });\n successNotification({\n title: \"Ubicación restaurada\",\n message: \"La ubicación se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar la ubicación.\",\n });\n },\n }),\n },\n};\n\nexport { locationQueryKeys };\n","import type { IMaterial } from '../interfaces/material.interface'\nimport { api } from './config'\n\nexport interface MaterialResponse {\n data: IMaterial[]\n total: number\n skip: number\n limit: number\n}\n\ninterface MaterialQuery {\n skip?: number\n limit?: number\n query?: string\n}\n\nexport const getAllMaterials = async (): Promise<IMaterial[]> => {\n const { data } = await api.get<IMaterial[]>('material/')\n return data\n}\n\nexport const getMaterials = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: MaterialQuery): Promise<MaterialResponse> => {\n const { data } = await api.get<MaterialResponse>(\n `material/materialsTable?skip=${skip}&limit=${limit}&query=${query}`\n )\n return data\n}\n\nexport const getMaterialById = async ({\n materialId\n}: {\n materialId: number\n}): Promise<IMaterial> => {\n const { data } = await api.get(`material/${materialId}`)\n return data.data\n}\n\nexport const getMaterialsForSelect = async (): Promise<IMaterial[]> => {\n const { data } = await api.get<IMaterial[]>('material/select')\n return data\n}\n\nexport const createMaterial = async ({ material }: { material: IMaterial }): Promise<IMaterial> => {\n const { data } = await api.post<IMaterial>('material/', material)\n return data\n}\n\nexport const updateMaterial = async ({\n materialId,\n material\n}: {\n materialId: number\n material: IMaterial\n}): Promise<IMaterial> => {\n const { data } = await api.put<IMaterial>(`material/${materialId}`, material)\n return data\n}\n\nexport const deleteMaterial = async ({ materialId }: { materialId: number }): Promise<void> => {\n await api.delete(`material/${materialId}`)\n}\nexport const undeleteMaterial = async ({ materialId }: { materialId: number }): Promise<void> => {\n await api.patch(`material/${materialId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getMaterials,\n getMaterialById,\n getMaterialsForSelect,\n getAllMaterials,\n createMaterial,\n updateMaterial,\n deleteMaterial,\n undeleteMaterial,\n} from \"../services/material.service\";\nimport type { IMaterial } from \"../interfaces/material.interface\";\nimport type { MaterialResponse } from \"../services/material.service\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst materialQueryKeys = {\n all: [\"materials\"] as const,\n lists: () => [...materialQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...materialQueryKeys.lists(), { filters: params }] as const,\n details: () => [...materialQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...materialQueryKeys.details(), id] as const,\n forSelect: () => [...materialQueryKeys.all, \"select\"] as const,\n allList: () => [...materialQueryKeys.all, \"all\"] as const,\n};\n\nexport const materials = {\n queries: {\n all: [\"materials\"] as const,\n getMaterials: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getMaterials({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: materialQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getMaterialsForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getMaterials({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: materialQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getMaterialById: (id: number) =>\n queryOptions({\n queryFn: () => getMaterialById({ materialId: id }),\n queryKey: materialQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getMaterialsForSelect: () =>\n queryOptions({\n queryFn: getMaterialsForSelect,\n queryKey: materialQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n getAllMaterials: () =>\n queryOptions({\n queryFn: getAllMaterials,\n queryKey: materialQueryKeys.allList(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createMaterial: (\n queryClient: QueryClient,\n ): UseMutationOptions<IMaterial, Error, { material: IMaterial }> => ({\n mutationFn: createMaterial,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: materialQueryKeys.all });\n successNotification({\n title: \"Material creado\",\n message: \"El material se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el material.\",\n });\n },\n }),\n updateMaterial: (\n queryClient: QueryClient,\n ): UseMutationOptions<IMaterial, Error, { materialId: number; material: IMaterial }> => ({\n mutationFn: updateMaterial,\n onSuccess: (_, { materialId }) => {\n queryClient.invalidateQueries({ queryKey: materialQueryKeys.detail(materialId) });\n queryClient.invalidateQueries({ queryKey: materialQueryKeys.lists() });\n successNotification({\n title: \"Material actualizado\",\n message: \"El material se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el material.\",\n });\n },\n }),\n deleteMaterial: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { materialId: number }> => ({\n mutationFn: deleteMaterial,\n onSuccess: (_, { materialId }) => {\n queryClient.invalidateQueries({ queryKey: materialQueryKeys.lists() });\n queryClient.removeQueries({ queryKey: materialQueryKeys.detail(materialId) });\n successNotification({\n title: \"Material eliminado\",\n message: \"El material se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el material.\",\n });\n },\n }),\n undeleteMaterial: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { materialId: number }> => ({\n mutationFn: undeleteMaterial,\n onSuccess: (_, { materialId }) => {\n queryClient.invalidateQueries({ queryKey: materialQueryKeys.detail(materialId) });\n queryClient.invalidateQueries({ queryKey: materialQueryKeys.lists() });\n successNotification({\n title: \"Material restaurado\",\n message: \"El material se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el material.\",\n });\n },\n }),\n },\n};\n\nexport { materialQueryKeys };\n","import type { IPriceType, IPriceTypeResponse } from '../interfaces/priceType.interface'\nimport { api } from './config'\nimport type { IRequest } from '../interfaces/util.interface'\n\nexport const getPriceTypesForSelect = async (): Promise<IPriceType[]> => {\n const { data } = await api.get<IPriceType[]>('price-type/select')\n return data\n}\n\nexport const getAllPriceTypes = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: IRequest): Promise<IPriceTypeResponse> => {\n const { data } = await api.get<IPriceTypeResponse>(\n `price-type/?skip=${skip}&limit=${limit}&query=${query}`\n )\n return data\n}\n\nexport const createPriceType = async ({\n priceType\n}: {\n priceType: IPriceType\n}): Promise<IPriceType> => {\n const { data } = await api.post<IPriceType>('price-type/', priceType)\n return data\n}\n\nexport const getPriceTypeById = async ({\n priceTypeId\n}: {\n priceTypeId: number\n}): Promise<IPriceType> => {\n const { data } = await api.get<IPriceType>(`price-type/${priceTypeId}`)\n return data\n}\n\nexport const updatePriceType = async ({\n priceTypeId,\n priceType\n}: {\n priceTypeId: number\n priceType: IPriceType\n}): Promise<IPriceType> => {\n const { data } = await api.put<IPriceType>(`price-type/${priceTypeId}`, priceType)\n return data\n}\n\nexport const deletePriceType = async ({ priceTypeId }: { priceTypeId: number }): Promise<void> => {\n await api.delete<void>(`price-type/${priceTypeId}`)\n}\n\nexport const undeletePriceType = async ({\n priceTypeId\n}: {\n priceTypeId: number\n}): Promise<void> => {\n await api.patch<void>(`price-type/${priceTypeId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getAllPriceTypes,\n getPriceTypeById,\n getPriceTypesForSelect,\n createPriceType,\n updatePriceType,\n deletePriceType,\n undeletePriceType,\n} from \"../services/priceType.service\";\nimport type {\n IPriceType,\n IPriceTypeResponse,\n} from \"../interfaces/priceType.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst priceTypeQueryKeys = {\n all: [\"priceTypes\"] as const,\n lists: () => [...priceTypeQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...priceTypeQueryKeys.lists(), { filters: params }] as const,\n details: () => [...priceTypeQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...priceTypeQueryKeys.details(), id] as const,\n forSelect: () => [...priceTypeQueryKeys.all, \"select\"] as const,\n};\n\nexport const priceTypes = {\n queries: {\n all: [\"priceTypes\"] as const,\n getPriceTypes: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getAllPriceTypes({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: priceTypeQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getPriceTypesForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getAllPriceTypes({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: priceTypeQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getPriceTypeById: (id: number) =>\n queryOptions({\n queryFn: () => getPriceTypeById({ priceTypeId: id }),\n queryKey: priceTypeQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getPriceTypesForSelect: () =>\n queryOptions({\n queryFn: getPriceTypesForSelect,\n queryKey: priceTypeQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createPriceType: (\n queryClient: QueryClient,\n ): UseMutationOptions<IPriceType, Error, { priceType: IPriceType }> => ({\n mutationFn: createPriceType,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: priceTypeQueryKeys.all });\n successNotification({\n title: \"Tipo de precio creado\",\n message: \"El tipo de precio se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el tipo de precio.\",\n });\n },\n }),\n updatePriceType: (\n queryClient: QueryClient,\n ): UseMutationOptions<IPriceType, Error, { priceTypeId: number; priceType: IPriceType }> => ({\n mutationFn: updatePriceType,\n onSuccess: (_, { priceTypeId }) => {\n queryClient.invalidateQueries({ queryKey: priceTypeQueryKeys.detail(priceTypeId) });\n queryClient.invalidateQueries({ queryKey: priceTypeQueryKeys.lists() });\n successNotification({\n title: \"Tipo de precio actualizado\",\n message: \"El tipo de precio se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el tipo de precio.\",\n });\n },\n }),\n deletePriceType: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { priceTypeId: number }> => ({\n mutationFn: deletePriceType,\n onSuccess: (_, { priceTypeId }) => {\n queryClient.invalidateQueries({ queryKey: priceTypeQueryKeys.lists() });\n queryClient.removeQueries({ queryKey: priceTypeQueryKeys.detail(priceTypeId) });\n successNotification({\n title: \"Tipo de precio eliminado\",\n message: \"El tipo de precio se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el tipo de precio.\",\n });\n },\n }),\n undeletePriceType: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { priceTypeId: number }> => ({\n mutationFn: undeletePriceType,\n onSuccess: (_, { priceTypeId }) => {\n queryClient.invalidateQueries({ queryKey: priceTypeQueryKeys.detail(priceTypeId) });\n queryClient.invalidateQueries({ queryKey: priceTypeQueryKeys.lists() });\n successNotification({\n title: \"Tipo de precio restaurado\",\n message: \"El tipo de precio se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el tipo de precio.\",\n });\n },\n }),\n },\n};\n\nexport { priceTypeQueryKeys };\n","import type { IFilterType } from '../interfaces/filters.interface'\nimport type {\n IProductResponse,\n IProduct,\n IProductDetailsResponse,\n IProductDetails\n} from '../interfaces/product.interface'\nimport { api } from './config'\n\ninterface ProductQuery {\n skip?: number\n limit?: number\n filters?: IFilterType\n}\n\ninterface CategoryQuery {\n category: number\n skip?: number\n limit?: number\n filters?: IFilterType\n}\n\nexport const getProductsForSelect = async (): Promise<IProduct[]> => {\n const { data } = await api.get<IProduct[]>('/product/select')\n return data\n}\n\nexport const getProducts = async ({\n skip = 0,\n limit = 16,\n filters\n}: ProductQuery): Promise<IProductDetailsResponse> => {\n const queryParams = new URLSearchParams({\n skip: skip.toString(),\n limit: limit.toString(),\n ...(filters?.query && { query: filters.query }),\n ...(filters?.batchId && { batchId: filters.batchId }),\n ...(filters?.categoryId && { categoryId: filters.categoryId.toString() }),\n ...(filters?.supplierId && { supplierId: filters.supplierId.toString() }),\n ...(filters?.warehouseId && { warehouseId: filters.warehouseId.toString() }),\n ...(filters?.priceRangeMin && { minPrice: filters.priceRangeMin.toString() }),\n ...(filters?.priceRangeMax && { maxPrice: filters.priceRangeMax.toString() })\n })\n\n const { data } = await api.get<IProductDetailsResponse>(`product?${queryParams}`)\n return data\n}\n\nexport const getProductsTable = async ({\n skip = 0,\n limit = 16,\n filters\n}: ProductQuery): Promise<IProductResponse> => {\n const queryParams = new URLSearchParams({\n skip: skip.toString(),\n limit: limit.toString(),\n ...(filters?.query && { query: filters.query }),\n ...(filters?.batchId && { batchId: filters.batchId }),\n ...(filters?.categoryId && { categoryId: filters.categoryId.toString() }),\n ...(filters?.supplierId && { supplierId: filters.supplierId.toString() }),\n ...(filters?.warehouseId && { warehouseId: filters.warehouseId.toString() }),\n ...(filters?.priceRangeMin && { minPrice: filters.priceRangeMin.toString() }),\n ...(filters?.priceRangeMax && { maxPrice: filters.priceRangeMax.toString() })\n })\n\n const { data } = await api.get<IProductResponse>(`product/table?${queryParams}`)\n return data\n}\n\nexport const getProductById = async ({\n productId\n}: {\n productId: number\n}): Promise<IProduct> => {\n const { data } = await api.get(`product/${productId}`)\n return data.data\n}\n\nexport const getProductVariants = async ({\n productId,\n skip = 0,\n limit = 10,\n query = ''\n}: {\n productId: number\n skip?: number\n limit?: number\n query?: string\n}): Promise<IProductDetailsResponse> => {\n const { data } = await api.get<IProductDetailsResponse>(`/product/variants/${productId}`, {\n params: {\n skip: skip.toString(),\n limit: limit.toString(),\n ...(query && { query })\n }\n })\n return data\n}\n\nexport const getProductVariantsForSelect = async ({\n productId\n}: {\n productId: number\n}): Promise<IProductDetails[]> => {\n const { data } = await api.get<IProductDetails[]>(`/product/variants/select/${productId}`)\n return data\n}\n\nexport const getProductVariantById = async ({\n productDetailId\n}: {\n productDetailId: number\n}): Promise<IProductDetails> => {\n const { data } = await api.get<IProductDetails>(`/product/variants/variant/${productDetailId}`)\n return data\n}\n\nexport const createProductVariant = async (variant: FormData): Promise<IProductDetails> => {\n const { data } = await api.post<IProductDetails>('product/variants', variant, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const createProductVariants = async (formData: FormData): Promise<IProductDetails[]> => {\n const { data } = await api.post<IProductDetails[]>('product/variants', formData, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const updateProductVariant = async (data: FormData): Promise<IProductDetails> => {\n const { data: response } = await api.put<IProductDetails>(\n `product/variants/update/${data.get('productDetailID')}`,\n data,\n {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n }\n )\n return response\n}\n\nexport const deleteProductVariant = async ({\n productDetailId\n}: {\n productDetailId: number\n}): Promise<void> => {\n await api.delete(`/product/variants/${productDetailId}`)\n}\n\nexport const restoreProductVariant = async ({\n productDetailId\n}: {\n productDetailId: number\n}): Promise<void> => {\n await api.patch(`/product/variants/${productDetailId}`)\n}\n\nexport const createProduct = async (product: FormData): Promise<IProduct> => {\n const { data } = await api.post<IProduct>('product/', product, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const updateProduct = async ({\n productId,\n product\n}: {\n productId: number\n product: FormData\n}): Promise<IProduct> => {\n const { data } = await api.put<IProduct>(`/product/${productId}`, product, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const deleteImageFromProduct = async ({\n imageId\n}: {\n imageId: number\n}): Promise<void> => {\n await api.delete(`/product/images/${imageId}`)\n}\n\nexport const deleteProduct = async ({ productId }: { productId: number }): Promise<void> => {\n await api.delete(`/product/${productId}`)\n}\n\nexport const restoreProduct = async ({ productId }: { productId: number }): Promise<void> => {\n await api.patch(`/product/${productId}`)\n}\n\nexport const getProductsByCategory = async ({\n category,\n skip = 0,\n limit = 10,\n filters\n}: CategoryQuery): Promise<IProductResponse> => {\n const queryParams = new URLSearchParams({\n skip: skip.toString(),\n limit: limit.toString(),\n ...(filters?.query && { query: filters.query }),\n ...(filters?.batchId && { batchId: filters.batchId }),\n ...(filters?.supplierId && { supplierId: filters.supplierId.toString() }),\n ...(filters?.warehouseId && { warehouseId: filters.warehouseId.toString() }),\n ...(filters?.priceRangeMin && { minPrice: filters.priceRangeMin.toString() }),\n ...(filters?.priceRangeMax && { maxPrice: filters.priceRangeMax.toString() })\n })\n\n const { data } = await api.get<IProductResponse>(`product/category/${category}?${queryParams}`)\n return data\n}\n\nexport interface PrintProductTagResponse {\n message?: string\n [key: string]: unknown\n}\n\nexport const printProductTag = async ({\n stockId,\n productId,\n isSmall\n}: {\n stockId: number\n productId: number\n isSmall: boolean\n}): Promise<PrintProductTagResponse> => {\n const { data } = await api.post<PrintProductTagResponse>(`/product/printproducttag/`, {\n stockID: stockId,\n productID: productId,\n isSmall\n })\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getProducts,\n getProductsTable,\n getProductById,\n getProductsForSelect,\n getProductVariants,\n getProductVariantsForSelect,\n getProductVariantById,\n getProductsByCategory,\n createProduct,\n updateProduct,\n createProductVariant,\n createProductVariants,\n updateProductVariant,\n deleteProductVariant,\n restoreProductVariant,\n deleteImageFromProduct,\n deleteProduct,\n restoreProduct,\n} from \"../services/product.service\";\nimport type { IFilterType } from \"../interfaces/filters.interface\";\nimport type {\n IProduct,\n IProductDetails,\n IProductDetailsResponse,\n IProductResponse,\n} from \"../interfaces/product.interface\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nexport interface ProductQueryParams {\n skip?: number;\n limit?: number;\n filters?: IFilterType;\n}\n\nconst productQueryKeys = {\n all: [\"products\"] as const,\n lists: () => [...productQueryKeys.all, \"list\"] as const,\n list: (filters?: ProductQueryParams) =>\n [...productQueryKeys.lists(), { filters }] as const,\n table: (filters?: ProductQueryParams) =>\n [...productQueryKeys.all, \"table\", { filters }] as const,\n details: () => [...productQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...productQueryKeys.details(), id] as const,\n forSelect: () => [...productQueryKeys.all, \"select\"] as const,\n variants: (productId: number) =>\n [...productQueryKeys.all, \"variants\", productId] as const,\n variantsSelect: (productId: number) =>\n [...productQueryKeys.all, \"variantsSelect\", productId] as const,\n variant: (productDetailId: number) =>\n [...productQueryKeys.all, \"variant\", productDetailId] as const,\n byCategory: (category: number, filters?: IFilterType) =>\n [...productQueryKeys.all, \"category\", category, { filters }] as const,\n};\n\nexport const products = {\n queries: {\n all: [\"products\"] as const,\n getProducts: (params: ProductQueryParams = {}) =>\n queryOptions({\n queryFn: () =>\n getProducts({\n skip: params.skip ?? 0,\n limit: params.limit ?? 16,\n filters: params.filters,\n }),\n queryKey: productQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getProductsTable: (params: ProductQueryParams = {}) =>\n queryOptions({\n queryFn: () =>\n getProductsTable({\n skip: params.skip ?? 0,\n limit: params.limit ?? 16,\n filters: params.filters,\n }),\n queryKey: productQueryKeys.table(params),\n staleTime: 30_000,\n }),\n getProductById: (id: number) =>\n queryOptions({\n queryFn: () => getProductById({ productId: id }),\n queryKey: productQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getProductsForSelect: () =>\n queryOptions({\n queryFn: getProductsForSelect,\n queryKey: productQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n getProductVariants: (\n productId: number,\n params?: { skip?: number; limit?: number; query?: string },\n ) =>\n queryOptions({\n queryFn: () =>\n getProductVariants({\n productId,\n skip: params?.skip ?? 0,\n limit: params?.limit ?? 10,\n query: params?.query ?? \"\",\n }),\n queryKey: [...productQueryKeys.variants(productId), params ?? {}] as const,\n enabled: !!productId && productId > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getProductVariantsForSelect: (productId: number) =>\n queryOptions({\n queryFn: () => getProductVariantsForSelect({ productId }),\n queryKey: productQueryKeys.variantsSelect(productId),\n enabled: !!productId && productId > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getProductVariantById: (productDetailId: number) =>\n queryOptions({\n queryFn: () => getProductVariantById({ productDetailId }),\n queryKey: productQueryKeys.variant(productDetailId),\n enabled: !!productDetailId && productDetailId > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getProductsByCategory: (category: number, params?: ProductQueryParams) =>\n queryOptions({\n queryFn: () =>\n getProductsByCategory({\n category,\n skip: params?.skip ?? 0,\n limit: params?.limit ?? 10,\n filters: params?.filters,\n }),\n queryKey: productQueryKeys.byCategory(category, params?.filters),\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n createProduct: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProduct, Error, FormData> => ({\n mutationFn: createProduct,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Producto creado\",\n message: \"El producto se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el producto.\",\n });\n },\n }),\n updateProduct: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProduct, Error, { productId: number; product: FormData }> => ({\n mutationFn: updateProduct,\n onSuccess: (_, { productId }) => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.detail(productId) });\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Producto actualizado\",\n message: \"El producto se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el producto.\",\n });\n },\n }),\n createProductVariant: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProductDetails, Error, FormData> => ({\n mutationFn: createProductVariant,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Variante creada\",\n message: \"La variante se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear la variante.\",\n });\n },\n }),\n createProductVariants: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProductDetails[], Error, FormData> => ({\n mutationFn: createProductVariants,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Variantes creadas\",\n message: \"Las variantes se han creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudieron crear las variantes.\",\n });\n },\n }),\n updateProductVariant: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProductDetails, Error, FormData> => ({\n mutationFn: updateProductVariant,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Variante actualizada\",\n message: \"La variante se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar la variante.\",\n });\n },\n }),\n deleteProductVariant: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { productDetailId: number }> => ({\n mutationFn: deleteProductVariant,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Variante eliminada\",\n message: \"La variante se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar la variante.\",\n });\n },\n }),\n restoreProductVariant: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { productDetailId: number }> => ({\n mutationFn: restoreProductVariant,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Variante restaurada\",\n message: \"La variante se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar la variante.\",\n });\n },\n }),\n deleteImageFromProduct: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { imageId: number }> => ({\n mutationFn: deleteImageFromProduct,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Imagen eliminada\",\n message: \"La imagen se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar la imagen.\",\n });\n },\n }),\n deleteProduct: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { productId: number }> => ({\n mutationFn: deleteProduct,\n onSuccess: (_, { productId }) => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n queryClient.removeQueries({ queryKey: productQueryKeys.detail(productId) });\n successNotification({\n title: \"Producto eliminado\",\n message: \"El producto se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el producto.\",\n });\n },\n }),\n restoreProduct: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { productId: number }> => ({\n mutationFn: restoreProduct,\n onSuccess: (_, { productId }) => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.detail(productId) });\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Producto restaurado\",\n message: \"El producto se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el producto.\",\n });\n },\n }),\n },\n};\n\nexport { productQueryKeys };\n","import { api } from './config'\n\ninterface ExchangeQuery {\n skip?: number\n limit?: number\n query?: string\n}\n\nexport interface IExchange {\n exchangeRateID: number\n valorEnPesos: number\n fromDate: string\n toDate: string\n syncStatusID: number\n masterCodeID: null\n savedBy: null\n savedDate: null\n deletedBy: null\n deletedDate: null\n}\n\nexport interface PaymentType {\n value: number\n label: string\n}\n\nexport interface IExchangeResponse {\n total: number\n data: IExchange[]\n skip: number\n limit: number\n}\n\nexport const getPaymentTypes = async (): Promise<PaymentType[]> => {\n const { data } = await api.get<PaymentType[]>('exchange/getPaymentTypes')\n return data\n}\n\nexport const getExchangeRates = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: ExchangeQuery): Promise<IExchangeResponse> => {\n const { data } = await api.get<IExchangeResponse>(\n `exchange/exchangesTable?skip=${skip}&limit=${limit}&query=${query}`\n )\n\n return data\n}\n\n//obtener el exchange rate mediante fehca y hora\nexport const getExchangeRate = async (): Promise<IExchange> => {\n const { data } = await api.get<IExchange>('exchange/getExchangeRate')\n return data\n}\n\nexport const createExchangeRate = async ({\n exchangeRate\n}: {\n exchangeRate: IExchange\n}): Promise<IExchange> => {\n const { data } = await api.post<IExchange>('exchange/', exchangeRate)\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getExchangeRates,\n getExchangeRate,\n getPaymentTypes,\n createExchangeRate,\n} from \"../services/exchange.service\";\nimport type {\n IExchange,\n IExchangeResponse,\n PaymentType,\n} from \"../services/exchange.service\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst exchangeQueryKeys = {\n all: [\"exchange\"] as const,\n lists: () => [...exchangeQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...exchangeQueryKeys.lists(), { filters: params }] as const,\n rate: () => [...exchangeQueryKeys.all, \"rate\"] as const,\n paymentTypes: () => [...exchangeQueryKeys.all, \"paymentTypes\"] as const,\n};\n\nexport const exchange = {\n queries: {\n all: [\"exchange\"] as const,\n getExchangeRates: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getExchangeRates({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: exchangeQueryKeys.list(params),\n staleTime: 5 * 60 * 1000,\n }),\n getExchangeRate: () =>\n queryOptions({\n queryFn: getExchangeRate,\n queryKey: exchangeQueryKeys.rate(),\n staleTime: 60 * 1000,\n }),\n getPaymentTypes: () =>\n queryOptions({\n queryFn: getPaymentTypes,\n queryKey: exchangeQueryKeys.paymentTypes(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createExchangeRate: (\n queryClient: QueryClient,\n ): UseMutationOptions<IExchange, Error, { exchangeRate: IExchange }> => ({\n mutationFn: createExchangeRate,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: exchangeQueryKeys.all });\n successNotification({\n title: \"Tasa de cambio creada\",\n message: \"La tasa de cambio se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear la tasa de cambio.\",\n });\n },\n }),\n },\n};\n\nexport { exchangeQueryKeys };\n","import type { IPermissionRole, PermissionRole } from '../interfaces/permission.interface'\nimport { api } from './config'\n\nexport interface IUpdatePermission {\n id: number\n hasPermission: boolean\n}\n\nexport const getAllPermissions = async (): Promise<IPermissionRole> => {\n const response = await api.get<IPermissionRole>('/permission-role/')\n return response.data\n}\n\nexport const updatePermission = async (\n permission: IUpdatePermission\n): Promise<IUpdatePermission> => {\n const response = await api.put<IUpdatePermission>('/permission-role', permission)\n return response.data\n}\n\nexport const getPermissionRoleByRoleID = async ({\n roleId\n}: {\n roleId: number\n}): Promise<PermissionRole[]> => {\n const { data } = await api.get<PermissionRole[]>(`permission-role/${roleId}`)\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getAllPermissions,\n getPermissionRoleByRoleID,\n updatePermission,\n} from \"../services/permission.service\";\nimport type {\n IPermissionRole,\n PermissionRole,\n} from \"../interfaces/permission.interface\";\nimport type { IUpdatePermission } from \"../services/permission.service\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst permissionQueryKeys = {\n all: [\"permissions\"] as const,\n list: () => [...permissionQueryKeys.all, \"list\"] as const,\n byRole: (roleId: number) => [...permissionQueryKeys.all, \"role\", roleId] as const,\n};\n\nexport const permissions = {\n queries: {\n all: [\"permissions\"] as const,\n getPermissions: () =>\n queryOptions({\n queryFn: getAllPermissions,\n queryKey: permissionQueryKeys.list(),\n staleTime: 10 * 60 * 1000,\n }),\n getPermissionRoleByRoleID: (roleId: number) =>\n queryOptions({\n queryFn: () => getPermissionRoleByRoleID({ roleId }),\n queryKey: permissionQueryKeys.byRole(roleId),\n enabled: !!roleId && roleId > 0,\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n updatePermission: (\n queryClient: QueryClient,\n ): UseMutationOptions<IUpdatePermission, Error, IUpdatePermission> => ({\n mutationFn: updatePermission,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: permissionQueryKeys.all });\n successNotification({\n title: \"Permisos actualizados\",\n message: \"Los permisos se han actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudieron actualizar los permisos.\",\n });\n },\n }),\n },\n};\n\nexport { permissionQueryKeys };\n","import type {\n IPromotion,\n IPromotionResponse,\n IPromotionType\n} from '../interfaces/promotion.interface'\nimport { api } from './config'\n\nexport const isAValidDiscountCode = async ({\n discountCode\n}: {\n discountCode: string\n}): Promise<boolean> => {\n const { data } = await api.post('promotion/discount-code', { discountCode })\n return data.isValid\n}\n\ninterface PromotionQuery {\n skip?: number\n limit?: number\n query?: string\n}\n\nexport const getPromotions = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: PromotionQuery): Promise<IPromotionResponse> => {\n const queryParams = new URLSearchParams({\n skip: skip.toString(),\n limit: limit.toString(),\n query: query\n })\n const { data } = await api.get(`promotion?${queryParams}`)\n return data\n}\n\nexport const getPromotionsTypeForSelect = async (): Promise<IPromotionType[]> => {\n const { data } = await api.get('promotion/promotions-type/select')\n return data\n}\n\nexport const createPromotion = async (promotion: IPromotion): Promise<IPromotion> => {\n const { data } = await api.post('promotion', promotion)\n return data\n}\n\nexport const getPromotionById = async ({ id }: { id: string }): Promise<IPromotion> => {\n const { data } = await api.get(`promotion/${id}`)\n return data\n}\n\nexport const updatePromotion = async ({\n id,\n promotion\n}: {\n id: string\n promotion: IPromotion\n}): Promise<IPromotion> => {\n const { data } = await api.put(`promotion/${id}`, promotion)\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getPromotions,\n getPromotionById,\n getPromotionsTypeForSelect,\n createPromotion,\n updatePromotion,\n isAValidDiscountCode,\n} from \"../services/promotion.service\";\nimport type {\n IPromotion,\n IPromotionResponse,\n IPromotionType,\n} from \"../interfaces/promotion.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst promotionQueryKeys = {\n all: [\"promotions\"] as const,\n lists: () => [...promotionQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...promotionQueryKeys.lists(), { filters: params }] as const,\n details: () => [...promotionQueryKeys.all, \"detail\"] as const,\n detail: (id: string) => [...promotionQueryKeys.details(), id] as const,\n typesForSelect: () => [...promotionQueryKeys.all, \"types\"] as const,\n};\n\nexport const promotions = {\n queries: {\n all: [\"promotions\"] as const,\n getPromotions: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getPromotions({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: promotionQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getPromotionsForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getPromotions({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: promotionQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getPromotionById: (id: string) =>\n queryOptions({\n queryFn: () => getPromotionById({ id }),\n queryKey: promotionQueryKeys.detail(id),\n enabled: !!id,\n staleTime: 5 * 60 * 1000,\n }),\n getPromotionsTypeForSelect: () =>\n queryOptions({\n queryFn: getPromotionsTypeForSelect,\n queryKey: promotionQueryKeys.typesForSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createPromotion: (\n queryClient: QueryClient,\n ): UseMutationOptions<IPromotion, Error, IPromotion> => ({\n mutationFn: createPromotion,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: promotionQueryKeys.all });\n successNotification({\n title: \"Promoción creada\",\n message: \"La promoción se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear la promoción.\",\n });\n },\n }),\n updatePromotion: (\n queryClient: QueryClient,\n ): UseMutationOptions<IPromotion, Error, { id: string; promotion: IPromotion }> => ({\n mutationFn: updatePromotion,\n onSuccess: (_, { id }) => {\n queryClient.invalidateQueries({ queryKey: promotionQueryKeys.detail(id) });\n queryClient.invalidateQueries({ queryKey: promotionQueryKeys.lists() });\n successNotification({\n title: \"Promoción actualizada\",\n message: \"La promoción se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar la promoción.\",\n });\n },\n }),\n validateDiscountCode: (): UseMutationOptions<\n boolean,\n Error,\n { discountCode: string }\n > => ({\n mutationFn: ({ discountCode }) => isAValidDiscountCode({ discountCode }),\n }),\n },\n};\n\nexport { promotionQueryKeys };\n","import type { IOrder, IOrderResponse, TblOrderStatus } from '../interfaces/order.interface'\nimport { api } from './config'\n\nexport const getOrders = async ({\n skip = 0,\n limit = 10,\n query = '',\n commissionedBy = '',\n orderStatus = [],\n startDate = '',\n endDate = '',\n showOnlyReturns = false\n}: {\n skip?: number\n limit?: number\n query?: string\n commissionedBy?: string\n orderStatus?: string[]\n startDate?: string | null\n endDate?: string | null\n showOnlyReturns?: boolean\n}): Promise<IOrderResponse> => {\n const { data } = await api.get<IOrderResponse>('order', {\n params: { skip, limit, query, commissionedBy, orderStatus, startDate, endDate, showOnlyReturns }\n })\n return data\n}\n\nexport const getOrderById = async ({ orderId }: { orderId: number }): Promise<IOrder> => {\n const { data } = await api.get<IOrder>(`order/${orderId}`)\n return data\n}\n\nexport const getOrdersStatusForSelect = async (): Promise<TblOrderStatus[]> => {\n const { data } = await api.get<TblOrderStatus[]>('order/status')\n return data\n}\n\nexport interface ChangeProductRequest {\n orderID: number\n oldOrderDetailID: number\n newProductDetailID: number\n quantity: number\n reason?: string\n}\n\nexport interface ChangeProductResponse {\n success: boolean\n message: string\n priceDifference: number\n requiresAdditionalPayment: boolean\n requiresRefund: boolean\n order: IOrder\n}\n\nexport const changeOrderProduct = async (\n changeData: ChangeProductRequest\n): Promise<ChangeProductResponse> => {\n const { data } = await api.post<ChangeProductResponse>('order/change-product', changeData)\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getOrders,\n getOrderById,\n getOrdersStatusForSelect,\n changeOrderProduct,\n} from \"../services/order.service\";\nimport type {\n IOrder,\n IOrderResponse,\n TblOrderStatus,\n} from \"../interfaces/order.interface\";\nimport type {\n ChangeProductRequest,\n ChangeProductResponse,\n} from \"../services/order.service\";\n\nexport interface UseOrdersParams {\n skip?: number;\n limit?: number;\n query?: string;\n commissionedBy?: string;\n orderStatus?: string[];\n startDate?: string | null;\n endDate?: string | null;\n showOnlyReturns?: boolean;\n}\n\nconst orderQueryKeys = {\n all: [\"orders\"] as const,\n lists: () => [...orderQueryKeys.all, \"list\"] as const,\n list: (filters: UseOrdersParams) =>\n [...orderQueryKeys.lists(), { filters }] as const,\n details: () => [...orderQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...orderQueryKeys.details(), id] as const,\n statusForSelect: () => [...orderQueryKeys.all, \"status\"] as const,\n};\n\nexport const orders = {\n queries: {\n all: [\"orders\"] as const,\n getOrders: (params: UseOrdersParams = {}) =>\n queryOptions({\n queryFn: () =>\n getOrders({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query ?? \"\",\n commissionedBy: params.commissionedBy ?? \"\",\n orderStatus: params.orderStatus ?? [],\n startDate: params.startDate ?? \"\",\n endDate: params.endDate ?? \"\",\n showOnlyReturns: params.showOnlyReturns ?? false,\n }),\n queryKey: orderQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getOrderById: (id: number) =>\n queryOptions({\n queryFn: () => getOrderById({ orderId: id }),\n queryKey: orderQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getOrdersStatusForSelect: () =>\n queryOptions({\n queryFn: getOrdersStatusForSelect,\n queryKey: orderQueryKeys.statusForSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n changeOrderProduct: (): UseMutationOptions<\n ChangeProductResponse,\n Error,\n ChangeProductRequest\n > => ({\n mutationFn: changeOrderProduct,\n }),\n },\n};\n\nexport { orderQueryKeys };\n","import { api } from './config'\nimport type {\n IPayment,\n IPaymentMethod,\n IPaymentMethodAmountExpected\n} from '../interfaces/payment.interface'\n\nexport const sendPaymentData = async ({ payment }: { payment: IPayment }): Promise<IPayment> => {\n const { data } = await api.post<IPayment>(\n 'payment/applypayment',\n {\n ...payment\n },\n {\n headers: {\n 'Content-Type': 'application/json'\n }\n }\n )\n return data\n}\n\n//metodo para llamar a la api y obtener los metodos de pago\nexport const getPaymentMethods = async (): Promise<IPaymentMethod[]> => {\n const { data } = await api.get('payment/getpaymentmethods')\n return data\n}\n\n//metodo para llamar a la api y obtener los metodos de pago\nexport const getPaymentMethodsWithAmountExpected = async (): Promise<\n IPaymentMethodAmountExpected[]\n> => {\n const { data } = await api.get('payment/getpaymentmethodswithamountexpected')\n return data\n}\n\nexport const sendCreditPaymentData = async ({\n payment,\n orderId\n}: {\n payment: IPayment\n orderId: number\n}): Promise<IPayment> => {\n const { data } = await api.post<IPayment>(\n 'payment/applycreditpayment',\n {\n ...payment,\n orderID: orderId\n },\n {\n headers: {\n 'Content-Type': 'application/json'\n }\n }\n )\n return data\n}\n","import { queryOptions, type UseMutationOptions } from \"@tanstack/react-query\";\nimport {\n getPaymentMethods,\n getPaymentMethodsWithAmountExpected,\n sendPaymentData,\n sendCreditPaymentData,\n} from \"../services/payment.service\";\nimport type {\n IPayment,\n IPaymentMethod,\n IPaymentMethodAmountExpected,\n} from \"../interfaces/payment.interface\";\n\nconst paymentQueryKeys = {\n all: [\"payments\"] as const,\n methods: () => [...paymentQueryKeys.all, \"methods\"] as const,\n methodsWithAmount: () => [...paymentQueryKeys.all, \"methodsWithAmount\"] as const,\n};\n\nexport const payments = {\n queries: {\n all: [\"payments\"] as const,\n getPaymentMethods: () =>\n queryOptions({\n queryFn: getPaymentMethods,\n queryKey: paymentQueryKeys.methods(),\n staleTime: 5 * 60 * 1000,\n }),\n getPaymentMethodsWithAmountExpected: () =>\n queryOptions({\n queryFn: getPaymentMethodsWithAmountExpected,\n queryKey: paymentQueryKeys.methodsWithAmount(),\n staleTime: 30_000,\n }),\n },\n\n mutations: {\n sendPayment: (): UseMutationOptions<IPayment, Error, { payment: IPayment }> => ({\n mutationFn: sendPaymentData,\n }),\n sendCreditPayment: (): UseMutationOptions<\n IPayment,\n Error,\n { payment: IPayment; orderId: number }\n > => ({\n mutationFn: sendCreditPaymentData,\n }),\n },\n};\n\nexport { paymentQueryKeys };\n","import type { IUser } from '../interfaces/user.interface'\nimport { api } from './config'\n\nexport interface LoginResponse {\n user: IUser\n token: string\n}\n\nexport const login = async ({\n email,\n password\n}: {\n email: string\n password: string\n}): Promise<LoginResponse> => {\n const { data } = await api.post<LoginResponse>('auth/login', { email, password })\n return data\n}\n","import type { UseMutationOptions } from \"@tanstack/react-query\";\nimport { login } from \"../services/auth.service\";\nimport type { LoginResponse } from \"../services/auth.service\";\n\nexport const auth = {\n queries: {\n all: [\"auth\"] as const,\n },\n\n mutations: {\n login: (): UseMutationOptions<\n LoginResponse,\n Error,\n { email: string; password: string }\n > => ({\n mutationFn: login,\n }),\n },\n};\n","import type { ITax } from '../interfaces/tax.interface'\nimport { api } from './config'\n\nexport const getTaxesForSelect = async (): Promise<ITax[]> => {\n const { data } = await api.get<ITax[]>('tax/taxesForSelect')\n return data\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { getTaxesForSelect } from \"../services/tax.service\";\nimport type { ITax } from \"../interfaces/tax.interface\";\n\nconst taxQueryKeys = {\n all: [\"taxes\"] as const,\n forSelect: () => [...taxQueryKeys.all, \"select\"] as const,\n};\n\nexport const taxes = {\n queries: {\n all: [\"taxes\"] as const,\n getTaxesForSelect: () =>\n queryOptions({\n queryFn: getTaxesForSelect,\n queryKey: taxQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {},\n};\n\nexport { taxQueryKeys };\n","import type { IGender } from '../interfaces/gender.interface'\nimport { api } from './config'\n\ninterface GenderResponse {\n data: IGender[]\n}\n\nexport const getAllGenders = async (): Promise<GenderResponse> => {\n const { data } = await api.get('gender/')\n return data\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { getAllGenders } from \"../services/gender.service\";\nimport type { IGender } from \"../interfaces/gender.interface\";\n\nexport interface GenderResponse {\n data: IGender[];\n}\n\nconst genderQueryKeys = {\n all: [\"genders\"] as const,\n};\n\nexport const genders = {\n queries: {\n all: [\"genders\"] as const,\n getAllGenders: () =>\n queryOptions({\n queryFn: (): Promise<GenderResponse> => getAllGenders(),\n queryKey: genderQueryKeys.all,\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {},\n};\n\nexport { genderQueryKeys };\n","import { api } from './config'\n\nexport interface StateResponse {\n stateID: number\n state: string\n syncStatusID: number\n masterCodeID: null\n savedBy: null\n savedDate: null\n deletedBy: null\n deletedDate: null\n}\n\nexport const getAllStates = async (): Promise<StateResponse[]> => {\n const { data } = await api.get<StateResponse[]>('state/')\n return data\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { getAllStates } from \"../services/state.service\";\nimport type { StateResponse } from \"../services/state.service\";\n\nconst stateQueryKeys = {\n all: [\"states\"] as const,\n};\n\nexport const states = {\n queries: {\n all: [\"states\"] as const,\n getAllStates: () =>\n queryOptions({\n queryFn: getAllStates,\n queryKey: stateQueryKeys.all,\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {},\n};\n\nexport { stateQueryKeys };\n","import type { IModule } from '../interfaces/module.interface'\nimport { api } from './config'\n\nexport const getAllModules = async (): Promise<IModule[]> => {\n const { data } = await api.get<IModule[]>('module/')\n return data\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { getAllModules } from \"../services/module.service\";\nimport type { IModule } from \"../interfaces/module.interface\";\n\nconst moduleQueryKeys = {\n all: [\"modules\"] as const,\n};\n\nexport const modules = {\n queries: {\n all: [\"modules\"] as const,\n getAllModules: () =>\n queryOptions({\n queryFn: getAllModules,\n queryKey: moduleQueryKeys.all,\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {},\n};\n\nexport { moduleQueryKeys };\n","import { api } from './config'\n\nexport interface FolioResponse {\n folioID: number\n folioType: string\n lastFolioUsed: number\n nextFolioToUse: number\n nextBatchWithFolioToUse: string\n syncStatusID: number\n masterCodeID: null\n savedBy: null\n savedDate: null\n deletedBy: null\n deletedDate: null\n}\n\nexport const getNextFolioToUseInBatches = async (): Promise<FolioResponse> => {\n const { data } = await api.get<FolioResponse>('folio/nextFolioToUseInBatches')\n return data\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { getNextFolioToUseInBatches } from \"../services/folio.service\";\nimport type { FolioResponse } from \"../services/folio.service\";\n\nconst folioQueryKeys = {\n all: [\"folio\"] as const,\n nextForBatches: () => [...folioQueryKeys.all, \"nextForBatches\"] as const,\n};\n\nexport const folios = {\n queries: {\n all: [\"folio\"] as const,\n getNextFolioToUseInBatches: () =>\n queryOptions({\n queryFn: getNextFolioToUseInBatches,\n queryKey: folioQueryKeys.nextForBatches(),\n staleTime: 60 * 1000,\n }),\n },\n\n mutations: {},\n};\n\nexport { folioQueryKeys };\n","import { api } from './config'\n\ninterface HealthCheckResponse {\n status: string\n timestamp: string\n services: {\n backend: {\n status: string\n message?: string\n }\n database: {\n status: string\n message?: string\n }\n }\n}\n\nconst HEALTH_CHECK_TIMEOUT_MS = 10000\n\nexport const healthService = {\n async check(): Promise<HealthCheckResponse> {\n try {\n const response = await api.get<HealthCheckResponse>('/api/health', {\n timeout: HEALTH_CHECK_TIMEOUT_MS\n })\n return response.data\n } catch (error) {\n const isTimeoutError =\n error instanceof Error &&\n (error.message.includes('timeout') || error.message.includes('Network Error'))\n\n return {\n status: 'error',\n timestamp: new Date().toISOString(),\n services: {\n backend: {\n status: 'error',\n message: isTimeoutError\n ? 'No se pudo conectar con el backend. Verifica que el servidor esté corriendo y la URL configurada.'\n : error instanceof Error\n ? error.message\n : 'Error de conexión con el backend'\n },\n database: {\n status: 'unknown',\n message: 'No se puede verificar la base de datos porque el backend no responde'\n }\n }\n }\n }\n }\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { healthService } from \"../services/health.service\";\n\nexport interface HealthCheckResponse {\n status: string;\n timestamp: string;\n services: {\n backend: { status: string; message?: string };\n database: { status: string; message?: string };\n };\n}\n\nconst healthQueryKeys = {\n all: [\"health\"] as const,\n check: () => [...healthQueryKeys.all, \"check\"] as const,\n};\n\nexport const health = {\n queries: {\n all: [\"health\"] as const,\n check: () =>\n queryOptions({\n queryFn: (): Promise<HealthCheckResponse> => healthService.check(),\n queryKey: healthQueryKeys.check(),\n staleTime: 30 * 1000,\n }),\n },\n\n mutations: {},\n};\n\nexport { healthQueryKeys };\n","import type { ITag } from '../interfaces/tag.interface'\nimport { api } from './config'\n\nexport const getAllTags = async (): Promise<ITag[]> => {\n const { data } = await api.get<{ data: ITag[] }>('/product-tag')\n return data.data\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { getAllTags } from \"../services/productTags.service\";\nimport type { ITag } from \"../interfaces/tag.interface\";\n\nconst productTagQueryKeys = {\n all: [\"productTags\"] as const,\n};\n\nexport const productTags = {\n queries: {\n all: [\"productTags\"] as const,\n getAllTags: () =>\n queryOptions({\n queryFn: getAllTags,\n queryKey: productTagQueryKeys.all,\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {},\n};\n\nexport { productTagQueryKeys };\n","import type {\n PricePerGramResponse,\n PriceCalculationResponse,\n UpdatePriceRequest,\n SchedulePriceRequest,\n CalculatePriceRequest,\n IPricePerGramHistory\n} from '../interfaces/pricePerGram.interface'\nimport { api } from './config'\n\nconst BASE_URL = 'price-per-gram'\n\nexport const pricePerGramService = {\n // 1. Obtener precio con fallback\n async getPrice(params: {\n productDetailId?: number\n productId?: number\n materialId?: number\n }): Promise<PricePerGramResponse> {\n const queryParams = new URLSearchParams()\n\n if (params.productDetailId)\n queryParams.append('productDetailID', params.productDetailId.toString())\n if (params.productId) queryParams.append('productID', params.productId.toString())\n if (params.materialId) queryParams.append('materialID', params.materialId.toString())\n\n const { data } = await api.get<PricePerGramResponse>(\n `${BASE_URL}/price?${queryParams.toString()}`\n )\n return data\n },\n\n // 2. Actualizar precio (crea histórico automáticamente)\n async updatePrice(request: UpdatePriceRequest): Promise<void> {\n await api.put(`${BASE_URL}/price`, request)\n },\n\n // 3. Ver histórico de precios\n async getHistory({\n entityType,\n entityId,\n limit\n }: {\n entityType: 'material' | 'product' | 'productDetail'\n entityId: number\n limit?: number\n }): Promise<IPricePerGramHistory[]> {\n const queryParams = new URLSearchParams()\n if (limit) queryParams.append('limit', limit.toString())\n\n const { data } = await api.get<{ success: boolean; data: IPricePerGramHistory[] }>(\n `${BASE_URL}/history/${entityType}/${entityId}?${queryParams.toString()}`\n )\n console.log('response data:', data)\n return data.data || []\n },\n\n // 4. Programar precio futuro\n async schedulePrice(request: SchedulePriceRequest): Promise<void> {\n await api.post(`${BASE_URL}/scheduled`, request)\n },\n\n // 5. Calcular precio para venta\n async calculatePrice(request: CalculatePriceRequest): Promise<PriceCalculationResponse> {\n const { data } = await api.post<PriceCalculationResponse>(`${BASE_URL}/calculate`, request)\n return data\n },\n\n // 6. Eliminar precio programado\n async deleteFuturePrice({\n historyId\n }: {\n historyId: number\n }): Promise<void> {\n await api.delete(`${BASE_URL}/scheduled/${historyId}`)\n },\n\n // 7. Actualizar precio programado\n async updateFuturePrice({\n historyId,\n request\n }: {\n historyId: number\n request: SchedulePriceRequest\n }): Promise<void> {\n await api.put(`${BASE_URL}/scheduled/${historyId}`, request)\n },\n\n // Verificar si un producto se vende por peso\n async isWeightBased({\n productDetailId\n }: {\n productDetailId: number\n }): Promise<boolean> {\n try {\n const priceInfo = await this.getPrice({ productDetailId })\n return priceInfo.pricePerGram !== null\n } catch (error) {\n console.error('Error verificando si es por peso:', error)\n return false\n }\n }\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { pricePerGramService } from \"../services/pricePerGram.service\";\nimport type {\n PricePerGramResponse,\n PriceCalculationResponse,\n UpdatePriceRequest,\n SchedulePriceRequest,\n CalculatePriceRequest,\n IPricePerGramHistory,\n} from \"../interfaces/pricePerGram.interface\";\n\nconst pricePerGramQueryKeys = {\n all: [\"pricePerGram\"] as const,\n price: (params: {\n productDetailId?: number;\n productId?: number;\n materialId?: number;\n }) => [...pricePerGramQueryKeys.all, \"price\", params] as const,\n history: (params: {\n entityType: \"material\" | \"product\" | \"productDetail\";\n entityId: number;\n limit?: number;\n }) => [...pricePerGramQueryKeys.all, \"history\", params] as const,\n isWeightBased: (productDetailId: number) =>\n [...pricePerGramQueryKeys.all, \"isWeightBased\", productDetailId] as const,\n};\n\nexport const pricePerGram = {\n queries: {\n all: [\"pricePerGram\"] as const,\n getPrice: (params: {\n productDetailId?: number;\n productId?: number;\n materialId?: number;\n } | null) =>\n queryOptions({\n queryFn: () => pricePerGramService.getPrice(params!),\n queryKey: pricePerGramQueryKeys.price(params ?? {}),\n enabled: !!params && (!!params.productDetailId || !!params.productId || !!params.materialId),\n staleTime: 60 * 1000,\n }),\n getHistory: (params: {\n entityType: \"material\" | \"product\" | \"productDetail\";\n entityId: number;\n limit?: number;\n } | null) =>\n queryOptions({\n queryFn: () => pricePerGramService.getHistory(params!),\n queryKey: pricePerGramQueryKeys.history(params!),\n enabled: !!params?.entityId,\n staleTime: 60 * 1000,\n }),\n isWeightBased: (productDetailId: number) =>\n queryOptions({\n queryFn: () =>\n pricePerGramService.isWeightBased({ productDetailId }),\n queryKey: pricePerGramQueryKeys.isWeightBased(productDetailId),\n enabled: !!productDetailId && productDetailId > 0,\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n updatePrice: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, UpdatePriceRequest> => ({\n mutationFn: pricePerGramService.updatePrice,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: pricePerGramQueryKeys.all });\n },\n }),\n schedulePrice: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, SchedulePriceRequest> => ({\n mutationFn: pricePerGramService.schedulePrice,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: pricePerGramQueryKeys.all });\n },\n }),\n calculatePrice: (): UseMutationOptions<\n PriceCalculationResponse,\n Error,\n CalculatePriceRequest\n > => ({\n mutationFn: pricePerGramService.calculatePrice,\n }),\n deleteFuturePrice: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { historyId: number }> => ({\n mutationFn: pricePerGramService.deleteFuturePrice,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: pricePerGramQueryKeys.all });\n },\n }),\n updateFuturePrice: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n void,\n Error,\n { historyId: number; request: SchedulePriceRequest }\n > => ({\n mutationFn: ({ historyId, request }) =>\n pricePerGramService.updateFuturePrice({ historyId, request }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: pricePerGramQueryKeys.all });\n },\n }),\n },\n};\n\nexport { pricePerGramQueryKeys };\n","import { api } from './config'\n\nexport interface QRBaseUrlResponse {\n success: boolean\n baseUrl: string\n}\n\nexport interface PrintQRResponse {\n success?: boolean\n message?: string\n data?: {\n url?: string\n productDetailID?: number\n printerResult?: boolean\n }\n [key: string]: unknown\n}\n\n/**\n * Obtiene la URL base configurada para los códigos QR (QR_BASE_URL del backend).\n */\nexport const getQRBaseUrl = async (): Promise<string> => {\n const { data } = await api.get<QRBaseUrlResponse>('/qr/base-url')\n return data?.baseUrl ?? ''\n}\n\n/**\n * Imprime un código QR en la impresora térmica.\n * El backend construye la URL: {QR_BASE_URL}/producto/{productDetailID}\n */\nexport const printQR = async ({\n productDetailId,\n printerName = '4BARCODE'\n}: {\n productDetailId: number\n printerName?: string\n}): Promise<PrintQRResponse> => {\n const { data } = await api.post<PrintQRResponse>('/qr/print', {\n productDetailID: productDetailId,\n printerName\n })\n return data\n}\n","import { queryOptions, type UseMutationOptions } from \"@tanstack/react-query\";\nimport { getQRBaseUrl, printQR } from \"../services/qr.service\";\nimport type { PrintQRResponse } from \"../services/qr.service\";\n\nconst qrQueryKeys = {\n all: [\"qr\"] as const,\n baseUrl: () => [...qrQueryKeys.all, \"baseUrl\"] as const,\n};\n\nexport const qr = {\n queries: {\n all: [\"qr\"] as const,\n getQRBaseUrl: () =>\n queryOptions({\n queryFn: getQRBaseUrl,\n queryKey: qrQueryKeys.baseUrl(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n printQR: (): UseMutationOptions<\n PrintQRResponse,\n Error,\n { productDetailId: number; printerName?: string }\n > => ({\n mutationFn: printQR,\n }),\n },\n};\n\nexport { qrQueryKeys };\n","import type {\n ComparisonBy,\n IReportComparisonByTimeFrame,\n IReportInventory,\n IReportX,\n IReportZ,\n IStockByWarehouseReport\n} from '../interfaces/report.interface'\nimport { api } from './config'\n\nexport const getStockByWarehouseReport = async ({\n limit = 2,\n allWarehouses = false\n}: {\n limit: number\n allWarehouses: boolean\n}): Promise<IStockByWarehouseReport[]> => {\n const response = await api.get(`/report?limit=${limit}&allWarehouses=${allWarehouses}`)\n return response.data\n}\n\nexport const getReportX = async ({\n startDate,\n sellerID,\n isShiftChange = false\n}: {\n startDate: string\n sellerID: number\n isShiftChange: boolean\n}): Promise<IReportX> => {\n const response = await api.get(\n `/report/report-x?startDate=${startDate}&sellerID=${sellerID}&isShiftChange=${isShiftChange}`\n )\n return response.data\n}\n\nexport const printReportX = async ({\n startDate,\n sellerID\n}: {\n startDate: string\n sellerID: number\n}): Promise<boolean> => {\n const response = await api.get(\n `/report/printReport-x?startDate=${startDate}&sellerID=${sellerID}`\n )\n return response.data\n}\n\nexport const getReportComparisonByTimeFrame = async ({\n startDate,\n endDate,\n comparisonBy,\n productIds\n}: {\n startDate: Date\n endDate: Date\n comparisonBy: ComparisonBy\n productIds: string[]\n}): Promise<IReportComparisonByTimeFrame> => {\n const response = await api.get(\n `/report/comparison?startDate=${startDate.toISOString()}&endDate=${endDate.toISOString()}&comparisonBy=${comparisonBy}&productIds=${productIds}`\n )\n return response.data\n}\n\nexport const getReportByInventory = async ({\n productIDs,\n categoryIDs,\n warehouseIDs,\n providerIDs\n}: {\n productIDs: number[] | null\n categoryIDs: number[] | null\n warehouseIDs: number[] | null\n providerIDs: number[] | null\n}): Promise<IReportInventory[]> => {\n const params = new URLSearchParams()\n \n if (productIDs && productIDs.length > 0) {\n params.append('productIDs', productIDs.join(','))\n }\n if (categoryIDs && categoryIDs.length > 0) {\n params.append('categoryIDs', categoryIDs.join(','))\n }\n if (warehouseIDs && warehouseIDs.length > 0) {\n params.append('warehouseIDs', warehouseIDs.join(','))\n }\n if (providerIDs && providerIDs.length > 0) {\n params.append('providerIDs', providerIDs.join(','))\n }\n\n const queryString = params.toString()\n const url = `/report/inventory${queryString ? `?${queryString}` : ''}`\n \n const response = await api.get(url)\n return response.data\n}\n\nexport const getReportZ = async ({\n startDate,\n sellerID,\n isShiftChange = false\n}: {\n startDate: string\n sellerID: number\n isShiftChange: boolean\n}): Promise<IReportZ> => {\n const response = await api.get(\n `/report/report-z?startDate=${startDate}&sellerID=${sellerID}&isShiftChange=${isShiftChange}`\n )\n return response.data\n}\n\nexport const printReportZ = async ({\n startDate,\n sellerID\n}: {\n startDate: string\n sellerID: number\n}): Promise<boolean> => {\n const response = await api.get(\n `/report/printReport-z?startDate=${startDate}&sellerID=${sellerID}`\n )\n return response.data\n}\n\nexport const checkPendingReportZ = async (): Promise<Date[]> => {\n const response = await api.get('/report/pending-report-z')\n return response.data\n}\n","import { queryOptions, type UseMutationOptions } from \"@tanstack/react-query\";\nimport {\n getStockByWarehouseReport,\n getReportX,\n printReportX,\n getReportComparisonByTimeFrame,\n getReportByInventory,\n getReportZ,\n printReportZ,\n checkPendingReportZ,\n} from \"../services/report.service\";\nimport { getPaymentMethodsWithAmountExpected } from \"../services/payment.service\";\nimport type {\n ComparisonBy,\n IReportComparisonByTimeFrame,\n IReportInventory,\n IReportX,\n IReportZ,\n IStockByWarehouseReport,\n} from \"../interfaces/report.interface\";\n\nconst reportQueryKeys = {\n all: [\"reports\"] as const,\n stockByWarehouse: (params: { limit: number; allWarehouses: boolean }) =>\n [...reportQueryKeys.all, \"stockByWarehouse\", params] as const,\n reportX: (params: {\n startDate: string;\n sellerID: number;\n isShiftChange?: boolean;\n }) => [...reportQueryKeys.all, \"reportX\", params] as const,\n reportZ: (params: {\n startDate: string;\n sellerID: number;\n isShiftChange?: boolean;\n }) => [...reportQueryKeys.all, \"reportZ\", params] as const,\n comparison: (params: {\n startDate: Date;\n endDate: Date;\n comparisonBy: ComparisonBy;\n productIds: string[];\n }) => [...reportQueryKeys.all, \"comparison\", params] as const,\n inventory: (params: {\n productIDs: number[] | null;\n categoryIDs: number[] | null;\n warehouseIDs: number[] | null;\n providerIDs: number[] | null;\n }) => [...reportQueryKeys.all, \"inventory\", params] as const,\n pendingReportZ: () => [...reportQueryKeys.all, \"pendingReportZ\"] as const,\n paymentMethods: () => [...reportQueryKeys.all, \"paymentMethods\"] as const,\n};\n\nexport const reports = {\n queries: {\n all: [\"reports\"] as const,\n getStockByWarehouseReport: (params: {\n limit?: number;\n allWarehouses?: boolean;\n }) =>\n queryOptions({\n queryFn: () =>\n getStockByWarehouseReport({\n limit: params.limit ?? 2,\n allWarehouses: params.allWarehouses ?? false,\n }),\n queryKey: reportQueryKeys.stockByWarehouse({\n limit: params.limit ?? 2,\n allWarehouses: params.allWarehouses ?? false,\n }),\n staleTime: 60 * 1000,\n }),\n getReportX: (params: {\n startDate: string;\n sellerID: number;\n isShiftChange?: boolean;\n } | null) =>\n queryOptions({\n queryFn: () =>\n getReportX({\n ...params!,\n isShiftChange: params!.isShiftChange ?? false,\n }),\n queryKey: reportQueryKeys.reportX(params!),\n enabled: !!params?.startDate && !!params?.sellerID,\n staleTime: 60 * 1000,\n }),\n getReportComparisonByTimeFrame: (params: {\n startDate: Date;\n endDate: Date;\n comparisonBy: ComparisonBy;\n productIds: string[];\n } | null) =>\n queryOptions({\n queryFn: () => getReportComparisonByTimeFrame(params!),\n queryKey: reportQueryKeys.comparison(params!),\n enabled: !!params?.startDate && !!params?.endDate,\n staleTime: 60 * 1000,\n }),\n getReportByInventory: (params: {\n productIDs: number[] | null;\n categoryIDs: number[] | null;\n warehouseIDs: number[] | null;\n providerIDs: number[] | null;\n } | null) =>\n queryOptions({\n queryFn: () => getReportByInventory(params!),\n queryKey: reportQueryKeys.inventory(params!),\n enabled: !!params,\n staleTime: 60 * 1000,\n }),\n getReportZ: (params: {\n startDate: string;\n sellerID: number;\n isShiftChange?: boolean;\n } | null) =>\n queryOptions({\n queryFn: () =>\n getReportZ({\n ...params!,\n isShiftChange: params!.isShiftChange ?? false,\n }),\n queryKey: reportQueryKeys.reportZ(params!),\n enabled: !!params?.startDate && !!params?.sellerID,\n staleTime: 60 * 1000,\n }),\n getPendingReportZ: () =>\n queryOptions({\n queryFn: checkPendingReportZ,\n queryKey: reportQueryKeys.pendingReportZ(),\n staleTime: 30_000,\n }),\n getPaymentMethodsWithAmountExpected: () =>\n queryOptions({\n queryFn: getPaymentMethodsWithAmountExpected,\n queryKey: reportQueryKeys.paymentMethods(),\n staleTime: 30_000,\n }),\n },\n\n mutations: {\n printReportX: (): UseMutationOptions<\n boolean,\n Error,\n { startDate: string; sellerID: number }\n > => ({\n mutationFn: printReportX,\n }),\n printReportZ: (): UseMutationOptions<\n boolean,\n Error,\n { startDate: string; sellerID: number }\n > => ({\n mutationFn: printReportZ,\n }),\n },\n};\n\nexport { reportQueryKeys };\n","import type { TblOrderDetail, TblReturn } from '../interfaces/order.interface'\nimport { api } from './config'\n\nexport const createReturn = async ({\n orderId,\n returnReason,\n orderDetails,\n warehouseDestinationID\n}: {\n orderId: number\n returnReason: string\n orderDetails: TblOrderDetail[]\n warehouseDestinationID: number\n}): Promise<void> => {\n const response = await api.post(`/returns`, {\n orderId,\n returnReason,\n orderDetails,\n warehouseDestinationID\n })\n return response.data\n}\n\nexport interface GetReturnsByOrderIdResponse {\n message: string\n data: TblReturn[]\n}\n\nexport const getReturnsByOrderId = async ({\n orderId\n}: {\n orderId: number\n}): Promise<GetReturnsByOrderIdResponse> => {\n const response = await api.get(`/returns/order/${orderId}`)\n return response.data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { getReturnsByOrderId, createReturn } from \"../services/return.service\";\nimport type { TblOrderDetail } from \"../interfaces/order.interface\";\nimport type { GetReturnsByOrderIdResponse } from \"../services/return.service\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst returnQueryKeys = {\n all: [\"returns\"] as const,\n byOrder: (orderId: number) => [...returnQueryKeys.all, \"order\", orderId] as const,\n};\n\nexport const returns = {\n queries: {\n all: [\"returns\"] as const,\n getReturnsByOrderId: (orderId: number) =>\n queryOptions({\n queryFn: () => getReturnsByOrderId({ orderId }),\n queryKey: returnQueryKeys.byOrder(orderId),\n enabled: !!orderId && orderId > 0,\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n createReturn: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n void,\n Error,\n {\n orderId: number;\n returnReason: string;\n orderDetails: TblOrderDetail[];\n warehouseDestinationID: number;\n }\n > => ({\n mutationFn: createReturn,\n onSuccess: (_, variables) => {\n queryClient.invalidateQueries({\n queryKey: returnQueryKeys.byOrder(variables.orderId),\n });\n queryClient.invalidateQueries({ queryKey: returnQueryKeys.all });\n successNotification({\n title: \"Devolución creada\",\n message: \"La devolución se ha registrado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear la devolución.\",\n });\n },\n }),\n },\n};\n\nexport { returnQueryKeys };\n","import { api } from './config'\n\nexport interface Response {\n status: boolean\n httpStatus: number\n message: string\n data: unknown\n}\n\ninterface CloseShiftData {\n sellerID: number\n date: string\n paymentMethods: {\n paymentMethodId: number\n amount: number\n }[]\n cashBreakdown?: {\n coinsTotal: number\n bills: {\n denomination: number\n quantity: number\n }[]\n }\n}\n\nexport const closeShift = async (data: CloseShiftData): Promise<Response> => {\n const response = await api.post<Response>('/shift/close', data, {\n headers: {\n 'Content-Type': 'application/json'\n }\n })\n return response.data\n}\n\nexport const makeNewCashMovement = async ({\n userID,\n amount,\n comment,\n isWithdrawal\n}: {\n userID: number | undefined\n amount: number\n comment?: string\n isWithdrawal: boolean\n}): Promise<Response> => {\n const { data } = await api.post<Response>(\n 'shift/cashmovement',\n {\n userID,\n amount,\n comment,\n isWithdrawal\n },\n {\n headers: {\n 'Content-Type': 'application/json'\n }\n }\n )\n return data\n}\n\nexport const setNewShift = async ({\n userID,\n initialCash\n}: {\n userID: number | undefined\n initialCash: number\n}): Promise<Response> => {\n const { data } = await api.post<Response>(\n 'shift/',\n {\n userID,\n initialCash\n },\n {\n headers: {\n 'Content-Type': 'application/json'\n }\n }\n )\n return data\n}\n","import type { UseMutationOptions } from \"@tanstack/react-query\";\nimport {\n closeShift,\n makeNewCashMovement,\n setNewShift,\n} from \"../services/shift.service\";\nimport type { Response } from \"../services/shift.service\";\n\nexport interface CloseShiftData {\n sellerID: number;\n date: string;\n paymentMethods: {\n paymentMethodId: number;\n amount: number;\n }[];\n cashBreakdown?: {\n coinsTotal: number;\n bills: {\n denomination: number;\n quantity: number;\n }[];\n };\n}\n\nexport const shifts = {\n queries: {\n all: [\"shifts\"] as const,\n },\n\n mutations: {\n closeShift: (): UseMutationOptions<Response, Error, CloseShiftData> => ({\n mutationFn: closeShift,\n }),\n makeNewCashMovement: (): UseMutationOptions<\n Response,\n Error,\n {\n userID: number | undefined;\n amount: number;\n comment?: string;\n isWithdrawal: boolean;\n }\n > => ({\n mutationFn: makeNewCashMovement,\n }),\n setNewShift: (): UseMutationOptions<\n Response,\n Error,\n { userID: number | undefined; initialCash: number }\n > => ({\n mutationFn: setNewShift,\n }),\n },\n};\n","import type { IStockMovement, IStockMovementResponse } from '../interfaces/stockmovement.interface'\nimport { api } from './config'\n\ninterface MovementQuery {\n skip?: number\n limit?: number\n query?: string\n movementType?: number\n}\n\nexport interface MovementResponse {\n stockMovementID: number\n quantity: number\n addressID: number\n isOpen: boolean\n syncStatusID: number\n masterCodeID: null\n savedBy: null\n savedDate: null\n deletedBy: null\n deletedDate: null\n}\n\nexport const createMovement = async (movement: FormData): Promise<IStockMovement> => {\n const { data } = await api.post<IStockMovement>('movement/', movement, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\n// export const getAllLocations = async (): Promise<LocationResponse[]> => {\n// const { data } = await api.get<LocationResponse[]>('location/')\n// return data\n// }\n\n// export const getLocationsForSelect = async (): Promise<LocationResponse[]> => {\n// const { data } = await api.get<LocationResponse[]>('location/locationsForSelect')\n// return data\n// }\n\nexport const getMovements = async ({\n skip = 0,\n limit = 10,\n query = '',\n movementType = 1\n}: MovementQuery): Promise<IStockMovementResponse> => {\n const { data } = await api.get<IStockMovementResponse>(\n `movement/movements?skip=${skip}&limit=${limit}&query=${query}&movementTypeID=${movementType}`\n )\n return data\n}","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { getMovements, createMovement } from \"../services/stockmovement.service\";\nimport type {\n IStockMovement,\n IStockMovementResponse,\n} from \"../interfaces/stockmovement.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst stockMovementQueryKeys = {\n all: [\"stockMovements\"] as const,\n lists: () => [...stockMovementQueryKeys.all, \"list\"] as const,\n list: (params: {\n skip?: number;\n limit?: number;\n query?: string | null;\n movementType?: number;\n }) => [...stockMovementQueryKeys.lists(), { filters: params }] as const,\n};\n\nexport const stockMovements = {\n queries: {\n all: [\"stockMovements\"] as const,\n getMovements: (params: {\n skip?: number;\n limit?: number;\n query?: string | null;\n movementType?: number;\n }) =>\n queryOptions({\n queryFn: () =>\n getMovements({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n movementType: params.movementType ?? 1,\n }),\n queryKey: stockMovementQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getMovementsForTable: (params: TableQueryParams & { movementType?: number }) =>\n queryOptions({\n queryFn: () =>\n getMovements({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n movementType: params.movementType ?? 1,\n }),\n queryKey: stockMovementQueryKeys.list(params),\n staleTime: 30_000,\n }),\n },\n\n mutations: {\n createMovement: (\n queryClient: QueryClient,\n ): UseMutationOptions<IStockMovement, Error, FormData> => ({\n mutationFn: createMovement,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: stockMovementQueryKeys.all });\n successNotification({\n title: \"Movimiento creado\",\n message: \"El movimiento se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el movimiento.\",\n });\n },\n }),\n },\n};\n\nexport { stockMovementQueryKeys };\n"]}
1
+ {"version":3,"sources":["../src/services/config.ts","../src/services/attributes.service.ts","../src/utils/notifications.tsx","../src/queries/attributes.queries.ts","../src/services/user.service.ts","../src/queries/user.queries.ts","../src/services/category.service.ts","../src/queries/category.queries.ts","../src/services/warehouse.service.ts","../src/queries/warehouse.queries.ts","../src/services/client.service.ts","../src/queries/client.queries.ts","../src/services/bankTerminal.service.ts","../src/queries/bankTerminal.queries.ts","../src/services/batch.service.ts","../src/queries/batch.queries.ts","../src/services/role.service.ts","../src/queries/role.queries.ts","../src/services/provider.service.ts","../src/queries/provider.queries.ts","../src/services/location.service.ts","../src/queries/location.queries.ts","../src/services/material.service.ts","../src/queries/material.queries.ts","../src/services/priceType.service.ts","../src/queries/priceType.queries.ts","../src/services/product.service.ts","../src/queries/product.queries.ts","../src/services/exchange.service.ts","../src/queries/exchange.queries.ts","../src/services/permission.service.ts","../src/queries/permission.queries.ts","../src/services/promotion.service.ts","../src/queries/promotion.queries.ts","../src/services/order.service.ts","../src/queries/order.queries.ts","../src/services/payment.service.ts","../src/queries/payment.queries.ts","../src/services/auth.service.ts","../src/queries/auth.queries.ts","../src/services/tax.service.ts","../src/queries/tax.queries.ts","../src/services/gender.service.ts","../src/queries/gender.queries.ts","../src/services/state.service.ts","../src/queries/state.queries.ts","../src/services/module.service.ts","../src/queries/module.queries.ts","../src/services/folio.service.ts","../src/queries/folio.queries.ts","../src/services/health.service.ts","../src/queries/health.queries.ts","../src/services/productTags.service.ts","../src/queries/productTags.queries.ts","../src/services/pricePerGram.service.ts","../src/queries/pricePerGram.queries.ts","../src/services/qr.service.ts","../src/queries/qr.queries.ts","../src/services/report.service.ts","../src/queries/report.queries.ts","../src/services/return.service.ts","../src/queries/return.queries.ts","../src/services/shift.service.ts","../src/queries/shift.queries.ts","../src/services/stockmovement.service.ts","../src/queries/stockmovement.queries.ts"],"names":["attributes","queryOptions"],"mappings":"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","file":"queries.js","sourcesContent":["import axios, { type AxiosInstance } from 'axios'\n\n/**\n * Configuration for the shared API client.\n * Each consuming app must call configureApi() with its own baseURL and auth.\n */\nexport interface IApiConfig {\n /** Backend base URL (e.g. \"http://localhost:4000/\" or \"https://api.myapp.com/\") */\n baseURL: string\n /** Returns the current auth token for request headers */\n getToken: () => string | undefined\n /** Called when a new token is received after refresh (e.g. update your store) */\n onTokenRefresh?: (newToken: string) => void\n /** Called when refresh fails (e.g. clear session, redirect to login) */\n onUnauthorized?: () => void\n}\n\n// Default instance; replaced when configureApi() is called by the consuming app\nlet api: AxiosInstance = axios.create({\n baseURL: '',\n headers: { 'Content-Type': 'application/json' }\n})\n\n/**\n * Configure the shared API client. Must be called by the consuming app before using any service.\n * @example\n * // In your app (e.g. main.tsx or before first API call):\n * import { configureApi } from 'erp-pos-ecommerce-shared'\n * import { useAuthStore } from './store/authStore'\n *\n * configureApi({\n * baseURL: import.meta.env.VITE_API_URL ?? 'http://localhost:4000/',\n * getToken: () => useAuthStore.getState().token,\n * onTokenRefresh: (newToken) => useAuthStore.setState({ token: newToken }),\n * onUnauthorized: () => { useAuthStore.setState({ token: undefined }); redirectToLogin() }\n * })\n */\nexport function configureApi(config: IApiConfig): AxiosInstance {\n const { baseURL, getToken, onTokenRefresh, onUnauthorized } = config\n\n const newApi = axios.create({\n baseURL,\n headers: {\n 'Content-Type': 'application/json',\n ...(getToken() && { Authorization: `Bearer ${getToken()}` })\n }\n })\n\n newApi.interceptors.request.use((reqConfig) => {\n const token = getToken()\n if (token) {\n reqConfig.headers.Authorization = `Bearer ${token}`\n }\n return reqConfig\n })\n\n const refreshAxios = axios.create({ baseURL })\n\n newApi.interceptors.response.use(\n (response) => response,\n async (error) => {\n const originalRequest = error.config\n\n if (error.response?.status === 401 && !originalRequest._retry && onTokenRefresh && onUnauthorized) {\n originalRequest._retry = true\n\n try {\n const response = await refreshAxios.get('/auth/refresh', {\n headers: getToken() ? { Authorization: `Bearer ${getToken()}` } : {}\n })\n const newToken = response.data?.token\n if (newToken) {\n onTokenRefresh(newToken)\n originalRequest.headers.Authorization = `Bearer ${newToken}`\n return newApi(originalRequest)\n }\n } catch {\n onUnauthorized()\n return Promise.reject(error)\n }\n }\n\n return Promise.reject(error)\n }\n )\n\n api = newApi\n return api\n}\n\n/**\n * Shared axios instance used by all services.\n * Valid only after the consuming app has called configureApi().\n */\nexport { api }\n","import type {\n IAttribute,\n IAttributeFilter,\n IAttributeResponse,\n IAttributeValue\n} from '../interfaces/attribute.interface'\nimport { api } from './config'\n\nexport const getAttributes = async ({\n skip,\n limit,\n query\n}: {\n skip: number\n limit: number\n query: string\n}): Promise<IAttributeResponse> => {\n const { data } = await api.get('/attribute/category', { params: { skip, limit, query } })\n return data\n}\n\nexport const getAttributesForSelect = async (): Promise<IAttribute[]> => {\n const { data } = await api.get('/attribute/select')\n return data\n}\n\nexport const getAttributesTable = async ({\n skip,\n limit,\n filters\n}: {\n skip?: number\n limit?: number\n filters?: IAttributeFilter\n}): Promise<IAttributeResponse> => {\n const queryParams = new URLSearchParams({\n skip: skip?.toString() ?? \"\",\n limit: limit?.toString() ?? \"\",\n ...(filters?.query && { query: filters.query }),\n ...(filters?.categoryId && { categoryId: filters.categoryId.toString() }),\n ...(filters?.productId && { productId: filters.productId.toString() }),\n ...(filters?.materialId && { materialId: filters.materialId.toString() }),\n })\n const { data } = await api.get(`/attribute?${queryParams}`)\n return data\n}\n\nexport const getAttributeById = async ({\n attributeId\n}: {\n attributeId: string\n}): Promise<IAttribute> => {\n const { data } = await api.get(`/attribute/${attributeId}`)\n return data\n}\n\nexport const getAttributesByProductID = async ({\n productId\n}: {\n productId: string\n}): Promise<IAttribute[]> => {\n const { data } = await api.get(`/attribute/${productId}/product`)\n return data\n}\n\nexport const getAttributesByCategoryID = async ({\n categoryID\n}: {\n categoryID: string\n}): Promise<IAttribute[]> => {\n const { data } = await api.get(`/attribute/${categoryID}/category/`)\n return data\n}\n\nexport const getAttributeValues = async ({\n attributeId\n}: {\n attributeId: string\n}): Promise<IAttributeValue[]> => {\n const { data } = await api.get(`/attribute/${attributeId}/values`)\n return data\n}\n\nexport const createAttribute = async ({\n attribute\n}: {\n attribute: {\n name: string\n values: string[]\n productId: number\n }\n}): Promise<IAttribute> => {\n const { data } = await api.post('/attribute', {\n name: attribute.name,\n values: attribute.values,\n productID: attribute.productId,\n })\n return data\n}\n\nexport const createAttributesValuesBatch = async ({\n productId,\n attributeValues,\n}: {\n productId: number;\n attributeValues: {\n attribute: string;\n values: string[];\n }[];\n}): Promise<IAttributeValue[]> => {\n const { data } = await api.post(`/attribute/batch`, {\n productId,\n attributeValues,\n });\n return data;\n};\n\nexport const createAttributesForCategory = async ({\n attributes\n}: {\n attributes: {\n categoryId: string\n attributes: {\n name: string\n values: string[]\n pricePerGram?: number | null\n }[]\n }\n}): Promise<IAttribute> => {\n const { data } = await api.post(`/attribute/category/`, {\n categoryID: attributes.categoryId,\n attributes: attributes.attributes\n })\n return data\n}\n\nexport const updateAttribute = async ({\n attributeId,\n attribute\n}: {\n attributeId: string\n attribute: IAttribute\n}): Promise<IAttribute> => {\n const { data } = await api.put(`/attribute/${attributeId}`, attribute)\n return data\n}\n\nexport const updateAttributesForCategory = async ({\n categoryId,\n attributes\n}: {\n categoryId: string\n attributes: {\n attributes: string[]\n }\n}): Promise<IAttribute> => {\n const { data } = await api.put(`/attribute/category/${categoryId}`, attributes)\n return data\n}\n\nexport const deleteAttribute = async ({\n attributeId\n}: {\n attributeId: string\n}): Promise<IAttribute> => {\n const { data } = await api.delete(`/attribute/${attributeId}`)\n return data\n}\n\nexport const undeleteAttribute = async ({\n attributeId\n}: {\n attributeId: string\n}): Promise<IAttribute> => {\n const { data } = await api.patch(`/attribute/${attributeId}`)\n return data\n}\n\n//create attribute value\nexport const createAttributeValue = async ({\n attributeId,\n value\n}: {\n attributeId: number\n value: string\n}): Promise<IAttributeValue> => {\n const { data } = await api.post(`/attribute/${attributeId}/values`, {\n attributeID: attributeId,\n value\n })\n return data\n}\n","import type { ReactNode } from 'react';\nimport { notifications } from '@mantine/notifications';\nimport { Text } from '@mantine/core';\n\n// Icons are provided by the consuming app so this library stays icon-agnostic\nlet defaultSuccessIcon: ReactNode = undefined;\nlet defaultErrorIcon: ReactNode = undefined;\n\n/**\n * Configure default icons for success and error notifications.\n * Call this once at app startup (e.g. in your root layout) with your preferred icon library.\n * @example\n * // With lucide-react\n * configureNotificationIcons({ successIcon: <Check />, errorIcon: <X /> });\n * // With react-icons\n * configureNotificationIcons({ successIcon: <FiCheck />, errorIcon: <FiX /> });\n */\nexport const configureNotificationIcons = (config: {\n successIcon?: ReactNode;\n errorIcon?: ReactNode;\n}): void => {\n if (config.successIcon !== undefined) defaultSuccessIcon = config.successIcon;\n if (config.errorIcon !== undefined) defaultErrorIcon = config.errorIcon;\n};\n\nexport const successNotification = ({\n title,\n message,\n icon,\n}: {\n title: string;\n message: string;\n /** Override the default success icon for this call (optional) */\n icon?: ReactNode;\n}): void => {\n notifications.show({\n title: <Text>{title}</Text>,\n message: message,\n color: 'teal',\n icon: icon ?? defaultSuccessIcon,\n });\n};\n\nexport const errorNotification = ({\n title,\n message,\n icon,\n}: {\n title: string;\n message: string;\n /** Override the default error icon for this call (optional) */\n icon?: ReactNode;\n}): void => {\n notifications.show({\n title: <Text>{title}</Text>,\n message: message,\n color: 'red',\n icon: icon ?? defaultErrorIcon,\n });\n};\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getAttributes,\n getAttributesForSelect,\n getAttributeById,\n getAttributesByProductID,\n getAttributesByCategoryID,\n getAttributeValues,\n createAttribute,\n createAttributesValuesBatch,\n createAttributesForCategory,\n createAttributeValue,\n updateAttribute,\n updateAttributesForCategory,\n deleteAttribute,\n undeleteAttribute,\n getAttributesTable,\n} from \"../services/attributes.service\";\nimport type {\n IAttribute,\n IAttributeQueryParams,\n IAttributeResponse,\n IAttributeValue,\n} from \"../interfaces/attribute.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst attributeQueryKeys = {\n all: [\"attributes\"] as const,\n table: (params: IAttributeQueryParams = {}) => [...attributeQueryKeys.all, \"table\", { skip: params.skip, limit: params.limit, filters: params.filters ?? {} }] as const,\n lists: () => [...attributeQueryKeys.all, \"list\"] as const,\n list: (params: TableQueryParams) =>\n [\n ...attributeQueryKeys.lists(),\n { skip: params.skip, limit: params.limit, query: params.query },\n ] as const,\n details: () => [...attributeQueryKeys.all, \"detail\"] as const,\n detail: (id: string) => [...attributeQueryKeys.details(), id] as const,\n forSelect: () => [...attributeQueryKeys.all, \"select\"] as const,\n byProduct: (productId: string) =>\n [...attributeQueryKeys.all, \"product\", productId] as const,\n byCategory: (categoryId: string) =>\n [...attributeQueryKeys.all, \"category\", categoryId] as const,\n values: (attributeId: string) =>\n [...attributeQueryKeys.all, \"values\", attributeId] as const,\n};\n\nexport const attributes = {\n queries: {\n all: [\"attributes\"] as const,\n getAttributes: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getAttributes({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query ?? \"\",\n }),\n queryKey: attributeQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getAttributesTable: (params: IAttributeQueryParams = {}) =>\n queryOptions({\n queryFn: () => getAttributesTable({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n filters: params.filters ?? undefined,\n }),\n queryKey: attributeQueryKeys.table(params),\n staleTime: 30_000,\n }),\n getAttributesForSelect: () =>\n queryOptions({\n queryFn: getAttributesForSelect,\n queryKey: attributeQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n getAttributeById: (id: string) =>\n queryOptions({\n queryFn: () => getAttributeById({ attributeId: id }),\n queryKey: attributeQueryKeys.detail(id),\n enabled: !!id,\n staleTime: 5 * 60 * 1000,\n }),\n getAttributesByProductID: (productId: string) =>\n queryOptions({\n queryFn: () => getAttributesByProductID({ productId }),\n queryKey: attributeQueryKeys.byProduct(productId),\n enabled: !!productId,\n staleTime: 5 * 60 * 1000,\n }),\n getAttributesByCategoryID: (categoryId: string) =>\n queryOptions({\n queryFn: () => getAttributesByCategoryID({ categoryID: categoryId }),\n queryKey: attributeQueryKeys.byCategory(categoryId),\n enabled: !!categoryId,\n staleTime: 5 * 60 * 1000,\n }),\n getAttributeValues: (attributeId: string) =>\n queryOptions({\n queryFn: () => getAttributeValues({ attributeId }),\n queryKey: attributeQueryKeys.values(attributeId),\n enabled: !!attributeId,\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n createAttribute: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IAttribute,\n Error,\n { attribute: { name: string; values: string[]; productId: number } }\n > => ({\n mutationFn: createAttribute,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n successNotification({\n title: \"Atributo creado\",\n message: \"El atributo se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error al crear atributo\",\n message: error.message || \"No se pudo crear el atributo.\",\n });\n },\n }),\n\n createAttributesValuesBatch: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IAttributeValue[],\n Error,\n {\n productId: number;\n attributeValues: { attribute: string; values: string[] }[];\n }\n > => ({\n mutationFn: createAttributesValuesBatch,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n successNotification({\n title: \"Valores creados\",\n message: \"Los valores de atributos se han creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudieron crear los valores.\",\n });\n },\n }),\n\n createAttributesForCategory: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IAttribute,\n Error,\n {\n attributes: {\n categoryId: string;\n attributes: {\n name: string;\n values: string[];\n pricePerGram?: number | null;\n }[];\n };\n }\n > => ({\n mutationFn: createAttributesForCategory,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n successNotification({\n title: \"Atributos creados\",\n message: \"Los atributos para la categoría se han creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudieron crear los atributos.\",\n });\n },\n }),\n\n createAttributeValue: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IAttributeValue,\n Error,\n { attributeId: number; value: string }\n > => ({\n mutationFn: createAttributeValue,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n successNotification({\n title: \"Valor creado\",\n message: \"El valor del atributo se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el valor.\",\n });\n },\n }),\n\n updateAttribute: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IAttribute,\n Error,\n { attributeId: string; attribute: IAttribute }\n > => ({\n mutationFn: updateAttribute,\n onSuccess: (_, { attributeId }) => {\n queryClient.invalidateQueries({\n queryKey: attributeQueryKeys.detail(attributeId),\n });\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n successNotification({\n title: \"Atributo actualizado\",\n message: \"El atributo se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el atributo.\",\n });\n },\n }),\n\n updateAttributesForCategory: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IAttribute,\n Error,\n { categoryId: string; attributes: { attributes: string[] } }\n > => ({\n mutationFn: updateAttributesForCategory,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n successNotification({\n title: \"Atributos actualizados\",\n message:\n \"Los atributos de la categoría se han actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudieron actualizar los atributos.\",\n });\n },\n }),\n\n deleteAttribute: (\n queryClient: QueryClient,\n ): UseMutationOptions<IAttribute, Error, { attributeId: string }> => ({\n mutationFn: deleteAttribute,\n onSuccess: (_, { attributeId }) => {\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n queryClient.removeQueries({\n queryKey: attributeQueryKeys.detail(attributeId),\n });\n successNotification({\n title: \"Atributo eliminado\",\n message: \"El atributo se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el atributo.\",\n });\n },\n }),\n\n undeleteAttribute: (\n queryClient: QueryClient,\n ): UseMutationOptions<IAttribute, Error, { attributeId: string }> => ({\n mutationFn: undeleteAttribute,\n onSuccess: (_, { attributeId }) => {\n queryClient.invalidateQueries({\n queryKey: attributeQueryKeys.detail(attributeId),\n });\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n successNotification({\n title: \"Atributo restaurado\",\n message: \"El atributo se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el atributo.\",\n });\n },\n }),\n },\n};\n\nexport { attributeQueryKeys };\n","import type { AgentResponse, IUser, IUserForm, UserResponse } from '../interfaces/user.interface'\nimport { api } from './config'\n\ninterface UserQuery {\n skip?: number\n limit?: number\n query?: string\n roleId?: string\n}\n\nexport const getSellersWithShift = async (): Promise<AgentResponse> => {\n const { data } = await api.get<AgentResponse>(`user/getSellersWithShift/`)\n return data\n}\n\nexport const getSellersOfDayForSelect = async ({\n date\n}: {\n date: string\n}): Promise<AgentResponse> => {\n const { data } = await api.get<AgentResponse>(`user/getSellersOfDayForSelect/${date}`)\n return data\n}\n\nexport const getAllAgents = async (): Promise<AgentResponse> => {\n const { data } = await api.get<AgentResponse>('user/getallagents')\n return data\n}\n\nexport const getUsers = async ({\n skip = 0,\n limit = 10,\n query = '',\n roleId,\n}: UserQuery): Promise<UserResponse> => {\n const params = new URLSearchParams({\n skip: String(skip),\n limit: String(limit),\n ...(query && { query }),\n ...(roleId && { roleId }),\n });\n const { data } = await api.get<UserResponse>(`user/?${params}`)\n return data\n}\n\nexport const getUserById = async ({ userId }: { userId: number }): Promise<IUser> => {\n const { data } = await api.get<IUser>(`user/${userId}`)\n return data\n}\n\nexport const createUser = async ({ user }: { user: IUserForm }): Promise<void> => {\n await api.post('user/', user)\n}\n\nexport const updateUser = async ({\n userId,\n user\n}: {\n userId: number\n user: IUserForm\n}): Promise<void> => {\n await api.put(`user/${userId}`, user)\n}\n\nexport const deleteUser = async ({ userId }: { userId: number }): Promise<void> => {\n await api.delete(`user/${userId}`)\n}\nexport const restoreUser = async ({ userId }: { userId: number }): Promise<void> => {\n await api.patch(`user/${userId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getUsers,\n getUserById,\n getSellersWithShift,\n getSellersOfDayForSelect,\n getAllAgents,\n createUser,\n updateUser,\n deleteUser,\n restoreUser,\n} from \"../services/user.service\";\nimport type {\n IUserForm,\n} from \"../interfaces/user.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst userQueryKeys = {\n all: [\"users\"] as const,\n lists: () => [...userQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...userQueryKeys.lists(), { filters: params }] as const,\n details: () => [...userQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...userQueryKeys.details(), id] as const,\n sellersWithShift: () => [...userQueryKeys.all, \"sellersWithShift\"] as const,\n sellersOfDay: (date: string) =>\n [...userQueryKeys.all, \"sellersOfDay\", date] as const,\n agents: () => [...userQueryKeys.all, \"agents\"] as const,\n};\n\nexport const users = {\n queries: {\n all: [\"users\"] as const,\n getUsers: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getUsers({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: userQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getUsersForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getUsers({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n roleId: params.columnFilters\n ?.find((f) => f.id === \"tblRoles_tblUsers_roleIDTotblRoles.role\")\n ?.value as string | undefined,\n }),\n queryKey: userQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getUserById: (id: number) =>\n queryOptions({\n queryFn: () => getUserById({ userId: id }),\n queryKey: userQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getSellersWithShift: () =>\n queryOptions({\n queryFn: getSellersWithShift,\n queryKey: userQueryKeys.sellersWithShift(),\n staleTime: 30_000,\n }),\n getSellersOfDayForSelect: (date: string) =>\n queryOptions({\n queryFn: () => getSellersOfDayForSelect({ date }),\n queryKey: userQueryKeys.sellersOfDay(date),\n enabled: !!date,\n staleTime: 5 * 60 * 1000,\n }),\n getAllAgents: () =>\n queryOptions({\n queryFn: getAllAgents,\n queryKey: userQueryKeys.agents(),\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n createUser: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { user: IUserForm }> => ({\n mutationFn: createUser,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: userQueryKeys.all });\n successNotification({\n title: \"Usuario creado\",\n message: \"El usuario se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el usuario.\",\n });\n },\n }),\n\n updateUser: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { userId: number; user: IUserForm }> => ({\n mutationFn: updateUser,\n onSuccess: (_, { userId }) => {\n queryClient.invalidateQueries({\n queryKey: userQueryKeys.detail(userId),\n });\n queryClient.invalidateQueries({ queryKey: userQueryKeys.lists() });\n successNotification({\n title: \"Usuario actualizado\",\n message: \"El usuario se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el usuario.\",\n });\n },\n }),\n\n deleteUser: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { userId: number }> => ({\n mutationFn: deleteUser,\n onSuccess: (_, { userId }) => {\n queryClient.invalidateQueries({ queryKey: userQueryKeys.lists() });\n queryClient.removeQueries({\n queryKey: userQueryKeys.detail(userId),\n });\n successNotification({\n title: \"Usuario eliminado\",\n message: \"El usuario se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el usuario.\",\n });\n },\n }),\n\n restoreUser: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { userId: number }> => ({\n mutationFn: restoreUser,\n onSuccess: (_, { userId }) => {\n queryClient.invalidateQueries({\n queryKey: userQueryKeys.detail(userId),\n });\n queryClient.invalidateQueries({ queryKey: userQueryKeys.lists() });\n successNotification({\n title: \"Usuario restaurado\",\n message: \"El usuario se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el usuario.\",\n });\n },\n }),\n },\n};\n\nexport { userQueryKeys };\n","import type {\n ICategory,\n ICategoryResponse,\n} from '../interfaces/category.interface'\nimport { api } from './config'\n\ninterface CategoryQuery {\n skip?: number\n limit?: number\n query?: string\n}\n\nexport const getCategoriesForSelect = async (): Promise<ICategory[]> => {\n const { data } = await api.get<ICategory[]>('category/categoriesSelect')\n return data\n}\n\nexport const getAllCategories = async (): Promise<ICategory[]> => {\n const { data } = await api.get<ICategory[]>('category/')\n return data\n}\n\nexport const getCategories = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: CategoryQuery): Promise<ICategoryResponse> => {\n const { data } = await api.get<ICategoryResponse>(\n `category/categoriesTable?skip=${skip}&limit=${limit}&query=${query}`\n )\n\n return data\n}\n\nexport const getCategoryById = async ({\n categoryId\n}: {\n categoryId: number\n}): Promise<ICategory> => {\n const { data } = await api.get(`/category/${categoryId}`)\n return data.data\n}\n\nexport const updateCategory = async ({\n categoryId,\n category\n}: {\n categoryId: number\n category: ICategory\n}): Promise<ICategory> => {\n const { data } = await api.put<ICategory>(`/category/${categoryId}`, category)\n return data\n}\n\nexport const createCategory = async ({ category }: { category: ICategory }): Promise<ICategory> => {\n const { data } = await api.post<ICategory>('category/', category)\n return data\n}\n\nexport const deleteCategory = async ({ categoryId }: { categoryId: number }): Promise<void> => {\n await api.delete(`/category/${categoryId}`)\n}\n\nexport const restoreCategory = async ({ categoryId }: { categoryId: number }): Promise<void> => {\n await api.patch(`/category/${categoryId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getCategories,\n getCategoryById,\n getCategoriesForSelect,\n getAllCategories,\n createCategory,\n updateCategory,\n deleteCategory,\n restoreCategory,\n} from \"../services/category.service\";\nimport type {\n ICategory,\n ICategoryResponse,\n} from \"../interfaces/category.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst categoryQueryKeys = {\n all: [\"categories\"] as const,\n lists: () => [...categoryQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...categoryQueryKeys.lists(), { filters: params }] as const,\n details: () => [...categoryQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...categoryQueryKeys.details(), id] as const,\n forSelect: () => [...categoryQueryKeys.all, \"select\"] as const,\n allList: () => [...categoryQueryKeys.all, \"all\"] as const,\n};\n\nexport const categories = {\n queries: {\n all: [\"categories\"] as const,\n getCategories: (params: {\n skip?: number;\n limit?: number;\n query?: string | null;\n }) =>\n queryOptions({\n queryFn: () =>\n getCategories({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: categoryQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getCategoriesForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getCategories({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: categoryQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getCategoryById: (id: number) =>\n queryOptions({\n queryFn: () => getCategoryById({ categoryId: id }),\n queryKey: categoryQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getCategoriesForSelect: () =>\n queryOptions({\n queryFn: getCategoriesForSelect,\n queryKey: categoryQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n getAllCategories: () =>\n queryOptions({\n queryFn: getAllCategories,\n queryKey: categoryQueryKeys.allList(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createCategory: (\n queryClient: QueryClient,\n ): UseMutationOptions<ICategory, Error, { category: ICategory }> => ({\n mutationFn: createCategory,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: categoryQueryKeys.all });\n successNotification({\n title: \"Categoría creada\",\n message: \"La categoría se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear la categoría.\",\n });\n },\n }),\n\n updateCategory: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n ICategory,\n Error,\n { categoryId: number; category: ICategory }\n > => ({\n mutationFn: updateCategory,\n onSuccess: (_, { categoryId }) => {\n queryClient.invalidateQueries({\n queryKey: categoryQueryKeys.detail(categoryId),\n });\n queryClient.invalidateQueries({ queryKey: categoryQueryKeys.lists() });\n successNotification({\n title: \"Categoría actualizada\",\n message: \"La categoría se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar la categoría.\",\n });\n },\n }),\n\n deleteCategory: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { categoryId: number }> => ({\n mutationFn: deleteCategory,\n onSuccess: (_, { categoryId }) => {\n queryClient.invalidateQueries({ queryKey: categoryQueryKeys.lists() });\n queryClient.removeQueries({\n queryKey: categoryQueryKeys.detail(categoryId),\n });\n successNotification({\n title: \"Categoría eliminada\",\n message: \"La categoría se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar la categoría.\",\n });\n },\n }),\n\n restoreCategory: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { categoryId: number }> => ({\n mutationFn: restoreCategory,\n onSuccess: (_, { categoryId }) => {\n queryClient.invalidateQueries({\n queryKey: categoryQueryKeys.detail(categoryId),\n });\n queryClient.invalidateQueries({ queryKey: categoryQueryKeys.lists() });\n successNotification({\n title: \"Categoría restaurada\",\n message: \"La categoría se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar la categoría.\",\n });\n },\n }),\n },\n};\n\nexport { categoryQueryKeys };\n","import type { IWareHouse, IWareHouseResponse } from '../interfaces/warehouse.interface'\nimport { api } from './config'\n\ninterface WareHouseQuery {\n skip?: number\n limit?: number\n query?: string\n}\n\nexport interface WarehouseResponse {\n wareHouseID: number\n wareHouse: string\n wareHouseWithLocation: string\n physicialLocationID: number\n isShowroom: boolean\n syncStatusID: number\n masterCodeID: null\n savedBy: null\n savedDate: null\n deletedBy: null\n deletedDate: null\n}\n\nexport const getWarehousesForSelect = async (): Promise<WarehouseResponse[]> => {\n const { data } = await api.get<WarehouseResponse[]>('warehouse/warehousesForSelect')\n return data\n}\n\nexport const getWarehouses = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: WareHouseQuery): Promise<IWareHouseResponse> => {\n const { data } = await api.get<IWareHouseResponse>(\n `warehouse/warehouses?skip=${skip}&limit=${limit}&query=${query}`\n )\n return data\n}\n\nexport const getWarehouseById = async ({\n warehouseId\n}: {\n warehouseId: number\n}): Promise<IWareHouse> => {\n const { data } = await api.get(`/warehouse/${warehouseId}`)\n return data.data\n}\n\nexport const updateWarehouse = async ({\n warehouseId,\n warehouse\n}: {\n warehouseId: number\n warehouse: FormData\n}): Promise<IWareHouse> => {\n const { data } = await api.put<IWareHouse>(`/warehouse/${warehouseId}`, warehouse, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const createWareHouse = async (warehouse: FormData): Promise<IWareHouse> => {\n const { data } = await api.post<IWareHouse>('warehouse/', warehouse, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const deleteWarehouse = async ({\n warehouseId\n}: {\n warehouseId: number\n}): Promise<void> => {\n await api.delete(`/warehouse/${warehouseId}`)\n}\n\nexport const restoreWarehouse = async ({\n warehouseId\n}: {\n warehouseId: number\n}): Promise<void> => {\n await api.patch(`/warehouse/${warehouseId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getWarehouses,\n getWarehouseById,\n getWarehousesForSelect,\n createWareHouse,\n updateWarehouse,\n deleteWarehouse,\n restoreWarehouse,\n} from \"../services/warehouse.service\";\nimport type { IWareHouse, IWareHouseResponse } from \"../interfaces/warehouse.interface\";\nimport type { WarehouseResponse } from \"../services/warehouse.service\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst warehouseQueryKeys = {\n all: [\"warehouses\"] as const,\n lists: () => [...warehouseQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...warehouseQueryKeys.lists(), { filters: params }] as const,\n details: () => [...warehouseQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...warehouseQueryKeys.details(), id] as const,\n forSelect: () => [...warehouseQueryKeys.all, \"select\"] as const,\n};\n\nexport const warehouses = {\n queries: {\n all: [\"warehouses\"] as const,\n getWarehouses: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getWarehouses({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: warehouseQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getWarehousesForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getWarehouses({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: warehouseQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getWarehouseById: (id: number) =>\n queryOptions({\n queryFn: () => getWarehouseById({ warehouseId: id }),\n queryKey: warehouseQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getWarehousesForSelect: () =>\n queryOptions({\n queryFn: getWarehousesForSelect,\n queryKey: warehouseQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createWarehouse: (\n queryClient: QueryClient,\n ): UseMutationOptions<IWareHouse, Error, FormData> => ({\n mutationFn: createWareHouse,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: warehouseQueryKeys.all });\n successNotification({\n title: \"Almacén creado\",\n message: \"El almacén se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el almacén.\",\n });\n },\n }),\n updateWarehouse: (\n queryClient: QueryClient,\n ): UseMutationOptions<IWareHouse, Error, { warehouseId: number; warehouse: FormData }> => ({\n mutationFn: updateWarehouse,\n onSuccess: (_, { warehouseId }) => {\n queryClient.invalidateQueries({ queryKey: warehouseQueryKeys.detail(warehouseId) });\n queryClient.invalidateQueries({ queryKey: warehouseQueryKeys.lists() });\n successNotification({\n title: \"Almacén actualizado\",\n message: \"El almacén se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el almacén.\",\n });\n },\n }),\n deleteWarehouse: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { warehouseId: number }> => ({\n mutationFn: deleteWarehouse,\n onSuccess: (_, { warehouseId }) => {\n queryClient.invalidateQueries({ queryKey: warehouseQueryKeys.lists() });\n queryClient.removeQueries({ queryKey: warehouseQueryKeys.detail(warehouseId) });\n successNotification({\n title: \"Almacén eliminado\",\n message: \"El almacén se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el almacén.\",\n });\n },\n }),\n restoreWarehouse: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { warehouseId: number }> => ({\n mutationFn: restoreWarehouse,\n onSuccess: (_, { warehouseId }) => {\n queryClient.invalidateQueries({ queryKey: warehouseQueryKeys.detail(warehouseId) });\n queryClient.invalidateQueries({ queryKey: warehouseQueryKeys.lists() });\n successNotification({\n title: \"Almacén restaurado\",\n message: \"El almacén se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el almacén.\",\n });\n },\n }),\n },\n};\n\nexport { warehouseQueryKeys };\n","import type {\n IClient,\n IClientRequest,\n IClientResponse,\n IClientResponseById\n} from '../interfaces/client.interface'\nimport { api } from './config'\n\nexport const getAllClients = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: {\n skip: number\n limit: number\n query?: string\n}): Promise<IClientResponse> => {\n const { data } = await api.get<IClientResponse>(\n `client/?skip=${skip}&limit=${limit}&query=${query}`\n )\n return data\n}\n\nexport const getClientsForSelect = async (): Promise<IClient[]> => {\n const { data } = await api.get<IClient[]>('client/select')\n return data\n}\n\nexport const getClientById = async ({\n clientId\n}: {\n clientId: number\n}): Promise<IClientResponseById> => {\n const { data } = await api.get<IClientResponseById>(`client/${clientId}`)\n return data\n}\n\nexport const createClient = async (client: IClientRequest): Promise<IClientResponse> => {\n const { data } = await api.post<IClientResponse>('client/', client)\n return data\n}\n\nexport const updateClient = async ({\n client,\n id\n}: {\n id: string\n client: IClient\n}): Promise<IClientResponse> => {\n const { data } = await api.put<IClientResponse>(`client/${id}`, client)\n return data\n}\n\nexport const deleteClient = async ({\n clientId\n}: {\n clientId: number\n}): Promise<IClientResponse> => {\n const { data } = await api.delete<IClientResponse>(`client/${clientId}`)\n return data\n}\n\nexport const restoreClient = async ({\n clientId\n}: {\n clientId: number\n}): Promise<IClientResponse> => {\n const { data } = await api.patch<IClientResponse>(`client/${clientId}`)\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getAllClients,\n getClientById,\n getClientsForSelect,\n createClient,\n updateClient,\n deleteClient,\n restoreClient,\n} from \"../services/client.service\";\nimport type {\n IClient,\n IClientRequest,\n IClientResponse,\n IClientResponseById,\n} from \"../interfaces/client.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst clientQueryKeys = {\n all: [\"clients\"] as const,\n lists: () => [...clientQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...clientQueryKeys.lists(), { filters: params }] as const,\n details: () => [...clientQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...clientQueryKeys.details(), id] as const,\n forSelect: () => [...clientQueryKeys.all, \"select\"] as const,\n};\n\nexport const clients = {\n queries: {\n all: [\"clients\"] as const,\n getClients: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getAllClients({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: clientQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getClientsForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getAllClients({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: clientQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getClientById: (id: number) =>\n queryOptions({\n queryFn: () => getClientById({ clientId: id }),\n queryKey: clientQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getClientsForSelect: () =>\n queryOptions({\n queryFn: getClientsForSelect,\n queryKey: clientQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createClient: (\n queryClient: QueryClient,\n ): UseMutationOptions<IClientResponse, Error, IClientRequest> => ({\n mutationFn: createClient,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: clientQueryKeys.all });\n successNotification({\n title: \"Cliente creado\",\n message: \"El cliente se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el cliente.\",\n });\n },\n }),\n updateClient: (\n queryClient: QueryClient,\n ): UseMutationOptions<IClientResponse, Error, { id: string; client: IClient }> => ({\n mutationFn: updateClient,\n onSuccess: (_, { id }) => {\n queryClient.invalidateQueries({ queryKey: clientQueryKeys.details() });\n queryClient.invalidateQueries({ queryKey: clientQueryKeys.lists() });\n successNotification({\n title: \"Cliente actualizado\",\n message: \"El cliente se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el cliente.\",\n });\n },\n }),\n deleteClient: (\n queryClient: QueryClient,\n ): UseMutationOptions<IClientResponse, Error, { clientId: number }> => ({\n mutationFn: deleteClient,\n onSuccess: (_, { clientId }) => {\n queryClient.invalidateQueries({ queryKey: clientQueryKeys.lists() });\n queryClient.removeQueries({ queryKey: clientQueryKeys.detail(clientId) });\n successNotification({\n title: \"Cliente eliminado\",\n message: \"El cliente se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el cliente.\",\n });\n },\n }),\n restoreClient: (\n queryClient: QueryClient,\n ): UseMutationOptions<IClientResponse, Error, { clientId: number }> => ({\n mutationFn: restoreClient,\n onSuccess: (_, { clientId }) => {\n queryClient.invalidateQueries({ queryKey: clientQueryKeys.detail(clientId) });\n queryClient.invalidateQueries({ queryKey: clientQueryKeys.lists() });\n successNotification({\n title: \"Cliente restaurado\",\n message: \"El cliente se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el cliente.\",\n });\n },\n }),\n },\n};\n\nexport { clientQueryKeys };\n","import type {\n IBankTerminal,\n IBankTerminalResponse,\n IBankTerminalForm,\n BankTerminalQuery,\n BankTerminalResponse\n} from '../interfaces/bankTerminal.interface'\nimport { api } from './config'\n\nexport const getBankTerminalsForSelect = async (): Promise<BankTerminalResponse[]> => {\n const { data } = await api.get<BankTerminalResponse[]>('bank-terminals/bankTerminalsSelect')\n return data\n}\n\nexport const getAllBankTerminals = async (): Promise<BankTerminalResponse[]> => {\n const { data } = await api.get<BankTerminalResponse[]>('bank-terminals/')\n return data\n}\n\nexport const getBankTerminals = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: BankTerminalQuery): Promise<IBankTerminalResponse> => {\n const { data } = await api.get<IBankTerminalResponse>(\n `bank-terminals/bankTerminalsTable/?skip=${skip}&limit=${limit}&query=${query}`\n )\n\n return data\n}\n\nexport const getBankTerminalById = async ({\n terminalId\n}: {\n terminalId: number\n}): Promise<IBankTerminal> => {\n const { data } = await api.get(`/bank-terminals/${terminalId}`)\n return data.data\n}\n\nexport const updateBankTerminal = async ({\n terminalId,\n terminal\n}: {\n terminalId: number\n terminal: IBankTerminalForm\n}): Promise<IBankTerminal> => {\n const { data } = await api.put<IBankTerminal>(`/bank-terminals/${terminalId}`, terminal)\n return data\n}\n\nexport const createBankTerminal = async ({\n terminal\n}: {\n terminal: IBankTerminalForm\n}): Promise<IBankTerminal> => {\n const { data } = await api.post<IBankTerminal>('bank-terminals/', terminal)\n return data\n}\n\nexport const deleteBankTerminal = async ({ terminalId }: { terminalId: number }): Promise<void> => {\n await api.delete(`/bank-terminals/${terminalId}`)\n}\n\nexport const restoreBankTerminal = async ({\n terminalId\n}: {\n terminalId: number\n}): Promise<void> => {\n await api.patch(`/bank-terminals/${terminalId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getBankTerminals,\n getBankTerminalById,\n getBankTerminalsForSelect,\n getAllBankTerminals,\n createBankTerminal,\n updateBankTerminal,\n deleteBankTerminal,\n restoreBankTerminal,\n} from \"../services/bankTerminal.service\";\nimport type {\n IBankTerminal,\n IBankTerminalForm,\n IBankTerminalResponse,\n} from \"../interfaces/bankTerminal.interface\";\nimport type { BankTerminalResponse } from \"../interfaces/bankTerminal.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst bankTerminalQueryKeys = {\n all: [\"bankTerminals\"] as const,\n lists: () => [...bankTerminalQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...bankTerminalQueryKeys.lists(), { filters: params }] as const,\n details: () => [...bankTerminalQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...bankTerminalQueryKeys.details(), id] as const,\n forSelect: () => [...bankTerminalQueryKeys.all, \"select\"] as const,\n allList: () => [...bankTerminalQueryKeys.all, \"all\"] as const,\n};\n\nexport const bankTerminals = {\n queries: {\n all: [\"bankTerminals\"] as const,\n getBankTerminals: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getBankTerminals({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: bankTerminalQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getBankTerminalsForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getBankTerminals({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: bankTerminalQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getBankTerminalById: (id: number) =>\n queryOptions({\n queryFn: () => getBankTerminalById({ terminalId: id }),\n queryKey: bankTerminalQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getBankTerminalsForSelect: () =>\n queryOptions({\n queryFn: getBankTerminalsForSelect,\n queryKey: bankTerminalQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n getAllBankTerminals: () =>\n queryOptions({\n queryFn: getAllBankTerminals,\n queryKey: bankTerminalQueryKeys.allList(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createBankTerminal: (\n queryClient: QueryClient,\n ): UseMutationOptions<IBankTerminal, Error, { terminal: IBankTerminalForm }> => ({\n mutationFn: createBankTerminal,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: bankTerminalQueryKeys.all });\n successNotification({\n title: \"Terminal creado\",\n message: \"El terminal se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el terminal.\",\n });\n },\n }),\n updateBankTerminal: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IBankTerminal,\n Error,\n { terminalId: number; terminal: IBankTerminalForm }\n > => ({\n mutationFn: updateBankTerminal,\n onSuccess: (_, { terminalId }) => {\n queryClient.invalidateQueries({ queryKey: bankTerminalQueryKeys.detail(terminalId) });\n queryClient.invalidateQueries({ queryKey: bankTerminalQueryKeys.lists() });\n successNotification({\n title: \"Terminal actualizado\",\n message: \"El terminal se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el terminal.\",\n });\n },\n }),\n deleteBankTerminal: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { terminalId: number }> => ({\n mutationFn: deleteBankTerminal,\n onSuccess: (_, { terminalId }) => {\n queryClient.invalidateQueries({ queryKey: bankTerminalQueryKeys.lists() });\n queryClient.removeQueries({ queryKey: bankTerminalQueryKeys.detail(terminalId) });\n successNotification({\n title: \"Terminal eliminado\",\n message: \"El terminal se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el terminal.\",\n });\n },\n }),\n restoreBankTerminal: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { terminalId: number }> => ({\n mutationFn: restoreBankTerminal,\n onSuccess: (_, { terminalId }) => {\n queryClient.invalidateQueries({ queryKey: bankTerminalQueryKeys.detail(terminalId) });\n queryClient.invalidateQueries({ queryKey: bankTerminalQueryKeys.lists() });\n successNotification({\n title: \"Terminal restaurado\",\n message: \"El terminal se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el terminal.\",\n });\n },\n }),\n },\n};\n\nexport { bankTerminalQueryKeys };\n","import type { IBatch, IBatchResponse } from '../interfaces/batch.interface'\nimport { api } from './config'\n\ninterface BatchQuery {\n skip?: number\n limit?: number\n query?: string\n productId?: number\n}\n\nexport const getBatchesForSelect = async (): Promise<IBatch[]> => {\n const { data } = await api.get<IBatch[]>('batch/batches-for-select')\n return data\n}\n\nexport const getBatches = async ({\n skip = 0,\n limit = 10,\n query = '',\n productId = 0\n}: BatchQuery): Promise<IBatchResponse> => {\n const { data } = await api.get<IBatchResponse>(\n `batch?skip=${skip}&limit=${limit}&query=${query}&productID=${productId}`\n )\n return data\n}\n\nexport const createBatch = async (batch: FormData): Promise<IBatch> => {\n const { data } = await api.post<IBatch>('batch/', batch)\n return data\n}\n\nexport const createBatchAndUpdateOtherBatches = async (batch: FormData): Promise<IBatch> => {\n const { data } = await api.post<IBatch>('batch/create-batch-and-update-other-batches', batch)\n return data\n}\n\nexport const getMatchedBatches = async ({\n productDetailId\n}: {\n productDetailId: number\n}): Promise<IBatch[]> => {\n const { data } = await api.get<IBatch[]>(\n `batch/matched-batches?productDetailID=${productDetailId}`\n )\n return data\n}\n\nexport interface UpdateBatchData {\n unitCost?: number\n unitSellingPrice?: number\n profitPercentage?: number\n}\n\nexport const updateBatch = async ({\n batchId,\n batchData\n}: {\n batchId: number\n batchData: UpdateBatchData\n}): Promise<IBatch> => {\n const { data } = await api.put<IBatch>(`batch/${batchId}`, batchData)\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getBatches,\n getBatchesForSelect,\n getMatchedBatches,\n createBatch,\n createBatchAndUpdateOtherBatches,\n updateBatch,\n type UpdateBatchData,\n} from \"../services/batch.service\";\nimport type { IBatch, IBatchResponse } from \"../interfaces/batch.interface\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst batchQueryKeys = {\n all: [\"batches\"] as const,\n lists: () => [...batchQueryKeys.all, \"list\"] as const,\n list: (params: {\n skip?: number;\n limit?: number;\n query?: string | null;\n productId?: number;\n }) => [...batchQueryKeys.lists(), { filters: params }] as const,\n forSelect: () => [...batchQueryKeys.all, \"select\"] as const,\n matched: (productDetailId: number) =>\n [...batchQueryKeys.all, \"matched\", productDetailId] as const,\n};\n\nexport const batches = {\n queries: {\n all: [\"batches\"] as const,\n getBatches: (params: {\n skip?: number;\n limit?: number;\n query?: string | null;\n productId?: number;\n }) =>\n queryOptions({\n queryFn: () =>\n getBatches({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n productId: params.productId,\n }),\n queryKey: batchQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getBatchesForSelect: () =>\n queryOptions({\n queryFn: getBatchesForSelect,\n queryKey: batchQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n getMatchedBatches: (productDetailId: number) =>\n queryOptions({\n queryFn: () => getMatchedBatches({ productDetailId }),\n queryKey: batchQueryKeys.matched(productDetailId),\n enabled: !!productDetailId && productDetailId > 0,\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n createBatch: (\n queryClient: QueryClient,\n ): UseMutationOptions<IBatch, Error, FormData> => ({\n mutationFn: createBatch,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: batchQueryKeys.all });\n successNotification({\n title: \"Lote creado\",\n message: \"El lote se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el lote.\",\n });\n },\n }),\n createBatchAndUpdateOtherBatches: (\n queryClient: QueryClient,\n ): UseMutationOptions<IBatch, Error, FormData> => ({\n mutationFn: createBatchAndUpdateOtherBatches,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: batchQueryKeys.all });\n successNotification({\n title: \"Lote creado\",\n message: \"El lote se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el lote.\",\n });\n },\n }),\n updateBatch: (\n queryClient: QueryClient,\n ): UseMutationOptions<IBatch, Error, { batchId: number; batchData: UpdateBatchData }> => ({\n mutationFn: updateBatch,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: batchQueryKeys.all });\n successNotification({\n title: \"Lote actualizado\",\n message: \"El lote se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el lote.\",\n });\n },\n }),\n },\n};\n\nexport { batchQueryKeys };\n","import type { IRole } from '../interfaces/role.interface'\nimport { api } from './config'\n\nexport const getRoles = async (): Promise<IRole[]> => {\n const response = await api.get('/role')\n return response.data\n}\n\nexport const getRoleByID = async ({\n roleId\n}: {\n roleId: number\n}): Promise<IRole> => {\n const response = await api.get(`/role/${roleId}`)\n return response.data\n}\n\nexport const createRole = async (role: IRole): Promise<IRole> => {\n const response = await api.post('/role', role)\n return response.data\n}\n\nexport const updateRole = async ({\n roleId,\n role\n}: {\n roleId: number\n role: IRole\n}): Promise<IRole> => {\n const response = await api.put(`/role/${roleId}`, role)\n return response.data\n}\n\nexport const deleteRole = async ({\n roleId\n}: {\n roleId: number\n}): Promise<void> => {\n await api.delete(`/role/${roleId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getRoles,\n getRoleByID,\n createRole,\n updateRole,\n deleteRole,\n} from \"../services/role.service\";\nimport type { IRole } from \"../interfaces/role.interface\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst roleQueryKeys = {\n all: [\"roles\"] as const,\n lists: () => [...roleQueryKeys.all, \"list\"] as const,\n details: () => [...roleQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...roleQueryKeys.details(), id] as const,\n};\n\nexport const roles = {\n queries: {\n all: [\"roles\"] as const,\n getRoles: () =>\n queryOptions({\n queryFn: getRoles,\n queryKey: roleQueryKeys.lists(),\n staleTime: 10 * 60 * 1000,\n }),\n getRoleById: (id: number) =>\n queryOptions({\n queryFn: () => getRoleByID({ roleId: id }),\n queryKey: roleQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n createRole: (\n queryClient: QueryClient,\n ): UseMutationOptions<IRole, Error, IRole> => ({\n mutationFn: createRole,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: roleQueryKeys.all });\n successNotification({\n title: \"Rol creado\",\n message: \"El rol se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el rol.\",\n });\n },\n }),\n updateRole: (\n queryClient: QueryClient,\n ): UseMutationOptions<IRole, Error, { roleId: number; role: IRole }> => ({\n mutationFn: updateRole,\n onSuccess: (_, { roleId }) => {\n queryClient.invalidateQueries({ queryKey: roleQueryKeys.detail(roleId) });\n queryClient.invalidateQueries({ queryKey: roleQueryKeys.lists() });\n successNotification({\n title: \"Rol actualizado\",\n message: \"El rol se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el rol.\",\n });\n },\n }),\n deleteRole: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { roleId: number }> => ({\n mutationFn: deleteRole,\n onSuccess: (_, { roleId }) => {\n queryClient.invalidateQueries({ queryKey: roleQueryKeys.lists() });\n queryClient.removeQueries({ queryKey: roleQueryKeys.detail(roleId) });\n successNotification({\n title: \"Rol eliminado\",\n message: \"El rol se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el rol.\",\n });\n },\n }),\n },\n};\n\nexport { roleQueryKeys };\n","import type {\n IProvider,\n IProviderForSelect,\n IProviderRequest,\n IProviderResponse\n} from '../interfaces/provider.interface'\nimport { api } from './config'\n\nexport const getAllProviders = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: {\n skip: number\n limit: number\n query?: string\n}): Promise<IProviderResponse> => {\n const { data } = await api.get<IProviderResponse>(\n `provider/?skip=${skip}&limit=${limit}&query=${query}`\n )\n return data\n}\n\nexport const getProviderById = async ({\n providerId\n}: {\n providerId: number\n}): Promise<IProvider> => {\n const { data } = await api.get<IProvider>(`provider/${providerId}`)\n return data\n}\n\nexport const getProvidersForSelect = async (): Promise<IProviderForSelect[]> => {\n const { data } = await api.get<IProviderForSelect[]>('provider/providersForSelect')\n return data\n}\n\nexport const createProvider = async (provider: IProviderRequest): Promise<IProviderResponse> => {\n const { data } = await api.post<IProviderResponse>('provider/', provider)\n return data\n}\n\nexport const updateProvider = async ({\n providerId,\n provider\n}: {\n providerId: string\n provider: IProvider\n}): Promise<IProviderResponse> => {\n const { data } = await api.put<IProviderResponse>(`provider/${providerId}`, provider)\n return data\n}\n\nexport const deleteProvider = async ({\n providerId\n}: {\n providerId: number\n}): Promise<IProviderResponse> => {\n const { data } = await api.delete<IProviderResponse>(`provider/${providerId}`)\n return data\n}\n\nexport const restoreProvider = async ({\n providerId\n}: {\n providerId: number\n}): Promise<IProviderResponse> => {\n const { data } = await api.patch<IProviderResponse>(`provider/${providerId}`)\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getAllProviders,\n getProviderById,\n getProvidersForSelect,\n createProvider,\n updateProvider,\n deleteProvider,\n restoreProvider,\n} from \"../services/provider.service\";\nimport type {\n IProvider,\n IProviderForSelect,\n IProviderRequest,\n IProviderResponse,\n} from \"../interfaces/provider.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst providerQueryKeys = {\n all: [\"providers\"] as const,\n lists: () => [...providerQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...providerQueryKeys.lists(), { filters: params }] as const,\n details: () => [...providerQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...providerQueryKeys.details(), id] as const,\n forSelect: () => [...providerQueryKeys.all, \"select\"] as const,\n};\n\nexport const providers = {\n queries: {\n all: [\"providers\"] as const,\n getProviders: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getAllProviders({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: providerQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getProvidersForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getAllProviders({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: providerQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getProviderById: (id: number) =>\n queryOptions({\n queryFn: () => getProviderById({ providerId: id }),\n queryKey: providerQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getProvidersForSelect: () =>\n queryOptions({\n queryFn: getProvidersForSelect,\n queryKey: providerQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createProvider: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProviderResponse, Error, IProviderRequest> => ({\n mutationFn: createProvider,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: providerQueryKeys.all });\n successNotification({\n title: \"Proveedor creado\",\n message: \"El proveedor se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el proveedor.\",\n });\n },\n }),\n updateProvider: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IProviderResponse,\n Error,\n { providerId: string; provider: IProvider }\n > => ({\n mutationFn: updateProvider,\n onSuccess: (_, { providerId }) => {\n const id = parseInt(providerId, 10);\n if (!isNaN(id)) {\n queryClient.invalidateQueries({ queryKey: providerQueryKeys.detail(id) });\n }\n queryClient.invalidateQueries({ queryKey: providerQueryKeys.lists() });\n successNotification({\n title: \"Proveedor actualizado\",\n message: \"El proveedor se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el proveedor.\",\n });\n },\n }),\n deleteProvider: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProviderResponse, Error, { providerId: number }> => ({\n mutationFn: deleteProvider,\n onSuccess: (_, { providerId }) => {\n queryClient.invalidateQueries({ queryKey: providerQueryKeys.lists() });\n queryClient.removeQueries({ queryKey: providerQueryKeys.detail(providerId) });\n successNotification({\n title: \"Proveedor eliminado\",\n message: \"El proveedor se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el proveedor.\",\n });\n },\n }),\n restoreProvider: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProviderResponse, Error, { providerId: number }> => ({\n mutationFn: restoreProvider,\n onSuccess: (_, { providerId }) => {\n queryClient.invalidateQueries({ queryKey: providerQueryKeys.detail(providerId) });\n queryClient.invalidateQueries({ queryKey: providerQueryKeys.lists() });\n successNotification({\n title: \"Proveedor restaurado\",\n message: \"El proveedor se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el proveedor.\",\n });\n },\n }),\n },\n};\n\nexport { providerQueryKeys };\n","import type { ILocation, ILocationResponse } from '../interfaces/location.interface'\nimport { api } from './config'\n\ninterface LocationQuery {\n skip?: number\n limit?: number\n query?: string\n}\n\nexport interface LocationResponse {\n physicalLocationID: number\n name: string\n addressID: number\n isOpen: boolean\n syncStatusID: number\n masterCodeID: null\n savedBy: null\n savedDate: null\n deletedBy: null\n deletedDate: null\n}\n\nexport const getAllLocations = async (): Promise<LocationResponse[]> => {\n const { data } = await api.get<LocationResponse[]>('location/')\n return data\n}\n\nexport const getLocationsForSelect = async (): Promise<LocationResponse[]> => {\n const { data } = await api.get<LocationResponse[]>('location/locationsForSelect')\n return data\n}\n\nexport const getLocations = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: LocationQuery): Promise<ILocationResponse> => {\n const { data } = await api.get<ILocationResponse>(\n `location/locations?skip=${skip}&limit=${limit}&query=${query}`\n )\n return data\n}\n\nexport const getLocationById = async ({\n locationId\n}: {\n locationId: number\n}): Promise<ILocation> => {\n const { data } = await api.get(`/location/${locationId}`)\n return data.data\n}\n\nexport const updateLocation = async ({\n locationId,\n location\n}: {\n locationId: number\n location: FormData\n}): Promise<ILocation> => {\n const { data } = await api.put<ILocation>(`/location/${locationId}`, location, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const createLocation = async (location: FormData): Promise<ILocation> => {\n const { data } = await api.post<ILocation>('location/', location, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const deleteLocation = async ({\n physicalLocationId\n}: {\n physicalLocationId: number\n}): Promise<void> => {\n await api.delete(`/location/${physicalLocationId}`)\n}\n\nexport const restoreLocation = async ({\n physicalLocationId\n}: {\n physicalLocationId: number\n}): Promise<void> => {\n await api.patch(`/location/${physicalLocationId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getLocations,\n getLocationById,\n getLocationsForSelect,\n getAllLocations,\n createLocation,\n updateLocation,\n deleteLocation,\n restoreLocation,\n} from \"../services/location.service\";\nimport type { ILocation, ILocationResponse } from \"../interfaces/location.interface\";\nimport type { LocationResponse } from \"../services/location.service\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst locationQueryKeys = {\n all: [\"locations\"] as const,\n lists: () => [...locationQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...locationQueryKeys.lists(), { filters: params }] as const,\n details: () => [...locationQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...locationQueryKeys.details(), id] as const,\n forSelect: () => [...locationQueryKeys.all, \"select\"] as const,\n allList: () => [...locationQueryKeys.all, \"all\"] as const,\n};\n\nexport const locations = {\n queries: {\n all: [\"locations\"] as const,\n getLocations: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getLocations({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: locationQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getLocationsForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getLocations({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: locationQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getLocationById: (id: number) =>\n queryOptions({\n queryFn: () => getLocationById({ locationId: id }),\n queryKey: locationQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getLocationsForSelect: () =>\n queryOptions({\n queryFn: getLocationsForSelect,\n queryKey: locationQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n getAllLocations: () =>\n queryOptions({\n queryFn: getAllLocations,\n queryKey: locationQueryKeys.allList(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createLocation: (\n queryClient: QueryClient,\n ): UseMutationOptions<ILocation, Error, FormData> => ({\n mutationFn: createLocation,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: locationQueryKeys.all });\n successNotification({\n title: \"Ubicación creada\",\n message: \"La ubicación se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear la ubicación.\",\n });\n },\n }),\n updateLocation: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n ILocation,\n Error,\n { locationId: number; location: FormData }\n > => ({\n mutationFn: updateLocation,\n onSuccess: (_, { locationId }) => {\n queryClient.invalidateQueries({ queryKey: locationQueryKeys.detail(locationId) });\n queryClient.invalidateQueries({ queryKey: locationQueryKeys.lists() });\n successNotification({\n title: \"Ubicación actualizada\",\n message: \"La ubicación se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar la ubicación.\",\n });\n },\n }),\n deleteLocation: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { physicalLocationId: number }> => ({\n mutationFn: deleteLocation,\n onSuccess: (_, { physicalLocationId }) => {\n queryClient.invalidateQueries({ queryKey: locationQueryKeys.lists() });\n queryClient.removeQueries({\n queryKey: locationQueryKeys.detail(physicalLocationId),\n });\n successNotification({\n title: \"Ubicación eliminada\",\n message: \"La ubicación se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar la ubicación.\",\n });\n },\n }),\n restoreLocation: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { physicalLocationId: number }> => ({\n mutationFn: restoreLocation,\n onSuccess: (_, { physicalLocationId }) => {\n queryClient.invalidateQueries({\n queryKey: locationQueryKeys.detail(physicalLocationId),\n });\n queryClient.invalidateQueries({ queryKey: locationQueryKeys.lists() });\n successNotification({\n title: \"Ubicación restaurada\",\n message: \"La ubicación se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar la ubicación.\",\n });\n },\n }),\n },\n};\n\nexport { locationQueryKeys };\n","import type { IMaterial } from '../interfaces/material.interface'\nimport { api } from './config'\n\nexport interface MaterialResponse {\n data: IMaterial[]\n total: number\n skip: number\n limit: number\n}\n\ninterface MaterialQuery {\n skip?: number\n limit?: number\n query?: string\n}\n\nexport const getAllMaterials = async (): Promise<IMaterial[]> => {\n const { data } = await api.get<IMaterial[]>('material/')\n return data\n}\n\nexport const getMaterials = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: MaterialQuery): Promise<MaterialResponse> => {\n const { data } = await api.get<MaterialResponse>(\n `material/materialsTable?skip=${skip}&limit=${limit}&query=${query}`\n )\n return data\n}\n\nexport const getMaterialById = async ({\n materialId\n}: {\n materialId: number\n}): Promise<IMaterial> => {\n const { data } = await api.get(`material/${materialId}`)\n return data.data\n}\n\nexport const getMaterialsForSelect = async (): Promise<IMaterial[]> => {\n const { data } = await api.get<IMaterial[]>('material/select')\n return data\n}\n\nexport const createMaterial = async ({ material }: { material: IMaterial }): Promise<IMaterial> => {\n const { data } = await api.post<IMaterial>('material/', material)\n return data\n}\n\nexport const updateMaterial = async ({\n materialId,\n material\n}: {\n materialId: number\n material: IMaterial\n}): Promise<IMaterial> => {\n const { data } = await api.put<IMaterial>(`material/${materialId}`, material)\n return data\n}\n\nexport const deleteMaterial = async ({ materialId }: { materialId: number }): Promise<void> => {\n await api.delete(`material/${materialId}`)\n}\nexport const undeleteMaterial = async ({ materialId }: { materialId: number }): Promise<void> => {\n await api.patch(`material/${materialId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getMaterials,\n getMaterialById,\n getMaterialsForSelect,\n getAllMaterials,\n createMaterial,\n updateMaterial,\n deleteMaterial,\n undeleteMaterial,\n} from \"../services/material.service\";\nimport type { IMaterial } from \"../interfaces/material.interface\";\nimport type { MaterialResponse } from \"../services/material.service\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst materialQueryKeys = {\n all: [\"materials\"] as const,\n lists: () => [...materialQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...materialQueryKeys.lists(), { filters: params }] as const,\n details: () => [...materialQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...materialQueryKeys.details(), id] as const,\n forSelect: () => [...materialQueryKeys.all, \"select\"] as const,\n allList: () => [...materialQueryKeys.all, \"all\"] as const,\n};\n\nexport const materials = {\n queries: {\n all: [\"materials\"] as const,\n getMaterials: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getMaterials({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: materialQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getMaterialsForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getMaterials({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: materialQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getMaterialById: (id: number) =>\n queryOptions({\n queryFn: () => getMaterialById({ materialId: id }),\n queryKey: materialQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getMaterialsForSelect: () =>\n queryOptions({\n queryFn: getMaterialsForSelect,\n queryKey: materialQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n getAllMaterials: () =>\n queryOptions({\n queryFn: getAllMaterials,\n queryKey: materialQueryKeys.allList(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createMaterial: (\n queryClient: QueryClient,\n ): UseMutationOptions<IMaterial, Error, { material: IMaterial }> => ({\n mutationFn: createMaterial,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: materialQueryKeys.all });\n successNotification({\n title: \"Material creado\",\n message: \"El material se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el material.\",\n });\n },\n }),\n updateMaterial: (\n queryClient: QueryClient,\n ): UseMutationOptions<IMaterial, Error, { materialId: number; material: IMaterial }> => ({\n mutationFn: updateMaterial,\n onSuccess: (_, { materialId }) => {\n queryClient.invalidateQueries({ queryKey: materialQueryKeys.detail(materialId) });\n queryClient.invalidateQueries({ queryKey: materialQueryKeys.lists() });\n successNotification({\n title: \"Material actualizado\",\n message: \"El material se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el material.\",\n });\n },\n }),\n deleteMaterial: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { materialId: number }> => ({\n mutationFn: deleteMaterial,\n onSuccess: (_, { materialId }) => {\n queryClient.invalidateQueries({ queryKey: materialQueryKeys.lists() });\n queryClient.removeQueries({ queryKey: materialQueryKeys.detail(materialId) });\n successNotification({\n title: \"Material eliminado\",\n message: \"El material se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el material.\",\n });\n },\n }),\n undeleteMaterial: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { materialId: number }> => ({\n mutationFn: undeleteMaterial,\n onSuccess: (_, { materialId }) => {\n queryClient.invalidateQueries({ queryKey: materialQueryKeys.detail(materialId) });\n queryClient.invalidateQueries({ queryKey: materialQueryKeys.lists() });\n successNotification({\n title: \"Material restaurado\",\n message: \"El material se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el material.\",\n });\n },\n }),\n },\n};\n\nexport { materialQueryKeys };\n","import type { IPriceType, IPriceTypeResponse } from '../interfaces/priceType.interface'\nimport { api } from './config'\nimport type { IRequest } from '../interfaces/util.interface'\n\nexport const getPriceTypesForSelect = async (): Promise<IPriceType[]> => {\n const { data } = await api.get<IPriceType[]>('price-type/select')\n return data\n}\n\nexport const getAllPriceTypes = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: IRequest): Promise<IPriceTypeResponse> => {\n const { data } = await api.get<IPriceTypeResponse>(\n `price-type/?skip=${skip}&limit=${limit}&query=${query}`\n )\n return data\n}\n\nexport const createPriceType = async ({\n priceType\n}: {\n priceType: IPriceType\n}): Promise<IPriceType> => {\n const { data } = await api.post<IPriceType>('price-type/', priceType)\n return data\n}\n\nexport const getPriceTypeById = async ({\n priceTypeId\n}: {\n priceTypeId: number\n}): Promise<IPriceType> => {\n const { data } = await api.get<IPriceType>(`price-type/${priceTypeId}`)\n return data\n}\n\nexport const updatePriceType = async ({\n priceTypeId,\n priceType\n}: {\n priceTypeId: number\n priceType: IPriceType\n}): Promise<IPriceType> => {\n const { data } = await api.put<IPriceType>(`price-type/${priceTypeId}`, priceType)\n return data\n}\n\nexport const deletePriceType = async ({ priceTypeId }: { priceTypeId: number }): Promise<void> => {\n await api.delete<void>(`price-type/${priceTypeId}`)\n}\n\nexport const undeletePriceType = async ({\n priceTypeId\n}: {\n priceTypeId: number\n}): Promise<void> => {\n await api.patch<void>(`price-type/${priceTypeId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getAllPriceTypes,\n getPriceTypeById,\n getPriceTypesForSelect,\n createPriceType,\n updatePriceType,\n deletePriceType,\n undeletePriceType,\n} from \"../services/priceType.service\";\nimport type {\n IPriceType,\n IPriceTypeResponse,\n} from \"../interfaces/priceType.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst priceTypeQueryKeys = {\n all: [\"priceTypes\"] as const,\n lists: () => [...priceTypeQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...priceTypeQueryKeys.lists(), { filters: params }] as const,\n details: () => [...priceTypeQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...priceTypeQueryKeys.details(), id] as const,\n forSelect: () => [...priceTypeQueryKeys.all, \"select\"] as const,\n};\n\nexport const priceTypes = {\n queries: {\n all: [\"priceTypes\"] as const,\n getPriceTypes: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getAllPriceTypes({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: priceTypeQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getPriceTypesForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getAllPriceTypes({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: priceTypeQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getPriceTypeById: (id: number) =>\n queryOptions({\n queryFn: () => getPriceTypeById({ priceTypeId: id }),\n queryKey: priceTypeQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getPriceTypesForSelect: () =>\n queryOptions({\n queryFn: getPriceTypesForSelect,\n queryKey: priceTypeQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createPriceType: (\n queryClient: QueryClient,\n ): UseMutationOptions<IPriceType, Error, { priceType: IPriceType }> => ({\n mutationFn: createPriceType,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: priceTypeQueryKeys.all });\n successNotification({\n title: \"Tipo de precio creado\",\n message: \"El tipo de precio se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el tipo de precio.\",\n });\n },\n }),\n updatePriceType: (\n queryClient: QueryClient,\n ): UseMutationOptions<IPriceType, Error, { priceTypeId: number; priceType: IPriceType }> => ({\n mutationFn: updatePriceType,\n onSuccess: (_, { priceTypeId }) => {\n queryClient.invalidateQueries({ queryKey: priceTypeQueryKeys.detail(priceTypeId) });\n queryClient.invalidateQueries({ queryKey: priceTypeQueryKeys.lists() });\n successNotification({\n title: \"Tipo de precio actualizado\",\n message: \"El tipo de precio se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el tipo de precio.\",\n });\n },\n }),\n deletePriceType: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { priceTypeId: number }> => ({\n mutationFn: deletePriceType,\n onSuccess: (_, { priceTypeId }) => {\n queryClient.invalidateQueries({ queryKey: priceTypeQueryKeys.lists() });\n queryClient.removeQueries({ queryKey: priceTypeQueryKeys.detail(priceTypeId) });\n successNotification({\n title: \"Tipo de precio eliminado\",\n message: \"El tipo de precio se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el tipo de precio.\",\n });\n },\n }),\n undeletePriceType: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { priceTypeId: number }> => ({\n mutationFn: undeletePriceType,\n onSuccess: (_, { priceTypeId }) => {\n queryClient.invalidateQueries({ queryKey: priceTypeQueryKeys.detail(priceTypeId) });\n queryClient.invalidateQueries({ queryKey: priceTypeQueryKeys.lists() });\n successNotification({\n title: \"Tipo de precio restaurado\",\n message: \"El tipo de precio se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el tipo de precio.\",\n });\n },\n }),\n },\n};\n\nexport { priceTypeQueryKeys };\n","import type { IFilterType } from '../interfaces/filters.interface'\nimport type {\n IProductResponse,\n IProduct,\n IProductDetailsResponse,\n IProductDetails\n} from '../interfaces/product.interface'\nimport { api } from './config'\n\ninterface ProductQuery {\n skip?: number\n limit?: number\n filters?: IFilterType\n}\n\ninterface CategoryQuery {\n category: number\n skip?: number\n limit?: number\n filters?: IFilterType\n}\n\nexport const getProductsForSelect = async (): Promise<IProduct[]> => {\n const { data } = await api.get<IProduct[]>('/product/select')\n return data\n}\n\nexport const getProducts = async ({\n skip = 0,\n limit = 16,\n filters\n}: ProductQuery): Promise<IProductDetailsResponse> => {\n const queryParams = new URLSearchParams({\n skip: skip.toString(),\n limit: limit.toString(),\n ...(filters?.query && { query: filters.query }),\n ...(filters?.batchId && { batchId: filters.batchId }),\n ...(filters?.categoryId && { categoryId: filters.categoryId.toString() }),\n ...(filters?.supplierId && { supplierId: filters.supplierId.toString() }),\n ...(filters?.warehouseId && { warehouseId: filters.warehouseId.toString() }),\n ...(filters?.priceRangeMin && { minPrice: filters.priceRangeMin.toString() }),\n ...(filters?.priceRangeMax && { maxPrice: filters.priceRangeMax.toString() })\n })\n\n const { data } = await api.get<IProductDetailsResponse>(`product?${queryParams}`)\n return data\n}\n\nexport const getProductsTable = async ({\n skip = 0,\n limit = 16,\n filters\n}: ProductQuery): Promise<IProductResponse> => {\n const queryParams = new URLSearchParams({\n skip: skip.toString(),\n limit: limit.toString(),\n ...(filters?.query && { query: filters.query }),\n ...(filters?.batchId && { batchId: filters.batchId }),\n ...(filters?.categoryId && { categoryId: filters.categoryId.toString() }),\n ...(filters?.supplierId && { supplierId: filters.supplierId.toString() }),\n ...(filters?.warehouseId && { warehouseId: filters.warehouseId.toString() }),\n ...(filters?.priceRangeMin && { minPrice: filters.priceRangeMin.toString() }),\n ...(filters?.priceRangeMax && { maxPrice: filters.priceRangeMax.toString() })\n })\n\n const { data } = await api.get<IProductResponse>(`product/table?${queryParams}`)\n return data\n}\n\nexport const getProductById = async ({\n productId\n}: {\n productId: number\n}): Promise<IProduct> => {\n const { data } = await api.get(`product/${productId}`)\n return data.data\n}\n\nexport const getProductVariants = async ({\n productId,\n skip = 0,\n limit = 10,\n query = ''\n}: {\n productId: number\n skip?: number\n limit?: number\n query?: string\n}): Promise<IProductDetailsResponse> => {\n const { data } = await api.get<IProductDetailsResponse>(`/product/variants/${productId}`, {\n params: {\n skip: skip.toString(),\n limit: limit.toString(),\n ...(query && { query })\n }\n })\n return data\n}\n\nexport const getProductVariantsForSelect = async ({\n productId\n}: {\n productId: number\n}): Promise<IProductDetails[]> => {\n const { data } = await api.get<IProductDetails[]>(`/product/variants/select/${productId}`)\n return data\n}\n\nexport const getProductVariantById = async ({\n productDetailId\n}: {\n productDetailId: number\n}): Promise<IProductDetails> => {\n const { data } = await api.get<IProductDetails>(`/product/variants/variant/${productDetailId}`)\n return data\n}\n\nexport const createProductVariant = async (variant: FormData): Promise<IProductDetails> => {\n const { data } = await api.post<IProductDetails>('product/variants', variant, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const createProductVariants = async (formData: FormData): Promise<IProductDetails[]> => {\n const { data } = await api.post<IProductDetails[]>('product/variants', formData, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const updateProductVariant = async (data: FormData): Promise<IProductDetails> => {\n const { data: response } = await api.put<IProductDetails>(\n `product/variants/update/${data.get('productDetailID')}`,\n data,\n {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n }\n )\n return response\n}\n\nexport const deleteProductVariant = async ({\n productDetailId\n}: {\n productDetailId: number\n}): Promise<void> => {\n await api.delete(`/product/variants/${productDetailId}`)\n}\n\nexport const restoreProductVariant = async ({\n productDetailId\n}: {\n productDetailId: number\n}): Promise<void> => {\n await api.patch(`/product/variants/${productDetailId}`)\n}\n\nexport const createProduct = async (product: FormData): Promise<IProduct> => {\n const { data } = await api.post<IProduct>('product/', product, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const updateProduct = async ({\n productId,\n product\n}: {\n productId: number\n product: FormData\n}): Promise<IProduct> => {\n const { data } = await api.put<IProduct>(`/product/${productId}`, product, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const deleteImageFromProduct = async ({\n imageId\n}: {\n imageId: number\n}): Promise<void> => {\n await api.delete(`/product/images/${imageId}`)\n}\n\nexport const deleteProduct = async ({ productId }: { productId: number }): Promise<void> => {\n await api.delete(`/product/${productId}`)\n}\n\nexport const restoreProduct = async ({ productId }: { productId: number }): Promise<void> => {\n await api.patch(`/product/${productId}`)\n}\n\nexport const getProductsByCategory = async ({\n category,\n skip = 0,\n limit = 10,\n filters\n}: CategoryQuery): Promise<IProductResponse> => {\n const queryParams = new URLSearchParams({\n skip: skip.toString(),\n limit: limit.toString(),\n ...(filters?.query && { query: filters.query }),\n ...(filters?.batchId && { batchId: filters.batchId }),\n ...(filters?.supplierId && { supplierId: filters.supplierId.toString() }),\n ...(filters?.warehouseId && { warehouseId: filters.warehouseId.toString() }),\n ...(filters?.priceRangeMin && { minPrice: filters.priceRangeMin.toString() }),\n ...(filters?.priceRangeMax && { maxPrice: filters.priceRangeMax.toString() })\n })\n\n const { data } = await api.get<IProductResponse>(`product/category/${category}?${queryParams}`)\n return data\n}\n\nexport interface PrintProductTagResponse {\n message?: string\n [key: string]: unknown\n}\n\nexport const printProductTag = async ({\n stockId,\n productId,\n isSmall\n}: {\n stockId: number\n productId: number\n isSmall: boolean\n}): Promise<PrintProductTagResponse> => {\n const { data } = await api.post<PrintProductTagResponse>(`/product/printproducttag/`, {\n stockID: stockId,\n productID: productId,\n isSmall\n })\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getProducts,\n getProductsTable,\n getProductById,\n getProductsForSelect,\n getProductVariants,\n getProductVariantsForSelect,\n getProductVariantById,\n getProductsByCategory,\n createProduct,\n updateProduct,\n createProductVariant,\n createProductVariants,\n updateProductVariant,\n deleteProductVariant,\n restoreProductVariant,\n deleteImageFromProduct,\n deleteProduct,\n restoreProduct,\n} from \"../services/product.service\";\nimport type { IFilterType } from \"../interfaces/filters.interface\";\nimport type {\n IProduct,\n IProductDetails,\n IProductDetailsResponse,\n IProductResponse,\n} from \"../interfaces/product.interface\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nexport interface ProductQueryParams {\n skip?: number;\n limit?: number;\n filters?: IFilterType;\n}\n\nconst productQueryKeys = {\n all: [\"products\"] as const,\n lists: () => [...productQueryKeys.all, \"list\"] as const,\n list: (filters?: ProductQueryParams) =>\n [...productQueryKeys.lists(), { filters }] as const,\n table: (filters?: ProductQueryParams) =>\n [...productQueryKeys.all, \"table\", { filters }] as const,\n details: () => [...productQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...productQueryKeys.details(), id] as const,\n forSelect: () => [...productQueryKeys.all, \"select\"] as const,\n variants: (productId: number) =>\n [...productQueryKeys.all, \"variants\", productId] as const,\n variantsSelect: (productId: number) =>\n [...productQueryKeys.all, \"variantsSelect\", productId] as const,\n variant: (productDetailId: number) =>\n [...productQueryKeys.all, \"variant\", productDetailId] as const,\n byCategory: (category: number, filters?: IFilterType) =>\n [...productQueryKeys.all, \"category\", category, { filters }] as const,\n};\n\nexport const products = {\n queries: {\n all: [\"products\"] as const,\n getProducts: (params: ProductQueryParams = {}) =>\n queryOptions({\n queryFn: () =>\n getProducts({\n skip: params.skip ?? 0,\n limit: params.limit ?? 16,\n filters: params.filters,\n }),\n queryKey: productQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getProductsTable: (params: ProductQueryParams = {}) =>\n queryOptions({\n queryFn: () =>\n getProductsTable({\n skip: params.skip ?? 0,\n limit: params.limit ?? 16,\n filters: params.filters,\n }),\n queryKey: productQueryKeys.table(params),\n staleTime: 30_000,\n }),\n getProductById: (id: number) =>\n queryOptions({\n queryFn: () => getProductById({ productId: id }),\n queryKey: productQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getProductsForSelect: () =>\n queryOptions({\n queryFn: getProductsForSelect,\n queryKey: productQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n getProductVariants: (\n productId: number,\n params?: { skip?: number; limit?: number; query?: string },\n ) =>\n queryOptions({\n queryFn: () =>\n getProductVariants({\n productId,\n skip: params?.skip ?? 0,\n limit: params?.limit ?? 10,\n query: params?.query ?? \"\",\n }),\n queryKey: [...productQueryKeys.variants(productId), params ?? {}] as const,\n enabled: !!productId && productId > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getProductVariantsForSelect: (productId: number) =>\n queryOptions({\n queryFn: () => getProductVariantsForSelect({ productId }),\n queryKey: productQueryKeys.variantsSelect(productId),\n enabled: !!productId && productId > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getProductVariantById: (productDetailId: number) =>\n queryOptions({\n queryFn: () => getProductVariantById({ productDetailId }),\n queryKey: productQueryKeys.variant(productDetailId),\n enabled: !!productDetailId && productDetailId > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getProductsByCategory: (category: number, params?: ProductQueryParams) =>\n queryOptions({\n queryFn: () =>\n getProductsByCategory({\n category,\n skip: params?.skip ?? 0,\n limit: params?.limit ?? 10,\n filters: params?.filters,\n }),\n queryKey: productQueryKeys.byCategory(category, params?.filters),\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n createProduct: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProduct, Error, FormData> => ({\n mutationFn: createProduct,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Producto creado\",\n message: \"El producto se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el producto.\",\n });\n },\n }),\n updateProduct: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProduct, Error, { productId: number; product: FormData }> => ({\n mutationFn: updateProduct,\n onSuccess: (_, { productId }) => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.detail(productId) });\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Producto actualizado\",\n message: \"El producto se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el producto.\",\n });\n },\n }),\n createProductVariant: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProductDetails, Error, FormData> => ({\n mutationFn: createProductVariant,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Variante creada\",\n message: \"La variante se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear la variante.\",\n });\n },\n }),\n createProductVariants: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProductDetails[], Error, FormData> => ({\n mutationFn: createProductVariants,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Variantes creadas\",\n message: \"Las variantes se han creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudieron crear las variantes.\",\n });\n },\n }),\n updateProductVariant: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProductDetails, Error, FormData> => ({\n mutationFn: updateProductVariant,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Variante actualizada\",\n message: \"La variante se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar la variante.\",\n });\n },\n }),\n deleteProductVariant: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { productDetailId: number }> => ({\n mutationFn: deleteProductVariant,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Variante eliminada\",\n message: \"La variante se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar la variante.\",\n });\n },\n }),\n restoreProductVariant: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { productDetailId: number }> => ({\n mutationFn: restoreProductVariant,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Variante restaurada\",\n message: \"La variante se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar la variante.\",\n });\n },\n }),\n deleteImageFromProduct: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { imageId: number }> => ({\n mutationFn: deleteImageFromProduct,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Imagen eliminada\",\n message: \"La imagen se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar la imagen.\",\n });\n },\n }),\n deleteProduct: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { productId: number }> => ({\n mutationFn: deleteProduct,\n onSuccess: (_, { productId }) => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n queryClient.removeQueries({ queryKey: productQueryKeys.detail(productId) });\n successNotification({\n title: \"Producto eliminado\",\n message: \"El producto se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el producto.\",\n });\n },\n }),\n restoreProduct: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { productId: number }> => ({\n mutationFn: restoreProduct,\n onSuccess: (_, { productId }) => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.detail(productId) });\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Producto restaurado\",\n message: \"El producto se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el producto.\",\n });\n },\n }),\n },\n};\n\nexport { productQueryKeys };\n","import { api } from './config'\n\ninterface ExchangeQuery {\n skip?: number\n limit?: number\n query?: string\n}\n\nexport interface IExchange {\n exchangeRateID: number\n valorEnPesos: number\n fromDate: string\n toDate: string\n syncStatusID: number\n masterCodeID: null\n savedBy: null\n savedDate: null\n deletedBy: null\n deletedDate: null\n}\n\nexport interface PaymentType {\n value: number\n label: string\n}\n\nexport interface IExchangeResponse {\n total: number\n data: IExchange[]\n skip: number\n limit: number\n}\n\nexport const getPaymentTypes = async (): Promise<PaymentType[]> => {\n const { data } = await api.get<PaymentType[]>('exchange/getPaymentTypes')\n return data\n}\n\nexport const getExchangeRates = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: ExchangeQuery): Promise<IExchangeResponse> => {\n const { data } = await api.get<IExchangeResponse>(\n `exchange/exchangesTable?skip=${skip}&limit=${limit}&query=${query}`\n )\n\n return data\n}\n\n//obtener el exchange rate mediante fehca y hora\nexport const getExchangeRate = async (): Promise<IExchange> => {\n const { data } = await api.get<IExchange>('exchange/getExchangeRate')\n return data\n}\n\nexport const createExchangeRate = async ({\n exchangeRate\n}: {\n exchangeRate: IExchange\n}): Promise<IExchange> => {\n const { data } = await api.post<IExchange>('exchange/', exchangeRate)\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getExchangeRates,\n getExchangeRate,\n getPaymentTypes,\n createExchangeRate,\n} from \"../services/exchange.service\";\nimport type {\n IExchange,\n IExchangeResponse,\n PaymentType,\n} from \"../services/exchange.service\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst exchangeQueryKeys = {\n all: [\"exchange\"] as const,\n lists: () => [...exchangeQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...exchangeQueryKeys.lists(), { filters: params }] as const,\n rate: () => [...exchangeQueryKeys.all, \"rate\"] as const,\n paymentTypes: () => [...exchangeQueryKeys.all, \"paymentTypes\"] as const,\n};\n\nexport const exchange = {\n queries: {\n all: [\"exchange\"] as const,\n getExchangeRates: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getExchangeRates({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: exchangeQueryKeys.list(params),\n staleTime: 5 * 60 * 1000,\n }),\n getExchangeRate: () =>\n queryOptions({\n queryFn: getExchangeRate,\n queryKey: exchangeQueryKeys.rate(),\n staleTime: 60 * 1000,\n }),\n getPaymentTypes: () =>\n queryOptions({\n queryFn: getPaymentTypes,\n queryKey: exchangeQueryKeys.paymentTypes(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createExchangeRate: (\n queryClient: QueryClient,\n ): UseMutationOptions<IExchange, Error, { exchangeRate: IExchange }> => ({\n mutationFn: createExchangeRate,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: exchangeQueryKeys.all });\n successNotification({\n title: \"Tasa de cambio creada\",\n message: \"La tasa de cambio se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear la tasa de cambio.\",\n });\n },\n }),\n },\n};\n\nexport { exchangeQueryKeys };\n","import type { IPermissionRole, PermissionRole } from '../interfaces/permission.interface'\nimport { api } from './config'\n\nexport interface IUpdatePermission {\n id: number\n hasPermission: boolean\n}\n\nexport const getAllPermissions = async (): Promise<IPermissionRole> => {\n const response = await api.get<IPermissionRole>('/permission-role/')\n return response.data\n}\n\nexport const updatePermission = async (\n permission: IUpdatePermission\n): Promise<IUpdatePermission> => {\n const response = await api.put<IUpdatePermission>('/permission-role', permission)\n return response.data\n}\n\nexport const getPermissionRoleByRoleID = async ({\n roleId\n}: {\n roleId: number\n}): Promise<PermissionRole[]> => {\n const { data } = await api.get<PermissionRole[]>(`permission-role/${roleId}`)\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getAllPermissions,\n getPermissionRoleByRoleID,\n updatePermission,\n} from \"../services/permission.service\";\nimport type {\n IPermissionRole,\n PermissionRole,\n} from \"../interfaces/permission.interface\";\nimport type { IUpdatePermission } from \"../services/permission.service\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst permissionQueryKeys = {\n all: [\"permissions\"] as const,\n list: () => [...permissionQueryKeys.all, \"list\"] as const,\n byRole: (roleId: number) => [...permissionQueryKeys.all, \"role\", roleId] as const,\n};\n\nexport const permissions = {\n queries: {\n all: [\"permissions\"] as const,\n getPermissions: () =>\n queryOptions({\n queryFn: getAllPermissions,\n queryKey: permissionQueryKeys.list(),\n staleTime: 10 * 60 * 1000,\n }),\n getPermissionRoleByRoleID: (roleId: number) =>\n queryOptions({\n queryFn: () => getPermissionRoleByRoleID({ roleId }),\n queryKey: permissionQueryKeys.byRole(roleId),\n enabled: !!roleId && roleId > 0,\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n updatePermission: (\n queryClient: QueryClient,\n ): UseMutationOptions<IUpdatePermission, Error, IUpdatePermission> => ({\n mutationFn: updatePermission,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: permissionQueryKeys.all });\n successNotification({\n title: \"Permisos actualizados\",\n message: \"Los permisos se han actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudieron actualizar los permisos.\",\n });\n },\n }),\n },\n};\n\nexport { permissionQueryKeys };\n","import type {\n IPromotion,\n IPromotionResponse,\n IPromotionType\n} from '../interfaces/promotion.interface'\nimport { api } from './config'\n\nexport const isAValidDiscountCode = async ({\n discountCode\n}: {\n discountCode: string\n}): Promise<boolean> => {\n const { data } = await api.post('promotion/discount-code', { discountCode })\n return data.isValid\n}\n\ninterface PromotionQuery {\n skip?: number\n limit?: number\n query?: string\n}\n\nexport const getPromotions = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: PromotionQuery): Promise<IPromotionResponse> => {\n const queryParams = new URLSearchParams({\n skip: skip.toString(),\n limit: limit.toString(),\n query: query\n })\n const { data } = await api.get(`promotion?${queryParams}`)\n return data\n}\n\nexport const getPromotionsTypeForSelect = async (): Promise<IPromotionType[]> => {\n const { data } = await api.get('promotion/promotions-type/select')\n return data\n}\n\nexport const createPromotion = async (promotion: IPromotion): Promise<IPromotion> => {\n const { data } = await api.post('promotion', promotion)\n return data\n}\n\nexport const getPromotionById = async ({ id }: { id: string }): Promise<IPromotion> => {\n const { data } = await api.get(`promotion/${id}`)\n return data\n}\n\nexport const updatePromotion = async ({\n id,\n promotion\n}: {\n id: string\n promotion: IPromotion\n}): Promise<IPromotion> => {\n const { data } = await api.put(`promotion/${id}`, promotion)\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getPromotions,\n getPromotionById,\n getPromotionsTypeForSelect,\n createPromotion,\n updatePromotion,\n isAValidDiscountCode,\n} from \"../services/promotion.service\";\nimport type {\n IPromotion,\n IPromotionResponse,\n IPromotionType,\n} from \"../interfaces/promotion.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst promotionQueryKeys = {\n all: [\"promotions\"] as const,\n lists: () => [...promotionQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...promotionQueryKeys.lists(), { filters: params }] as const,\n details: () => [...promotionQueryKeys.all, \"detail\"] as const,\n detail: (id: string) => [...promotionQueryKeys.details(), id] as const,\n typesForSelect: () => [...promotionQueryKeys.all, \"types\"] as const,\n};\n\nexport const promotions = {\n queries: {\n all: [\"promotions\"] as const,\n getPromotions: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getPromotions({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: promotionQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getPromotionsForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getPromotions({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: promotionQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getPromotionById: (id: string) =>\n queryOptions({\n queryFn: () => getPromotionById({ id }),\n queryKey: promotionQueryKeys.detail(id),\n enabled: !!id,\n staleTime: 5 * 60 * 1000,\n }),\n getPromotionsTypeForSelect: () =>\n queryOptions({\n queryFn: getPromotionsTypeForSelect,\n queryKey: promotionQueryKeys.typesForSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createPromotion: (\n queryClient: QueryClient,\n ): UseMutationOptions<IPromotion, Error, IPromotion> => ({\n mutationFn: createPromotion,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: promotionQueryKeys.all });\n successNotification({\n title: \"Promoción creada\",\n message: \"La promoción se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear la promoción.\",\n });\n },\n }),\n updatePromotion: (\n queryClient: QueryClient,\n ): UseMutationOptions<IPromotion, Error, { id: string; promotion: IPromotion }> => ({\n mutationFn: updatePromotion,\n onSuccess: (_, { id }) => {\n queryClient.invalidateQueries({ queryKey: promotionQueryKeys.detail(id) });\n queryClient.invalidateQueries({ queryKey: promotionQueryKeys.lists() });\n successNotification({\n title: \"Promoción actualizada\",\n message: \"La promoción se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar la promoción.\",\n });\n },\n }),\n validateDiscountCode: (): UseMutationOptions<\n boolean,\n Error,\n { discountCode: string }\n > => ({\n mutationFn: ({ discountCode }) => isAValidDiscountCode({ discountCode }),\n }),\n },\n};\n\nexport { promotionQueryKeys };\n","import type { IOrder, IOrderResponse, TblOrderStatus } from '../interfaces/order.interface'\nimport { api } from './config'\n\nexport const getOrders = async ({\n skip = 0,\n limit = 10,\n query = '',\n commissionedBy = '',\n orderStatus = [],\n startDate = '',\n endDate = '',\n showOnlyReturns = false\n}: {\n skip?: number\n limit?: number\n query?: string\n commissionedBy?: string\n orderStatus?: string[]\n startDate?: string | null\n endDate?: string | null\n showOnlyReturns?: boolean\n}): Promise<IOrderResponse> => {\n const { data } = await api.get<IOrderResponse>('order', {\n params: { skip, limit, query, commissionedBy, orderStatus, startDate, endDate, showOnlyReturns }\n })\n return data\n}\n\nexport const getOrderById = async ({ orderId }: { orderId: number }): Promise<IOrder> => {\n const { data } = await api.get<IOrder>(`order/${orderId}`)\n return data\n}\n\nexport const getOrdersStatusForSelect = async (): Promise<TblOrderStatus[]> => {\n const { data } = await api.get<TblOrderStatus[]>('order/status')\n return data\n}\n\nexport interface ChangeProductRequest {\n orderID: number\n oldOrderDetailID: number\n newProductDetailID: number\n quantity: number\n reason?: string\n}\n\nexport interface ChangeProductResponse {\n success: boolean\n message: string\n priceDifference: number\n requiresAdditionalPayment: boolean\n requiresRefund: boolean\n order: IOrder\n}\n\nexport const changeOrderProduct = async (\n changeData: ChangeProductRequest\n): Promise<ChangeProductResponse> => {\n const { data } = await api.post<ChangeProductResponse>('order/change-product', changeData)\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getOrders,\n getOrderById,\n getOrdersStatusForSelect,\n changeOrderProduct,\n} from \"../services/order.service\";\nimport type {\n IOrder,\n IOrderResponse,\n TblOrderStatus,\n} from \"../interfaces/order.interface\";\nimport type {\n ChangeProductRequest,\n ChangeProductResponse,\n} from \"../services/order.service\";\n\nexport interface UseOrdersParams {\n skip?: number;\n limit?: number;\n query?: string;\n commissionedBy?: string;\n orderStatus?: string[];\n startDate?: string | null;\n endDate?: string | null;\n showOnlyReturns?: boolean;\n}\n\nconst orderQueryKeys = {\n all: [\"orders\"] as const,\n lists: () => [...orderQueryKeys.all, \"list\"] as const,\n list: (filters: UseOrdersParams) =>\n [...orderQueryKeys.lists(), { filters }] as const,\n details: () => [...orderQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...orderQueryKeys.details(), id] as const,\n statusForSelect: () => [...orderQueryKeys.all, \"status\"] as const,\n};\n\nexport const orders = {\n queries: {\n all: [\"orders\"] as const,\n getOrders: (params: UseOrdersParams = {}) =>\n queryOptions({\n queryFn: () =>\n getOrders({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query ?? \"\",\n commissionedBy: params.commissionedBy ?? \"\",\n orderStatus: params.orderStatus ?? [],\n startDate: params.startDate ?? \"\",\n endDate: params.endDate ?? \"\",\n showOnlyReturns: params.showOnlyReturns ?? false,\n }),\n queryKey: orderQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getOrderById: (id: number) =>\n queryOptions({\n queryFn: () => getOrderById({ orderId: id }),\n queryKey: orderQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getOrdersStatusForSelect: () =>\n queryOptions({\n queryFn: getOrdersStatusForSelect,\n queryKey: orderQueryKeys.statusForSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n changeOrderProduct: (): UseMutationOptions<\n ChangeProductResponse,\n Error,\n ChangeProductRequest\n > => ({\n mutationFn: changeOrderProduct,\n }),\n },\n};\n\nexport { orderQueryKeys };\n","import { api } from './config'\nimport type {\n IPayment,\n IPaymentMethod,\n IPaymentMethodAmountExpected\n} from '../interfaces/payment.interface'\n\nexport const sendPaymentData = async ({ payment }: { payment: IPayment }): Promise<IPayment> => {\n const { data } = await api.post<IPayment>(\n 'payment/applypayment',\n {\n ...payment\n },\n {\n headers: {\n 'Content-Type': 'application/json'\n }\n }\n )\n return data\n}\n\n//metodo para llamar a la api y obtener los metodos de pago\nexport const getPaymentMethods = async (): Promise<IPaymentMethod[]> => {\n const { data } = await api.get('payment/getpaymentmethods')\n return data\n}\n\n//metodo para llamar a la api y obtener los metodos de pago\nexport const getPaymentMethodsWithAmountExpected = async (): Promise<\n IPaymentMethodAmountExpected[]\n> => {\n const { data } = await api.get('payment/getpaymentmethodswithamountexpected')\n return data\n}\n\nexport const sendCreditPaymentData = async ({\n payment,\n orderId\n}: {\n payment: IPayment\n orderId: number\n}): Promise<IPayment> => {\n const { data } = await api.post<IPayment>(\n 'payment/applycreditpayment',\n {\n ...payment,\n orderID: orderId\n },\n {\n headers: {\n 'Content-Type': 'application/json'\n }\n }\n )\n return data\n}\n","import { queryOptions, type UseMutationOptions } from \"@tanstack/react-query\";\nimport {\n getPaymentMethods,\n getPaymentMethodsWithAmountExpected,\n sendPaymentData,\n sendCreditPaymentData,\n} from \"../services/payment.service\";\nimport type {\n IPayment,\n IPaymentMethod,\n IPaymentMethodAmountExpected,\n} from \"../interfaces/payment.interface\";\n\nconst paymentQueryKeys = {\n all: [\"payments\"] as const,\n methods: () => [...paymentQueryKeys.all, \"methods\"] as const,\n methodsWithAmount: () => [...paymentQueryKeys.all, \"methodsWithAmount\"] as const,\n};\n\nexport const payments = {\n queries: {\n all: [\"payments\"] as const,\n getPaymentMethods: () =>\n queryOptions({\n queryFn: getPaymentMethods,\n queryKey: paymentQueryKeys.methods(),\n staleTime: 5 * 60 * 1000,\n }),\n getPaymentMethodsWithAmountExpected: () =>\n queryOptions({\n queryFn: getPaymentMethodsWithAmountExpected,\n queryKey: paymentQueryKeys.methodsWithAmount(),\n staleTime: 30_000,\n }),\n },\n\n mutations: {\n sendPayment: (): UseMutationOptions<IPayment, Error, { payment: IPayment }> => ({\n mutationFn: sendPaymentData,\n }),\n sendCreditPayment: (): UseMutationOptions<\n IPayment,\n Error,\n { payment: IPayment; orderId: number }\n > => ({\n mutationFn: sendCreditPaymentData,\n }),\n },\n};\n\nexport { paymentQueryKeys };\n","import type { IUser } from '../interfaces/user.interface'\nimport { api } from './config'\n\nexport interface LoginResponse {\n user: IUser\n token: string\n}\n\nexport const login = async ({\n email,\n password\n}: {\n email: string\n password: string\n}): Promise<LoginResponse> => {\n const { data } = await api.post<LoginResponse>('auth/login', { email, password })\n return data\n}\n","import type { UseMutationOptions } from \"@tanstack/react-query\";\nimport { login } from \"../services/auth.service\";\nimport type { LoginResponse } from \"../services/auth.service\";\n\nexport const auth = {\n queries: {\n all: [\"auth\"] as const,\n },\n\n mutations: {\n login: (): UseMutationOptions<\n LoginResponse,\n Error,\n { email: string; password: string }\n > => ({\n mutationFn: login,\n }),\n },\n};\n","import type { ITax } from '../interfaces/tax.interface'\nimport { api } from './config'\n\nexport const getTaxesForSelect = async (): Promise<ITax[]> => {\n const { data } = await api.get<ITax[]>('tax/taxesForSelect')\n return data\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { getTaxesForSelect } from \"../services/tax.service\";\nimport type { ITax } from \"../interfaces/tax.interface\";\n\nconst taxQueryKeys = {\n all: [\"taxes\"] as const,\n forSelect: () => [...taxQueryKeys.all, \"select\"] as const,\n};\n\nexport const taxes = {\n queries: {\n all: [\"taxes\"] as const,\n getTaxesForSelect: () =>\n queryOptions({\n queryFn: getTaxesForSelect,\n queryKey: taxQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {},\n};\n\nexport { taxQueryKeys };\n","import type { IGender } from '../interfaces/gender.interface'\nimport { api } from './config'\n\ninterface GenderResponse {\n data: IGender[]\n}\n\nexport const getAllGenders = async (): Promise<GenderResponse> => {\n const { data } = await api.get('gender/')\n return data\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { getAllGenders } from \"../services/gender.service\";\nimport type { IGender } from \"../interfaces/gender.interface\";\n\nexport interface GenderResponse {\n data: IGender[];\n}\n\nconst genderQueryKeys = {\n all: [\"genders\"] as const,\n};\n\nexport const genders = {\n queries: {\n all: [\"genders\"] as const,\n getAllGenders: () =>\n queryOptions({\n queryFn: (): Promise<GenderResponse> => getAllGenders(),\n queryKey: genderQueryKeys.all,\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {},\n};\n\nexport { genderQueryKeys };\n","import { api } from './config'\n\nexport interface StateResponse {\n stateID: number\n state: string\n syncStatusID: number\n masterCodeID: null\n savedBy: null\n savedDate: null\n deletedBy: null\n deletedDate: null\n}\n\nexport const getAllStates = async (): Promise<StateResponse[]> => {\n const { data } = await api.get<StateResponse[]>('state/')\n return data\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { getAllStates } from \"../services/state.service\";\nimport type { StateResponse } from \"../services/state.service\";\n\nconst stateQueryKeys = {\n all: [\"states\"] as const,\n};\n\nexport const states = {\n queries: {\n all: [\"states\"] as const,\n getAllStates: () =>\n queryOptions({\n queryFn: getAllStates,\n queryKey: stateQueryKeys.all,\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {},\n};\n\nexport { stateQueryKeys };\n","import type { IModule } from '../interfaces/module.interface'\nimport { api } from './config'\n\nexport const getAllModules = async (): Promise<IModule[]> => {\n const { data } = await api.get<IModule[]>('module/')\n return data\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { getAllModules } from \"../services/module.service\";\nimport type { IModule } from \"../interfaces/module.interface\";\n\nconst moduleQueryKeys = {\n all: [\"modules\"] as const,\n};\n\nexport const modules = {\n queries: {\n all: [\"modules\"] as const,\n getAllModules: () =>\n queryOptions({\n queryFn: getAllModules,\n queryKey: moduleQueryKeys.all,\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {},\n};\n\nexport { moduleQueryKeys };\n","import { api } from './config'\n\nexport interface FolioResponse {\n folioID: number\n folioType: string\n lastFolioUsed: number\n nextFolioToUse: number\n nextBatchWithFolioToUse: string\n syncStatusID: number\n masterCodeID: null\n savedBy: null\n savedDate: null\n deletedBy: null\n deletedDate: null\n}\n\nexport const getNextFolioToUseInBatches = async (): Promise<FolioResponse> => {\n const { data } = await api.get<FolioResponse>('folio/nextFolioToUseInBatches')\n return data\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { getNextFolioToUseInBatches } from \"../services/folio.service\";\nimport type { FolioResponse } from \"../services/folio.service\";\n\nconst folioQueryKeys = {\n all: [\"folio\"] as const,\n nextForBatches: () => [...folioQueryKeys.all, \"nextForBatches\"] as const,\n};\n\nexport const folios = {\n queries: {\n all: [\"folio\"] as const,\n getNextFolioToUseInBatches: () =>\n queryOptions({\n queryFn: getNextFolioToUseInBatches,\n queryKey: folioQueryKeys.nextForBatches(),\n staleTime: 60 * 1000,\n }),\n },\n\n mutations: {},\n};\n\nexport { folioQueryKeys };\n","import { api } from './config'\n\ninterface HealthCheckResponse {\n status: string\n timestamp: string\n services: {\n backend: {\n status: string\n message?: string\n }\n database: {\n status: string\n message?: string\n }\n }\n}\n\nconst HEALTH_CHECK_TIMEOUT_MS = 10000\n\nexport const healthService = {\n async check(): Promise<HealthCheckResponse> {\n try {\n const response = await api.get<HealthCheckResponse>('/api/health', {\n timeout: HEALTH_CHECK_TIMEOUT_MS\n })\n return response.data\n } catch (error) {\n const isTimeoutError =\n error instanceof Error &&\n (error.message.includes('timeout') || error.message.includes('Network Error'))\n\n return {\n status: 'error',\n timestamp: new Date().toISOString(),\n services: {\n backend: {\n status: 'error',\n message: isTimeoutError\n ? 'No se pudo conectar con el backend. Verifica que el servidor esté corriendo y la URL configurada.'\n : error instanceof Error\n ? error.message\n : 'Error de conexión con el backend'\n },\n database: {\n status: 'unknown',\n message: 'No se puede verificar la base de datos porque el backend no responde'\n }\n }\n }\n }\n }\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { healthService } from \"../services/health.service\";\n\nexport interface HealthCheckResponse {\n status: string;\n timestamp: string;\n services: {\n backend: { status: string; message?: string };\n database: { status: string; message?: string };\n };\n}\n\nconst healthQueryKeys = {\n all: [\"health\"] as const,\n check: () => [...healthQueryKeys.all, \"check\"] as const,\n};\n\nexport const health = {\n queries: {\n all: [\"health\"] as const,\n check: () =>\n queryOptions({\n queryFn: (): Promise<HealthCheckResponse> => healthService.check(),\n queryKey: healthQueryKeys.check(),\n staleTime: 30 * 1000,\n }),\n },\n\n mutations: {},\n};\n\nexport { healthQueryKeys };\n","import type { ITag } from '../interfaces/tag.interface'\nimport { api } from './config'\n\nexport const getAllTags = async (): Promise<ITag[]> => {\n const { data } = await api.get<{ data: ITag[] }>('/product-tag')\n return data.data\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { getAllTags } from \"../services/productTags.service\";\nimport type { ITag } from \"../interfaces/tag.interface\";\n\nconst productTagQueryKeys = {\n all: [\"productTags\"] as const,\n};\n\nexport const productTags = {\n queries: {\n all: [\"productTags\"] as const,\n getAllTags: () =>\n queryOptions({\n queryFn: getAllTags,\n queryKey: productTagQueryKeys.all,\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {},\n};\n\nexport { productTagQueryKeys };\n","import type {\n PricePerGramResponse,\n PriceCalculationResponse,\n UpdatePriceRequest,\n SchedulePriceRequest,\n CalculatePriceRequest,\n IPricePerGramHistory\n} from '../interfaces/pricePerGram.interface'\nimport { api } from './config'\n\nconst BASE_URL = 'price-per-gram'\n\nexport const pricePerGramService = {\n // 1. Obtener precio con fallback\n async getPrice(params: {\n productDetailId?: number\n productId?: number\n materialId?: number\n }): Promise<PricePerGramResponse> {\n const queryParams = new URLSearchParams()\n\n if (params.productDetailId)\n queryParams.append('productDetailID', params.productDetailId.toString())\n if (params.productId) queryParams.append('productID', params.productId.toString())\n if (params.materialId) queryParams.append('materialID', params.materialId.toString())\n\n const { data } = await api.get<PricePerGramResponse>(\n `${BASE_URL}/price?${queryParams.toString()}`\n )\n return data\n },\n\n // 2. Actualizar precio (crea histórico automáticamente)\n async updatePrice(request: UpdatePriceRequest): Promise<void> {\n await api.put(`${BASE_URL}/price`, request)\n },\n\n // 3. Ver histórico de precios\n async getHistory({\n entityType,\n entityId,\n limit\n }: {\n entityType: 'material' | 'product' | 'productDetail'\n entityId: number\n limit?: number\n }): Promise<IPricePerGramHistory[]> {\n const queryParams = new URLSearchParams()\n if (limit) queryParams.append('limit', limit.toString())\n\n const { data } = await api.get<{ success: boolean; data: IPricePerGramHistory[] }>(\n `${BASE_URL}/history/${entityType}/${entityId}?${queryParams.toString()}`\n )\n console.log('response data:', data)\n return data.data || []\n },\n\n // 4. Programar precio futuro\n async schedulePrice(request: SchedulePriceRequest): Promise<void> {\n await api.post(`${BASE_URL}/scheduled`, request)\n },\n\n // 5. Calcular precio para venta\n async calculatePrice(request: CalculatePriceRequest): Promise<PriceCalculationResponse> {\n const { data } = await api.post<PriceCalculationResponse>(`${BASE_URL}/calculate`, request)\n return data\n },\n\n // 6. Eliminar precio programado\n async deleteFuturePrice({\n historyId\n }: {\n historyId: number\n }): Promise<void> {\n await api.delete(`${BASE_URL}/scheduled/${historyId}`)\n },\n\n // 7. Actualizar precio programado\n async updateFuturePrice({\n historyId,\n request\n }: {\n historyId: number\n request: SchedulePriceRequest\n }): Promise<void> {\n await api.put(`${BASE_URL}/scheduled/${historyId}`, request)\n },\n\n // Verificar si un producto se vende por peso\n async isWeightBased({\n productDetailId\n }: {\n productDetailId: number\n }): Promise<boolean> {\n try {\n const priceInfo = await this.getPrice({ productDetailId })\n return priceInfo.pricePerGram !== null\n } catch (error) {\n console.error('Error verificando si es por peso:', error)\n return false\n }\n }\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { pricePerGramService } from \"../services/pricePerGram.service\";\nimport type {\n PricePerGramResponse,\n PriceCalculationResponse,\n UpdatePriceRequest,\n SchedulePriceRequest,\n CalculatePriceRequest,\n IPricePerGramHistory,\n} from \"../interfaces/pricePerGram.interface\";\n\nconst pricePerGramQueryKeys = {\n all: [\"pricePerGram\"] as const,\n price: (params: {\n productDetailId?: number;\n productId?: number;\n materialId?: number;\n }) => [...pricePerGramQueryKeys.all, \"price\", params] as const,\n history: (params: {\n entityType: \"material\" | \"product\" | \"productDetail\";\n entityId: number;\n limit?: number;\n }) => [...pricePerGramQueryKeys.all, \"history\", params] as const,\n isWeightBased: (productDetailId: number) =>\n [...pricePerGramQueryKeys.all, \"isWeightBased\", productDetailId] as const,\n};\n\nexport const pricePerGram = {\n queries: {\n all: [\"pricePerGram\"] as const,\n getPrice: (params: {\n productDetailId?: number;\n productId?: number;\n materialId?: number;\n } | null) =>\n queryOptions({\n queryFn: () => pricePerGramService.getPrice(params!),\n queryKey: pricePerGramQueryKeys.price(params ?? {}),\n enabled: !!params && (!!params.productDetailId || !!params.productId || !!params.materialId),\n staleTime: 60 * 1000,\n }),\n getHistory: (params: {\n entityType: \"material\" | \"product\" | \"productDetail\";\n entityId: number;\n limit?: number;\n } | null) =>\n queryOptions({\n queryFn: () => pricePerGramService.getHistory(params!),\n queryKey: pricePerGramQueryKeys.history(params!),\n enabled: !!params?.entityId,\n staleTime: 60 * 1000,\n }),\n isWeightBased: (productDetailId: number) =>\n queryOptions({\n queryFn: () =>\n pricePerGramService.isWeightBased({ productDetailId }),\n queryKey: pricePerGramQueryKeys.isWeightBased(productDetailId),\n enabled: !!productDetailId && productDetailId > 0,\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n updatePrice: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, UpdatePriceRequest> => ({\n mutationFn: pricePerGramService.updatePrice,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: pricePerGramQueryKeys.all });\n },\n }),\n schedulePrice: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, SchedulePriceRequest> => ({\n mutationFn: pricePerGramService.schedulePrice,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: pricePerGramQueryKeys.all });\n },\n }),\n calculatePrice: (): UseMutationOptions<\n PriceCalculationResponse,\n Error,\n CalculatePriceRequest\n > => ({\n mutationFn: pricePerGramService.calculatePrice,\n }),\n deleteFuturePrice: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { historyId: number }> => ({\n mutationFn: pricePerGramService.deleteFuturePrice,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: pricePerGramQueryKeys.all });\n },\n }),\n updateFuturePrice: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n void,\n Error,\n { historyId: number; request: SchedulePriceRequest }\n > => ({\n mutationFn: ({ historyId, request }) =>\n pricePerGramService.updateFuturePrice({ historyId, request }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: pricePerGramQueryKeys.all });\n },\n }),\n },\n};\n\nexport { pricePerGramQueryKeys };\n","import { api } from './config'\n\nexport interface QRBaseUrlResponse {\n success: boolean\n baseUrl: string\n}\n\nexport interface PrintQRResponse {\n success?: boolean\n message?: string\n data?: {\n url?: string\n productDetailID?: number\n printerResult?: boolean\n }\n [key: string]: unknown\n}\n\n/**\n * Obtiene la URL base configurada para los códigos QR (QR_BASE_URL del backend).\n */\nexport const getQRBaseUrl = async (): Promise<string> => {\n const { data } = await api.get<QRBaseUrlResponse>('/qr/base-url')\n return data?.baseUrl ?? ''\n}\n\n/**\n * Imprime un código QR en la impresora térmica.\n * El backend construye la URL: {QR_BASE_URL}/producto/{productDetailID}\n */\nexport const printQR = async ({\n productDetailId,\n printerName = '4BARCODE'\n}: {\n productDetailId: number\n printerName?: string\n}): Promise<PrintQRResponse> => {\n const { data } = await api.post<PrintQRResponse>('/qr/print', {\n productDetailID: productDetailId,\n printerName\n })\n return data\n}\n","import { queryOptions, type UseMutationOptions } from \"@tanstack/react-query\";\nimport { getQRBaseUrl, printQR } from \"../services/qr.service\";\nimport type { PrintQRResponse } from \"../services/qr.service\";\n\nconst qrQueryKeys = {\n all: [\"qr\"] as const,\n baseUrl: () => [...qrQueryKeys.all, \"baseUrl\"] as const,\n};\n\nexport const qr = {\n queries: {\n all: [\"qr\"] as const,\n getQRBaseUrl: () =>\n queryOptions({\n queryFn: getQRBaseUrl,\n queryKey: qrQueryKeys.baseUrl(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n printQR: (): UseMutationOptions<\n PrintQRResponse,\n Error,\n { productDetailId: number; printerName?: string }\n > => ({\n mutationFn: printQR,\n }),\n },\n};\n\nexport { qrQueryKeys };\n","import type {\n ComparisonBy,\n IReportComparisonByTimeFrame,\n IReportInventory,\n IReportX,\n IReportZ,\n IStockByWarehouseReport\n} from '../interfaces/report.interface'\nimport { api } from './config'\n\nexport const getStockByWarehouseReport = async ({\n limit = 2,\n allWarehouses = false\n}: {\n limit: number\n allWarehouses: boolean\n}): Promise<IStockByWarehouseReport[]> => {\n const response = await api.get(`/report?limit=${limit}&allWarehouses=${allWarehouses}`)\n return response.data\n}\n\nexport const getReportX = async ({\n startDate,\n sellerID,\n isShiftChange = false\n}: {\n startDate: string\n sellerID: number\n isShiftChange: boolean\n}): Promise<IReportX> => {\n const response = await api.get(\n `/report/report-x?startDate=${startDate}&sellerID=${sellerID}&isShiftChange=${isShiftChange}`\n )\n return response.data\n}\n\nexport const printReportX = async ({\n startDate,\n sellerID\n}: {\n startDate: string\n sellerID: number\n}): Promise<boolean> => {\n const response = await api.get(\n `/report/printReport-x?startDate=${startDate}&sellerID=${sellerID}`\n )\n return response.data\n}\n\nexport const getReportComparisonByTimeFrame = async ({\n startDate,\n endDate,\n comparisonBy,\n productIds\n}: {\n startDate: Date\n endDate: Date\n comparisonBy: ComparisonBy\n productIds: string[]\n}): Promise<IReportComparisonByTimeFrame> => {\n const response = await api.get(\n `/report/comparison?startDate=${startDate.toISOString()}&endDate=${endDate.toISOString()}&comparisonBy=${comparisonBy}&productIds=${productIds}`\n )\n return response.data\n}\n\nexport const getReportByInventory = async ({\n productIDs,\n categoryIDs,\n warehouseIDs,\n providerIDs\n}: {\n productIDs: number[] | null\n categoryIDs: number[] | null\n warehouseIDs: number[] | null\n providerIDs: number[] | null\n}): Promise<IReportInventory[]> => {\n const params = new URLSearchParams()\n \n if (productIDs && productIDs.length > 0) {\n params.append('productIDs', productIDs.join(','))\n }\n if (categoryIDs && categoryIDs.length > 0) {\n params.append('categoryIDs', categoryIDs.join(','))\n }\n if (warehouseIDs && warehouseIDs.length > 0) {\n params.append('warehouseIDs', warehouseIDs.join(','))\n }\n if (providerIDs && providerIDs.length > 0) {\n params.append('providerIDs', providerIDs.join(','))\n }\n\n const queryString = params.toString()\n const url = `/report/inventory${queryString ? `?${queryString}` : ''}`\n \n const response = await api.get(url)\n return response.data\n}\n\nexport const getReportZ = async ({\n startDate,\n sellerID,\n isShiftChange = false\n}: {\n startDate: string\n sellerID: number\n isShiftChange: boolean\n}): Promise<IReportZ> => {\n const response = await api.get(\n `/report/report-z?startDate=${startDate}&sellerID=${sellerID}&isShiftChange=${isShiftChange}`\n )\n return response.data\n}\n\nexport const printReportZ = async ({\n startDate,\n sellerID\n}: {\n startDate: string\n sellerID: number\n}): Promise<boolean> => {\n const response = await api.get(\n `/report/printReport-z?startDate=${startDate}&sellerID=${sellerID}`\n )\n return response.data\n}\n\nexport const checkPendingReportZ = async (): Promise<Date[]> => {\n const response = await api.get('/report/pending-report-z')\n return response.data\n}\n","import { queryOptions, type UseMutationOptions } from \"@tanstack/react-query\";\nimport {\n getStockByWarehouseReport,\n getReportX,\n printReportX,\n getReportComparisonByTimeFrame,\n getReportByInventory,\n getReportZ,\n printReportZ,\n checkPendingReportZ,\n} from \"../services/report.service\";\nimport { getPaymentMethodsWithAmountExpected } from \"../services/payment.service\";\nimport type {\n ComparisonBy,\n IReportComparisonByTimeFrame,\n IReportInventory,\n IReportX,\n IReportZ,\n IStockByWarehouseReport,\n} from \"../interfaces/report.interface\";\n\nconst reportQueryKeys = {\n all: [\"reports\"] as const,\n stockByWarehouse: (params: { limit: number; allWarehouses: boolean }) =>\n [...reportQueryKeys.all, \"stockByWarehouse\", params] as const,\n reportX: (params: {\n startDate: string;\n sellerID: number;\n isShiftChange?: boolean;\n }) => [...reportQueryKeys.all, \"reportX\", params] as const,\n reportZ: (params: {\n startDate: string;\n sellerID: number;\n isShiftChange?: boolean;\n }) => [...reportQueryKeys.all, \"reportZ\", params] as const,\n comparison: (params: {\n startDate: Date;\n endDate: Date;\n comparisonBy: ComparisonBy;\n productIds: string[];\n }) => [...reportQueryKeys.all, \"comparison\", params] as const,\n inventory: (params: {\n productIDs: number[] | null;\n categoryIDs: number[] | null;\n warehouseIDs: number[] | null;\n providerIDs: number[] | null;\n }) => [...reportQueryKeys.all, \"inventory\", params] as const,\n pendingReportZ: () => [...reportQueryKeys.all, \"pendingReportZ\"] as const,\n paymentMethods: () => [...reportQueryKeys.all, \"paymentMethods\"] as const,\n};\n\nexport const reports = {\n queries: {\n all: [\"reports\"] as const,\n getStockByWarehouseReport: (params: {\n limit?: number;\n allWarehouses?: boolean;\n }) =>\n queryOptions({\n queryFn: () =>\n getStockByWarehouseReport({\n limit: params.limit ?? 2,\n allWarehouses: params.allWarehouses ?? false,\n }),\n queryKey: reportQueryKeys.stockByWarehouse({\n limit: params.limit ?? 2,\n allWarehouses: params.allWarehouses ?? false,\n }),\n staleTime: 60 * 1000,\n }),\n getReportX: (params: {\n startDate: string;\n sellerID: number;\n isShiftChange?: boolean;\n } | null) =>\n queryOptions({\n queryFn: () =>\n getReportX({\n ...params!,\n isShiftChange: params!.isShiftChange ?? false,\n }),\n queryKey: reportQueryKeys.reportX(params!),\n enabled: !!params?.startDate && !!params?.sellerID,\n staleTime: 60 * 1000,\n }),\n getReportComparisonByTimeFrame: (params: {\n startDate: Date;\n endDate: Date;\n comparisonBy: ComparisonBy;\n productIds: string[];\n } | null) =>\n queryOptions({\n queryFn: () => getReportComparisonByTimeFrame(params!),\n queryKey: reportQueryKeys.comparison(params!),\n enabled: !!params?.startDate && !!params?.endDate,\n staleTime: 60 * 1000,\n }),\n getReportByInventory: (params: {\n productIDs: number[] | null;\n categoryIDs: number[] | null;\n warehouseIDs: number[] | null;\n providerIDs: number[] | null;\n } | null) =>\n queryOptions({\n queryFn: () => getReportByInventory(params!),\n queryKey: reportQueryKeys.inventory(params!),\n enabled: !!params,\n staleTime: 60 * 1000,\n }),\n getReportZ: (params: {\n startDate: string;\n sellerID: number;\n isShiftChange?: boolean;\n } | null) =>\n queryOptions({\n queryFn: () =>\n getReportZ({\n ...params!,\n isShiftChange: params!.isShiftChange ?? false,\n }),\n queryKey: reportQueryKeys.reportZ(params!),\n enabled: !!params?.startDate && !!params?.sellerID,\n staleTime: 60 * 1000,\n }),\n getPendingReportZ: () =>\n queryOptions({\n queryFn: checkPendingReportZ,\n queryKey: reportQueryKeys.pendingReportZ(),\n staleTime: 30_000,\n }),\n getPaymentMethodsWithAmountExpected: () =>\n queryOptions({\n queryFn: getPaymentMethodsWithAmountExpected,\n queryKey: reportQueryKeys.paymentMethods(),\n staleTime: 30_000,\n }),\n },\n\n mutations: {\n printReportX: (): UseMutationOptions<\n boolean,\n Error,\n { startDate: string; sellerID: number }\n > => ({\n mutationFn: printReportX,\n }),\n printReportZ: (): UseMutationOptions<\n boolean,\n Error,\n { startDate: string; sellerID: number }\n > => ({\n mutationFn: printReportZ,\n }),\n },\n};\n\nexport { reportQueryKeys };\n","import type { TblOrderDetail, TblReturn } from '../interfaces/order.interface'\nimport { api } from './config'\n\nexport const createReturn = async ({\n orderId,\n returnReason,\n orderDetails,\n warehouseDestinationID\n}: {\n orderId: number\n returnReason: string\n orderDetails: TblOrderDetail[]\n warehouseDestinationID: number\n}): Promise<void> => {\n const response = await api.post(`/returns`, {\n orderId,\n returnReason,\n orderDetails,\n warehouseDestinationID\n })\n return response.data\n}\n\nexport interface GetReturnsByOrderIdResponse {\n message: string\n data: TblReturn[]\n}\n\nexport const getReturnsByOrderId = async ({\n orderId\n}: {\n orderId: number\n}): Promise<GetReturnsByOrderIdResponse> => {\n const response = await api.get(`/returns/order/${orderId}`)\n return response.data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { getReturnsByOrderId, createReturn } from \"../services/return.service\";\nimport type { TblOrderDetail } from \"../interfaces/order.interface\";\nimport type { GetReturnsByOrderIdResponse } from \"../services/return.service\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst returnQueryKeys = {\n all: [\"returns\"] as const,\n byOrder: (orderId: number) => [...returnQueryKeys.all, \"order\", orderId] as const,\n};\n\nexport const returns = {\n queries: {\n all: [\"returns\"] as const,\n getReturnsByOrderId: (orderId: number) =>\n queryOptions({\n queryFn: () => getReturnsByOrderId({ orderId }),\n queryKey: returnQueryKeys.byOrder(orderId),\n enabled: !!orderId && orderId > 0,\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n createReturn: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n void,\n Error,\n {\n orderId: number;\n returnReason: string;\n orderDetails: TblOrderDetail[];\n warehouseDestinationID: number;\n }\n > => ({\n mutationFn: createReturn,\n onSuccess: (_, variables) => {\n queryClient.invalidateQueries({\n queryKey: returnQueryKeys.byOrder(variables.orderId),\n });\n queryClient.invalidateQueries({ queryKey: returnQueryKeys.all });\n successNotification({\n title: \"Devolución creada\",\n message: \"La devolución se ha registrado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear la devolución.\",\n });\n },\n }),\n },\n};\n\nexport { returnQueryKeys };\n","import { api } from './config'\n\nexport interface Response {\n status: boolean\n httpStatus: number\n message: string\n data: unknown\n}\n\ninterface CloseShiftData {\n sellerID: number\n date: string\n paymentMethods: {\n paymentMethodId: number\n amount: number\n }[]\n cashBreakdown?: {\n coinsTotal: number\n bills: {\n denomination: number\n quantity: number\n }[]\n }\n}\n\nexport const closeShift = async (data: CloseShiftData): Promise<Response> => {\n const response = await api.post<Response>('/shift/close', data, {\n headers: {\n 'Content-Type': 'application/json'\n }\n })\n return response.data\n}\n\nexport const makeNewCashMovement = async ({\n userID,\n amount,\n comment,\n isWithdrawal\n}: {\n userID: number | undefined\n amount: number\n comment?: string\n isWithdrawal: boolean\n}): Promise<Response> => {\n const { data } = await api.post<Response>(\n 'shift/cashmovement',\n {\n userID,\n amount,\n comment,\n isWithdrawal\n },\n {\n headers: {\n 'Content-Type': 'application/json'\n }\n }\n )\n return data\n}\n\nexport const setNewShift = async ({\n userID,\n initialCash\n}: {\n userID: number | undefined\n initialCash: number\n}): Promise<Response> => {\n const { data } = await api.post<Response>(\n 'shift/',\n {\n userID,\n initialCash\n },\n {\n headers: {\n 'Content-Type': 'application/json'\n }\n }\n )\n return data\n}\n","import type { UseMutationOptions } from \"@tanstack/react-query\";\nimport {\n closeShift,\n makeNewCashMovement,\n setNewShift,\n} from \"../services/shift.service\";\nimport type { Response } from \"../services/shift.service\";\n\nexport interface CloseShiftData {\n sellerID: number;\n date: string;\n paymentMethods: {\n paymentMethodId: number;\n amount: number;\n }[];\n cashBreakdown?: {\n coinsTotal: number;\n bills: {\n denomination: number;\n quantity: number;\n }[];\n };\n}\n\nexport const shifts = {\n queries: {\n all: [\"shifts\"] as const,\n },\n\n mutations: {\n closeShift: (): UseMutationOptions<Response, Error, CloseShiftData> => ({\n mutationFn: closeShift,\n }),\n makeNewCashMovement: (): UseMutationOptions<\n Response,\n Error,\n {\n userID: number | undefined;\n amount: number;\n comment?: string;\n isWithdrawal: boolean;\n }\n > => ({\n mutationFn: makeNewCashMovement,\n }),\n setNewShift: (): UseMutationOptions<\n Response,\n Error,\n { userID: number | undefined; initialCash: number }\n > => ({\n mutationFn: setNewShift,\n }),\n },\n};\n","import type { IStockMovement, IStockMovementResponse } from '../interfaces/stockmovement.interface'\nimport { api } from './config'\n\ninterface MovementQuery {\n skip?: number\n limit?: number\n query?: string\n movementType?: number\n}\n\nexport interface MovementResponse {\n stockMovementID: number\n quantity: number\n addressID: number\n isOpen: boolean\n syncStatusID: number\n masterCodeID: null\n savedBy: null\n savedDate: null\n deletedBy: null\n deletedDate: null\n}\n\nexport const createMovement = async (movement: FormData): Promise<IStockMovement> => {\n const { data } = await api.post<IStockMovement>('movement/', movement, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\n// export const getAllLocations = async (): Promise<LocationResponse[]> => {\n// const { data } = await api.get<LocationResponse[]>('location/')\n// return data\n// }\n\n// export const getLocationsForSelect = async (): Promise<LocationResponse[]> => {\n// const { data } = await api.get<LocationResponse[]>('location/locationsForSelect')\n// return data\n// }\n\nexport const getMovements = async ({\n skip = 0,\n limit = 10,\n query = '',\n movementType = 1\n}: MovementQuery): Promise<IStockMovementResponse> => {\n const { data } = await api.get<IStockMovementResponse>(\n `movement/movements?skip=${skip}&limit=${limit}&query=${query}&movementTypeID=${movementType}`\n )\n return data\n}","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { getMovements, createMovement } from \"../services/stockmovement.service\";\nimport type {\n IStockMovement,\n IStockMovementResponse,\n} from \"../interfaces/stockmovement.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst stockMovementQueryKeys = {\n all: [\"stockMovements\"] as const,\n lists: () => [...stockMovementQueryKeys.all, \"list\"] as const,\n list: (params: {\n skip?: number;\n limit?: number;\n query?: string | null;\n movementType?: number;\n }) => [...stockMovementQueryKeys.lists(), { filters: params }] as const,\n};\n\nexport const stockMovements = {\n queries: {\n all: [\"stockMovements\"] as const,\n getMovements: (params: {\n skip?: number;\n limit?: number;\n query?: string | null;\n movementType?: number;\n }) =>\n queryOptions({\n queryFn: () =>\n getMovements({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n movementType: params.movementType ?? 1,\n }),\n queryKey: stockMovementQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getMovementsForTable: (params: TableQueryParams & { movementType?: number }) =>\n queryOptions({\n queryFn: () =>\n getMovements({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n movementType: params.movementType ?? 1,\n }),\n queryKey: stockMovementQueryKeys.list(params),\n staleTime: 30_000,\n }),\n },\n\n mutations: {\n createMovement: (\n queryClient: QueryClient,\n ): UseMutationOptions<IStockMovement, Error, FormData> => ({\n mutationFn: createMovement,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: stockMovementQueryKeys.all });\n successNotification({\n title: \"Movimiento creado\",\n message: \"El movimiento se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el movimiento.\",\n });\n },\n }),\n },\n};\n\nexport { stockMovementQueryKeys };\n"]}