לדלג לתוכן הראשי

API ליצירת מחלקה, תפקיד ואתר

קריאות API שיוצרות מחלקה, תפקיד או אתר חדשים ממערכת חיצונית: הפרמטרים, מה כל שדה שווה במסך, התשובה, השגיאות ומה הקריאות לא עושות.

נכתב על ידי EZTIME SUPPORT

מה זה ומתי צריך את זה

שלוש קריאות API שיוצרות רשומות בסיס חדשות בחברה בלי להיכנס למסכים: createDept יוצרת מחלקה או סניף, createRole יוצרת תפקיד או פרויקט, ו-createPlace יוצרת אתר (מודול "סעיף תקציבי/אתר"). זה שימושי כשמערכת אחרת, כמו ERP, מערכת משאבי אנוש או מערכת פרויקטים, היא המקור של הרשימות, ורוצים שכל סניף, פרויקט או אתר חדש שנפתח שם ייפתח מיד גם ב-EZTime. כל קריאה מחזירה את המזהה של הרשומה החדשה, כדי שתוכלו לשמור את הקישור אצלכם.

מה המדריך הזה כולל

המדריך כולל: מי יכול להשתמש בקריאות ומה צריך כדי שיעבדו, איך שולחים את הבקשה, הפרמטרים של כל קריאה ומה כל אחד מהם שווה במסך, התשובה בהצלחה, דוגמאות, הודעות שגיאה, מה הקריאות לא עושות (עריכה, מחיקה, כפילויות), שאלות נפוצות ופתרון בעיות, מילון מונחים וסיכום מהיר. קבלת הרשימות הקיימות מוסברת במדריך "API לקבלת רשימת מחלקות, תפקידים ואתרים". הוספת מקום מותר לדיווח על המפה היא קריאה אחרת, במדריך "מדריך API - הוספת מיקום מותר לדיווח".

🎬 סרטון הסבר קצר

הסרטון מראה איך יוצרים מחלקה, תפקיד ואתר דרך API: הכנת שם משתמש וסיסמה של מנהל, בחירת הקריאה, שליחת POST עם u, p והשם, הוספת שדות רשות, שמירת המזהה שחזר ובדיקת הרשומה החדשה במערכת.

סרטון הסבר: API ליצירת מחלקה, תפקיד ואתר. הכינו משתמש מנהל, בחרו את הקריאה, שלחו POST כטופס, הוסיפו שדות רשות, שמרו את המזהה שחזר, בדקו את הרשומה החדשה

מדריך מקוצר

  1. הכינו שם משתמש וסיסמה של משתמש מנהל במערכת (לא עובד רגיל).

  2. בחרו את הקריאה: api/createDept למחלקה, api/createRole לתפקיד, api/createPlace לאתר.

  3. שלחו POST כטופס, עם u, p והשם: name למחלקה ולאתר, role_name לתפקיד.

  4. הוסיפו את השדות הרשות שאתם צריכים, כמו code או parent_id.

  5. אם status בתשובה הוא true, שמרו את המזהה שחזר (DeptID, INTERNAL_ID או id).

  6. בדקו את הרשומה החדשה במסך המתאים במערכת.

1. מי יכול להשתמש

סוג משתמש

מה קורה

מנהל מערכת או כל סוג מנהל אחר

הרשומה נוצרת בחברה של המשתמש.

עובד (משתמש רגיל)

נדחה עם ההודעה "no authenticated.". שום דבר לא נוצר.

מומלץ ליצור משתמש מנהל מערכת ייעודי לחיבור (למשל api_user), במקום המשתמש האישי של מנהל. כך שינוי סיסמה או עזיבה של מנהל לא ישברו את החיבור.

