fix: persist explicit review status and align review counters

This commit is contained in:
2026-09-06 09:02:28 +03:00
parent a9036cf909
commit f88a0c7bfe
7 changed files with 360 additions and 5 deletions
+5 -1
View File
@@ -97,7 +97,11 @@ export const TenderDetailModal = () => {
</button>
<div className="flex items-center gap-4 text-xs">
<span className="text-slate-400">İnceleyen: <strong className="text-white">{userProfile.name}</strong></span>
<button type="button" disabled={savingCount > 0} aria-pressed={Boolean(tender.incelendi)}
onClick={() => mutateTender(tender.id,{incelendi:!tender.incelendi})}
className="text-xs px-3 py-1.5 rounded-lg border border-slate-500 disabled:opacity-50">
{tender.incelendi ? 'İncelendi — yeniden aç' : 'İncelendi olarak işaretle'}
</button>
<button
onClick={() => toggleTrackTender(tender.id)}
className={`flex items-center gap-1.5 font-bold px-3 py-1.5 rounded-lg text-xs transition-colors ${
+1 -1
View File
@@ -194,7 +194,7 @@ export const AppProvider = ({ children }) => {
const t = tenders.find(t => t.id === tenderId);
if (!t || !veriSenkron || !authUser) { setSaveError('Hesap verileri yüklenmeden kayıt yapılamaz.'); return false; }
const key = tenderStateKey(t);
if (inFlight.current.has(key)) return false;
if (inFlight.current.has(key)) { setSaveError('Bu ihale için önceki kayıt sürüyor. Tamamlandıktan sonra tekrar deneyin.'); return false; }
const owner = authUser.email;
const session = getToken();
inFlight.current.add(key); setSavingCount(n => n + 1); setSaveError(null);
+1 -1
View File
@@ -169,7 +169,7 @@ export function companyStats(tenders) {
winRate: resulted ? Math.round((won.length / resulted) * 100) : 0,
wonTotal,
tracked: tenders.filter((t) => t.takipte).length,
reviewed: tenders.filter((t) => t.incelendi || (t.kanbanStatus && t.kanbanStatus !== 'incelenecek')).length,
reviewed: tenders.filter((t) => Boolean(t.incelendi)).length,
contracts: won.length,
};
}
+1 -1
View File
@@ -8,7 +8,7 @@ export function applyTenderStates(tenders, records = {}) {
return record ? { ...t, ...record.data } : t;
});
for (const [key, record] of Object.entries(records)) {
if (!seen.has(key) && record.snapshot && (record.data.takipte || record.data.gorev))
if (!seen.has(key) && record.snapshot && (record.data.takipte || record.data.gorev || record.data.incelendi || record.data.bidDraft || record.data.notes?.length))
result.push({ ...record.snapshot, ...record.data });
}
return result;