Rev 563 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
'''Created on 10-May-2010@author: ashish'''from elixir import *from shop2020.model.v1.user.impl.Dataservice import Cart, Linefrom shop2020.thriftpy.model.v1.user.ttypes import CartStatus, LineStatus, ShoppingCartExceptionimport datetimefrom shop2020.utils.Utils import to_py_datefrom shop2020.thriftpy.model.v1.order.ttypes import Transaction,\TransactionStatusdef get_cart(user_id):query = Cart.query.filter_by(user_id=user_id)query = query.filter_by(cart_status = CartStatus.ACTIVE)try:cart = query.one()cart.accessed_on = datetime.datetime.now()session.commit()except:return None# raise ShoppingCartException(101, "Cart does not exist")return cartdef get_cart_by_id(id):cart = Cart.get_by(id=id)if cart:cart.accessed_on = datetime.datetime.now()session.commit()return cartdef create_cart(user_id):cart = get_cart(user_id)if not cart:cart = Cart()cart.user_id = user_idcart.created_on = datetime.datetime.now()cart.updated_on = datetime.datetime.now()cart.cart_status = CartStatus.ACTIVEsession.commit()return cartdef get_cart_by_user_id_and_status(user_id, status):query = Cart.query.filter_by(user_id=user_id)if status:query = query.filter_by(cart_status=status)carts = query.all()return cartsdef get_carts_by_status(status):return Cart.query.filter_by(cart_status=status).all()def get_carts_between(start_time, end_time, status):init_time = to_py_date(start_time)finish_time = to_py_date(end_time)query = Cart.queryif status:query = query.filter(Cart.cart_status==status)if init_time:query = query.filter(Cart.created_on >= init_time)if finish_time:query = query.filter(Cart.created_on <= finish_time)carts = query.all()return cartsdef get_item(item_id, cart_id, status, single):#get cart firsttry:found_cart = Cart.get_by(id=cart_id)except:raise ShoppingCartException(101, "cart not found ")query = Line.query.filter(Line.cart.has(id = cart_id))query = query.filter_by(item_id = item_id)# query = LineItem.query.filter_by(item_id = item_id)# query = query.filter(LineItem.cart.id == cart_id)if status:query = query.filter_by(line_status = status)else:query = query.filter_by(line_status = LineStatus.LINE_ACTIVE)try:if single:return query.one()else:return query.all()except:return Nonedef get_item_by_id(line_id):return Line.get_by(id=line_id)def change_cart_status(cart_id, status):cart = get_cart_by_id(id)if not cart:raise ShoppingCartException(101, "no cart attached to this id")if not status:raise ShoppingCartException(101, "invalid status")cart.cart_status = statussession.commit()def add_item_to_cart(cart_id, item_id, quantity):if not item_id:raise ShoppingCartException(101, "item_id cannot be null")if not quantity:raise ShoppingCartException(101, "quantity cannot be null")item = get_item(item_id, cart_id, None,True)if item:#change the quantity onlyitem.quantity = quantitysession.commit()return item.idcart = get_cart_by_id(cart_id)if not cart:raise ShoppingCartException(101, "no cart attached to this id")line = Line()line.item_id = item_idline.quantity = quantityline.created_on = datetime.datetime.now()line.updated_on = datetime.datetime.now()line.line_status = LineStatus.LINE_ACTIVEcart.lines.append(line)session.commit()return line.iddef delete_item_from_cart(cart_id, item_id):if not item_id:raise ShoppingCartException(101, "item_id cannot be null")item = get_item(item_id, cart_id, None, True)item.delete()session.commit()returndef change_item_quantity(cart_id, item_id, quantity):return add_item_to_cart(cart_id, item_id, quantity)def change_item_status(cart_id, item_id, status):if not status:raise ShoppingCartException(101, "Status cannot be made null")item = get_item(item_id, cart_id, None, True)if item:item.line_status = statussession.commit()else:raise ShoppingCartException(101, "Unable to probe the item you desired")def add_address_to_cart(cart_id, address_id):if not cart_id:raise ShoppingCartException(101, "cart id cannot be made null")if not address_id:raise ShoppingCartException(101, "address id cannot be made null")cart = get_cart_by_id(cart_id)if not cart:raise ShoppingCartException(101, "no cart for this id")cart.address_id = address_idsession.commit()def commit_cart(cart_id, transaction_client):cart = get_cart_by_id(cart_id)cart.cart_status = CartStatus.COMMITTEDcart.committed_on = datetime.datetime.now()session.commit()#now we have a cart. Need to create a transaction with it#transaction = transaction_client.create_transaction(cart)return True"""transaction.shoppingCartid = cart_idtransaction.customer_id = cart.user_idtransaction.transactionStatus = TransactionStatus.INITtransaction.statusDescription = "Transaction submitted to warehouse"transaction.created_on = datetime.datetime.now()transaction.warehouse_id = 1;cart_lines = cart.linesfor line in cart_lines:if line.status == LineStatus.LINE_ACTIVE:#line is activeline_item = get_line_item(cartLine.getItemId());// create orders equivalent to quantity. Create one order per item.for(int i= 0; i<cartLine.getQuantity(); i++){// set orderOrder order = getOrder(c.getAddressId(), lineItem);order.addToLineitems(lineItem);orders.add(order);"""def validate_cart(cartId):# No need to validate duplicate items since there are only two ways# to add items to a cart and both of them check whether the item being# added is a duplicate of an already existing item.return Truedef merge_cart(fromCartId, toCartId):fromCart = Cart.get_by(id=fromCartId)toCart = Cart.get_by(id=toCartId)old_lines = fromCart.linesnew_lines = toCart.linesfor line in old_lines:flag = Truefor new_line in new_lines:if line.item_id == new_line.item_id:flag = Falseif flag:toCart.lines.append(line)toCart.updatedOn = datetime.datetime.now()fromCart.expired_on = datetime.datetime.now()fromCart.cart_status = CartStatus.INACTIVEsession.commit()"""t_line.id = line.idt_line.itemId = line.item_idt_line.quantity = line.quantityt_line.createdOn = to_java_date(line.created_on)t_line.updatedOn = to_java_date(line.updated_on)t_line.lineStatus = line.line_status"""