2. מה צריך כדי שזה יעבוד

  • משתמש מנהל פעיל: אותו שם משתמש וסיסמה שאיתם נכנסים לאתר. המשתמש והעובד שלו פעילים, המשתמש לא מוקפא, ותוקף ההתחברות שלו ושל החברה לא פג.

  • אין מפתח API נפרד: ההזדהות היא רק ב-u וב-p. החברה נקבעת לפי המשתמש, ואין פרמטר של מספר לקוח.

  • שליחה כטופס: שלחו POST עם שדות טופס (x-www-form-urlencoded או multipart/form-data), בקידוד UTF-8. גוף JSON לא נקרא, ואז השדות מגיעים ריקים. פרמטרים בכתובת (GET) נקראים גם הם, אבל לקריאות שיוצרות נתונים עדיף POST, כדי שהסיסמה לא תישמר בלוגים של כתובות.

  • לאתרים: כדי לראות ולנהל את האתרים במסך, מודול "סעיף תקציבי/אתר" צריך להיות פעיל בחברה (במסך "הגדרות גלובליות", בלשונית "הגדרות כלליות").

3. יצירת מחלקה: createDept

פרמטר

חובה?

תיאור

השדה במסך

דוגמה

u, p

כן

שם המשתמש והסיסמה של משתמש מנהל

-

api_user, MyPass123

name

כן

שם המחלקה או הסניף. רווחים בתחילה ובסוף נמחקים.

"שם מחלקה"

סניף חיפה

code

לא

קוד המחלקה, למשל המספר שלה במערכת השכר

"קוד"

40

parent_id

לא

DeptID של מחלקה קיימת בחברה, שתהיה מחלקת האב של החדשה. בלי הפרמטר המחלקה נוצרת ברמה העליונה של העץ.

"מחלקת אב"

101

בהצלחה התשובה היא {"status": true, "DeptID": …} עם המזהה של המחלקה החדשה.

הקריאה לא מגדירה מנהלי מחלקה. את "מנהלי מחלקה/סניף" בוחרים אחר כך במסך "עובדים" ← "ניהול מחלקות/סניפים", בעריכת המחלקה.

POST https://412.co.il/index.php/api/createDeptu=api_user&p=MyPass123&name=סניף חיפה&code=40&parent_id=101

{ "status": true, "DeptID": 104 }

4. יצירת תפקיד: createRole

פרמטר

חובה?

תיאור

השדה במסך "תפקיד/פרויקט"

דוגמה

u, p

כן

שם המשתמש והסיסמה של משתמש מנהל

-

api_user, MyPass123

role_name

כן

שם התפקיד או הפרויקט

"תפקיד/פרויקט"

מלצר

ROLE_CODE

לא

קוד התפקיד (באותיות גדולות, בדיוק כך)

"קוד"

3

export_code

לא

קוד התפקיד בייצוא לשכר

"קוד לייצוא שכר"

103

device_code

לא

המספר שהעובד בוחר בשעון הנוכחות כדי לדווח על התפקיד

"קוד תפקיד/פרויקט בשעון נוכחות"

1

price_hour

לא

שכר שעתי לתפקיד, מספר עם נקודה עשרונית

"שכר שעתי לתפקיד/פרויקט זה"

42.5

role_color

לא

צבע התפקיד, כקוד צבע (hex)

"צבע"

#2E7D32

role_status

לא

1 = פעיל (ברירת מחדל), 0 = לא פעיל

"סטטוס"

1

sync_shift_role

לא

מזהה של תפקיד קיים בסידור העבודה, שהתפקיד החדש יסונכרן איתו

"סנכרן תפקיד/פרויקט עם תפקיד לסידור עבודה"

57

group_ids

לא

מזהי תחומים קיימים לשיוך התפקיד. נשלחים כמערך: group_ids[]=4&group_ids[]=7

"תחום לתפקיד/פרוייקט"

4

בהצלחה התשובה היא {"status": true, "INTERNAL_ID": …} עם המזהה של התפקיד החדש.

  • role_status: שלחו רק 1 או 0. ערך שאינו מספר (למשל true או active) נשמר כ-0, והתפקיד ייווצר לא פעיל.

  • group_ids: ערך בודד בלי סוגריים (group_ids=4) לא נקרא, והתפקיד נוצר בלי תחום. גם לתחום אחד שלחו group_ids[]=4.

  • sync_shift_role: הקריאה רק מקשרת לתפקיד סידור עבודה שכבר קיים. היא לא יוצרת תפקיד חדש בסידור העבודה, כמו שקורה כשמסמנים את האפשרות במסך בזמן הוספת תפקיד.

  • הגדרות נוספות של התפקיד (למשל הגבלת שעות או "סנכרן להוצאה") לא נשלחות בקריאה. אם צריך אותן, ערכו את התפקיד במסך ניהול דיווחים ← "תפקיד/פרויקט".

