Skip to content

Commit 1030430

Browse files
authored
Merge pull request #229 from scientist-softserv/137-accept-sow
accept sow
2 parents 11f8201 + 1b34cfe commit 1030430

File tree

8 files changed

+99
-31
lines changed

8 files changed

+99
-31
lines changed

pages/browse/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ const Browse = () => {
3535
if (isError) {
3636
return (
3737
<Notice
38+
addClass='my-5'
3839
alert={configureErrors([isError])}
3940
dismissible={false}
4041
withBackButton={true}

pages/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ const Home = () => {
4949
<Notice
5050
alert={configureErrors([isError])}
5151
withBackButton={false}
52+
addClass='my-5'
5253
/>
5354
) : (
5455
<>

pages/requests/[uuid].js

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
Title,
1515
} from '@scientist-softserv/webstore-component-library'
1616
import {
17+
acceptSOW,
1718
configureErrors,
1819
createMessageOrFile,
1920
requestActionsBg,
@@ -35,18 +36,19 @@ const Request = () => {
3536
* the file (key) and path string (value). additional query properties may also exist if they were explicitly passed.
3637
*/
3738
const { uuid } = router.query
38-
const { request, isLoadingRequest, isRequestError } = useOneRequest(uuid, session?.accessToken)
39-
const { allSOWs, isLoadingSOWs, isSOWError } = useAllSOWs(uuid, request?.identifier, session?.accessToken)
40-
const { messages, isLoadingMessages, isMessagesError, mutateMessages, messagesData } = useMessages(uuid, session?.accessToken)
41-
const { files, isLoadingFiles, isFilesError, mutateFiles, filesData } = useFiles(uuid, session?.accessToken)
39+
const accessToken = session?.accessToken
40+
const { request, isLoadingRequest, isRequestError } = useOneRequest(uuid, accessToken)
41+
const { allSOWs, isLoadingSOWs, isSOWError } = useAllSOWs(uuid, request?.identifier, accessToken)
42+
const { messages, isLoadingMessages, isMessagesError, mutateMessages, messagesData } = useMessages(uuid, accessToken)
43+
const { files, isLoadingFiles, isFilesError, mutateFiles, filesData } = useFiles(uuid, accessToken)
4244

4345
const [allPOs, setAllPOs] = useState([])
4446
const [isPOError, setIsPOError] = useState(false)
4547
const [isLoadingPOs, setIsLoadingPOs] = useState(true)
4648
useEffect(() => {
4749
if (request) {
4850
(async () => {
49-
const { allPOs, isLoadingPOs, isPOError } = await getAllPOs(request?.quotedWareID, uuid, request?.identifier, session?.accessToken)
51+
const { allPOs, isLoadingPOs, isPOError } = await getAllPOs(request?.quotedWareID, uuid, request?.identifier, accessToken)
5052

5153
setIsLoadingPOs(isLoadingPOs)
5254
setAllPOs(allPOs)
@@ -64,6 +66,7 @@ const Request = () => {
6466
if (!session) {
6567
return (
6668
<Notice
69+
addClass='my-5'
6770
alert={{
6871
body: ['Please log in to view this request.'],
6972
title: 'Unauthorized',
@@ -93,7 +96,7 @@ const Request = () => {
9396
id: request.id,
9497
message,
9598
files,
96-
accessToken: session?.accessToken,
99+
accessToken,
97100
quotedWareID: request.quotedWareID,
98101
})
99102

@@ -133,7 +136,17 @@ const Request = () => {
133136
<CollapsibleSection header='Additional Information' description={request.htmlDescription} />
134137
<Title addClass='mt-4' title='Documents' size='small' />
135138
{documents.length ? documents.map((document, index) => (
136-
<Document key={`${request.id}-${index}`} document={document} addClass='mt-3' />
139+
<Document
140+
addClass='mt-3'
141+
acceptSOW={acceptSOW(
142+
request,
143+
document.sowID,
144+
accessToken,
145+
)}
146+
document={document}
147+
key={`${request.id}-${index}`}
148+
request={request}
149+
/>
137150
)) : (
138151
<TextBox
139152
alignment='left'

pages/requests/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ const Requests = () => {
3030
if (!session) {
3131
return (
3232
<Notice
33+
addClass='my-5'
3334
alert={{
3435
body: ['Please log in to make new requests or view existing ones.'],
3536
title: 'Unauthorized',
@@ -43,6 +44,7 @@ const Requests = () => {
4344
if (isError) {
4445
return (
4546
<Notice
47+
addClass='my-5'
4648
alert={configureErrors([isAllRequestsError, isDefaultWareError])}
4749
dismissible={false}
4850
withBackButton={true}

pages/requests/new/[ware].js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ const NewRequest = () => {
124124
if (!session) {
125125
return (
126126
<Notice
127+
addClass='my-5'
127128
alert={{
128129
body: ['Please log in to make new requests.'],
129130
title: 'Unauthorized',
@@ -137,6 +138,7 @@ const NewRequest = () => {
137138
if (isInitialRequestError) {
138139
return (
139140
<Notice
141+
addClass='my-5'
140142
alert={configureErrors([isInitialRequestError])}
141143
dismissible={false}
142144
withBackButton={true}
@@ -151,6 +153,7 @@ const NewRequest = () => {
151153
if (createRequestError) {
152154
return (
153155
<Notice
156+
addClass='my-5'
154157
alert={configureErrors([createRequestError])}
155158
dismissible={true}
156159
withBackButton={false}

pages/services/[ware].js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ const Service = () => {
1414
if (isError) {
1515
return (
1616
<Notice
17+
addClass='my-5'
1718
alert={configureErrors([isError])}
1819
dismissible={false}
1920
withBackButton={true}

utils/api/configurations.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,15 @@ export const configureRequests = ({ data, path }) => {
3434
return {
3535
billingAddress: {
3636
address: request.billing_address?.text,
37+
city: request.billing_address?.city,
38+
country: request.billing_address?.country,
39+
state: request.billing_address?.state,
40+
street: request.billing_address?.street,
41+
street2: request.billing_address?.street2,
42+
zipcode: request.billing_address?.zipcode,
3743
id: request.billing_address?.id,
3844
},
45+
billingSameAsShipping: request.billing_same_as_shipping,
3946
createdAt: normalizeDate(request.created_at),
4047
description: normalizeDescription(request.description),
4148
htmlDescription: normalizeHtmlDescription(request.description),
@@ -50,6 +57,12 @@ export const configureRequests = ({ data, path }) => {
5057
proposedDeadline: normalizeDate(request.proposed_deadline),
5158
shippingAddress: {
5259
address: request.shipping_address?.text,
60+
city: request.shipping_address?.city,
61+
country: request.shipping_address?.country,
62+
state: request.shipping_address?.state,
63+
street: request.shipping_address?.street,
64+
street2: request.shipping_address?.street2,
65+
zipcode: request.shipping_address?.zipcode,
5366
id: request.shipping_address?.id,
5467
},
5568
status: {

utils/api/requests.js

Lines changed: 58 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,37 @@ export const createMessageOrFile = ({ id, quotedWareID, message, files, accessTo
170170
return posting(`/quote_groups/${id}/notes.json`, note, accessToken)
171171
}
172172

173+
const requestData = ({request, shipping, billing}) => {
174+
return {
175+
/* eslint-disable camelcase */
176+
provider_ids: [process.env.NEXT_PUBLIC_PROVIDER_ID],
177+
proposed_deadline_str: request.proposedDeadline,
178+
site: {
179+
billing_same_as_shipping: request.billingSameAsShipping,
180+
name: request.name,
181+
},
182+
shipping_address_attributes: {
183+
city: shipping.city,
184+
country: shipping.country,
185+
state: shipping.state,
186+
street: shipping.street,
187+
street2: shipping.street2,
188+
zipcode: shipping.zipcode,
189+
organization_name: process.env.NEXT_PUBLIC_PROVIDER_NAME
190+
},
191+
billing_address_attributes: {
192+
city: billing.city,
193+
country: billing.country,
194+
state: billing.state,
195+
street: billing.street,
196+
street2: billing.street2,
197+
zipcode: billing.zipcode,
198+
organization_name: process.env.NEXT_PUBLIC_PROVIDER_NAME
199+
},
200+
/* eslint-enable camelcase */
201+
}
202+
}
203+
173204
export const createRequest = async ({ dynamicFormData, wareID, accessToken }) => {
174205
/* eslint-disable camelcase */
175206
// the api currently doesn't account for attachments
@@ -185,37 +216,20 @@ export const createRequest = async ({ dynamicFormData, wareID, accessToken }) =>
185216
requestTimeline = timeline
186217
}
187218

219+
let sharedRequestData = requestData({
220+
request: dynamicFormData,
221+
shipping: dynamicFormData.shipping,
222+
billing: dynamicFormData.billing,
223+
})
224+
188225
const pg_quote_group = {
189226
...formData,
227+
...sharedRequestData,
190228
name: dynamicFormData.name,
191-
provider_ids: [process.env.NEXT_PUBLIC_PROVIDER_ID],
192229
suppliers_identified: 'Yes',
193230
description: requestDescription,
194-
proposed_deadline_str: dynamicFormData.proposedDeadline,
195231
no_proposed_deadline: dynamicFormData.proposedDeadline ? false : true,
196232
timeline: requestTimeline,
197-
site: {
198-
billing_same_as_shipping: dynamicFormData.billingSameAsShipping,
199-
name: dynamicFormData.name,
200-
},
201-
shipping_address_attributes: {
202-
city: dynamicFormData.shipping.city,
203-
country: dynamicFormData.shipping.country,
204-
state: dynamicFormData.shipping.state,
205-
street: dynamicFormData.shipping.street,
206-
street2: dynamicFormData.shipping.street2,
207-
zipcode: dynamicFormData.shipping.zipcode,
208-
organization_name: process.env.NEXT_PUBLIC_PROVIDER_NAME
209-
},
210-
billing_address_attributes: {
211-
city: dynamicFormData.shipping.city,
212-
country: dynamicFormData.shipping.country,
213-
state: dynamicFormData.shipping.state,
214-
street: dynamicFormData.shipping.street,
215-
street2: dynamicFormData.shipping.street2,
216-
zipcode: dynamicFormData.shipping.zipcode,
217-
organization_name: process.env.NEXT_PUBLIC_PROVIDER_NAME
218-
},
219233
}
220234

221235
let { data, error } = await posting(`/wares/${wareID}/quote_groups.json`, { pg_quote_group }, accessToken)
@@ -250,6 +264,26 @@ export const createRequest = async ({ dynamicFormData, wareID, accessToken }) =>
250264
/* eslint-enable camelcase */
251265
}
252266

267+
export const acceptSOW = (request, sowID, accessToken) => {
268+
let sharedRequestData = requestData({
269+
request: request,
270+
shipping: request.shippingAddress,
271+
billing: request.billingAddress,
272+
})
273+
274+
const sow = {
275+
...sharedRequestData,
276+
name: request.title,
277+
description: request.description,
278+
provider_names: [process.env.NEXT_PUBLIC_PROVIDER_NAME],
279+
winning_proposal_id: sowID,
280+
purchase_justifications: [''],
281+
purchase_justification_comment: '',
282+
}
283+
284+
return posting(`/quote_groups/${request.id}/accept_sow.json`, { pg_quote_group: sow }, accessToken)
285+
}
286+
253287
/** PUT METHODS */
254288
export const sendRequestToVendor = async (requestID, accessToken) => {
255289
const { data, error } = await updating(`/quote_groups/${requestID}/send_to_vendors.json`, {}, accessToken)

0 commit comments

Comments
 (0)