summaryrefslogtreecommitdiffstats
path: root/restaurant_orders/core/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'restaurant_orders/core/models.py')
-rw-r--r--restaurant_orders/core/models.py90
1 files changed, 90 insertions, 0 deletions
diff --git a/restaurant_orders/core/models.py b/restaurant_orders/core/models.py
new file mode 100644
index 0000000..91147d2
--- /dev/null
+++ b/restaurant_orders/core/models.py
@@ -0,0 +1,90 @@
1from django.db import models
2from django.contrib.auth.models import User
3from django.shortcuts import Http404, get_object_or_404
4
5from datetime import datetime
6
7
8class Restaurant(models.Model):
9 name = models.CharField(max_length=50)
10 users = models.ManyToManyField(User)
11
12 wordpress_url = models.URLField(max_length=50, unique=True)
13 woocommerce_consumer_key = models.CharField(max_length=50)
14 woocommerce_consumer_secret = models.CharField(max_length=50)
15 woocommerce_webhook_secret = models.CharField(max_length=50)
16
17 @classmethod
18 def get_user_restaurants(cls, user: User):
19 return cls.objects.filter(users=user)
20
21 @classmethod
22 def get_user_restaurant_or_404(cls, pk, user: User):
23 return get_object_or_404(cls, pk=pk, users=user)
24
25 def __str__(self):
26 return self.name
27
28
29class Order(models.Model):
30 WP_STATES = (
31 ('pending', 'Oczekujace'),
32 ('processing', 'Przetwarzane'),
33 ('on-hold', 'Wstrzymane'),
34 ('completed', 'Zakonczone'),
35 ('cancelled', 'Anulowane'),
36 ('refunded', 'Zwrocone'),
37 ('failed', 'Nie powiodlo sie'),
38 ('trash', 'Usuniete')
39 )
40
41 wp_id = models.IntegerField(editable=False)
42 wp_status = models.CharField(max_length=30, choices=WP_STATES)
43 wp_order_key = models.CharField(max_length=50, editable=False)
44 date_created = models.DateField(editable=False)
45 date_modified = models.DateField()
46 line_items = models.JSONField()
47 billing = models.JSONField()
48 restaurant = models.ForeignKey(Restaurant, on_delete=models.CASCADE)
49 can_display = models.BooleanField(default=True)
50
51 @classmethod
52 def update_or_create_from_response(cls, response, restaurant_model):
53 try:
54 obj = cls.objects.update_or_create(
55 wp_id=response['id'],
56 wp_order_key=response['order_key'],
57 restaurant=restaurant_model,
58 defaults={
59 'wp_status': response['status'],
60 'date_created': datetime.strptime(response['date_created'], '%Y-%m-%dT%H:%M:%S'),
61 'date_modified': datetime.strptime(response['date_modified'], '%Y-%m-%dT%H:%M:%S'),
62 'line_items': response['line_items'],
63 'billing': response['billing'],
64 }
65 )
66 return obj
67 except KeyError:
68 return None
69
70
71 @classmethod
72 def create_from_response_disable_view(cls, response, restaurant_model):
73 obj, _ = cls.update_or_create_from_response(response, restaurant_model)
74 obj.can_display = False
75 obj.save()
76 return obj
77
78 @classmethod
79 def get_order(cls, pk, user: User):
80 try:
81 return cls.objects.get(
82 pk=pk,
83 can_display=True,
84 restaurant__users=user
85 )
86 except cls.DoesNotExist:
87 raise Http404
88
89 def __str__(self):
90 return f'{self.wp_order_key} - {self.date_created}'