POST https://412.co.il/index.php/api/createRoleu=api_user&p=MyPass123&role_name=מלצר&ROLE_CODE=3&export_code=103&device_code=1&price_hour=42.5&group_ids[]=4

{ "status": true, "INTERNAL_ID": 21 }

5. יצירת אתר: createPlace

פרמטר

חובה?

תיאור

השדה במסך "אתרים"

דוגמה

u, p

כן

שם המשתמש והסיסמה של משתמש מנהל

-

api_user, MyPass123

name

כן

שם האתר. רווחים בתחילה ובסוף נמחקים.

"שם אתר"

אתר בנייה נתניה

code

לא

קוד האתר

"קוד"

N-01

status

לא

1 = פעיל (ברירת מחדל), 0 = כבוי

"סטטוס" ("פעיל" / "כבוי")

1

note

לא

הערה

"הערה"

כניסה משער 2

בהצלחה התשובה היא {"status": true, "id": …} עם המזהה של האתר החדש.

הקריאה יוצרת את האתר בלבד. שיוך של "שעוני נוכחות", "מדבקות NFC" ו"טאבלטים" לאתר נעשה במסך ניהול דיווחים ← "אתרים" ← "רשימת אתרים", בעריכת האתר (סמל העיפרון).

POST https://412.co.il/index.php/api/createPlaceu=api_user&p=MyPass123&name=אתר בנייה נתניה&code=N-01&status=1&note=כניסה משער 2

{ "status": true, "id": 9 }

6. מה חשוב לדעת לפני שמחברים

  • אין בדיקת כפילויות: שלוש הקריאות לא בודקות אם כבר קיימת רשומה באותו שם. כל קריאה יוצרת רשומה חדשה, גם במחלקות, שבמסך לא מאפשר שני שמות זהים. לפני שיוצרים, משכו את הרשימה הקיימת (getDepts, getRoles, getPlaces) ובדקו אם השם כבר קיים.

  • אחרי שגיאת רשת: אם לא קיבלתם תשובה, ייתכן שהרשומה נוצרה בכל זאת. בדקו ברשימה לפני שאתם שולחים שוב.

  • רק יצירה: אין קריאות לעריכה או למחיקה של מחלקה, תפקיד או אתר. קריאה חוזרת עם אותו שם לא מעדכנת, היא יוצרת רשומה נוספת. עריכה ומחיקה נעשות במסכים.

  • אין מגבלת קריאות: לקריאות האלה אין מגבלה בשעה. כשיוצרים הרבה רשומות, שלחו אותן בזו אחר זו ולא במקביל, ובדקו את status של כל אחת.

  • אין no_have_permission: הקריאות האלה לא תלויות בהגדרות החבילה, בשונה מ-getDaily, מהדוח המסכם ומרשימת העובדים.

  • קוד HTTP: גם קריאה שנכשלה מחזירה בדרך כלל קוד 200. בדקו תמיד את status בגוף התשובה.

הודעות שגיאה

בכישלון התשובה היא {"status": false, "errors": {…}}: שם השדה שנכשל, וההודעה עליו. שום רשומה לא נוצרת.

השגיאה

קריאה

מה זה אומר

מה עושים

"auth": "no authenticated"

כולן

לא נשלחו u ו-p

שלחו אותם כשדות טופס, לא בתוך JSON ולא בכותרות

"auth": "no authenticated."

כולן

שם משתמש או סיסמה שגויים, משתמש לא פעיל, מוקפא או שתוקפו פג, או משתמש מסוג "עובד"

בדקו כניסה לאתר עם אותם פרטים, והשתמשו במשתמש מנהל

"name": "name is required"

createDept, createPlace

name חסר או ריק

