import { MaterialIcons } from "@expo/vector-icons"; import { shareAsync } from "expo-sharing"; import React, { useEffect, useRef, useState } from "react"; import { Dimensions, Image, Platform, ScrollView, StyleSheet, TouchableOpacity, View } from "react-native"; import { Dialog, Button, IconButton, Portal, Surface, Text, Card, Divider, DataTable, TouchableRipple, Avatar, Colors, TextInput, HelperText } from "react-native-paper"; import StepIndicator from 'react-native-step-indicator'; import { useDispatch, useSelector } from "react-redux"; import { getAllOrdersAction, getOrderdetailAction, getOrdertrackAction, OrderInvoiceAction, OrderStatusUpdateAction } from "../../state/actions/orderDetailsAction"; import { getAllUserReviewAction } from "../../state/actions/ordersAction"; import isEmpty from "../../state/validations/is-empty"; import * as Print from "expo-print"; import RenderHTML, { RenderHTMLSource } from "react-native-render-html"; import sample from '../../assets/images/img/logo/logo.png'; import Header from "../header"; import { createDelReviewRatingsAction, getAllDelReviewRatingsAction } from "../../state/actions/deliveryreviewratingsAction"; import { Rating } from "react-native-ratings"; import Modal from "react-native-modal"; import { useToast } from 'react-native-paper-toast'; // import { Document, Page } from "@react-pdf/renderer"; export default function myOrderDetails(props) { const { navigation } = props; const orderId = props?.route?.params; const dispatch = useDispatch(); const orders = props?.route?.params?.order; const windowWidth = Dimensions.get('window').width; const windowHeight = Dimensions.get('window').height; const [data, setData] = React.useState(); const [Id, setDataa] = useState() const [ordersList, setOrdersList] = React.useState(null); const [loading, setLoading] = React.useState(true); const EmailID = useSelector(state => state.auth.user?.Email_Id) const [invoiceDetails, setDetails] = useState(); const [invoiceDetailsLoading, setInvoiceDetailsLoading] = useState(false); const isAuthenticated = useSelector(state => state.auth.isAuthenticated); const toast = useToast(); let alldetails = useSelector((state) => state.orderDetail.Orderdetails.all); let allorders = useSelector((state) => state.orderDetail.Orders.all); let alltracking = useSelector((state) => state.orderDetail.Ordertrack.all); let Orders = [] if (allorders) { for (let i = 0; i < allorders.length; i++) { let data = allorders[i].Item_Data.Item_Master_Data for (let j = 0; j < data.length; j++) { Orders.push({ Order_Id: allorders[i].Order_Id, Order_Status: data[j].Order_Status, Order_Date: data[j].Order_Date, Price: data[j].Price, Payment_Status: data[j].Payment_Status, Product_Id: data[j].Product_Id, Product_Image: data[j].Product_Image, Product_Name: data[j].Product_Name, User_Email_Id: data[j].User_Email_Id, User_Address_Id: data[j].User_Address_Id, Item_Master_Id: data[j].Item_Master_Id, Is_Return_Flag: data[j].Is_Return_Flag, Partner_Name: data[j].Partner_Name, Net_Price: data[j].Net_Price } ) } } } const handleClick = async (data) => { // navigation.navigate('ProductDetails', { Product_Id: data.Product_Id}) }; const updateStates = (data, loading) => { setOrdersList(data); setLoading(loading); }; const [visible, setVisible] = React.useState(false); const hideDialog = () => setVisible(false); const [visibleone, setVisibleOne] = React.useState(false); const [dimensions, setDimensions] = React.useState(Dimensions.get('window')); const [issubmitted, setSubmit] = React.useState(false); useEffect(() => { let formData1 = { Order_Id: orders.Order_Id, Order_Status: "", Records_Filter: "FILTER", User_Email_Id: "", } let formData2 = { Records_Filter: "FILTER", User_Address_Id: orders?.User_Address_Id } dispatch(getOrderdetailAction(formData2)); dispatch(getAllOrdersAction(formData1)); }, []); const cancelhandleClick = (data) => { let updateData = { Item_Master_Id: data.Item_Master_Id, Order_Id: data.Order_Id, Modified_By: data.User_Email_Id, Status: "CANCELLED", } dispatch(OrderStatusUpdateAction(updateData, data, navigation, setSubmit)) setVisible(!visible) }; const returnhandleClicks = (data) => { let updateData = { Item_Master_Id: data.Item_Master_Id, Order_Id: data.Order_Id, Modified_By: data.User_Email_Id, Status: "RETURN", } dispatch(OrderStatusUpdateAction(updateData, data, navigation, setSubmit)) setVisibleOne(!visibleone) }; const orderlabels = ["Ordered", "Packed", "Shipped", "Delivered"]; const cancellabels = ["Ordered","Cancelled"]; const returnlabels = ["Delivered", "Returned"]; const customStyles = { stepIndicatorSize: 25, currentStepIndicatorSize: 30, separatorStrokeWidth: 2, currentStepStrokeWidth: 3, stepStrokeCurrentColor: 'green', stepStrokeWidth: 3, stepStrokeFinishedColor: 'green', stepStrokeUnFinishedColor: '#aaaaaa', separatorFinishedColor: 'green', separatorUnFinishedColor: '#aaaaaa', stepIndicatorFinishedColor: 'green', stepIndicatorUnFinishedColor: '#ffffff', stepIndicatorCurrentColor: '#ffffff', stepIndicatorLabelFontSize: 13, currentStepIndicatorLabelFontSize: 13, stepIndicatorLabelCurrentColor: '#fe7013', stepIndicatorLabelFinishedColor: '#ffffff', stepIndicatorLabelUnFinishedColor: '#aaaaaa', labelColor: '#999999', labelSize: 13, currentStepLabelColor: 'green' } const cancelStyles = { stepIndicatorSize: 25, currentStepIndicatorSize: 30, separatorStrokeWidth: 2, currentStepStrokeWidth: 3, stepStrokeCurrentColor: '#fe7013', stepStrokeWidth: 3, stepStrokeFinishedColor: 'red', stepStrokeUnFinishedColor: '#aaaaaa', separatorFinishedColor: 'red', separatorUnFinishedColor: '#aaaaaa', stepIndicatorFinishedColor: 'red', stepIndicatorUnFinishedColor: '#ffffff', stepIndicatorCurrentColor: '#ffffff', stepIndicatorLabelFontSize: 13, currentStepIndicatorLabelFontSize: 13, stepIndicatorLabelCurrentColor: '#fe7013', stepIndicatorLabelFinishedColor: '#ffffff', stepIndicatorLabelUnFinishedColor: '#aaaaaa', labelColor: '#999999', labelSize: 13, currentStepLabelColor: 'red' } //For Invoice const [selectedPrinter, setSelectedPrinter] = React.useState(); const print = async () => { // On iOS/android prints the given html. On web prints the HTML from the current page. await Print.printAsync({ html, printerUrl: selectedPrinter?.url, // iOS onlys }); } const updateStatesInvoice = (status, data) => { setInvoiceDetailsLoading(false); if (status) { if (!invoiceDetails) { setDetails(data); } } }; useEffect(() => { if (isEmpty(Orders) || Id !== orderId.id) { let formData1 = { Order_Id: orderId.id, Order_Status: "", Records_Filter: "FILTER", User_Email_Id: "", } setDataa(orderId.id) dispatch(getAllOrdersAction(updateStates, formData1)); } // if (isEmpty(alltracking) || Id !== orderId.id) { // let formData11 = { // Order_Id: orderId.id, // } // setDataa(orderId.id) // dispatch(getOrdertrackAction(formData11)); // } if ((Orders && isEmpty(alldetails)) || Id !== orderId.id) { let formData2 = { Records_Filter: "FILTER", User_Address_Id: Orders[0]?.User_Address_Id } let formData = { Records_Filter: "FILTER", Email_Id: EmailID, Product_Id: Orders[0]?.Product_Id, } let formDataInvoice = { "Item_Master_Id": Orders[0]?.Item_Master_Id, "Order_Id": Orders[0]?.Order_Id } if (!invoiceDetails && !invoiceDetailsLoading) { setInvoiceDetailsLoading(true); dispatch(OrderInvoiceAction(formDataInvoice, updateStatesInvoice)); } let formDatavalue = { Order_Id: Orders[0]?.Order_Id } dispatch(getOrderdetailAction(formData2)); dispatch(getAllUserReviewAction(formData)); dispatch(getOrdertrackAction(formDatavalue)); } }, []); const getInvoice = () => { return ` Invoice

