({
@@ -350,7 +319,7 @@ const ProjectFlockForm = ({
onSubmit: async (values) => {
setProjectFlockFormErrorMessage('');
const payload: CreateProjectFlockPayload = {
- flock_id: values.flock_id as number,
+ flock_name: values.flock_name as string,
area_id: values.area_id as number,
category: values.category as string,
fcr_id: values.fcr_id as number,
@@ -377,8 +346,8 @@ const ProjectFlockForm = ({
useEffect(() => {
if (formType == 'detail') {
formik.setFieldValue('area', {
- value: initialValues?.area.id,
- label: initialValues?.area.name,
+ value: initialValues?.area?.id,
+ label: initialValues?.area?.name,
});
formik.setFieldValue('area_id', initialValues?.area_id);
if (initialValues?.area_id) {
@@ -402,9 +371,11 @@ const ProjectFlockForm = ({
// Set lokasi otomatis berdasarkan initialValues saat formType = 'detail'
useEffect(() => {
- if (formType != 'add' && initialValues?.location?.id) {
- setSelectedLocation(initialValues.location?.id.toString());
- setDisabledLocation(false); // biar dropdown lokasi aktif juga
+ if (formType != 'add') {
+ if (initialValues?.location?.id) {
+ setSelectedLocation(initialValues.location?.id.toString());
+ setDisabledLocation(false); // biar dropdown lokasi aktif juga
+ }
}
}, [formType, initialValues]);
@@ -459,7 +430,7 @@ const ProjectFlockForm = ({
method: 'POST',
payload: {
action: action,
- approvable_ids: [initialValues.id],
+ approvable_ids: [initialValues?.id],
},
});
@@ -467,14 +438,6 @@ const ProjectFlockForm = ({
if (refreshProjectFlocks) {
await refreshProjectFlocks();
}
- // if (action == 'APPROVED') {
- // setIsApprovedDisabled(true);
- // setIsRejectedDisabled(false);
- // }
- // if (action == 'REJECTED') {
- // setIsRejectedDisabled(true);
- // setIsApprovedDisabled(false);
- // }
toast.success(approveProjectFlockRes.message as string);
}
if (isResponseError(approveProjectFlockRes)) {
@@ -591,9 +554,10 @@ const ProjectFlockForm = ({
options={optionsFlock}
isLoading={isLoadingFlocks}
isError={
- formik.touched.flock_id && Boolean(formik.errors.flock_id)
+ formik.touched.flock_name &&
+ Boolean(formik.errors.flock_name)
}
- errorMessage={formik.errors.flock_id as string}
+ errorMessage={formik.errors.flock_name as string}
isClearable
isDisabled={formType === 'detail'}
/>
@@ -724,6 +688,7 @@ const ProjectFlockForm = ({
)}
+ {JSON.stringify(formik.errors)}
{formType != 'add' && (
diff --git a/src/components/pages/production/recording/form/RecordingForm.tsx b/src/components/pages/production/recording/form/RecordingForm.tsx
index 2f08aaba..68a24ef4 100644
--- a/src/components/pages/production/recording/form/RecordingForm.tsx
+++ b/src/components/pages/production/recording/form/RecordingForm.tsx
@@ -215,7 +215,7 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => {
const flockOptions = isResponseSuccess(projectFlocks)
? projectFlocks.data.map((flock) => ({
value: flock.id,
- label: flock.flock.name,
+ label: flock.flock?.name || '',
}))
: [];
diff --git a/src/dummy/marketing.dummy.ts b/src/dummy/marketing.dummy.ts
index 6eab9067..7cbf4317 100644
--- a/src/dummy/marketing.dummy.ts
+++ b/src/dummy/marketing.dummy.ts
@@ -144,7 +144,7 @@ export const dummyProductWarehouses: ProductWarehouse[] = [
name: 'Pakan Ayam Premium',
sku: 'PAK-001',
category: 'PAKAN',
- } as unknown as Product, // bisa diganti sesuai tipe Product
+ } as unknown as Product,
warehouse: dummyWarehouses[0],
created_user: createdUser,
created_at: format(new Date(), 'yyyy-MM-dd HH:mm:ss'),
@@ -160,7 +160,7 @@ export const dummyProductWarehouses: ProductWarehouse[] = [
name: 'Vitamin Ayam Super',
sku: 'VIT-002',
category: 'VITAMIN',
- } as unknown as Product, // bisa diganti sesuai tipe Product
+ } as unknown as Product,
warehouse: dummyWarehouses[1],
created_user: createdUser,
created_at: format(new Date(), 'yyyy-MM-dd HH:mm:ss'),
@@ -172,6 +172,7 @@ export const dummyProductWarehouses: ProductWarehouse[] = [
// 💼 Marketing Dummy
// ======================
export const dummyMarketings: Marketing[] = [
+ // Step 1: Pengajuan Order
{
id: 1,
status: 'APPROVED',
@@ -197,7 +198,7 @@ export const dummyMarketings: Marketing[] = [
grand_total: 7500000,
approval: {
step_number: 1,
- step_name: 'Manager Approval',
+ step_name: 'Pengajuan Order',
action: 'APPROVED',
action_by: createdUser,
action_at: format(new Date(), 'yyyy-MM-dd HH:mm:ss'),
@@ -227,9 +228,11 @@ export const dummyMarketings: Marketing[] = [
created_at: format(new Date(), 'yyyy-MM-dd HH:mm:ss'),
updated_at: format(new Date(), 'yyyy-MM-dd HH:mm:ss'),
},
+
+ // Step 2: Sales Order
{
id: 2,
- status: 'PENDING',
+ status: 'APPROVED',
so_number: 'SO-002-2025',
so_docs: 'https://example.com/docs/so002.pdf',
so_date: format(new Date(), 'yyyy-MM-dd'),
@@ -251,9 +254,9 @@ export const dummyMarketings: Marketing[] = [
notes: 'Pesanan kedua untuk stok akhir tahun.',
grand_total: 3750000,
approval: {
- step_number: 1,
- step_name: 'Manager Approval',
- action: 'PENDING',
+ step_number: 2,
+ step_name: 'Sales Order',
+ action: 'APPROVED',
action_by: createdUser,
action_at: format(new Date(), 'yyyy-MM-dd HH:mm:ss'),
},
@@ -282,4 +285,80 @@ export const dummyMarketings: Marketing[] = [
created_at: format(new Date(), 'yyyy-MM-dd HH:mm:ss'),
updated_at: format(new Date(), 'yyyy-MM-dd HH:mm:ss'),
},
+
+ // Step 3: Delivery Order
+ {
+ id: 3,
+ status: 'APPROVED',
+ so_number: 'SO-003-2025',
+ so_docs: 'https://example.com/docs/so003.pdf',
+ so_date: format(new Date(), 'yyyy-MM-dd'),
+ customer: {
+ id: 3,
+ name: 'UD Ternak Sejahtera',
+ pic_id: 3,
+ pic: createdUser,
+ type: 'Reseller',
+ address: 'Jl. Pasteur No. 88',
+ phone: '083333333333',
+ email: 'halo@ternaksejahtera.com',
+ account_number: '1122334455',
+ created_user: createdUser,
+ created_at: format(new Date(), 'yyyy-MM-dd HH:mm:ss'),
+ updated_at: format(new Date(), 'yyyy-MM-dd HH:mm:ss'),
+ },
+ sales_person: createdUser,
+ notes: 'Order untuk pengiriman ke luar kota.',
+ grand_total: 5600000,
+ approval: {
+ step_number: 3,
+ step_name: 'Delivery Order',
+ action: 'APPROVED',
+ action_by: createdUser,
+ action_at: format(new Date(), 'yyyy-MM-dd HH:mm:ss'),
+ },
+ marketing_products: [
+ {
+ id: 3,
+ qty: 80,
+ unit_price: 70000,
+ avg_weight: 2.4,
+ total_weight: 192,
+ total_price: 5600000,
+ product_warehouse: dummyProductWarehouses[0],
+ marketing_delivery_products: {
+ id: 3,
+ qty: 80,
+ unit_price: 70000,
+ avg_weight: 2.4,
+ total_weight: 192,
+ total_price: 5600000,
+ delivery_date: format(new Date(), 'yyyy-MM-dd'),
+ vehicle_number: 'D 9090 ZZ',
+ },
+ },
+ {
+ id: 4,
+ qty: 80,
+ unit_price: 70000,
+ avg_weight: 2.4,
+ total_weight: 192,
+ total_price: 5600000,
+ product_warehouse: dummyProductWarehouses[0],
+ marketing_delivery_products: {
+ id: 3,
+ qty: 80,
+ unit_price: 70000,
+ avg_weight: 2.4,
+ total_weight: 192,
+ total_price: 5600000,
+ delivery_date: format(new Date(), 'yyyy-MM-dd'),
+ vehicle_number: 'D 9090 ZZ',
+ },
+ },
+ ],
+ created_user: createdUser,
+ created_at: format(new Date(), 'yyyy-MM-dd HH:mm:ss'),
+ updated_at: format(new Date(), 'yyyy-MM-dd HH:mm:ss'),
+ },
];
diff --git a/src/services/api/marketing/marketing.ts b/src/services/api/marketing/marketing.ts
index 1285a2e4..a5c3b8fb 100644
--- a/src/services/api/marketing/marketing.ts
+++ b/src/services/api/marketing/marketing.ts
@@ -47,20 +47,32 @@ export class MarketingService extends BaseApiService<
// simulasi delay
await new Promise((res) => setTimeout(res, 500));
- // misalnya fetch dari dummy
- return {
- code: 200,
- status: 'success',
- message: 'Data marketing berhasil diambil.',
- data: dummyMarketings[0],
- };
+ const marketing = dummyMarketings.find((marketing) => {
+ console.log('marketing', marketing);
+ console.log('id-m', marketing.id);
+ console.log('id-p', id);
+ console.log('id', marketing.id == id);
+ return marketing.id == id;
+ });
+ console.log('marketings', dummyMarketings);
+ console.log('marketing', marketing);
- // jika tidak ditemukan
- throw {
- code: 404,
- status: 'error',
- message: 'Data marketing tidak ditemukan.',
- };
+ if (marketing) {
+ // misalnya fetch dari dummy
+ return {
+ code: 200,
+ status: 'success',
+ message: 'Data marketing berhasil diambil.',
+ data: marketing,
+ };
+ } else {
+ // jika tidak ditemukan
+ throw {
+ code: 404,
+ status: 'error',
+ message: 'Data marketing tidak ditemukan.',
+ };
+ }
}
/**
diff --git a/src/services/api/production.ts b/src/services/api/production.ts
index c4434f16..a69818e6 100644
--- a/src/services/api/production.ts
+++ b/src/services/api/production.ts
@@ -20,7 +20,7 @@ export const ProjectFlockApi = new BaseApiService<
ProjectFlock,
CreateProjectFlockPayload,
UpdateProjectFlockPayload
->('/production/project_flocks');
+>('/production/project-flocks');
export const ProjectFlockKandangApi = new BaseApiService<
ProjectFlockKandang,
unknown,
diff --git a/src/types/api/marketing/marketing.d.ts b/src/types/api/marketing/marketing.d.ts
index 1ff52fbb..331d95d3 100644
--- a/src/types/api/marketing/marketing.d.ts
+++ b/src/types/api/marketing/marketing.d.ts
@@ -41,6 +41,7 @@ export type MarketingDeliveryProducts = {
total_price: number;
delivery_date: string;
vehicle_number: string;
+ do_number?: string | undefined;
};
export type Marketing = BaseMetadata & BaseMarketing;
diff --git a/src/types/api/production/chickin.d.ts b/src/types/api/production/chickin.d.ts
index 3f5263a6..8b1dcb67 100644
--- a/src/types/api/production/chickin.d.ts
+++ b/src/types/api/production/chickin.d.ts
@@ -14,9 +14,11 @@ export type Chickin = BaseMetadata & BaseChickin;
export type CreateChickinPayload = {
project_flock_kandang_id: number;
- chick_in_date: string;
- note: string;
- quantity?: number;
+ chickin_requests: {
+ chick_in_date: string;
+ note?: string;
+ product_warehouse_id: number;
+ }[];
};
export type UpdateChickinPayload = CreateChickinPayload & {
diff --git a/src/types/api/production/project-flock-kandang.d.ts b/src/types/api/production/project-flock-kandang.d.ts
index 2cb2503d..222096f4 100644
--- a/src/types/api/production/project-flock-kandang.d.ts
+++ b/src/types/api/production/project-flock-kandang.d.ts
@@ -2,6 +2,7 @@ import { Kandang } from '@/type/master-data/kandang';
import { ProjectFlock } from '@/types/api/production/project-flock';
import { ProductWarehouse } from '@/types/api/inventory/product-warehouse';
import { Supplier } from '../master-data/supplier';
+import { BaseApproval } from '../api-general';
export type BaseProjectFlockKandang = {
id: number;
@@ -10,14 +11,14 @@ export type BaseProjectFlockKandang = {
kandang: Kandang;
project_flock: ProjectFlock;
available_qtys?: AvailableQty[];
+ approval: BaseApproval;
};
export type AvailableQty = {
chick_in_date?: string;
- po_number?: string;
- document_path?: string;
- supplier?: Supplier;
+ available_qty: number;
product_warehouse: ProductWarehouse;
+ note?: string;
};
export type ProjectFlockKandang = BaseProjectFlockKandang;
diff --git a/src/types/api/production/project-flock.d.ts b/src/types/api/production/project-flock.d.ts
index be14302d..15f60af9 100644
--- a/src/types/api/production/project-flock.d.ts
+++ b/src/types/api/production/project-flock.d.ts
@@ -9,8 +9,9 @@ export type BaseProjectFlock = {
id: number;
name: string;
status: string;
- flock: Flock;
- flock_id: number;
+ flock?: Flock;
+ flock_i?: number;
+ flock_name: string;
area: Area;
area_id: number;
category: string;
@@ -32,7 +33,7 @@ export type PeriodFlock = {
export type ProjectFlock = BaseMetadata & BaseProjectFlock;
export type CreateProjectFlockPayload = {
- flock_id: number;
+ flock_name: string;
area_id: number;
category: string;
fcr_id: number;