From 9089e3d120d4203d4b25ac6eded8c91f4b9a2ab0 Mon Sep 17 00:00:00 2001 From: elforjani13 <39470382+elforjani13@users.noreply.github.com> Date: Wed, 2 Feb 2022 00:46:02 +0200 Subject: [PATCH] feat(warehousetransfer): add api. --- .../WarehouseTransferForm.schema.js | 13 +-- .../WarehouseTransferFormHeaderFields.js | 22 ++--- .../WarehouseTransferFormProvider.js | 16 +++- .../WarehouseTransferForm/utils.js | 23 +---- src/hooks/query/warehouses.js | 95 +++++++++++++++++++ 5 files changed, 129 insertions(+), 40 deletions(-) diff --git a/src/containers/WarehouseTransfers/WarehouseTransferForm/WarehouseTransferForm.schema.js b/src/containers/WarehouseTransfers/WarehouseTransferForm/WarehouseTransferForm.schema.js index efe3afe45..defb8db87 100644 --- a/src/containers/WarehouseTransfers/WarehouseTransferForm/WarehouseTransferForm.schema.js +++ b/src/containers/WarehouseTransfers/WarehouseTransferForm/WarehouseTransferForm.schema.js @@ -4,11 +4,11 @@ import { DATATYPES_LENGTH } from 'common/dataTypes'; const Schema = Yup.object().shape({ date: Yup.date().required().label(intl.get('date')), - transfer_number: Yup.string() + transaction_number: Yup.string() .max(DATATYPES_LENGTH.STRING) - .label(intl.get('transfer_number')), - from_warehouse: Yup.number().required().label(intl.get('from_warehouse')), - to_warehouse: Yup.number().required().label(intl.get('from_warehouse')), + .label(intl.get('transaction_number')), + from_warehouse_id: Yup.number().required().label(intl.get('from_warehouse')), + to_warehouse_id: Yup.number().required().label(intl.get('from_warehouse')), reason: Yup.string() .trim() .min(1) @@ -17,8 +17,9 @@ const Schema = Yup.object().shape({ entries: Yup.array().of( Yup.object().shape({ item_id: Yup.number().nullable(), - source_warehouse: Yup.number().nullable(), - destination_warehouse: Yup.number().nullable(), + // source_warehouse: Yup.number().nullable(), + // destination_warehouse: Yup.number().nullable(), + description: Yup.string().nullable().max(DATATYPES_LENGTH.TEXT), quantity: Yup.number().nullable().max(DATATYPES_LENGTH.INT_10), }), ), diff --git a/src/containers/WarehouseTransfers/WarehouseTransferForm/WarehouseTransferFormHeaderFields.js b/src/containers/WarehouseTransfers/WarehouseTransferForm/WarehouseTransferFormHeaderFields.js index c036eb167..6b7fc9f1b 100644 --- a/src/containers/WarehouseTransfers/WarehouseTransferForm/WarehouseTransferFormHeaderFields.js +++ b/src/containers/WarehouseTransfers/WarehouseTransferForm/WarehouseTransferFormHeaderFields.js @@ -37,7 +37,7 @@ function WarehouseTransferFormHeaderFields({ warehouseTransferNextNumber, warehouseTransferNumberPrefix, }) { - const { accounts } = useWarehouseTransferFormContext(); + const { warehouses } = useWarehouseTransferFormContext(); // Handle warehouse transfer number changing. const handleTransferNumberChange = () => { @@ -92,11 +92,11 @@ function WarehouseTransferFormHeaderFields({ )} {/* ----------- Transfer number ----------- */} - + {({ form, field, meta: { error, touched } }) => ( } - labelInfo={} + // labelInfo={} inline={true} className={classNames('form-group--transfer-no', CLASSES.FILL)} intent={inputIntent({ error, touched })} @@ -131,7 +131,7 @@ function WarehouseTransferFormHeaderFields({ )} {/* ----------- Form Warehouse ----------- */} - + {({ form, field: { value }, meta: { error, touched } }) => ( } @@ -142,12 +142,12 @@ function WarehouseTransferFormHeaderFields({ inline={true} labelInfo={} intent={inputIntent({ error, touched })} - helperText={} + helperText={} > { - form.setFieldValue('form_warehouse', account.id); + form.setFieldValue('from_warehouse_id', account.id); }} defaultSelectText={'Select Warehouse Transfer'} selectedAccountId={value} @@ -158,7 +158,7 @@ function WarehouseTransferFormHeaderFields({ )} {/* ----------- To Warehouse ----------- */} - + {({ form, field: { value }, meta: { error, touched } }) => ( } @@ -169,12 +169,12 @@ function WarehouseTransferFormHeaderFields({ inline={true} labelInfo={} intent={inputIntent({ error, touched })} - helperText={} + helperText={} > { - form.setFieldValue('to_warehouse', account.id); + form.setFieldValue('to_warehouse_id', account.id); }} defaultSelectText={'Select Warehouse Transfer'} selectedAccountId={value} diff --git a/src/containers/WarehouseTransfers/WarehouseTransferForm/WarehouseTransferFormProvider.js b/src/containers/WarehouseTransfers/WarehouseTransferForm/WarehouseTransferFormProvider.js index 664262689..2531e9e73 100644 --- a/src/containers/WarehouseTransfers/WarehouseTransferForm/WarehouseTransferFormProvider.js +++ b/src/containers/WarehouseTransfers/WarehouseTransferForm/WarehouseTransferFormProvider.js @@ -1,6 +1,6 @@ import React from 'react'; import DashboardInsider from 'components/Dashboard/DashboardInsider'; -import { useItems, useAccounts } from 'hooks/query'; +import { useItems, useWarehouses } from 'hooks/query'; import { ITEMS_FILTER_ROLES_QUERY } from './utils.js'; const WarehouseFormContext = React.createContext(); @@ -19,17 +19,23 @@ function WarehouseTransferFormProvider({ warehouseTransferId, ...props }) { stringified_filter_roles: ITEMS_FILTER_ROLES_QUERY, }); - // Fetch accounts list. - const { data: accounts, isLoading: isAccountsLoading } = useAccounts(); + // Fetch warehouses list. + const { + data: warehouses, + isFetching: isWarehouesFetching, + isLoading: isWarehouesLoading, + } = useWarehouses(); // Provider payload. const provider = { items, - accounts, + warehouses, + isItemsFetching, + isWarehouesFetching, }; return ( diff --git a/src/containers/WarehouseTransfers/WarehouseTransferForm/utils.js b/src/containers/WarehouseTransfers/WarehouseTransferForm/utils.js index 0fac70605..b5aa27d73 100644 --- a/src/containers/WarehouseTransfers/WarehouseTransferForm/utils.js +++ b/src/containers/WarehouseTransfers/WarehouseTransferForm/utils.js @@ -18,28 +18,15 @@ export const MIN_LINES_NUMBER = 4; export const defaultWarehouseTransfer = { date: moment(new Date()).format('YYYY-MM-DD'), - transfer_number: '', - from_warehouse: '', - to_warehouse: '', + transaction_number: '', + from_warehouse_id: '', + to_warehouse_id: '', reason: '', entries: [...repeatValue(defaultWareTransferEntry, MIN_LINES_NUMBER)], }; export const ITEMS_FILTER_ROLES_QUERY = JSON.stringify([ - { - index: 1, - fieldKey: 'sellable', - value: true, - condition: '&&', - comparator: 'equals', - }, - { - index: 2, - fieldKey: 'active', - value: true, - condition: '&&', - comparator: 'equals', - }, + { fieldKey: 'type', comparator: 'is', value: 'inventory', index: 1 }, ]); /** @@ -50,6 +37,6 @@ export const useObserveTransferNoSettings = (prefix, nextNumber) => { React.useEffect(() => { const transferNo = transactionNumber(prefix, nextNumber); - setFieldValue('transfer_no', transferNo); + setFieldValue('transaction_number', transferNo); }, [setFieldValue, prefix, nextNumber]); }; diff --git a/src/hooks/query/warehouses.js b/src/hooks/query/warehouses.js index 4aea65efe..55f7ca9e2 100644 --- a/src/hooks/query/warehouses.js +++ b/src/hooks/query/warehouses.js @@ -8,6 +8,10 @@ const commonInvalidateQueries = (queryClient) => { // Invalidate warehouses. queryClient.invalidateQueries(t.WAREHOUSES); queryClient.invalidateQueries(t.WAREHOUSE); + + // Invalidate warehouses transfers. + queryClient.invalidateQueries(t.WAREHOUSE_TRANSFERS); + queryClient.invalidateQueries(t.WAREHOUSE_TRANSFER); }; /** @@ -97,3 +101,94 @@ export function useWarehouse(id, props, requestProps) { }, ); } + +/** + * Create a new warehouse transfer. + */ +export function useCreateWarehouseTransfer(props) { + const queryClient = useQueryClient(); + const apiRequest = useApiRequest(); + + return useMutation( + (values) => apiRequest.post('warehouses/transfers', values), + { + onSuccess: (res, values) => { + // Common invalidate queries. + commonInvalidateQueries(queryClient); + }, + ...props, + }, + ); +} + +/** + * Edits the given warehouse transfer. + */ +export function useEditWarehouseTransfer(props) { + const queryClient = useQueryClient(); + const apiRequest = useApiRequest(); + + return useMutation( + ([id, values]) => apiRequest.post(`warehouses/transfers${id}`, values), + { + onSuccess: (res, [id, values]) => { + // Invalidate specific sale invoice. + queryClient.invalidateQueries([t.WAREHOUSE_TRANSFER, id]); + + // Common invalidate queries. + commonInvalidateQueries(queryClient); + }, + ...props, + }, + ); +} + +/** + * Deletes the given warehouse Transfer. + */ +export function useDeleteWarehouseTransfer(props) { + const queryClient = useQueryClient(); + const apiRequest = useApiRequest(); + + return useMutation((id) => apiRequest.delete(`warehouses/transfers/${id}`), { + onSuccess: (res, id) => { + // Invalidate specific warehoue. + queryClient.invalidateQueries([t.WAREHOUSE_TRANSFER, id]); + + // Common invalidate queries. + commonInvalidateQueries(queryClient); + }, + ...props, + }); +} + +/** + * Retrieve Warehoues list. + */ +export function useWarehousesTransfers(query, props) { + return useRequestQuery( + [t.WAREHOUSE_TRANSFERS, query], + { method: 'get', url: 'warehouses/transfers', params: query }, + { + select: (res) => res.data, + defaultData: [], + ...props, + }, + ); +} + +/** + * Retrieve the warehouse transfer details. + * @param {number} + */ +export function useWarehouseTransfer(id, props, requestProps) { + return useRequestQuery( + [t.WAREHOUSE_TRANSFER, id], + { method: 'get', url: `warehouses/transfers/${id}`, ...requestProps }, + { + select: (res) => res.data, + defaultData: {}, + ...props, + }, + ); +}