diff --git a/src/components/pages/purchase/form/request/PurchaseRequestForm.schema.ts b/src/components/pages/purchase/form/request/PurchaseRequestForm.schema.ts index 51305585..110a3d7c 100644 --- a/src/components/pages/purchase/form/request/PurchaseRequestForm.schema.ts +++ b/src/components/pages/purchase/form/request/PurchaseRequestForm.schema.ts @@ -7,6 +7,7 @@ type PurchaseRequestFormSchemaType = { label: string; } | null; supplier_id: number; + credit_term: number; area?: { value: number; label: string; @@ -34,7 +35,7 @@ type PurchaseRequestFormSchemaType = { label: string; } | null; product_id: number; - quantity: number | string; + qty: number | string; }[]; }; @@ -49,7 +50,7 @@ export type PurchaseItemSchema = { label: string; } | null; product_id: number; - quantity: number | string; + qty: number | string; }; const PurchaseItemObjectSchema: Yup.ObjectSchema = @@ -70,7 +71,7 @@ const PurchaseItemObjectSchema: Yup.ObjectSchema = .required('Produk wajib dipilih!') .min(1, 'Produk wajib dipilih!') .typeError('Produk wajib dipilih!'), - quantity: Yup.mixed() + qty: Yup.mixed() .required('Kuantitas wajib diisi!') .test( 'is-valid-qty', @@ -91,6 +92,10 @@ export const PurchaseRequestFormSchema: Yup.ObjectSchema { const touchedItem = formik.touched.items?.[idx]; const errorItem = formik.errors.items?.[idx] as @@ -191,32 +191,21 @@ const PurchaseRequestForm = ({ typeof values.supplier_id === 'string' ? parseInt(values.supplier_id) || 0 : values.supplier_id || 0, + credit_term: values.credit_term || 0, notes: values.notes || '', - area_id: - typeof values.area_id === 'string' - ? parseInt(values.area_id) || 0 - : values.area_id || 0, - location_id: - typeof values.location_id === 'string' - ? parseInt(values.location_id) || 0 - : values.location_id || 0, - warehouse_id: - typeof values.warehouse_id === 'string' - ? parseInt(values.warehouse_id) || 0 - : values.warehouse_id || 0, items: (values.items || []).map((item) => ({ - product_warehouse_id: - typeof item.product_warehouse_id === 'string' - ? parseInt(item.product_warehouse_id) || 0 - : item.product_warehouse_id || 0, + warehouse_id: + typeof values.warehouse_id === 'string' + ? parseInt(values.warehouse_id) || 0 + : values.warehouse_id || 0, product_id: typeof item.product_id === 'string' ? parseInt(item.product_id) || 0 : item.product_id || 0, - quantity: - typeof item.quantity === 'string' - ? parseFloat(item.quantity) || 0 - : item.quantity || 0, + qty: + typeof item.qty === 'string' + ? parseFloat(item.qty) || 0 + : item.qty || 0, })), }; @@ -261,7 +250,7 @@ const PurchaseRequestForm = ({ product_warehouse_id: pw.id, warehouse_id: pw.warehouse.id, warehouse_name: pw.warehouse.name, - quantity: pw.quantity, + qty: pw.quantity, })) || [] ); }, [productWarehouses]); @@ -295,6 +284,7 @@ const PurchaseRequestForm = ({ }); return data; }, [productsResponse]); + const locationsUrl = useMemo(() => { const params = new URLSearchParams({ search: locationSelectInputValue, @@ -436,7 +426,7 @@ const PurchaseRequestForm = ({ product_warehouse_id: null, product: null, product_id: '', - quantity: '', + qty: '', }, ]; formik.setFieldValue('items', newPurchaseItems); @@ -460,13 +450,13 @@ const PurchaseRequestForm = ({ // ===== PURCHASE ITEM OPERATIONS ===== const handlePurchaseItemChange = ( idx: number, - field: 'quantity', + field: 'qty', value: string | number ) => { - if (field === 'quantity') { + if (field === 'qty') { const numValue = typeof value === 'string' ? parseFloat(value) || 0 : value; - formik.setFieldValue(`items.${idx}.quantity`, numValue); + formik.setFieldValue(`items.${idx}.qty`, numValue); } }; @@ -519,28 +509,28 @@ const PurchaseRequestForm = ({ isClearable /> - {/**/} + - { - const warehouse = val as OptionType | null; - formik.setFieldTouched('warehouse', true); - formik.setFieldValue('warehouse', warehouse); - formik.setFieldTouched('warehouse_id', true); - formik.setFieldValue( - 'warehouse_id', - (warehouse as OptionType)?.value || 0 - ); - if (formik.values.items) { - formik.values.items.forEach((_, idx) => { - formik.setFieldValue( - `items.${idx}.product_warehouse`, - null - ); - formik.setFieldValue( - `items.${idx}.product_warehouse_id`, - null - ); - formik.setFieldValue(`items.${idx}.product`, null); - formik.setFieldValue(`items.${idx}.product_id`, ''); - }); - } - }} - options={warehouseOptions} - onInputChange={setWarehouseSelectInputValue} - isLoading={isLoadingWarehouses} - isError={ - formik.touched.warehouse && - Boolean(formik.errors.warehouse_id) - } - errorMessage={formik.errors.warehouse_id as string} - isDisabled={ - type === 'detail' || - !formik.values.area_id || - !formik.values.location_id - } - isClearable={ - type !== 'detail' && - !!formik.values.area_id && - !!formik.values.location_id - } - key={`warehouse-${formik.values.area_id}-${formik.values.location_id}`} - /> -
)} + + Gudang + * + Item * @@ -733,113 +671,68 @@ const PurchaseRequestForm = ({ /> )} - {/**/} - {/* {*/} - {/* const warehouse = val as OptionType | null;*/} - {/* formik.setFieldValue(*/} - {/* `purchase_items.${idx}.warehouse`,*/} - {/* warehouse*/} - {/* );*/} - {/* formik.setFieldValue(*/} - {/* `purchase_items.${idx}.warehouse_id`,*/} - {/* (warehouse as OptionType)?.value || 0*/} - {/* );*/} - {/* formik.setFieldTouched(*/} - {/* `purchase_items.${idx}.product_warehouse`,*/} - {/* false*/} - {/* );*/} - {/* formik.setFieldValue(*/} - {/* `purchase_items.${idx}.product_warehouse`,*/} - {/* null*/} - {/* );*/} - {/* formik.setFieldTouched(*/} - {/* `purchase_items.${idx}.product_warehouse_id`,*/} - {/* false*/} - {/* );*/} - {/* formik.setFieldValue(*/} - {/* `purchase_items.${idx}.product_warehouse_id`,*/} - {/* 0*/} - {/* );*/} - {/* formik.setFieldTouched(*/} - {/* `purchase_items.${idx}.product_id`,*/} - {/* false*/} - {/* );*/} - {/* formik.setFieldValue(*/} - {/* `purchase_items.${idx}.product_id`,*/} - {/* 0*/} - {/* );*/} - {/* }}*/} - {/* options={warehouseOptions}*/} - {/* onInputChange={setWarehouseSelectInputValue}*/} - {/* isLoading={isLoadingWarehouses}*/} - {/* isError={*/} - {/* getPurchaseItemError(idx, 'warehouse_id').isError*/} - {/* }*/} - {/* errorMessage={*/} - {/* getPurchaseItemError(idx, 'warehouse_id')*/} - {/* .errorMessage*/} - {/* }*/} - {/* isDisabled={type === 'detail'}*/} - {/* isClearable*/} - {/* placeholder='Pilih Gudang'*/} - {/* className={{*/} - {/* wrapper: 'min-w-32',*/} - {/* }}*/} - {/* />*/} - {/**/} - {/**/} - {/* {*/} - {/* const productWarehouse =*/} - {/* val as ProductWarehouseOptionType | null;*/} - {/* formik.setFieldValue(*/} - {/* `purchase_items.${idx}.product_warehouse`,*/} - {/* productWarehouse*/} - {/* );*/} - {/* formik.setFieldValue(*/} - {/* `purchase_items.${idx}.product_warehouse_id`,*/} - {/* (productWarehouse as ProductWarehouseOptionType)*/} - {/* ?.value || 0*/} - {/* );*/} - {/* const productId =*/} - {/* (productWarehouse as ProductWarehouseOptionType)*/} - {/* ?.product_id || 0;*/} - {/* formik.setFieldValue(*/} - {/* `purchase_items.${idx}.product_id`,*/} - {/* productId*/} - {/* );*/} - {/* }}*/} - {/* options={getProductWarehouseOptionsForItem(*/} - {/* item.warehouse_id*/} - {/* )}*/} - {/* isLoading={isLoadingProductWarehouses}*/} - {/* isError={*/} - {/* getPurchaseItemError(idx, 'product_warehouse_id')*/} - {/* .isError*/} - {/* }*/} - {/* errorMessage={*/} - {/* getPurchaseItemError(idx, 'product_warehouse_id')*/} - {/* .errorMessage*/} - {/* }*/} - {/* isDisabled={type === 'detail' || !item.warehouse_id}*/} - {/* isClearable={type !== 'detail' && !!item.warehouse_id}*/} - {/* placeholder={*/} - {/* !item.warehouse_id*/} - {/* ? 'Pilih Gudang terlebih dahulu'*/} - {/* : 'Pilih Produk'*/} - {/* }*/} - {/* className={{*/} - {/* wrapper: 'min-w-32',*/} - {/* }}*/} - {/* />*/} - {/**/} + + { + const warehouse = val as OptionType | null; + formik.setFieldTouched('warehouse', true); + formik.setFieldValue('warehouse', warehouse); + formik.setFieldTouched('warehouse_id', true); + formik.setFieldValue( + 'warehouse_id', + (warehouse as OptionType)?.value || 0 + ); + if (formik.values.items) { + formik.values.items.forEach((_, idx) => { + formik.setFieldValue( + `items.${idx}.product_warehouse`, + null + ); + formik.setFieldValue( + `items.${idx}.product_warehouse_id`, + null + ); + formik.setFieldValue( + `items.${idx}.product`, + null + ); + formik.setFieldValue( + `items.${idx}.product_id`, + '' + ); + }); + } + }} + options={warehouseOptions} + onInputChange={setWarehouseSelectInputValue} + isLoading={isLoadingWarehouses} + isError={ + formik.touched.warehouse && + Boolean(formik.errors.warehouse_id) + } + errorMessage={formik.errors.warehouse_id as string} + isDisabled={ + type === 'detail' || + !formik.values.area_id || + !formik.values.location_id + } + isClearable={ + type !== 'detail' && + !!formik.values.area_id && + !!formik.values.location_id + } + key={`warehouse-${formik.values.area_id}-${formik.values.location_id}`} + /> + - handlePurchaseItemChange( - idx, - 'quantity', - e.target.value - ) + handlePurchaseItemChange(idx, 'qty', e.target.value) } onBlur={formik.handleBlur} placeholder='Masukkan kuantitas' readOnly={type === 'detail'} allowNegative={false} decimalScale={0} - isError={ - getPurchaseItemError(idx, 'quantity').isError - } + isError={getPurchaseItemError(idx, 'qty').isError} errorMessage={ - getPurchaseItemError(idx, 'quantity').errorMessage + getPurchaseItemError(idx, 'qty').errorMessage } className={{ wrapper: 'min-w-24', @@ -928,9 +815,7 @@ const PurchaseRequestForm = ({ item.product_id && productData[item.product_id] ? ( productData[item.product_id].product_price * - (parseFloat( - item.quantity?.toString() || '0' - ) || 0) + (parseFloat(item.qty?.toString() || '0') || 0) ).toLocaleString('en-US') : '' } diff --git a/src/types/api/purchase/purchase.d.ts b/src/types/api/purchase/purchase.d.ts index 85eb6ba6..ec3d88cc 100644 --- a/src/types/api/purchase/purchase.d.ts +++ b/src/types/api/purchase/purchase.d.ts @@ -13,6 +13,7 @@ export type PurchaseItem = { product: Product; product_warehouse: ProductWarehouse; quantity: number; + qty: number; sub_qty: number; total_qty: number; total_used: number; @@ -47,14 +48,12 @@ export type Purchase = BaseMetadata & BasePurchase; export type CreatePurchaseRequestPayload = { supplier_id: number; - area_id: number; - location_id: number; - warehouse_id: number; + credit_term: number; notes?: string | null; items: { - product_warehouse_id: number; + warehouse_id: number; product_id: number; - quantity: number; + qty: number; }[]; };