Subversion Repositories SmartDukaan

Rev

Rev 13487 | Blame | Compare with Previous | Last modification | View Log | RSS feed

from elixir import *
from shop2020.config.client.ConfigClient import ConfigClient
from shop2020.model.v1.order.impl import DataService
from shop2020.model.v1.order.impl.DataService import MobileActivationRecord, Order, LineItem
from shop2020.thriftpy.model.v1.order.ttypes import OrderStatus, OrderSource, OrderType
from requests import request
import datetime

config_client = ConfigClient()
host = config_client.get_property('transaction_service_db_hostname')

DataService.initialize(db_hostname=host)
startDate = datetime.datetime.strptime('20-09-2014 00:00:00', '%d-%m-%Y %H:%M:%S')
base_url = 'http://channel.spicemobile.in/tr/PullActivationDate?imei='

class __Details:
    def __init__(self,source,orderId,serial_number,deviceNumber,circle, operator, activationTime):
        self.source = source
        self.orderId = orderId
        self.serial_number = serial_number

def getActivatedDevices():
    activatedIds = session.query(MobileActivationRecord.orderId).all()
    if len(activatedIds) > 0:
        return list(zip(*activatedIds)[0])
    return activatedIds
    
def populateNewRecords(activatedIds):
    records = []
    try:
        query  = session.query(Order) \
        .join((LineItem,Order.id==LineItem.order_id)).filter(LineItem.brand=='Spice').filter(Order.created_timestamp>startDate).filter(Order.status.in_((OrderStatus.DELIVERY_SUCCESS,OrderStatus.SHIPPED_FROM_WH)))
        if len(activatedIds) > 0:
            orders = query.filter(~Order.id.in_((activatedIds))).all()
        else:
            orders = query.all()
        for order in orders:
            if order.lineitems[0].serial_number is None:
                continue
            if (order.source in (OrderSource.WEBSITE, OrderSource.SNAPDEAL, OrderSource.AMAZON, OrderSource.FLIPKART)) and order.status == OrderStatus.DELIVERY_SUCCESS:
                det = __Details(order.source,order.id,(order.lineitems[0].serial_number).strip(),None,None,None,None)
                records.append(det)
            elif (order.source in( OrderSource.EBAY, OrderSource.HOMESHOP18)) and order.status in (OrderStatus.SHIPPED_FROM_WH,OrderStatus.DELIVERY_SUCCESS):
                det = __Details(order.source,order.id,(order.lineitems[0].serial_number).strip(),None,None,None,None)
                records.append(det)
            else:
                continue
        return records
    finally:
        session.close()

def main():
    activatedIds = getActivatedDevices()
    records = populateNewRecords(activatedIds)
    print "Getting activation details for ",len(records)
    for rec in records:
        serial_number_list = rec.serial_number.split(',')
        for serial_number in serial_number_list:
            url = base_url+serial_number
            response = request('GET', url)
            #Response is pretty bad, can expect this from Spice services.
            try:
                activationRec = response.text.splitlines()[0]
                if not(serial_number == activationRec.split(',')[0].strip()):
                    print "Requested Serial Number ",serial_number
                    print "Response ",activationRec.split(',')[0].strip()
                    print "Requested serial_number different from response"
                    continue
                d_mobileActivationRecord = MobileActivationRecord()
                d_mobileActivationRecord.orderId = rec.orderId
                d_mobileActivationRecord.deviceNumber = activationRec.split(',')[2].strip()
                d_mobileActivationRecord.serialNumber = serial_number
                d_mobileActivationRecord.circle = activationRec.split(',')[3].strip()
                d_mobileActivationRecord.operator = activationRec.split(',')[4].strip()
                d_mobileActivationRecord.activationTime = datetime.datetime.strptime(activationRec.split(',')[5].strip(),  '%m/%d/%Y %I:%M:%S %p')
            except Exception as e:
                print "Exception ****"
                print e
                continue
    session.commit()
    session.close()

if __name__=='__main__':
    main()