Recheck tender deadlines before preparation output delivery
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import { preparationDeadlineProblem } from '../services/preparationDeadline';
|
||||
import { bidValidityForForm, bidTypeForForm } from '../services/bidTerms';
|
||||
import { createBidWorkbook, downloadBidWorkbook } from '../services/bidWorkbook';
|
||||
import { getToken } from '../services/auth';
|
||||
@@ -127,9 +128,12 @@ export const BidPackageBuilder = ({ results, tender: selectedTender }) => {
|
||||
const kalemEksik = teklifTuru === 'birim' && validateBidRows(satirlar).length > 0;
|
||||
const turCeliskisi = !['birim','goturu'].includes(teklifTuru) || kaynakTeklifTuru.status === 'conflict' || (kaynakTeklifTuru.type && teklifTuru !== kaynakTeklifTuru.type);
|
||||
const sureEksik = !Number.isInteger(Number(gecerlilikGun)) || !(Number(gecerlilikGun) > 0) || kaynakGecerlilik.status === 'conflict' || (kaynakGecerlilik.days && Number(gecerlilikGun) < kaynakGecerlilik.days);
|
||||
const [deadlineNow,setDeadlineNow] = useState(() => new Date());
|
||||
useEffect(() => {const timer=setInterval(()=>setDeadlineNow(new Date()),30000);return ()=>clearInterval(timer);},[]);
|
||||
const deadlineProblem = preparationDeadlineProblem(tender,deadlineNow);
|
||||
const kontrolEksikleri = preparationBlockers(lotSelection.rows, documents, checks, {...vault,deadlineDate:tenderDateKey(tender),tenderIkn:tender.ikn});
|
||||
const analizEksik = effectiveResults.sourceReview?.status === 'partial';
|
||||
const hazir = eksikler.length === 0 && toplam > 0 && !kalemEksik && !turCeliskisi && !sureEksik && !kaynakKontrolGerekli && kontrolEksikleri.length === 0 && lotSelection.errors.length === 0 && !analizEksik && !sourceOptions.needsSelection;
|
||||
const hazir = !deadlineProblem && eksikler.length === 0 && toplam > 0 && !kalemEksik && !turCeliskisi && !sureEksik && !kaynakKontrolGerekli && kontrolEksikleri.length === 0 && lotSelection.errors.length === 0 && !analizEksik && !sourceOptions.needsSelection;
|
||||
|
||||
const formVerisi = () => ({
|
||||
...firma,
|
||||
@@ -148,6 +152,8 @@ export const BidPackageBuilder = ({ results, tender: selectedTender }) => {
|
||||
const session = getToken();
|
||||
setHata(null);
|
||||
try {
|
||||
const initialDeadlineProblem=preparationDeadlineProblem(tender);
|
||||
if(initialDeadlineProblem)throw new Error(initialDeadlineProblem);
|
||||
if (!hazir) throw new Error('Kalem, miktar, birim, fiyat, firma ve geçerlilik süresindeki eksikleri giderin.');
|
||||
// Open during the click; async validation must not lose popup activation.
|
||||
printWindow.current = belgeYazdir('Dosya kontrolü', '<p>Belgeler kontrol ediliyor…</p>');
|
||||
@@ -161,12 +167,16 @@ export const BidPackageBuilder = ({ results, tender: selectedTender }) => {
|
||||
setVault(currentVault);
|
||||
const fileErrors = preparationBlockers(lotSelection.rows, documents, checks, currentVault);
|
||||
if (fileErrors.length) throw new Error(fileErrors.join(' '));
|
||||
const currentDeadlineProblem=preparationDeadlineProblem(tender);
|
||||
if(currentDeadlineProblem)throw new Error(currentDeadlineProblem);
|
||||
const f = formVerisi();
|
||||
if (tip === 'excel') {
|
||||
const buffer = await createBidWorkbook(f,satirlar);
|
||||
if (reviewedText) await validateDocumentTextReview(reviewedText,tender.ikn);
|
||||
if (!mounted.current || session !== getToken() || submitted !== latestDraft.current)
|
||||
throw new Error('Form veya oturum değişti; Excel çıktısını yeniden oluşturun.');
|
||||
const finalDeadlineProblem=preparationDeadlineProblem(tender);
|
||||
if(finalDeadlineProblem)throw new Error(finalDeadlineProblem);
|
||||
downloadBidWorkbook(buffer,tender.ikn);
|
||||
printWindow.current?.close();
|
||||
}
|
||||
@@ -251,6 +261,7 @@ export const BidPackageBuilder = ({ results, tender: selectedTender }) => {
|
||||
{effectiveResults.sourceReview?.humanReview && <p className="text-xs text-slate-600">
|
||||
Metin incelemesi: sürüm {effectiveResults.sourceReview.humanReview.revision} · {effectiveResults.sourceReview.humanReview.reviewedBy} · {effectiveResults.sourceReview.humanReview.reviewedAt}. Kullanıcı karşılaştırmasıdır; resmi onay değildir.
|
||||
</p>}
|
||||
{deadlineProblem && <p role="alert" className="text-xs text-red-700">{deadlineProblem}</p>}
|
||||
{analizEksik && <p role="alert" className="text-xs text-red-700">Analiz kısmi: kaynak, OCR veya kalem bilgisi kontrol gerektiriyor. {(effectiveResults.sourceReview.issues || []).join(' ')} Tam ve doğrulanabilir kaynakla analizi tamamlayın.</p>}
|
||||
{/* Sizden beklenen bilgiler */}
|
||||
{eksikler.length > 0 && (
|
||||
|
||||
Reference in New Issue
Block a user