Skip to content

Commit

Permalink
Merge pull request #255 from 5sControl/development
Browse files Browse the repository at this point in the history
Development
  • Loading branch information
Dimskay1988 authored Jun 7, 2023
2 parents 0f74e97 + 14c09e0 commit 8e6d0bd
Show file tree
Hide file tree
Showing 48 changed files with 1,033 additions and 148 deletions.
1 change: 1 addition & 0 deletions config/settings/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
"src.CompanyLicense.apps.CompanyLicenseConfig",
"src.Inventory.apps.InventoryConfig",
"src.Employees.apps.EmployeesConfig",
"src.Suppliers.apps.SuppliersConfig",
# Collections reports
"src.Reports.apps.ReportsConfig",
"src.ImageReport.apps.ImageConfig",
Expand Down
42 changes: 27 additions & 15 deletions src/CameraAlgorithms/admin.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,35 @@
# from django.contrib import admin
# from .models.camera import Camera
# from .models.algorithm import Algorithm, CameraAlgorithm, CameraAlgorithmLog
from django.contrib import admin
from .models.camera import Camera, ZoneCameras
from .models.algorithm import Algorithm, CameraAlgorithm, CameraAlgorithmLog


# @admin.register(Camera)
# class CamerasAdmin(admin.ModelAdmin):
# list_filter = ("id",)
@admin.register(Camera)
class CamerasAdmin(admin.ModelAdmin):
list_filter = ("id",)


# @admin.register(Algorithm)
# class AlgorithmAdmin(admin.ModelAdmin):
# list_filter = ("id", "name")
@admin.register(Algorithm)
class AlgorithmAdmin(admin.ModelAdmin):
list_filter = ("id", "name")


# @admin.register(CameraAlgorithm)
# class CameraAlgorithmAdmin(admin.ModelAdmin):
# list_filter = ("id", "algorithm", "camera")
@admin.register(CameraAlgorithm)
class CameraAlgorithmAdmin(admin.ModelAdmin):
list_filter = ("id", "algorithm", "camera")


# @admin.register(CameraAlgorithmLog)
# class CameraAlgorithmLogAdmin(admin.ModelAdmin):
# list_filter = ("id",)
@admin.register(CameraAlgorithmLog)
class CameraAlgorithmLogAdmin(admin.ModelAdmin):
list_filter = ("id",)


@admin.register(ZoneCameras)
class ZoneCamerasAdmin(admin.ModelAdmin):
readonly_fields = ["is_active"]
list_display = (
"camera",
"name",
"coords",
"date_created",
"date_updated"
)
50 changes: 50 additions & 0 deletions src/CameraAlgorithms/migrations/0002_zonecameras.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Generated by Django 4.2.1 on 2023-06-05 10:22

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):
dependencies = [
("CameraAlgorithms", "0001_initial"),
]

operations = [
migrations.CreateModel(
name="ZoneCameras",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("coords", models.JSONField(verbose_name="Zone coordinates")),
("name", models.CharField(blank=True, max_length=100, null=True)),
("is_active", models.BooleanField(default=False)),
(
"date_created",
models.DateTimeField(
auto_now_add=True, verbose_name="Date created"
),
),
(
"date_updated",
models.DateTimeField(auto_now=True, verbose_name="Date updated"),
),
(
"camera",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="Zone_cameras",
to="CameraAlgorithms.camera",
),
),
],
),
]
19 changes: 19 additions & 0 deletions src/CameraAlgorithms/migrations/0003_cameraalgorithm_zones.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Generated by Django 4.2.1 on 2023-06-06 12:03

from django.db import migrations, models


class Migration(migrations.Migration):
dependencies = [
("CameraAlgorithms", "0002_zonecameras"),
]

