create new componnt ReprintPDFDataShare

This commit is contained in:
Srinath 2026-02-16 14:32:51 +05:30
parent ede0fce223
commit 578f27337a
1 changed files with 281 additions and 0 deletions

View File

@ -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 (
<div>
<Messages
messageType={messageType}
messageData={messageData}
onComplete={onComplete}
/>
<Modal
title="Invoice Send"
open={open}
onCancel={onClose}
footer={null}
>
<>
<div style={{ display: 'flex', gap: '1rem', alignItems: "center" }}>
<div>
<RangePicker
placeholder={['Start Date', 'End Date']}
format="YYYY-MM-DD"
onChange={handleDateChange}
/>
</div>
<div>
<Buttons
buttonText="Invoice Pdf"
color="901D77"
handleSubmit={pdfPast}
disabled={!reprintData || reprintData.length === 0 || isFetching}
/>
</div>
</div>
{isEmail && <div style={{ display: 'flex', gap: '1rem', alignItems: "center", marginTop: '1rem' }}>
<input
type="email"
placeholder="Enter email address"
value={emailId}
onChange={(e) => setEmailId(e.target.value)}
style={{ flex: 1, padding: '8px', borderRadius: '4px', border: '1px solid #d9d9d9' }}
/>
<Buttons
buttonText="Send Email"
color="901D77"
handleSubmit={() => SendToEmailLink()}
/>
</div>}
{pdfUrl && (
<div
style={{
display: 'flex',
justifyContent: 'space-between',
alignItems: 'center',
marginBottom: '10px',
margin: '20px 0px'
}}
>
<div className="action-icons-reprint">
<FaDownload
onClick={handleDownload}
className="icon-download"
style={{ cursor: 'pointer' }}
/>
<MdEmail onClick={() => setIsEmail(prev => !prev)} className="icon-email" style={{ cursor: 'pointer' }} />
<FaWhatsapp
onClick={handleWhatsAppClick}
className="icon-whatsapp"
style={{ cursor: 'pointer' }}
/>
</div>
</div>
)}
<PdfProcessingProgress
progress={processingProgress}
isProcessing={isProcessing}
/>
</>
</Modal>
<div style={{ display: 'none' }}>
{reprintData?.map((orderDetail, index) => (
<div key={index} id={`RePrint-${index}`}>
<PaymentPdfBooking
index={index}
table2Data={orderDetail}
singleData2={orderDetail?.productDetails}
ReprintType={isDuplicate}
orderId={
orderDetail?.OrderId &&
extractLastNumberOrderId(
orderDetail?.OrderId,
orderDetail?.FYStatus
)
}
CreatedDate={orderDetail?.CreatedDate}
PaymentStatus={orderDetail?.OrderPaymentDtl}
Preference={SettingDataSelector}
printDatas={printDatas}
/>
</div>
))}
</div>
</div>
)
}
export default ReprintPDFDataShare;