feat: tickets backlog + TPV toggle sidebar
This commit is contained in:
@@ -7723,6 +7723,38 @@
|
|||||||
"close": true
|
"close": true
|
||||||
},
|
},
|
||||||
"completed_at": "2026-08-24T06:42:41Z"
|
"completed_at": "2026-08-24T06:42:41Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "F-204",
|
||||||
|
"type": "fix",
|
||||||
|
"title": "Storefront: Live search no funciona",
|
||||||
|
"description": "Live search no funciona -> net::ERR_ADDRESS_UNREACHABLE. El endpoint suggest no existe o no está ruteado.",
|
||||||
|
"priority": "med",
|
||||||
|
"risk": "low",
|
||||||
|
"status": "pending",
|
||||||
|
"created_at": "2026-08-24",
|
||||||
|
"gates": {
|
||||||
|
"reviewer": false,
|
||||||
|
"security": false,
|
||||||
|
"qa": false
|
||||||
|
},
|
||||||
|
"phase": "storefront"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "F-205",
|
||||||
|
"type": "feature",
|
||||||
|
"title": "POS: Toggle columna izquierda",
|
||||||
|
"description": "Permitir ocultar/mostrar columna izquierda (pendientes/día) en el TPV.",
|
||||||
|
"priority": "high",
|
||||||
|
"risk": "low",
|
||||||
|
"status": "pending",
|
||||||
|
"created_at": "2026-08-24",
|
||||||
|
"gates": {
|
||||||
|
"reviewer": false,
|
||||||
|
"security": false,
|
||||||
|
"qa": false
|
||||||
|
},
|
||||||
|
"phase": "pos"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
7750
backlog/features.json.bak
Normal file
7750
backlog/features.json.bak
Normal file
File diff suppressed because it is too large
Load Diff
7768
backlog/features.json.working
Normal file
7768
backlog/features.json.working
Normal file
File diff suppressed because it is too large
Load Diff
@@ -114,6 +114,7 @@ export default function RegisterPage() {
|
|||||||
const [todaySales, setTodaySales] = useState<PosPendingSale[]>([]);
|
const [todaySales, setTodaySales] = useState<PosPendingSale[]>([]);
|
||||||
const [loadingPending, setLoadingPending] = useState(false);
|
const [loadingPending, setLoadingPending] = useState(false);
|
||||||
const [salesTab, setSalesTab] = useState<'pending' | 'day'>('day');
|
const [salesTab, setSalesTab] = useState<'pending' | 'day'>('day');
|
||||||
|
const [showSidebar, setShowSidebar] = useState(true);
|
||||||
const [printingSaleId, setPrintingSaleId] = useState<string | null>(null);
|
const [printingSaleId, setPrintingSaleId] = useState<string | null>(null);
|
||||||
const [restPaymentFor, setRestPaymentFor] = useState<PosPendingSale | null>(null);
|
const [restPaymentFor, setRestPaymentFor] = useState<PosPendingSale | null>(null);
|
||||||
const [processingRest, setProcessingRest] = useState(false);
|
const [processingRest, setProcessingRest] = useState(false);
|
||||||
@@ -902,6 +903,7 @@ export default function RegisterPage() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex h-screen" style={{ '--color-primary': '#2D6A4F' } as React.CSSProperties}>
|
<div className="flex h-screen" style={{ '--color-primary': '#2D6A4F' } as React.CSSProperties}>
|
||||||
|
{showSidebar && (
|
||||||
<aside
|
<aside
|
||||||
className="hidden w-[380px] shrink-0 flex-col border-r bg-gray-50 p-3 lg:flex"
|
className="hidden w-[380px] shrink-0 flex-col border-r bg-gray-50 p-3 lg:flex"
|
||||||
aria-label="Pedidos"
|
aria-label="Pedidos"
|
||||||
@@ -1163,6 +1165,7 @@ export default function RegisterPage() {
|
|||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
</aside>
|
</aside>
|
||||||
|
)}
|
||||||
{/* POS-FIX-4: product added toast */}
|
{/* POS-FIX-4: product added toast */}
|
||||||
{addedToast && (
|
{addedToast && (
|
||||||
<div className="pointer-events-none fixed top-6 right-6 z-50 animate-in slide-in-from-top-2 fade-in duration-200">
|
<div className="pointer-events-none fixed top-6 right-6 z-50 animate-in slide-in-from-top-2 fade-in duration-200">
|
||||||
@@ -1182,6 +1185,14 @@ export default function RegisterPage() {
|
|||||||
<span className="rounded-full bg-green-100 px-2 py-0.5 text-xs text-green-700">
|
<span className="rounded-full bg-green-100 px-2 py-0.5 text-xs text-green-700">
|
||||||
Caja abierta
|
Caja abierta
|
||||||
</span>
|
</span>
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
onClick={() => setShowSidebar((v) => !v)}
|
||||||
|
title={showSidebar ? 'Ocultar panel' : 'Mostrar panel'}
|
||||||
|
className="ml-2 rounded-lg border border-gray-300 bg-white px-2 py-1 text-xs font-medium text-gray-600 hover:bg-gray-50"
|
||||||
|
>
|
||||||
|
{showSidebar ? '◀' : '▶'} Panel
|
||||||
|
</button>
|
||||||
{!config?.terminal?.settings?.selfpayMode && (
|
{!config?.terminal?.settings?.selfpayMode && (
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
|
|||||||
@@ -97,10 +97,11 @@ def main():
|
|||||||
p.add_argument('--description', default='Need change')
|
p.add_argument('--description', default='Need change')
|
||||||
p.add_argument('--priority', choices=LEVEL_CHOICES, default='med')
|
p.add_argument('--priority', choices=LEVEL_CHOICES, default='med')
|
||||||
p.add_argument('--risk', choices=LEVEL_CHOICES, default='low')
|
p.add_argument('--risk', choices=LEVEL_CHOICES, default='low')
|
||||||
|
p.add_argument('--phase', default=None)
|
||||||
ns, _ = p.parse_known_args(cli_args)
|
ns, _ = p.parse_known_args(cli_args)
|
||||||
fid = ns.id or next_id(features)
|
|
||||||
features = data['features']
|
features = data['features']
|
||||||
features.append({
|
fid = ns.id or next_id(features)
|
||||||
|
new_feature = {
|
||||||
'id': fid,
|
'id': fid,
|
||||||
'type': ns.type,
|
'type': ns.type,
|
||||||
'title': ns.title,
|
'title': ns.title,
|
||||||
@@ -110,7 +111,10 @@ def main():
|
|||||||
'status': 'pending',
|
'status': 'pending',
|
||||||
'created_at': str(date.today()),
|
'created_at': str(date.today()),
|
||||||
'gates': {'reviewer': False, 'security': False, 'qa': False},
|
'gates': {'reviewer': False, 'security': False, 'qa': False},
|
||||||
})
|
}
|
||||||
|
if ns.phase:
|
||||||
|
new_feature['phase'] = ns.phase
|
||||||
|
features.append(new_feature)
|
||||||
data['features'] = features
|
data['features'] = features
|
||||||
BACKLOG.write_text(json.dumps(data, indent=2, ensure_ascii=False) + '\n', encoding='utf-8')
|
BACKLOG.write_text(json.dumps(data, indent=2, ensure_ascii=False) + '\n', encoding='utf-8')
|
||||||
print(f'Created {fid}: {ns.title}')
|
print(f'Created {fid}: {ns.title}')
|
||||||
|
|||||||
Reference in New Issue
Block a user