From 1a9550245863547755bf6e266f5277993f3d8350 Mon Sep 17 00:00:00 2001
From: Marcos Mendez Quintero <marcos.mendez.quintero@fing.edu.uy>
Date: Thu, 29 Jun 2023 02:09:09 -0300
Subject: [PATCH] Including the Dashboard module

---
 AdAnalyzer/settings.py                        | 11 +++-
 dashboard/__init__.py                         |  0
 dashboard/admin.py                            |  6 ++
 dashboard/apps.py                             |  5 ++
 dashboard/migrations/0001_initial.py          | 61 +++++++++++++++++++
 dashboard/migrations/0002_empresa_usuarios.py | 19 ++++++
 dashboard/migrations/__init__.py              |  0
 dashboard/models.py                           | 21 +++++++
 dashboard/tests.py                            |  3 +
 dashboard/views.py                            | 26 ++++++++
 pages/templates/pages/home.html               |  2 +-
 11 files changed, 150 insertions(+), 4 deletions(-)
 create mode 100644 dashboard/__init__.py
 create mode 100644 dashboard/admin.py
 create mode 100644 dashboard/apps.py
 create mode 100644 dashboard/migrations/0001_initial.py
 create mode 100644 dashboard/migrations/0002_empresa_usuarios.py
 create mode 100644 dashboard/migrations/__init__.py
 create mode 100644 dashboard/models.py
 create mode 100644 dashboard/tests.py
 create mode 100644 dashboard/views.py

