feat(hr): add employees from the dashboard
CI/CD / CI · API (dotnet build + test) (push) Successful in 1m10s
CI/CD / CI · Admin API (dotnet build) (push) Successful in 1m40s
CI/CD / CI · Dashboard (tsc) (push) Successful in 1m5s
CI/CD / CI · Admin Web (tsc) (push) Successful in 1m32s
CI/CD / CI · Website (tsc) (push) Successful in 45s
CI/CD / CI · Koja (tsc) (push) Successful in 49s
CI/CD / Deploy · all services (push) Successful in 9m24s

Previously the only Employee records were the Owner (created at café signup) and
one Manager per branch — there was no way to add a waiter/cashier/chef. Adds it.

Backend:
- POST /api/cafes/{cafeId}/employees (HrController). Owner/Manager only; creating a
  Manager requires Owner; Owner cannot be created here. Validates name/phone/role,
  enforces one-employee-per-phone, validates branch belongs to the café, and can
  optionally set username/password login in the same step (same hashing + uniqueness
  as the credentials endpoint). Returns EmployeeSummaryDto.

Dashboard:
- New "Team" tab on the HR screen (now the default): employee roster (name, role,
  phone, base salary) + an "Add employee" button (owner/manager) opening an inline
  form — name, phone, role, optional branch, optional base salary, optional login.
- Role labels + all form strings in fa/en/ar.

86 API tests pass; dashboard tsc + build clean.
This commit is contained in:
soroush.asadi
2026-06-02 23:28:36 +03:30
parent f1756b491e
commit db0c3a4a02
7 changed files with 377 additions and 6 deletions
+29 -1
View File
@@ -412,7 +412,8 @@
"leave": "الإجازة",
"payroll": "الرواتب",
"access": "صلاحيات الفروع",
"credentials": "بيانات الدخول"
"credentials": "بيانات الدخول",
"team": "الموظفون"
},
"myAttendance": "حضوري",
"clockIn": "تسجيل دخول",
@@ -437,6 +438,33 @@
"saved": "تم حفظ بيانات الدخول.",
"removed": "تم حذف بيانات الدخول.",
"usernameTaken": "اسم المستخدم هذا مستخدم بالفعل."
},
"addEmployee": "إضافة موظف",
"noEmployees": "لا يوجد موظفون بعد.",
"employeeCreated": "تمت إضافة الموظف",
"save": "حفظ",
"cancel": "إلغاء",
"fields": {
"name": "الاسم",
"phone": "الجوال",
"role": "الدور",
"branch": "الفرع",
"branchOptional": "اختياري",
"noBranch": "بدون فرع",
"baseSalary": "الراتب الأساسي (تومان)",
"optional": "اختياري",
"enableLogin": "إنشاء اسم مستخدم وكلمة مرور",
"username": "اسم المستخدم",
"password": "كلمة المرور",
"passwordHint": "8 أحرف على الأقل"
},
"roles": {
"Owner": "المالك",
"Manager": "مدير",
"Cashier": "أمين الصندوق",
"Waiter": "نادل",
"Chef": "طاهٍ",
"Delivery": "موصّل"
}
},
"reviews": {