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
{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
{/* */}
{selectedPrinter ? {`Selected printer: ${selectedPrinter.name}`} : undefined}
{/* Delivery Person Reviews and Ratings */}
{!alldelireviewsandratings&&data.Order_Status === "DELIVERED" ?
toggleModal()}
>
Add Delivery Review
:
alldelireviewsandratings && data.Order_Status === "DELIVERED"?
{viewToggleModal()}} style={{ fontWeight: "bold" }}>Delivery Review
ratingCompleted(rating)}
name="rating"
/>
: null
}
{/* For Add Review */}
setReviewModalVisible(false)}>
{/* For view Review & Ratings */}
{ setViewReviewModalVisible(false) }} >
Comment : {alldelireviewsandratings?.Comments}
Rating :
ratingCompleted(rating)}
name="rating"
/>
))}
}
>
}
)
}
const DeliveryAddReview = ({ responseFunction,orders }) => {
const [rating, setRating] = useState(0);
const [ratingError, setRatingError] = useState(false);
const [comment, setComment] = useState("");
const user = useSelector(state => state.auth?.user);
let alldelireviewsandratings = useSelector(state => state.delreviewrating.delreviewratings.all);
// Comment validations
const handleOnChange = (value) => {
setComment(value);
}
const addReviewModal = (data) => {
let error = false;
if (rating <= 0) {
setRatingError(true);
error = true;
} else {
setRatingError(false);
}
if (!error) {
let formData = {
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,
}
responseFunction(formData);
}
}
return (
{ handleOnChange(Text); }}
multiline={true}
numberOfLines={4}
value={comment}
/>
{ setRating(value); setRatingError(false) }}
/>
{ratingError &&
Please select the Rating.
}
addReviewModal(orders)}>
SUBMIT
)
}
const styles = StyleSheet.create({
separator: {
height: 1,
backgroundColor: "#CCCCCC",
},
text: {
},
button: {
alignItems: "center",
backgroundColor: "#DDDDDD",
padding: 10
},
invoiceNoContainer: {
flexDirection: 'row',
// marginTop: 36,
justifyContent: 'flex-end'
},
invoiceDateContainer: {
flexDirection: 'row',
justifyContent: 'flex-end'
},
invoiceDate: {
fontSize: 12,
},
page: {
fontSize: 11,
paddingTop: 30,
paddingLeft: 60,
paddingRight: 60,
lineHeight: 1.5,
flexDirection: 'column',
},
tableContainer: {
flexDirection: 'row',
// flexWrap: 'wrap',
marginTop: 24,
borderWidth: 1,
borderColor: '#bff0fd',
},
headerContainer: {
marginTop: -10
},
container: {
borderBottomColor: '#bff0fd',
backgroundColor: '#bff0fd',
borderBottomWidth: 1,
// fontStyle: 'bold',
flexGrow: 1,
},
titleContainer: {
marginTop: "auto",
textAlign: 'center',
// width: "100%",
fontSize: 10,
},
});
{/* Delivery Person Reviews and Ratings */}
{!isEmpty(alldelireviewsandratings) && alldelireviewsandratings ?.
filter((delorder) => delorder?.Order_Line_Item_Id === data?.Item_Master_Id).map((delorder) => {
!delorder && data.Order_Status === "DELIVERED" ?
toggleModal()}
>
Add Delivery Review
:
delorder && data.Order_Status === "DELIVERED"?
{viewToggleModal()}} style={{ fontWeight: "bold" }}>Delivery Review
ratingCompleted(rating)}
name="rating"
/>
: null
})}
{/* Delivery Person Reviews and Ratings */}
{alldelireviewsandratings?.filter((delorder) => delorder?.Order_Line_Item_Id === data?.Item_Master_Id).map(delorder => {
// !delorder && data.Order_Status === "DELIVERED" ?
toggleModal()}
>
Add Delivery Review
// :
delorder && data.Order_Status === "DELIVERED"?
{viewToggleModal()}} style={{ fontWeight: "bold" }}>Delivery Review
ratingCompleted(rating)}
name="rating"
/>
: null
})}
{alldelireviewsandratings?.filter((delorder) => delorder?.Order_Line_Item_Id === data?.Item_Master_Id) ?
// !delorder && data.Order_Status === "DELIVERED" ?
toggleModal()}
>
Add Delivery Review
: delorder && data.Order_Status === "DELIVERED" ? (
delorder?.Order_Line_Item_Id === data?.Item_Master_Id)}
renderItem={
{viewToggleModal()}} style={{ fontWeight: "bold" }}>Delivery Review
ratingCompleted(rating)}
name="rating"
/>
}
/>)
: null}