Compare commits

...

2 Commits

Author SHA1 Message Date
Your Name 7b7d8fced5 nov 14 push 2025-11-14 10:06:15 +05:30
Your Name 886015cac4 issue solved 2025-11-13 18:15:01 +05:30
24 changed files with 1326 additions and 1095 deletions

View File

@ -80,7 +80,6 @@
&.open {
background: #050d36 !important;
color: #23bbff;
border-right: 2px solid #23bbff;
font-weight: 600;
width: 95%;
}
@ -89,14 +88,16 @@
background: #050d36 !important;
color: #ffffff !important;
font-weight: 600;
border-radius: 6px;
border-radius: 6px 4px 4px 6px;
border-right: 2px solid #23bbff !important;
.pozo-menu-icon {
color: #23bbff !important;
color: #ffffff !important;
}
.pozo-menu-label {
color: #ffffff !important;
font-weight: 500 !important;
}
.pozo-menu-arrow {
@ -151,7 +152,7 @@
flex: 1;
color: #ffffff;
font-size: 12px;
font-weight: 500;
font-weight: 400;
word-break: break-word;
line-height: 1.2;
font-family: "Poppins", sans-serif !important;
@ -403,7 +404,7 @@
color: #fff;
.pozo-menu-item {
color: rgba(255, 255, 255, 0.85);
color: #ffffffd9;
&:hover {
background: #1890ff;

View File

@ -182,7 +182,8 @@ const AdminTaxForm = () => {
setpage(current);
};
const columns = useMemo(() => [
const columns = useMemo(
() => [
{
title: 'Sl.NO',
key: 'sno',
@ -213,7 +214,8 @@ const AdminTaxForm = () => {
);
},
sorter: (a, b) => a?.TaxIdName?.localeCompare(b?.TaxIdName),
sortOrder: sortedInfo.columnKey === 'TaxIdName' ? sortedInfo.order : null,
sortOrder:
sortedInfo.columnKey === 'TaxIdName' ? sortedInfo.order : null,
ellipsis: true,
},
{
@ -223,8 +225,10 @@ const AdminTaxForm = () => {
width: '100px',
align: 'right',
render: (text) => <a style={{ color: 'black' }}>{text}</a>,
sorter: (a, b) => parseFloat(a.TaxPercentage) - parseFloat(b.TaxPercentage),
sortOrder: sortedInfo.columnKey === 'TaxPercentage' ? sortedInfo.order : null,
sorter: (a, b) =>
parseFloat(a.TaxPercentage) - parseFloat(b.TaxPercentage),
sortOrder:
sortedInfo.columnKey === 'TaxPercentage' ? sortedInfo.order : null,
ellipsis: true,
},
@ -238,7 +242,8 @@ const AdminTaxForm = () => {
<a style={{ color: 'black' }}>{ExtractDateFormate(text)}</a>
),
sorter: (a, b) => new Date(a.EffectiveFrom) - new Date(b.EffectiveFrom),
sortOrder: sortedInfo.columnKey === 'EffectiveFrom' ? sortedInfo.order : null,
sortOrder:
sortedInfo.columnKey === 'EffectiveFrom' ? sortedInfo.order : null,
ellipsis: true,
},
{
@ -249,10 +254,13 @@ const AdminTaxForm = () => {
align: 'right',
render: (text) => <a style={{ color: 'black' }}>{text}</a>,
sorter: (a, b) => a?.Reference?.localeCompare(b?.Reference),
sortOrder: sortedInfo.columnKey === 'Reference' ? sortedInfo.order : null,
sortOrder:
sortedInfo.columnKey === 'Reference' ? sortedInfo.order : null,
ellipsis: true,
},
], [searchedText, sortedInfo, page]);
],
[searchedText, sortedInfo, page]
);
const onComplete = useCallback(() => {
setMessageData(null);
@ -272,7 +280,7 @@ const AdminTaxForm = () => {
}
};
return (
<div className="userPageTable">
<div className="userPageTable adminTaxMaster">
<div className="userPageContent">
<Messages
messageType={messageType}
@ -282,8 +290,7 @@ const AdminTaxForm = () => {
<div className="formAddNew">
<div>
<FormHeader title={'Tax'} />
<div className="searchAddDiv">
</div>
<div className="searchAddDiv"></div>
</div>
<div className="searchAddDiv">
<div className="formSearch">
@ -322,7 +329,7 @@ const AdminTaxForm = () => {
<div className="formDiv ">
<Form className="formDivAnt" ref={formRef} onFinish={onFinish}>
<div className="formDivS ">
<div className="inputForm">
<div className="inputForm addTaxinputDrawer">
<Form.Item
name="TaxName"
rules={[
@ -381,6 +388,14 @@ const AdminTaxForm = () => {
},
]}
>
<div
style={{
display: 'flex',
flexDirection: 'column',
}}
>
<label style={{color:"#5a5a5a", fontSize:"12px", fontFamily:"Arial",padding:"0 6px"}} htmlFor="Effective From">Effective From</label>
<DatePic
field="Effective From"
name="Effective From"
@ -412,6 +427,7 @@ const AdminTaxForm = () => {
</span>
}
/>
</div>
</Form.Item>
<Form.Item
@ -423,7 +439,8 @@ const AdminTaxForm = () => {
},
{
max: 20,
message: 'Reference cannot be more than 20 characters',
message:
'Reference cannot be more than 20 characters',
},
{
validator: async (_, value) => {

View File

@ -45,7 +45,7 @@ import {
FaParking,
} from 'react-icons/fa';
import { CiMenuBurger } from 'react-icons/ci';
import { IoCloseOutline } from 'react-icons/io5';
import { IoClose, IoCloseOutline } from 'react-icons/io5';
import { FaCalendar } from 'react-icons/fa6';
import { RiPrinterFill } from 'react-icons/ri';
import { GiShoppingBag } from 'react-icons/gi';
@ -542,6 +542,7 @@ const BSNavbar3 = ({ optionNames }) => {
{renderWithTooltip(<BSNavBarAddUser />, 'Add Customer')}
</span>
)}
<IoClose className="DropDownsCustomerClose" strokeWidth={3} />
</div>
{offerOption && (
@ -718,6 +719,16 @@ const BSNavbar3 = ({ optionNames }) => {
</div>
)}
</TooltipWrapper>
{verifyproduct && (
<div style={{ color: 'green' }}>
<TooltipWrapper title={'Verfied Products'} isMobile={isMobile}>
<div>
<VerfiedProducts />
</div>
</TooltipWrapper>
</div>
)}
</div>
{isMobile && (
<div
@ -728,15 +739,7 @@ const BSNavbar3 = ({ optionNames }) => {
<BSMobilePrintSettings />
</div>
)}
{verifyproduct && (
<div style={{ color: 'green' }}>
<TooltipWrapper title={'Verfied Products'} isMobile={isMobile}>
<div>
<VerfiedProducts />
</div>
</TooltipWrapper>
</div>
)}
<div className="userDates">
<div className="datesNewtimedate">
<CurrentDateDisplay />

View File

@ -195,10 +195,11 @@ const VerfiedProducts = () => {
<>
<div>
<RiVerifiedBadgeFill
style={{ cursor: 'pointer' }}
style={{ cursor: 'pointer', marginTop: '2px', display: 'flex' }}
onClick={() => setisOpenModal((p) => !p)}
size={25}
size={22}
color="#fff"
className="RiVerifiedBadgeFill"
/>
</div>

View File

@ -10,6 +10,14 @@
height: 100%;
display: flex;
flex-direction: column;
.billing-table-header:nth-child(5){
text-align: right !important;
}
.Table3-item-price,
.Table-3_qty,
.Table3-items {
padding: 10px 6px !important;
}
}
// Shopping Cart Header
@ -139,7 +147,7 @@
font-weight: 700;
color: #059669;
text-align: right;
font-family: 'Inter', sans-serif;
font-family: "Inter", sans-serif;
}
.delete-action {
@ -162,7 +170,6 @@
border-radius: 4px;
transition: background-color 0.2s;
svg {
color: #ef4444;
font-size: 1.125rem;
@ -194,7 +201,6 @@
cursor: pointer;
transition: all 0.2s;
svg {
font-size: 1.25rem;
color: #6b7280;
@ -216,7 +222,6 @@
cursor: pointer;
transition: all 0.2s;
svg {
font-size: 1.125rem;
}
@ -259,13 +264,11 @@
&.card-button {
background: #8b5cf6;
color: white;
}
&.upi-button {
background: #0ea5e9;
color: white;
}
}
@ -290,7 +293,7 @@
font-weight: 700;
cursor: pointer;
transition: all 0.2s;
font-family: 'Inter', sans-serif;
font-family: "Inter", sans-serif;
svg {
font-size: 1.5rem;
@ -299,7 +302,6 @@
// Responsive Design
@media (max-width: 768px) {
.standatdTableBill3 {
border-radius: 8px;
}

View File

@ -356,9 +356,11 @@ const SalesCountForStandard = ({
)}
</div>
}
onClick={() =>OverAllOrderCount || 0 >0 && setIsModalOpen(true)}
onClick={() =>
OverAllOrderCount || (0 > 0 && setIsModalOpen(true))
}
>
<FaChartLine color="#fde047" />
<FaChartLine color="#ffffffff" />
<div className="NetAmountNew">
{isMobile ? 'Count' : 'Sales Count'} : {OverAllOrderCount}
</div>
@ -372,9 +374,11 @@ const SalesCountForStandard = ({
fontSize: '0.9rem',
cursor: 'pointer',
}}
onClick={() => OverAllOrderCount || 0 >0 && setIsModalOpen(true)}
onClick={() =>
OverAllOrderCount || (0 > 0 && setIsModalOpen(true))
}
>
<FaChartLine color="#fde047" />
<FaChartLine color="#ffffffff" />
<div className="NetAmountNew">
{isMobile ? 'Count' : 'Sales Count'} : {OverAllOrderCount}
</div>
@ -472,7 +476,7 @@ const SalesCountForStandard = ({
onClick={() => netAmount > 0 && setIsNetAmtModalOpen(true)}
style={{ cursor: 'pointer' }}
>
<FaRupeeSign color="#fde047" />
<FaRupeeSign color="#ffffffff" />
<div className="NetAmountNew">
{isMobile ? 'NA' : 'Net Amount'} : {safeRound(netAmount)}
</div>
@ -532,8 +536,6 @@ const SalesCountForStandard = ({
cursor: 'pointer',
}}
/>
{/* <button className="BookingCloseButton"
onClick={OpenBookingModal}>Booking Close</button> */}
</TooltipWrapper>
</div>
) : (

View File

@ -699,7 +699,7 @@ const EmpAccessForm = ({ formType }) => {
</div>
</Form>
<div className="reportTable">
<div className="reportTable empAccessreportTable">
<Tables
columns={columns}
data={SelectedUserData ? TableData : []}

View File

@ -1,14 +1,12 @@
.other-services-container {
background: #fff;
padding: 24px;
// padding: 24px;
border-radius: 8px;
max-width: 1100px;
// margin: 24px auto 0 auto;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
width: 100%;
height: 100%;
}
// .other-service-row {
@ -23,7 +21,8 @@
/* gap: 24px; */
margin-bottom: 16px;
align-items: center;
justify-content: center;}
justify-content: center;
}
// .other-service-group {
// flex: 1 1 300px;
// min-width: 250px;
@ -33,13 +32,15 @@
// }
.other-service-group {
display: flex;
flex-direction: row;
justify-content: flex-start;
width: 100%;
flex-wrap: wrap;
column-gap: 20px;
.ant-form-item{
margin-bottom: 10px !important;
}
}
.other-service-checkbox-group {
min-width: 180px;
@ -58,6 +59,7 @@
.other-service-row {
flex-direction: column;
gap: 0;
align-items: flex-start;
}
.other-service-group {
min-width: 100%;

View File

@ -68,9 +68,8 @@ const PublicQrCode = () => {
const [branchData, setBranchData] = useState([]);
const [page, setPage] = useState(1);
const [isPreviewModalOpen, setIsPreviewModalOpen] = useState(false);
const [pdfPreviewUrl, setPdfPreviewUrl] = useState('');
const qrCodeRef = useRef(null);
const printContentRef = useRef(null);
const CompId = getSession('CompId');
const BranchId = getSession('BranchId');
const AppId = getSession('AppId');
@ -296,7 +295,7 @@ const PublicQrCode = () => {
if (res?.data?.statusCode == 1) {
const QrUrl = `${subDirectory}selfBooking/${res?.data?.ReferenceNo}`;
setQrCodeUrl(QrUrl);
generatePDF(true, QrUrl);
setTimeout(() => window.print(), 500);
}
} catch (error) {
console.error('HandleSubmit Error:', error);
@ -305,187 +304,7 @@ const PublicQrCode = () => {
}
};
// Function to generate PDF
const generatePDF = async (isPreview = false, encrypted) => {
console.log('generatePDF called with:', { isPreview, encrypted });
if (!encrypted) {
setMessageType('error');
setMessageData('Please generate QR code first');
return;
}
try {
// Get booking type name and table name for display
const bookingTypeName =
filtered?.find((item) => item.ConfigId === configId)?.ConfigName ||
'Both';
const tableName =
Tabledata?.find((item) => item.TableId === TableId)?.TableName || '';
// Get branch details
const branch = branchData?.[0] || {};
const branchName = branch.BrName || branch.CompName || '';
const branchMobile = branch.BrMobile || '';
const companyLogo = branch.CompLogo || '';
const branchAddress =
[
branch.Address1,
branch.Address2,
branch.City,
branch.State,
branch.Zip,
]
.filter(Boolean)
.join(', ') || '';
// Create a temporary div for PDF content
const tempDiv = document.createElement('div');
tempDiv.style.padding = '40px';
tempDiv.style.backgroundColor = 'white';
tempDiv.style.fontFamily = 'Arial, sans-serif';
tempDiv.style.textAlign = 'center';
tempDiv.style.width = '600px';
tempDiv.style.margin = '0 auto';
// Add content to the temporary div
tempDiv.innerHTML = `
<div style="margin-bottom: 10px; border-bottom: 2px solid #eee; padding-bottom: 10px;">
${companyLogo ? `<div style="margin-bottom: 10px;"><img id="company-logo" src="${companyLogo}" style="max-width: 120px; max-height: 80px; object-fit: contain;" crossorigin="anonymous" /></div>` : ''}
<h1 style="color: #333; margin: 10px 0; font-size: 24px; font-weight: bold;">${branchName ? branchName : ''}</h1>
<p style="color: #666; margin: 5px 0; font-size: 14px;">${branchAddress ? branchAddress : ''}</p>
<p style="color: #666; margin: 5px 0; font-size: 14px;"><strong>Mobile:</strong> ${branchMobile ? branchMobile : ''}</p>
</div>
<div style="margin-bottom: 30px;">
<h2 style="color: #666; margin-bottom: 20px; font-size: 20px;">Self Booking QR Code</h2>
</div>
<div style="margin-bottom: 30px;">
<div style="display: inline-block; padding: 20px; background: white; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);">
<div id="qr-code-container"></div>
</div>
</div>
<div style="margin-top: 20px;">
<p style="font-size: 12px; color: #666; word-break: break-all;">URL: ${encrypted}</p>
</div>
`;
// Add the temporary div to the document
document.body.appendChild(tempDiv);
// Create QR code in the container
const qrContainer = tempDiv.querySelector('#qr-code-container');
const qrCodeSvg = document.createElementNS(
'http://www.w3.org/2000/svg',
'svg'
);
qrCodeSvg.setAttribute('width', '200');
qrCodeSvg.setAttribute('height', '200');
qrCodeSvg.setAttribute('viewBox', '0 0 256 256');
// Use the QRCode library to generate SVG content
const QRCodeLib = await import('qrcode');
const qrDataUrl = await QRCodeLib.toDataURL(encrypted, {
width: 200,
margin: 2,
});
// Create an image element for the QR code
const qrImage = document.createElement('img');
qrImage.src = qrDataUrl;
qrImage.style.width = '200px';
qrImage.style.height = '200px';
qrContainer.appendChild(qrImage);
// Wait for all images to load (QR code and company logo if present)
const imagesToLoad = [qrImage];
const companyLogoImg = tempDiv.querySelector('#company-logo');
if (companyLogoImg) {
imagesToLoad.push(companyLogoImg);
}
await Promise.all(
imagesToLoad.map(
(img) =>
new Promise((resolve) => {
if (img.complete) {
resolve();
} else {
img.onload = resolve;
img.onerror = resolve; // Continue even if logo fails to load
}
})
)
);
// Generate PDF using html2canvas and jsPDF
const canvas = await html2canvas(tempDiv, {
scale: 2,
useCORS: true,
allowTaint: true,
backgroundColor: '#ffffff',
});
const imgData = canvas.toDataURL('image/png');
const pdf = new jsPDF('p', 'mm', 'a4');
const imgWidth = 190;
const pageHeight = 295;
const imgHeight = (canvas.height * imgWidth) / canvas.width;
let heightLeft = imgHeight;
let position = 10;
pdf.addImage(imgData, 'PNG', 10, position, imgWidth, imgHeight);
heightLeft -= pageHeight;
while (heightLeft >= 0) {
position = heightLeft - imgHeight;
pdf.addPage();
pdf.addImage(imgData, 'PNG', 10, position, imgWidth, imgHeight);
heightLeft -= pageHeight;
}
// Clean up
document.body.removeChild(tempDiv);
if (isPreview) {
// Generate blob URL for preview
console.log('Generating PDF preview...');
const pdfBlob = pdf.output('blob');
const pdfUrl = URL.createObjectURL(pdfBlob);
console.log('PDF preview URL created:', pdfUrl);
setPdfPreviewUrl(pdfUrl);
setIsPreviewModalOpen(true);
} else {
// Download the PDF
console.log('Downloading PDF...');
const branch = branchData?.[0] || {};
const branchName = (
branch.BrName ||
branch.CompName ||
'Branch'
).replace(/[^a-zA-Z0-9]/g, '_');
const fileName = `QR_Code_${branchName}_${bookingTypeName}_${tableName}_${new Date().toISOString().split('T')[0]}.pdf`;
console.log('PDF filename:', fileName);
pdf.save(fileName);
console.log('PDF download initiated');
setMessageType('success');
setMessageData('PDF downloaded successfully!');
}
} catch (error) {
console.error('Error generating PDF:', error);
console.error('Error details:', {
message: error.message,
stack: error.stack,
encrypted: encrypted,
configId: configId,
TableId: TableId,
});
setMessageType('error');
setMessageData(
`Error generating PDF: ${error.message}. Please try again.`
);
}
};
const onComplete = useCallback(() => {
setMessageData(null);
@ -571,7 +390,7 @@ const PublicQrCode = () => {
<FormHeader title={'QR Code Generator'} />
</div>
<div className="searchAddDiv">
<div style={{ display: 'flex', gap: '1rem', flexWrap: 'wrap' }}>
<div style={{ display: 'flex', gap: '2rem', flexWrap: 'wrap' }}>
<DropDowns
options={[
// { value: 'All', label: 'Both' }, // Add "Select" option
@ -673,6 +492,17 @@ const PublicQrCode = () => {
</div>
{qrCodeUrl && (
<>
<div className="productMaster-input">
<Buttons
buttonText="Print"
className="tertiary_Button"
color="28a745"
handleSubmit={() => window.print()}
icon={<EyeOutlined />}
>
PRINT
</Buttons>
</div>
<div className="productMaster-input">
<Buttons
buttonText="Clear"
@ -684,8 +514,6 @@ const PublicQrCode = () => {
setTableId(null);
setWaiterId(null);
setTabledata([]);
setPdfPreviewUrl('');
setIsPreviewModalOpen(false);
}}
>
CLEAR
@ -696,7 +524,7 @@ const PublicQrCode = () => {
</div>
</div>
</div>
<div className="reportTable">
<div className="reportTable no-print">
{qrCodeUrl && (
<div
ref={qrCodeRef}
@ -745,69 +573,79 @@ const PublicQrCode = () => {
<PublicQrCodeShare qrCodeUrl={qrCodeUrl} />
)}
</div>
</div>
{/* PDF Preview Modal */}
<Modal
title="PDF Preview"
open={isPreviewModalOpen}
onCancel={() => {
setIsPreviewModalOpen(false);
if (pdfPreviewUrl) {
URL.revokeObjectURL(pdfPreviewUrl);
setPdfPreviewUrl('');
}
}}
footer={false}
// footer={[
// <Buttons
// key="download"
// buttonText="Download PDF"
// className="tertiary_Button"
// color="28a745"
// handleSubmit={() => {
// generatePDF(false, qrCodeUrl);
// setIsPreviewModalOpen(false);
// if (pdfPreviewUrl) {
// URL.revokeObjectURL(pdfPreviewUrl);
// setPdfPreviewUrl('');
// }
// }}
// icon={<DownloadOutlined />}
// >
// DOWNLOAD
// </Buttons>,
// <Buttons
// key="close"
// buttonText="Close"
// className="secondary_Button"
// color="6c757d"
// handleSubmit={() => {
// setIsPreviewModalOpen(false);
// if (pdfPreviewUrl) {
// URL.revokeObjectURL(pdfPreviewUrl);
// setPdfPreviewUrl('');
// }
// }}
// >
// CLOSE
// </Buttons>
// ]}
width={1000}
style={{ top: 20 }}
>
{pdfPreviewUrl && (
<div style={{ textAlign: 'center' }}>
<iframe
src={pdfPreviewUrl}
width="100%"
height="600px"
style={{ border: 'none', borderRadius: '4px' }}
title="PDF Preview"
{/* Print Content - A4 Format */}
{qrCodeUrl && (
<div ref={printContentRef} className="print-only" style={{ display: 'none' }}>
<div style={{ padding: '40px 30px', textAlign: 'center', fontFamily: 'Arial, sans-serif' }}>
{branchData?.[0]?.CompLogo && (
<div style={{ marginBottom: '20px' }}>
<img
src={branchData[0].CompLogo}
alt="Company Logo"
style={{ maxWidth: '150px', maxHeight: '100px', objectFit: 'contain' }}
/>
</div>
)}
</Modal>
<h1 style={{ margin: '15px 0', fontSize: '28px', color: '#333', fontWeight: 'bold' }}>
{branchData?.[0]?.BrName || branchData?.[0]?.CompName || ''}
</h1>
<p style={{ margin: '8px 0', fontSize: '14px', color: '#666' }}>
{[branchData?.[0]?.Address1, branchData?.[0]?.Address2, branchData?.[0]?.City, branchData?.[0]?.State, branchData?.[0]?.Zip]
.filter(Boolean)
.join(', ')}
</p>
<p style={{ margin: '8px 0', fontSize: '14px', color: '#666' }}>
<strong>Mobile:</strong> {branchData?.[0]?.BrMobile || ''}
</p>
<div style={{ margin: '40px 0', display: 'flex', justifyContent: 'center' }}>
<div style={{ padding: '20px', background: 'white', display: 'inline-block', border: '2px solid #ddd' }}>
<QRCode
size={300}
value={qrCodeUrl}
viewBox={`0 0 256 256`}
/>
</div>
</div>
<p style={{ marginTop: '30px', fontSize: '12px', color: '#666', wordBreak: 'break-all', maxWidth: '80%', margin: '30px auto 0' }}>
<strong>URL:</strong> {qrCodeUrl}
</p>
</div>
</div>
)}
</div>
<style>{`
@media print {
@page {
size: A4 portrait;
margin: 0;
}
html, body {
height: 100%;
margin: 0;
padding: 0;
}
body * {
visibility: hidden;
}
.print-only, .print-only * {
visibility: visible;
}
.print-only {
display: block !important;
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
page-break-after: avoid;
}
.no-print {
display: none !important;
}
}
`}</style>
</div>
);
};

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
.slot-management {
font-family: 'Poppins', sans-serif;
font-family: "Poppins", sans-serif;
width: 100%;
margin: 0 auto;
@ -257,3 +257,19 @@
.SlotManagementTable {
margin-top: 20px;
}
.slotmanagemantTable {
.ant-table-cell {
font-size: 12px;
}
.ant-table-tbody {
font-family: "Poppins";
}
button{
font-family: "Poppins";
span{
font-family: "Poppins";
}
}
}

View File

@ -1,23 +1,32 @@
import { useCallback, useEffect, useState } from "react";
import { useDispatch, useSelector } from "react-redux";
import { dateTimeFormatChange, getSession } from "../../Services/Others";
import { deleteSlotManagement, getSlotManagement, GlobalSlotDetailData } from "../../Features/SlotManagement/SlotManagement";
import { Button, Modal, Table, Tag, List, Space } from "antd";
import { ClockCircleOutlined, CalendarOutlined, DeleteFilled, PlusOutlined } from "@ant-design/icons";
import Buttons from "../../Components/Forms/Buttons";
import Search from "../../Components/Forms/Search";
import FormHeader from "../PageComponents/FormHeader";
import { useNavigate } from "react-router-dom";
import { Messages } from "../../Components/Notifications/Messages";
import { Tables } from "../../Components/Tables/Table";
import { changeBreadCrumb } from "../../Features/AppPage/CenterPage";
import { useCallback, useEffect, useState } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { dateTimeFormatChange, getSession } from '../../Services/Others';
import {
deleteSlotManagement,
getSlotManagement,
GlobalSlotDetailData,
} from '../../Features/SlotManagement/SlotManagement';
import { Button, Modal, Table, Tag, List, Space } from 'antd';
import {
ClockCircleOutlined,
CalendarOutlined,
DeleteFilled,
PlusOutlined,
} from '@ant-design/icons';
import Buttons from '../../Components/Forms/Buttons';
import Search from '../../Components/Forms/Search';
import FormHeader from '../PageComponents/FormHeader';
import { useNavigate } from 'react-router-dom';
import { Messages } from '../../Components/Notifications/Messages';
import { Tables } from '../../Components/Tables/Table';
import { changeBreadCrumb } from '../../Features/AppPage/CenterPage';
const subDirectory = import.meta.env.BASE_URL;
const SlotManagementList = () => {
const CompId = getSession("CompId");
const BranchId = getSession("BranchId");
const AppId = getSession("AppId");
const UserId = getSession("UserId");
const CompId = getSession('CompId');
const BranchId = getSession('BranchId');
const AppId = getSession('AppId');
const UserId = getSession('UserId');
const dispatch = useDispatch();
const navigate = useNavigate();
@ -36,7 +45,6 @@ const SlotManagementList = () => {
const [filteredInfo, setFilteredInfo] = useState({});
const [page, setpage] = useState(1);
console.log(SloteData, 'fsafsfsdfdsfdsfdafda');
useEffect(() => {
@ -59,25 +67,26 @@ useEffect(() => {
} catch (err) {
console.log(err, 'err');
}
}, []);
const fetchManagementHistory = async () => {
const response = await dispatch(getSlotManagement({ CompId, BranchId, AppId })).unwrap();
const response = await dispatch(
getSlotManagement({ CompId, BranchId, AppId })
).unwrap();
const slotData = response?.data?.data;
setSloteData(slotData || []);
};
const handleDelete = async (ExceptionId) => {
try {
const deleteData = {
ExceptionId: ExceptionId,
UpdatedBy: UserId,
ActiveStatus: "D",
ActiveStatus: 'D',
};
const response = await dispatch(deleteSlotManagement(deleteData)).unwrap();
const response = await dispatch(
deleteSlotManagement(deleteData)
).unwrap();
if (response?.data?.statusCode == 1) {
fetchManagementHistory();
setMessageType('success');
@ -85,7 +94,7 @@ useEffect(() => {
}
} catch (error) {
setMessageType('success');
setMessageData("Failed to delete slot.");
setMessageData('Failed to delete slot.');
}
};
@ -94,7 +103,8 @@ useEffect(() => {
setMessageType(null);
}, []);
const handleViewSlots = (record) => {
const flattenedSlots = record?.SlotDetails?.flatMap((slot) =>
const flattenedSlots =
record?.SlotDetails?.flatMap((slot) =>
slot.SlotExceptionDetails.map((exception) => ({
...exception,
ProdSubCatName: slot.ProdSubCatName,
@ -140,16 +150,16 @@ useEffect(() => {
),
},
{
title: "Slot Action",
dataIndex: "ExceptionType",
key: "ExceptionType",
title: 'Slot Action',
dataIndex: 'ExceptionType',
key: 'ExceptionType',
render: (text) => {
if (!text) return "-";
if (!text) return '-';
const mapping = {
block: "Block",
holiday: "Holiday",
pricechange: "Price Change"
block: 'Block',
holiday: 'Holiday',
pricechange: 'Price Change',
};
// convert value safely (case-insensitive)
@ -158,17 +168,19 @@ useEffect(() => {
return <span>{formattedValue}</span>;
},
},
{ title: "Activity Type", dataIndex: "ModeOfException", key: "ModeOfException",
{
title: 'Activity Type',
dataIndex: 'ModeOfException',
key: 'ModeOfException',
render: (text) => {
if (!text) return "-";
if (!text) return '-';
const mapping = {
subcategory: "Sub Category",
product: "Facility",
slot: "Slot",
full_branch: "Full Branch",
category: "Category",
subcategory: 'Sub Category',
product: 'Facility',
slot: 'Slot',
full_branch: 'Full Branch',
category: 'Category',
};
// convert value safely (case-insensitive)
@ -178,14 +190,13 @@ useEffect(() => {
},
},
{
title: "Slot Details",
key: "SlotDetails",
align: "center",
title: 'Slot Details',
key: 'SlotDetails',
align: 'center',
render: (_, record) => (
<Button
icon={<ClockCircleOutlined style={{ color: "#52c41a" }} />}
icon={<ClockCircleOutlined style={{ color: '#52c41a' }} />}
type="link"
onClick={() => handleViewSlots(record)}
>
@ -194,63 +205,76 @@ useEffect(() => {
),
},
{
title: "Day(s)",
key: "DayOfWeek",
align: "center",
render: (_, record) => (
title: 'Day(s)',
key: 'DayOfWeek',
align: 'center',
render: (_, record) =>
record?.DayOfWeek.length > 0 ? (
<Button
icon={<CalendarOutlined style={{ color: "#fa8c16" }} />}
icon={<CalendarOutlined style={{ color: '#fa8c16' }} />}
type="link"
onClick={() => handleViewDays(record)}
>
View
</Button>
) :'-'
) : (
'-'
),
},
{ title: "Reason", dataIndex: "Reason", key: "Reason" },
{ title: 'Reason', dataIndex: 'Reason', key: 'Reason' },
{
title: "Action",
key: "Action",
dataIndex: "Action",
title: 'Action',
key: 'Action',
dataIndex: 'Action',
width: 100,
align: "center",
align: 'center',
render: (_, record) => (
<Space size="middle">
<DeleteFilled
style={{ color: "#FF4D4F", fontSize: "16px", cursor: "pointer" }}
style={{ color: '#FF4D4F', fontSize: '16px', cursor: 'pointer' }}
onClick={() => handleDelete(record.ExceptionId)}
/>
</Space>
),
}
},
];
// Utility: check if a column has any non-null / non-empty data
const hasDataInColumn = (data, key) => {
return data.some(item => item[key] !== null && item[key] !== undefined && item[key] !== "" && item[key] !== 0);
return data.some(
(item) =>
item[key] !== null &&
item[key] !== undefined &&
item[key] !== '' &&
item[key] !== 0
);
};
const allSlotColumns = [
{ title: "Slot Name", dataIndex: "SlotName", key: "SlotName" },
{ title: "Facility", dataIndex: "ProdName", key: "ProdName" },
{ title: "Sub category", dataIndex: "ProdSubCatName", key: "ProdSubCatName" },
{ title: 'Slot Name', dataIndex: 'SlotName', key: 'SlotName' },
{ title: 'Facility', dataIndex: 'ProdName', key: 'ProdName' },
{
title: "Valid From",
dataIndex: "ExceptionFrom",
key: "ExceptionFrom",
title: 'Sub category',
dataIndex: 'ProdSubCatName',
key: 'ProdSubCatName',
},
{
title: 'Valid From',
dataIndex: 'ExceptionFrom',
key: 'ExceptionFrom',
render: (text) => dateTimeFormatChange(text),
},
{
title: "Valid To",
dataIndex: "ExceptionTo",
key: "ExceptionTo",
title: 'Valid To',
dataIndex: 'ExceptionTo',
key: 'ExceptionTo',
render: (text) => dateTimeFormatChange(text),
},
{ title: "New Price", dataIndex: "NewPrice", key: "NewPrice" },
{ title: "Single Price", dataIndex: "SinglePrice", key: "SinglePrice" },
{ title: 'New Price', dataIndex: 'NewPrice', key: 'NewPrice' },
{ title: 'Single Price', dataIndex: 'SinglePrice', key: 'SinglePrice' },
];
const slotColumns = allSlotColumns.filter(col => hasDataInColumn(selectedSlots, col.dataIndex));
const slotColumns = allSlotColumns.filter((col) =>
hasDataInColumn(selectedSlots, col.dataIndex)
);
const handlePageChange = (current) => {
setpage(current);
};
@ -286,7 +310,7 @@ const slotColumns = allSlotColumns.filter(col => hasDataInColumn(selectedSlots,
</Buttons>
</div>
</div>
<div className="reportTable">
<div className="reportTable slotmanagemantTable">
<Tables
columns={managementColumns}
dataSource={SloteData}
@ -299,7 +323,7 @@ const slotColumns = allSlotColumns.filter(col => hasDataInColumn(selectedSlots,
</div>
{/* Slot Modal */}
<Modal
title={`Slot Details ${selectedProduct?.ProdName || ""}`}
title={`Slot Details ${selectedProduct?.ProdName || ''}`}
open={isSlotModalOpen}
onCancel={() => setIsSlotModalOpen(false)}
footer={null}
@ -327,7 +351,10 @@ const slotColumns = allSlotColumns.filter(col => hasDataInColumn(selectedSlots,
dataSource={selectedDays}
renderItem={(day) => (
<List.Item>
<Tag color="blue" style={{ fontSize: "14px", padding: "4px 8px" }}>
<Tag
color="blue"
style={{ fontSize: '14px', padding: '4px 8px' }}
>
{day.toUpperCase()}
</Tag>
</List.Item>
@ -339,7 +366,6 @@ const slotColumns = allSlotColumns.filter(col => hasDataInColumn(selectedSlots,
</Modal>
</div>
</div>
);
};

View File

@ -37,7 +37,7 @@
// width: 99.9% !important;
@media (max-width: 500px) {
height: 91vh !important;
height: 95vh !important;
}
}

View File

@ -327,7 +327,7 @@
}
.CategoryHorizontalNew {
padding: 1rem 1rem;
padding: 12px 12px;
font-family: 'Inter', sans-serif;
display: flex;
align-items: center;

View File

@ -115,7 +115,7 @@
color: #52c41a;
font-size: 14px;
font-weight: 600;
font-family: 'Gilroy';
font-family: "Gilroy";
// nk
white-space: nowrap;
overflow: hidden;
@ -595,7 +595,7 @@
.qtyUomName {
font-size: 15px;
font-weight: 600;
font-family: 'Gilroy';
font-family: "Gilroy";
text-align: center;
}
@ -603,7 +603,7 @@
.qtyUomName-itemCard {
font-size: 15px;
font-weight: 600;
font-family: 'Gilroy';
font-family: "Gilroy";
text-align: center;
white-space: nowrap;
overflow: hidden;
@ -1010,7 +1010,7 @@
flex-direction: column;
gap: 0.5rem;
padding: 1rem;
font-family: 'Inter', sans-serif;
font-family: "Inter", sans-serif;
letter-spacing: -0.5px;
@media (max-width: 500px) {
@ -1023,7 +1023,7 @@
line-height: 1.25rem;
font-weight: 500;
color: #1f2937;
font-family: 'Inter', ui-sans-serif, system-ui, sans-serif;
font-family: "Inter", ui-sans-serif, system-ui, sans-serif;
@media (max-width: 500px) {
font-size: 0.7rem;
@ -1036,7 +1036,7 @@
justify-content: space-between;
width: 100%;
font-weight: 500;
font-family: 'Inter', ui-sans-serif, system-ui, sans-serif;
font-family: "Inter", ui-sans-serif, system-ui, sans-serif;
}
.card4Price {
@ -1059,7 +1059,7 @@
padding: 0.375rem 0.75rem;
font-weight: 500;
border-radius: 50px;
font-family: 'Inter', ui-sans-serif, system-ui, sans-serif;
font-family: "Inter", ui-sans-serif, system-ui, sans-serif;
}
}
@ -1139,7 +1139,7 @@
transition:
background-color 0.2s ease,
color 0.2s ease;
font-family: 'Poppins', sans-serif;
font-family: "Poppins", sans-serif;
&:hover {
background-color: #dce7ff;
@ -1220,7 +1220,7 @@
row-gap: 0.5rem;
// position: fixed;
// bottom: 10px;
font-family: 'Poppins';
font-family: "Poppins";
font-size: 14px;
color: #000;
font-weight: 400;
@ -1283,7 +1283,7 @@
color: #fff;
font-size: 16px;
font-weight: 400;
font-family: 'Poppins';
font-family: "Poppins";
display: flex;
align-items: center;
gap: 4px;
@ -1324,7 +1324,7 @@
background-color: #4caf50;
color: #fff;
font-size: 14px;
font-family: 'Poppins';
font-family: "Poppins";
border-radius: 6px;
cursor: pointer;
}
@ -1338,7 +1338,7 @@
}
.blukSlotTbody {
font-family: 'Poppins', sans-serif;
font-family: "Poppins", sans-serif;
text-align: center;
}
@ -1428,7 +1428,7 @@
.slot-price {
font-weight: 500;
font-family: 'Poppins';
font-family: "Poppins";
font-size: 0.8rem;
> div:nth-child(1) {
@ -1478,7 +1478,7 @@
.bookingModalBulk {
min-width: max-content !important;
max-width: 90vw !important;
font-family: 'Poppins' !important;
font-family: "Poppins" !important;
.ant-modal-content {
padding: 24px !important;
@ -1495,6 +1495,9 @@
min-width: 60vw;
overflow: auto;
max-width: 90vw;
@media (max-width: 600px) {
max-width: 83vw;
}
}
.bulk-submit-btn {
@ -1507,7 +1510,7 @@
width: max-content;
height: max-content;
padding: 9px 16px;
font-family: 'Poppins', sans-serif;
font-family: "Poppins", sans-serif;
font-size: 14px;
font-weight: 400;
border-radius: 6px;
@ -1524,6 +1527,10 @@
align-items: center;
display: flex;
padding: 2px 5px;
@media (max-width: 768px) {
flex-wrap: wrap;
gap: 6px;
}
}
.SportsSlotHeader1 {
@ -1531,7 +1538,7 @@
align-items: center;
display: flex;
font-size: 18px;
font-family: 'Poppins';
font-family: "Poppins";
font-weight: 500;
.CiShopIcon {
@ -1546,7 +1553,7 @@
}
p {
font-family: 'Poppins';
font-family: "Poppins";
font-weight: 400;
font-size: 16px;
}
@ -1566,6 +1573,10 @@
background: #ffffff;
margin-bottom: 8px;
gap: 2rem;
@media (max-width: 600px) {
flex-wrap: wrap;
gap: 10px;
}
}
.sports-slot-toggle {
@ -1586,7 +1597,7 @@
cursor: pointer;
transition: all 0.2s ease;
min-width: 90px;
font-family: 'Poppins', sans-serif;
font-family: "Poppins", sans-serif;
&:hover {
background: rgba(13, 110, 253, 0.1);
@ -1656,6 +1667,9 @@
gap: 12px;
min-width: 300px;
justify-content: center;
@media (max-width: 600px) {
min-width: 280px;
}
}
.bookingSportSlot {
@ -1667,7 +1681,7 @@
color: #495057;
min-width: 120px;
text-align: center;
font-family: 'Poppins', sans-serif;
font-family: "Poppins", sans-serif;
width: 100%;
transition: all 0.3s;
scrollbar-width: thin;
@ -1677,6 +1691,9 @@
&:hover {
border-color: #3793f5;
}
@media (max-width: 600px) {
padding: 2px 2px;
}
}
.slotproductName {
@ -1708,13 +1725,17 @@
display: flex;
flex-wrap: wrap;
gap: 10px;
@media (max-width: 600px) {
gap: 4px;
justify-content: space-between;
width: 100%;
}
}
.slotTimingSelect {
padding: 8px 8px;
border-radius: 6px;
cursor: pointer;
transition: all 0.2s ease;
border: 1px solid #ddd;
text-align: center;
width: 145px;
@ -1723,16 +1744,15 @@
flex-direction: column;
align-items: center;
justify-content: center;
@media (max-width: 600px) {
width: 130px;
height: 95px;
}
&.available {
background-color: #008000;
color: #fff;
border-color: #4caf50;
&:hover {
background-color: #ffffff;
color: #008000;
}
}
&.booked {
@ -1740,10 +1760,6 @@
color: #ffffff;
border-color: #f44336;
cursor: not-allowed;
&:hover {
color: #c90b0b;
background-color: #ffff;
}
}
&.incart {
@ -1756,10 +1772,6 @@
background-color: #ffe8bf;
color: #5f4204;
border-color: #ff9800;
&:hover {
background-color: #5f4204;
color: #ffe8bf;
}
}
&.blocked {
@ -1767,10 +1779,6 @@
color: #ffffff;
border-color: #31a0f0;
cursor: not-allowed;
// &:hover{
// color:#148498;
// background-color: #fff;
// }
}
&.selected {
@ -1920,7 +1928,7 @@
.booked-details-container {
padding: 8px;
font-family: 'Poppins', sans-serif;
font-family: "Poppins", sans-serif;
.booked-details-title {
font-size: 24px;
@ -2051,7 +2059,7 @@
font-weight: 400;
cursor: pointer;
transition: all 0.3s ease;
font-family: 'Poppins', sans-serif;
font-family: "Poppins", sans-serif;
min-width: 70px;
&:disabled {
@ -2101,7 +2109,7 @@
font-weight: 500;
cursor: pointer;
transition: all 0.3s ease;
font-family: 'Poppins', sans-serif;
font-family: "Poppins", sans-serif;
min-width: 120px;
box-shadow: 0 2px 4px rgba(55, 147, 245, 0.3);
@ -2127,7 +2135,7 @@
.all-bookings-container {
padding: 8px;
font-family: 'Poppins', sans-serif;
font-family: "Poppins", sans-serif;
.all-bookings-title {
font-size: 22px;
@ -2215,7 +2223,7 @@
font-weight: 500;
cursor: pointer;
transition: all 0.3s ease;
font-family: 'Poppins', sans-serif;
font-family: "Poppins", sans-serif;
min-width: 60px;
&:disabled {

View File

@ -48,6 +48,10 @@
svg {
display: flex;
transition: all 0.2s ease-in-out;
&:hover {
color: #1292ee !important;
}
}
@media (max-width: 1000px) {
@ -105,13 +109,37 @@
display: flex;
align-items: center;
gap: 0.1rem;
.RiVerifiedBadgeFill {
transition: all 0.2s ease-in-out;
height: 37px;
width: 37px;
padding: 6px 4px;
border-radius: 0.5rem;
&:hover {
color: #1292ee !important;
}
}
.BSBillingNavBar1-AllIcons {
color: #ffffff !important;
&:hover {
color: #1292ee !important;
}
}
.bs-membership__icon-btn {
display: flex;
align-items: center;
justify-content: center;
svg {
transition: all 0.2s ease-in-out;
color: #ffffff !important;
}
&:hover {
svg {
color: #1292ee !important;
}
}
}
}
@ -155,30 +183,33 @@
color: #6b7280 !important;
cursor: pointer;
// background-color: #2563eb;
height: 41px;
width: 41px;
height: 40px;
width: 40px;
transition: all 0.2s ease-in-out;
svg {
color: #ffffff !important;
}
&:hover {
background-color: #eff6ff;
color: #2563eb;
color: #1292ee;
svg {
color: #1292ee !important;
}
}
}
.FaTruckIconHold {
padding: 10px 7px;
border-radius: 0.5rem;
color: #6b7280;
color: #ffffff;
cursor: pointer;
width: 40px !important;
height: 40px !important;
// background-color: #2563eb;
transition: all 0.2s ease-in-out;
&:hover {
background-color: #eff6ff;
color: #2563eb;
color: #1292ee;
}
}
@ -194,6 +225,7 @@
// background-color: #2563eb;
height: 41px;
width: 41px;
transition: all 0.2s ease-in-out;
.BSBillingNav-icon {
height: 22px !important;
@ -201,8 +233,7 @@
}
&:hover {
background-color: #eff6ff;
color: #2563eb;
color: #1292ee;
}
}
@ -245,18 +276,31 @@
}
.BsNavbarUser {
color: #6b7280;
color: #ffffff;
font-size: 1.3rem;
cursor: pointer;
position: relative;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.2s ease-in-out;
&:hover {
color: #1292ee;
}
}
.DropDownsCustomer {
display: flex;
gap: 2px;
position: relative;
align-items: center;
.BSBillingNav-icon {
color: #ffffff !important;
transition: all 0.2s ease-in-out;
&:hover {
color: #1292ee !important;
}
}
.ant-select {
@ -272,6 +316,20 @@
}
}
.DropDownsCustomerClose {
color: #c2c2c2;
position: absolute;
right: 60px;
font-weight: 500;
cursor: pointer;
&:hover {
color: #727272;
}
@media (max-width: 768px) {
right: 30px;
}
}
.DropDownsCustomer.always-visible {
.ant-select {
width: 7rem !important;
@ -350,7 +408,7 @@
}
svg {
color: #6b7280;
color: #ffffff !important;
display: flex;
}

View File

@ -34,7 +34,7 @@ body {
}
@media (max-width: 500px) {
top: 3.1rem;
top: 2.9rem;
}
}
@ -288,7 +288,7 @@ body {
justify-content: space-between;
// justify-content: space-between;
width: 100%;
padding: 0.75rem 1.5rem;
padding: 8px 8px;
background-color: #1e2536;
font-family: "Inter", ui-sans-serif, system-ui, sans-serif !important;

View File

@ -173,7 +173,7 @@
justify-content: center;
border-radius: 4px;
color: #fff;
font-family: 'Poppins';
font-family: "Poppins";
font-weight: 600;
}
@ -185,7 +185,7 @@
justify-content: center;
border-radius: 4px;
color: #fff;
font-family: 'Poppins';
font-family: "Poppins";
font-weight: 600;
}
@ -197,7 +197,7 @@
justify-content: center;
border-radius: 4px;
color: #fff;
font-family: 'Poppins';
font-family: "Poppins";
font-weight: 600;
}
@ -210,7 +210,7 @@
height: max-content;
min-height: 8rem;
border-radius: 8px;
font-family: 'Poppins';
font-family: "Poppins";
width: max-content;
min-width: 250px;
@ -256,7 +256,7 @@
display: flex;
flex-direction: column;
gap: 10px;
font-family: 'Poppins';
font-family: "Poppins";
padding: 0.7rem 1rem;
margin: 1vw 2vh;
background-color: #e0e0e0;
@ -319,7 +319,6 @@
}
@media (min-width: 280px) and (max-width: 499px) {
//srinath
.ant-picker-dropdown .ant-picker-panel-container .ant-picker-panels {
width: 50vw !important;
@ -746,7 +745,7 @@
padding: 10px 16px;
font-size: 16px;
text-transform: capitalize;
font-family: 'Gilroy';
font-family: "Gilroy";
font-weight: 500;
cursor: pointer;
background-color: #20a720;
@ -800,7 +799,7 @@
.RetailDashboard-Master {
width: 100%;
font-family: 'Poppins' !important;
font-family: "Poppins" !important;
display: flex;
flex-direction: column;
align-items: flex-start;
@ -1113,7 +1112,8 @@
}
.detailsProductsCard {
background: linear-gradient(90deg,
background: linear-gradient(
90deg,
rgb(255, 255, 255) 0%,
rgba(143, 209, 142, 0.71) 4%,
rgb(255, 255, 255) 7%,
@ -1150,7 +1150,8 @@
rgb(255, 255, 255) 97%,
rgb(255, 255, 255) 97%,
rgba(143, 209, 142, 0.71) 100%,
rgb(76, 175, 80) 100%);
rgb(76, 175, 80) 100%
);
background-color: #ffffff;
width: 95px;
height: 85px;
@ -1257,7 +1258,7 @@
width: 100%;
gap: 10px;
margin-top: 2rem;
font-family: 'Poppins';
font-family: "Poppins";
}
.tltExpense {
@ -1389,7 +1390,7 @@
cursor: pointer;
transition: background 0.2s;
margin-left: 8px;
font-family: 'Poppins';
font-family: "Poppins";
svg {
font-size: 18px;
@ -1451,7 +1452,7 @@
box-shadow 0.18s;
// min-width: 130px;
position: relative;
font-family: 'Poppins';
font-family: "Poppins";
justify-content: space-between;
svg {
@ -1605,9 +1606,9 @@
flex: 1;
padding: 16px 2px;
text-align: center;
font-weight: 500;
font-weight: 600;
-webkit-text-stroke-width: 0.2px;
font-size: 1.8rem;
font-size: 1.7rem;
display: flex;
flex-direction: column;
align-items: center;
@ -1627,15 +1628,15 @@
}
.todaySnapshotBox.orders {
color: #1976d2;
color: #3b3b3b;
}
.todaySnapshotBox.customers {
color: #1976d2;
color: #3b3b3b;
}
.todaySnapshotBox.pending {
color: #1976d2;
color: #3b3b3b;
}
.quickActionsRow {
@ -2180,7 +2181,6 @@
// Responsive
@media (max-width: 1024px) {
.dashboardMainGrid,
.dashboardSecondaryGrid {
flex-direction: column;
@ -2465,7 +2465,7 @@
display: flex;
align-items: center;
gap: 8px;
font-family: 'Inter', sans-serif;
font-family: "Inter", sans-serif;
width: 100%;
transition: background 0.2s;
}
@ -2680,7 +2680,7 @@
}
.ai-suggestion::before {
content: '';
content: "";
font-size: 18px;
margin-right: 8px;
color: #f7b731;
@ -2712,7 +2712,7 @@
div {
color: #2a2a2a;
font-family: 'Inter', sans-serif;
font-family: "Inter", sans-serif;
font-weight: 600;
font-size: 14px;
text-transform: uppercase;
@ -2726,7 +2726,7 @@
background-color: #e53935;
color: #fff;
cursor: pointer;
font-family: 'Poppins';
font-family: "Poppins";
border-radius: 6px;
font-weight: 500;
display: flex;

View File

@ -5,3 +5,28 @@
}
// .ant-checkbox .ant-checkbox-inner:after
.empAccessreportTable {
scrollbar-width: thin;
}
// Disable all Ant Design table animations and hover effects
.ant-table,
.ant-table * {
transition: none !important;
animation: none !important;
animation-duration: 0s !important;
transition-duration: 0s !important;
}
.ant-table-tbody > tr:hover > td,
.ant-table-tbody > tr:hover,
.ant-table-row:hover > td,
.ant-table-row:hover {
background: transparent !important;
background-color: transparent !important;
}
.ant-table-cell-row-hover {
background: transparent !important;
background-color: transparent !important;
}

View File

@ -5,7 +5,7 @@
}
.cardpage-title {
font-family: 'Barlow Condensed', sans-serif;
font-family: "Barlow Condensed", sans-serif;
font-size: 26px;
text-transform: uppercase;
}
@ -101,7 +101,7 @@
align-items: flex-start;
justify-content: flex-start;
flex-wrap: wrap;
font-family: 'Manrope', sans-serif;
font-family: "Manrope", sans-serif;
text-transform: capitalize;
font-weight: 600;
// font-size: 1rem;
@ -217,7 +217,7 @@
align-items: flex-start;
justify-content: flex-start;
flex-wrap: wrap;
font-family: 'Manrope', sans-serif;
font-family: "Manrope", sans-serif;
text-transform: capitalize;
font-weight: 600;
// font-size: 1rem;
@ -329,7 +329,7 @@
align-items: flex-start;
justify-content: flex-start;
flex-wrap: wrap;
font-family: 'Manrope', sans-serif;
font-family: "Manrope", sans-serif;
text-transform: capitalize;
font-weight: 600;
// font-size: 1rem;
@ -360,10 +360,10 @@
flex-direction: row;
justify-content: space-between;
background: #f3f3f3;
padding: '20px';
padding: "20px";
height: 35px;
align-items: center;
cursor: 'pointer';
cursor: "pointer";
}
.ProVariantCard-dis {
@ -371,13 +371,12 @@
flex-direction: row;
justify-content: space-between;
background: #f3f3f3;
padding: '20px';
padding: "20px";
height: 35px;
align-items: center;
pointer-events: none;
}
.selfBookCardBook {
display: grid;
grid-template-columns: 1fr 1fr;
@ -413,12 +412,10 @@
background-color: #ffebee;
border-color: #f44336;
}
}
}
}
.ProVariantCardSports {
flex-direction: column;
display: flex;
@ -428,9 +425,9 @@
height: max-content;
margin-top: 10px;
border-radius: 6px;
background-color: #e8f5e8;
border: 1px solid #4caf50;
color: #26922a;
background-color: #008000;
border: 1px solid #008000;
color: #ffffff;
text-align: center;
gap: 2px;
width: 48%;
@ -444,11 +441,11 @@
}
.ProVariantCardSports:hover {
background-color: #d9fcd9;
background-color: #ffffff;
cursor: pointer;
color: #008000;
}
.ProVariantCardSports-dis {
display: flex;
align-items: center;
@ -457,9 +454,9 @@
flex-direction: column;
margin-top: 10px;
border-radius: 6px;
background-color: #ffebee;
border: 1px solid #d83126;
color: #f44336;
background-color: #f02626f3;
border: 1px solid #f02626f3;
color: #ffffff;
text-align: center;
white-space: nowrap;
gap: 2px;
@ -485,7 +482,6 @@
font-family: "Poppins";
}
.KioskCard-card {
position: relative;
@ -501,7 +497,6 @@
&:hover,
:active {
background-color: red !important;
}
}
}
@ -567,7 +562,6 @@
font-family: "Poppins";
position: relative;
&.active {
background: #007bff;
color: #fff;
@ -627,11 +621,9 @@
}
}
.BTNslot {
display: flex;
align-items: center;
}
.BookingSlotDateGroup {

View File

@ -111,7 +111,6 @@
@media (max-width: 500px) {
height: max-content;
margin-bottom: 0;
}
}
@ -192,7 +191,6 @@
}
.address-type-section {
// padding: 12px;
// background-color: #f8fafc;
// border-radius: 8px;
@ -588,9 +586,6 @@
padding: 8px;
color: white;
cursor: pointer;
}
.lowStock-SaveButton:hover {
background-color: #13c12a;
@ -635,3 +630,14 @@
overflow: hidden !important;
}
}
.addTaxinputDrawer {
display: flex;
align-items: flex-start;
flex-direction: column;
gap: 2rem;
}
.productlistSearchDiv {
flex-direction: column;
}

View File

@ -292,3 +292,22 @@ a {
font-family: VAR(--PARA_FONT_FAMILY);
color: VAR(--ERROR_COLOR);
}
/* Disable all Ant Design table animations and hover effects */
.ant-table,
.ant-table *,
.ant-table-wrapper * {
transition: none !important;
animation: none !important;
animation-duration: 0s !important;
transition-duration: 0s !important;
}
.ant-table-tbody > tr:hover > td,
.ant-table-tbody > tr:hover,
.ant-table-row:hover > td,
.ant-table-row:hover,
.ant-table-cell-row-hover {
background: transparent !important;
background-color: transparent !important;
}

View File

@ -197,7 +197,7 @@ const fetchComponent = async () => {
sessionStore('userName', 'Karthiga');
sessionStorage.setItem(
'auth',
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiOTY5ODgzODk2NiIsIlBhc3N3b3JkIjoiWkB6MTIzNCIsImF1ZCI6WyJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTIiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTQiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiXSwiZXhwIjoxNzYzMDYwNjE4LCJpc3MiOiJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMDEifQ.nN96UzT0oV1Ssn5WHIMpTwYFO1N3ifu81HLXwE-SvB8'
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiOTY5ODgzODk2NiIsIlBhc3N3b3JkIjoiWkB6MTIzNCIsImF1ZCI6WyJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTIiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTQiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiXSwiZXhwIjoxNzYzMTQ1MzUwLCJpc3MiOiJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMDEifQ.6nO0-3OBKfiBafld-gWIccjG-7yGuYA3q-ZRxfultu8'
);
// sessionStore('AppId', 1);
// sessionStore('BranchId', 121);
@ -263,7 +263,7 @@ const fetchHomeComponent = async () => {
sessionStore('userName', 'Karthiga');
sessionStorage.setItem(
'auth',
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiOTY5ODgzODk2NiIsIlBhc3N3b3JkIjoiWkB6MTIzNCIsImF1ZCI6WyJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTIiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTQiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiXSwiZXhwIjoxNzYzMDYwNjE4LCJpc3MiOiJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMDEifQ.nN96UzT0oV1Ssn5WHIMpTwYFO1N3ifu81HLXwE-SvB8'
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiOTY5ODgzODk2NiIsIlBhc3N3b3JkIjoiWkB6MTIzNCIsImF1ZCI6WyJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTIiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTQiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiXSwiZXhwIjoxNzYzMTQ1MzUwLCJpc3MiOiJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMDEifQ.6nO0-3OBKfiBafld-gWIccjG-7yGuYA3q-ZRxfultu8'
);
// sessionStore('AppId', 1);
// sessionStore('BranchId', 121);