operations = [
migrations.AddField(
model_name="cameraalgorithm",
name="zones",
field=models.JSONField(
blank=True, null=True, verbose_name="Id zones algorithm"
),
),
]
1 change: 1 addition & 0 deletions src/CameraAlgorithms/models/algorithm.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ class CameraAlgorithm(models.Model):
camera = models.ForeignKey(Camera, on_delete=models.CASCADE)
is_active = models.BooleanField(default=True)
process_id = models.PositiveBigIntegerField(default=0)
zones = models.JSONField(blank=True, null=True, verbose_name="Id zones algorithm")

def __str__(self):
return f"{self.algorithm} - {self.camera}"
Expand Down
12 changes: 12 additions & 0 deletions src/CameraAlgorithms/models/camera.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,15 @@ class Meta:
verbose_name_plural = "Cameras"

db_table = "camera"


class ZoneCameras(models.Model):
camera = models.ForeignKey(Camera, on_delete=models.SET_NULL, related_name="Zone_cameras", blank=True, null=True)
coords = models.JSONField(verbose_name="Zone coordinates")
name = models.CharField(max_length=100, blank=True, null=True)
is_active = models.BooleanField(default=False)
date_created = models.DateTimeField(verbose_name="Date created", auto_now_add=True)
date_updated = models.DateTimeField(verbose_name="Date updated", auto_now=True)

def __str__(self):
return self.name
9 changes: 8 additions & 1 deletion src/CameraAlgorithms/serializers.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from rest_framework import serializers

from .models import Camera
from .models import Camera, ZoneCameras
from .models import Algorithm, CameraAlgorithm, CameraAlgorithmLog


Expand Down Expand Up @@ -88,3 +88,10 @@ class CameraAlgorithmLogSerializer(serializers.ModelSerializer):
class Meta:
model = CameraAlgorithmLog
fields = "__all__"


class ZoneCameraSerializer(serializers.ModelSerializer):
class Meta:
model = ZoneCameras
fields = "__all__"
read_only_fields = ["is_active"]
56 changes: 52 additions & 4 deletions src/CameraAlgorithms/services/cameraalgorithm.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from src.OrderView.models import IndexOperations
from src.CompanyLicense.decorators import check_active_cameras, check_active_algorithms

from ..models import Camera
from ..models import Camera, ZoneCameras
from ..models import Algorithm, CameraAlgorithm
from .logs_services import logs_service

Expand Down Expand Up @@ -93,7 +93,7 @@ def create_camera(camera: Dict[str, str]) -> None:


def create_camera_algorithms(
camera: Dict[str, str], algorithms: List[Dict[str, Any]]
camera: Dict[str, str], algorithms: List[Dict[str, Any]]
) -> None:
camera_obj = Camera.objects.get(id=camera["ip"])
new_records = [algorithm_data["name"] for algorithm_data in algorithms]
Expand Down Expand Up @@ -133,10 +133,22 @@ def create_camera_algorithms(

response = send_run_request(request)

if algorithm_obj.name == "idle_control":
response = send_run_request(request)
zones = request.get("config", {}).get("zonesID")

if zones is None:
zones = None

if algorithm_obj.name == "machine_control":
zones_ids = request.get("config", {}).get("zonesID", [])
for zone_id in zones_ids:
zone_camera = ZoneCameras.objects.get(id=zone_id["id"], camera=camera_obj)
data.append(
{"zoneId": zone_camera.id, "coords": zone_camera.coords, "zoneName": zone_camera.name}
)

response = send_run_request(request)

if algorithm_obj.name == "idle_control":
response = send_run_request(request)

if algorithm_obj.name == "operation_control":
Expand All @@ -163,9 +175,13 @@ def create_camera_algorithms(
algorithm=algorithm_obj,
camera=camera_obj,
process_id=response["pid"],
zones=zones,
)
new_record.save()

if zones is not None:
update_status_zones_true(zones)

logger.warning(f"New record -> {algorithm_obj.name} on camera {camera_obj.id}")

for algorithm_name in algorithm_to_delete:
Expand Down Expand Up @@ -227,4 +243,36 @@ def update_status_algorithm(pid: int):
algorithm_name=camera_algorithm.algorithm.name,
camera_ip=camera_algorithm.camera.id,
)

