DİCLE HALI SAHA REZERVASYON PANELİ
// ===================================================================
// DICLE HALI SAHA - 0 KUSURSUZ PANEL DESTEKLİ MOTOR V8.9 (OFFICIAL JSON)
// ===================================================================
// ? MÜŞTERİYE GİDECEK SMS METNİ
function smsMetniOlustur(isim, tarih, saat) {
return "Sayin " + isim + ", " + tarih + " gunu saat " + saat + " icin rezervasyonunuz onaylanmistir. Dicle Hali Saha.";
}
// ? POSTA GÜVERCİNİ SMS OPERATÖR BİLGİLERİNİZ
const SMS_KULLANICI_ADI = "Arispor75";
const SMS_SIFRE = "00001642_Dy";
const SMS_BASLIK = "ARISPOR";
// ? E-TABLONUN YUKARISINDAKİ MENÜ
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('? SMS Sistemi')
.addItem('? Sistemi Yetkilendir (İzin Ver)', 'googleIzinleriniZorlaTetikle')
.addToUi();
}
function googleIzinleriniZorlaTetikle() {
var response = UrlFetchApp.fetch("https://www.postaguvercini.com", {"muteHttpExceptions": true});
SpreadsheetApp.getUi().alert("Tebrikler Başkan! SMS Gönderim Yetkisi Başarıyla Aktif Edildi.");
}
function doGet(e) {
var op = e.parameter.islem;
var callback = e.parameter.callback;
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form_Responses");
if (!sheet) { sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0]; }
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
var tarihColIdx = -1, saatColIdx = -1, smsDurumColIdx = -1;
for (var i = 0; i < headers.length; i++) {
var hName = headers[i].toString().trim();
if (hName === "Maç Tarihi Seçiniz") { tarihColIdx = i + 1; }
if (hName === "Saat Seçiniz") { saatColIdx = i + 1; }
if (hName === "SMS Durumu") { smsDurumColIdx = i + 1; }
}
if (tarihColIdx === -1) tarihColIdx = 4;
if (saatColIdx === -1) saatColIdx = 5;
if (smsDurumColIdx === -1) {
smsDurumColIdx = headers.length + 1;
sheet.getRange(1, smsDurumColIdx).setValue("SMS Durumu");
}
// ❌ PROTOKOL 1: REZERVASYON SİLME
if (op === "sil") {
var satirNo = parseInt(e.parameter.satir, 10);
try {
if (satirNo && satirNo >= 2 && satirNo <= sheet.getLastRow()) {
sheet.deleteRow(satirNo);
var sonuc = JSON.stringify({ durum: "silindi" });
return ContentService.createTextOutput(callback ? callback + "(" + sonuc + ")" : sonuc).setMimeType(callback ? ContentService.MimeType.JAVASCRIPT : ContentService.MimeType.JSON);
}
} catch(err) {
return ContentService.createTextOutput(err.toString());
}
}
// ?️ PROTOKOL 2: PANEL İÇİN VERİ ÇEKME
if (op === "tumKayitlar") {
var rows = sheet.getLastRow();
var veriler = [];
if (rows >= 2) {
var tumYigin = sheet.getRange(2, 1, rows - 1, sheet.getLastColumn()).getDisplayValues();
for (var i = 0; i < tumYigin.length; i++) {
if (tumYigin[i][1]) {
veriler.push({
satirNo: i + 2,
zamanDamgasi: tumYigin[i][0],
isim: tumYigin[i][1],
tel: tumYigin[i][2],
tarih: tumYigin[i][tarihColIdx - 1],
saat: tumYigin[i][saatColIdx - 1]
});
}
}
}
veriler.reverse();
var sonuc = JSON.stringify({ kayitlar: veriler });
return ContentService.createTextOutput(callback ? callback + "(" + sonuc + ")" : sonuc).setMimeType(callback ? ContentService.MimeType.JAVASCRIPT : ContentService.MimeType.JSON);
}
// ? PROTOKOL 3: REZERVASYON KAYDETME VE SMS MOTORU
if (op === "kaydet") {
var isim = e.parameter.isim;
var tel = e.parameter.tel;
var tarih = e.parameter.tarih;
var saat = e.parameter.saat;
var hedonTarih = tarihiStandartYap(tarih);
var hedefSaatTemiz = stringTemizle(saat);
var rows = sheet.getLastRow();
if (rows >= 2) {
var tarihVerileri = sheet.getRange(2, tarihColIdx, rows - 1, 1).getValues();
var saatVerileri = sheet.getRange(2, saatColIdx, rows - 1, 1).getValues();
for (var i = 0; i < tarihVerileri.length; i++) {
var excelGunu = tarihiStandartYap(tarihVerileri[i][0]);
var excelSaati = stringTemizle(saatVerileri[i][0]);
if (excelGunu === hedonTarih && excelSaati === hedefSaatTemiz && excelSaati !== "") {
var sonuc = JSON.stringify({ durum: "mukerrer" });
return ContentService.createTextOutput(callback ? callback + "(" + sonuc + ")" : sonuc).setMimeType(callback ? ContentService.MimeType.JAVASCRIPT : ContentService.MimeType.JSON);
}
}
}
var yeniSatir = [];
yeniSatir[0] = new Date();
yeniSatir[1] = isim;
yeniSatir[2] = tel;
yeniSatir[tarihColIdx - 1] = hedonTarih;
yeniSatir[saatColIdx - 1] = saat;
sheet.appendRow(yeniSatir);
var eklenenSatirNo = sheet.getLastRow();
var operatorCevabi = "";
try {
var temizTel = tel.toString().replace(/[^0-9]/g, "");
if (temizTel.startsWith("0")) { temizTel = temizTel.substring(1); }
if (!temizTel.startsWith("90") && temizTel.length === 10) { temizTel = "90" + temizTel; }
var hamMetin = smsMetniOlustur(isim, hedonTarih, saat);
hamMetin = hamMetin.replace(/ı/g, "i").replace(/ğ/g, "g").replace(/ü/g, "u").replace(/ş/g, "s").replace(/ö/g, "o").replace(/ç/g, "c")
.replace(/İ/g, "I").replace(/Ğ/g, "G").replace(/Ü/g, "U").replace(/Ş/g, "S").replace(/Ö/g, "O").replace(/Ç/g, "C");
// ? POSTA GÜVERCİNİ RESMİ DOKÜMANTASYON ŞABLONU (DİREKT PARAMETRE ENJEKSİYONU)
var jsonPaketi = {
"Username": SMS_KULLANICI_ADI,
"Password": SMS_SIFRE,
"Message": hamMetin,
"Receivers": [ temizTel ]
};
var options = {
"method": "post",
"contentType": "application/json; charset=utf-8",
"payload": JSON.stringify(jsonPaketi),
"muteHttpExceptions": true
};
var response = UrlFetchApp.fetch("https://www.postaguvercini.com/api_json/v1/Sms/Send_1_N", options);
operatorCevabi = response.getContentText();
} catch(smsHata) {
operatorCevabi = "Sistem Hatasi: " + smsHata.toString();
}
sheet.getRange(eklenenSatirNo, smsDurumColIdx).setValue(operatorCevabi);
var sonuc = JSON.stringify({ durum: "basarili" });
return ContentService.createTextOutput(callback ? callback + "(" + sonuc + ")" : sonuc).setMimeType(callback ? ContentService.MimeType.JAVASCRIPT : ContentService.MimeType.JSON);
}
// ? PROTOKOL 4: ANLIK SAAT SORGULAMA
var sorgulananTarih = e.parameter.tarih;
var sistemZamani = new Date();
var bugunStandart = Utilities.formatDate(sistemZamani, "GMT+3", "dd.MM.yyyy");
if (!sorgulananTarih || sorgulananTarih === "null" || sorgulananTarih === "") { sorgulananTarih = bugunStandart; }
var arananTarih = tarihiStandartYap(sorgulananTarih);
var alinmisSaatler = [];
var rows = sheet.getLastRow();
if (rows >= 2 && sorgulananTarih) {
var tarihVerileri = sheet.getRange(2, tarihColIdx, rows - 1, 1).getValues();
var hamSaatVerileri = sheet.getRange(2, saatColIdx, rows - 1, 1).getDisplayValues();
for (var i = 0; i < tarihVerileri.length; i++) {
var excelGunu = tarihiStandartYap(tarihVerileri[i][0]);
var orjSaat = hamSaatVerileri[i][0].toString().trim();
if (excelGunu === arananTarih && orjSaat !== "") {
if (alinmisSaatler.indexOf(orjSaat) === -1) { alinmisSaatler.push(orjSaat); }
}
}
}
var sonuc = JSON.stringify({ doluSaatler: alinmisSaatler, aktifTarih: arananTarih });
return ContentService.createTextOutput(callback ? callback + "(" + sonuc + ")" : sonuc).setMimeType(callback ? ContentService.MimeType.JAVASCRIPT : ContentService.MimeType.JSON);
}
function tarihiStandartYap(tarihVerisi) {
if (!tarihVerisi) return "";
if (tarihVerisi instanceof Date) { return Utilities.formatDate(tarihVerisi, "GMT+3", "dd.MM.yyyy"); }
var s = tarihVerisi.toString().trim();
if (s.indexOf("-") !== -1) {
var p = s.split("-");
if (p[0].length === 4) return p[2] + "." + p[1] + "." + p[0];
return p[0] + "." + p[1] + "." + p[2];
}
return s;
}
function stringTemizle(str) {
if (!str) return "";
return str.toString().replace(/\s+/g, "").toLowerCase();
}
Dicle Halı Saha Rezervasyon Paneli
✓
Rezervasyonunuz Başarıyla Alındı!
Seçtiğiniz tarih ve saat halı saha sisteminde adınıza başarıyla kaydedilmiştir. Maç saatinde sahada görüşmek üzere başkan!