Skip to content

Commit f39296f

Browse files
committed
improved fetching orders, moved many functions to utils, updated several models
1 parent 8166b81 commit f39296f

File tree

3 files changed

+329
-171
lines changed

3 files changed

+329
-171
lines changed

models.py

+35-15
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import datetime
22
from decimal import Decimal
33
import random
4+
import re
45
import string
56

67
from peewee import *
@@ -88,7 +89,7 @@ class Shop(DBModel):
8889

8990

9091
class Order(DBModel):
91-
order_shop_id = IntegerField(null=True)
92+
shop_order_id = IntegerField(null=True)
9293
order_num = CharField(null=True)
9394
price_no_vat = DecimalField()
9495
vat = DecimalField()
@@ -101,7 +102,9 @@ class Order(DBModel):
101102
user_id = ForeignKeyField(User, backref='orders')
102103
open_date = DateTimeField()
103104
close_date = DateTimeField(null=True)
104-
# url = CharField(null=True) # used for storing url in eshop for easier access
105+
url = CharField(null=True) # used for storing url in eshop for easier access
106+
next_url = CharField(null=True) # url of the next order
107+
closed = BooleanField(default=False)
105108

106109

107110
class OrderLine(DBModel):
@@ -130,6 +133,8 @@ class Voucher(DBModel):
130133
class Log(DBModel):
131134
log_time = DateTimeField(default=datetime.datetime.now)
132135
event = CharField(choices=LOG_EVENTS)
136+
model = CharField(null=True)
137+
record = IntegerField(null=True)
133138
user_id = ForeignKeyField(SysUser, backref='logs', null=True)
134139
details = CharField(null=True)
135140

@@ -152,7 +157,7 @@ def process_order_line(order_line):
152157

153158

154159
# DATABASE HANDLING
155-
def save_order(order_details):
160+
def save_order(order_details, update=True):
156161
uinfo = order_details.get('user_info')
157162
key = next(i for i in ['email', 'code'] if uinfo)
158163
value = uinfo.get(key, None)
@@ -181,22 +186,37 @@ def save_order(order_details):
181186
try:
182187
order = Order.get(order_shop_id=order_details.get('order_shop_id'))
183188
except:
184-
_fields = [d for d in Order._meta.fields]
185-
order_keys = {key: value for key, value in order_details.items() if key in _fields}
186-
order_keys.update({k: order_details.get(k) for k in ['order_shop_id', 'order_num']})
187-
order = Order(**order_keys)
188-
order.user_id = user.id
189+
pass # no order found
190+
191+
if order and (not update or order.closed):
192+
return order
193+
194+
_fields = [d for d in Order._meta.fields]
195+
order_keys = {key: value for key, value in order_details.items() if key in _fields}
196+
order_keys.update({k: order_details.get(k) for k in ['order_shop_id', 'order_num']})
197+
order = Order(**order_keys)
198+
order.user_id = user.id
199+
order.save()
200+
# delete orderlines so that we are sure they are always up-to-date
201+
# todo find a way to avoid deleting them (compare line by line)
202+
q = OrderLine.delete().where(OrderLine.order_id == order.id)
203+
q.execute()
204+
for order_line in order_details.get('order_lines', []):
205+
line_dict = process_order_line(order_line)
206+
line_dict.update({'order_id': order.id})
207+
ol = OrderLine(**line_dict)
208+
ol.save()
209+
if order.close_date is not None and re.match('(Vybavená)|(Pripravená)|(Storno)', order.status):
210+
order.closed = True
189211
order.save()
190-
q = OrderLine.delete().where(OrderLine.order_id == order.id)
191-
q.execute()
192-
for order_line in order_details.get('order_lines', []):
193-
line_dict = process_order_line(order_line)
194-
line_dict.update({'order_id': order.id})
195-
ol = OrderLine(**line_dict)
196-
ol.save()
197212
return order
198213

199214

215+
def make_log(**kwargs):
216+
log = Log(**kwargs)
217+
return log.save()
218+
219+
200220
def create_shops():
201221
shop1 = {'name': 'shoptet', 'web': 'www.bio-market.sk'}
202222
shop2 = {'name': 'brick-n-mortar', 'city': 'Gotham'}

0 commit comments

Comments
 (0)