ZKTeco অ্যাটেনডেন্স মেশিন থেকে API এর মাধ্যমে আপনি বিভিন্ন ধরনের ডেটা নিতে পারবেন। নিচে ডেটার তালিকা দেয়া হলো, যা সাধারণত ZKTeco অ্যাটেনডেন্স মেশিন থেকে পাওয়া যায়:
- User Information (ব্যবহারকারী তথ্য):
- User ID (ব্যবহারকারীর ID)
- Name (ব্যবহারকারীর নাম)
- Card Number (কার্ড নম্বর)
- Fingerprint Template (ফিঙ্গারপ্রিন্ট টেম্পলেট)
- Face Template (ফেস টেম্পলেট – যদি ফেস রিকগনিশন সাপোর্ট করে)
- Password (পাসওয়ার্ড)
- User Role (ব্যবহারকারীর ভূমিকা, যেমন Admin, User)
- RFID Card Number (আরএফআইডি কার্ড নম্বর)
- Attendance Log (অ্যাটেনডেন্স লগ):
- User ID (ব্যবহারকারীর ID)
- Attendance Time (অ্যাটেনডেন্স টাইম)
- Date & Time of Punch (তারিখ ও সময়)
- Device ID (ডিভাইসের ID)
- Verification Method (যেভাবে পরিচয় যাচাই করা হয়েছে যেমন ফিঙ্গারপ্রিন্ট, ফেস, কার্ড)
- In/Out Status (প্রবেশ বা প্রস্থান)
- Work Code (কাজের কোড – যদি ব্যবহার করা হয়)
- Punch Mode (অ্যাটেনডেন্স পাঞ্চের ধরন যেমন Manual, Auto)
- Device Information (ডিভাইসের তথ্য):
- Device Name (ডিভাইসের নাম)
- Device IP (ডিভাইসের IP ঠিকানা)
- Firmware Version (ফার্মওয়্যার ভার্সন)
- Serial Number (ডিভাইসের সিরিয়াল নম্বর)
- Total Registered Users (মোট নিবন্ধিত ব্যবহারকারীর সংখ্যা)
- Total Registered Fingerprints (মোট নিবন্ধিত ফিঙ্গারপ্রিন্ট সংখ্যা)
- Total Attendance Logs (মোট অ্যাটেনডেন্স লোগ সংখ্যা)
- Real-Time Attendance Logs (রিয়েল-টাইম অ্যাটেনডেন্স লগ):
- Immediate Log of User Punch (ব্যবহারকারীর পাঞ্চের তাৎক্ষণিক লগ)
- Live Monitoring (লাইভ মনিটরিং করার সুবিধা)
- User Enrollment Data (ব্যবহারকারীর নিবন্ধন তথ্য):
- Newly Enrolled Users (নতুন নিবন্ধিত ব্যবহারকারীর তথ্য)
- Updated User Information (নিবন্ধিত ব্যবহারকারীর হালনাগাদ তথ্য)
- Work Code Management (ওয়ার্ক কোড ব্যবস্থাপনা):
- Work Codes (ওয়ার্ক কোড)
- Associated User Logs with Work Code (ওয়ার্ক কোডের সাথে সম্পর্কিত লগ)
এই ডেটাগুলো অ্যাপ্লিকেশন বা সার্ভার দিয়ে API এর মাধ্যমে ZKTeco মেশিন থেকে সংগ্রহ করা যায়।
Django প্রজেক্ট: শিফট ও অ্যাটেনডেন্স ম্যানেজমেন্ট সিস্টেম
এই টিউটোরিয়ালটিতে, আমরা একটি ছোট Django প্রজেক্ট তৈরি করবো যেখানে শ্রমিকদের জন্য শিফট এসাইন করা হবে এবং সেই শিফট অনুযায়ী তাদের অ্যাটেনডেন্স চেক করা হবে। এছাড়া কিছু নির্দিষ্ট দিনের জন্য অস্থায়ী শিফট এসাইন করা যাবে এবং সেই শিফট অনুযায়ী অ্যাটেনডেন্স রেকর্ড চেক হবে।
ধাপ ১: প্রজেক্ট তৈরি করা
প্রথমে একটি Django প্রজেক্ট তৈরি করুন:
django-admin startproject shift_management
cd shift_management
তারপর একটি অ্যাপ তৈরি করুন:
python manage.py startapp attendance
settings.py ফাইলের INSTALLED_APPS এর মধ্যে আমাদের অ্যাপটি যোগ করুন:
INSTALLED_APPS = [
# অন্যান্য অ্যাপস
'attendance',
]
ধাপ ২: মডেল তৈরি করা
আমরা তিনটি মডেল তৈরি করব:
- Employee: শ্রমিকের ডিফল্ট শিফট ধারণ করে।
- Shift: শিফটের সময় ও নাম।
- TemporaryShift: নির্দিষ্ট দিনের জন্য শিফট পরিবর্তন করে।
২.১. Shift মডেল
from django.db import models
class Shift(models.Model):
name = models.CharField(max_length=100)
start_time = models.TimeField()
end_time = models.TimeField()
grace_period = models.IntegerField(default=0) # মঞ্জুর দেরির সময় (মিনিট)
def __str__(self):
return f"{self.name} ({self.start_time} - {self.end_time})"
২.২. Employee মডেল
class Employee(models.Model):
name = models.CharField(max_length=255)
employee_id = models.CharField(max_length=20, unique=True)
default_shift = models.ForeignKey(Shift, on_delete=models.SET_NULL, null=True, related_name='default_employees')
def __str__(self):
return self.name
২.৩. TemporaryShift মডেল
class TemporaryShift(models.Model):
employee = models.ForeignKey(Employee, on_delete=models.CASCADE)
shift = models.ForeignKey(Shift, on_delete=models.CASCADE)
start_date = models.DateField()
end_date = models.DateField()
def __str__(self):
return f"{self.employee.name} ({self.start_date} - {self.end_date}) : {self.shift.name}"
২.৪. Attendance মডেল
from django.utils import timezone
from datetime import datetime, timedelta
class Attendance(models.Model):
employee = models.ForeignKey(Employee, on_delete=models.CASCADE)
shift = models.ForeignKey(Shift, on_delete=models.CASCADE, null=True, blank=True)
date = models.DateField(default=timezone.now)
in_time = models.DateTimeField(null=True, blank=True)
out_time = models.DateTimeField(null=True, blank=True)
in_out_status = models.CharField(max_length=10, choices=[('in', 'In'), ('out', 'Out')])
status = models.CharField(max_length=20, default='Absent')
def save(self, *args, **kwargs):
temp_shift = TemporaryShift.objects.filter(
employee=self.employee,
start_date__lte=self.date,
end_date__gte=self.date
).first()
if temp_shift:
self.shift = temp_shift.shift
else:
self.shift = self.employee.default_shift
if self.in_out_status == 'in' and self.in_time:
shift_start_time = datetime.combine(self.date, self.shift.start_time)
if self.in_time > shift_start_time + timedelta(minutes=self.shift.grace_period):
self.status = 'Late'
else:
self.status = 'On Time'
super(Attendance, self).save(*args, **kwargs)
def __str__(self):
return f"{self.employee.name} - {self.date} ({self.in_out_status})"
ধাপ ৩: ডেটাবেজ মাইগ্রেশন
মডেল তৈরি করার পর ডেটাবেজ মাইগ্রেশন কমান্ড চালান:
python manage.py makemigrations
python manage.py migrate
ধাপ ৪: অ্যাডমিন প্যানেল সেটআপ
admin.py ফাইলে মডেলগুলো রেজিস্টার করে অ্যাডমিন প্যানেলে যোগ করুন:
from django.contrib import admin
from .models import Employee, Shift, TemporaryShift, Attendance
admin.site.register(Employee)
admin.site.register(Shift)
admin.site.register(TemporaryShift)
admin.site.register(Attendance)
ধাপ ৫: ডেটা ইনসার্ট ও শিফট এসাইন
৫.১. ডিফল্ট শিফট সেট করা (Employee)
from attendance.models import Employee, Shift
employee = Employee.objects.get(employee_id='EMP001')
default_shift = Shift.objects.get(name='Morning Shift')
employee.default_shift = default_shift
employee.save()
৫.২. নির্দিষ্ট দিনের জন্য শিফট এসাইন (TemporaryShift)
from attendance.models import Employee, Shift, TemporaryShift
employee = Employee.objects.get(employee_id='EMP001')
shift = Shift.objects.get(name='Night Shift')
temporary_shift = TemporaryShift(
employee=employee,
shift=shift,
start_date='2024-10-20',
end_date='2024-10-25'
)
temporary_shift.save()
ধাপ ৬: অ্যাটেনডেন্স রেকর্ড চেক
৬.১. ইনপুট ডেটা (Attendance)
from attendance.models import Attendance, Employee
employee = Employee.objects.get(employee_id='EMP001')
attendance = Attendance(
employee=employee,
in_time="2024-10-20 08:30:00", # ইন টাইম
in_out_status='in',
date='2024-10-20'
)
attendance.save()
এই Attendance মডেলটি শিফট চেক করে ইন-টাইম অনুযায়ী On Time বা Late স্ট্যাটাস সেভ করবে।
ধাপ ৭: ফাইনাল রিভিউ
- ডিফল্ট শিফট: শ্রমিকের জন্য পার্মানেন্ট শিফট আছে।
- নির্দিষ্ট দিনের জন্য অস্থায়ী শিফট: নির্দিষ্ট দিনগুলোর জন্য শিফট পরিবর্তন করা যাবে।
- অ্যাটেনডেন্স চেক: ইন/আউট টাইম চেক করে অ্যাটেনডেন্স সেভ করা হবে এবং সেটি শিফট অনুযায়ী হবে।
ধাপ ৮: Django অ্যাডমিন প্যানেলে ডেটা এন্ট্রি ও চেক
আপনার Django অ্যাডমিন প্যানেলে গিয়ে Employee, Shift, TemporaryShift, এবং Attendance ডেটা এন্ট্রি করতে পারবেন এবং শিফট ও অ্যাটেনডেন্স দেখতে পারবেন।
আপনি যদি অনেকগুলো শ্রমিকের একটি লিস্ট, ডেটের লিস্ট, এবং শিফটের ID প্রদান করে একসাথে শিফট এসাইন করতে চান, তাহলে Django-তে একটি API তৈরি করে সেই অনুযায়ী ডেটা প্রসেস করতে হবে। আমরা একটি API তৈরি করবো যেখানে আপনি POST রিকোয়েস্ট দিয়ে JSON ডেটা পাঠাতে পারবেন, এবং সেই ডেটার ভিত্তিতে শ্রমিকদের শিফট এসাইন হবে।
ধাপ ১: API ভিউ তৈরি করা
আমরা views.py-তে একটি API ভিউ তৈরি করবো যা শ্রমিকদের শিফট এসাইন করবে।
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Employee, Shift, TemporaryShift
from datetime import datetime
class AssignShiftView(APIView):
def post(self, request, *args, **kwargs):
# JSON ডেটা থেকে শ্রমিক, ডেট এবং শিফট ID সংগ্রহ করা
employee_ids = request.data.get('employee_ids', [])
date_list = request.data.get('date_list', [])
shift_id = request.data.get('shift_id')
# শিফট চেক করা
try:
shift = Shift.objects.get(id=shift_id)
except Shift.DoesNotExist:
return Response({'error': 'Invalid shift ID'}, status=status.HTTP_400_BAD_REQUEST)
# শ্রমিকদের লিস্ট থেকে শ্রমিকদের খুঁজে বের করা
employees = Employee.objects.filter(id__in=employee_ids)
if not employees.exists():
return Response({'error': 'No employees found'}, status=status.HTTP_400_BAD_REQUEST)
# প্রতিটি শ্রমিকের জন্য প্রতিটি ডেটে শিফট এসাইন করা
for employee in employees:
for date in date_list:
try:
date_obj = datetime.strptime(date, '%Y-%m-%d').date() # ডেট স্ট্রিং থেকে ডেট অবজেক্টে রূপান্তর
# শিফট এসাইন করা
TemporaryShift.objects.create(
employee=employee,
shift=shift,
start_date=date_obj,
end_date=date_obj
)
except Exception as e:
return Response({'error': str(e)}, status=status.HTTP_400_BAD_REQUEST)
return Response({'success': 'Shift assigned successfully'}, status=status.HTTP_200_OK)
এই ভিউটি অনেক শ্রমিকের জন্য একাধিক দিনের শিফট এসাইন করবে।
ধাপ ২: URL রেজিস্ট্রেশন করা
urls.py-এ আমাদের API রেজিস্টার করতে হবে:
from django.urls import path
from .views import AssignShiftView
urlpatterns = [
path('assign-shift/', AssignShiftView.as_view(), name='assign-shift'),
]
ধাপ ৩: কিভাবে JSON ডেটা পাঠাবেন
আপনি নিচের ফরম্যাটে JSON ডেটা পাঠাতে পারেন:
{
"employee_ids": [1, 2, 3], // শ্রমিকদের ID
"date_list": ["2024-10-20", "2024-10-21", "2024-10-22"], // ডেট লিস্ট
"shift_id": 5 // শিফটের ID
}
এখানে:
employee_ids: শ্রমিকদের ID এর লিস্ট।date_list: শিফট এসাইন করার ডেটের লিস্ট। ডেটগুলোYYYY-MM-DDফরম্যাটে থাকবে।shift_id: যে শিফট এসাইন করতে চান তার ID।
ধাপ ৪: টেস্ট করতে POST রিকোয়েস্ট পাঠানো
আপনি Postman বা অন্য যেকোনো HTTP ক্লায়েন্ট ব্যবহার করে এই API-তে POST রিকোয়েস্ট পাঠাতে পারেন। উদাহরণ:
POST /assign-shift/
Host: yourdomain.com
Content-Type: application/json
{
"employee_ids": [1, 2, 3],
"date_list": ["2024-10-20", "2024-10-21", "2024-10-22"],
"shift_id": 5
}
ধাপ ৫: ডেটাবেজ আপডেট
এটি রিকোয়েস্ট সফল হলে TemporaryShift মডেলে শ্রমিকদের নির্দিষ্ট দিনগুলোর জন্য শিফট এসাইন হয়ে যাবে। Django অ্যাডমিন প্যানেলেও আপনি দেখতে পারবেন, বা ডাটাবেস থেকে কুয়েরি করে চেক করতে পারবেন।