diff --git a/src/features/cashier-dashboard/components/cashier_dashboard_payement_sidebar/PaymentDrawer.tsx b/src/features/cashier-dashboard/components/cashier_dashboard_payement_sidebar/PaymentDrawer.tsx index f0ab5a7..dae0cd2 100644 --- a/src/features/cashier-dashboard/components/cashier_dashboard_payement_sidebar/PaymentDrawer.tsx +++ b/src/features/cashier-dashboard/components/cashier_dashboard_payement_sidebar/PaymentDrawer.tsx @@ -54,7 +54,7 @@ const PaymentDrawer = () => { }; return ( -
+

Order Payment

@@ -116,7 +116,7 @@ const PaymentDrawer = () => { Input Amount { />
- + {/* */} {/* Three buttons for receipt email and done */}
- } text='Receipt' @@ -145,7 +145,7 @@ const PaymentDrawer = () => { onClick={footerButtonClick} icon={} text='Email' - /> + /> */} } diff --git a/src/features/cashier-dashboard/components/cashier_dashboard_payment_confirm_popup/ConfirmPaymentPopUp.tsx b/src/features/cashier-dashboard/components/cashier_dashboard_payment_confirm_popup/ConfirmPaymentPopUp.tsx index 07f792b..7ac61c9 100644 --- a/src/features/cashier-dashboard/components/cashier_dashboard_payment_confirm_popup/ConfirmPaymentPopUp.tsx +++ b/src/features/cashier-dashboard/components/cashier_dashboard_payment_confirm_popup/ConfirmPaymentPopUp.tsx @@ -131,7 +131,7 @@ const ConfirmPaymentPopUp = () => { className='signup_button w-28 rounded-full' onClick={confirmClick} > - Pay + {loading ? 'Wait...' : 'Pay'} ) } diff --git a/src/features/cashier-dashboard/components/first-aid-table/FirstAidTable.tsx b/src/features/cashier-dashboard/components/first-aid-table/FirstAidTable.tsx index 44cb006..d130801 100644 --- a/src/features/cashier-dashboard/components/first-aid-table/FirstAidTable.tsx +++ b/src/features/cashier-dashboard/components/first-aid-table/FirstAidTable.tsx @@ -10,8 +10,13 @@ type Props = {}; const FirstAidTable = (props: Props) => { const { orderedMedicine, setOrderedMedicine } = usePaymentContext(); - const [medicine, setMedicine] = useState([]); - const { items, getAllItems } = useItemService(); + const { + items, + getAllItems, + medicine, + filteredMedicine, + setFilteredMedicine, + } = useItemService(); //function to add medicine to ordered medicine const handleAddClick = (medicine: MedicineType) => { @@ -28,19 +33,19 @@ const FirstAidTable = (props: Props) => { }; console.log(items); - const fetchMedicine = async () => { - const allItems = await getAllItems(); - //filter only personal care - const medicine = allItems.filter( - (item: IMedicine) => item.category === 'FirstAid' - ); - setMedicine(medicine); - }; + // const fetchMedicine = async () => { + // const allItems = await getAllItems(); + // //filter only personal care + // const medicine = allItems.filter( + // (item: IMedicine) => item.category === 'FirstAid' + // ); + // setMedicine(medicine); + // }; // useEffect(() => { //fetchMedicine from server - fetchMedicine(); + // getAllItems(); }, []); // diff --git a/src/features/cashier-dashboard/components/medical-device-table/MedicalDeviceTable.tsx b/src/features/cashier-dashboard/components/medical-device-table/MedicalDeviceTable.tsx index 4b61e1b..9be912e 100644 --- a/src/features/cashier-dashboard/components/medical-device-table/MedicalDeviceTable.tsx +++ b/src/features/cashier-dashboard/components/medical-device-table/MedicalDeviceTable.tsx @@ -8,8 +8,7 @@ import useItemService from '../../services/ItemService'; const MedicalDeviceTable = () => { const { orderedMedicine, setOrderedMedicine } = usePaymentContext(); - const [medicine, setMedicine] = useState([]); - const { getAllItems } = useItemService(); + const { getAllItems, medicine, filteredMedicine } = useItemService(); //function to add medicine to ordered medicine const handleAddClick = (medicine: MedicineType) => { @@ -25,18 +24,18 @@ const MedicalDeviceTable = () => { ]); }; - const fetchMedicine = async () => { - const allItems = await getAllItems(); - //filter only personal care - const medicine = allItems.filter( - (item: IMedicine) => item.category === 'Medical Devices' - ); - setMedicine(medicine); - }; + // const fetchMedicine = async () => { + // const allItems = await getAllItems(); + // //filter only personal care + // const medicine = allItems.filter( + // (item: IMedicine) => item.category === 'Medical Devices' + // ); + // setMedicine(medicine); + // }; // useEffect(() => { //fetchMedicine from server - fetchMedicine(); + // fetchMedicine(); }, []); // diff --git a/src/features/cashier-dashboard/components/medicine-table/Medicine.tsx b/src/features/cashier-dashboard/components/medicine-table/Medicine.tsx index b91167a..6e1611c 100644 --- a/src/features/cashier-dashboard/components/medicine-table/Medicine.tsx +++ b/src/features/cashier-dashboard/components/medicine-table/Medicine.tsx @@ -7,11 +7,16 @@ import useItemService from '../../services/ItemService'; const Medicine = () => { const { orderedMedicine, setOrderedMedicine } = usePaymentContext(); - const [loading, setLoading] = useState(true); - const { getAllItems } = useItemService(); + const { + getAllItems, + medicine, + filteredMedicine, + setFilteredMedicine, + loading, + } = useItemService(); - const { setMedicine, medicine, setFilteredMedicine, filteredMedicine } = - usePaymentContext(); + // const { setMedicine, medicine, setFilteredMedicine, filteredMedicine } = + // usePaymentContext(); //function to add medicine to ordered medicine const handleAddClick = (medicine: MedicineType) => { @@ -27,21 +32,9 @@ const Medicine = () => { ]); }; - const fetchMedicine = async () => { - try { - const medicineData = await getAllItems(); - setMedicine(medicineData); - setFilteredMedicine(medicineData); - setLoading(false); - } catch (error) { - console.error('Error fetching medicine data:', error); - } - }; - - // useEffect(() => { //fetchMedicine from server - fetchMedicine(); + getAllItems(); }, []); // @@ -85,13 +78,17 @@ const Medicine = () => { {cashier.name} {cashier.price} - {cashier.quantity} + + {cashier.quantity < 0 ? 0 : cashier.quantity} + {cashier.status} - handleAddClick(cashier)} - icon={} - /> + {cashier.quantity > 0 && ( + handleAddClick(cashier)} + icon={} + /> + )} ))} diff --git a/src/features/cashier-dashboard/components/nutrition-table/NutritionTable.tsx b/src/features/cashier-dashboard/components/nutrition-table/NutritionTable.tsx index e897bca..1e3074d 100644 --- a/src/features/cashier-dashboard/components/nutrition-table/NutritionTable.tsx +++ b/src/features/cashier-dashboard/components/nutrition-table/NutritionTable.tsx @@ -8,9 +8,8 @@ import useItemService from '../../services/ItemService'; const NutritionTable = () => { const { orderedMedicine, setOrderedMedicine } = usePaymentContext(); - const [medicine, setMedicine] = useState([]); - const { getAllItems } = useItemService(); + const { getAllItems, medicine, filteredMedicine } = useItemService(); //function to add medicine to ordered medicine const handleAddClick = (medicine: MedicineType) => { @@ -26,19 +25,19 @@ const NutritionTable = () => { ]); }; - const fetchMedicine = async () => { - const allItems = await getAllItems(); - //filter only personal care - const medicine = allItems.filter( - (item: IMedicine) => item.category === 'Nutrition' - ); - setMedicine(medicine); - }; + // const fetchMedicine = async () => { + // const allItems = await getAllItems(); + // //filter only personal care + // const medicine = allItems.filter( + // (item: IMedicine) => item.category === 'Nutrition' + // ); + // setMedicine(medicine); + // }; // useEffect(() => { //fetchMedicine from server - fetchMedicine(); + // fetchMedicine(); }, []); // diff --git a/src/features/cashier-dashboard/components/order-details/MedicineGrid.tsx b/src/features/cashier-dashboard/components/order-details/MedicineGrid.tsx index db6b192..bd3b67b 100644 --- a/src/features/cashier-dashboard/components/order-details/MedicineGrid.tsx +++ b/src/features/cashier-dashboard/components/order-details/MedicineGrid.tsx @@ -20,6 +20,8 @@ const MedicineGrid = () => { const handleAddAmount = (index: number) => { const updatedMedicines = [...orderedMedicine]; + console.log(updatedMedicines); + console.log(filteredMedicine); if (updatedMedicines[index].availableQuantity > 0) { updatedMedicines[index].amount += 1; @@ -147,7 +149,7 @@ const MedicineGrid = () => { Total Amount - {totalAmount} + {totalAmount.toFixed(2)} @@ -167,7 +169,7 @@ const MedicineGrid = () => { After Discount - {discountedTotal} + {discountedTotal.toFixed(2)} diff --git a/src/features/cashier-dashboard/components/personal-care-table/PersonalCareTable.tsx b/src/features/cashier-dashboard/components/personal-care-table/PersonalCareTable.tsx index 9ab7c34..a42c539 100644 --- a/src/features/cashier-dashboard/components/personal-care-table/PersonalCareTable.tsx +++ b/src/features/cashier-dashboard/components/personal-care-table/PersonalCareTable.tsx @@ -8,8 +8,7 @@ import useItemService from '../../services/ItemService'; const PersonalCareTable = () => { const { orderedMedicine, setOrderedMedicine } = usePaymentContext(); - const [medicine, setMedicine] = useState([]); - const { getAllItems } = useItemService(); + const { getAllItems, medicine, filteredMedicine } = useItemService(); //function to add medicine to ordered medicine const handleAddClick = (medicine: MedicineType) => { @@ -25,20 +24,20 @@ const PersonalCareTable = () => { ]); }; - const fetchMedicine = async () => { - const allItems = await getAllItems(); - //filter only personal care - const medicine = allItems.filter( - (item: IMedicine) => item.category === 'Personal Care' - ); - setMedicine(medicine); - }; + // const fetchMedicine = async () => { + // const allItems = await getAllItems(); + // //filter only personal care + // const medicine = allItems.filter( + // (item: IMedicine) => item.category === 'Personal Care' + // ); + // setMedicine(medicine); + // }; // useEffect(() => { //fetchMedicine from server - console.log('fetching medicine'); - fetchMedicine(); + // console.log('fetching medicine'); + // fetchMedicine(); }, []); // diff --git a/src/features/cashier-dashboard/components/sports-table/SportsTable.tsx b/src/features/cashier-dashboard/components/sports-table/SportsTable.tsx index 54e0f30..6737c4b 100644 --- a/src/features/cashier-dashboard/components/sports-table/SportsTable.tsx +++ b/src/features/cashier-dashboard/components/sports-table/SportsTable.tsx @@ -8,8 +8,7 @@ import useItemService from '../../services/ItemService'; const SportsTable = () => { const { orderedMedicine, setOrderedMedicine } = usePaymentContext(); - const [medicine, setMedicine] = useState([]); - const { getAllItems } = useItemService(); + const { getAllItems, medicine, filteredMedicine } = useItemService(); //function to add medicine to ordered medicine const handleAddClick = (medicine: MedicineType) => { @@ -25,19 +24,19 @@ const SportsTable = () => { ]); }; - const fetchMedicine = async () => { - const allItems = await getAllItems(); - //filter only personal care - const medicine = allItems.filter( - (item: IMedicine) => item.category === 'Sports' - ); - setMedicine(medicine); - }; + // const fetchMedicine = async () => { + // const allItems = await getAllItems(); + // //filter only personal care + // const medicine = allItems.filter( + // (item: IMedicine) => item.category === 'Sports' + // ); + // setMedicine(medicine); + // }; // useEffect(() => { //fetchMedicine from server - fetchMedicine(); + // fetchMedicine(); }, []); // diff --git a/src/features/cashier-dashboard/services/ItemService.ts b/src/features/cashier-dashboard/services/ItemService.ts index 2497cb9..19a9662 100644 --- a/src/features/cashier-dashboard/services/ItemService.ts +++ b/src/features/cashier-dashboard/services/ItemService.ts @@ -1,22 +1,61 @@ import { useEffect, useState } from 'react'; import useAxiosInstance from '../../login/services/useAxiosInstance'; import { mapIItemsToIMedicine } from '../utils/mapIItemsToIMedicine'; +import { useUserContext } from '../../../context/UserContext'; +import { toast } from 'react-toastify'; +import { IMedicine } from '../../../interfaces/IMedicine'; +import { usePaymentContext } from '../layout/MainCashierDashboard'; const useItemService = () => { const http = useAxiosInstance(); const [items, setItems] = useState([]); + // const getAllItems = async () => { + // try { + // const res = await http.get('/item/get-all-items'); + // const data = res.data.data; + // if (data.length === 0) return []; + // const mappedItems = data.map((item: any) => mapIItemsToIMedicine(item)); + // setItems(mappedItems); + // console.log(res); + // return mappedItems; + // } catch (error) { + // console.log(error); + // return []; + // } + // }; + const user = useUserContext(); + // const [medicine, setMedicine] = useState([]); + // const [filteredMedicine, setFilteredMedicine] = useState([]); + const [loading, setLoading] = useState(false); + + const { setMedicine, medicine, setFilteredMedicine, filteredMedicine } = + usePaymentContext(); + const getAllItems = async () => { try { - const res = await http.get('/item/get-all-items'); + if (!user) { + toast.error('Not logged in'); + return; + } + setLoading(true); + const res = await http.get( + `/item/branched/get-item/${user.user?.branchId}` + // `/item/branched/get-item/1` + ); const data = res.data.data; if (data.length === 0) return []; const mappedItems = data.map((item: any) => mapIItemsToIMedicine(item)); setItems(mappedItems); + console.log(res); + setMedicine(mappedItems); + setFilteredMedicine(mappedItems); return mappedItems; } catch (error) { console.log(error); return []; + } finally { + setLoading(false); } }; @@ -32,11 +71,15 @@ const useItemService = () => { } }; - useEffect(() => { - getAllItems(); - }); // Fetch items when component mounts - - return { items, getAllItems, getItemById }; + return { + items, + getAllItems, + getItemById, + medicine, + filteredMedicine, + setFilteredMedicine, + loading, + }; }; export default useItemService; diff --git a/src/features/cashier-dashboard/services/OrderService.ts b/src/features/cashier-dashboard/services/OrderService.ts index c3c76dd..27dfe52 100644 --- a/src/features/cashier-dashboard/services/OrderService.ts +++ b/src/features/cashier-dashboard/services/OrderService.ts @@ -34,7 +34,6 @@ const useOrderService = () => { paymentDetails: paymentDetails, }); console.log(res); - setLoading(false); // Display success toast toast.success('Order placed successfully!'); @@ -43,10 +42,11 @@ const useOrderService = () => { return res.data; } catch (error) { console.log(error); - setLoading(false); toast.error('Error with the server: ' + (error as Error).message); return error; + } finally { + setLoading(false); } }; diff --git a/src/features/cashier-dashboard/utils/mapIItemsToIMedicine.ts b/src/features/cashier-dashboard/utils/mapIItemsToIMedicine.ts index 987e3c7..e5e725f 100644 --- a/src/features/cashier-dashboard/utils/mapIItemsToIMedicine.ts +++ b/src/features/cashier-dashboard/utils/mapIItemsToIMedicine.ts @@ -9,6 +9,6 @@ export const mapIItemsToIMedicine = (item: IItemInterface): IMedicine => { quantity: item.itemQuantity, status: item.itemQuantity > 0 ? 'In Stock' : 'Out of Stock', image: item.itemImage, - category: item.itemCategory, + category: item.itemCategoryName, }; }; diff --git a/src/features/items-management/layout/AddItems.tsx b/src/features/items-management/layout/AddItems.tsx index 94865fa..00e83f6 100644 --- a/src/features/items-management/layout/AddItems.tsx +++ b/src/features/items-management/layout/AddItems.tsx @@ -5,9 +5,9 @@ import { Link } from 'react-router-dom'; import useItemService from '../services/ItemDetailsCRUDService'; const AddItems = () => { - const [previewImage, setPreviewImage] = useState(null); // const navigate = useNavigate(); - const { item, setItem, preSet, creating } = useItemService(); + const { item, setItem, preSet, creating, itemImage, setItemImage } = + useItemService(); const handleImageChange = (e: ChangeEvent) => { const file: File | null = e.target.files ? e.target.files[0] : null; @@ -15,11 +15,7 @@ const AddItems = () => { const reader = new FileReader(); reader.onloadend = () => { if (typeof reader.result === 'string') { - setPreviewImage(reader.result); - setItem({ - ...item, - itemImage: reader.result, - }); + setItemImage(file); } }; reader.readAsDataURL(file); @@ -62,10 +58,10 @@ const AddItems = () => {

- {previewImage ? ( + {itemImage ? (
Preview @@ -84,8 +80,9 @@ const AddItems = () => { Select an image
@@ -140,7 +137,9 @@ const AddItems = () => { onChange={(e) => { setItem({ ...item, - supplyDate: new Date(e.target.value).toISOString(), + supplyDate: new Date(e.target.value) + .toISOString() + .slice(0, 10), }); }} /> @@ -251,7 +250,9 @@ const AddItems = () => { onChange={(e) => { setItem({ ...item, - manufactureDate: new Date(e.target.value).toISOString(), + manufactureDate: new Date(e.target.value) + .toISOString() + .slice(0, 10), }); }} /> @@ -269,7 +270,9 @@ const AddItems = () => { onChange={(e) => { setItem({ ...item, - expireDate: new Date(e.target.value).toISOString(), + expireDate: new Date(e.target.value) + .toISOString() + .slice(0, 10), }); }} /> @@ -287,7 +290,9 @@ const AddItems = () => { onChange={(e) => { setItem({ ...item, - purchaseDate: new Date(e.target.value).toISOString(), + purchaseDate: new Date(e.target.value) + .toISOString() + .slice(0, 10), }); }} /> diff --git a/src/features/items-management/layout/UpdateItems.tsx b/src/features/items-management/layout/UpdateItems.tsx index ed7947b..c7e4879 100644 --- a/src/features/items-management/layout/UpdateItems.tsx +++ b/src/features/items-management/layout/UpdateItems.tsx @@ -3,23 +3,30 @@ import { IoCloudUploadOutline } from 'react-icons/io5'; import { useNavigate, Link, useParams } from 'react-router-dom'; import CashierManagerNavBar from '../../cashier-management/components/navbar/CashierManagerNavBar'; import useItemUpdateService from '../services/ItemUpdateService'; +import useItemService from '../services/ItemDetailsCRUDService'; +import Loader from '../../../shared/loader/Loader'; const UpdateItems = () => { - const [previewImage, setPreviewImage] = useState(null); - // const navigate = useNavigate(); const { itemId } = useParams(); + const { + itemString, + fetchItemImage, + fetchItemString, + itemImage, + setItemImage, + updatingItemImage, + updateItemImage, + } = useItemService(); + const [updateImage, setUpdateImage] = useState(false); const handleImageChange = (e: ChangeEvent) => { const file: File | null = e.target.files ? e.target.files[0] : null; if (file) { const reader = new FileReader(); reader.onloadend = () => { if (typeof reader.result === 'string') { - setPreviewImage(reader.result); - setItem({ - ...item, - itemImage: reader.result, - }); + setItemImage(file); + setUpdateImage(true); } }; reader.readAsDataURL(file); @@ -38,6 +45,7 @@ const UpdateItems = () => { useEffect(() => { if (itemId) { fetchItemById(parseInt(itemId)); + fetchItemImage(itemId); } }, [itemId]); @@ -50,23 +58,23 @@ const UpdateItems = () => {

- {previewImage ? ( -
+
+ {fetchItemString ? ( + + ) : updateImage ? ( Preview -
- ) : ( -
+ ) : ( Preview -
- )} + )} +
+
{/* First Column */}
@@ -105,9 +121,10 @@ const UpdateItems = () => { Selling Price { setItem({ @@ -143,10 +160,11 @@ const UpdateItems = () => { Supplier Price { setItem({ ...item, diff --git a/src/features/items-management/layout/ViewItem.tsx b/src/features/items-management/layout/ViewItem.tsx index f8d5256..a563a46 100644 --- a/src/features/items-management/layout/ViewItem.tsx +++ b/src/features/items-management/layout/ViewItem.tsx @@ -2,14 +2,17 @@ import React, { useEffect } from 'react'; import { Link, useParams } from 'react-router-dom'; import useItemUpdateService from '../services/ItemUpdateService'; import CashierManagerNavBar from '../../cashier-management/components/navbar/CashierManagerNavBar'; +import useItemService from '../services/ItemDetailsCRUDService'; function ViewItem() { const { itemId } = useParams(); const { fetchItemById, itemDetails } = useItemUpdateService(); + const { itemString, fetchItemImage, fetchItemString } = useItemService(); useEffect(() => { if (itemId) { fetchItemById(parseInt(itemId)); + fetchItemImage(itemId); } }, []); @@ -24,7 +27,7 @@ function ViewItem() { {/* Image Column */}
{itemDetails.itemName diff --git a/src/features/items-management/services/ItemDetailsCRUDService.tsx b/src/features/items-management/services/ItemDetailsCRUDService.tsx index 11542f5..a9f7705 100644 --- a/src/features/items-management/services/ItemDetailsCRUDService.tsx +++ b/src/features/items-management/services/ItemDetailsCRUDService.tsx @@ -93,8 +93,84 @@ const useItemService = () => { } }, [shouldCreate]); + // const createItem = async () => { + // console.log('createItem', item); + // setCreating(true); + + // if (!validateItem(item)) { + // setCreating(false); + // return; + // } + + // try { + // const res = await http.post('/item/save-item', item); + // if (res.data.code === 201) { + // toast.success(res.data.message); + // navigate('/manager-dashboard/Items'); + // } + // console.log(res); + // } catch (error) { + // console.log(error); + // toast.error('Could not create the item'); + // } finally { + // setCreating(false); + // } + // }; + + const [itemImage, setItemImage] = useState(); + const createItem = async () => { console.log('createItem', item); + const formData = new FormData(); + formData.append('itemName', item.itemName); + formData.append('branchId', item.branchId.toString()); + formData.append('sellingPrice', item.sellingPrice.toString()); + formData.append('itemBarCode', item.itemBarCode); + formData.append( + 'supplyDate', + item.supplyDate.toString().split('-').join('/') + ); + formData.append('supplierPrice', item.supplierPrice.toString()); + formData.append('itemManufacture', item.itemManufacture); + formData.append('itemQuantity', item.itemQuantity.toString()); + formData.append('measuringUnitType', item.measuringUnitType); + formData.append( + 'manufactureDate', + item.manufactureDate.toString().split('-').join('/') + ); + formData.append( + 'expireDate', + item.expireDate.toString().split('-').join('/') + ); + formData.append( + 'purchaseDate', + item.purchaseDate.toString().split('-').join('/') + ); + formData.append('warrantyPeriod', item.warrantyPeriod); + formData.append('rackNumber', item.rackNumber); + formData.append('discountedPrice', item.discountedPrice.toString()); + formData.append( + 'discountedPercentage', + item.discountedPercentage.toString() + ); + formData.append('warehouseName', item.warehouseName); + formData.append('itemImage', item.itemImage); + formData.append('itemDescription', item.itemDescription); + formData.append('categoryId', item.categoryId.toString()); + formData.append('supplierId', item.supplierId.toString()); + formData.append('specialCondition', item.specialCondition.toString()); + formData.append('stock', item.stock.toString()); + formData.append('discounted', item.discounted.toString()); + formData.append('freeIssued', item.freeIssued.toString()); + + if (itemImage) { + formData.append('file', itemImage, itemImage.name); + } + + for (const pair of formData.entries()) { + console.log(pair[0], pair[1]); + } + setCreating(true); if (!validateItem(item)) { @@ -103,7 +179,11 @@ const useItemService = () => { } try { - const res = await http.post('/item/save-item', item); + const res = await http.post('/item/save-item-with-image', formData, { + headers: { + 'Content-Type': 'multipart/form-data', + }, + }); if (res.data.code === 201) { toast.success(res.data.message); navigate('/manager-dashboard/Items'); @@ -151,6 +231,58 @@ const useItemService = () => { } }; + const [itemString, setItemString] = useState(); + const [fetchItemString, setFetchItemString] = useState(false); + const fetchItemImage = async (itemId: string) => { + try { + setFetchItemString(true); + const res = await http.get(`/item/view-item-image/${itemId}`, { + responseType: 'arraybuffer', // Ensure response type is set correctly + }); + const base64String = btoa( + new Uint8Array(res.data).reduce( + (data, byte) => data + String.fromCharCode(byte), + '' + ) + ); + console.log(res); + setItemString(`data:image/jpeg;base64,${base64String}`); + } catch (error) { + console.log(error); + } finally { + setFetchItemString(false); + } + }; + + const [updatingItemImage, setUpdatingItemImage] = useState(false); + const updateItemImage = async (itemId: string) => { + const itemImageFormData = new FormData(); + if (itemImage) { + itemImageFormData.append('file', itemImage, itemImage?.name); + } else { + toast.error('Image is not provided'); + return; + } + + try { + setUpdatingItemImage(true); + const res = await http.put( + `/item/update-item-image/${parseInt(itemId)}`, + itemImageFormData, + { + headers: { + 'Content-Type': 'multipart/form-data', + }, + } + ); + console.log(res); + } catch (error) { + console.log(error); + } finally { + setUpdatingItemImage(false); + } + }; + return { fetchAllItems, items, @@ -163,6 +295,13 @@ const useItemService = () => { creating, preSet, deleteItem, + setItemImage, + itemImage, + itemString, + fetchItemImage, + fetchItemString, + updatingItemImage, + updateItemImage, }; }; diff --git a/src/features/login/layout/LogInPageLayout.tsx b/src/features/login/layout/LogInPageLayout.tsx index 8286e08..ff0064d 100644 --- a/src/features/login/layout/LogInPageLayout.tsx +++ b/src/features/login/layout/LogInPageLayout.tsx @@ -10,12 +10,12 @@ const LogInPageLayout = () => { return (
-
+ {/*
-
+
*/}
); }; diff --git a/src/features/login/services/useAxiosInstance.tsx b/src/features/login/services/useAxiosInstance.tsx index e838bcd..00b603c 100644 --- a/src/features/login/services/useAxiosInstance.tsx +++ b/src/features/login/services/useAxiosInstance.tsx @@ -4,7 +4,8 @@ import { useEffect } from 'react'; const useAxiosInstance = () => { const instance = axios.create({ - baseURL: 'http://localhost:8079/lifepill/v1', + // baseURL: 'http://localhost:8079/lifepill/v1', + baseURL: 'https://3.82.134.54:8079/lifepill/v1', headers: { 'Content-type': 'application/json', }, diff --git a/src/features/manager-dashboard/components/items/ItemsManagementWindow.tsx b/src/features/manager-dashboard/components/items/ItemsManagementWindow.tsx index 1e03e22..b5599d3 100644 --- a/src/features/manager-dashboard/components/items/ItemsManagementWindow.tsx +++ b/src/features/manager-dashboard/components/items/ItemsManagementWindow.tsx @@ -91,13 +91,16 @@ const ItemsManagementWindow = () => { Medicine ID - Image + Name - Name + Selling Price (LKR) + + + Purchase Date - Price + Expire Date Status @@ -112,9 +115,21 @@ const ItemsManagementWindow = () => { {filteredItems.map((medicine) => ( {medicine.itemId} - {medicine.itemImage} {medicine.itemName} - {medicine.sellingPrice} + {medicine.sellingPrice} per {medicine.measuringUnitType} + + {medicine.purchaseDate.slice(0, 10)} + + + {medicine.expireDate.slice(0, 10)} + + {
{ return ( diff --git a/src/interfaces/IItemInterface.tsx b/src/interfaces/IItemInterface.tsx index ece5870..8356016 100644 --- a/src/interfaces/IItemInterface.tsx +++ b/src/interfaces/IItemInterface.tsx @@ -7,7 +7,7 @@ export interface IItemInterface { supplierPrice: number; itemManufacture: string; itemQuantity: number; - itemCategory: string; + itemCategoryName: string; measuringUnitType: string; manufactureDate: Date | null; // You can use Date type if you prefer expireDate: Date; // You can use Date type if you prefer diff --git a/src/shared/cashier_profile/ProfileNameCard.tsx b/src/shared/cashier_profile/ProfileNameCard.tsx index acbadda..a122eec 100644 --- a/src/shared/cashier_profile/ProfileNameCard.tsx +++ b/src/shared/cashier_profile/ProfileNameCard.tsx @@ -1,11 +1,18 @@ -import React from 'react'; +import React, { useEffect } from 'react'; import { useUserContext } from '../../context/UserContext'; +import useItemService from '../../features/items-management/services/ItemDetailsCRUDService'; type Props = {}; const ProfileNameCard = (props: Props) => { const { user } = useUserContext(); - console.log(`ProfileNameCard: ${user}`); + // console.log(`ProfileNameCard: ${user}`); + const { itemString, fetchItemImage } = useItemService(); + useEffect(() => { + if (user) { + fetchItemImage(user.employerId.toString()); + } + }, []); return (
@@ -17,7 +24,10 @@ const ProfileNameCard = (props: Props) => { {/* Image */}
Recent diff --git a/src/shared/searchbar/MedicineSearchBar.tsx b/src/shared/searchbar/MedicineSearchBar.tsx index f51d726..841781d 100644 --- a/src/shared/searchbar/MedicineSearchBar.tsx +++ b/src/shared/searchbar/MedicineSearchBar.tsx @@ -4,7 +4,7 @@ const MedicineSearchBar = () => { return (
-
+ {/*
@@ -13,7 +13,7 @@ const MedicineSearchBar = () => { type='text' id='search' placeholder='Search medicine..' - /> + /> */}
);