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/utils.py | |
parent | 2c6f98aeef4fa1aba5678fe17c8e762a11db7b40 (diff) | |
download | restaurant-orders-main.tar.gz restaurant-orders-main.zip |
Add project.main
Diffstat (limited to 'restaurant_orders/core/utils.py')
-rw-r--r-- | restaurant_orders/core/utils.py | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/restaurant_orders/core/utils.py b/restaurant_orders/core/utils.py new file mode 100644 index 0000000..d716a9c --- /dev/null +++ b/restaurant_orders/core/utils.py | |||
@@ -0,0 +1,100 @@ | |||
1 | import json | ||
2 | from woocommerce import API | ||
3 | from twilio.rest import Client | ||
4 | from twilio.base.exceptions import TwilioRestException | ||
5 | |||
6 | from django.core.mail import send_mail | ||
7 | from django.conf import settings | ||
8 | |||
9 | from core.models import Order | ||
10 | |||
11 | class Sender(): | ||
12 | def __init__(self, order): | ||
13 | self.order = order | ||
14 | |||
15 | def get_order_url(self): | ||
16 | order_id = self.order.wp_id | ||
17 | order_key = self.order.wp_order_key | ||
18 | restaurant_url = self.order.restaurant.wordpress_url | ||
19 | return f'{restaurant_url}/zamowienie/order-pay/{order_id}/?pay_for_order=true&key={order_key}' | ||
20 | |||
21 | def get_message_body(self): | ||
22 | return f'Prosze dokonac platnosci: {self.get_order_url()}' | ||
23 | |||
24 | def send(self) -> (bool, str): | ||
25 | pass | ||
26 | |||
27 | |||
28 | class SendSms(Sender): | ||
29 | def __init__(self, order): | ||
30 | account_sid = settings.TWILIO_ACCOUNT_SID | ||
31 | auth_token = settings.TWILIO_TOKEN | ||
32 | |||
33 | self.client = Client(account_sid, auth_token) | ||
34 | self.from_ = "+17432007359" | ||
35 | |||
36 | super().__init__(order) | ||
37 | |||
38 | def send(self) -> (bool, str): | ||
39 | phone = self.order.billing.get('phone', None) | ||
40 | phone = "+48609155122" | ||
41 | if phone: | ||
42 | try: | ||
43 | message = self.client.messages.create(to=phone, | ||
44 | from_=self.from_, | ||
45 | body=self.get_message_body()) | ||
46 | except TwilioRestException as err: | ||
47 | return (False, err.msg) | ||
48 | else: | ||
49 | return (True, 'Wyslano sms') | ||
50 | return (False, 'Nie znaleziono numeru telefonu.') | ||
51 | |||
52 | |||
53 | |||
54 | class SendMail(Sender): | ||
55 | def send(self) -> (bool, str): | ||
56 | email = self.order.billing.get('email', None) | ||
57 | email = 'jdlugosz963@gmail.com' | ||
58 | if email: # Jesli sie spierdoli to wypluje | ||
59 | try: | ||
60 | send_mail('Strona do zaplaty', self.get_message_body(), 'no-reply@reami.pl', (email, ), fail_silently=False) | ||
61 | except smtplib.SMTPException: | ||
62 | return (False, "Niestety nie udalo sie wyslac maila.") | ||
63 | else: | ||
64 | return (True, "Wyslano maila.") | ||
65 | return (False, "Nie znaleziono maila.") | ||
66 | |||
67 | |||
68 | class Orders: | ||
69 | def __init__(self, restaurant, billing): | ||
70 | self.restaurant = restaurant | ||
71 | self.billing = billing | ||
72 | |||
73 | self.wcapi = API( | ||
74 | url=restaurant.wordpress_url, | ||
75 | consumer_key=restaurant.woocommerce_consumer_key, | ||
76 | consumer_secret=restaurant.woocommerce_consumer_secret, | ||
77 | timeout=7 | ||
78 | ) | ||
79 | |||
80 | def get_custom_order_data(self, items): | ||
81 | return { | ||
82 | "payment_method": "bacs", | ||
83 | "payment_method_title": "Direct Bank Transfer", | ||
84 | "set_paid": False, | ||
85 | "billing": self.billing, | ||
86 | "shipping": self.billing, | ||
87 | "line_items": [ | ||
88 | { | ||
89 | "product_id": pk, | ||
90 | "total": total, | ||
91 | "quantity": 1, | ||
92 | } for pk, total in items | ||
93 | ] | ||
94 | } | ||
95 | |||
96 | def create_custom_order(self, items): | ||
97 | data = self.get_custom_order_data(items) | ||
98 | response = self.wcapi.post("orders", data=data).json() | ||
99 | return Order.create_from_response_disable_view(response, self.restaurant) | ||
100 | |||