বাকি আছে (To Do)
চলমান (In Progress)
রিভিউ (Under Review)
সম্পন্ন (Completed)
টাস্ক ডাটাবেস রেকর্ডস
গুগল শিটের `Tasks_Database` তালিকার লাইভ ভিউ
| ID | টাস্ক শিরোনাম | ওয়েবসাইট পেজ | ক্যাটাগরি | স্ট্যাটাস | প্রায়োরিটি | অ্যাসাইনি | ভার্সন | ডেডলাইন | অ্যাকশন |
|---|
Changelog
রিয়েলটাইম ডিপ্লয়মেন্ট ট্র্যাকার
ওয়েবসাইট আপডেট ও ভার্সন রিলিজ লগ
আপনার ওয়েবসাইটের প্রতিটি কোড রিলিজ, লাইভ আপডেট ও প্যাচ সরাসরি Google Sheet-এর `Website_Updates_Log` সিটের সাথে সংরক্ষিত হয়।
ডিপ্লয়মেন্ট হিস্ট্রি টাইমলাইন
৪টি রিলিজ রেকর্ড
সর্বমোট টাস্ক
0
সব ক্যাটাগরি মিলিয়ে
সম্পন্ন হার
0%
চলমান কাজ
0
ইন-প্রগ্রেস ও রিভিউ
লাইভ রিলিজ
0
সফল ডিপ্লয়মেন্ট
ক্যাটাগরি ভিত্তিক টাস্ক বন্টন
ওয়েবসাইট পেজ ভিত্তিক আপডেট (Affected Routes)
Website Task Management & Updates Database
Google Drive Sheet ID: 1ruS1ovIgL2EUpcfINXNVVV87Ym4U76osnIqb4enNgMk
Google Apps Script Web App URL সংযোগ
গুগল শিটে নতুন টাস্ক বা আপডেট দ্বিমুখী লাইভ সেভ করার জন্য আপনার Apps Script Web App URL এখানে যুক্ত করুন।
Google Apps Script কোড (Code.gs)
// Google Apps Script (Code.gs) for WebTask Database
function doGet(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var taskSheet = ss.getSheetByName("Tasks_Database");
var updateSheet = ss.getSheetByName("Website_Updates_Log");
var taskData = taskSheet ? taskSheet.getDataRange().getValues() : [];
var updateData = updateSheet ? updateSheet.getDataRange().getValues() : [];
return ContentService.createTextOutput(JSON.stringify({
status: "success",
tasks: formatRows(taskData),
updates: formatRows(updateData)
})).setMimeType(ContentService.MimeType.JSON);
}
function doPost(e) {
try {
var params = JSON.parse(e.postData.contents);
var ss = SpreadsheetApp.getActiveSpreadsheet();
if (params.type === "ADD_TASK") {
var sheet = ss.getSheetByName("Tasks_Database");
sheet.appendRow([
params.task.id,
params.task.title,
params.task.page,
params.task.category,
params.task.status,
params.task.priority,
params.task.assignedTo,
params.task.version,
params.task.dueDate,
Utilities.formatDate(new Date(), "GMT+6", "yyyy-MM-dd HH:mm"),
params.task.notes
]);
} else if (params.type === "ADD_UPDATE") {
var sheet = ss.getSheetByName("Website_Updates_Log");
sheet.appendRow([
params.update.id,
params.update.version,
params.update.title,
params.update.page,
params.update.date,
params.update.status,
params.update.summary
]);
}
return ContentService.createTextOutput(JSON.stringify({status: "success"}))
.setMimeType(ContentService.MimeType.JSON);
} catch(err) {
return ContentService.createTextOutput(JSON.stringify({status: "error", message: err.toString()}))
.setMimeType(ContentService.MimeType.JSON);
}
}
function formatRows(data) {
if (data.length <= 1) return [];
var headers = data[0];
var rows = [];
for (var i = 1; i < data.length; i++) {
var item = {};
for (var j = 0; j < headers.length; j++) item[headers[j]] = data[i][j];
rows.push(item);
}
return rows;
}