if camera_algorithm.zones is not None:
update_status_zone_false(camera_algorithm.zones)

camera_algorithm.delete()


def update_status_zone_false(data):
"""Update status zone in the end"""

for zone in data:
zone_id = zone.get("id")
if zone_id:
try:
zone_obj = ZoneCameras.objects.get(id=zone_id)
zone_obj.is_active = False
zone_obj.save()
except ZoneCameras.DoesNotExist:
pass


def update_status_zones_true(zones):
"""Update status zones on True"""

for zone in zones:
zone_id = zone.get("id")
if zone_id:
try:
zone_obj = ZoneCameras.objects.get(id=zone_id)
zone_obj.is_active = True
zone_obj.save()
except ZoneCameras.DoesNotExist:
pass
8 changes: 8 additions & 0 deletions src/CameraAlgorithms/urls.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,20 @@
from django.urls import path

from rest_framework.routers import DefaultRouter

from .views import (
CameraAPIView,
CameraAlgorithmLogListAPIView,
DeleteCameraAPIView,
CreateCameraAlgorithmsApiView,
AlgorithmDetailApiView,
AlgorithmProcessApiView,
ZoneCameraListAPIView,
)

router = DefaultRouter()
router.register(r"zone", ZoneCameraListAPIView, basename="ZoneCameraList")


urlpatterns = [
path("camera/", CameraAPIView.as_view(), name="camera"),
Expand All @@ -28,3 +34,5 @@
path("get-process/", AlgorithmProcessApiView.as_view(), name="camera-process"),
path("logs/", CameraAlgorithmLogListAPIView.as_view(), name="log"),
]

urlpatterns += router.urls
12 changes: 10 additions & 2 deletions src/CameraAlgorithms/views.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
from rest_framework import generics, status
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from rest_framework.viewsets import ModelViewSet

from src.Core.paginators import NoPagination
from src.Core.permissions import IsStaffPermission, IsSuperuserPermission

from .models import Camera
from .models import Camera, ZoneCameras
from .models import Algorithm, CameraAlgorithm, CameraAlgorithmLog
from .services.cameraalgorithm import (
CreateCameraAlgorithms,
Expand All @@ -16,7 +17,7 @@
CameraAlgorithmFullSerializer,
CameraModelSerializer,
CreateCameraAlgorithmSerializer,
CameraAlgorithmLogSerializer,
CameraAlgorithmLogSerializer, ZoneCameraSerializer,
)


Expand Down Expand Up @@ -67,3 +68,10 @@ class CameraAlgorithmLogListAPIView(generics.ListAPIView):

queryset = CameraAlgorithmLog.objects.all()
serializer_class = CameraAlgorithmLogSerializer


class ZoneCameraListAPIView(ModelViewSet):
permission_classes = [IsAuthenticated, IsSuperuserPermission]
pagination_class = NoPagination
queryset = ZoneCameras.objects.all()
serializer_class = ZoneCameraSerializer
24 changes: 20 additions & 4 deletions src/CompanyLicense/admin.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,32 @@
from django.contrib import admin
from .models import Company
from .models import License, Company


@admin.register(Company)
class CamerasAdmin(admin.ModelAdmin):
@admin.register(License)
class LicenseAdmin(admin.ModelAdmin):
list_filter = ("id",)
readonly_fields = (
'license_key',
'name_company',
'date_joined',
'valid_until',
'is_active',
'count_cameras',
'neurons_active'
)


@admin.register(Company)
class CompanyAdmin(admin.ModelAdmin):
list_display = (
"name_company",
"city",
"state",
"website",
"contact_email",
"contact_phone",
"contact_mobile_phone",
"logo",
"file",
"date_joined",
"date_edited",
)
Loading

0 comments on commit 8e6d0bd

Please sign in to comment.