Rev 122 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
'''Created on 29-Mar-2010@author: ashish'''from shop2020.model.v1.order.impl.DataService import Transaction, LineItem,\AdditionalInfo, Payment, Shipment, TransactionTrail, Billingfrom shop2020.thriftpy.model.v1.order.ttypes import Transaction as T_Transaction,\TransactionServiceExceptionimport datetimefrom shop2020.utils.OrderStatus import status_transaction_init,\status_shipment_shipped, status_shipment_deliveredfrom elixir import sessionfrom shop2020.utils.Utils import to_py_datefrom sqlalchemy.sql.expression import and_def get_new_transaction():transaction = Transaction()transaction.createdOn = datetime.datetime.now()transaction.status = status_transaction_inittransaction.status_message = "New transaction"transaction.trails = []session.commit()return transactiondef create_transaction(t_transaction):orderinfo = t_transaction.orderInfoif not orderinfo:raise TransactionServiceException(101, "Orderinfo missing from the transaction")transaction = get_new_transaction()for line_item in orderinfo.lineitems:litem = LineItem()litem.item_id = line_item.itemlitem.added_on = to_py_date(line_item.addedOn)transaction.lineitems.append(litem)if line_item.additionalInfo:for k,v in line_item.additionalInfo.iteritems():additional_info = AdditionalInfo()additional_info.key = kadditional_info.value = vlitem.additional_info.append(additional_info)session.commit()return transaction.iddef get_transaction(transaction_id):transaction = Transaction.get_by(id=transaction_id)if not transaction:raise TransactionServiceException(108, "no such transaction")return transactiondef get_all_transactions(status, from_date, to_date):if not status:if not from_date and not to_date:#get all between from_date and to_datereturn Transaction.query.all()if not from_date:return Transaction.query.filter(Transaction.createdOn < to_date).all()if not to_date:return Transaction.query.filter(Transaction.createdOn > to_date).all()return Transaction.query.filter(and_(Transaction.createdOn < to_date , Transaction.createdOn > from_date)).all()if not from_date and not to_date:return Transaction.query.filter(Transaction.status == status).all()if not from_date:return Transaction.query.filter(and_(Transaction.status == status, Transaction.createdOn <to_date)).all()if not from_date:return Transaction.query.filter(and_(Transaction.status == status, Transaction.createdOn >from_date)).all()if not from_date:return Transaction.query.filter(and_(Transaction.status == status, and_(Transaction.createdOn <to_date, Transaction.createdOn > from_date))).all()def get_transactions_for_shipment_status(status, from_date, to_date):if not status:raise TransactionServiceException(101, "unknown status")query = Shipment.query.filter(Shipment.status == status)if from_date:query = query.filter(Shipment.shipment_time >from_date)if to_date:query = query.filter(Shipment.shipment_time <to_date)shipments = query.all()transactions = {}for shipment in shipments:if not transactions[shipment.transaction.id]:transactions.append(shipment.transaction)return transactions.values()def get_transactions_for_customer(customer_id, from_date, to_date, status):if not customer_id:raise TransactionServiceException(101, "bas customer id")query = Transaction.query.filter(Transaction.customer_id == customer_id)if status:query = query.filter(Transaction.status == status)if from_date:query = query.filter(Transaction.createdOn >from_date)if to_date:query = query.filter(Transaction.createdOn < to_date)return query.all()def get_transactions_for_customer_shipment(customer_id, from_date, to_date, status):if not customer_id:raise TransactionServiceException(101, "unknown customer id")query = Shipment.query.filter(Shipment.transaction.customerId == customer_id)if status:query = query.filter(Shipment.status == status)if from_date:query = query.filter(Shipment.shipment_time >from_date)if to_date:query = query.filter(Shipment.shipment_time <to_date)shipments = query.all()transactions = {}for shipment in shipments:if not transactions[shipment.transaction.id]:transactions.append(shipment.transaction)return transactions.values()def get_transaction_status(transaction_id):if not transaction_id:raise TransactionServiceException(101, "bad transaction id")transaction = get_transaction(transaction_id)return transaction.statusdef change_transaction_status(transaction_id, new_status, description):transaction = get_transaction(transaction_id)trail = TransactionTrail()trail.old_value = str(transaction.status)trail.new_value = str(new_status)transaction.status = new_statustrail.transaction = transactiontrail.timestamp = datetime.datetime.now()trail.description = descriptiontransaction.status_message = descriptionsession.commit()return Truedef set_shipping_tracker_info(transaction_id, shipping_id, tracking_id, airwayBillNo, provider):shipment = Shipment.get_by(id=shipping_id)if not shipment:raise TransactionServiceException(101, "not such shipment found")transaction = shipment.transactionif transaction.id != transaction_id:raise TransactionServiceException(108, "Looks like this is invalid transaction")shipment.tracking_id = tracking_idshipment.airway_bill_no = airwayBillNoshipment.provider = providertrail = TransactionTrail()trail.timestamp = datetime.datetime.now()trail.description = "shipping_id %d:tracking_id %s:airwayBill %s: provider %s" %(shipping_id, tracking_id, airwayBillNo, provider)trail.transaction = transactionsession.commit()return Truedef change_shipping_status(transaction_id, shipping_id, status, description):shipment = Shipment.get_by(id=shipping_id)if not shipment:raise TransactionServiceException(101, "not such shipment found")transaction = shipment.transactionif transaction.id != transaction_id:raise TransactionServiceException(108, "Looks like this is invalid transaction")trail = TransactionTrail()trail.old_value = str(shipment.status)trail.new_value = str(status)shipment.status = statustrail.transaction = transactiontrail.timestamp = datetime.datetime.now()trail.description = "Shipping status change : %s"%(description)shipment.status_message = descriptionsession.commit()return Truedef set_shipping_date(transaction_id, shipping_id, timestamp):shipment = Shipment.get_by(id=shipping_id)if not shipment:raise TransactionServiceException(101, "not such shipment found")transaction = shipment.transactionif transaction.id != transaction_id:raise TransactionServiceException(108, "Looks like this is invalid transaction")trail = TransactionTrail()trail.old_value = str(shipment.status)trail.new_value = str(status_shipment_shipped)shipment.status = status_shipment_shippedtrail.transaction = transactiontrail.timestamp = datetime.datetime.now()trail.description = "Shipping status change : %s"%(shipment.id)shipment.status_message = "Shipment dispatched"shipment.shipment_time = timestampsession.commit()return Truedef set_delivery_date(transaction_id, shipping_id, timestamp):shipment = Shipment.get_by(id=shipping_id)if not shipment:raise TransactionServiceException(101, "not such shipment found")transaction = shipment.transactionif transaction.id != transaction_id:raise TransactionServiceException(108, "Looks like this is invalid transaction")trail = TransactionTrail()trail.old_value = str(shipment.status)trail.new_value = str(status_shipment_delivered)shipment.status = status_shipment_deliveredtrail.transaction = transactiontrail.timestamp = datetime.datetime.now()trail.description = "Shipping status change : %s"%(shipment.id)shipment.status_message = "Shipment delivered"shipment.delivery_time = timestampsession.commit()return Truedef set_billing(transaction_id, t_billing):transaction = get_transaction(transaction_id)line_item = LineItem.get_by(id = t_billing.lineItem.id)if not line_item:raise TransactionServiceException(101, "unable to get this line item for id %d" % (t_billing.lineItem.id))billing = Billing()billing.line_item = line_itembilling.bill_number = t_billing.billNumbertry:billing.created_on = to_py_date(t_billing.generatedTimestamp)except:raise TransactionServiceException(108, "bad time stamp found while adding billing for transaction id %d" %(transaction.id))billing.generated_by = t_billing.generatedbysession.commit()return Truedef get_line_items(transaction_id):transaction = get_transaction(transaction_id)if not transaction.lineitems:raise TransactionServiceException(108, "no lineitems with transaction %d"%(transaction_id))return transaction.lineitemsdef get_shipments(transaction_id):transaction = get_transaction(transaction_id)if not transaction.shipments:raise TransactionServiceException(108, "no shipments with transaction %d"%(transaction_id))return transaction.shipmentsdef get_billings(transaction_id):transaction = get_transaction(transaction_id)if not transaction.lineitems:raise TransactionServiceException(108, "no lineitems, hence no billing with transaction %d"%(transaction_id))billings = []for lineitem in transaction.lineitems:billings.append(lineitem.billing)return billingsreturn transaction.shipments