שלחו שם. אם שלחתם, כנראה שהנתונים נשלחו כ-JSON

"parent_id": "Parent department not found"

createDept

אין בחברה מחלקה עם ה-DeptID הזה

קחו את המזהה מ-getDepts

"role_name": "role_name is required"

createRole

role_name חסר או ריק

שלחו את שם התפקיד ב-role_name (לא name)

"sync_shift_role": "Shift role not found"

createRole

אין בחברה תפקיד סידור עבודה עם המזהה הזה

שלחו בלי הפרמטר, וקשרו במסך אחרי היצירה

"group_ids": "Group ID … not found"

createRole

אחד התחומים ברשימה לא קיים בחברה (המספר מופיע בהודעה)

תקנו או הסירו את המזהה ושלחו שוב. התפקיד לא נוצר

{ "status": false, "errors": { "parent_id": "Parent department not found" } }

שאלות נפוצות ופתרון בעיות

❓ שלחתי את הנתונים כ-JSON וקיבלתי "name is required"

הקריאות קוראות רק שדות טופס. שלחו POST עם x-www-form-urlencoded (או multipart/form-data), וכל שדה בנפרד.

❓ קיבלתי "no authenticated."

שם המשתמש או הסיסמה לא נכונים, או שהמשתמש הוא עובד רגיל, לא פעיל או מוקפא. נסו להיכנס לאתר עם אותם פרטים בדיוק. תווים כמו &, + או # בסיסמה צריכים קידוד, וספריות HTTP שמקבלות את השדות כרשימה עושות זאת לבד.

❓ יצרתי מחלקה והיא נוצרה פעמיים

הקריאה לא בודקת כפילויות, אז כל שליחה יוצרת מחלקה. מחקו את המיותרת במסך "עובדים" ← "ניהול מחלקות/סניפים", ובמערכת שלכם בדקו את הרשימה (getDepts) לפני כל יצירה.

❓ קיבלתי "Parent department not found"

parent_id צריך להיות DeptID של מחלקה קיימת באותה חברה, מספר בלבד. קחו אותו מ-getDepts, ולא את שם המחלקה או את קוד המחלקה.

❓ המחלקה נוצרה בלי מנהל

זה מכוון: הקריאה לא מגדירה מנהלי מחלקה. בחרו אותם במסך "ניהול מחלקות/סניפים", בעריכת המחלקה.

❓ שלחתי name ליצירת תפקיד וקיבלתי "role_name is required"

בתפקידים שם השדה הוא role_name, ובמחלקות ובאתרים הוא name.

❓ התפקיד נוצר כ"לא פעיל"

כנראה שנשלח role_status עם ערך שאינו 1, למשל true או active. שלחו 1, או השאירו את הפרמטר בחוץ (ברירת המחדל היא פעיל). את התפקיד שנוצר הפעילו במסך "תפקיד/פרויקט".

❓ שלחתי group_ids והתפקיד נוצר בלי תחום

שלחתם ערך בודד (group_ids=4). שלחו כמערך: group_ids[]=4, וגם group_ids[]=7 לתחום נוסף.

❓ קיבלתי "Group ID 9 not found"

התחום עם המזהה הזה לא קיים בחברה, ולכן התפקיד לא נוצר בכלל. מזהי התחומים של תפקידים קיימים מופיעים ב-group_ids של getRoles. את התחומים עצמם מנהלים במסך, כמו שמוסבר ב"הוספת תחום/קבוצה לתפקידים ופרוייקטים".

❓ איך מקשרים את התפקיד החדש לתפקיד בסידור העבודה?

אם אתם יודעים את מזהה התפקיד בסידור העבודה, שלחו אותו ב-sync_shift_role. אם לא, צרו את התפקיד בלי הפרמטר, ואז במסך ניהול דיווחים ← "תפקיד/פרויקט" ערכו אותו, סמנו "סנכרן תפקיד/פרויקט עם תפקיד לסידור עבודה" ובחרו מהרשימה "תפקידים לסידור עבודה".

❓ יצרתי אתר ואני לא רואה אותו במסך

