W

Wise Visit Tracker

{{ user.name }}

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.place_name }}

📍 {{ plan.city }}

{{ plan.address }}

planned
🕐 {{ plan.planned_time || 'All day' }} 👤 {{ plan.user_name }}
Product to Suggest: {{ formatProduct(plan.product_to_suggest) }}
Notes:

{{ plan.notes }}

📞 Call

Places

Manage all your places and locations

#{{ index + 1 }}
{{ place.priority }} {{ place.status }}
City: {{ place.city || 'N/A' }}
Category: {{ place.category_name || 'Uncategorized' }}
Contact: {{ place.contact_name || 'N/A' }}
Product: {{ formatProduct(place.suggested_product) }}
📍 {{ place.visit_count || 0 }} visits Min: ${{ formatAmount(place.min_price) }} Max: ${{ formatAmount(place.max_price) }}
{{ formatProduct(product) }}
📞 Call

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.place_count }} places

{{ 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 }}

Product to Suggest: {{ formatProduct(plan.product_to_suggest) }}
Notes:

{{ plan.notes }}

{{ plan.status === 'done' ? 'planned' : plan.status }}

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 }}

{{ visit.outcome }}
Product: {{ formatProduct(visit.product_interest) }}
💰 ${{ visit.amount_estimate }}
✅ Offer Sent: {{ formatDateTime(visit.offer_sent_at) }}
⏳ Offer Pending

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 }}

📞 Contact Info:

👤 {{ offer.contact_name }}
📱 {{ offer.contact_phone }} 📞 Call
Notes:

{{ offer.notes }}

{{ offer.outcome }}
Product: {{ formatProduct(offer.product_interest) }}
💰 ${{ formatAmount(offer.amount_estimate) }}

📨 Offers Requested

Track all visits where clients requested offers/quotations

{{ sentOffersStats.total_sent }}
Total Offers
{{ sentOffersStats.sent_this_week }}
This Week
{{ sentOffersStats.sent_this_month }}
This Month
{{ sentOffersStats.unique_places }}
Unique Places
📨

No offers requested yet

Visits where offers were requested will appear here

{{ offer.place_name }}

📍 {{ offer.city }}

✅ Sent ⏳ Pending
${{ formatAmount(offer.offer_price) }}
Visit Date: {{ formatDateTime(offer.visited_at) }}
By: {{ offer.user_name }}
Product: {{ formatProduct(offer.product_interest) }}
👤 {{ offer.contact_name }}
📞 {{ offer.contact_phone }} 📞 Call
📝 {{ offer.offer_notes }}

{{ 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) }}

No notes yet

📨 Offers for this Place

{{ placeVisits.filter(v => parseInt(v.offer_requested)).length }}
Total Offers
{{ placeVisits.filter(v => v.offer_sent_at).length }}
Sent
{{ placeVisits.filter(v => parseInt(v.offer_requested) && !v.offer_sent_at).length }}
Pending
${{ formatAmount(placeVisits.filter(v => v.offer_price).reduce((sum, v) => sum + parseFloat(v.offer_price || 0), 0)) }}
Total Value

Visit History

{{ formatDateTime(visit.visited_at) }}

By: {{ visit.user_name }}

{{ visit.notes }}

✅ Offer Sent ⏳ Offer Pending
Sent: {{ formatDateTime(visit.offer_sent_at) }}
💰 ${{ formatAmount(visit.offer_price) }}
📝 {{ visit.offer_notes }}
{{ visit.outcome }}
No visits recorded yet

🕐 {{ user && user.role === 'admin' ? 'Attendance' : 'Check In / Check Out' }}

View all employee check-ins and check-outs

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

(Friday is always off) Off for everyone — switch to “All employees” to unmark.

📝 Work report

{{ attendanceDayDateLabel }}

Loading report…