diff --git a/AdAnalyzer/settings.py b/AdAnalyzer/settings.py
index 9bce0f0..2461346 100644
--- a/AdAnalyzer/settings.py
+++ b/AdAnalyzer/settings.py
@@ -38,6 +38,7 @@ INSTALLED_APPS = [
     "django.contrib.messages",
     "django.contrib.staticfiles",
     "pages.apps.PagesConfig",
+    "dashboard"
 ]
 
 MIDDLEWARE = [
@@ -75,9 +76,13 @@ WSGI_APPLICATION = "AdAnalyzer.wsgi.application"
 # https://docs.djangoproject.com/en/4.2/ref/settings/#databases
 
 DATABASES = {
-    "default": {
-        "ENGINE": "django.db.backends.sqlite3",
-        "NAME": BASE_DIR / "db.sqlite3",
+    'default': {
+        'ENGINE': 'django.db.backends.postgresql_psycopg2',
+        'NAME': 'adana', 
+        'USER': 'adana',
+        'PASSWORD': 'adana',
+        'HOST': '127.0.0.1', 
+        'PORT': '5432',
     }
 }
 
diff --git a/dashboard/__init__.py b/dashboard/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/dashboard/admin.py b/dashboard/admin.py
new file mode 100644
index 0000000..063f065
--- /dev/null
+++ b/dashboard/admin.py
@@ -0,0 +1,6 @@
+from django.contrib import admin
+from .models import Empresa, Competencia
+
+admin.site.register(Empresa)
+admin.site.register(Competencia)
+
diff --git a/dashboard/apps.py b/dashboard/apps.py
new file mode 100644
index 0000000..3359c34
--- /dev/null
+++ b/dashboard/apps.py
@@ -0,0 +1,5 @@
+from django.apps import AppConfig
+
+class DashboardConfig(AppConfig):
+    default_auto_field = "django.db.models.BigAutoField"
+    name = "dashboard"
diff --git a/dashboard/migrations/0001_initial.py b/dashboard/migrations/0001_initial.py
new file mode 100644
index 0000000..68615fd
--- /dev/null
+++ b/dashboard/migrations/0001_initial.py
@@ -0,0 +1,61 @@
+# Generated by Django 4.2.2 on 2023-06-28 19:26
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+    initial = True
+
+    dependencies = []
+
+    operations = [
+        migrations.CreateModel(
+            name="Empresa",
+            fields=[
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("nombre", models.CharField(max_length=200)),
+            ],
+        ),
+        migrations.CreateModel(
+            name="Competencia",
+            fields=[
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "competidor",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="competidor",
+                        to="dashboard.empresa",
+                    ),
+                ),
+                (
+                    "empresa",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="empresa",
+                        to="dashboard.empresa",
+                    ),
+                ),
+            ],
+            options={
+                "unique_together": {("empresa", "competidor")},
+            },
+        ),
+    ]
diff --git a/dashboard/migrations/0002_empresa_usuarios.py b/dashboard/migrations/0002_empresa_usuarios.py
new file mode 100644
index 0000000..2431d26
--- /dev/null
+++ b/dashboard/migrations/0002_empresa_usuarios.py
@@ -0,0 +1,19 @@
+# Generated by Django 4.2.2 on 2023-06-28 20:01
+
+from django.conf import settings
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+        ("dashboard", "0001_initial"),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name="empresa",
+            name="usuarios",
+            field=models.ManyToManyField(to=settings.AUTH_USER_MODEL),
+        ),
+    ]
diff --git a/dashboard/migrations/__init__.py b/dashboard/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/dashboard/models.py b/dashboard/models.py
new file mode 100644
index 0000000..b4c9560
--- /dev/null
+++ b/dashboard/models.py
@@ -0,0 +1,21 @@
+from django.db import models
+from django.contrib.auth.models import User
+
+#This is the model for Companies that are going to be registered even thought they are not clients in the system
+class Empresa(models.Model):
+    nombre = models.CharField(max_length=200)
+    usuarios = models.ManyToManyField(User)
+
+    def __str__(self):
+        return self.nombre
+
+#This is the model for the competitors it is a relation of a Company to another.
+class Competencia(models.Model):
+    empresa = models.ForeignKey(Empresa, related_name='empresa', on_delete=models.CASCADE)
+    competidor = models.ForeignKey(Empresa, related_name='competidor', on_delete=models.CASCADE)
+
+    class Meta:
+        unique_together = ('empresa', 'competidor')
+
+    def __str__(self):
+        return f"{self.empresa.nombre} competidor: {self.competidor.nombre}"
diff --git a/dashboard/tests.py b/dashboard/tests.py
new file mode 100644
index 0000000..7ce503c
--- /dev/null
+++ b/dashboard/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/dashboard/views.py b/dashboard/views.py
new file mode 100644
index 0000000..aab5f30
--- /dev/null
+++ b/dashboard/views.py
@@ -0,0 +1,26 @@
+from django.shortcuts import render, redirect
+from .models import Empresa
+from django.contrib.auth.models import User
+
+def asignar_usuarios(request, empresa_id):
+    empresa = Empresa.objects.get(id=empresa_id)
+    if request.method == 'POST':
+        usuarios_id = request.POST.getlist('usuarios')
+        usuarios = User.objects.filter(id__in=usuarios_id)
+        empresa.usuarios.set(usuarios)
+
+        # obtén la referencia al permiso de "view" para el modelo User
+        permiso_ver_usuario = Permission.objects.get(codename='view_user')
+
+        # para cada usuario de la empresa, agrega este permiso
+        for usuario in empresa.usuarios.all():
+            usuario.user_permissions.add(permiso_ver_usuario)
+
+        return redirect('dashboard:empresa_detalle', empresa_id=empresa_id)
+    else:
+        usuarios = User.objects.all()
+        return render(request, 'asignar_usuarios.html', {'empresa': empresa, 'usuarios': usuarios})
+
+def inicio(request):
+    return render(request, 'inicio.html')
+
diff --git a/pages/templates/pages/home.html b/pages/templates/pages/home.html
index b507173..6c44799 100644
--- a/pages/templates/pages/home.html
+++ b/pages/templates/pages/home.html
@@ -7,7 +7,7 @@
             font-family: Arial, sans-serif;
             margin: 0;
             padding: 0;
-            background-color: #f0f0f0;
+            background-color: #aaaaaa;
         }
         .container {
             max-width: 800px;
-- 
GitLab