האפשרות "אתרים" מופיעה בתפריט ניהול דיווחים רק כשמודול "סעיף תקציבי/אתר" פעיל בחברה. אם היא לא מופיעה, פנו לשירות הלקוחות. אם היא מופיעה, חפשו את האתר בשדה החיפוש של "רשימת אתרים", ובדקו שנכנסתם לאותה חברה של המשתמש ששלח את הקריאה.

❓ יצרתי אתר דרך createPlace ועובדים לא יכולים להחתים ממנו לפי מיקום

אתר הוא לא מקום מותר לדיווח על המפה. למקום מותר עם קווי רוחב, אורך ורדיוס יש קריאה אחרת, add_location, במדריך "מדריך API - הוספת מיקום מותר לדיווח".

❓ איך משייכים שעון או מדבקת NFC לאתר שנוצר?

במסך ניהול דיווחים ← "אתרים" ← "רשימת אתרים", לחצו על העיפרון של האתר ובחרו את השעונים, המדבקות או הטאבלטים. הקריאה לא עושה את השיוך.

❓ אפשר לעדכן או למחוק מחלקה, תפקיד או אתר דרך ה-API?

לא. יש רק יצירה. קריאה חוזרת עם אותו שם יוצרת רשומה נוספת. עריכה ומחיקה נעשות במסכים "ניהול מחלקות/סניפים", "תפקיד/פרויקט" ו"אתרים".

❓ איך משייכים עובד למחלקה או לתפקיד שיצרתי?

כשיוצרים או מעדכנים עובד דרך ה-API, שולחים את המחלקה והתפקידים שלו, כמו שמוסבר ב"הוספת עובד JSON API". אפשר גם לשייך במסך, בכרטיס העובד.

❓ איך בודקים לפני שמחברים מערכת?

ב-Postman: POST לכתובת הקריאה, לשונית Body ← x-www-form-urlencoded, ושורה לכל שדה. כל בדיקה יוצרת רשומה אמיתית בחברה, לכן צרו רשומת בדיקה אחת, בדקו אותה במסך, ומחקו אותה שם.

❓ קיבלתי status true אבל המזהה שחזר לא נשמר אצלי

הרשומה נוצרה. כדי לא ליצור אותה שוב, משכו את הרשימה (getDepts, getRoles או getPlaces), מצאו אותה לפי השם ושמרו את המזהה שלה.

מילון מונחים

  • u / p - שם המשתמש והסיסמה של משתמש מנהל, שבהם הקריאה מזדהה.

  • DeptID - מזהה המחלקה. חוזר מ-createDept, ומשמש ב-parent_id.

  • מחלקת אב - המחלקה שמעל המחלקה החדשה בעץ הארגוני.

  • INTERNAL_ID - מזהה התפקיד. חוזר מ-createRole.

  • תחום - קבוצה של תפקידים ופרויקטים ("תחום לתפקיד/פרוייקט"), שנשלחת ב-group_ids.

  • אתר - רשומה במודול "סעיף תקציבי/אתר", שאליה משייכים שעות, שעונים, מדבקות וטאבלטים.

  • שדות טופס - הדרך שבה נשלחים הפרמטרים (x-www-form-urlencoded), בשונה מ-JSON.

סיכום מהיר

מה רוצים לעשות

איפה

מה זה משנה

ליצור מחלקה או סניף

api/createDept עם name (ו-code, parent_id)

מחלקה חדשה, מחזיר DeptID

ליצור מחלקת בת

createDept עם parent_id = DeptID של האב

המחלקה נכנסת מתחת לאב בעץ

ליצור תפקיד או פרויקט

api/createRole עם role_name ושדות רשות

תפקיד חדש, מחזיר INTERNAL_ID

ליצור אתר

api/createPlace עם name (ו-code, status, note)

אתר חדש, מחזיר id

למנוע כפילויות

getDepts / getRoles / getPlaces לפני היצירה

הקריאות לא בודקות שמות קיימים

לערוך או למחוק

במסכים בלבד

אין קריאה לעריכה או למחיקה


מאמרים קשורים

האם קיבלת תשובה לשאלתך?