
Plandora
מערכת ניהול פרויקטים בקוד פתוח בג'אווה
תכנן, עקוב וניהול פרויקטים עם תרשימי גאנט, לוחות אג'יליים, זרימת עבודה ואינטגרציות דרך פלטפורמת ג'אווה בקוד פתוח.
מה זה Plandora?
Plandora הוא מערכת ניהול פרויקטים קוד פתוח מבוגרת שנבנתה ב-Java, מיועדת לתכנון, מעקב ושיתוף פעולה ברמת ארגונית. היא מספקת כלים מקיפים כולל תרשימי גאנט, לוחות אג'יל, אוטומציה של זרימות עבודה, תכנון קיבולת משאבים ודיווח מותאם אישית באמצעות JasperReports. עם תמיכה מובנית באינטגרציות כגון JIRA, SVN ו-RT4, Plandora מאפשרת לצוותים לנהל פרויקטים מורכבים תוך שמירה על עקביות ושקיפות בין מחלקות. מערכת השדות-מטא הגמישה שלה וטפסים שניתן להתאים מאפשרות לארגונים להתאים את הפלטפורמה לתהליכים ייחודיים ללא שינוי קוד.
המערכת מדגישה שימושיות והרחבה, עם בסיס ידע עם חיפוש בסגנון גוגל, סקרים מרובי רמות לפרויקטים, ניהול סיכונים, ורשימות משימות מבוססות TO-Do. Plandora תומכת הן במתודולוגיות מפל מים מסורתיות והן בגישות אג'יליות דרך לוח מאזן מאוזן, גאדג'טים של ירידת משימות באיטרציה, והיררכיות משימות מאקרו. מאז האתחול מחדש ב‑2023, הפרויקט תיקן יותר מ‑30 באגים קריטיים, שיפר ביצועים, הוסיף ייבוא/ייצוא CSV, ושיפר יכולות דיווח—כולל יצירת דוחות מתוזמנים ופלט JPG. מפתחים יכולים לתרום דרך מאגר ה-[GitHub של Plandora](https://github.com/Cynjut/Plandora) ולהרחיב פונקציונליות באמצעות הארכיטקטורה המודולרית שלו ותבניות JDBC/DAO.
התחלה עם Plandora
Plandora היא יישום אינטרנט מבוסס Java שבדרך כלל מתפרס על Tomcat או שרתי JEE אחרים. כדי להתחיל, יש לשכפל את הקוד ממאגר ה-[GitHub של Plandora](https://github.com/Cynjut/Plandora), לוודא ש‑Java 8+ ו‑Maven מותקנים, ולבנות את קובץ ה‑WAR באמצעות `mvn clean package`. פרסו את קובץ ה‑WAR שנוצר למכולת ה‑servlet שלכם. המערכת תומכת הן במאגר חיבורים של Tomcat והן בחיבורים ישירים ל‑JDBC (מוגדרים ב‑`web.xml`). לאחר ההגדרה הראשונית, יש להגדיר אישורי מסד נתונים, הגדרות SMTP, ולשלב עם מערכות חיצוניות כגון JIRA או SVN. Plandora כוללת אשפי הגדרה מובנים לרכיבים מרכזיים כגון זרימות עבודה, שדות‑מטא ותפקידי משתמש כדי לזרז את הפריסה.
בנייה והפצה של Plandora באמצעות Maven
# Clone the repository
git clone https://github.com/Cynjut/Plandora.git
cd Plandora
# Build the WAR file
mvn clean package
# Deploy to Tomcat
cp target/plandora.war $TOMCAT_HOME/webapps/
תרשימי גאנט עם אירועי לוח שנה ואבני דרך
גנט של Plandora מציג את לוחות הזמנים של הפרויקטים עם תמיכה במשימות מאקרו, אבני דרך, ואירועי לוח שנה. הוא מסנן באופן דינמי משאבים ומשימות, ומבטיח מעקב מדויק אחר ההתקדמות גם כאשר משאבים מוקצים או מוסרים. הגרף כולל כעת סמני אבני דרך ומשתלב עם לוחות השנה של הפרויקט כדי לשקף ימי עבודה וחגים. משתמשים יכולים לייצא תצוגות גנט ל‑CSV, XLS או JPG לצורך דיווח ושיתוף. שיפורי ביצועים מבטיחים רינדור חלק עבור מערכי נתונים גדולים, והמערכת מטפלת כראוי בקיצור משימות במהלך ייבוא מ‑MSProject. שדות מותאמים ושדות מטה יכולים להיות מוצגים ישירות על רשת הגנט, מה שמאפשר הקשר עשיר יותר מבלי לעזוב את תצוגת הלוח זמנים. זה עושה את Plandora אידיאלית הן למנהלי פרויקטים מסורתיים והן לצוותים היברידיים המשתמשים בתערובות אג'יל‑ווטרפל.
ייצוא תרשים גאנט ל‑JPG באמצעות דוח מתוזמן
// Use Report2File agent to schedule Gantt export
Report2File report = new Report2File();
report.setReportName("ProjectGantt");
report.setOutputFormat("jpg");
report.setSchedule("0 0 2 * * ?"); // Daily at 2 AM
report.setFilePath("/reports/gantt/");
report.execute();
אינטגרציה עם JIRA לייבוא בעיות
Plandora כולל סוכן ייעודי לייבא בעיות JIRA כבקשות Plandora, כולל קבצים מצורפים ונתוני מטא. אינטגרציה זו מגשרת בין ניהול כרטיסים ותכנון פרויקטים, מאפשרת לבעלי עניין לא‑טכניים להשתמש ב‑RT4 או JIRA בעוד המפתחים מנהלים עבודה ב‑Plandora. תהליך הייבוא משמר את יחסי הבעיות, העדיפות, המיועדים והזמנים. הוא תומך בסינון לפי פרויקט, סטטוס או טווח תאריכים ומטפל באצוות גדולות ביעילות. לאחר הייבוא, הבעיות הופכות לבקשות Plandora מלאות עם שדות ניתנים לעריכה, מעברי זרימת עבודה והיררכיות משימות. תכונה זו חשובה במיוחד לארגונים שעוברים מ‑JIRA או מתחזקים מערכות כפולות. המפתחים יכולים להרחיב את הסוכן באמצעות תצורה או תוספים מותאמים כדי לתמוך בשדות JIRA נוספים או בשדות מותאמים.
ייבא בעיות JIRA באמצעות סוכן שורת פקודה
// Example agent invocation (simplified)
JiraImporter importer = new JiraImporter();
importer.setJiraUrl("https://jira.example.com");
importer.setUsername("api_user");
importer.setPassword("token");
importer.setProjectKey("PROJ");
importer.setIssueFilter("status = 'Done'");
importer.setImportAttachments(true);
importer.execute();
ניהול והשוואת קיבולת משאבים
צורת קיבולת המשאבים של Plandora מאפשרת תכנון מפורט ומעקב אחרי זמינות הצוות לעומת השימוש בפועל. היא מחשבת קיבולת משומשת על בסיס משימות מוקצות, איטרציות וגיליונות זמן, עם מסננים לערכים אפסים/ריקים וטווחי תאריכים. משתמשים יכולים להשוות קיבולת משוערת לקיבולת משומשת צידו לצד כדי לזהות הקצאה יתרה או חסרה. המערכת תומכת במשאבים שהוסרו בצורה חלקה, מתקנת שגיאות שאילתות DB כאשר חברים מוסרים מכל הפרויקטים. נתוני הקיבולת משולבים עם תרשימי גאנט וגאדג'טים של שריפת משאבים, מאפשרים תכנון ריאליסטי של ספרינטים ושלבי מפתח. מנהלים יכולים להתאים הערכות באופן דינמי, והשינויים מתפזרים לדוחות וללוחות מחוונים במטה. תכונה זו קריטית לממשל וקביעת תחזיות של משאבים ברמת פורטפוליו בסביבות מרובות פרויקטים.
סנן קיבולת משאבים לפי ערכי אפס
// Pseudo-code for capacity filtering logic
ResourceCapacityFilter filter = new ResourceCapacityFilter();
filter.setProjectId(projectId);
filter.setShowZeroValues(true);
filter.setCompareEstimates(true);
List entries = capacityService.getFilteredCapacities(filter);
for (CapacityEntry entry : entries) {
if (entry.getUsed() == 0) {
System.out.println("Unused capacity: " + entry.getResourceName());
}
}
אוטומציית זרימת עבודה והתאמת שדות מטה
מנוע זרימת העבודה של Plandora תומך ברצפי אישור מותאמים, במעברי סטטוס ובתגובות המשך הקשורות לבקשות, משימות ואירועים. ממשק ה‑popup של זרימת העבודה מציג כעת תיאורי בקשה קשורים והיסטוריית תגובות מלאה, משפר את העקביות. שדות‑מטא מאפשרים למנהלים להגדיר תכונות מותאמות (למשל, תגים של ציות, מזהי לקוחות) עבור משימות, בקשות ופרויקטים—כולל שדות חובה המוכלים באמצעות אימות UI. שדות אלה מופיעים ברשתות, בדוחות ובייצוא, ומאפשרים מודל נתונים גמיש ללא שינוי קוד. המערכת תומכת גם בתצוגת שדות‑מטא ברשתות הטופס הראשי ובייבוא CSV, ומבטיחה עקביות בנקודות הקלט. גמישות זו עושה את Plandora מתאימה לתעשיות מוסדרות ולמבנים ארגוניים מורכבים הדורשים מסלולי ביקורת ותהליכים סטנדרטיים.
הגדר שדה-מטא חובה באמצעות API
// Example: Mark meta-field as mandatory
MetaField field = metaFieldService.findById("client_id");
field.setIsMandatory(true);
field.setValidationRegex("^[A-Z]{3}[0-9]{4}$");
metaFieldService.update(field);
// Validation enforced in forms and imports
if (request.getClientId() == null || request.getClientId().isEmpty()) {
throw new ValidationException("Client ID is required");
}
