feat: export validated bid sheets as real Excel workbooks
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import { createBidWorkbook, downloadBidWorkbook } from '../services/bidWorkbook';
|
||||
import { getToken } from '../services/auth';
|
||||
import { listDocuments, downloadDocument } from '../services/account';
|
||||
import { tenderDateKey } from '../services/tenderCalendar';
|
||||
@@ -152,6 +153,13 @@ export const BidPackageBuilder = ({ results, tender: selectedTender }) => {
|
||||
const fileErrors = preparationBlockers(lotSelection.rows, documents, checks, currentVault);
|
||||
if (fileErrors.length) throw new Error(fileErrors.join(' '));
|
||||
const f = formVerisi();
|
||||
if (tip === 'excel') {
|
||||
const buffer = await createBidWorkbook(f,satirlar);
|
||||
if (!mounted.current || session !== getToken() || submitted !== latestDraft.current)
|
||||
throw new Error('Form veya oturum değişti; Excel çıktısını yeniden oluşturun.');
|
||||
downloadBidWorkbook(buffer,tender.ikn);
|
||||
printWindow.current?.close();
|
||||
}
|
||||
if (tip === 'mektup') belgeYazdir('Teklif Mektubu', teklifMektubuHtml(f, toplam), printWindow.current);
|
||||
if (tip === 'cetvel') belgeYazdir('Birim Fiyat Teklif Cetveli', teklifCetveliHtml(f, satirlar, toplam), printWindow.current);
|
||||
if (tip === 'liste') belgeYazdir('Evrak Kontrol Listesi', evrakListesiHtml(f, documents), printWindow.current);
|
||||
@@ -403,12 +411,13 @@ export const BidPackageBuilder = ({ results, tender: selectedTender }) => {
|
||||
{[
|
||||
{ t: 'mektup', ad: 'Teklif Mektubu', ikon: FileSignature, aciklama: 'Rakam ve yazı ile bedel' },
|
||||
{ t: 'cetvel', ad: 'Birim Fiyat Teklif Cetveli', ikon: Table2, aciklama: `${lotSelection.rows.length} kalem` },
|
||||
{ t: 'excel', ad: 'Excel Teklif Cetveli', ikon: Table2, aciklama: `${lotSelection.rows.length} kalem · XLSX` },
|
||||
{ t: 'liste', ad: 'Evrak Kontrol Listesi', ikon: ListChecks, aciklama: `${documents.length} belge` },
|
||||
].map((b) => (
|
||||
<button
|
||||
key={b.t}
|
||||
type="button"
|
||||
disabled={!hazir || printing}
|
||||
disabled={!hazir || printing || ((b.t === 'excel' || b.t === 'cetvel') && teklifTuru !== 'birim')}
|
||||
onClick={() => uret(b.t)}
|
||||
className="text-left bg-white border border-slate-300 hover:border-emerald-500 hover:bg-emerald-50/50 disabled:opacity-40 disabled:hover:border-slate-300 disabled:hover:bg-white rounded-xl p-3 transition-colors"
|
||||
>
|
||||
@@ -416,7 +425,7 @@ export const BidPackageBuilder = ({ results, tender: selectedTender }) => {
|
||||
<span className="block text-xs font-bold text-slate-900 leading-snug">{b.ad}</span>
|
||||
<span className="block text-[10px] text-slate-500 mt-0.5">{b.aciklama}</span>
|
||||
<span className="inline-flex items-center gap-1 text-[10px] font-bold text-emerald-700 mt-1.5">
|
||||
<Printer className="w-3 h-3" /> Yazdır / PDF
|
||||
<Printer className="w-3 h-3" /> {b.t === 'excel' ? 'Excel indir' : 'Yazdır / PDF'}
|
||||
</span>
|
||||
</button>
|
||||
))}
|
||||
|
||||
Reference in New Issue
Block a user