Skip to content

Commit 87b8d40

Browse files
authored
Merge pull request #279 from scientist-softserv/264-create-the-po
264 create the po
2 parents 8b32674 + 25f7bf0 commit 87b8d40

File tree

3 files changed

+52
-17
lines changed

3 files changed

+52
-17
lines changed

pages/requests/[uuid].js

Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {
1414
Title,
1515
} from '@scientist-softserv/webstore-component-library'
1616
import {
17-
acceptSOW,
17+
acceptSOWandCreatePO,
1818
configureErrors,
1919
createMessageOrFile,
2020
requestActionsBg,
@@ -42,11 +42,14 @@ const Request = () => {
4242
const { messages, isLoadingMessages, isMessagesError, mutateMessages, messagesData } = useMessages(uuid, accessToken)
4343
const { files, isLoadingFiles, isFilesError, mutateFiles, filesData } = useFiles(uuid, accessToken)
4444

45+
const [show, setShow] = useState(false)
46+
const [message, setMessage] = useState(null)
4547
const [allPOs, setAllPOs] = useState([])
4648
const [isPOError, setIsPOError] = useState(false)
4749
const [isLoadingPOs, setIsLoadingPOs] = useState(true)
50+
4851
useEffect(() => {
49-
if (request) {
52+
if (isLoadingPOs && request) {
5053
(async () => {
5154
const { allPOs, isLoadingPOs, isPOError } = await getAllPOs(request?.quotedWareID, uuid, request?.identifier, accessToken)
5255

@@ -55,9 +58,9 @@ const Request = () => {
5558
setIsPOError(isPOError)
5659
})()
5760
}
58-
}, [allPOs, isPOError, request, uuid, session, accessToken])
61+
}, [request, isLoadingPOs, accessToken, uuid])
5962

60-
const isLoading = isLoadingRequest || isLoadingSOWs || isLoadingFiles || isLoadingMessages || isLoadingPOs
63+
const isLoading = isLoadingRequest || isLoadingSOWs || isLoadingFiles || isLoadingMessages
6164
const isError = isRequestError || isSOWError || isFilesError|| isMessagesError || isPOError
6265
const documents = (allSOWs) ? [...allSOWs, ...allPOs] : []
6366

@@ -91,6 +94,16 @@ const Request = () => {
9194
)
9295
}
9396

97+
const handleShow = (messageText) => {
98+
setMessage(messageText)
99+
setShow(true)
100+
}
101+
102+
const handleClose = () => {
103+
setMessage(null)
104+
setShow(false)
105+
}
106+
94107
const handleSendingMessagesOrFiles = async ({ message, files }) => {
95108
const { data, error } = await createMessageOrFile({
96109
id: request.id,
@@ -106,8 +119,32 @@ const Request = () => {
106119
}
107120
}
108121

122+
const handleAcceptingSOWandCreatingPO = async (document) => {
123+
const { data, error } = await acceptSOWandCreatePO(
124+
request,
125+
document,
126+
accessToken,
127+
)
128+
129+
if (error || data.code) {
130+
setIsPOError(error || data.code)
131+
} else if (data.message) {
132+
setIsLoadingPOs(true)
133+
handleShow(data.message)
134+
}
135+
}
136+
109137
return (
110138
<div className='container'>
139+
{(message && show) && (
140+
<Notice
141+
alert={{
142+
body: [message],
143+
variant: 'success',
144+
onClose: () => handleClose(),
145+
}}
146+
/>
147+
)}
111148
<StatusBar
112149
addClass='mt-4'
113150
apiRequestStatus={request.status.text}
@@ -136,13 +173,9 @@ const Request = () => {
136173
<CollapsibleSection header='Additional Information' description={request.htmlDescription} />
137174
<Title addClass='mt-4' title='Documents' size='small' />
138175
{documents.length ? documents.map((document, index) => (
139-
<Document
176+
<Document
140177
addClass='mt-3'
141-
acceptSOW={acceptSOW(
142-
request,
143-
document.sowID,
144-
accessToken,
145-
)}
178+
acceptSOW={() => handleAcceptingSOWandCreatingPO(document)}
146179
document={document}
147180
key={`${request.id}-${index}`}
148181
request={request}

utils/api/configurations.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@ export const configureDocument = (document, requestIdentifier) => {
205205
documentStatusColor: statusColors[configureStatus(document.status)].bg,
206206
documentType: document.type,
207207
documentTypeColor: 'bg-dark',
208+
id: document.id,
208209
identifier: document.identifier,
209210
lineItems: configureLineItems(document.line_items),
210211
requestIdentifier,

utils/api/requests.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ export const useAllRequests = (accessToken) => {
2222
}
2323
}
2424

25-
export const useOneRequest = (id, accessToken) => {
26-
const { data, error } = useSWR(id ? [`/quote_groups/${id}.json`, accessToken] : null)
25+
export const useOneRequest = (uuid, accessToken) => {
26+
const { data, error } = useSWR(uuid ? [`/quote_groups/${uuid}.json`, accessToken] : null)
2727
let request = data && configureRequests({ data, path: '/requests' })[0]
2828
if (request) {
2929
request = {
@@ -63,7 +63,7 @@ export const getAllPOs = async (quotedWareId, uuid, requestIdentifier, accessTok
6363
// This hook is actively being contributed to the swr repo, but the semantics of the work are still being debated.
6464
// See https://github.com/vercel/swr/discussions/1988 for the RFC and https://github.com/vercel/swr/pull/2047 for the PR.
6565
const data = await fetcher(`quote_groups/${uuid}/quoted_wares/${quotedWareId}/purchase_orders.json`, accessToken)
66-
const configuredPOs = data.map(async (po) => {
66+
const configuredPOs = data?.map(async (po) => {
6767
const purchaseOrder = await fetcher(`quote_groups/${uuid}/quoted_wares/${quotedWareId}/purchase_orders/${po.id}.json`, accessToken)
6868
return configurePO(purchaseOrder, requestIdentifier)
6969
})
@@ -266,25 +266,26 @@ export const createRequest = async ({ dynamicFormData, wareID, accessToken }) =>
266266
/* eslint-enable camelcase */
267267
}
268268

269-
export const acceptSOW = (request, sowID, accessToken) => {
269+
export const acceptSOWandCreatePO = (request, sow, accessToken) => {
270270
let sharedRequestData = requestData({
271271
request: request,
272272
shipping: request.shippingAddress,
273273
billing: request.billingAddress,
274274
})
275275

276-
const sow = {
276+
const pg_quote_group = {
277277
...sharedRequestData,
278278
name: request.title,
279279
description: request.description,
280280
/* eslint-disable camelcase */
281281
provider_names: [process.env.NEXT_PUBLIC_PROVIDER_NAME],
282-
winning_proposal_id: sowID,
282+
winning_proposal_id: sow.id,
283283
purchase_justifications: [''],
284284
purchase_justification_comment: '',
285+
po_number: `PO${sow.identifier}`,
285286
}
286287

287-
return posting(`/quote_groups/${request.id}/accept_sow.json`, { pg_quote_group: sow }, accessToken)
288+
return posting(`/quote_groups/${request.id}/accept_sow.json`, { pg_quote_group }, accessToken)
288289
/* eslint-enable camelcase */
289290
}
290291

0 commit comments

Comments
 (0)