Yeni Teklif Hazırlama

Dolar: Kur yükleniyor…
Euro: Kur yükleniyor…
TCMB kuru kontrol ediliyor
Sistem Aktif

Müşteri & Proje Bilgileri

Teklif Kalemleri

No Marka / Kod Malzeme / Hizmet Açıklaması Miktar Birim B. Fiyat İsk. (%) İskontolu Fiyat Toplam

Buraya yazdığınız her satır PDF çıktısındaki “Açıklamalar” bölümünde ayrı madde olarak yer alır.

Liste Toplamı: 0,00 TL
Uygulanan İskonto (-): 0,00 TL
İskontolu Ara Toplam: 0,00 TL
KDV (%20): 0,00 TL
GENEL TOPLAM: 0,00 TL
'],{type:'application/vnd.ms-excel;charset=utf-8;'}); const url=URL.createObjectURL(blob),a=document.createElement('a'); a.href=url;a.download='Verilen_Teklifler_Arsivi.xls';document.body.appendChild(a);a.click();a.remove();setTimeout(()=>URL.revokeObjectURL(url),1500); } let arsivSilmeModuAktif = false; window.arsivSilmeModunuDegistir = function() { arsivSilmeModuAktif = !arsivSilmeModuAktif; const btn = document.getElementById('btnArsivSilModu'); const deleteBtn = document.getElementById('btnArsivSecilenleriSil'); if (btn) { btn.innerHTML = arsivSilmeModuAktif ? 'İptal Et' : 'Teklif Sil'; btn.classList.toggle('bg-red-900', arsivSilmeModuAktif); } if (deleteBtn) deleteBtn.classList.toggle('hidden', !arsivSilmeModuAktif); document.querySelectorAll('.arsiv-secim-wrap').forEach(el => el.classList.toggle('hidden', !arsivSilmeModuAktif)); if (!arsivSilmeModuAktif) document.querySelectorAll('.arsiv-secim-kutusu').forEach(cb => cb.checked = false); }; window.arsivSecilenleriSil = function() { const secilenler = new Set(); document.querySelectorAll('.arsiv-secim-kutusu:checked').forEach(cb => { if (cb.dataset.teklifId) secilenler.add(cb.dataset.teklifId); if (cb.dataset.teklifNo) { okuArsiv().filter(t => String(t.teklifNo || '') === cb.dataset.teklifNo).forEach(t => secilenler.add(String(t.id))); } }); if (!secilenler.size) { alert('Lütfen silmek istediğiniz teklifleri işaretleyin.'); return; } const mevcut = okuArsiv(); const silinecekler = mevcut.filter(t => secilenler.has(String(t.id))); if (!silinecekler.length) { alert('Seçilen teklifler bulunamadı.'); return; } const aciklama = silinecekler.length + ' teklif kaydı'; if (!confirm(aciklama + ' Çöp Kutusu’na taşınsın mı? Daha sonra geri yükleyebilirsin.')) return; try { const kalanArsiv = mevcut.filter(t => !secilenler.has(String(t.id))); const eskiCop = JSON.parse(localStorage.getItem(TRASH_KEY) || '[]'); if (!Array.isArray(eskiCop)) throw Error('Çöp kutusu kaydı geçersiz'); const yeniCop = [...silinecekler.map(teklif => ({ teklif, silinmeTarihi: new Date().toISOString() })), ...eskiCop]; const copMetni = JSON.stringify(yeniCop); if (new Blob([copMetni]).size > 800000) { alert('Çöp kutusu kapasitesi doldu. Önce JSON yedek indirip çöp kutusunu temizle. Teklifler silinmedi.'); return; } window.rzSetItem(TRASH_KEY, copMetni); yazArsiv(kalanArsiv); // Silme sonrası sıra sayacını kalan arşivdeki en büyük numaraya eşitle. // Böylece en yeni teklifler silinirse sonraki numara boşluktan devam eder. const etkilenenYillar = new Set(); silinecekler.forEach(t => { const p = noParcala(t.teklifNo); if (p) etkilenenYillar.add(p.yil); }); etkilenenYillar.forEach(yil => { const kalanEnBuyuk = kalanArsiv.reduce((max, t) => { const p = noParcala(t.teklifNo); return p && p.yil === yil ? Math.max(max, p.sira) : max; }, 0); window.rzSetItem(COUNTER_PREFIX + yil, String(kalanEnBuyuk)); }); if (typeof duzenlenenTeklifId !== 'undefined' && secilenler.has(String(duzenlenenTeklifId))) duzenlenenTeklifId = null; // Silme anında, yeni teklif için arşivdeki ilk boş numarayı göster. if (!duzenlenenTeklifId && typeof noyuHazirla === 'function') noyuHazirla(); arsivSilmeModuAktif = false; arsiviCiz(); const btn = document.getElementById('btnArsivSilModu'); if (btn) btn.innerHTML = 'Teklif Sil'; const deleteBtn = document.getElementById('btnArsivSecilenleriSil'); if (deleteBtn) deleteBtn.classList.add('hidden'); alert('İşaretlenen teklifler Çöp Kutusu’na taşındı.'); window.rzV12RenderTrash && window.rzV12RenderTrash(); } catch (e) { alert('Teklifler silinemedi. Lütfen tekrar deneyin.'); } }; function arsivSecimHucre(hedef) { const td = document.createElement('td'); td.className = 'p-3 text-center'; const wrap = document.createElement('div'); wrap.className = 'arsiv-secim-wrap' + (arsivSilmeModuAktif ? '' : ' hidden'); const cb = document.createElement('input'); cb.type = 'checkbox'; cb.className = 'arsiv-secim-kutusu w-4 h-4 accent-red-500 cursor-pointer'; if (hedef.teklifId) cb.dataset.teklifId = hedef.teklifId; if (hedef.teklifNo) cb.dataset.teklifNo = hedef.teklifNo; wrap.appendChild(cb); td.appendChild(wrap); return td; } window.rzV12RefreshArchive = () => { arsiviCiz(); noyuHazirla(); }; function arsiviCiz() { const tbody=document.getElementById('verilenTekliflerBody'); if (!tbody) return; const tumArsiv=okuArsiv(); const arama = String(document.getElementById('rzArsivAra')?.value || '').trim().toLocaleLowerCase('tr-TR'); const baslangic = document.getElementById('rzArsivBaslangic')?.value || ''; const bitis = document.getElementById('rzArsivBitis')?.value || ''; const durumFiltre = document.getElementById('rzV17DurumFiltre')?.value || ''; const sonDurum = t => ['Hazırlanıyor','Gönderildi','Onaylandı','Reddedildi'].includes(t.durum) ? t.durum : 'Hazırlanıyor'; // Bir teklifin revizyonları tek tekliftir; özet için en yüksek revizyon esas alınır. const guncel = new Map(); for (const t of tumArsiv) { const k=t.teklifNo||t.id, eski=guncel.get(k); if (!eski || (Number.parseInt(t.revizyonNo||'0',10)||0) > (Number.parseInt(eski.revizyonNo||'0',10)||0) || ((Number.parseInt(t.revizyonNo||'0',10)||0) === (Number.parseInt(eski.revizyonNo||'0',10)||0) && (t.kayitZamani||'') > (eski.kayitZamani||''))) guncel.set(k,t); } const mevcutDurumlar=[...guncel.values()]; const say = durum => mevcutDurumlar.filter(t=>sonDurum(t)===durum).length; for (const [id,n] of [['rzV17Toplam',mevcutDurumlar.length],['rzV17Hazir',say('Hazırlanıyor')],['rzV17Gonderildi',say('Gönderildi')],['rzV17Onay',say('Onaylandı')],['rzV17Red',say('Reddedildi')]]) { const el=document.getElementById(id); if(el)el.textContent=String(n); } const arsiv = tumArsiv.filter(t => { const metin = [t.musteriAdi,t.projeAdi,t.teklifNo].map(x=>String(x||'')).join(' ').toLocaleLowerCase('tr-TR'); const tarih = String(t.teklifTarihi || ''); return (!arama || metin.includes(arama)) && (!baslangic || (tarih && tarih >= baslangic)) && (!bitis || (tarih && tarih <= bitis)) && (!durumFiltre || sonDurum(t)===durumFiltre); }); tbody.innerHTML=''; const sonuc=document.getElementById('rzArsivSonuc'); if (sonuc) sonuc.textContent = arsiv.length + ' kayıt gösteriliyor / toplam ' + tumArsiv.length + ' kayıt'; const bos=document.getElementById('arsivBosMesaj'); if(bos){ bos.classList.toggle('hidden', arsiv.length>0); bos.textContent=tumArsiv.length === 0 ? 'Henüz kaydedilmiş teklif yok.' : 'Aramaya uygun teklif bulunamadı.'; } const gruplar = new Map(); arsiv.forEach(t => { const anahtar = t.teklifNo || ('no_' + t.id); if (!gruplar.has(anahtar)) gruplar.set(anahtar, []); gruplar.get(anahtar).push(t); }); // Teklif numaralarını yıl ve sıra numarasına göre büyükten küçüğe sırala. const teklifNoKarsilastir = (a, b) => { const ay=String(a[0]||'').match(/(\d{4})-(\d+)$/), by=String(b[0]||'').match(/(\d{4})-(\d+)$/); if (ay && by) return (Number(by[1])-Number(ay[1])) || (Number(by[2])-Number(ay[2])); return String(b[0]||'').localeCompare(String(a[0]||''), 'tr', {numeric:true}); }; const siraliGruplar = Array.from(gruplar.entries()).sort(teklifNoKarsilastir); const tdEkle = (tr, value, cls='p-3') => { const td=document.createElement('td'); td.className=cls; td.textContent=value==null?'':String(value); tr.appendChild(td); return td; }; const butonEkle = (parent,label,cls,fn) => { const b=document.createElement('button'); b.type='button'; b.className=cls+' px-3 py-1.5 rounded-md text-xs font-bold'; b.textContent=label; b.onclick=fn; parent.appendChild(b); }; const durumHucreEkle = (tr,t) => { const td=document.createElement('td');td.className='p-3'; const sel=document.createElement('select');sel.className='bg-slate-800 text-slate-100 rounded-lg border border-slate-600 px-2 py-1.5 text-xs w-32'; for (const d of ['Hazırlanıyor','Gönderildi','Onaylandı','Reddedildi']) { const opt=document.createElement('option');opt.value=d;opt.textContent=d;sel.appendChild(opt); } sel.value=sonDurum(t); sel.setAttribute('aria-label',(t.teklifNo||'Teklif')+' durumunu değiştir'); sel.addEventListener('change',()=>{ const tum=okuArsiv();const secilen=tum.find(x=>String(x.id)===String(t.id)); if (!secilen) { alert('Teklif bulunamadı.');arsiviCiz();return; } secilen.durum=sel.value; try { yazArsiv(tum);arsiviCiz(); if(window.showAppToast)window.showAppToast('Teklif durumu güncellendi: '+sel.value,'success'); } catch(e){alert('Durum kaydedilemedi: '+(e.message||e));arsiviCiz();} }); td.appendChild(sel);tr.appendChild(td); }; const islemlerEkle = (tr,t) => { const td=document.createElement('td'); td.className='p-3'; const wrap=document.createElement('div'); wrap.className='flex flex-wrap gap-2'; butonEkle(wrap,'Düzenle','bg-amber-700 hover:bg-amber-600 text-white',()=>teklifiYukle(t.id)); butonEkle(wrap,'Kopyala','bg-sky-800 hover:bg-sky-700 text-white',()=>window.rzTeklifKopyala(t.id)); butonEkle(wrap,'Revizyon','bg-indigo-700 hover:bg-indigo-600 text-white',()=>window.teklifRevizyonBaslat(t.id)); butonEkle(wrap,'Excel','bg-emerald-700 hover:bg-emerald-600 text-white',()=>excelIndir(t)); butonEkle(wrap,'PDF','bg-slate-700 hover:bg-slate-600 text-white',()=>arsivPdfYazdir(t.id)); td.appendChild(wrap); tr.appendChild(td); }; siraliGruplar.forEach(([teklifNo, versiyonlar]) => { versiyonlar.sort((a,b) => (Number.parseInt(b.revizyonNo || '00',10)||0) - (Number.parseInt(a.revizyonNo || '00',10)||0) || (b.kayitZamani||'').localeCompare(a.kayitZamani||'')); const son = versiyonlar[0]; // Tek kaydı olan teklifler eski görünümde tek satır kalır; yalnızca revizyon geçmişi olanlar açılır grup olur. if (versiyonlar.length === 1) { const t=versiyonlar[0]; const tr=document.createElement('tr'); tr.className='text-slate-200 hover:bg-slate-800/60'; tr.appendChild(arsivSecimHucre({teklifId:String(t.id)})); tdEkle(tr, t.teklifNo, 'p-3 whitespace-nowrap font-semibold'); tdEkle(tr, String(t.revizyonNo||'00').padStart(2,'0')); tdEkle(tr, trTarih(t.teklifTarihi)); tdEkle(tr, t.musteriAdi); tdEkle(tr, t.projeAdi); tdEkle(tr, t.genelToplam); durumHucreEkle(tr,t); islemlerEkle(tr,t); tbody.appendChild(tr); return; } const grupId = 'revgrup_' + Math.random().toString(36).slice(2,10); const tr=document.createElement('tr'); tr.className='text-slate-200 hover:bg-slate-800/60'; tr.appendChild(arsivSecimHucre({teklifNo:String(teklifNo)})); const noTd=document.createElement('td'); noTd.className='p-3 whitespace-nowrap'; const ok=document.createElement('button'); ok.type='button'; ok.className='mr-2 text-amber-400 hover:text-amber-300 font-bold'; ok.textContent='▸'; ok.title='Revizyonları göster'; ok.setAttribute('aria-expanded','false'); const noText=document.createElement('span'); noText.textContent=teklifNo; noText.className='font-semibold'; ok.onclick=()=>{ const acik=ok.getAttribute('aria-expanded')==='true'; ok.setAttribute('aria-expanded',String(!acik)); ok.textContent=acik?'▸':'▾'; ok.title=acik?'Revizyonları göster':'Revizyonları gizle'; tbody.querySelectorAll('[data-revizyon-grup="'+grupId+'"]').forEach(r=>r.classList.toggle('hidden',acik)); }; noTd.appendChild(ok); noTd.appendChild(noText); tr.appendChild(noTd); const revText=versiyonlar.map(v=>String(v.revizyonNo||'00').padStart(2,'0')).sort((a,b)=>Number(a)-Number(b)).join(', '); tdEkle(tr,revText); tdEkle(tr,trTarih(son.teklifTarihi)); tdEkle(tr,son.musteriAdi); tdEkle(tr,son.projeAdi); tdEkle(tr,son.genelToplam); durumHucreEkle(tr,son); const actionsTd=document.createElement('td'); actionsTd.className='p-3 text-slate-400 text-xs'; actionsTd.textContent=versiyonlar.length+' kayıt'; tr.appendChild(actionsTd); tbody.appendChild(tr); versiyonlar.forEach(t=>{ const detail=document.createElement('tr'); detail.className='hidden bg-slate-950/70 text-slate-300'; detail.setAttribute('data-revizyon-grup',grupId); detail.appendChild(arsivSecimHucre({teklifId:String(t.id)})); const pad=document.createElement('td');pad.className='p-3 pl-10';pad.textContent='↳ '+t.teklifNo;detail.appendChild(pad); tdEkle(detail,String(t.revizyonNo||'00').padStart(2,'0')); tdEkle(detail,trTarih(t.teklifTarihi)); tdEkle(detail,t.musteriAdi); tdEkle(detail,t.projeAdi); tdEkle(detail,t.genelToplam); durumHucreEkle(detail,t); const td=document.createElement('td');td.className='p-3';const wrap=document.createElement('div');wrap.className='flex flex-wrap gap-2'; butonEkle(wrap,'Düzenle','bg-amber-700 hover:bg-amber-600 text-white',()=>teklifiYukle(t.id)); butonEkle(wrap,'Kopyala','bg-sky-800 hover:bg-sky-700 text-white',()=>window.rzTeklifKopyala(t.id)); butonEkle(wrap,'Revizyon','bg-indigo-700 hover:bg-indigo-600 text-white',()=>window.teklifRevizyonBaslat(t.id)); butonEkle(wrap,'Excel','bg-emerald-700 hover:bg-emerald-600 text-white',()=>excelIndir(t)); butonEkle(wrap,'PDF','bg-slate-700 hover:bg-slate-600 text-white',()=>arsivPdfYazdir(t.id)); td.appendChild(wrap);detail.appendChild(td);tbody.appendChild(detail); }); }); } function duzenlemeSekmesiniAc() { const form = document.getElementById('tab-yeniTeklif'); if (form) form.id = 'tab-teklifDuzenle'; const btn = document.getElementById('btn-teklifDuzenle'); if (btn) btn.classList.remove('hidden'); const actions = document.getElementById('duzenlemeAltIslemleri'); if (actions) actions.classList.remove('hidden'); const title = document.getElementById('baslikMetni'); if (title) title.textContent = 'Kayıtlı Teklifi Düzenle'; } function duzenlemeSekmesiniKapat() { const form = document.getElementById('tab-teklifDuzenle'); if (form) { form.id = 'tab-yeniTeklif'; form.classList.add('hidden'); } const btn = document.getElementById('btn-teklifDuzenle'); if (btn) btn.classList.add('hidden'); const actions = document.getElementById('duzenlemeAltIslemleri'); if (actions) actions.classList.add('hidden'); } window.duzenlemedenVazgec = function() { if (!confirm('Düzenleme iptal edilsin mi? Kaydetmediğiniz değişiklikler kaybolacak.')) return; duzenlenenTeklifId = null; duzenlemeSekmesiniKapat(); const body = document.getElementById('teklifKalemleriBody'); if (body) body.innerHTML = ''; ['musteriAdi','musteriAdres','ilgiliKisi','projeAdi','teklifAciklamalari'].forEach(id => { const el=document.getElementById(id); if(el) el.value = id==='teklifAciklamalari' ? el.defaultValue : ''; }); if (typeof hesapla === 'function') hesapla(); setDeger('teklifNo', typeof sonrakiNo === 'function' ? sonrakiNo() : ''); setDeger('revizyonNo','00'); window.tabDegis('yeniTeklif'); }; function teklifiYukle(id) { const t=okuArsiv().find(x=>x.id===id); if(!t) return; duzenlenenTeklifId=t.id; ['teklifNo','revizyonNo','teklifTarihi','musteriAdi','musteriAdres','ilgiliKisi','projeAdi','gecerlilik','dolarKur','euroKur','teklifAciklamalari'].forEach(k=>setDeger(k, ({ teklifNo:t.teklifNo,revizyonNo:String(t.revizyonNo || '00').padStart(2,'0'),teklifTarihi:t.teklifTarihi,musteriAdi:t.musteriAdi,musteriAdres:t.musteriAdres,ilgiliKisi:t.ilgiliKisi,projeAdi:t.projeAdi,gecerlilik:t.gecerlilik,dolarKur:t.dolarKur,euroKur:t.euroKur,teklifAciklamalari:t.aciklamalar })[k])); const body=document.getElementById('teklifKalemleriBody'); if(body) body.innerHTML=''; (t.kalemler||[]).forEach(k=>window.kalemEkleSatiri(k.markaKod,k.aciklama,Number(k.miktar)||1,k.birim||'Adet',Number(k.fiyat)||0,Number(k.iskonto)||0,k.paraBirimi||'TL')); if (typeof hesapla==='function') hesapla(); duzenlemeSekmesiniAc(); window.tabDegis('teklifDuzenle'); } window.teklifRevizyonBaslat = function(id) { const kaynak = okuArsiv().find(x => x.id === id); if (!kaynak) return; const mevcutRevizyonlar = okuArsiv().filter(x => x.teklifNo === kaynak.teklifNo); const enBuyukRevizyon = mevcutRevizyonlar.reduce((max, x) => Math.max(max, Number.parseInt(x.revizyonNo || '00', 10) || 0), Number.parseInt(kaynak.revizyonNo || '00', 10) || 0); if (enBuyukRevizyon >= 99) { alert('Bu teklif için en yüksek revizyon numarası 99.'); return; } const yeniRevizyon = enBuyukRevizyon + 1; const simdi = new Date(); const bugun = simdi.getFullYear() + '-' + String(simdi.getMonth() + 1).padStart(2, '0') + '-' + String(simdi.getDate()).padStart(2, '0'); const rev = { ...kaynak, id: 'teklif_rev_' + Date.now() + '_' + Math.random().toString(36).slice(2,7), revizyonNo: String(yeniRevizyon).padStart(2,'0'), durum:'Hazırlanıyor', teklifTarihi: bugun, kayitZamani: simdi.toISOString() }; duzenlenenTeklifId = rev.id; uygulaVeri(rev); alert('Revizyon ' + rev.revizyonNo + ' hazırlandı. Teklif numarası ve diğer bilgiler korundu; teklif tarihi bugüne güncellendi. Kaydettiğinde arşive ayrı revizyon olarak eklenecek.'); window.tabDegis('yeniTeklif'); }; function arsivPdfYazdir(id) { const t=okuArsiv().find(x=>x.id===id); if(!t) return; const eski=teklifVerisiniOku(); const eskiEditId=duzenlenenTeklifId; teklifiYukle(id); const geriAl=()=>{window.removeEventListener('afterprint',geriAl);duzenlenenTeklifId=eskiEditId;uygulaVeri(eski);}; window.addEventListener('afterprint',geriAl); window.teklifiYazdir(); setTimeout(()=>{ if (window.matchMedia && !window.matchMedia('print').matches) { window.removeEventListener('afterprint',geriAl);duzenlenenTeklifId=eskiEditId;uygulaVeri(eski); } },1200); } function uygulaVeri(t) { if(!t) return; ['teklifNo','revizyonNo','teklifTarihi','musteriAdi','musteriAdres','ilgiliKisi','projeAdi','gecerlilik','dolarKur','euroKur','teklifAciklamalari'].forEach(k=>setDeger(k, ({ teklifNo:t.teklifNo,revizyonNo:String(t.revizyonNo || '00').padStart(2,'0'),teklifTarihi:t.teklifTarihi,musteriAdi:t.musteriAdi,musteriAdres:t.musteriAdres,ilgiliKisi:t.ilgiliKisi,projeAdi:t.projeAdi,gecerlilik:t.gecerlilik,dolarKur:t.dolarKur,euroKur:t.euroKur,teklifAciklamalari:t.aciklamalar })[k])); const body=document.getElementById('teklifKalemleriBody'); if(body) body.innerHTML=''; (t.kalemler||[]).forEach(k=>window.kalemEkleSatiri(k.markaKod,k.aciklama,Number(k.miktar)||1,k.birim||'Adet',Number(k.fiyat)||0,Number(k.iskonto)||0,k.paraBirimi||'TL')); if(typeof hesapla==='function') hesapla(); } window.teklifiKaydet=function() { // Yeni bir teklif kaydedilirken numarayı mutlaka o anki arşivden yeniden hesapla. // Böylece arşivde silinmiş ilk boş sıra (ör. 0003) varsa, formda eski numara // görünse bile kayıt sırasında ilk boş sıra kullanılır. Düzenleme/revizyon numarası korunur. if (!duzenlenenTeklifId) setDeger('teklifNo', sonrakiNo()); const t=teklifVerisiniOku(); if(!t.musteriAdi.trim()) { alert('Lütfen müşteri adını girin.'); return; } if(!t.kalemler.length) { alert('Kaydetmeden önce en az bir teklif kalemi ekleyin.'); return; } const arsiv=okuArsiv(); const index=arsiv.findIndex(x=>x.id===t.id); if(index>=0) { t.durum=arsiv[index].durum||'Hazırlanıyor'; arsiv[index]=t; } else { t.durum='Hazırlanıyor'; arsiv.push(t); } try { yazArsiv(arsiv); const p=noParcala(t.teklifNo); if(p) window.rzSetItem(COUNTER_PREFIX+p.yil,String(Math.max(Number(localStorage.getItem(COUNTER_PREFIX+p.yil)||0),p.sira))); duzenlenenTeklifId=null; duzenlemeSekmesiniKapat(); arsiviCiz(); if (typeof draftNoticeTimer !== 'undefined' && draftNoticeTimer) clearTimeout(draftNoticeTimer); if (window.showAppToast) window.showAppToast('Teklif arşive kaydedildi: '+t.teklifNo, 'success'); else console.info('Teklif arşive kaydedildi: '+t.teklifNo); // Arşiv kaydı tamamlandıktan sonra yeni teklif formundaki kalemleri temizle. // Arşive eklenen t nesnesi yukarıda kopyalandığı için kayıt etkilenmez. const kalemBody = document.getElementById('teklifKalemleriBody'); if (kalemBody) kalemBody.innerHTML = ''; if (typeof hesapla === 'function') hesapla(); setDeger('teklifNo',sonrakiNo()); setDeger('revizyonNo','00'); window.tabDegis('verilenTeklifler'); } catch(e) { alert('Teklif kaydedilemedi. Tarayıcı depolama alanı dolu olabilir.'); } }; window.rzArsivFiltrele = () => arsiviCiz(); window.rzArsivFiltreTemizle = () => { ['rzArsivAra','rzArsivBaslangic','rzArsivBitis','rzV17DurumFiltre'].forEach(id => { const el = document.getElementById(id); if(el) el.value = ''; }); arsiviCiz(); }; window.rzTeklifKopyala = function(id) { const kaynak = okuArsiv().find(t => String(t.id) === String(id)); if (!kaynak) { alert('Kopyalanacak teklif bulunamadı.'); return; } if (!confirm('Bu teklifin bilgileri yeni bir teklife kopyalansın mı? Mevcut kayıt değişmeyecek.')) return; duzenlenenTeklifId = null; duzenlemeSekmesiniKapat(); const bugun = new Date(); const tarih = [bugun.getFullYear(),String(bugun.getMonth()+1).padStart(2,'0'),String(bugun.getDate()).padStart(2,'0')].join('-'); const kopya = {...kaynak, id: null, teklifNo: sonrakiNo(), revizyonNo: '00', teklifTarihi: tarih, kayitZamani: null}; uygulaVeri(kopya); duzenlenenTeklifId = null; window.tabDegis('yeniTeklif'); if (window.showAppToast) window.showAppToast('Yeni teklif kopyası hazır. Kaydetmeden önce bilgileri kontrol et.', 'success'); }; window.verilenTeklifleriExcelAktar=excelArsivIndir; window.addEventListener('load',()=>{ noyuHazirla(); arsiviCiz(); }); })();
OneDrive otomatik kayıt ayarları
Excel ve PDF klasörlerini bir kez seçin.

RÜZGAR TEKNOLOJİ

Bulut senkronizasyonlu teklif yönetimi

Firebase bağlantısı hazırlanıyor…

Eski tarayıcı kayıtları silinmez. İlk veri aktarımı ayrıca onaylanır.

Başka cihazda değişiklik algılandı.