1
1
import datetime
2
2
from decimal import Decimal
3
3
import random
4
+ import re
4
5
import string
5
6
6
7
from peewee import *
@@ -88,7 +89,7 @@ class Shop(DBModel):
88
89
89
90
90
91
class Order (DBModel ):
91
- order_shop_id = IntegerField (null = True )
92
+ shop_order_id = IntegerField (null = True )
92
93
order_num = CharField (null = True )
93
94
price_no_vat = DecimalField ()
94
95
vat = DecimalField ()
@@ -101,7 +102,9 @@ class Order(DBModel):
101
102
user_id = ForeignKeyField (User , backref = 'orders' )
102
103
open_date = DateTimeField ()
103
104
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 )
105
108
106
109
107
110
class OrderLine (DBModel ):
@@ -130,6 +133,8 @@ class Voucher(DBModel):
130
133
class Log (DBModel ):
131
134
log_time = DateTimeField (default = datetime .datetime .now )
132
135
event = CharField (choices = LOG_EVENTS )
136
+ model = CharField (null = True )
137
+ record = IntegerField (null = True )
133
138
user_id = ForeignKeyField (SysUser , backref = 'logs' , null = True )
134
139
details = CharField (null = True )
135
140
@@ -152,7 +157,7 @@ def process_order_line(order_line):
152
157
153
158
154
159
# DATABASE HANDLING
155
- def save_order (order_details ):
160
+ def save_order (order_details , update = True ):
156
161
uinfo = order_details .get ('user_info' )
157
162
key = next (i for i in ['email' , 'code' ] if uinfo )
158
163
value = uinfo .get (key , None )
@@ -181,22 +186,37 @@ def save_order(order_details):
181
186
try :
182
187
order = Order .get (order_shop_id = order_details .get ('order_shop_id' ))
183
188
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
189
211
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 ()
197
212
return order
198
213
199
214
215
+ def make_log (** kwargs ):
216
+ log = Log (** kwargs )
217
+ return log .save ()
218
+
219
+
200
220
def create_shops ():
201
221
shop1 = {'name' : 'shoptet' , 'web' : 'www.bio-market.sk' }
202
222
shop2 = {'name' : 'brick-n-mortar' , 'city' : 'Gotham' }
0 commit comments