{{ 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-in

{{ formatAttendanceTime(row.check_in_at) }}

Location: Open in Maps Location: Manual entry

Check-out

{{ formatAttendanceTime(row.check_out_at) }} Still on duty / not checked out

Location: Open in Maps Location: Manual entry

ڕاپۆرتی کارەکانی ڕۆژی چێک ئین

{{ checkoutReportDateLabel }}

تکایە ڕاپۆرتی ئەو کارانە بنووسە کە لەم ڕۆژەدا ئەنجامت داوە (بەپێی بەرواری چێک ئین) ئەگەر نا ناتوانیت چێک ئاوت بکەیت

{{ countDailyReportWords(todayReportBody) }}/٤ وشە · خاڵ و هێڵ و ... قبوڵ نین

  • 📎 {{ f.name }}

🎤 دەنگی تۆمارکراو ئامادەیە

Users Management

Manage sales people and admin accounts

{{ u.name }}

{{ u.email }}

{{ u.role }}
Created: {{ formatDateTime(u.created_at) }}

📋 Weekly Tasks Management

👥 Assign and track weekly tasks for employees

{{ adminSelectedBatchDetails.user_name }} - Week Details

⭐ Current Week ⚠ Incomplete

Week: {{ formatDate(adminSelectedBatchDetails.week_start_date) }} - {{ formatDate(adminSelectedBatchDetails.week_end_date) }}

{{ adminSelectedBatchDetails.completed_tasks }} / {{ adminSelectedBatchDetails.total_tasks }} tasks completed

⚠️
{{ (100 - adminSelectedBatchDetails.progress_percentage).toFixed(1) }}% REMAINING
⚠️ INCOMPLETE TASKS - ACTION REQUIRED! ⚠️
{{ adminSelectedBatchDetails.progress_percentage }}%
Tasks ({{ adminSelectedBatchTasks.length }})
{{ task.title }} {{ task.task_type }}

{{ task.description }}

Progress: {{ task.completed_count }} / {{ task.required_count }} ({{ getTaskProgressPercentage(task) }}%)
{{ task.status }}
📍 Place: {{ task.place_name }}
📝 {{ task.result_count }} note(s)
No tasks assigned yet

📊 Weekly Tasks Overview

📅 Showing current/upcoming week Showing all weeks ({{ weeklyTaskBatches.length }} total)
🎉 😊 😐 😢

{{ batch.user_name }}

⭐ Current ✅ All Done! 😢 Incomplete

📅 Week: {{ formatDate(batch.week_start_date) }} - {{ formatDate(batch.week_end_date) }}

{{ batch.progress_percentage }}%
Progress {{ batch.completed_tasks }} / {{ batch.total_tasks }} tasks ({{ batch.progress_percentage }}% complete)
⚠️
{{ (100 - batch.progress_percentage).toFixed(1) }}% REMAINING
⚠️ INCOMPLETE TASKS - ACTION REQUIRED! ⚠️
📝 Weekly Plan
{{ getDayLabel(item.day) }}: {{ item.note }}

No weekly plan added yet

Tasks ({{ batch.tasks.length }})
{{ task.title }} {{ task.task_type }} ✨ Added by {{ task.created_by_name }} 👤 You added

{{ task.description }}

Progress: {{ task.completed_count }} / {{ task.required_count }} ({{ getTaskProgressPercentage(task) }}%)
{{ task.status }}
📍 Place: {{ task.place_name }}
📝 {{ task.result_count }} note(s)
No tasks assigned yet
📋

No weekly tasks found

Create weekly tasks for employees to get started

⚠️
You have {{ getUnfinishedPreviousWeeks().length }} previous week(s) with unfinished tasks! {{ formatDate(week.week_start_date) }} ({{ week.progress_percentage }}% done),
🎉
All done! Excellent work this week! You're a star! ⭐
{{ getProgressMessage(currentWeeklyBatch.progress_percentage).emoji }}
{{ getProgressMessage(currentWeeklyBatch.progress_percentage).message }}

📋 My Weekly Tasks

👋 View and complete your assigned tasks

{{ getProgressMessage(currentWeeklyBatch.progress_percentage).emoji }}

Week: {{ formatDate(currentWeeklyBatch.week_start_date) }} - {{ formatDate(currentWeeklyBatch.week_end_date) }}

⭐ Current Week 🎉 All Done! 📝 In Progress
📋

{{ currentWeeklyBatch.completed_tasks }} / {{ currentWeeklyBatch.total_tasks }} tasks completed

🎉
100% Complete - {{ getProgressMessage(100).message }}
{{ getProgressMessage(currentWeeklyBatch.progress_percentage).emoji }}
{{ (100 - currentWeeklyBatch.progress_percentage).toFixed(1) }}% remaining - {{ getProgressMessage(currentWeeklyBatch.progress_percentage).message }}
{{ currentWeeklyBatch.progress_percentage }}%
📋

Your Weekly Plan

📅 {{ getDayLabel(item.day) }}

{{ item.note }}

📝 📍 🎥 💡 📋

{{ type }} Tasks ({{ tasks.length }})

📌
{{ task.title }}
✨ My Task 👤 Added by {{ task.created_by_name }}

{{ task.description }}

📍 Place: {{ task.place_name }}
📅 Visit: {{ formatDate(task.visit_planned_date) }}
✅ Done ⏳ Pending
📊 Progress: {{ task.completed_count }} / {{ task.required_count }} ({{ getTaskProgressPercentage(task) }}%)
📋

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

Total Visits
{{ reportData.visits.total }}
Unique Places
{{ reportData.visits.unique_places }}
Positive Visits
{{ reportData.visits.by_outcome.positive }}

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

{{ snackbar.message }}