Skip to content

Commit

Permalink
#60 (#95): update structure of delivery details modal for courier ope…
Browse files Browse the repository at this point in the history
…rations
  • Loading branch information
an2508374 committed Jan 17, 2024
1 parent 597ee7d commit 0f3a8f6
Show file tree
Hide file tree
Showing 3 changed files with 208 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -370,12 +370,16 @@ modules:
use: downstream
downstream: deliveries-service/deliveries/{deliveryId}/courier
auth: true
bind:
- deliveryId:{deliveryId}

- upstream: /{deliveryId}/fail
method: POST
use: downstream
downstream: deliveries-service/deliveries/{deliveryId}/fail
auth: true
bind:
- deliveryId:{deliveryId}
# claims:
# role: courier

Expand All @@ -384,6 +388,8 @@ modules:
use: downstream
downstream: deliveries-service/deliveries/{deliveryId}/complete
auth: true
bind:
- deliveryId:{deliveryId}
# claims:
# role: courier

Expand All @@ -392,6 +398,8 @@ modules:
use: downstream
downstream: deliveries-service/deliveries/{deliveryId}/pick-up
auth: true
bind:
- deliveryId:{deliveryId}
# claims:
# role: courier

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@ import {
import React from "react";
import dateFromUTCToLocal from "../../parsing/dateFromUTCToLocal";
import formatDeliveryStatus from "../../parsing/formatDeliveryStatus";
import { approvePendingOffer, cancelPendingOffer } from "../../../utils/api";
import { assignCourierToDelivery, pickupDelivery, completeDelivery, failDelivery } from "../../../utils/api";
import booleanToString from "../../parsing/booleanToString";
import { getUserIdFromStorage } from "../../../utils/storage";

interface DeliveryDetailsModalProps {
show: boolean;
Expand Down Expand Up @@ -62,7 +63,7 @@ import booleanToString from "../../parsing/booleanToString";
</div>
);

const StatusDetailsSection = ({ detailsData }) => (
const StatusDetailsSection = ({ detailsData, assign, pickup, complete, fail, failed, setFailed, reason, setReason, finalized, refresh }) => (
<div>
<LabelsWithBorder
idA="status"
Expand Down Expand Up @@ -92,6 +93,30 @@ import booleanToString from "../../parsing/booleanToString";
idB="last-update-value"
valueB={formatDateToUTC(detailsData.delivery.lastUpdate)}
/>

{ (!finalized && detailsData.pageContent == "your-deliveries") ? (
<div>
{ detailsData.delivery.status === "assigned" ?
<div className="mb-4 pb-1 grid grid-cols-2 md:grid-cols-2 gap-4">
<Button onClick={() => {complete()}}>Complete</Button>
<Button onClick={() => {setFailed(false)}}>Cannot deliver</Button>
</div>
:
<div className="mb-4 pb-1 grid grid-cols-1 md:grid-cols-1 gap-4">
<Button onClick={() => {pickup()}}>Pickup</Button>
</div>
}
</div>
) : (
<div className="mb-4 pb-1 grid grid-cols-1 md:grid-cols-1 gap-4">
<Button onClick={() => {assign()}}>Assign to you</Button>
</div> ) }

{ finalized ? (
<div className="mb-4 pb-1 grid grid-cols-1 md:grid-cols-1 gap-4">
<Button onClick={() => refresh()}>Refresh page</Button>
</div>
) : null }
</div>
);

Expand Down Expand Up @@ -185,8 +210,7 @@ import booleanToString from "../../parsing/booleanToString";
export function DeliveryDetailsModal(props: DeliveryDetailsModalProps) {
const close = () => {
setReason("");
setAccepted(false);
setRejected(false);
setFailed(false);
setFinalized(false);
props.setShow(false);
};
Expand All @@ -196,19 +220,29 @@ import booleanToString from "../../parsing/booleanToString";
close();
};

const [accepted, setAccepted] = React.useState<any>(false);
const [rejected, setRejected] = React.useState<any>(false);
const [failed, setFailed] = React.useState<any>(false);
const [finalized, setFinalized] = React.useState<any>(false);

const [reason, setReason] = React.useState<any>("");

const accept = () => {
approvePendingOffer(props.delivery.id);
const assign = () => {
assignCourierToDelivery(props.delivery.id, getUserIdFromStorage());
pickupDelivery(props.delivery.id);
setFinalized(true);
};

const pickup = () => {
pickupDelivery(props.delivery.id);
setFinalized(true);
};

const reject = (reason: string) => {
cancelPendingOffer(props.delivery.id, reason);
const complete = () => {
completeDelivery(props.delivery.id, new Date().toJSON());
setFinalized(true);
};

const fail = () => {
failDelivery(props.delivery.id, new Date().toJSON(), reason);
setFinalized(true);
};

Expand Down Expand Up @@ -238,6 +272,16 @@ import booleanToString from "../../parsing/booleanToString";
<SectionTitle title="Status info" />
<StatusDetailsSection
detailsData={props}
assign={assign}
pickup={pickup}
complete={complete}
fail={fail}
failed={failed}
setFailed={setFailed}
reason={reason}
setReason={setReason}
finalized={finalized}
refresh={refresh}
/>

<SectionTitle title="Order info" />
Expand All @@ -262,7 +306,7 @@ import booleanToString from "../../parsing/booleanToString";
detailsData={props}
/>

{ props.pageContent == "pending-offers" ? (
{/* { props.pageContent == "pending-offers" ? (
<div className="mb-4 border-b border-gray-200 pb-1 grid grid-cols-1 md:grid-cols-2 gap-4">
<Button onClick={() => {setAccepted(true); setRejected(false);}}>Accept</Button>
<Button onClick={() => {setAccepted(false); setRejected(true);}}>Reject</Button>
Expand Down Expand Up @@ -296,7 +340,7 @@ import booleanToString from "../../parsing/booleanToString";
<div className="mb-4 pb-1 grid grid-cols-1 md:grid-cols-1 gap-4">
<Button onClick={() => refresh()}>Refresh page</Button>
</div>
) : null }
) : null } */}

<div style={{ marginBottom: '40px' }}></div>

Expand Down
144 changes: 144 additions & 0 deletions SwiftParcel.Web/frontend/src/utils/api.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -585,6 +585,150 @@ export const getPendingDeliveries = async () => {
}
};

export const assignCourierToDelivery = async (
deliveryId: string,
courierId: string
) => {
try {

const payload = {
DeliveryId: deliveryId,
CourierId: courierId
};

console.log("Request payload:", payload);

console.log("JSON being sent:", JSON.parse(JSON.stringify(payload)));

const response = await api.post(`/deliveries/${deliveryId}/pick-up`, JSON.parse(JSON.stringify(payload)), {
headers: {
//'Authorization': `${userInfo.accessToken}`,
'Content-Type': 'application/json'
}
})

return response.data;

} catch (orderError) {
if (axios.isAxiosError(orderError) && orderError.response) {
console.error('Error status:', orderError.response.status);
console.error('Error data:', orderError.response.data);
console.error('Error during picking up delivery:', orderError.message);
} else {
console.error('Error during picking up delivery:', orderError);
}
throw orderError;
}
}

export const pickupDelivery = async (
deliveryId: string
) => {
try {

const payload = {
DeliveryId: deliveryId
};

console.log("Request payload:", payload);

console.log("JSON being sent:", JSON.parse(JSON.stringify(payload)));

const response = await api.post(`/deliveries/${deliveryId}/pick-up`, JSON.parse(JSON.stringify(payload)), {
headers: {
//'Authorization': `${userInfo.accessToken}`,
'Content-Type': 'application/json'
}
})

return response.data;

} catch (orderError) {
if (axios.isAxiosError(orderError) && orderError.response) {
console.error('Error status:', orderError.response.status);
console.error('Error data:', orderError.response.data);
console.error('Error during picking up delivery:', orderError.message);
} else {
console.error('Error during picking up delivery:', orderError);
}
throw orderError;
}
};

export const completeDelivery = async (
deliveryId: string,
deliveryAttemptDate: any
) => {
try {

const payload = {
DeliveryId: deliveryId,
DeliveryAttemptDate: deliveryAttemptDate
};

console.log("Request payload:", payload);

console.log("JSON being sent:", JSON.parse(JSON.stringify(payload)));

const response = await api.post(`/deliveries/${deliveryId}/pick-up`, JSON.parse(JSON.stringify(payload)), {
headers: {
//'Authorization': `${userInfo.accessToken}`,
'Content-Type': 'application/json'
}
})

return response.data;

} catch (orderError) {
if (axios.isAxiosError(orderError) && orderError.response) {
console.error('Error status:', orderError.response.status);
console.error('Error data:', orderError.response.data);
console.error('Error during picking up delivery:', orderError.message);
} else {
console.error('Error during picking up delivery:', orderError);
}
throw orderError;
}
};

export const failDelivery = async (
deliveryId: string,
deliveryAttemptDate: any,
reason: string
) => {
try {

const payload = {
DeliveryId: deliveryId,
DeliveryAttemptDate: deliveryAttemptDate,
Reason: reason
};

console.log("Request payload:", payload);

console.log("JSON being sent:", JSON.parse(JSON.stringify(payload)));

const response = await api.post(`/deliveries/${deliveryId}/pick-up`, JSON.parse(JSON.stringify(payload)), {
headers: {
//'Authorization': `${userInfo.accessToken}`,
'Content-Type': 'application/json'
}
})

return response.data;

} catch (orderError) {
if (axios.isAxiosError(orderError) && orderError.response) {
console.error('Error status:', orderError.response.status);
console.error('Error data:', orderError.response.data);
console.error('Error during picking up delivery:', orderError.message);
} else {
console.error('Error during picking up delivery:', orderError);
}
throw orderError;
}
};

export const getCustomerData = async (customerId: string) => {
try {
const response = await api.get(`/customers/${customerId}`, { headers: getAuthHeader() });
Expand Down

0 comments on commit 0f3a8f6

Please sign in to comment.