5) مقتطف من الكود (Code.gs)
/**
* أتمتة الطلبات في Google Sheets
* - يولّد فاتورة PDF لكل طلب جديد (عمود "حالة الفاتورة" فارغ)
* - يبني تقريراً يومياً في ورقة "التقارير"
* - يرسل ملخصاً يومياً بالبريد
* الأعمدة المتوقعة في ورقة "الطلبات":
* رقم الطلب | التاريخ | اسم العميل | الجوال | البريد | المدينة | المنتج | الكمية | سعر الوحدة | الحالة | حالة الفاتورة
*/
const CONFIG = {
ORDERS_SHEET: 'الطلبات',
REPORT_SHEET: 'التقارير',
STORE_NAME: 'دار عَبير',
VAT_NUMBER: '300000000000003', // رقم ضريبي تجريبي
VAT_RATE: 0.15,
SUMMARY_EMAIL: 'owner@example.com', // غيّره لبريدك
INVOICE_FOLDER_NAME: 'الفواتير',
SEND_INVOICE_TO_CUSTOMER: false,
};
function onOpen() {
SpreadsheetApp.getUi().createMenu('⚙️ الأتمتة')
.addItem('توليد الفواتير الجديدة', 'generateInvoices')
.addItem('تحديث التقرير اليومي', 'buildDailyReport')
.addItem('إرسال الملخص اليومي الآن', 'sendDailySummary')
.addSeparator()
.addItem('تفعيل التشغيل التلقائي اليومي', 'installTriggers')
.addToUi();
}
function getOrders_() {
const sh = SpreadsheetApp.getActive().getSheetByName(CONFIG.ORDERS_SHEET);
const values = sh.getDataRange().getValues();
const headers = values.shift();
const idx = name => headers.indexOf(name);
return { sh, headers, rows: values, idx };
}
function getFolder_() {
const it = DriveApp.getFoldersByName(CONFIG.INVOICE_FOLDER_NAME);
return it.hasNext() ? it.next() : DriveAp…