Invoice

Order Id: `+ invoiceDetails.OrderId + `

Order Date: `+ invoiceDetails.OrderDate + `

Invoice No: `+ invoiceDetails.InvoiceNo + `

Invoice Date:`+ invoiceDetails.InvoiceDate + `


Billing Address:

`+ invoiceDetails.BillingAddress.Name + `

`+ invoiceDetails.BillingAddress.AddressDrToSt + `

`+ invoiceDetails.BillingAddress.City + `,` + invoiceDetails.BillingAddress.State + `,` + invoiceDetails.BillingAddress.Country + `

+`+ invoiceDetails.BillingAddress.PhoneNumber + `

`+ invoiceDetails.BillingAddress.email + `

Shipping Address:

`+ invoiceDetails.ShippingAddress.Name + `

`+ invoiceDetails.ShippingAddress.AddressDrToSt + `

`+ invoiceDetails.ShippingAddress.City + `,` + invoiceDetails.ShippingAddress.State + `,` + invoiceDetails.ShippingAddress.Country + `

+`+ invoiceDetails.ShippingAddress.PhoneNumber + `

`+ invoiceDetails.ShippingAddress.email + `


Sold By:

`+ invoiceDetails.Partner.Name + `

`+ invoiceDetails.Partner.AddressDrToSt + `

