diff --git a/src/Pages/BookingScreen/Components/OtherConponents/Reprint/ReprintPDFDataShare.jsx b/src/Pages/BookingScreen/Components/OtherConponents/Reprint/ReprintPDFDataShare.jsx new file mode 100644 index 0000000..d36f282 --- /dev/null +++ b/src/Pages/BookingScreen/Components/OtherConponents/Reprint/ReprintPDFDataShare.jsx @@ -0,0 +1,281 @@ +import { FaDownload, FaWhatsapp } from "react-icons/fa"; +import { extractLastNumberOrderId, getSession } from "../../../../../Services/Others"; +import { useDispatch } from "react-redux"; +import { useCallback, useState } from "react"; +import { DatePicker, Modal } from "antd"; +import { ReprintDetails } from "../../../../../Features/BookingScreen/Customer/addCustomer"; +import Buttons from "../../../../../Components/Forms/Buttons"; +import { MobileMultiPdfPrint, PdfProcessingProgress } from "../../BookingFunctionality/MobileMultiPdfPrint"; +import PaymentPdfBooking from "../../../../paymentpdfPage/PaymentPdfBooking"; +import { MdEmail } from "react-icons/md"; +import { uploadImage } from "../../../../../Features/upload/upload"; +import { SelfBookingEmailSendLink } from "../../../../../Features/ConfigMasterPage/ConfigMasterPage"; +import { Messages } from "../../../../../Components/Notifications/Messages"; +const { RangePicker } = DatePicker; +const uploadApiUrl = import.meta.env.ENV_IMAGE_UPLOAD_API_URL; + +const ReprintPDFDataShare = ({ printDatas, printerTemplateStyle, SettingDataSelector, open = false, onClose = () => { } }) => { + const dispatch = useDispatch(); + const CompId = getSession('CompId'); + const BranchId = getSession('BranchId'); + const AppId = getSession('AppId'); + const UserId = getSession('UserId'); + + const [dateStrings, setDateStrings] = useState([]); + const [type, setType] = useState("Sales"); + const [reprintData, setReprintData] = useState(); + const [isProcessing, setIsProcessing] = useState(false); + const [processingProgress, setProcessingProgress] = useState(0); + const [isDuplicate, setIsDuplicate] = useState('Original'); + const [emailId, setEmailId] = useState(''); + const [isEmail, setIsEmail] = useState(false); + const [pdfUrl, setPdfUrl] = useState(false); + const [messageType, setMessageType] = useState(null); + const [messageData, setMessageData] = useState(null); + const [isFetching, setIsFetching] = useState(false); + + const handleDateChange = (dateStrings) => { + if (dateStrings[0] && dateStrings[1]) { + setDateStrings(dateStrings); + fetchData(dateStrings); + } + }; + + const fetchData = async (dates = dateStrings) => { + setIsFetching(true); + try { + const Response = await dispatch(ReprintDetails({ + CompId, + BranchId, + AppId, + OrderFromDate: dates?.[0] ?? '', + OrderToDate: dates?.[1] ?? '', + Type: type + })).unwrap(); + if (Response?.data?.statusCode === 1) { + setReprintData(Response?.data?.data); + } else { + setReprintData(null); + } + } finally { + setIsFetching(false); + } + }; + + const pdfPast = async () => { + if (printerTemplateStyle !== "TaxInvoice") { + setMessageType("error"); + setMessageData("Please select invoice print style"); + return; + } + + if (!reprintData || reprintData.length === 0) { + return; + } + try { + setIsProcessing(true); + setProcessingProgress(0); + const result = await MobileMultiPdfPrint({ + printerTemplateStyle, + printDatas, + PrintOrderDetails: reprintData, + setPrintOrderDetails: setReprintData, + PrintComing: 'download', + UserId: UserId, + dispatch, + onProgress: (progress) => setProcessingProgress(progress), + returnBlob: true + }); + + if (result?.pdfBlob) { + const file = new File([result.pdfBlob], 'invoices.pdf', { type: 'application/pdf' }); + const uploadImgData = await dispatch(uploadImage(file)).unwrap(); + if (uploadImgData?.data?.status) { + const imageUrl = uploadImgData?.data?.image; + const urlObj = new URL(imageUrl); + const fileName = urlObj.searchParams.get("fileId"); + const downloadUrl = `${uploadApiUrl}/upload/DownloadFile?fileId=${fileName}`; + setPdfUrl(downloadUrl); + } else { + setMessageType("error"); + setMessageData("Failed to upload PDF"); + } + } + } catch (error) { + setMessageType("error"); + setMessageData("Error processing PDF"); + } finally { + setIsProcessing(false); + } + }; + const handleDownload = () => { + if (pdfUrl) { + window.open(pdfUrl, '_blank'); + } + }; + const SendToEmailLink = async () => { + if (!emailId) { + setMessageType("error"); + setMessageData("Please enter a recipient email."); + return; + } + const data = { + toEmail: emailId, + type: 'M', + HeaderType:'invoice attached', + fileUrl: pdfUrl, + }; + + try { + const res = await dispatch(SelfBookingEmailSendLink(data)).unwrap(); + setMessageType("success"); + setMessageData(res.data?.response); + clearAndClose(); + } catch (err) { + console.error("Error sending Email:", err); + setMessageType("error"); + setMessageData("Failed to send email. Please try again."); + } + }; + + const handleWhatsAppClick = () => { + window.open(whatsappShareUrl, '_blank'); + clearAndClose(); + }; + + const clearAndClose = () => { + setDateStrings([]); + setReprintData(null); + setPdfUrl(false); + setEmailId(''); + setIsEmail(false); + onClose(); + setDateStrings([]); + }; + const message = ` +Please find your complete bill invoice attached in the link below: +${pdfUrl} + +Kindly review the details and keep this invoice for your records. + +Thank you for choosing us!`; + + const whatsappShareUrl = `https://wa.me/?text=${encodeURIComponent(message)}`; + + const onComplete = useCallback(() => { + setMessageData(null); + setMessageType(null); + }, []); + return ( +