FPSMS-frontend
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 

143 satır
3.6 KiB

  1. "use server";
  2. import {
  3. ServerFetchError,
  4. serverFetchJson,
  5. serverFetchWithNoContent,
  6. } from "@/app/utils/fetchUtil";
  7. import { revalidateTag, revalidatePath } from "next/cache";
  8. import { BASE_API_URL } from "@/config/api";
  9. import { CreateItemResponse, RecordsRes } from "../../utils";
  10. import { ItemQc, ItemsResult } from ".";
  11. import { QcChecksInputs } from "../qcCheck/actions";
  12. import { cache } from "react";
  13. // export type TypeInputs = {
  14. // id: number;
  15. // name: string
  16. // }
  17. // export type UomInputs = {
  18. // uom: string
  19. // }
  20. // export type WeightUnitInputs = {
  21. // weightUnit: string
  22. // conversion: number
  23. // }
  24. export type CreateItemInputs = {
  25. id?: string | number;
  26. code: string;
  27. name: string;
  28. description?: string | undefined;
  29. remarks?: string | undefined;
  30. shelfLife?: number | undefined;
  31. countryOfOrigin?: string | undefined;
  32. maxQty: number;
  33. type: string;
  34. qcChecks: QcChecksInputs[];
  35. qcChecks_active: number[];
  36. qcCategoryId: number | undefined;
  37. store_id?: string | undefined;
  38. warehouse?: string | undefined;
  39. area?: string | undefined;
  40. slot?: string | undefined;
  41. LocationCode?: string | undefined;
  42. isEgg?: boolean | undefined;
  43. isFee?: boolean | undefined;
  44. isBag?: boolean | undefined;
  45. qcType?: string | undefined;
  46. };
  47. export const saveItem = async (data: CreateItemInputs) => {
  48. const item = await serverFetchJson<CreateItemResponse<CreateItemInputs>>(
  49. `${BASE_API_URL}/items/new`,
  50. {
  51. method: "POST",
  52. body: JSON.stringify(data),
  53. headers: { "Content-Type": "application/json" },
  54. },
  55. );
  56. revalidateTag("items");
  57. return item;
  58. };
  59. export const deleteItem = async (id: number) => {
  60. const response = await serverFetchJson<ItemsResult>(
  61. `${BASE_API_URL}/items/${id}`,
  62. {
  63. method: "DELETE",
  64. headers: { "Content-Type": "application/json" },
  65. },
  66. );
  67. revalidateTag("items");
  68. revalidatePath("/(main)/settings/items");
  69. return response;
  70. };
  71. export interface ItemCombo {
  72. id: number,
  73. label: string,
  74. uomId: number,
  75. uom: string,
  76. uomDesc: string,
  77. group?: string,
  78. currentStockBalance?: number,
  79. }
  80. export interface ItemWithDetails {
  81. id: number;
  82. code: string;
  83. name: string;
  84. description?: string;
  85. uomId: number;
  86. uom: string;
  87. uomDesc: string;
  88. currentStockBalance: number;
  89. }
  90. export const fetchItemsWithDetails = cache(async (searchParams?: Record<string, any>) => {
  91. if (searchParams) {
  92. const queryString = new URLSearchParams(searchParams).toString();
  93. return serverFetchJson<RecordsRes<ItemWithDetails>>(
  94. `${BASE_API_URL}/items/itemsWithDetails?${queryString}`,
  95. {
  96. next: { tags: ["items"] },
  97. }
  98. );
  99. } else {
  100. return serverFetchJson<RecordsRes<ItemWithDetails>>(
  101. `${BASE_API_URL}/items/itemsWithDetails`,
  102. {
  103. next: { tags: ["items"] },
  104. }
  105. );
  106. }
  107. });
  108. export const fetchAllItemsInClient = cache(async () => {
  109. return serverFetchJson<ItemCombo[]>(`${BASE_API_URL}/items/consumables`, {
  110. next: { tags: ["items"] },
  111. });
  112. });
  113. export const fetchPickOrderItemsByPageClient = cache(
  114. async (queryParams?: Record<string, any>) => {
  115. if (queryParams) {
  116. const queryString = new URLSearchParams(queryParams).toString();
  117. return serverFetchJson<RecordsRes<any>>(
  118. `${BASE_API_URL}/items/pickOrderItems?${queryString}`,
  119. {
  120. method: "GET",
  121. next: { tags: ["pickorder"] },
  122. },
  123. );
  124. } else {
  125. return serverFetchJson<RecordsRes<any>>(
  126. `${BASE_API_URL}/items/pickOrderItems`,
  127. {
  128. method: "GET",
  129. next: { tags: ["pickorder"] },
  130. },
  131. );
  132. }
  133. },
  134. );