Subversion Repositories SmartDukaan

Rev

Rev 669 | Rev 690 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 669 Rev 685
Line 8... Line 8...
8
from shop2020.thriftpy.model.v1.user.ttypes import CartStatus, LineStatus, ShoppingCartException
8
from shop2020.thriftpy.model.v1.user.ttypes import CartStatus, LineStatus, ShoppingCartException
9
import datetime
9
import datetime
10
from shop2020.utils.Utils import to_py_date, to_java_date
10
from shop2020.utils.Utils import to_py_date, to_java_date
11
 
11
 
12
from shop2020.thriftpy.model.v1.order.ttypes import Transaction as TTransaction,\
12
from shop2020.thriftpy.model.v1.order.ttypes import Transaction as TTransaction,\
13
    TransactionStatus as TTransactionStatus, Order as TOrder, LineItem as TLineItem,\
13
    TransactionStatus as TTransactionStatus, Order as TOrder, LineItem as TLineItem, OrderStatus 
14
    PaymentInfo as TPaymentInfo, OrderStatus 
-
 
15
 
14
 
16
from shop2020.thriftpy.model.v1.catalog.ttypes import Item as TItem
15
from shop2020.thriftpy.model.v1.catalog.ttypes import Item as TItem
17
from shop2020.thriftpy.logistics.ttypes import LogisticsInfo as TLogisticsInfo
16
from shop2020.thriftpy.logistics.ttypes import LogisticsInfo as TLogisticsInfo
18
 
17
 
19
from shop2020.clients.TransactionClient import TransactionClient
18
from shop2020.clients.TransactionClient import TransactionClient
Line 24... Line 23...
24
def get_cart(user_id):
23
def get_cart(user_id):
25
    query = Cart.query.filter_by(user_id=user_id)      
24
    query = Cart.query.filter_by(user_id=user_id)      
26
    query = query.filter_by(cart_status = CartStatus.ACTIVE)
25
    query = query.filter_by(cart_status = CartStatus.ACTIVE)
27
    try:
26
    try:
28
        cart = query.one()
27
        cart = query.one()
29
        cart.accessed_on = datetime.datetime.now()
-
 
30
        session.commit()
28
        session.commit()
31
    except:
29
    except:
32
        return None
30
        return None
33
#        raise ShoppingCartException(101, "Cart does not exist")
31
#        raise ShoppingCartException(101, "Cart does not exist")
34
    return cart
32
    return cart
Line 48... Line 46...
48
        session.commit()
46
        session.commit()
49
    
47
    
50
    return cart
48
    return cart
51
 
49
 
52
def get_cart_by_user_id_and_status(user_id, status):
50
def get_cart_by_user_id_and_status(user_id, status):
53
 
-
 
54
    query = Cart.query.filter_by(user_id=user_id)
51
    query = Cart.query.filter_by(user_id=user_id)
55
    if status:
52
    if status:
56
        query = query.filter_by(cart_status=status)
53
        query = query.filter_by(cart_status=status)
57
    carts = query.all()
54
    carts = query.all()
58
    return carts
55
    return carts
59
 
56
 
60
def get_carts_by_status(status):
57
def get_carts_by_status(status):
61
    return Cart.query.filter_by(cart_status=status).all()
58
    return Cart.query.filter_by(cart_status=status).all()
62
 
59
 
63
 
-
 
64
def get_carts_between(start_time, end_time, status):
60
def get_carts_between(start_time, end_time, status):
65
    init_time = to_py_date(start_time)
61
    init_time = to_py_date(start_time)
66
    finish_time = to_py_date(end_time)
62
    finish_time = to_py_date(end_time)
67
    
63
    
68
    query = Cart.query
64
    query = Cart.query
Line 100... Line 96...
100
    cart = get_cart_by_id(id)
96
    cart = get_cart_by_id(id)
101
    if not cart:
97
    if not cart:
102
        raise ShoppingCartException(101, "no cart attached to this id")
98
        raise ShoppingCartException(101, "no cart attached to this id")
103
    if not status:
99
    if not status:
104
        raise ShoppingCartException(101, "invalid status")
100
        raise ShoppingCartException(101, "invalid status")
105
    
-
 
106
    cart.cart_status = status
101
    cart.cart_status = status     
107
     
-
 
108
    session.commit()
102
    session.commit()
109
    
103
    
110
def add_item_to_cart(cart_id, item_id, quantity):
104
def add_item_to_cart(cart_id, item_id, quantity):
111
    if not item_id:
105
    if not item_id:
112
        raise ShoppingCartException(101, "item_id cannot be null")
106
        raise ShoppingCartException(101, "item_id cannot be null")
Line 122... Line 116...
122
    cart.updated_on = current_time
116
    cart.updated_on = current_time
123
    line = get_line(item_id, cart_id, None,True)
117
    line = get_line(item_id, cart_id, None,True)
124
    if line:
118
    if line:
125
        #change the quantity only
119
        #change the quantity only
126
        line.quantity = quantity
120
        line.quantity = quantity
-
 
121
        line.updated_on = current_time
127
    else:
122
    else:
128
        line = Line()
123
        line = Line()
129
        line.cart = cart
124
        line.cart = cart
130
        line.item_id = item_id
125
        line.item_id = item_id
131
        line.quantity = quantity
126
        line.quantity = quantity
Line 135... Line 130...
135
    session.commit()
130
    session.commit()
136
 
131
 
137
def delete_item_from_cart(cart_id, item_id):
132
def delete_item_from_cart(cart_id, item_id):
138
    if not item_id:
133
    if not item_id:
