فهرست منبع

fix(api): use v3 endpoint for listTimesheets with module=task parameter

ShadowMan Service User 20 ساعت پیش
والد
کامیت
cc3d3431e0
1فایلهای تغییر یافته به همراه56 افزوده شده و 22 حذف شده
  1. 56 22
      lib/tasks.js

+ 56 - 22
lib/tasks.js

@@ -97,21 +97,12 @@ function listProjects(token, index) {
         return { error: 'Missing portal_id in plugin config. Run resolve_portal first.' };
     }
 
-    var url = API_BASE + '/restapi/portal/' + portalId + '/projects/?index=' + encodeURIComponent(String(index));
-    var headers = { 'Authorization': 'Zoho-oauthtoken ' + token };
-
-    var resp = shadowman.http.request(url, { method: 'GET', headers: headers });
-
-    if (resp.status === 401) {
-        var auth = require('./auth');
-        var newToken = auth.getValidToken();
-        if (!newToken) return { error: 'Authentication expired and refresh failed. Re-run setup_auth.' };
-        headers['Authorization'] = 'Zoho-oauthtoken ' + newToken;
-        resp = shadowman.http.request(url, { method: 'GET', headers: headers });
-    }
+    var params = {};
+    if (index) params.index = String(index);
 
-    if (resp.status >= 400) return { error: 'Zoho API error (' + resp.status + '): ' + resp.body };
-    try { return JSON.parse(resp.body); } catch (e) { return { error: 'Invalid JSON: ' + resp.body }; }
+    return apiCall(token, 'GET',
+        '/api/v3/portal/{PORTALID}/projects'
+        .replace('{PORTALID}', portalId), null, params);
 }
 
 // --- Tasks (v3) ---
@@ -290,16 +281,59 @@ function logTime(token, projectId, args) {
         .replace('{PROJECTID}', projectId), body);
 }
 
+function getProject(token, projectId) {
+    var portalId = shadowman.config.value('portal_id');
+    if (!portalId) return { error: 'Missing portal_id' };
+    return apiCall(token, 'GET',
+        '/api/v3/portal/{PORTALID}/projects/{PROJECTID}'
+        .replace('{PORTALID}', portalId)
+        .replace('{PROJECTID}', projectId), null, {});
+}
+
 function listTimesheets(token, projectId, filters) {
-    var params = {};
-    if (filters.task_id) params.task_id = String(filters.task_id);
-    if (filters.from_date) params.from_date = filters.from_date;
-    if (filters.to_date) params.to_date = filters.to_date;
-    if (filters.index) params.index = String(filters.index);
+    var portalId = shadowman.config.value('portal_id');
+    if (!portalId) return { error: 'Missing portal_id in plugin config.' };
 
-    return apiCall(token, 'GET',
-        '/api/v3/portal/{PORTALID}/projects/{PROJECTID}/logs'
-        .replace('{PROJECTID}', projectId), null, params);
+    var params = {
+        view_type: 'customdate'
+    };
+
+    if (filters.from_date) {
+        var parts = filters.from_date.split('-');
+        if (parts.length === 3) params.start_date = parts[2] + '-' + parts[0] + '-' + parts[1];
+        else params.start_date = filters.from_date;
+    } else {
+        var d = new Date();
+        d.setDate(d.getDate() - 30);
+        params.start_date = d.getFullYear() + '-' + String(d.getMonth() + 1).padStart(2, '0') + '-' + String(d.getDate()).padStart(2, '0');
+    }
+    
+    if (filters.to_date) {
+        var parts = filters.to_date.split('-');
+        if (parts.length === 3) params.end_date = parts[2] + '-' + parts[0] + '-' + parts[1];
+        else params.end_date = filters.to_date;
+    } else {
+        var today = new Date();
+        params.end_date = today.getFullYear() + '-' + String(today.getMonth() + 1).padStart(2, '0') + '-' + String(today.getDate()).padStart(2, '0');
+    }
+    
+    if (filters.index) params.page = String(filters.index);
+
+    if (filters.task_id) {
+        params.module = JSON.stringify({ id: String(filters.task_id), type: 'task' });
+    } else {
+        params.module = JSON.stringify({ type: 'task' });
+    }
+
+    var url = '/api/v3/portal/{PORTALID}/timelogs'.replace('{PORTALID}', portalId);
+    if (projectId) {
+        // Ha van projekt ID, a projekt szintű végpontot hívjuk
+        url = '/api/v3/portal/{PORTALID}/projects/{PROJECTID}/timelogs'
+            .replace('{PORTALID}', portalId)
+            .replace('{PROJECTID}', projectId);
+    }
+
+    return apiCall(token, 'GET', url, null, params);
 }
 
 function deleteTimesheet(token, projectId, logId) {