`+ invoiceDetails.Partner.City + `,` + invoiceDetails.Partner.State + `,` + invoiceDetails.Partner.Country + `

`+ invoiceDetails.Partner.Name + `

PAN NO: `+ invoiceDetails.Partner.Pan + `

GST: `+ invoiceDetails.Partner.GST + `


SI No Description rate QTY Amount IGST IGST Amount
1 `+ invoiceDetails.product.name + ` `+ invoiceDetails.product.Amount + ` `+ invoiceDetails.product.Qty + ` `+ invoiceDetails.product.GrandTotal + ` `+ invoiceDetails.product.IGST + ` `+ invoiceDetails.product.IGSTAmount + `
`; } const [invoiceMobile, setinvoiceMobile] = useState(false) const printToFile = async () => { if (Platform.OS == 'web') { setinvoiceMobile(true) } else { const html = getInvoice(); try { const { uri } = await Print.printToFileAsync({ html }); await shareAsync(uri, { UTI: '.pdf', mimeType: 'application/pdf' }); } catch (error) { } } // On iOS/android prints the given html. On web prints the HTML from the current page. } const printToFileWeb = async () => { try { const { uri } = await Print.printToFileAsync({ html }); await shareAsync(uri, { UTI: '.pdf', mimeType: 'application/pdf' }) .finally((data) => { setinvoiceMobile(false) } ) } catch (error) { } } const selectPrinter = async () => { const printer = await Print.selectPrinterAsync(); // iOS only setSelectedPrinter(printer); } //API let alldelireviewsandratings = useSelector(state => state.delreviewrating?.delreviewratings?.all); console.log(alldelireviewsandratings) //delivery person reviews and ratings API call useEffect(() => { let formData = { "Records_Filter": "FILTER", "User_Email_ID": EmailID } dispatch(getAllDelReviewRatingsAction(formData)); }, []); const Alldelireviewsandratings = () => { let existcomment; let UserData = []; if (alldelireviewsandratings[0]) { existcomment = alldelireviewsandratings?.filter(review => review.User_Email_Id === user?.Email_Id).length UserData = alldelireviewsandratings?.filter(review => review.User_Email_Id === user?.Email_Id ? review : "") } return [existcomment, UserData] } const [commentvalidation, uservalidation] = Alldelireviewsandratings(); //For view Review & Ratings const [setViewModalVisible] = React.useState(false); const [isViewReviewModalVisible, setViewReviewModalVisible] = React.useState(false); const viewToggleModal = () => { if (isAuthenticated) { setViewReviewModalVisible(!isViewReviewModalVisible); } else { setViewModalVisible(true); } }; //For add review const [isModalVisible, setModalVisible] = React.useState(false); const [isReviewModalVisible, setReviewModalVisible] = React.useState(false); const [rating, setRating] = useState(0); const user = useSelector(state => state.auth?.user); const [comment, setComment] = useState(); const toggleModal = () => { if (isAuthenticated) { setReviewModalVisible(!isReviewModalVisible); } else { setModalVisible(true); } }; const addReviewModal = (formData) => { let data={ Comments: comment, Del_User_Email_Id: alldelireviewsandratings?.Del_User_Email_Id, Name: user?.User_Name, Order_Id: orders?.Order_Id, Order_Line_Item_Id: orders?.Item_Master_Id, Rating: rating, Status: "Active", User_Email_Id: user?.Email_Id, } let formValues = JSON.parse(JSON.stringify(formData)); dispatch(createDelReviewRatingsAction(formValues, toast)); setReviewModalVisible(false); } console.log(alldelireviewsandratings?.Rating) return (
{invoiceMobile ? <> {invoiceDetails && Invoice Order ID: {invoiceDetails.OrderId} Order Date: {invoiceDetails.OrderDate} Invoice No: {invoiceDetails.InvoiceNo} Invoice Date:{invoiceDetails.InvoiceDate} Billing Address: {invoiceDetails.BillingAddress.Name} {invoiceDetails.BillingAddress.AddressDrToSt} {invoiceDetails.BillingAddress.City} {invoiceDetails.BillingAddress.State}, {invoiceDetails.BillingAddress.Country} +{invoiceDetails.BillingAddress.PhoneNumber} {invoiceDetails.BillingAddress.email} Shipping Address: {invoiceDetails.ShippingAddress.Name} {invoiceDetails.ShippingAddress.AddressDrToSt} {invoiceDetails.ShippingAddress.City} {invoiceDetails.BillingAddress.State}, {invoiceDetails.BillingAddress.Country} +{invoiceDetails.ShippingAddress.PhoneNumber} {invoiceDetails.ShippingAddress.email} Sold By: {invoiceDetails.Partner.Name} {invoiceDetails.Partner.AddressDrToSt} {invoiceDetails.Partner.City}, {invoiceDetails.Partner.State}, {invoiceDetails.Partner.Country} {invoiceDetails.Partner.Name} PAN NO: {invoiceDetails.Partner.Pan} GST: {invoiceDetails.Partner.GST} SI No Description Rate QTY Amount IGST IGST Amount 1 {invoiceDetails.product.name} {invoiceDetails.product.Amount} {invoiceDetails.product.Qty} {invoiceDetails.product.GrandTotal} {invoiceDetails.product.IGST} {invoiceDetails.product.IGSTAmount} Note: This is computer generated Invoice and signature is not required. } : <> 500 ? "75%" : "95%", marginLeft: "auto", marginRight: "auto", }}> navigation.navigate('MyOrders')}> Go Back = 500) ? 400 : 270, maxHeight: (dimensions >= 500) ? 500 : 350, marginLeft: 'auto', marginRight: 'auto' }}> setVisible(!visible)} /> Alert! Are you sure you want to cancel the order? = 500) ? 400 : 270, maxHeight: (dimensions >= 500) ? 500 : 350, marginLeft: 'auto', marginRight: 'auto', }}> setVisibleOne(!visibleone)} /> Alert! Are you sure you want to Return the order? {alldetails && Delivery Address {alldetails.Name}, D-No : {alldetails.Door_Number},{alldetails.Street}, {alldetails.Landmark}, {alldetails.City},{alldetails.State},{alldetails.Country}, {alldetails.City}-{alldetails.Zip}, Phone number : {alldetails.Mobile}. } {alldelireviewsandratings&& {Orders.map((data, index) => ( 250 ? 250 : 75, minHeight: 140, borderColor: 'grey', borderWidth: 0.5, borderRadius: 10 }} > {data.Product_Name} Order ID : {data.Order_Id} Order Status : {data.Order_Status === "NEW" ? "ORDERED" : data.Order_Status === "COMPLETED" ? "DELIVERED" : data.Order_Status === "RETURN" ? "RETURN COMPLETE" : data.Order_Status === "REFUND" ? "REFUNDED" : data.Order_Status} Order Date : {data.Order_Date} Partner Name :{data.Partner_Name} { setData(data); setVisibleOne(!visibleone), setSubmit(!issubmitted) }} > RETURN { setData(data); setVisible(!visible), setSubmit(!issubmitted) }} > CANCEL Download Invoice {/*