139
        raise ShoppingCartException(101, "item_id cannot be null")
134
        raise ShoppingCartException(101, "item_id cannot be null")
-
 
135
    cart = Cart.get_by(id = cart_id)
-
 
136
    if not cart:
-
 
137
        raise ShoppingCartException(101, "no cart attached to this id")
140
    item = get_line(item_id, cart_id, None, True)
138
    item = get_line(item_id, cart_id, None, True)
141
    item.delete()
139
    item.delete()
-
 
140
    current_time = datetime.datetime.now()
-
 
141
    cart.updated_on = current_time
142
    session.commit()
142
    session.commit()
143
 
143
 
144
def change_item_status(cart_id, item_id, status):
144
def change_item_status(cart_id, item_id, status):
145
    if not status:
145
    if not status:
146
        raise ShoppingCartException(101, "Status cannot be made null")
146
        raise ShoppingCartException(101, "Status cannot be made null")
147
    item = get_line(item_id, cart_id, None, True)
147
    line = get_line(item_id, cart_id, None, True)
148
    if item:
148
    if line:
149
        item.line_status = status
149
        line.line_status = status
-
 
150
        current_time = datetime.datetime.now()
-
 
151
        line.updated_on = current_time
-
 
152
        line.cart.updated_on = current_time
150
        session.commit()
153
        session.commit()
151
    else:
154
    else:
152
        raise ShoppingCartException(101, "Unable to probe the item you desired")
155
        raise ShoppingCartException(101, "Unable to probe the line you desired")
153
    
156
    
154
def add_address_to_cart(cart_id, address_id):
157
def add_address_to_cart(cart_id, address_id):
155
    if not cart_id:
158
    if not cart_id:
156
        raise ShoppingCartException(101, "cart id cannot be made null")
159
        raise ShoppingCartException(101, "cart id cannot be made null")
157
    
160
    
Line 165... Line 168...
165
    address = Address.get_by(id=address_id)
168
    address = Address.get_by(id=address_id)
166
    if not address:
169
    if not address:
167
        raise ShoppingCartException(101, "No address for this id")
170
        raise ShoppingCartException(101, "No address for this id")
168
    
171
    
169
    cart.address_id = address_id
172
    cart.address_id = address_id
-
 
173
    current_time = datetime.datetime.now()
-
 
174
    cart.updated_on = current_time
170
    session.commit()
175
    session.commit()
171
    
176
    
172
def commit_cart(cart_id):   
177
def commit_cart(cart_id):   
173
    cart = get_cart_by_id(cart_id)
178
    cart = get_cart_by_id(cart_id)
174
    cart.cart_status = CartStatus.COMMITTED
179
    #cart.cart_status = CartStatus.COMMITTED
175
    cart.committed_on = datetime.datetime.now()
180
    #cart.committed_on = datetime.datetime.now()
176
    
181
    
177
    #now we have a cart. Need to create a transaction with it
182
    #now we have a cart. Need to create a transaction with it
178
    txn = TTransaction()
183
    txn = TTransaction()
179
    txn.paymentInfo = TPaymentInfo()
-
 
180
    txn.shoppingCartid = cart_id
184
    txn.shoppingCartid = cart_id
181
    txn.customer_id = cart.user_id
185
    txn.customer_id = cart.user_id
182
    txn.createdOn = to_java_date(datetime.datetime.now())
186
    txn.createdOn = to_java_date(datetime.datetime.now())
183
    txn.transactionStatus = TTransactionStatus.INIT
187
    txn.transactionStatus = TTransactionStatus.INIT
184
    txn.statusDescription = "New Order"
188
    txn.statusDescription = "New Order"
Line 187... Line 191...
187
    
191
    
188
    transaction_client = TransactionClient().get_client()
192
    transaction_client = TransactionClient().get_client()
189
    txn_id = transaction_client.createTransaction(txn)
193
    txn_id = transaction_client.createTransaction(txn)
190
    session.commit()
194
    session.commit()
191
    
195
    
192
    new_cart = create_cart(cart.user_id)
196
    #new_cart = create_cart(cart.user_id)
193
    user = User.get_by(id=cart.user_id)
197
    #user = User.get_by(id=cart.user_id)
194
    user.active_cart_id = new_cart.id
198
    #user.active_cart_id = new_cart.id
195
    session.commit()
199
    #session.commit()
196
    return txn_id
200
    return txn_id
197
 
201
 
198
def create_orders(cart):
202
def create_orders(cart):
199
    cart_lines = cart.lines
203
    cart_lines = cart.lines
200
    orders = []
204
    orders = []
Line 282... Line 286...
282
    for line in cart_lines:
286
    for line in cart_lines:
283
        old_estimate = line.estimate
287
        old_estimate = line.estimate
284
        item_id = line.item_id
288
        item_id = line.item_id
285
        if inventory_client.isActive(item_id):
289
        if inventory_client.isActive(item_id):
286
            if customer_pincode:
290
            if customer_pincode:
287
                #FIXME: Provider ID should be returned by the same call and shouldn't be hard-coded as 1
-
 
288
                try:
291
                try:
289
                    item_delivery_estimate = logistics_client.getLogisticsEstimation(item_id, customer_pincode).deliveryTime
292
                    item_delivery_estimate = logistics_client.getLogisticsEstimation(item_id, customer_pincode).deliveryTime
290
                except:
293
                except:
291
                    item_delivery_estimate = 3
294
                    item_delivery_estimate = 3
292
                if old_estimate != item_delivery_estimate:
295
                if old_estimate != item_delivery_estimate: