diff options
author | jdlugosz963 <jdlugosz963@gmail.com> | 2023-07-17 01:47:57 +0200 |
---|---|---|
committer | jdlugosz963 <jdlugosz963@gmail.com> | 2023-07-17 01:52:26 +0200 |
commit | c21f4b3dacd597a15a5ec39d525df1dfe1b70376 (patch) | |
tree | 0dfc51d2ffeb7b5022d9ad852f2fd3620c72196a /restaurant_orders/core/models.py | |
parent | 2c6f98aeef4fa1aba5678fe17c8e762a11db7b40 (diff) | |
download | restaurant-orders-main.tar.gz restaurant-orders-main.zip |
Add project.main
Diffstat (limited to 'restaurant_orders/core/models.py')
-rw-r--r-- | restaurant_orders/core/models.py | 90 |
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 @@ | |||
1 | from django.db import models | ||
2 | from django.contrib.auth.models import User | ||
3 | from django.shortcuts import Http404, get_object_or_404 | ||
4 | |||
5 | from datetime import datetime | ||
6 | |||
7 | |||
8 | class 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 | |||
29 | class 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}' | ||