38323-vm/core/models.py
2026-02-09 16:33:02 +00:00

66 lines
2.5 KiB
Python

from django.db import models
from django.db import transaction
from django.utils import timezone
from django.contrib.auth.models import User
import uuid
class UserProfile(models.Model):
ROLE_CHOICES = [
('manager', 'Manager'),
('cashier', 'Cashier'),
]
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
role = models.CharField(max_length=10, choices=ROLE_CHOICES, default='cashier')
def __str__(self):
return f"{self.user.username} - {self.get_role_display()}"
class Ingredient(models.Model):
name = models.CharField(max_length=100, unique=True)
stock_quantity = models.DecimalField(max_digits=10, decimal_places=2, default=0.00)
unit = models.CharField(max_length=20, default="grams")
def __str__(self):
return f"{self.name} ({self.stock_quantity} {self.unit})"
class MenuItem(models.Model):
name = models.CharField(max_length=100, unique=True)
price = models.DecimalField(max_digits=10, decimal_places=2)
description = models.TextField(blank=True)
image_url = models.URLField(blank=True, null=True)
is_active = models.BooleanField(default=True)
def __str__(self):
return self.name
class MenuItemIngredient(models.Model):
menu_item = models.ForeignKey(MenuItem, related_name='ingredients', on_delete=models.CASCADE)
ingredient = models.ForeignKey(Ingredient, on_delete=models.CASCADE)
quantity_required = models.DecimalField(max_digits=10, decimal_places=2)
def __str__(self):
return f"{self.quantity_required} {self.ingredient.unit} of {self.ingredient.name} for {self.menu_item.name}"
class Order(models.Model):
order_number = models.CharField(max_length=12, unique=True, editable=False)
created_at = models.DateTimeField(default=timezone.now)
total_price = models.DecimalField(max_digits=10, decimal_places=2, default=0.00)
customer_notes = models.TextField(blank=True)
def save(self, *args, **kwargs):
if not self.order_number:
self.order_number = str(uuid.uuid4().hex[:8]).upper()
super().save(*args, **kwargs)
def __str__(self):
return f"Order {self.order_number}"
class OrderItem(models.Model):
order = models.ForeignKey(Order, related_name='items', on_delete=models.CASCADE)
menu_item = models.ForeignKey(MenuItem, on_delete=models.PROTECT)
quantity = models.PositiveIntegerField(default=1)
price_at_order = models.DecimalField(max_digits=10, decimal_places=2)
def __str__(self):
return f"{self.quantity} x {self.menu_item.name}"