Dashboard
View and manage your planned visits
No planned visits
Try adjusting your date filters or create a visit plan from the Places section
{{ dateLabel }}
{{ plans.length }} {{ plans.length === 1 ? 'visit' : 'visits' }} ⚠️ Missed{{ plan.notes }}
Places
Manage all your places and locations
Categories
Organize places by type to make filtering faster
No categories yet
Add your first category to start grouping places like hospitals, institutes, or shops.
{{ category.name }}
Updated {{ formatDateTime(category.updated_at) }}
{{ category.description || 'No description provided.' }}
Visit Plans
All scheduled visit plans
No plans found
Create a visit plan from the Places section
{{ plan.place_name }}
📍 {{ plan.city }}
📅 {{ plan.planned_date }}
🕐 {{ plan.planned_time }}
By: {{ plan.user_name }}
{{ plan.notes }}
Visits
View all completed visits
No visits recorded
Mark visits as completed from the Dashboard or Plans section
{{ dateLabel }}
{{ visitsGroup.length }} {{ visitsGroup.length === 1 ? 'visit' : 'visits' }}{{ visit.place_name }}
📍 {{ visit.city }}
🕐 {{ new Date(visit.visited_at).toLocaleTimeString() }}
By: {{ visit.user_name }}
{{ visit.notes }}
Pending Offers
Visits where clients requested offers/quotations
No pending offers
Offers requested during visits will appear here
{{ offer.place_name }}
📍 {{ offer.city }}
📅 {{ formatDateTime(offer.visited_at) }}
By: {{ offer.user_name }}
{{ offer.notes }}
📨 Offers Requested
Track all visits where clients requested offers/quotations
No offers requested yet
Visits where offers were requested will appear here
| Place | City | Status | Contact | Visit Date | By | Offer Price | Notes |
|---|---|---|---|---|---|---|---|
|
{{ offer.place_name }}
|
{{ offer.city }} | ✅ Sent ⏳ Pending |
👤 {{ offer.contact_name }}
📞 {{ offer.contact_phone }}
📞
-
|
{{ formatDateTime(offer.visited_at) }} | {{ offer.user_name }} | ${{ formatAmount(offer.offer_price) }} - |
📝 {{ offer.offer_notes }}
-
|
{{ offer.place_name }}
📍 {{ offer.city }}
{{ selectedPlace.name }}
📍 {{ selectedPlace.city }}, {{ selectedPlace.address }}
Details
Contact
{{ selectedPlace.contact_name || 'N/A' }}
Phone
{{ selectedPlace.contact_phone || 'N/A' }}
Priority
{{ selectedPlace.priority }}Status
{{ selectedPlace.status }}Suggested Product
{{ formatProduct(selectedPlace.suggested_product) }}
Category
{{ selectedPlace.category_name || 'Uncategorized' }}
Last Visited
{{ formatDateTime(selectedPlace.last_visited_at) }}
Notes
{{ note.body }}
{{ note.user_name }} - {{ formatDateTime(note.created_at) }}
📨 Offers for this Place
Visit History
{{ formatDateTime(visit.visited_at) }}
By: {{ visit.user_name }}
{{ visit.notes }}
🕐 {{ user && user.role === 'admin' ? 'Attendance' : 'Check In / Check Out' }}
View all employee check-ins and check-outs
📋 This week's plan & tasks
{{ formatAttendanceWeekBatchRange(attendanceWeekBatch) }}No weekly plan for this week yet. When your manager assigns a week in Weekly Tasks, your day plans and tasks will appear here.
Today's plan ({{ getDayLabel(getAttendanceTodayDayKey()) }})
{{ getAttendanceTodayManagerNote() }}
No manager note for today.
Your open tasks (not completed)
-
{{ t.title }} {{ t.task_type }}
{{ t.description }}
Progress: {{ t.completed_count || 0 }} / {{ t.required_count }} Plan date: {{ formatAttendanceDateShort(t.visit_planned_date) }} Place: {{ t.place_name }}
✓ No open tasks for this week.
✓ ئەمڕۆ ڕۆژی پشووە — لە ڕۆژەکانی پشوودا ناتوانیت چێک ئین بکەیت. پشووەکەت خۆش بێت!
✅ Checked in · {{ formatAttendanceTime(currentAttendance.check_in_at) }}
⏸️ Not checked in
⏱ {{ formatAttendanceDuration(currentAttendance) }}
{{ gpsError }}
📝 Today's work report
{{ todayWorkReportHeading }}
Write at least 4 real words about what you did (example: record wise sale video). Dots, dashes, or “…” alone are not accepted.
{{ countDailyReportWords(todayReportBody) }}/4 words
- 📎 {{ f.name }}
Already saved
No extra off days remaining this month.
{{ employeeOffQuotaSummary.remaining }} extra off day(s) still available this month.
- Marked off: {{ d }}
📅 Duty hours by month
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
{{ cell.day }}
📝
✓ Off
{{ formatMinutesShort(cell.minutes) }}
{{ getDailyBalanceLabel(cell) }}
|
Monthly total (past workdays)
Weekly summary
💰 My salary · {{ monthSalaryBreakdown.monthLabel }}
Same as Monthly total · Fri off · Thu 6h · other days 8h · marked offs & off-day work excluded
Monthly salary
{{ formatIqd(monthSalaryBreakdown.baseSalary) }} IQD
1 hour =
{{ formatIqd(monthSalaryBreakdown.hourlyRate) }} IQD
Expected hours (full month)
{{ formatMinutesShort(monthSalaryBreakdown.expectedMinutes) }}
Hours worked (past days)
{{ formatMinutesShort(monthSalaryBreakdown.workedMinutes) }}
Required so far (past days)
{{ formatMinutesShort(monthSalaryBreakdown.pastRequiredMinutes) }}
Salary for hours worked
{{ formatIqd(monthSalaryBreakdown.earned) }} IQD
Duty & salary so far
Duty time difference
{{ formatSignedMinutes(monthSalaryBreakdown.timeDiffMinutes) }}
Expected pay so far
{{ formatIqd(monthSalaryBreakdown.expectedPastPay) }} IQD
− Salary (lesser)
{{ monthSalaryBreakdown.lesser > 0 ? '−' : '' }}{{ formatIqd(monthSalaryBreakdown.lesser) }} IQD
You are short {{ formatMinutesShort(monthSalaryBreakdown.missingMinutes) }} duty time so far → −{{ formatIqd(monthSalaryBreakdown.lesser) }} IQD from expected pay.
Duty time meets or exceeds required so far — no salary lesser.
Your recent check-ins
📅 Duty hours by month
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
{{ cell.day }}
📝
✓ Off
{{ formatMinutesShort(cell.minutes) }}
{{ getDailyBalanceLabel(cell) }}
|
Monthly total (past workdays)
Weekly summary
💰 Salary · {{ monthSalaryBreakdown.monthLabel }} · {{ monthSalaryBreakdown.employeeName }}
Same as Monthly total · Fri off · Thu 6h · other days 8h · marked offs & off-day work excluded
Monthly salary
{{ formatIqd(monthSalaryBreakdown.baseSalary) }} IQD
1 hour =
{{ formatIqd(monthSalaryBreakdown.hourlyRate) }} IQD
Expected hours (full month)
{{ formatMinutesShort(monthSalaryBreakdown.expectedMinutes) }}
Hours worked (past days)
{{ formatMinutesShort(monthSalaryBreakdown.workedMinutes) }}
Required so far (past days)
{{ formatMinutesShort(monthSalaryBreakdown.pastRequiredMinutes) }}
Salary for hours worked
{{ formatIqd(monthSalaryBreakdown.earned) }} IQD
Duty & salary so far
Duty time difference
{{ formatSignedMinutes(monthSalaryBreakdown.timeDiffMinutes) }}
Expected pay so far
{{ formatIqd(monthSalaryBreakdown.expectedPastPay) }} IQD
− Salary (lesser)
{{ monthSalaryBreakdown.lesser > 0 ? '−' : '' }}{{ formatIqd(monthSalaryBreakdown.lesser) }} IQD
Short {{ formatMinutesShort(monthSalaryBreakdown.missingMinutes) }} duty time so far → −{{ formatIqd(monthSalaryBreakdown.lesser) }} IQD from expected pay.
Duty time meets or exceeds required so far — no salary lesser.
Set a monthly salary for this employee in Users to see salary here.
Select one employee to see their salary for this month.
| Employee | Check-in | Check-out | Actual check-out | Hours on duty | Location (in) | Location (out) | Actions |
|---|---|---|---|---|---|---|---|
| {{ row.user_name }} | {{ formatAttendanceTime(row.check_in_at) }} | {{ row.check_out_at ? formatAttendanceTime(row.check_out_at) : '—' }} | {{ formatAttendanceTime(row.check_out_actual_at) }} Real device time — | ⏱ {{ formatAttendanceDuration(row) }} | 📍 {{ row.check_in_address || (row.check_in_lat + ', ' + row.check_in_lng) }} Manual entry — | 📍 {{ row.check_out_address || (row.check_out_lat + ', ' + row.check_out_lng) }} Manual entry — |
Add check-in / check-out
Edit check-in / check-out times
Check-ins on {{ attendanceDayDateLabel }} Your day · {{ attendanceDayDateLabel }}
Showing {{ attendanceDayItems.length }} check-ins.
No check-ins or check-outs recorded on this day.
✓ Off for all employees ✓ Off for {{ attendanceOffTargetLabel() }} ✓ This day is off
📝 Work report
{{ attendanceDayDateLabel }}
{{ rep.user_name }}
{{ rep.weekday }} · {{ rep.report_date }}
{{ rep.body || '—' }}
No work report for this day yet.
{{ countDailyReportWords(dayReportBody) }}/4 words · dots/dashes alone are not accepted
- 📎 {{ f.name }}
🎤 Voice note ready to upload
🕐 Check-in / check-out
{{ row.user_name || 'Employee' }} {{ user?.name || 'You' }}
Session #{{ row.id }}
⏱ {{ formatAttendanceDuration(row) }}
Check-out
{{ formatAttendanceTime(row.check_out_at) }} Still on duty / not checked out
Location: Open in Maps Location: Manual entry
Real check-out (device): {{ formatAttendanceTime(row.check_out_actual_at) }}
ڕاپۆرتی کارەکانی ڕۆژی چێک ئین
{{ checkoutReportDateLabel }}
تکایە ڕاپۆرتی ئەو کارانە بنووسە کە لەم ڕۆژەدا ئەنجامت داوە (بەپێی بەرواری چێک ئین) ئەگەر نا ناتوانیت چێک ئاوت بکەیت
{{ countDailyReportWords(todayReportBody) }}/٤ وشە · خاڵ و هێڵ و ... قبوڵ نین
- 📎 {{ f.name }}
🎤 دەنگی تۆمارکراو ئامادەیە
Users Management
Manage sales people and admin accounts
{{ u.name }}
{{ u.email }}
reporttt
{{ activityLogTotal }}
{{ row.summary }}
{{ row.user_name || '—' }} · {{ row.user_email }}
{{ formatDateTime(row.created_at) }}
Details
{{ formatActivityLogDetails(row.details) }}
📋 Weekly Tasks Management
👥 Assign and track weekly tasks for employees
{{ adminSelectedBatchDetails.user_name }} - Week Details
⭐ Current Week ⚠ IncompleteWeek: {{ formatDate(adminSelectedBatchDetails.week_start_date) }} - {{ formatDate(adminSelectedBatchDetails.week_end_date) }}
{{ adminSelectedBatchDetails.completed_tasks }} / {{ adminSelectedBatchDetails.total_tasks }} tasks completed
Tasks ({{ adminSelectedBatchTasks.length }})
{{ task.description }}
📊 Weekly Tasks Overview
{{ batch.user_name }}
📅 Week: {{ formatDate(batch.week_start_date) }} - {{ formatDate(batch.week_end_date) }}
📝 Weekly Plan
No weekly plan added yet
Tasks ({{ batch.tasks.length }})
{{ task.description }}
No weekly tasks found
Create weekly tasks for employees to get started
📋 My Weekly Tasks
👋 View and complete your assigned tasks
Week: {{ formatDate(currentWeeklyBatch.week_start_date) }} - {{ formatDate(currentWeeklyBatch.week_end_date) }}
{{ currentWeeklyBatch.completed_tasks }} / {{ currentWeeklyBatch.total_tasks }} tasks completed
Your Weekly Plan
{{ item.note }}
{{ type }} Tasks ({{ tasks.length }})
{{ task.title }}
✨ My Task 👤 Added by {{ task.created_by_name }}{{ task.description }}
No tasks assigned yet
😊 Contact your admin to get tasks assigned
No weekly tasks found
No tasks have been assigned for this week
📊 Reports & Analytics
Comprehensive reports and statistics
Visits by Outcome
Daily Visits Trend
Product Interest Distribution
Top Visited Places
| Place | City | Visits | Positive | Negative |
|---|---|---|---|---|
| {{ place.name }} | {{ place.city }} | {{ place.visit_count }} | {{ place.positive_count }} | {{ place.negative_count }} |
No report data available
Select a date range to view reports