Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

Get_order_manually.gs

Ouverte
#616 0 commentaires 0 réactions 1 personne assignée Voir sur GitHub

@vinay-google y travaille déjà.

Depuis le 12/2/2026.

Évaluation

Cette issue n'a pas encore été évaluée.

Description

const WEBHOOK_NAME = "orders"; // اسم Sheet
const WC_SITE_URL = "https://acctopix.com"; // رابط المتجر

function fetchOrdersManually() {
const scriptProperties = PropertiesService.getScriptProperties();
const WC_CONSUMER_KEY = scriptProperties.getProperty("acctopix_CONSUMER_KEY");
const WC_CONSUMER_SECRET = scriptProperties.getProperty("acctopix_CONSUMER_SECRET");

if (!WC_CONSUMER_KEY || !WC_CONSUMER_SECRET) {
Logger.log("❌ API keys are missing in Script Properties");
return;
}

const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(WEBHOOK_NAME);
if (!sheet) {
Logger.log("❌ Sheet not found: " + WEBHOOK_NAME);
return;
}

// Headers بالترتيب المطلوب + CRM_ID
const headers = [
"CRM_ID",
"ID","Store Name","ip_address","source","info device",
"Date Created","date modified","Billing Name","Billing Email","Billing Phone",
"Device Streaming","Adult Content","Package","Total","Currency",
"Products","mac mag box","app","mac adress APP","KEY APP",
"servar","user panel","M3U LINK","user","pass",
"server","Subscription date","expiration date","note","bank account name",
"Status"
];

// إضافة Headers إذا لم تكن موجودة
if (sheet.getLastRow() === 0) {
sheet.appendRow(headers);
}

// 🔽 جلب كل الطلبات من WooCommerce عبر الصفحات
let page = 1;
let allOrders = [];

while (true) {
const url = ${WC_SITE_URL}/wp-json/wc/v3/orders?per_page=50&page=${page}&consumer_key=${WC_CONSUMER_KEY}&consumer_secret=${WC_CONSUMER_SECRET};
const response = UrlFetchApp.fetch(url);
const orders = JSON.parse(response.getContentText());

if (orders.length === 0) break;

allOrders = allOrders.concat(orders);
page++;

}

// 🔽 جلب IDs الموجودة مسبقًا في العمود 2 (ID المتجر)
let existingIds = [];
if (sheet.getLastRow() > 1) {
existingIds = sheet.getRange(2, 2, sheet.getLastRow() - 1, 1)
.getValues()
.flat();
}

// 🔽 فلترة الطلبات الجديدة فقط
let newOrders = allOrders.filter(order => !existingIds.includes(order.id));

if (newOrders.length === 0) {
Logger.log("ℹ No new orders to add.");
return;
}

// 🔽 ترتيب الطلبات الجديدة من الأقدم للأحدث حسب Date Created
newOrders.sort((a, b) => new Date(a.date_created) - new Date(b.date_created));

let newRows = [];

newOrders.forEach(order => {

const crmId = generateCRMID(); // توليد CRM_ID داخلي
const billing = order.billing || {};
const meta = order.meta_data || [];

let device_streaming="", adult_content="", select_package="", source="";

meta.forEach(m=>{
  const value = m.value || "";
  switch(m.key){
    case "device_streaming": device_streaming = value; break;
    case "adult_content": adult_content = value; break;
    case "select_package": select_package = value; break;
    case "_wc_order_attribution_utm_source": source = value; break;
  }
});

const product_names = order.line_items ? order.line_items.map(i=>i.name).join(", ") : "";
let storeName = "";
try { storeName = extractDomainFromUrl(order._links.self[0].href); } catch(e){}

newRows.push([
  crmId,
  order.id,
  storeName,
  order.customer_ip_address || "",
  source,
  order.customer_user_agent || "",
  order.date_created ? new Date(order.date_created) : "",
  order.date_modified ? new Date(order.date_modified) : "",
  `${billing.first_name || ""} ${billing.last_name || ""}`,
  billing.email || "",
  billing.phone || "",
  device_streaming,
  adult_content,
  select_package,
  order.total || "",
  order.currency || "",
  product_names,
  "", "", "", "", "", "", "", "", "", "",
  "", "", "", "", "",
  order.status || ""
]);

});

// 🔽 إدخال الطلبات الجديدة دفعة واحدة في أول سطر فارغ
sheet.getRange(sheet.getLastRow() + 1, 1, newRows.length, newRows[0].length)
.setValues(newRows);

Logger.log(✅ ${newRows.length} new orders added.);
}

// 🔹 دالة توليد CRM_ID داخلي
function generateCRMID() {
const props = PropertiesService.getScriptProperties();
let lastId = parseInt(props.getProperty("LAST_CRM_ID") || "0", 10);

lastId++;
props.setProperty("LAST_CRM_ID", lastId.toString());

return "CRM-" + Utilities.formatString("%06d", lastId);
}

// 🔹 دالة استخراج اسم المتجر من URL
function extractDomainFromUrl(url) {
try {
return url.replace(/^https?:///, "").split("/")[0];
} catch(e){
return "";
}
}

Langage dominant
JavaScript
Étoiles
5.2k
Forks
2k
Métriques de merge des PR
Aucune PR mergée en 30 j

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de googleworkspace/apps-script-samples

Toutes les issues de googleworkspace/apps-script-samples

Issues similaires

Plus d'issues JavaScript

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.