diff --git a/apps/orders/admin.py b/apps/orders/admin.py index 8c38f3f..996d636 100644 --- a/apps/orders/admin.py +++ b/apps/orders/admin.py @@ -1,3 +1,31 @@ from django.contrib import admin +from django.utils.html import format_html +from import_export.admin import ImportExportModelAdmin -# Register your models here. +from apps.orders.models import Product, ShoppingCar + +@admin.register(Product) +class ProductAdmin(admin.ModelAdmin): + search_fields = ['name', 'description'] + list_display = ('name', 'foto', 'price', 'is_active') + list_filter = ('is_active',) + fields = ('name', 'imagen', 'description', 'price', 'is_active') + + def foto(self, obj): + if obj.imagen: + return format_html(''.format(obj.imagen.url)) + return "" + +@admin.register(ShoppingCar) +class ShoppingCarAdmin(admin.ModelAdmin): + search_fields = ['name', 'description'] + list_display = ('item', 'foto', 'price') + fields = ('name', 'imagen', 'description', 'price') + + def carrito(self, obj): + return "" + + def foto(self, obj): + if obj.item.imagen: + return format_html(''.format(obj.imagen.url)) + return "" \ No newline at end of file diff --git a/apps/orders/models/__init__.py b/apps/orders/models/__init__.py index e69de29..aded5ae 100644 --- a/apps/orders/models/__init__.py +++ b/apps/orders/models/__init__.py @@ -0,0 +1,2 @@ +from .product import Product +from .shopping_car import ShoppingCar \ No newline at end of file diff --git a/apps/orders/models/shoping_car.py b/apps/orders/models/shopping_car.py similarity index 64% rename from apps/orders/models/shoping_car.py rename to apps/orders/models/shopping_car.py index b419181..289a9b0 100644 --- a/apps/orders/models/shoping_car.py +++ b/apps/orders/models/shopping_car.py @@ -1,16 +1,16 @@ from django.db import models from apps.users.models import CustomUser +from apps.orders.models import Product class ShoppingCar(models.Model): user = models.ForeignKey( CustomUser, - on_delete = models.CASCADE, + on_delete = models.CASCADE, blank=True, null=True ) - name = models.ForeignKey( - CustomUser, - on_delete = models.CASCADE, - blank=True, null=True + item = models.ForeignKey( + Product, + on_delete = models.CASCADE ) quantity = models.FloatField(default=1) price = models.DecimalField(max_digits=10, decimal_places=2) @@ -21,6 +21,6 @@ class ShoppingCar(models.Model): return self.name class Meta: - verbose_name = 'Producto' - verbose_name_plural = 'Productos' - ordering = ['name'] + verbose_name = 'Carro de Producto' + verbose_name_plural = 'Carro de Productos' + ordering = ['-modified_at'] diff --git a/apps/users/admin.py b/apps/users/admin.py index 8c38f3f..87bb70f 100644 --- a/apps/users/admin.py +++ b/apps/users/admin.py @@ -1,3 +1,16 @@ from django.contrib import admin +from django.contrib.auth.admin import UserAdmin +from apps.users.models import CustomUser -# Register your models here. +@admin.register(CustomUser) +class CustomUserAdmin(UserAdmin): + list_display = ('email', 'groups', 'is_active',) + list_filter = ('groups', 'is_active',) + search_fields = ('email', 'first_name', 'last_name') + ordering = ('email',) + filter_horizontal = () + fieldsets = ( + (None, {'fields': ('email', 'password')}), + ('Permissions', {'fields': ('is_active', 'groups')}), + ('Important dates', {'fields': ('last_login',)}), + ) \ No newline at end of file diff --git a/common/const_and_variables.py b/common/const_and_variables.py new file mode 100644 index 0000000..dcd4a55 --- /dev/null +++ b/common/const_and_variables.py @@ -0,0 +1 @@ +BOOLEAN_VALIDS = ['True', 'true', True, 1, '1'] \ No newline at end of file diff --git a/common/utils.py b/common/utils.py new file mode 100644 index 0000000..325658d --- /dev/null +++ b/common/utils.py @@ -0,0 +1,37 @@ +def create_roles() -> None: + from django.contrib.auth.models import Group, Permission + from django.contrib.contenttypes.models import ContentType + from apps.users.models import CustomUser + from apps.orders.models import Product, ShoppingCar + + # Crear grupos + superadmin_group, created = Group.objects.get_or_create(name='Super Administrador') + admin_group, created = Group.objects.get_or_create(name='Administrador') + client_group, created = Group.objects.get_or_create(name='Cliente') + + # Obtener permisos + # Permisos para CustomUser + user_content_type = ContentType.objects.get_for_model(CustomUser) + user_permissions = Permission.objects.filter(content_type=user_content_type) + + product_content_type = ContentType.objects.get_for_model(Product) + product_permissions = Permission.objects.filter(content_type=product_content_type) + + shoppingcar_product_content_type = ContentType.objects.get_for_model(ShoppingCar) + shoppingcar_permissions = Permission.objects.filter(content_type=shoppingcar_content_type) + + # Asignar permisos a Super Administrador + superadmin_content_type = ContentType.objects.get_for_models() + superadmin_group.permissions.set(Permission.objects.filter(content_type__in=superadmin_content_type)) + + # Asignar permisos a Administrador + admin_permissions = user_permissions.filter(codename__in=['add_customuser', 'change_customuser', 'view_customuser']) | \ + useraddress_permissions.filter(codename__in=['add_useraddress', 'change_useraddress', 'view_useraddress']) | \ + product_permissions.filter(codename__in=['add_product', 'change_product', 'view_product']) | \ + shoppingcar_permissions.filter(codename__in=['view_shoppingcar']) + admin_group.permissions.set(admin_permissions) + + # Asignar permisos a Cliente + client_permissions = user_permissions | useraddress_permissions | shoppingcar_permissions | \ + product_permissions.filter(codename__in=['view_order']) + client_group.permissions.set(client_permissions) \ No newline at end of file