Turbo add style and combo sales page Design

This commit is contained in:
Your Name 2026-01-29 10:15:06 +05:30
parent aa4b734b25
commit 0eae195492
18 changed files with 543 additions and 408 deletions

View File

@ -565,6 +565,7 @@ Button[disabled] {
background: #fafafa7a; background: #fafafa7a;
//vicky //vicky
padding: 1px 8px !important; padding: 1px 8px !important;
border: 0.5px solid rgb(235, 235, 235);
} }
.ant-input-affix-wrapper > input.ant-input { .ant-input-affix-wrapper > input.ant-input {
@ -967,7 +968,6 @@ Button[disabled] {
} }
} }
// writed by sree lowStock animated // writed by sree lowStock animated
.stock-alert-animation { .stock-alert-animation {
@ -976,8 +976,13 @@ Button[disabled] {
cursor: pointer; cursor: pointer;
} }
@keyframes blink { @keyframes blink {
0% { opacity: 1; } 0% {
50% { opacity: 0; } opacity: 1;
100% { opacity: 1; } }
50% {
opacity: 0;
}
100% {
opacity: 1;
}
} }

View File

@ -2,16 +2,35 @@ import React, { useState, useEffect, useRef } from 'react';
import { useNavigate, useLocation } from 'react-router-dom'; import { useNavigate, useLocation } from 'react-router-dom';
import { useSelector } from 'react-redux'; import { useSelector } from 'react-redux';
import { import {
FaBars, FaThLarge, FaHome, FaCog, FaChartBar, FaFileAlt, FaBars,
FaMobileAlt, FaSignOutAlt, FaSignInAlt, FaArrowRight, FaThLarge,
FaCaretRight FaHome,
FaCog,
FaChartBar,
FaFileAlt,
FaMobileAlt,
FaSignOutAlt,
FaSignInAlt,
FaArrowRight,
FaCaretRight,
} from 'react-icons/fa'; } from 'react-icons/fa';
import { MdSettings, MdOutlineReport, MdOutlineHome, MdOutlineKeyboardArrowDown, MdOutlineKeyboardArrowRight, } from 'react-icons/md'; import {
MdSettings,
MdOutlineReport,
MdOutlineHome,
MdOutlineKeyboardArrowDown,
MdOutlineKeyboardArrowRight,
} from 'react-icons/md';
import { BiLogOut, BiLogIn } from 'react-icons/bi'; import { BiLogOut, BiLogIn } from 'react-icons/bi';
import { AiOutlineAppstore, AiOutlineSetting, AiOutlineBarChart, AiOutlineFileText } from 'react-icons/ai'; import {
AiOutlineAppstore,
AiOutlineSetting,
AiOutlineBarChart,
AiOutlineFileText,
} from 'react-icons/ai';
import { GiHamburgerMenu } from 'react-icons/gi'; import { GiHamburgerMenu } from 'react-icons/gi';
import './SideMenuPozo.scss'; import './SideMenuPozo.scss';
import { FaCaretDown } from "react-icons/fa"; import { FaCaretDown } from 'react-icons/fa';
import { useDispatch } from 'react-redux'; import { useDispatch } from 'react-redux';
import { useContext } from 'react'; import { useContext } from 'react';
import { AuthContext } from '../../AuthContext'; import { AuthContext } from '../../AuthContext';
@ -45,68 +64,97 @@ import {
import { ChangeTotalAmount } from '../../Features/ExteraCharges/ExtraCharges'; import { ChangeTotalAmount } from '../../Features/ExteraCharges/ExtraCharges';
import * as Offer from '../../Features/Offer/Offer'; import * as Offer from '../../Features/Offer/Offer';
import { FiMenu } from 'react-icons/fi'; import { FiMenu } from 'react-icons/fi';
import POZOMIND from "../../Images/PozomindWLogo.png"; import POZOMIND from '../../Images/PozomindWLogo.png';
import { ChangeFullFreeProductList, changeFullOfferAppliedProducts, changeLoyaltyConsumedQuantities } from '../../Features/Offer/Offernew/BookingOffernew'; import {
ChangeFullFreeProductList,
changeFullOfferAppliedProducts,
changeLoyaltyConsumedQuantities,
} from '../../Features/Offer/Offernew/BookingOffernew';
const subDirectory = import.meta.env.BASE_URL; const subDirectory = import.meta.env.BASE_URL;
// Filter functions (copied from AppPage.jsx) // Filter functions (copied from AppPage.jsx)
function filterMenuItems(menu, configList) { function filterMenuItems(menu, configList) {
if (!Array.isArray(menu)) return []; if (!Array.isArray(menu)) return [];
return menu.filter((item) => { return menu
.filter((item) => {
if (!item) return false; if (!item) return false;
if (item.label === "Sign Out") return true; if (item.label === 'Sign Out') return true;
// For nested children, filter recursively // For nested children, filter recursively
let filteredChildren = item.children ? filterMenuItems(item.children, configList) : undefined; let filteredChildren = item.children
? filterMenuItems(item.children, configList)
: undefined;
// Employee access: ConfigName // Employee access: ConfigName
const config = configList?.find( const config = configList?.find(
(config) => config.ConfigName === item.label && config.ReadAccess === 'Y' (config) =>
config.ConfigName === item.label && config.ReadAccess === 'Y'
); );
// If this item or any of its children are accessible, include it // If this item or any of its children are accessible, include it
return (config || (filteredChildren && filteredChildren.length > 0)); return config || (filteredChildren && filteredChildren.length > 0);
}).map(item => ({ })
.map((item) => ({
...item, ...item,
children: item.children ? filterMenuItems(item.children, configList) : undefined children: item.children
? filterMenuItems(item.children, configList)
: undefined,
})); }));
} }
function filterSadminUserMenuItems(menu, configList) { function filterSadminUserMenuItems(menu, configList) {
if (!Array.isArray(menu)) return []; if (!Array.isArray(menu)) return [];
return menu.filter((item) => { return menu
.filter((item) => {
if (!item) return false; if (!item) return false;
if (item.label === "Sign Out") return true; if (item.label === 'Sign Out') return true;
let filteredChildren = item.children ? filterSadminUserMenuItems(item.children, configList) : undefined; let filteredChildren = item.children
? filterSadminUserMenuItems(item.children, configList)
: undefined;
// Super admin user access: MenuName // Super admin user access: MenuName
const config = configList?.find( const config = configList?.find(
(config) => config.MenuName === item.label && config.ReadAccess === 'Y' (config) => config.MenuName === item.label && config.ReadAccess === 'Y'
); );
return (config || (filteredChildren && filteredChildren.length > 0)); return config || (filteredChildren && filteredChildren.length > 0);
}).map(item => ({ })
.map((item) => ({
...item, ...item,
children: item.children ? filterSadminUserMenuItems(item.children, configList) : undefined children: item.children
? filterSadminUserMenuItems(item.children, configList)
: undefined,
})); }));
} }
// Capitalize helper // Capitalize helper
function capitalizeWords(str) { function capitalizeWords(str) {
if (typeof str !== 'string') return ''; if (typeof str !== 'string') return '';
return str.replace(/\w\S*/g, (txt) => txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase()); return str.replace(
/\w\S*/g,
(txt) => txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase()
);
} }
// Recursively capitalize all menu item labels, filtering out falsy items and items without a label // Recursively capitalize all menu item labels, filtering out falsy items and items without a label
function capitalizeMenuLabels(items) { function capitalizeMenuLabels(items) {
return (items || []) return (items || [])
.filter(item => item && typeof item.label === 'string' && item.label.trim() !== '') .filter(
.map(item => ({ (item) =>
item && typeof item.label === 'string' && item.label.trim() !== ''
)
.map((item) => ({
...item, ...item,
label: capitalizeWords(item.label), label: capitalizeWords(item.label),
children: item.children ? capitalizeMenuLabels(item.children) : undefined children: item.children ? capitalizeMenuLabels(item.children) : undefined,
})); }));
} }
const SideMenuPozo = ({ items = [] }) => { const SideMenuPozo = ({ items = [] }) => {
const { freeProductsCount, setFreeProductsCount, UserType, Access, SadminuserAccess } = useContext(AuthContext); const {
freeProductsCount,
setFreeProductsCount,
UserType,
Access,
SadminuserAccess,
} = useContext(AuthContext);
const dispatch = useDispatch(); const dispatch = useDispatch();
const navigate = useNavigate(); const navigate = useNavigate();
const location = useLocation(); const location = useLocation();
@ -120,7 +168,6 @@ const SideMenuPozo = ({ items = [] }) => {
const DineinDefault = useSelector(GlobalDineinDefault); const DineinDefault = useSelector(GlobalDineinDefault);
const [collapse, setCollapse] = useState(false); const [collapse, setCollapse] = useState(false);
useEffect(() => { useEffect(() => {
const handleResize = () => { const handleResize = () => {
setCollapse(window.innerWidth < 768); setCollapse(window.innerWidth < 768);
@ -147,7 +194,6 @@ const SideMenuPozo = ({ items = [] }) => {
return () => document.removeEventListener('mousedown', handleClickOutside); return () => document.removeEventListener('mousedown', handleClickOutside);
}, []); }, []);
useEffect(() => { useEffect(() => {
const handleClickOutside = (event) => { const handleClickOutside = (event) => {
if (window.innerWidth < 768) { if (window.innerWidth < 768) {
@ -157,8 +203,8 @@ const SideMenuPozo = ({ items = [] }) => {
} }
}; };
document.addEventListener("mousedown", handleClickOutside); document.addEventListener('mousedown', handleClickOutside);
return () => document.removeEventListener("mousedown", handleClickOutside); return () => document.removeEventListener('mousedown', handleClickOutside);
}, []); }, []);
// Debug current pathname // Debug current pathname
@ -172,7 +218,7 @@ const SideMenuPozo = ({ items = [] }) => {
// Check if any child of this item is selected (for parent menu highlighting) // Check if any child of this item is selected (for parent menu highlighting)
const hasSelectedChild = (item) => { const hasSelectedChild = (item) => {
if (!item.children) return false; if (!item.children) return false;
return item.children.some(child => { return item.children.some((child) => {
if (child.children) { if (child.children) {
return hasSelectedChild(child); return hasSelectedChild(child);
} }
@ -216,7 +262,7 @@ const SideMenuPozo = ({ items = [] }) => {
dispatch(ChangeTotalAmount([])); dispatch(ChangeTotalAmount([]));
dispatch(ChangeFullFreeProductList([])); dispatch(ChangeFullFreeProductList([]));
dispatch(changeFullOfferAppliedProducts([])); dispatch(changeFullOfferAppliedProducts([]));
dispatch(changeLoyaltyConsumedQuantities({})) dispatch(changeLoyaltyConsumedQuantities({}));
} }
if (e == `${subDirectory}sales`) { if (e == `${subDirectory}sales`) {
dispatch(changeTipAmount(0)); dispatch(changeTipAmount(0));
@ -240,7 +286,7 @@ const SideMenuPozo = ({ items = [] }) => {
dispatch(ChangeFullFreeProductList([])); dispatch(ChangeFullFreeProductList([]));
dispatch(changeFullOfferAppliedProducts([])); dispatch(changeFullOfferAppliedProducts([]));
dispatch(ChangeTotalAmount([])); dispatch(ChangeTotalAmount([]));
dispatch(changeLoyaltyConsumedQuantities({})) dispatch(changeLoyaltyConsumedQuantities({}));
} }
if (e == `${subDirectory}saleslayouts/print-selection`) { if (e == `${subDirectory}saleslayouts/print-selection`) {
dispatch(changeSelectedPrintdummyData(true)); dispatch(changeSelectedPrintdummyData(true));
@ -251,7 +297,7 @@ const SideMenuPozo = ({ items = [] }) => {
const handleMenuClick = (item, parentKeys = [], event, level = 0) => { const handleMenuClick = (item, parentKeys = [], event, level = 0) => {
if (item.children) { if (item.children) {
if (openKeys.includes(item.key)) { if (openKeys.includes(item.key)) {
setOpenKeys(openKeys.filter(k => k !== item.key)); setOpenKeys(openKeys.filter((k) => k !== item.key));
const newPositions = { ...dropdownPosition }; const newPositions = { ...dropdownPosition };
delete newPositions[item.key]; delete newPositions[item.key];
setDropdownPosition(newPositions); setDropdownPosition(newPositions);
@ -264,7 +310,7 @@ const SideMenuPozo = ({ items = [] }) => {
newOpenKeys = []; newOpenKeys = [];
} else { } else {
// Keep only the parent chain, remove siblings // Keep only the parent chain, remove siblings
newOpenKeys = openKeys.filter(key => { newOpenKeys = openKeys.filter((key) => {
// Keep if it's in the parent chain // Keep if it's in the parent chain
return parentKeys.includes(key); return parentKeys.includes(key);
}); });
@ -277,50 +323,53 @@ const SideMenuPozo = ({ items = [] }) => {
if (level === 0) { if (level === 0) {
position = { position = {
top: rect.top, top: rect.top,
left: collapsed ? rect.right + 1 : 10 left: collapsed ? rect.right + 1 : 10,
}; };
} else { } else {
position = { position = {
top: rect.top, top: rect.top,
left: rect.right + 1 left: rect.right + 1,
}; };
} }
setDropdownPosition(prev => ({ ...prev, [item.key]: position })); setDropdownPosition((prev) => ({ ...prev, [item.key]: position }));
setOpenKeys([...newOpenKeys, item.key]); setOpenKeys([...newOpenKeys, item.key]);
} }
} else { } else {
if (DineinDefault && item.key == `${subDirectory}sales`) { if (DineinDefault && item.key == `${subDirectory}sales`) {
navigatefun(`${subDirectory}sales/dine-in`); navigatefun(`${subDirectory}sales/dine-in`);
setOpenKeys([]); setOpenKeys([]);
} } else {
else {
navigatefun(item.key); navigatefun(item.key);
setOpenKeys([]); setOpenKeys([]);
} }
} }
}; };
console.log(items, Access, "Employee items") console.log(items, Access, 'Employee items');
// Filter menu items based on access // Filter menu items based on access
let filteredMenuItems = (items || []).filter(Boolean); let filteredMenuItems = (items || []).filter(Boolean);
if (UserType === 'Employee' && Array.isArray(Access) && Access.length > 0) { if (UserType === 'Employee' && Array.isArray(Access) && Access.length > 0) {
filteredMenuItems = filterMenuItems(filteredMenuItems, Access); filteredMenuItems = filterMenuItems(filteredMenuItems, Access);
} else if (UserType === 'Super Admin User' && Array.isArray(SadminuserAccess) && SadminuserAccess.length > 0) { } else if (
filteredMenuItems = filterSadminUserMenuItems(filteredMenuItems, SadminuserAccess); UserType === 'Super Admin User' &&
Array.isArray(SadminuserAccess) &&
SadminuserAccess.length > 0
) {
filteredMenuItems = filterSadminUserMenuItems(
filteredMenuItems,
SadminuserAccess
);
} }
// Capitalize all labels, filter out items without a label // Capitalize all labels, filter out items without a label
const menuItemsWithCapitalizedLabels = capitalizeMenuLabels(filteredMenuItems); const menuItemsWithCapitalizedLabels =
capitalizeMenuLabels(filteredMenuItems);
const bottomKeys = ['Support', 'Settings', 'Download', 'Sign Out']; const bottomKeys = ['Support', 'Settings', 'Download', 'Sign Out'];
const bottomMenuItems = menuItemsWithCapitalizedLabels.filter(item => const bottomMenuItems = menuItemsWithCapitalizedLabels.filter((item) =>
bottomKeys.includes(item.label) bottomKeys.includes(item.label)
); );
const mainMenuItems = menuItemsWithCapitalizedLabels.filter(item => const mainMenuItems = menuItemsWithCapitalizedLabels.filter(
!bottomKeys.includes(item.label) (item) => !bottomKeys.includes(item.label)
); );
// Recursive render for menu and submenus // Recursive render for menu and submenus
const renderMenuItems = (items, parentKeys = [], level = 0) => ( const renderMenuItems = (items, parentKeys = [], level = 0) => (
@ -329,26 +378,45 @@ const SideMenuPozo = ({ items = [] }) => {
<div key={item.key}> <div key={item.key}>
<div <div
className={`${level > 0 ? 'dropdown-submenu-item' : 'menu-item'}${isSelected(item.key) || (level === 0 && hasSelectedChild(item)) ? ' selecteded' : ''}${isOpen(item.key) ? ' open' : ''}${item.children ? ' has-children' : ''}`} className={`${level > 0 ? 'dropdown-submenu-item' : 'menu-item'}${isSelected(item.key) || (level === 0 && hasSelectedChild(item)) ? ' selecteded' : ''}${isOpen(item.key) ? ' open' : ''}${item.children ? ' has-children' : ''}`}
onClick={(e) => { e.stopPropagation(); handleMenuClick(item, parentKeys, e, level); }} onClick={(e) => {
e.stopPropagation();
handleMenuClick(item, parentKeys, e, level);
}}
// style={{ paddingLeft: `${level * 10 + 1}px` }} // style={{ paddingLeft: `${level * 10 + 1}px` }}
> >
{item.icon && level === 0 && <span className='menu-icon' style={{ {item.icon && level === 0 && (
fontSize: collapse ? "1.5rem" : "" <span
}}>{item.icon}</span>} className="menu-icon"
{!collapse && <span className='menu-label'>{item.label}</span>} style={{
{!collapse && <span className='menu-labelDot'>{isDropdownItemSelected(item) ? '●' : ''}</span>} fontSize: collapse ? '1.5rem' : '',
}}
>
{item.icon}
</span>
)}
{!collapse && <span className="menu-label">{item.label}</span>}
{!collapse && (
<span className="menu-labelDot">
{isDropdownItemSelected(item) ? '●' : ''}
</span>
)}
{item.children && !collapse && ( {item.children && !collapse && (
<span className='menu-arrow'> <span className="menu-arrow">
{level === 0 ? <FaCaretRight size={14} /> : <MdOutlineKeyboardArrowRight />} {level === 0 ? (
<FaCaretRight size={14} />
) : (
<MdOutlineKeyboardArrowRight />
)}
</span> </span>
)} )}
</div> </div>
{item.children && isOpen(item.key) && !collapse && ( {item.children && isOpen(item.key) && !collapse && (
<div <div className={`dropdown-submenu${level > 0 ? ' nested' : ''}`}>
className={`dropdown-submenu${level > 0 ? ' nested' : ''}`} {renderMenuItems(
item.children,
> [...parentKeys, item.key],
{renderMenuItems(item.children, [...parentKeys, item.key], level + 1)} level + 1
)}
</div> </div>
)} )}
</div> </div>
@ -370,32 +438,45 @@ const SideMenuPozo = ({ items = [] }) => {
const isMobile = /Mobi|Android|iPhone|iPad|iPod/i.test(navigator.userAgent); const isMobile = /Mobi|Android|iPhone|iPad|iPod/i.test(navigator.userAgent);
const isAndroid = /Android/i.test(navigator.userAgent); const isAndroid = /Android/i.test(navigator.userAgent);
return ( return (
<div className={`SideMenuPozo-Master${collapse ? ' collapsed' : ''}`} ref={menuRef} <div
style={{ height: isMobile ? "88%" : "" }} className={`SideMenuPozo-Master${collapse ? ' collapsed' : ''}`}
ref={menuRef}
style={{ height: isMobile ? '88%' : '' }}
>
<div
style={{
width: '100%',
display: 'flex',
flexDirection: 'column',
gap: '6px',
height: '68vh',
overflow: 'auto',
}}
> >
<div style={{
width: "100%", display: "flex", flexDirection: "column", gap: "10px",
height: "68vh", overflow: "auto"
}}>
<div className="paypreLogoDiv"> <div className="paypreLogoDiv">
<div className="shopNameNav" style={{ width: "100%" }}> <div className="shopNameNav" style={{ width: '100%' }}>
<div style={{ <div
display: "flex", flexDirection: "row", style={{
alignItems: "center", gap: "4px", padding: "0px 10px", justifyContent: "space-between" display: 'flex',
}}> flexDirection: 'row',
alignItems: 'center',
gap: '4px',
padding: '0px 10px',
justifyContent: 'space-between',
}}
>
<FiMenu <FiMenu
size={26} size={26}
onClick={() => setCollapse((prev) => !prev)} onClick={() => setCollapse((prev) => !prev)}
style={{ cursor: 'pointer' }} style={{ cursor: 'pointer' }}
/> />
{collapse ? "" : {collapse ? (
''
) : (
// <img src={POZOMIND} alt="PozoMindLogo" width="80px" height={"45px"} className='PozoMindLogo' /> // <img src={POZOMIND} alt="PozoMindLogo" width="80px" height={"45px"} className='PozoMindLogo' />
<div> <div>PozoApp</div>
PozoApp )}
</div>
}
</div> </div>
{/* <div> */} {/* <div> */}
{/* <div>{branchName}</div> */} {/* <div>{branchName}</div> */}
@ -404,7 +485,7 @@ const SideMenuPozo = ({ items = [] }) => {
</div> </div>
</div> </div>
{/* Top Menu using PozoMenu */} {/* Top Menu using PozoMenu */}
<div className='top-menu'> <div className="top-menu">
<PozoMenu <PozoMenu
items={mainMenuItems} items={mainMenuItems}
mode="vertical" mode="vertical"
@ -413,16 +494,19 @@ const SideMenuPozo = ({ items = [] }) => {
style={{ style={{
width: collapse ? '60px' : '200px', width: collapse ? '60px' : '200px',
background: 'transparent', background: 'transparent',
boxShadow: 'none' boxShadow: 'none',
}} }}
onClick={handlePozoMenuClick} onClick={handlePozoMenuClick}
/> />
</div> </div>
</div> </div>
{/* Bottom Menu using PozoMenu */} {/* Bottom Menu using PozoMenu */}
<div className='bottom-menu' style={{ <div
height: isMobile ? "30vh" : "" className="bottom-menu"
}}> style={{
height: isMobile ? '30vh' : '',
}}
>
<PozoMenu <PozoMenu
items={bottomMenuItems} items={bottomMenuItems}
mode="vertical" mode="vertical"
@ -432,7 +516,7 @@ const SideMenuPozo = ({ items = [] }) => {
style={{ style={{
width: collapse ? '60px' : '200px', width: collapse ? '60px' : '200px',
background: 'transparent', background: 'transparent',
boxShadow: 'none' boxShadow: 'none',
}} }}
onClick={handlePozoMenuClick} onClick={handlePozoMenuClick}
/> />

View File

@ -16,12 +16,13 @@
background-color: #bdd4ff; background-color: #bdd4ff;
th { th {
padding: 5px 8px; padding: 4px 8px;
font-weight: 600; font-weight: 600;
color: #000; color: #000;
border: 1px solid #9c9c9c; border: 1px solid #9c9c9c;
font-size: 13.5px; font-size: 13px;
white-space: nowrap; white-space: nowrap;
font-family: 'Poppins', sans-serif !important;
} }
} }
} }
@ -30,7 +31,7 @@
> tr:last-child { > tr:last-child {
background-color: #e5d434 !important; background-color: #e5d434 !important;
position: sticky; position: sticky;
// bottom: 0; bottom: 0;
} }
tr { tr {
background-color: #fff; background-color: #fff;
@ -44,7 +45,7 @@
border: 1px solid #9c9c9c; border: 1px solid #9c9c9c;
color: #000; color: #000;
font-weight: 600; font-weight: 600;
font-size: 14px; font-size: 13px;
} }
} }
} }

View File

@ -3387,15 +3387,23 @@ const BSC1Payment = (props) => {
justifyContent: 'center', justifyContent: 'center',
}} }}
> >
<div> <div
style={{
display: 'flex',
alignItems: 'center',
gap: '4px',
whiteSpace: 'nowrap',
}}
>
<PozoReprintIcon className="BSC1Payment-icon" /> <PozoReprintIcon className="BSC1Payment-icon" />
Re-Print Re-Print
</div> <span
style={{ fontSize: '9px', letterSpacing: '0.5px' }}
<span style={{ fontSize: '9px', letterSpacing: '0.5px' }}> >
(Alt + R) (Alt + R)
</span> </span>
</div> </div>
</div>
</TooltipWrapper> </TooltipWrapper>
)} )}
</> </>
@ -3854,7 +3862,7 @@ const BSC1Payment = (props) => {
// color: '' ? '#52c41a' : '#1292EE', // color: '' ? '#52c41a' : '#1292EE',
}} }}
/>{' '} />{' '}
<p className="payOptionDecition"> Hold</p> {/* <p className="payOptionDecition"> Hold</p> */}
</div> </div>
</TooltipWrapper> </TooltipWrapper>
) )
@ -3912,13 +3920,13 @@ const BSC1Payment = (props) => {
style={{ style={{
backgroundColor: unpaidFlow ? '#52c41a' : '#1292EE', backgroundColor: unpaidFlow ? '#52c41a' : '#1292EE',
color: unpaidFlow ? '#ffffffff' : '#ffffffff', color: unpaidFlow ? '#ffffffff' : '#ffffffff',
height: '45px', height: '40px',
width: '45px', width: '40px',
borderRadius: '6px', borderRadius: '6px',
display: 'flex', display: 'flex',
alignItems: 'center', alignItems: 'center',
justifyContent: 'center', justifyContent: 'center',
padding: '4px 8px 14px 8px', padding: '4px 4px 16px 4px',
}} }}
> >
<PozoUnpaidIcon <PozoUnpaidIcon
@ -3934,7 +3942,7 @@ const BSC1Payment = (props) => {
display: 'flex', display: 'flex',
alignItems: 'center', alignItems: 'center',
justifyContent: 'center', justifyContent: 'center',
padding: '4px 8px 14px 8px', padding: '4px 6px 4px 6px',
}} }}
onClick={() => { onClick={() => {
(setUnpaidOpen(true), getUnpaiddatas()); (setUnpaidOpen(true), getUnpaiddatas());
@ -3984,6 +3992,7 @@ const BSC1Payment = (props) => {
justifyContent: 'center', justifyContent: 'center',
padding: '8px 8px 12px 8px', padding: '8px 8px 12px 8px',
}} }}
className="AsAmtCombo"
> >
{' '} {' '}
<PozoAdvanceIcon <PozoAdvanceIcon
@ -4427,7 +4436,7 @@ const BSC1Payment = (props) => {
}} }}
footer={false} footer={false}
children={ children={
<div style={{ height: '400px', overflow: 'scroll' }}> <div style={{ height: '400px', overflow: 'auto' }}>
<Tables <Tables
columns={columns} columns={columns}
data={TableData} data={TableData}

View File

@ -61,7 +61,7 @@ const BSNavBarEstimate = () => {
} }
isMobile={isMobile} isMobile={isMobile}
> >
<div className="EstimateButton" style={{ marginLeft: "5px" }}> <div className="EstimateButton">
<div> <div>
{EstBooking === 'Sales' && <PozoSalesIcon />} {EstBooking === 'Sales' && <PozoSalesIcon />}
{EstBooking === 'OvrAllEst' && <PozoEstimateIcon />} {EstBooking === 'OvrAllEst' && <PozoEstimateIcon />}

View File

@ -525,16 +525,22 @@ export default function BSCombo1() {
// className="BSC1-Master" comment by sree here this class name issues // className="BSC1-Master" comment by sree here this class name issues
className="ComboScreenPageTable" className="ComboScreenPageTable"
style={{ style={{
height: isMobile ? '40vh' : '80vh', height: isMobile ? '56vh' : '70vh',
overflow: 'auto', overflow: 'hidden',
// paddingBottom: '10rem',
}} }}
> >
<div className="BS1ComboTable"> {/* <div className="BS1ComboTable"> */}
<div
className={
ComboSalesBillTable
? 'BS1ComboTableComboSalesBillTable'
: 'BS1ComboTable'
}
>
{action ? ( {action ? (
<BranchTransferComponent /> <BranchTransferComponent />
// <ComboSalesBillTable />
) : ( ) : (
// <ComboSalesBillTable />
<> <>
{BookingBilling == 'Billing1' && <BSBillingTable1 />} {BookingBilling == 'Billing1' && <BSBillingTable1 />}
{BookingBilling == 'Billing2' && <BSBillingTable2 />} {BookingBilling == 'Billing2' && <BSBillingTable2 />}

View File

@ -3,7 +3,7 @@
height: 100vh; height: 100vh;
background-color: #d0d7bd; background-color: #d0d7bd;
overflow: hidden; overflow: hidden;
font-family: "Inter"; font-family: 'Inter';
letter-spacing: -0.3px; letter-spacing: -0.3px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@ -33,3 +33,9 @@
overflow: auto; overflow: auto;
} }
} }
@media (max-width: 500px) {
.combo-sales-bill-table {
max-height: calc(57vh - 10px) !important;
overflow: auto;
}
}

View File

@ -423,8 +423,10 @@ const RetailDashboard = () => {
EmpId: UserId, EmpId: UserId,
}; };
let response = await dispatch(getEmpAccess(data)).unwrap(); let response = await dispatch(getEmpAccess(data)).unwrap();
let datas = response?.data?.data?.[0]?.EmpAccessDetails?.filter( let datas = response?.data?.data?.[0]?.EmpAccessDetails?.filter((item) =>
(item) => ['Add Product', 'Product Receipt', 'Daily Sales', 'Sales'].includes(item.ConfigName) ['Add Product', 'Product Receipt', 'Daily Sales', 'Sales'].includes(
item.ConfigName
)
); );
console.log(datas, 'ffsasasf'); console.log(datas, 'ffsasasf');
setEmpData(datas); setEmpData(datas);
@ -1557,12 +1559,19 @@ const RetailDashboard = () => {
</div> </div>
<div className="dashboardMainCenter"> <div className="dashboardMainCenter">
<p style={{ fontSize: '12px', marginBottom: '0.2rem', fontWeight: '500', fontFamily: 'Inter' }}> <div className="todaySnapshotRow">
<p
style={{
fontSize: '13px',
marginBottom: '0.2rem',
fontWeight: '500',
fontFamily: 'Inter',
}}
>
Today's Snapshot Today's Snapshot
</p> </p>
<div className="todaySnapshotRow">
{selectedBranchForFilter === 'all' ? ( {selectedBranchForFilter === 'all' ? (
<> <div className="todaySnapFlex">
<Tooltip <Tooltip
title={ title={
<div <div
@ -1662,9 +1671,9 @@ const RetailDashboard = () => {
</div> </div>
</Tooltip> </Tooltip>
)} )}
</> </div>
) : ( ) : (
<> <div>
<div className="todaySnapshotBox orders"> <div className="todaySnapshotBox orders">
{ApiData?.[0]?.DineInOrderCount + {ApiData?.[0]?.DineInOrderCount +
ApiData?.[0]?.TakeAwayOrderCount + ApiData?.[0]?.TakeAwayOrderCount +
@ -1690,27 +1699,29 @@ const RetailDashboard = () => {
<div>Pending Bills</div> <div>Pending Bills</div>
</div> </div>
)} )}
</> </div>
)} )}
</div> </div>
<div className="quickActionsRow"> <div className="quickActionsRow">
<div <div
onClick={() => { onClick={() => {
const hasEmpAccess = EmpData?.find( const hasEmpAccess = EmpData?.find(
item => item.ConfigName === "Add Product" && item.ReadAccess === "Y" (item) =>
item.ConfigName === 'Add Product' &&
item.ReadAccess === 'Y'
); );
if (!hasEmpAccess && UserType === "Employee") { if (!hasEmpAccess && UserType === 'Employee') {
setMessageData("Please contact your admin to get access"); setMessageData('Please contact your admin to get access');
setMessageType('error'); setMessageType('error');
} }
if (isCheckSportsApp) { if (isCheckSportsApp) {
navigate(`${subDirectory}setting/products-master/new`); navigate(`${subDirectory}setting/products-master/new`);
} }
if ( if (
(UserType === "Employee" && hasEmpAccess) || (UserType === 'Employee' && hasEmpAccess) ||
UserType === "Admin" || UserType === 'Admin' ||
UserType === "Super Admin" || UserType === 'Super Admin' ||
UserType === "Super Admin User" UserType === 'Super Admin User'
) { ) {
navigate(`${subDirectory}setting/product-master/new`); navigate(`${subDirectory}setting/product-master/new`);
} }
@ -1730,21 +1741,24 @@ const RetailDashboard = () => {
<div <div
onClick={() => { onClick={() => {
const hasEmpAccess = EmpData?.find( const hasEmpAccess = EmpData?.find(
item => item.ConfigName === "Product Receipt" && item.ReadAccess === "Y" (item) =>
item.ConfigName === 'Product Receipt' &&
item.ReadAccess === 'Y'
);
if (!hasEmpAccess && UserType === 'Employee') {
setMessageData(
'Please contact your admin to get access'
); );
if (!hasEmpAccess && UserType === "Employee") {
setMessageData("Please contact your admin to get access");
setMessageType('error'); setMessageType('error');
} }
if ( if (
(UserType === "Employee" && hasEmpAccess) || (UserType === 'Employee' && hasEmpAccess) ||
UserType === "Admin" || UserType === 'Admin' ||
UserType === "Super Admin" || UserType === 'Super Admin' ||
UserType === "Super Admin User" UserType === 'Super Admin User'
) { ) {
navigate(`${subDirectory}setting/purchase-entry/new`); navigate(`${subDirectory}setting/purchase-entry/new`);
} }
}} }}
className="quickActionBox" className="quickActionBox"
> >
@ -1755,17 +1769,19 @@ const RetailDashboard = () => {
<div <div
onClick={() => { onClick={() => {
const hasEmpAccess = EmpData?.find( const hasEmpAccess = EmpData?.find(
item => item.ConfigName === "Daily Sales" && item.ReadAccess === "Y" (item) =>
item.ConfigName === 'Daily Sales' &&
item.ReadAccess === 'Y'
); );
if (!hasEmpAccess && UserType === "Employee") { if (!hasEmpAccess && UserType === 'Employee') {
setMessageData("Please contact your admin to get access"); setMessageData('Please contact your admin to get access');
setMessageType('error'); setMessageType('error');
} }
if ( if (
(UserType === "Employee" && hasEmpAccess) || (UserType === 'Employee' && hasEmpAccess) ||
UserType === "Admin" || UserType === 'Admin' ||
UserType === "Super Admin" || UserType === 'Super Admin' ||
UserType === "Super Admin User" UserType === 'Super Admin User'
) { ) {
navigate(`${subDirectory}report/datewisereport`); navigate(`${subDirectory}report/datewisereport`);
} }
@ -1779,17 +1795,18 @@ const RetailDashboard = () => {
className="quickActionBox" className="quickActionBox"
onClick={() => { onClick={() => {
const hasEmpAccess = EmpData?.find( const hasEmpAccess = EmpData?.find(
item => item.ConfigName === "Sales" && item.ReadAccess === "Y" (item) =>
item.ConfigName === 'Sales' && item.ReadAccess === 'Y'
); );
if (!hasEmpAccess && UserType === "Employee") { if (!hasEmpAccess && UserType === 'Employee') {
setMessageData("Please contact your admin to get access"); setMessageData('Please contact your admin to get access');
setMessageType('error'); setMessageType('error');
} }
if ( if (
(UserType === "Employee" && hasEmpAccess) || (UserType === 'Employee' && hasEmpAccess) ||
UserType === "Admin" || UserType === 'Admin' ||
UserType === "Super Admin" || UserType === 'Super Admin' ||
UserType === "Super Admin User" UserType === 'Super Admin User'
) { ) {
navigate(`${subDirectory}sales`); navigate(`${subDirectory}sales`);
} }
@ -2032,8 +2049,10 @@ const RetailDashboard = () => {
</Tooltip> </Tooltip>
) : ( ) : (
<div> <div>
<p>{AllProdIds?.[0]?.TotalProductCount || <p>
AllProdIds?.length}</p> {AllProdIds?.[0]?.TotalProductCount ||
AllProdIds?.length}
</p>
<div>TOTAL PRODUCTS</div> <div>TOTAL PRODUCTS</div>
</div> </div>
)} )}
@ -2176,15 +2195,27 @@ const RetailDashboard = () => {
<div className="notificationCenterCard"> <div className="notificationCenterCard">
{expiredList?.length > 0 && ( {expiredList?.length > 0 && (
<div className="notificationStock"> <div className="notificationStock">
{expiredList?.length} Products expiry today! {expiredList.length} Products expiry today!
</div> </div>
)} )}
{lowStockList?.length > 0 && ( {lowStockList?.length > 0 && (
<div className="notificationStock"> <div className="notificationStock">
Low Stock count {lowStockList?.length} Low Stock count {lowStockList.length}
</div>
)}
{!expiredList?.length && !lowStockList?.length && (
<div
style={{
fontSize: '12px',
width: '100%',
textAlign: 'center',
}}
>
Notification Empty
</div> </div>
)} )}
{/* <div className="notificationViewAll">View All</div> */}
</div> </div>
</div> </div>
)} )}
@ -2384,7 +2415,7 @@ const RetailDashboard = () => {
</div> </div>
)) ))
) : ( ) : (
<div style={{ textAlign: 'center' }}> <div style={{ textAlign: 'center', fontSize: '12px' }}>
No Low Stock Product No Low Stock Product
</div> </div>
)} )}

View File

@ -183,7 +183,7 @@ const DiningList = () => {
title: 'Table Name', title: 'Table Name',
dataIndex: 'TableName', dataIndex: 'TableName',
key: 'TableName', key: 'TableName',
width: '150px', width: '120px',
render: (text) => <a style={{ color: 'black' }}>{text}</a>, render: (text) => <a style={{ color: 'black' }}>{text}</a>,
filteredValue: [searchedText], filteredValue: [searchedText],
onFilter: (value, record) => { onFilter: (value, record) => {
@ -213,7 +213,7 @@ const DiningList = () => {
title: 'Chair Count', title: 'Chair Count',
dataIndex: 'ChairCount', dataIndex: 'ChairCount',
key: 'ChairCount', key: 'ChairCount',
width: '100px', width: 120,
align: 'right', align: 'right',
render: (text) => <a style={{ color: 'black' }}>{text}</a>, render: (text) => <a style={{ color: 'black' }}>{text}</a>,
filteredValue: filteredInfo.ChairCount || null, filteredValue: filteredInfo.ChairCount || null,
@ -234,7 +234,8 @@ const DiningList = () => {
sortOrder: sortOrder:
sortedInfo.columnKey === 'DineInTypeName' ? sortedInfo.order : null, sortedInfo.columnKey === 'DineInTypeName' ? sortedInfo.order : null,
ellipsis: true, ellipsis: true,
align: "center" align: 'center',
width: 120,
}, },
{ {
title: 'Chair Level Serve', title: 'Chair Level Serve',
@ -247,7 +248,8 @@ const DiningList = () => {
sortOrder: sortOrder:
sortedInfo.columnKey === 'ChairLevelSer' ? sortedInfo.order : null, sortedInfo.columnKey === 'ChairLevelSer' ? sortedInfo.order : null,
ellipsis: true, ellipsis: true,
align: "center", align: 'center',
width: 160,
}, },
{ {
title: 'Chair Name', title: 'Chair Name',

View File

@ -380,7 +380,7 @@ const MenuQRCode = () => {
style={{ style={{
width: 420, width: 420,
margin: '0 auto', margin: '0 auto',
padding: 24, padding: 16,
background: '#fff', background: '#fff',
borderRadius: 12, borderRadius: 12,
boxShadow: '0 6px 18px rgba(0,0,0,0.08)', boxShadow: '0 6px 18px rgba(0,0,0,0.08)',
@ -392,7 +392,7 @@ const MenuQRCode = () => {
<h3 <h3
style={{ style={{
fontSize: 16, fontSize: 16,
marginBottom: 12, marginBottom: 0,
fontWeight: 500, fontWeight: 500,
fontFamily: 'Poppins', fontFamily: 'Poppins',
}} }}

View File

@ -10,6 +10,7 @@ import {
} from '../../Features/ConfigMasterPage/ConfigMasterPage'; } from '../../Features/ConfigMasterPage/ConfigMasterPage';
import Buttons from '../../Components/Forms/Buttons'; import Buttons from '../../Components/Forms/Buttons';
import { PlusOutlined, DownloadOutlined, EyeOutlined } from '@ant-design/icons'; import { PlusOutlined, DownloadOutlined, EyeOutlined } from '@ant-design/icons';
import { MdClear } from 'react-icons/md';
import { getDineinTableData } from '../../Features/Dinein/Dinein'; import { getDineinTableData } from '../../Features/Dinein/Dinein';
import { encryptObject, getSession } from '../../Services/Others'; import { encryptObject, getSession } from '../../Services/Others';
import QRCode from 'react-qr-code'; import QRCode from 'react-qr-code';
@ -396,22 +397,73 @@ const PublicQrCode = () => {
// Add content to the temporary div // Add content to the temporary div
tempDiv.innerHTML = ` tempDiv.innerHTML = `
<div style="margin-bottom: 10px; border-bottom: 2px solid #eee; padding-bottom: 10px;"> <div style="
${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>` : ''} margin: auto;
<h1 style="color: #333; margin: 10px 0; font-size: 24px; font-weight: bold;">${branchName ? branchName : ''}</h1> font-family: 'Arial', sans-serif;
<p style="color: #666; margin: 5px 0; font-size: 14px;">${branchAddress ? branchAddress : ''}</p> background: linear-gradient(180deg, #f9fbff, #eef4ff);
<p style="color: #666; margin: 5px 0; font-size: 14px;"><strong>Mobile:</strong> ${branchMobile ? branchMobile : ''}</p> border-radius: 16px;
</div> padding: 12px;
<div style="margin-bottom: 30px;"> box-shadow: 0 6px 20px rgba(0,0,0,0.12);
<h2 style="color: #666; margin-bottom: 20px; font-size: 20px;">Self Booking QR Code</h2> text-align: center;
</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);"> ${
companyLogo
? `
<div style="margin-bottom: 12px;">
<img id="company-logo"
src="${companyLogo}"
style="max-width: 140px; max-height: 90px; object-fit: contain;"
crossorigin="anonymous" />
</div>`
: ''
}
<h1 style="
color: #2b2b2b;
font-size: 22px;
margin: 6px 0;
font-weight: bold;
">
${branchName || ''}
</h1>
<p style="color:#555; font-size:13px; margin:4px 0;">
${branchAddress || ''}
</p>
<p style="color:#333; font-size:14px; margin:6px 0;">
<strong>${branchMobile || ''}</strong>
</p>
<hr style="margin:18px 0; border:none; border-top:2px dashed #d6e0ff;" />
<h2 style="
color:#4a6cff;
font-size:18px;
margin-bottom:14px;
">
Scan & Book Easily
</h2>
<div style="
display:inline-block;
padding:18px;
background:#ffffff;
border-radius:14px;
box-shadow:0 4px 12px rgba(0,0,0,0.15);
">
<div id="qr-code-container"></div> <div id="qr-code-container"></div>
</div> </div>
</div>
<div style="margin-top: 20px;"> <p style="
<p style="font-size: 12px; color: #666; word-break: break-all;">URL: ${encrypted}</p> margin-top:14px;
font-size:12px;
color:#777;
word-break:break-all;
">
🔗 ${encrypted}
</p>
</div> </div>
`; `;
@ -710,7 +762,7 @@ const PublicQrCode = () => {
{qrCodeUrl && ( {qrCodeUrl && (
<> <>
{!sportsAppPreference && ( {!sportsAppPreference && (
<div className="productMaster-input"> <div className="productMaster-input clearGenQRCode">
<Buttons <Buttons
buttonText="Clear" buttonText="Clear"
className="secondary_Button" className="secondary_Button"
@ -724,6 +776,7 @@ const PublicQrCode = () => {
setPdfPreviewUrl(''); setPdfPreviewUrl('');
setIsPreviewModalOpen(false); setIsPreviewModalOpen(false);
}} }}
icon={<MdClear size={17} />}
> >
CLEAR CLEAR
</Buttons> </Buttons>
@ -742,7 +795,7 @@ const PublicQrCode = () => {
display: 'flex', display: 'flex',
flexDirection: 'column', flexDirection: 'column',
alignItems: 'center', alignItems: 'center',
padding: '20px', padding: '10px',
backgroundColor: '#f9f9f9', backgroundColor: '#f9f9f9',
borderRadius: '8px', borderRadius: '8px',
margin: '8px 0', margin: '8px 0',
@ -750,7 +803,7 @@ const PublicQrCode = () => {
> >
<h3 <h3
style={{ style={{
marginBottom: '20px', marginBottom: '16px',
color: '#333', color: '#333',
fontFamily: 'Poppins', fontFamily: 'Poppins',
fontWeight: '500', fontWeight: '500',

View File

@ -86,13 +86,6 @@
font-size: 12px; font-size: 12px;
font-weight: 500; font-weight: 500;
font-family: 'Poppins'; font-family: 'Poppins';
// .no-data {
// text-align: center;
// padding: 20px;
// font-weight: 500;
// color: #888;
// }
} }
.product-table-stockinHand th { .product-table-stockinHand th {

View File

@ -89,6 +89,8 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 0.5rem; gap: 0.5rem;
height: 100%;
justify-content: center;
} }
.BSC1Payment-div1-sub1 { .BSC1Payment-div1-sub1 {
@ -106,7 +108,7 @@
.BSC1Payment-div1-btns { .BSC1Payment-div1-btns {
background-color: var(--DEFAULT_SELECTED_COLOR); background-color: var(--DEFAULT_SELECTED_COLOR);
font-size: 14px; font-size: 13px;
font-weight: 500; font-weight: 500;
height: 40px; height: 40px;
width: 130px; width: 130px;
@ -116,7 +118,7 @@
display: flex; display: flex;
gap: 0.2rem; gap: 0.2rem;
align-items: center; align-items: center;
font-family: "Poppins"; font-family: 'Poppins';
justify-content: center; justify-content: center;
cursor: pointer; cursor: pointer;
text-transform: capitalize; text-transform: capitalize;
@ -138,7 +140,7 @@
display: flex; display: flex;
gap: 0.2rem; gap: 0.2rem;
align-items: center; align-items: center;
font-family: "Poppins"; font-family: 'Poppins';
justify-content: center; justify-content: center;
cursor: pointer; cursor: pointer;
text-transform: capitalize; text-transform: capitalize;
@ -177,7 +179,7 @@
color: #fff; color: #fff;
padding: 7px; padding: 7px;
text-align: center; text-align: center;
font-family: "Poppins", sans-serif; font-family: 'Poppins', sans-serif;
} }
.BSC1Payment-div2-button:hover { .BSC1Payment-div2-button:hover {
@ -210,7 +212,6 @@
.BSC1Payment-div3-icon { .BSC1Payment-div3-icon {
color: #fff; color: #fff;
// margin-top: 7px;
} }
.BSC1Payment-div4-sub1 { .BSC1Payment-div4-sub1 {
@ -253,11 +254,6 @@
} }
} }
// .BSC1Payment-div4-button:hover{
// background-color: #fff;
// color: #000;
// cursor: pointer;
// }
.BSC1Payment-div4-button-disable { .BSC1Payment-div4-button-disable {
// width: max-content; // width: max-content;
width: 250px; width: 250px;
@ -268,7 +264,7 @@
color: #ffffff; color: #ffffff;
padding: 7px; padding: 7px;
text-align: center; text-align: center;
font-family: "Gilroy"; font-family: 'Gilroy';
font-size: 28px; font-size: 28px;
font-weight: 600; font-weight: 600;
display: flex; display: flex;
@ -293,7 +289,7 @@
display: flex; display: flex;
flex-direction: row; flex-direction: row;
align-items: center; align-items: center;
gap: 1rem; gap: 10px;
justify-content: flex-start; justify-content: flex-start;
flex-wrap: wrap; flex-wrap: wrap;
} }
@ -378,7 +374,7 @@
column-gap: 0rem; column-gap: 0rem;
border-radius: 4.982px; border-radius: 4.982px;
padding: 5px 6px; padding: 5px 6px;
font-family: "Poppins"; font-family: 'Poppins';
} }
.Combo-Btn-payment-mode-notupisel { .Combo-Btn-payment-mode-notupisel {
@ -401,7 +397,7 @@
color: var(--DEFAULT_SELECTED_COLOR); color: var(--DEFAULT_SELECTED_COLOR);
} }
@media (min-width: 280px) and (max-width: 499px) { @media (min-width: 280px) and (max-width: 500px) {
.BSC1Payment-Container { .BSC1Payment-Container {
justify-content: center !important; justify-content: center !important;
flex-direction: column; flex-direction: column;
@ -449,16 +445,6 @@
.BSC1Payment-vl { .BSC1Payment-vl {
display: none; display: none;
} }
// .BSC1Payment-div2-1
// {
// display: none;
// }
// .BSC1Payment-div2-2
// {
// display: block;
// margin: 0rem 0rem;
// }
.BSC1Payment-div1-1 { .BSC1Payment-div1-1 {
display: none; display: none;
} }
@ -490,8 +476,6 @@
.BSC1Payment-div4 { .BSC1Payment-div4 {
align-items: center; align-items: center;
// flex-direction: row;
// padding-top: 15px
} }
.BSC1Payment-div4-payment { .BSC1Payment-div4-payment {
@ -584,16 +568,19 @@
} }
.newPaySectionCombo { .newPaySectionCombo {
flex-direction: column !important;
@media (max-width: 500px) { @media (max-width: 500px) {
flex-direction: row !important; flex-direction: row !important;
} }
.EstimateButton { .EstimateButton {
height: 40px; height: 40px;
width: 60px !important;
}
> div:nth-child(1) {
margin-right: 10px;
} }
div { div {
width: 100px !important; width: 50px !important;
font-family: "Poppins"; font-family: 'Poppins';
font-size: 11px; font-size: 11px;
font-weight: 600; font-weight: 600;
gap: 3px; gap: 3px;
@ -601,6 +588,9 @@
width: 50px !important; width: 50px !important;
} }
} }
.AsAmtCombo {
width: 100px !important;
}
} }
.payOptionDecition { .payOptionDecition {

View File

@ -96,34 +96,27 @@
} }
.BS1ComboTable { .BS1ComboTable {
// height: clamp(56vh,80vh,100vh);
height: 80vh; height: 80vh;
overflow: auto; overflow: auto;
// overflow: auto;
padding-bottom: 10rem !important; padding-bottom: 10rem !important;
padding: 0 3px; padding: 0 3px;
} }
.BS1ComboTableComboSalesBillTable {
height: 100%;
overflow: auto;
padding-bottom: 1.5rem !important;
padding: 0 3px;
}
// .BS1ComboTable .BillingTable6-table-th {
// padding: 2vh 0vh 2vh 0vh;
// font-size: 14px;
// border: 0.1px solid rgba(168, 168, 168, 0.5019607843);
// border-style: ridge;
// }
// .overall-bscombo-container.BSBilling7-tablediv {
// height: 52vh;
// }
.BS1ComboTable { .BS1ComboTable {
&.BillingTable1-table-th { &.BillingTable1-table-th {
padding: 2vh 0vh 2vh 0vh; padding: 2vh 0vh 2vh 0vh;
font-size: 14px; font-size: 14px;
// border: 0.01px rgb(218, 218, 218);
} }
& .BillingTable1-table-td { & .BillingTable1-table-td {
padding: 2vh 0vh 2vh 0vh; padding: 2vh 0vh 2vh 0vh;
font-size: 16px; font-size: 16px;
// border: 0.01px rgb(218, 218, 218);
} }
} }
@ -245,9 +238,6 @@
gap: 1 !important; gap: 1 !important;
} }
// .BSC1Payment-div4-payment {
// flex-wrap: wrap;
// }
.BSC1Payment-div4-button-disable { .BSC1Payment-div4-button-disable {
width: 100% !important; width: 100% !important;
} }
@ -389,13 +379,6 @@
.Combo-BSNavbar1-timer { .Combo-BSNavbar1-timer {
display: none !important; display: none !important;
} }
// .BSC1Payment-div4-payment{
// gap: 1.5rem !important;
// }
// .BSC1Payment-div2-1 {
// gap: 1.5rem !important;
// }
} }
@media screen and (min-width: 768px) and (max-width: 1220px) { @media screen and (min-width: 768px) and (max-width: 1220px) {
@ -409,20 +392,12 @@
} }
.BSC1-Master { .BSC1-Master {
// position: fixed;
// top: 55px;
right: 0; right: 0;
left: 0; left: 0;
} }
// .BSC1Payment-Container{
// position: absolute;
// bottom: 0;
// }
.overall-bscombo-container { .overall-bscombo-container {
overflow: hidden; overflow: hidden;
// height: 100vh;
.BSC1Search-div1 { .BSC1Search-div1 {
height: 45px !important; height: 45px !important;
} }
@ -431,27 +406,12 @@
} }
} }
// .BSC1-Master .BillingTable1-Structure {
// overflow: unset !important;
// height: unset !important;
// }
// .BSC1-Master .BillingTable1-table-div {
// overflow: unset !important;
// }
// .BSC1Payment-div4{
// padding-bottom: 5rem;
// }
.BSC1-Master .for-combo { .BSC1-Master .for-combo {
text-align: left !important; text-align: left !important;
} }
.BSC1-Master .BSC1Payment-Container { .BSC1-Master .BSC1Payment-Container {
height: 8rem; height: 8rem;
// padding-bottom: 1.5rem;
// column-gap: 1rem;
} }
.overall-bscombo-container .BSC1NavBar-manu-icon { .overall-bscombo-container .BSC1NavBar-manu-icon {
@ -478,12 +438,6 @@
width: 100vw !important; width: 100vw !important;
} }
// .BSC1NavBar-name-ellipsis {
// white-space: nowrap;
// overflow: hidden;
// text-overflow: ellipsis;
// // max-width: 90px;
// }
.BSC1-Master .BSC1Payment-div4-button-disable { .BSC1-Master .BSC1Payment-div4-button-disable {
height: 50px; height: 50px;
} }
@ -505,18 +459,6 @@
padding: 4px 8px; padding: 4px 8px;
} }
// .overall-bscombo-container .BSC1Search-div1 .M{
// display: flex;
// flex-direction: row;
// border: 1px solid var(--DEFAULT_SELECTED_COLOR);
// background-color: #fff;
// border-radius: 15px;
// width: 100%;
// height: 57px;
// gap: 1.2rem;
// padding-right: 1.5rem;
// align-items: center;
// }
.overall-bscombo-container .Combosearch { .overall-bscombo-container .Combosearch {
// width: 99vw; // width: 99vw;
height: 10px; height: 10px;
@ -536,13 +478,6 @@
width: 100%; width: 100%;
} }
// .BSC1-Master .BillingTable1-table-div {
// width: 100%;
// // height: 69vh !important;
// overflow: auto;
// height: 73% !important;
// }
.ComboSubNavbar { .ComboSubNavbar {
flex-wrap: nowrap !important; flex-wrap: nowrap !important;
@media (max-width: 1024px) { @media (max-width: 1024px) {

View File

@ -1061,7 +1061,7 @@
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
background-color: #fff; background-color: #fff;
border-radius: 12px; border-radius: 8px;
padding: 6px; padding: 6px;
border: 2px solid #eeeeee; border: 2px solid #eeeeee;
} }
@ -1124,7 +1124,7 @@
} }
@media (max-width: 768px) { @media (max-width: 768px) {
width: 100%; width: 100% !important;
} }
} }
@ -1600,6 +1600,9 @@
.dashboardMainRight { .dashboardMainRight {
flex: 0.8; flex: 0.8;
min-width: 260px; min-width: 260px;
background-color: #fff;
padding: 12px;
border-radius: 8px;
} }
.chartCard { .chartCard {
@ -1689,12 +1692,19 @@
gap: 0; gap: 0;
margin-bottom: 1rem; margin-bottom: 1rem;
background-color: #ffffff; background-color: #ffffff;
border-radius: 10px; border-radius: 8px;
flex-direction: column;
padding: 12px;
} }
.todaySnapFlex {
display: flex;
align-items: center;
justify-content: space-between;
}
.todaySnapshotBox { .todaySnapshotBox {
flex: 1; flex: 1;
padding: 16px 2px; padding: 10px 2px;
text-align: center; text-align: center;
font-weight: 600; font-weight: 600;
-webkit-text-stroke-width: 0.2px; -webkit-text-stroke-width: 0.2px;
@ -1735,13 +1745,13 @@
gap: 10px; gap: 10px;
margin-bottom: 1rem; margin-bottom: 1rem;
background-color: #fff; background-color: #fff;
border-radius: 10px; border-radius: 8px;
padding: 10px; padding: 10px;
} }
.quickActionBox { .quickActionBox {
flex: 1; flex: 1;
border-radius: 12px; border-radius: 8px;
border: 1px solid #e0e6ed; border: 1px solid #e0e6ed;
padding: 0.5; padding: 0.5;
text-align: center; text-align: center;
@ -1800,9 +1810,9 @@
.salesBreakdownBox { .salesBreakdownBox {
flex: 1; flex: 1;
background: #fff; background: #fff;
border-radius: 12px; border-radius: 8px;
box-shadow: 0 2px 8px #e0e6ed; box-shadow: 0 1px 2px #e0e6ed;
padding: 0.9rem; padding: 12px;
text-align: center; text-align: center;
color: #686868; color: #686868;
font-size: 0.85rem; font-size: 0.85rem;
@ -1823,9 +1833,6 @@
.productSummaryCard { .productSummaryCard {
background: #fff; background: #fff;
border-radius: 12px;
box-shadow: 0 2px 8px #e0e6ed;
padding: 0px;
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
} }
@ -1833,7 +1840,7 @@
color: #000000; color: #000000;
font-weight: 600; font-weight: 600;
margin-bottom: 0.3rem; margin-bottom: 0.3rem;
font-size: 12px; font-size: 13px;
font-weight: 500; font-weight: 500;
} }
@ -1843,7 +1850,7 @@
gap: 0.5rem; gap: 0.5rem;
flex-wrap: wrap; flex-wrap: wrap;
border-radius: 6px; border-radius: 6px;
padding: 7px; padding-top: 7px;
} }
.productSummaryBox { .productSummaryBox {
@ -1871,23 +1878,6 @@
} }
} }
// .productSummaryBox.live {
// background: linear-gradient(90deg, #e3fcec, #e3fcec);
// }
// .productSummaryBox.low {
// background: linear-gradient(90deg, #fffbe3, #fffbe3);
// }
// .productSummaryBox.nostock {
// background: linear-gradient(90deg, #ffe3e3, #ffe3e3);
// div {
// color: #e53935;
// font-weight: 600;
// }
// }
.lastbillcount { .lastbillcount {
width: 99%; width: 99%;
background-color: #fff; background-color: #fff;
@ -1902,19 +1892,20 @@
.notificationCenterCard { .notificationCenterCard {
background: #fff; background: #fff;
border-radius: 12px; border-radius: 12px;
box-shadow: 0 2px 8px #e0e6ed;
padding: 1rem; padding: 1rem;
position: relative; position: relative;
height: 14vh; height: max-content;
max-height: 14vh;
overflow: scroll; overflow: scroll;
border: 1px solid #eeeeee; border: 1px solid #eeeeee;
} }
.notificationCenterTitle { .notificationCenterTitle {
color: #2a2a2a; color: #333;
font-weight: 600; font-weight: 500;
font-family: 'Poppins';
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
font-size: 12px; font-size: 13px;
} }
.notificationStock { .notificationStock {
@ -1941,7 +1932,7 @@
.preOrderSummaryCardMain { .preOrderSummaryCardMain {
display: flex; display: flex;
align-items: flex-start; align-items: flex-start;
gap: 3px; gap: 8px;
width: 60%; width: 60%;
flex-wrap: wrap; flex-wrap: wrap;
@ -1969,7 +1960,7 @@
// flex: 1; // flex: 1;
width: 38%; width: 38%;
background: #fff; background: #fff;
border-radius: 12px; border-radius: 8px;
box-shadow: 0 2px 8px #e0e6ed; box-shadow: 0 2px 8px #e0e6ed;
padding: 0 1rem 1rem 1rem; padding: 0 1rem 1rem 1rem;
position: relative; position: relative;
@ -1987,15 +1978,6 @@
} }
.topSellingHeader { .topSellingHeader {
// display: flex;
// justify-content: space-between;
// align-items: center;
// margin: 0.5rem 0;
// font-weight: 600;
// position: sticky;
// top:10px;
// background-color: #fff;
// z-index: 100;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
@ -2059,28 +2041,26 @@
.preOrderSummaryCard { .preOrderSummaryCard {
flex: 0.7; flex: 0.7;
min-width: 220px; min-width: 220px;
border-radius: 12px; border-radius: 8px;
background-color: #fff;
padding: 12px;
} }
.preOrderSummaryTitle { .preOrderSummaryTitle {
font-weight: 500; font-weight: 500;
margin-bottom: 0.2rem; margin-bottom: 0.2rem;
font-size: 12px; font-size: 13px;
color: #2a2a2a; color: #2a2a2a;
} }
.preOrderSummaryRow { .preOrderSummaryRow {
padding: 10px;
height: 16vh; height: 16vh;
display: flex; display: flex;
gap: 0.5rem; gap: 0.5rem;
box-shadow: 0 2px 8px #e0e6ed;
background: #fff;
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
border-radius: 10px; border-radius: 10px;
border: 1px solid #eeeeee;
} }
.preOrderSummaryBox { .preOrderSummaryBox {
@ -2115,9 +2095,12 @@
.creditListCardMain { .creditListCardMain {
min-width: 220px; min-width: 220px;
height: 23vh; height: 25.5vh;
flex: 0.7; flex: 0.7;
overflow: scroll; overflow: scroll;
border-radius: 8px;
background-color: #fff;
padding: 8px;
@media (max-width: 768px) { @media (max-width: 768px) {
width: 100%; width: 100%;
@ -2125,8 +2108,6 @@
} }
.creditListCard { .creditListCard {
padding: 1rem;
box-shadow: 0 2px 8px #e0e6ed;
position: relative; position: relative;
background: #fff; background: #fff;
min-width: 220px; min-width: 220px;
@ -2134,14 +2115,12 @@
height: 16vh; height: 16vh;
overflow: auto; overflow: auto;
scrollbar-width: thin; scrollbar-width: thin;
padding-top: 0px;
border: 1px solid #eeeeee;
} }
.creditListTitle { .creditListTitle {
font-weight: 500; font-weight: 500;
margin-bottom: 0.2rem; margin-bottom: 0.2rem;
font-size: 12px; font-size: 13px;
color: #2a2a2a; color: #2a2a2a;
} }
@ -2181,9 +2160,9 @@
.stockAlertsCard { .stockAlertsCard {
background: #ffffff; background: #ffffff;
border-radius: 10px; border-radius: 8px;
box-shadow: none; box-shadow: none;
padding: 1rem 1rem 0.5rem 1rem; padding: 12px;
min-width: 320px; min-width: 320px;
position: relative; position: relative;
flex: 1; flex: 1;
@ -2197,6 +2176,8 @@
position: sticky; position: sticky;
top: -15px; top: -15px;
background-color: #fff; background-color: #fff;
font-size: 13px;
font-weight: 500;
} }
.stockAlertsHeaderRow { .stockAlertsHeaderRow {
@ -2217,7 +2198,7 @@
color: #222; color: #222;
border-bottom: 1px solid #e0e0e0; border-bottom: 1px solid #e0e0e0;
padding-bottom: 4px; padding-bottom: 4px;
margin-bottom: 2px; margin-bottom: 6px;
} }
.stockAlertsRow { .stockAlertsRow {

View File

@ -20,7 +20,7 @@
overflow: auto; overflow: auto;
max-height: 72vh; max-height: 72vh;
height: max-content; height: max-content;
padding: 10px; padding: 0;
// width: 80vw; // width: 80vw;
white-space: nowrap; white-space: nowrap;
scrollbar-width: thin; scrollbar-width: thin;
@ -178,6 +178,44 @@
background: #fafafa; background: #fafafa;
} }
// Sticky columns
.sticky-left-1 {
position: sticky;
left: 0;
background: #f3f4f6;
z-index: 10;
border-right: 2px solid #d1d5db;
}
.sticky-left-2 {
position: sticky;
left: 20px;
background: #f3f4f6;
z-index: 10;
border-right: 2px solid #d1d5db;
}
.sticky-left-3 {
position: sticky;
left: 119px;
background: #f3f4f6;
z-index: 10;
border-right: 2px solid #d1d5db;
}
tbody {
.sticky-left-1,
.sticky-left-2 {
background: #ffffff;
}
tr:nth-child(even) {
.sticky-left-1,
.sticky-left-2 {
background: #fafafa;
}
}
}
.row-number { .row-number {
text-align: center; text-align: center;
cursor: pointer; cursor: pointer;

View File

@ -267,7 +267,7 @@ const fetchComponent = async () => {
sessionStore('userName', 'Karthiga'); sessionStore('userName', 'Karthiga');
sessionStorage.setItem( sessionStorage.setItem(
'auth', 'auth',
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiOTM2MDY0MjI0NCIsIlBhc3N3b3JkIjoiWkB6MTIzNCIsImF1ZCI6WyJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTIiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTQiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiXSwiZXhwIjoxNzY5NTQwNDg2LCJpc3MiOiJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMDEifQ.dk6WOA7_jjKUv94Ni9RjMxHGgZRdpGj2QqXyyQMcFpo' 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiOTM2MDY0MjI0NCIsIlBhc3N3b3JkIjoiWkB6MTIzNCIsImF1ZCI6WyJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTIiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTQiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiXSwiZXhwIjoxNzY5NzEzMTk3LCJpc3MiOiJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMDEifQ.rm3XOIBsczxaSWg5WWwm0a5xvYOszDzXvL2oJLd1ZYo'
); );
const AppId = getSession('AppId'); const AppId = getSession('AppId');
@ -372,8 +372,9 @@ const fetchHomeComponent = async () => {
sessionStore('userName', 'Karthiga'); sessionStore('userName', 'Karthiga');
sessionStorage.setItem( sessionStorage.setItem(
'auth', 'auth',
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiOTM2MDY0MjI0NCIsIlBhc3N3b3JkIjoiWkB6MTIzNCIsImF1ZCI6WyJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTIiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTQiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiXSwiZXhwIjoxNzY5NTQwNDg2LCJpc3MiOiJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMDEifQ.dk6WOA7_jjKUv94Ni9RjMxHGgZRdpGj2QqXyyQMcFpo' 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiOTM2MDY0MjI0NCIsIlBhc3N3b3JkIjoiWkB6MTIzNCIsImF1ZCI6WyJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTIiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTQiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiXSwiZXhwIjoxNzY5NzEzMTk3LCJpc3MiOiJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMDEifQ.rm3XOIBsczxaSWg5WWwm0a5xvYOszDzXvL2oJLd1ZYo'
); );
const AppId = getSession('AppId'); const AppId = getSession('AppId');
if (AppId) { if (AppId) {
const response = await axios.get( const response = await axios.get(

View File

@ -23,7 +23,7 @@ export default defineConfig(({ command, mode }) => {
envDir: "src", envDir: "src",
envPrefix: "ENV_", envPrefix: "ENV_",
server: { server: {
host: "192.168.1.22", host: "192.168.1.50",
port: process.env.PORT || 3015, port: process.env.PORT || 3015,
}, },
optimizeDeps: { optimizeDeps: {