Refactor Dewar service methods and improve field handling
Updated Dewar API methods to use protected endpoints for enhanced security and consistency. Added `pgroups` handling in various frontend components and modified the LogisticsView contact field for clarity. Simplified backend router imports for better readability.
This commit is contained in:
@ -117,7 +117,7 @@ const DewarDetails: React.FC<DewarDetailsProps> = ({
|
||||
useEffect(() => {
|
||||
const fetchDewarTypes = async () => {
|
||||
try {
|
||||
const response = await DewarsService.getDewarTypesDewarsDewarTypesGet();
|
||||
const response = await DewarsService.getDewarTypesProtectedDewarsDewarTypesGet();
|
||||
setKnownDewarTypes(response ?? []);
|
||||
} catch (error) {
|
||||
setFeedbackMessage('Failed to fetch dewar types.');
|
||||
@ -132,7 +132,7 @@ const DewarDetails: React.FC<DewarDetailsProps> = ({
|
||||
useEffect(() => {
|
||||
const fetchSerialNumbers = async () => {
|
||||
try {
|
||||
const response = await DewarsService.getAllSerialNumbersDewarsDewarSerialNumbersGet();
|
||||
const response = await DewarsService.getAllSerialNumbersProtectedDewarsDewarSerialNumbersGet();
|
||||
setKnownSerialNumbers(response ?? []);
|
||||
} catch (error) {
|
||||
setFeedbackMessage('Failed to fetch serial numbers.');
|
||||
@ -248,8 +248,8 @@ const DewarDetails: React.FC<DewarDetailsProps> = ({
|
||||
const handleSaveNewDewarTypeAndSerialNumber = async () => {
|
||||
if (newDewarType) {
|
||||
try {
|
||||
const typeResponse = await DewarsService.createDewarTypeDewarsDewarTypesPost({ dewar_type: newDewarType });
|
||||
const serialResponse = await DewarsService.createDewarSerialNumberDewarsDewarSerialNumbersPost({
|
||||
const typeResponse = await DewarsService.createDewarTypeProtectedDewarsDewarTypesPost({ dewar_type: newDewarType });
|
||||
const serialResponse = await DewarsService.createDewarSerialNumberProtectedDewarsDewarSerialNumbersPost({
|
||||
serial_number: newDewarSerialNumber,
|
||||
dewar_type_id: typeResponse.id,
|
||||
});
|
||||
@ -266,7 +266,7 @@ const DewarDetails: React.FC<DewarDetailsProps> = ({
|
||||
}
|
||||
} else if (newDewarSerialNumber && selectedDewarType) {
|
||||
try {
|
||||
const response = await DewarsService.createDewarSerialNumberDewarsDewarSerialNumbersPost({
|
||||
const response = await DewarsService.createDewarSerialNumberProtectedDewarsDewarSerialNumbersPost({
|
||||
serial_number: newDewarSerialNumber,
|
||||
dewar_type_id: parseInt(selectedDewarType, 10),
|
||||
});
|
||||
@ -371,6 +371,7 @@ const DewarDetails: React.FC<DewarDetailsProps> = ({
|
||||
|
||||
try {
|
||||
const payload = {
|
||||
pgroups: activePgroup,
|
||||
dewar_name: dewar.dewar_name,
|
||||
dewar_type_id: parseInt(selectedDewarType, 10),
|
||||
dewar_serial_number_id: parseInt(selectedSerialNumber, 10),
|
||||
@ -378,15 +379,11 @@ const DewarDetails: React.FC<DewarDetailsProps> = ({
|
||||
number_of_pucks: dewar.number_of_pucks,
|
||||
number_of_samples: dewar.number_of_samples,
|
||||
status: dewar.status,
|
||||
ready_date: formatDate(dewar.ready_date),
|
||||
shipping_date: formatDate(dewar.shipping_date),
|
||||
arrival_date: dewar.arrival_date,
|
||||
returning_date: dewar.returning_date,
|
||||
return_address_id: parseInt(selectedReturnAddress ?? '', 10),
|
||||
contact_id: parseInt(selectedContact ?? '', 10),
|
||||
};
|
||||
|
||||
await DewarsService.updateDewarDewarsDewarIdPut(dewarId, payload);
|
||||
await DewarsService.updateDewarProtectedDewarsDewarIdPut(dewarId, payload);
|
||||
setFeedbackMessage('Changes saved successfully.');
|
||||
setChangesMade(false);
|
||||
} catch (error) {
|
||||
@ -408,7 +405,7 @@ const DewarDetails: React.FC<DewarDetailsProps> = ({
|
||||
if (!dewar) return;
|
||||
|
||||
try {
|
||||
const response = await DewarsService.generateDewarQrcodeDewarsDewarIdGenerateQrcodePost(dewar.id);
|
||||
const response = await DewarsService.generateDewarQrcodeProtectedDewarsDewarIdGenerateQrcodePost(dewar.id);
|
||||
const newQrCodeValue = response.unique_id;
|
||||
setQrCodeValue(newQrCodeValue);
|
||||
setIsQRCodeGenerated(true);
|
||||
@ -426,7 +423,7 @@ const DewarDetails: React.FC<DewarDetailsProps> = ({
|
||||
if (!dewar) return;
|
||||
|
||||
try {
|
||||
const response = await DewarsService.downloadDewarLabelDewarsDewarIdDownloadLabelGet(dewar.id);
|
||||
const response = await DewarsService.downloadDewarLabelProtectedDewarsDewarIdDownloadLabelGet(dewar.id);
|
||||
|
||||
// The response object might need parsing
|
||||
const blob = new Blob([response as any], { type: 'application/pdf' });
|
||||
|
@ -19,7 +19,7 @@ const SampleSpreadsheet: React.FC<SampleSpreadsheetProps> = ({ dewarId }) => {
|
||||
|
||||
const fetchSamples = async () => {
|
||||
try {
|
||||
const response = await DewarsService.getDewarSamplesDewarsDewarsDewarIdSamplesGet(dewarId);
|
||||
const response = await DewarsService.getDewarSamplesProtectedDewarsDewarsDewarIdSamplesGet(dewarId);
|
||||
console.log("Response from backend:", response);
|
||||
const dewarData = response; // Assume response is already in correct structure
|
||||
|
||||
@ -173,7 +173,7 @@ const SampleSpreadsheet: React.FC<SampleSpreadsheetProps> = ({ dewarId }) => {
|
||||
);
|
||||
|
||||
// API call to persist changes
|
||||
await DewarsService.updateSampleDewarsSamplesSampleIdPut(Number(id), updatedSample);
|
||||
await DewarsService.updateSampleProtectedDewarsSamplesSampleIdPut(Number(id), updatedSample);
|
||||
|
||||
console.log(`Sample with ID ${id} successfully updated.`);
|
||||
} catch (error) {
|
||||
@ -237,7 +237,7 @@ const SampleSpreadsheet: React.FC<SampleSpreadsheetProps> = ({ dewarId }) => {
|
||||
);
|
||||
|
||||
// Send the payload to the backend
|
||||
await DewarsService.updateSampleDewarsSamplesSampleIdPut(Number(newRow.id), payload);
|
||||
await DewarsService.updateSampleProtectedDewarsSamplesSampleIdPut(Number(newRow.id), payload);
|
||||
|
||||
console.log(`Successfully updated sample with ID ${newRow.id}.`);
|
||||
return payload; // Return the updated row
|
||||
|
@ -48,11 +48,6 @@ const ShipmentDetails: React.FC<ShipmentDetailsProps> = ({
|
||||
tracking_number: '',
|
||||
number_of_pucks: 0,
|
||||
number_of_samples: 0,
|
||||
status: 'In preparation',
|
||||
ready_date: null,
|
||||
shipping_date: null,
|
||||
arrival_date: null,
|
||||
returning_date: null,
|
||||
contact_id: selectedShipment?.contact?.id,
|
||||
return_address_id: selectedShipment?.return_address?.id,
|
||||
};
|
||||
@ -126,16 +121,18 @@ const ShipmentDetails: React.FC<ShipmentDetailsProps> = ({
|
||||
const newDewarToPost: Dewar = {
|
||||
...initialNewDewarState,
|
||||
...newDewar,
|
||||
pgroups:activePgroup,
|
||||
dewar_name: newDewar.dewar_name.trim(),
|
||||
contact_id: selectedShipment?.contact?.id,
|
||||
return_address_id: selectedShipment?.return_address?.id
|
||||
return_address_id: selectedShipment?.return_address?.id,
|
||||
status: 'active',
|
||||
} as Dewar;
|
||||
|
||||
if (!newDewarToPost.dewar_name || !newDewarToPost.status) {
|
||||
throw new Error('Missing required fields');
|
||||
}
|
||||
|
||||
const createdDewar = await DewarsService.createOrUpdateDewarDewarsPost(selectedShipment.id, newDewarToPost);
|
||||
const createdDewar = await DewarsService.createOrUpdateDewarProtectedDewarsPost(selectedShipment.id, newDewarToPost);
|
||||
|
||||
if (createdDewar && selectedShipment) {
|
||||
const updatedShipment = await ShipmentsService.addDewarToShipmentProtectedShipmentsShipmentIdAddDewarPost(selectedShipment.id, createdDewar.id);
|
||||
|
@ -197,6 +197,7 @@ const ShipmentPanel: React.FC<ShipmentPanelProps> = ({
|
||||
);
|
||||
})}
|
||||
<UploadDialog
|
||||
activePgroup={activePgroup}
|
||||
open={uploadDialogOpen}
|
||||
onClose={closeUploadDialog}
|
||||
selectedShipment={selectedShipment}
|
||||
|
@ -31,6 +31,7 @@ const SpreadsheetTable = ({
|
||||
fileBlob,
|
||||
selectedShipment,
|
||||
addinfo,
|
||||
activePgroup,
|
||||
}) => {
|
||||
const [localErrors, setLocalErrors] = useState(errors || []);
|
||||
const [editingCell, setEditingCell] = useState({});
|
||||
@ -59,17 +60,14 @@ const SpreadsheetTable = ({
|
||||
console.log("Addinfo:", addinfo);
|
||||
}, [correctionMetadata, addinfo]);
|
||||
const initialNewDewarState = {
|
||||
pgroups: activePgroup,
|
||||
number_of_pucks: 0,
|
||||
number_of_samples: 0,
|
||||
ready_date: null,
|
||||
shipping_date: null,
|
||||
arrival_date: null,
|
||||
returning_date: null,
|
||||
contact_id: selectedShipment?.contact?.id,
|
||||
return_address_id: selectedShipment?.return_address?.id,
|
||||
dewar_name: '',
|
||||
tracking_number: 'UNKNOWN',
|
||||
status: 'In preparation',
|
||||
status: 'active',
|
||||
pucks: [] // Ensure 'pucks' array exists
|
||||
};
|
||||
|
||||
@ -242,7 +240,7 @@ const SpreadsheetTable = ({
|
||||
|
||||
try {
|
||||
// Fetch dewars related to the current shipment via API
|
||||
const shipDewars = await ShipmentsService.getDewarsByShipmentIdShipmentsShipmentIdDewarsGet(selectedShipment.id);
|
||||
const shipDewars = await ShipmentsService.getDewarsByShipmentIdProtectedShipmentsShipmentIdDewarsGet(selectedShipment.id);
|
||||
|
||||
// Search for dewar by name within the shipment
|
||||
const existingDewar = shipDewars.find((d) => d.dewar_name === dewarName);
|
||||
@ -258,8 +256,8 @@ const SpreadsheetTable = ({
|
||||
}
|
||||
};
|
||||
|
||||
const createOrUpdateDewarsFromSheet = async (data, contactPerson, returnAddress) => {
|
||||
if (!contact?.id || !returnAddress?.id) {
|
||||
const createOrUpdateDewarsFromSheet = async (data, contact, address) => {
|
||||
if (!contact?.id || !address?.id) {
|
||||
console.error('contact_id or return_address_id is missing');
|
||||
return null;
|
||||
}
|
||||
@ -287,9 +285,10 @@ const SpreadsheetTable = ({
|
||||
// Initialize new dewar object
|
||||
dewar = {
|
||||
...initialNewDewarState,
|
||||
pgroups: activePgroup,
|
||||
dewar_name: dewarName,
|
||||
contact_id: contactPerson.id,
|
||||
return_address_id: returnAddress.id,
|
||||
contact_id: contact.id,
|
||||
return_address_id: address.id,
|
||||
pucks: [],
|
||||
};
|
||||
dewars.set(dewarName, dewar);
|
||||
@ -442,7 +441,7 @@ const SpreadsheetTable = ({
|
||||
const { number_of_pucks, number_of_samples, ...payload } = dewar;
|
||||
|
||||
// Attempt to create or update a dewar
|
||||
await DewarsService.createOrUpdateDewarDewarsPost(selectedShipment.id, payload);
|
||||
await DewarsService.createOrUpdateDewarProtectedDewarsPost(selectedShipment.id, payload);
|
||||
|
||||
console.log(`Dewar "${dewar.dewar_name}" created/updated successfully.`);
|
||||
} catch (error: any) {
|
||||
|
@ -12,12 +12,13 @@ import SpreadsheetTable from './SpreadsheetTable';
|
||||
import Modal from './Modal';
|
||||
|
||||
interface UploadDialogProps {
|
||||
activePgroup: string;
|
||||
open: boolean;
|
||||
onClose: () => void;
|
||||
selectedShipment: any;
|
||||
}
|
||||
|
||||
const UploadDialog: React.FC<UploadDialogProps> = ({ open, onClose, selectedShipment }) => {
|
||||
const UploadDialog: React.FC<UploadDialogProps> = ({ open, onClose, selectedShipment, activePgroup }) => {
|
||||
const [uploadError, setUploadError] = useState<string | null>(null);
|
||||
const [fileSummary, setFileSummary] = useState<any>(null);
|
||||
const [fileBlob, setFileBlob] = useState<Blob | null>(null);
|
||||
@ -180,6 +181,7 @@ const UploadDialog: React.FC<UploadDialogProps> = ({ open, onClose, selectedShip
|
||||
onCancel={handleCancel}
|
||||
fileBlob={fileBlob}
|
||||
selectedShipment={selectedShipment}
|
||||
activePgroup={activePgroup}
|
||||
addinfo={fileSummary.addinfo}
|
||||
/>
|
||||
</Modal>
|
||||
|
Reference in New Issue
Block a user