Subversion Repositories SmartDukaan

Rev

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

Rev 20246 Rev 20249
Line 7548... Line 7548...
7548
        enddate = to_py_date(enddate).date()
7548
        enddate = to_py_date(enddate).date()
7549
        query = query.filter(cast(StoreOrderCollection.pushedAt, DATE) <= enddate)
7549
        query = query.filter(cast(StoreOrderCollection.pushedAt, DATE) <= enddate)
7550
 
7550
 
7551
    return query.filter(StoreOrderCollection.pushedToOcr == 1).all()    
7551
    return query.filter(StoreOrderCollection.pushedToOcr == 1).all()    
7552
 
7552
 
-
 
7553
def update_timestamp_for_amazon_order(orderDeliveryMap):
-
 
7554
    for orderId,dateMap in orderDeliveryMap.iteritems():
-
 
7555
        order = get_order(orderId)
-
 
7556
        order.expected_delivery_time = datetime.datetime.strptime(dateMap.values()[0]+' 15:00:00', '%d-%m-%Y %H:%M:%S') 
-
 
7557
        order.promised_delivery_time = datetime.datetime.strptime(dateMap.values()[0]+' 15:00:00', '%d-%m-%Y %H:%M:%S')
-
 
7558
        promisedShipping = datetime.datetime.strptime(dateMap.keys()[0]+' 15:00:00', '%d-%m-%Y %H:%M:%S')
-
 
7559
        order.expected_shipping_time = promisedShipping
-
 
7560
        order.promised_shipping_time = promisedShipping
-
 
7561
        session.commit()
-
 
7562
    return True
-
 
7563
 
-
 
7564
def update_source_detail_timestamp(id,lastUpdatedOn):
-
 
7565
    detail = get_source_detail(id)
-
 
7566
    detail.lastUpdatedOn = to_py_date(lastUpdatedOn)
-
 
7567
    session.commit()
-
 
7568
    return True
7553
 
7569
 
7554
def get_orders_by_mobile_number(mobileNumber):
7570
def get_orders_by_mobile_number(mobileNumber):
7555
    return Order.query.filter(Order.customer_mobilenumber == mobileNumber).all()
7571
    return Order.query.filter(Order.customer_mobilenumber == mobileNumber).all()
7556
 
7572
 
7557
def get_orders_by_amazon_id(amazonId):
7573
def get_orders_by_amazon_id(amazonId):
Line 7609... Line 7625...
7609
    return query.all()    
7625
    return query.all()    
7610
 
7626
 
7611
def __update_tax_type(order):
7627
def __update_tax_type(order):
7612
    print "updating tax type"
7628
    print "updating tax type"
7613
 
7629
 
-
 
7630
def create_ebay_order(ebay_order):
-
 
7631
    ebayOrder = EbayOrder()
-
 
7632
    ebayOrder.orderId =  ebay_order.orderId
-
 
7633
    ebayOrder.paisaPayId =  ebay_order.paisaPayId
-
 
7634
    ebayOrder.salesRecordNumber = ebay_order.salesRecordNumber
-
 
7635
    ebayOrder.ebayListingId =  ebay_order.ebayListingId
-
 
7636
    ebayOrder.subsidyAmount =  ebay_order.subsidyAmount
-
 
7637
    ebayOrder.ebayTxnDate =  to_py_date(ebay_order.ebayTxnDate)
-
 
7638
    ebayOrder.transactionId = ebay_order.transactionId
-
 
7639
    ebayOrder.listingName = ebay_order.listingName
-
 
7640
    ebayOrder.listingPrice = ebay_order.listingPrice
-
 
7641
    session.commit()
-
 
7642
 
-
 
7643
def get_ebay_order_by_sales_rec_number(sales_rec_number):
-
 
7644
    return EbayOrder.query.filter(EbayOrder.salesRecordNumber == sales_rec_number).one()
-
 
7645
 
-
 
7646
def get_ebay_order(sales_rec_number, listingId, paisa_pay_id):
-
 
7647
    query = EbayOrder.query
-
 
7648
    if sales_rec_number:
-
 
7649
        query = query.filter(EbayOrder.salesRecordNumber == sales_rec_number)
-
 
7650
    if listingId:
-
 
7651
        query = query.filter(EbayOrder.ebayListingId == listingId)
-
 
7652
    if paisa_pay_id:
-
 
7653
        query = query.filter(EbayOrder.paisaPayId == paisa_pay_id)
-
 
7654
    return query.all()
-
 
7655
    #return EbayOrder.query.filter(EbayOrder.salesRecordNumber == sales_rec_number).filter(EbayOrder.ebayListingId == listingId).one()
-
 
7656
 
-
 
7657
def get_ebay_order_by_orderId(order_id):
-
 
7658
    return EbayOrder.query.filter(EbayOrder.orderId == order_id).one()
-
 
7659
 
-
 
7660
def update_ebay_order(ebay_order):
-
 
7661
    ebayOrder = get_ebay_order_by_orderId(ebay_order.orderId)
-
 
7662
    ebayOrder.subsidyAmount = ebay_order.subsidyAmount
-
 
7663
    ebayOrder.transactionId = ebay_order.transactionId
-
 
7664
    ebayOrder.ebayTxnDate = to_py_date(ebay_order.ebayTxnDate)
-
 
7665
    ebayOrder.bluedartPaisaPayRef = ebay_order.bluedartPaisaPayRef
-
 
7666
    ebayOrder.listingPrice = ebay_order.listingPrice
-
 
7667
    session.commit()
-
 
7668
 
-
 
7669
def ebay_order_exists(sales_rec_number, ebay_listing_id):
-
 
7670
    try:
-
 
7671
        ebayOrder = get_ebay_order_by_sales_rec_number(sales_rec_number)
-
 
7672
        if ebayOrder.ebayListingId == ebay_listing_id:
-
 
7673
            return True
-
 
7674
        else:
-
 
7675
            return False
-
 
7676
    except Exception as e:
-
 
7677
        return False
-
 
7678
def update_order_for_ebay(t_order):
-
 
7679
    order = get_order(t_order.id)
-
 
7680
    order.customer_id = t_order.customer_id
-
 
7681
    order.customer_name = t_order.customer_name
-
 
7682
    order.customer_city = t_order.customer_city
-
 
7683
    order.customer_state = t_order.customer_state
-
 
7684
    order.customer_mobilenumber = t_order.customer_mobilenumber
-
 
7685
    order.customer_pincode = t_order.customer_pincode
-
 
7686
    order.customer_address1 = t_order.customer_address1
-
 
7687
    order.customer_address2 = t_order.customer_address2
-
 
7688
    order.customer_email = t_order.customer_email
-
 
7689
    order.logistics_provider_id = t_order.logistics_provider_id
-
 
7690
    order.airwaybill_no = t_order.airwaybill_no
-
 
7691
    order.tracking_id = t_order.tracking_id
-
 
7692
    order.status = t_order.status  
-
 
7693
    order.statusDescription = t_order.statusDescription
-
 
7694
    order.cod = 0
-
 
7695
    order.otg = False
-
 
7696
    order.freebieItemId = 0
-
 
7697
    order.orderType = OrderType.B2C
-
 
7698
    order.source = 6
-
 
7699
    
-
 
7700
    transaction = get_transaction(order.transaction_id)
-
 
7701
    transaction.status = TransactionStatus.AUTHORIZED
-
 
7702
    transaction.customer_id = t_order.customer_id
-
 
7703
    session.commit()
-
 
7704
    
-
 
7705
def split_ebay_order(order_id, split_order_qty, split_order_item_id, use_power_ship):
-
 
7706
    #In case of split now order is always assigned based on the website logic...Also itemId won't work for now
-
 
7707
    order = get_order(order_id)
-
 
7708
    if split_order_qty >=order.lineitems[0].quantity:
-
 
7709
        raise TransactionServiceException(108, "Split Quantity is greater than or equal to order quantity")
-
 
7710
    if order.status not in [OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.LOW_INV_PO_RAISED, OrderStatus.LOW_INV_REVERSAL_IN_PROCESS, OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT, OrderStatus.CAPTURE_IN_PROCESS, OrderStatus.REJECTED, OrderStatus.ACCEPTED]:
-
 
7711
        raise TransactionServiceException(108, "Order not allowed to be split")
-
 
7712
    new_order = __clone_order(order, False, False)
-
 
7713
    new_order.expected_delivery_time = order.expected_delivery_time
-
 
7714
    new_order.promised_delivery_time = order.promised_delivery_time
-
 
7715
    new_order.expected_shipping_time = order.expected_shipping_time
-
 
7716
    new_order.promised_shipping_time = order.promised_shipping_time
-
 
7717
    if use_power_ship:
-
 
7718
        new_order.logistics_provider_id = order.logistics_provider_id
-
 
7719
        new_order.airwaybill_no = order.airwaybill_no
-
 
7720
        new_order.tracking_id = order.tracking_id
-
 
7721
    
-
 
7722
    new_order.lineitems[0].quantity = split_order_qty
-
 
7723
    new_order.lineitems[0].total_price = new_order.lineitems[0].unit_price*split_order_qty
-
 
7724
    new_order.total_amount = new_order.lineitems[0].total_price
-
 
7725
    
-
 
7726
    order.lineitems[0].quantity = order.lineitems[0].quantity - split_order_qty
-
 
7727
    order.lineitems[0].total_price = order.lineitems[0].unit_price * order.lineitems[0].quantity
-
 
7728
    order.total_amount = order.lineitems[0].total_price
-
 
7729
    
-
 
7730
    session.commit()
-
 
7731
    return new_order
-
 
7732
 
-
 
7733
def add_or_update_amazon_fba_sales_snapshot(amazonfbasalessnapshot):
-
 
7734
    salesnapshotfordate = AmazonFbaSalesSnapshot.get_by(item_id = amazonfbasalessnapshot.item_id,dateOfSale=to_py_date(amazonfbasalessnapshot.dateOfSale).date(),fcLocation=amazonfbasalessnapshot.fcLocation)
-
 
7735
    if salesnapshotfordate is None:
-
 
7736
        amazon_fba_sales_snapshot = AmazonFbaSalesSnapshot()
-
 
7737
        amazon_fba_sales_snapshot.dateOfSale = to_py_date(amazonfbasalessnapshot.dateOfSale).date()
-
 
7738
        amazon_fba_sales_snapshot.item_id = amazonfbasalessnapshot.item_id
-
 
7739
        amazon_fba_sales_snapshot.totalOrderCount = amazonfbasalessnapshot.totalOrderCount
-
 
7740
        amazon_fba_sales_snapshot.amazonFbaInventory = amazonfbasalessnapshot.amazonFbaInventory
-
 
7741
        amazon_fba_sales_snapshot.isOutOfStock = amazonfbasalessnapshot.isOutOfStock
-
 
7742
        amazon_fba_sales_snapshot.promotionOrderCount = amazonfbasalessnapshot.promotionOrderCount
-
 
7743
        amazon_fba_sales_snapshot.totalSale = amazonfbasalessnapshot.totalSale
-
 
7744
        amazon_fba_sales_snapshot.promotionSale = amazonfbasalessnapshot.promotionSale
-
 
7745
        #if amazonfbasalessnapshot.ourPrice is not None:
-
 
7746
        amazon_fba_sales_snapshot.ourPriceSnapshotDate = to_py_date(amazonfbasalessnapshot.ourPriceSnapshotDate)
-
 
7747
        amazon_fba_sales_snapshot.ourPrice = amazonfbasalessnapshot.ourPrice
-
 
7748
        #if amazonfbasalessnapshot.salePrice is not None:
-
 
7749
        amazon_fba_sales_snapshot.salePriceSnapshotDate = to_py_date(amazonfbasalessnapshot.salePriceSnapshotDate)
-
 
7750
        amazon_fba_sales_snapshot.salePrice = amazonfbasalessnapshot.salePrice
-
 
7751
        #if amazonfbasalessnapshot.minFbaPrice is not None:
-
 
7752
        amazon_fba_sales_snapshot.minFbaPriceSnapshotDate = to_py_date(amazonfbasalessnapshot.minFbaPriceSnapshotDate)
-
 
7753
        amazon_fba_sales_snapshot.minFbaPrice = amazonfbasalessnapshot.minFbaPrice
-
 
7754
        #if amazonfbasalessnapshot.minMfnPrice is not None:
-
 
7755
        amazon_fba_sales_snapshot.minMfnPriceSnapshotDate = to_py_date(amazonfbasalessnapshot.minMfnPriceSnapshotDate)
-
 
7756
        amazon_fba_sales_snapshot.minMfnPrice = amazonfbasalessnapshot.minMfnPrice
-
 
7757
        amazon_fba_sales_snapshot.fcLocation = amazonfbasalessnapshot.fcLocation 
-
 
7758
    
-
 
7759
    else:
-
 
7760
        if(amazonfbasalessnapshot.totalOrderCount > 0):
-
 
7761
            salesnapshotfordate.isOutOfStock = 0
-
 
7762
        salesnapshotfordate.promotionOrderCount = amazonfbasalessnapshot.promotionOrderCount
-
 
7763
        salesnapshotfordate.totalSale = amazonfbasalessnapshot.totalSale
-
 
7764
        salesnapshotfordate.promotionSale = amazonfbasalessnapshot.promotionSale
-
 
7765
        salesnapshotfordate.totalOrderCount = amazonfbasalessnapshot.totalOrderCount
-
 
7766
        salesnapshotfordate.fcLocation = amazonfbasalessnapshot.fcLocation
-
 
7767
    session.commit()    
-
 
7768
    
-
 
7769
def get_amazon_fba_sales_snapshot_for_days(interval):
-
 
7770
    query = session.query(Order.status, func.count(Order.id)).group_by(Order.status)
-
 
7771
    date = datetime.datetime.now()
-
 
7772
    toDate = date-timedelta(days = 1)
-
 
7773
    fromDate = toDate-timedelta(days = interval)
-
 
7774
    fbasalessnapshot = AmazonFbaSalesSnapshot.query.filter(AmazonFbaSalesSnapshot.dateOfSale.between (fromDate.date(),toDate.date())).order_by(AmazonFbaSalesSnapshot.dateOfSale).all()
-
 
7775
    return fbasalessnapshot        
-
 
7776
    
-
 
7777
def create_snapdeal_order(t_snapdeal_order):
-
 
7778
    snapdealOrder = SnapdealOrder()
-
 
7779
    snapdealOrder.orderId = t_snapdeal_order.orderId
-
 
7780
    snapdealOrder.subOrderId = t_snapdeal_order.subOrderId
-
 
7781
    snapdealOrder.referenceCode = t_snapdeal_order.referenceCode
-
 
7782
    snapdealOrder.productName = t_snapdeal_order.productName
-
 
7783
    snapdealOrder.listingPrice = t_snapdeal_order.listingPrice
-
 
7784
    snapdealOrder.snapdealTxnDate = to_py_date(t_snapdeal_order.snapdealTxnDate)
-
 
7785
    snapdealOrder.maxNlc = t_snapdeal_order.maxNlc
-
 
7786
    order = Order.get_by(id=t_snapdeal_order.orderId)
-
 
7787
    order.status = OrderStatus.ACCEPTED
-
 
7788
    user = None
-
 
7789
    try:
-
 
7790
        user_client = UserClient().get_client()
-
 
7791
        user_to_add = User()
-
 
7792
        user_to_add.email = 'SD.'+ str(t_snapdeal_order.orderId) + '@mailinator.com'
-
 
7793
        user_to_add.password = 'hSp5gvCsrrhZcceE6mzzOQ'
-
 
7794
        user_to_add.communicationEmail = user_to_add.email
-
 
7795
        user_to_add.sourceStartTime = int(round(time.time() * 1000))
-
 
7796
        user_to_add.sourceId = OrderSource.SNAPDEAL
-
 
7797
        user_to_add.sex = Sex.WONT_SAY
-
 
7798
        user_to_add = user_client.createUser(user_to_add)
-
 
7799
        user = user_to_add
-
 
7800
    except:
-
 
7801
        pass
-
 
7802
    
-
 
7803
    if user:
-
 
7804
        order.customer_id = user.userId
-
 
7805
        order.customer_email = user.email
-
 
7806
    session.commit()
-
 
7807
    
-
 
7808
def get_snapdeal_order(order_id, reference_code, subOrder_id):
-
 
7809
    query = SnapdealOrder.query
-
 
7810
    if order_id:
-
 
7811
        query = query.filter(SnapdealOrder.orderId == order_id)
-
 
7812
    elif reference_code==subOrder_id:
-
 
7813
        if reference_code is None:
-
 
7814
            reference_code=''
-
 
7815
        query = query.filter(or_(SnapdealOrder.referenceCode == reference_code, SnapdealOrder.subOrderId== subOrder_id))
-
 
7816
    else:
-
 
7817
        query = query.filter(and_(SnapdealOrder.referenceCode == reference_code, SnapdealOrder.subOrderId== subOrder_id))
-
 
7818
        return query.one()
-
 
7819
    return query.all()
-
 
7820
 
-
 
7821
def snapdeal_order_exists(suborder_id, reference_code):
-
 
7822
    exists = SnapdealOrder.query.filter_by(subOrderId=suborder_id,referenceCode=reference_code).first()
-
 
7823
    if exists is not None:
-
 
7824
        return True
-
 
7825
    else:
-
 
7826
        return False
-
 
7827
         
-
 
7828
def get_amazon_fba_sales_latest_snapshot_for_item(item_id):
-
 
7829
    return AmazonFbaSalesSnapshot.query.filter(AmazonFbaSalesSnapshot.item_id==item_id).filter(AmazonFbaSalesSnapshot.dateOfSale!=datetime.datetime.now().date()).order_by(desc(AmazonFbaSalesSnapshot.dateOfSale)).first()
-
 
7830
 
-
 
7831
def update_latest_fba_prices_for_item(fbaitemprices):
-
 
7832
    fbasalessnapshot = AmazonFbaSalesSnapshot.query.filter(AmazonFbaSalesSnapshot.item_id==fbaitemprices.item_id).order_by(desc(AmazonFbaSalesSnapshot.dateOfSale)).first()
-
 
7833
    if(fbasalessnapshot.ourPriceSnapshotDate < to_java_date(fbaitemprices.ourPriceSnapshotDate) and fbaitemprices.ourPrice is not None):
-
 
7834
        fbasalessnapshot.ourPriceSnapshotDate = to_py_date(fbaitemprices.ourPriceSnapshotDate)
-
 
7835
        fbasalessnapshot.ourPrice = fbaitemprices.ourPrice
-
 
7836
    if(fbasalessnapshot.salePriceSnapshotDate < to_java_date(fbaitemprices.salePriceSnapshotDate) and fbaitemprices.salePrice is not None):
-
 
7837
            fbasalessnapshot.salePriceSnapshotDate = to_py_date(fbaitemprices.salePriceSnapshotDate)
-
 
7838
            fbasalessnapshot.salePrice = fbaitemprices.salePrice
-
 
7839
    if(fbasalessnapshot.minFbaPriceSnapshotDate < to_java_date(fbaitemprices.minFbaPriceSnapshotDate) and fbaitemprices.minFbaPrice is not None):
-
 
7840
            fbasalessnapshot.minFbaPriceSnapshotDate = to_py_date(fbaitemprices.minFbaPriceSnapshotDate)
-
 
7841
            fbasalessnapshot.minFbaPrice = fbaitemprices.minFbaPrice
-
 
7842
    if(fbasalessnapshot.minMfnPriceSnapshotDate < to_java_date(fbaitemprices.minMfnPriceSnapshotDate) and fbaitemprices.minMfnPrice is not None):
-
 
7843
        fbasalessnapshot.minMfnPriceSnapshotDate = to_py_date(fbaitemprices.minMfnPriceSnapshotDate)
-
 
7844
        fbasalessnapshot.minMfnPrice = fbaitemprices.minMfnPrice
-
 
7845
    session.commit()
-
 
7846
    
-
 
7847
def flipkart_order_exists(orderid,suborderid):
-
 
7848
    exists = FlipkartOrder.query.filter_by(flipkartOrderId=orderid,flipkartSubOrderId=suborderid).first()
-
 
7849
    if exists is not None:
-
 
7850
        return True
-
 
7851
    else:
-
 
7852
        return False
-
 
7853
    
-
 
7854
def create_flipkart_order(flipkartorder):
-
 
7855
    order = FlipkartOrder()
-
 
7856
    order.orderId = flipkartorder.orderId
-
 
7857
    order.flipkartSubOrderId = flipkartorder.flipkartSubOrderId
-
 
7858
    order.flipkartOrderId = flipkartorder.flipkartOrderId
-
 
7859
    order.flipkartTxnDate = to_py_date(flipkartorder.flipkartTxnDate)
-
 
7860
    order.shippingPrice = flipkartorder.shippingPrice 
-
 
7861
    order.octroiFee = flipkartorder.octroiFee
-
 
7862
    order.emiFee = flipkartorder.emiFee
-
 
7863
    order.maxNlc = flipkartorder.maxNlc
-
 
7864
    s_order = Order.get_by(id=flipkartorder.orderId)
-
 
7865
    if s_order.cod:
-
 
7866
        s_order.status = OrderStatus.COD_VERIFICATION_PENDING
-
 
7867
    else:
-
 
7868
        s_order.status = OrderStatus.ACCEPTED
-
 
7869
        s_order.accepted_timetsmap = datetime.datetime.now()
-
 
7870
    user = None
-
 
7871
    try:
-
 
7872
        user_client = UserClient().get_client()
-
 
7873
        user_to_add = User()
-
 
7874
        user_to_add.email = 'FK.'+ str(flipkartorder.orderId) + '@mailinator.com'
-
 
7875
        user_to_add.password = 'gR9zF-Ish2im6tbYFNivgA'
-
 
7876
        user_to_add.communicationEmail = user_to_add.email
-
 
7877
        user_to_add.sourceStartTime = int(round(time.time() * 1000))
-
 
7878
        user_to_add.sourceId = OrderSource.FLIPKART
-
 
7879
        user_to_add.sex = Sex.WONT_SAY
-
 
7880
        user_to_add = user_client.createUser(user_to_add)
-
 
7881
        user = user_to_add
-
 
7882
    except:
-
 
7883
        pass
-
 
7884
    
-
 
7885
    if user:
-
 
7886
        s_order.customer_id = user.userId
-
 
7887
        s_order.customer_email = user.email
-
 
7888
        
-
 
7889
    session.commit()
-
 
7890
 
-
 
7891
def get_flipkart_order(orderid):
-
 
7892
    flipkartorder = FlipkartOrder.query.filter_by(orderId=orderid).first()
-
 
7893
    if not flipkartorder:
-
 
7894
        print "No found order for orderid " + str(orderid)
-
 
7895
        raise TransactionServiceException(108, "no such order")
-
 
7896
    return flipkartorder    
-
 
7897
 
-
 
7898
def get_flipkart_order_by_subOrderId(flipkartOrderItemId):
-
 
7899
    flipkartorder = FlipkartOrder.query.filter_by(flipkartSubOrderId=flipkartOrderItemId).first()
-
 
7900
    if not flipkartorder:
-
 
7901
        raise TransactionServiceException(108, "no such flipkart order " + str(flipkartOrderItemId))
-
 
7902
    return flipkartorder
-
 
7903
 
-
 
7904
def update_flipkart_order_dates_and_awb(orderid,suborderid,date,awb):
-
 
7905
    flipkartorder = FlipkartOrder.query.filter_by(flipkartOrderId=orderid,flipkartSubOrderId=suborderid).first()
-
 
7906
    print flipkartorder 
-
 
7907
    order = get_order(flipkartorder.orderId)
-
 
7908
    if not order:
-
 
7909
        print "No found order for orderid " + str(orderid)
-
 
7910
        raise TransactionServiceException(108, "no such order")
-
 
7911
    order.tracking_id = awb
-
 
7912
    order.expected_delivery_time = to_py_date(date + 4*24*60*60*1000)
-
 
7913
    order.promised_delivery_time = to_py_date(date + 4*24*60*60*1000)
-
 
7914
    order.expected_shipping_time = to_py_date(date)
-
 
7915
    order.promised_shipping_time = to_py_date(date)
-
 
7916
    session.commit()
-
 
7917
    
7614
def get_order_for_airwayBillNo(airwaybillNo):
7918
def get_order_for_airwayBillNo(airwaybillNo):
7615
    orders = Order.query.filter(Order.airwaybill_no==airwaybillNo).all()
7919
    orders = Order.query.filter(Order.airwaybill_no==airwaybillNo).all()
7616
    if not orders:
7920
    if not orders:
7617
        orders = []
7921
        orders = []
7618
    
7922
    
Line 7648... Line 7952...
7648
        return len(catalog_client.getAllActivePrivateDeals(allItems, 0)) > 0 
7952
        return len(catalog_client.getAllActivePrivateDeals(allItems, 0)) > 0 
7649
    
7953
    
7650
            
7954
            
7651
    return result
7955
    return result
7652
 
7956
 
-
 
7957
def update_snapdeal_orders_status(orders):
-
 
7958
    for statusString, orderList in orders.iteritems():
-
 
7959
        if statusString == "Cancelled":
-
 
7960
            try:
-
 
7961
                for cancel_order in orderList:
-
 
7962
                    ref_code = cancel_order[0]
-
 
7963
                    sub_order_code = cancel_order[1]
-
 
7964
                    snapdeal_order = None 
-
 
7965
                    try:
-
 
7966
                        snapdeal_order = get_snapdeal_order(None, ref_code, sub_order_code)
-
 
7967
                    except Exception as e:
-
 
7968
                        print 'Caught in Updation of Cancelled Orders Getting Snapdeal Order'
-
 
7969
                        pass
-
 
7970
                    if snapdeal_order:
-
 
7971
                        order = get_order(snapdeal_order.orderId)
-
 
7972
                        if order.status == OrderStatus.SHIPPED_FROM_WH:
-
 
7973
                            order.status = OrderStatus.SHIPPED_TO_LOGST
-
 
7974
                            session.commit()
-
 
7975
            except Exception as e:
-
 
7976
                print 'Caught in Updation of Cancelled Orders'
-
 
7977
                print e
-
 
7978
                print sys.exc_info()
-
 
7979
                
-
 
7980
        
-
 
7981
        if statusString == "Delivered":
-
 
7982
            try:
-
 
7983
                for del_order in orderList:
-
 
7984
                    ref_code = del_order[0]
-
 
7985
                    sub_order_code = del_order[1]
-
 
7986
                    dlvry_timestamp = del_order[2]
-
 
7987
                    snapdeal_order = None                    
-
 
7988
                    try:
-
 
7989
                        snapdeal_order = get_snapdeal_order(None, ref_code, sub_order_code)
-
 
7990
                    except Exception as e:
-
 
7991
                        print 'Caught in Updation of Delivered Orders Getting Snapdeal Order'
-
 
7992
                        pass
-
 
7993
                    if snapdeal_order:
-
 
7994
                        order = get_order(snapdeal_order.orderId)
-
 
7995
                        if order.status == OrderStatus.SHIPPED_FROM_WH:
-
 
7996
                            order.delivery_timestamp = datetime.datetime.strptime(dlvry_timestamp, "%Y-%m-%d %H:%M:%S")
-
 
7997
                            order.receiver = order.customer_name
-
 
7998
                            order.status = OrderStatus.DELIVERY_SUCCESS
-
 
7999
                            order.statusDescription = "Order delivered"
-
 
8000
                            session.commit()
-
 
8001
            except Exception as e:
-
 
8002
                print 'Caught in Updation of Delivered Orders'
-
 
8003
                print e
-
 
8004
                print sys.exc_info()
-
 
8005
    '''
-
 
8006
    try:
-
 
8007
        for del_order in delivered_orders:
-
 
8008
            ref_code = del_order[0]
-
 
8009
            sub_order_code = del_order[1]
-
 
8010
            dlvry_timestamp = del_order[2]
-
 
8011
            
-
 
8012
            if snapdeal_order_exists(sub_order_code, ref_code):
-
 
8013
                snapdeal_order = get_snapdeal_order(None, None, sub_order_code)
-
 
8014
                if snapdeal_order:
-
 
8015
                    order = get_order(snapdeal_order.orderId)
-
 
8016
                    if order.status == OrderStatus.SHIPPED_FROM_WH:
-
 
8017
                        order.delivery_timestamp = datetime.datetime.strptime(dlvry_timestamp, "%Y-%m-%d %H:%M:%S")
-
 
8018
                        order.receiver = order.customer_name
-
 
8019
                        order.status = OrderStatus.DELIVERY_SUCCESS
-
 
8020
                        order.statusDescription = "Order delivered"
-
 
8021
                        session.commit()
-
 
8022
    except Exception as e:
-
 
8023
        print e
-
 
8024
        print sys.exc_info()
-
 
8025
    '''
-
 
8026
            
-
 
8027
def update_flipkart_orders_status(delivered_orders):
-
 
8028
    try:
-
 
8029
        for del_order in delivered_orders:
-
 
8030
            flipkart_order_id = del_order[0]
-
 
8031
            sub_order_code = del_order[1]
-
 
8032
            dlvry_timestamp = del_order[2]  
-
 
8033
            
-
 
8034
            if flipkart_order_exists(flipkart_order_id,sub_order_code):
-
 
8035
                flipkart_order = get_flipkart_order_by_subOrderId(sub_order_code)
-
 
8036
                if flipkart_order:
-
 
8037
                    order = get_order(flipkart_order.orderId)
-
 
8038
                    if order.status == OrderStatus.SHIPPED_FROM_WH:
-
 
8039
                        order.delivery_timestamp = datetime.datetime.strptime(dlvry_timestamp, "%Y-%m-%d %H:%M:%S")
-
 
8040
                        order.receiver = order.customer_name
-
 
8041
                        order.status = OrderStatus.DELIVERY_SUCCESS
-
 
8042
                        order.statusDescription = "Order delivered"
-
 
8043
                        session.commit()
-
 
8044
    except Exception as e:
-
 
8045
        print e
-
 
8046
        print sys.exc_info()
-
 
8047
            
-
 
8048
    '''    
-
 
8049
    order_ids = delivered_orders.keys()
-
 
8050
    for orderId in order_ids:
-
 
8051
        order = Order.query.filter(Order.id == orderId).first()
-
 
8052
        order.status = OrderStatus.DELIVERY_SUCCESS
-
 
8053
        order.statusDescription = "Order delivered"
-
 
8054
        order.delivery_timestamp = datetime.datetime.strptime(delivered_orders.get(orderId), "%Y-%m-%d %H:%M:%S")
-
 
8055
        session.commit()
-
 
8056
    '''
-
 
8057
 
-
 
8058
def bulk_add_or_update_amazon_fba_sales_snapshot(amazonfbasalessnapshotlist):
-
 
8059
    for amazonfbasalessnapshot in amazonfbasalessnapshotlist:
-
 
8060
        salesnapshotfordate = AmazonFbaSalesSnapshot.get_by(item_id = amazonfbasalessnapshot.item_id,dateOfSale=to_py_date(amazonfbasalessnapshot.dateOfSale).date(),fcLocation=amazonfbasalessnapshot.fcLocation)
-
 
8061
        if salesnapshotfordate is None:
-
 
8062
            amazon_fba_sales_snapshot = AmazonFbaSalesSnapshot()
-
 
8063
            amazon_fba_sales_snapshot.dateOfSale = to_py_date(amazonfbasalessnapshot.dateOfSale).date()
-
 
8064
            amazon_fba_sales_snapshot.item_id = amazonfbasalessnapshot.item_id
-
 
8065
            amazon_fba_sales_snapshot.totalOrderCount = amazonfbasalessnapshot.totalOrderCount
-
 
8066
            amazon_fba_sales_snapshot.amazonFbaInventory = amazonfbasalessnapshot.amazonFbaInventory
-
 
8067
            amazon_fba_sales_snapshot.isOutOfStock = amazonfbasalessnapshot.isOutOfStock
-
 
8068
            amazon_fba_sales_snapshot.promotionOrderCount = amazonfbasalessnapshot.promotionOrderCount
-
 
8069
            amazon_fba_sales_snapshot.totalSale = amazonfbasalessnapshot.totalSale
-
 
8070
            amazon_fba_sales_snapshot.promotionSale = amazonfbasalessnapshot.promotionSale
-
 
8071
            #if amazonfbasalessnapshot.ourPrice is not None:
-
 
8072
            amazon_fba_sales_snapshot.ourPriceSnapshotDate = to_py_date(amazonfbasalessnapshot.ourPriceSnapshotDate)
-
 
8073
            amazon_fba_sales_snapshot.ourPrice = amazonfbasalessnapshot.ourPrice
-
 
8074
            #if amazonfbasalessnapshot.salePrice is not None:
-
 
8075
            amazon_fba_sales_snapshot.salePriceSnapshotDate = to_py_date(amazonfbasalessnapshot.salePriceSnapshotDate)
-
 
8076
            amazon_fba_sales_snapshot.salePrice = amazonfbasalessnapshot.salePrice
-
 
8077
            #if amazonfbasalessnapshot.minFbaPrice is not None:
-
 
8078
            amazon_fba_sales_snapshot.minFbaPriceSnapshotDate = to_py_date(amazonfbasalessnapshot.minFbaPriceSnapshotDate)
-
 
8079
            amazon_fba_sales_snapshot.minFbaPrice = amazonfbasalessnapshot.minFbaPrice
-
 
8080
            #if amazonfbasalessnapshot.minMfnPrice is not None:
-
 
8081
            amazon_fba_sales_snapshot.minMfnPriceSnapshotDate = to_py_date(amazonfbasalessnapshot.minMfnPriceSnapshotDate)
-
 
8082
            amazon_fba_sales_snapshot.minMfnPrice = amazonfbasalessnapshot.minMfnPrice
-
 
8083
            amazon_fba_sales_snapshot.fcLocation = amazonfbasalessnapshot.fcLocation
-
 
8084
        else:
-
 
8085
            if(amazonfbasalessnapshot.totalOrderCount > 0):
-
 
8086
                salesnapshotfordate.isOutOfStock = 0
-
 
8087
            salesnapshotfordate.promotionOrderCount = amazonfbasalessnapshot.promotionOrderCount
-
 
8088
            salesnapshotfordate.totalSale = amazonfbasalessnapshot.totalSale
-
 
8089
            salesnapshotfordate.promotionSale = amazonfbasalessnapshot.promotionSale
-
 
8090
            salesnapshotfordate.totalOrderCount = amazonfbasalessnapshot.totalOrderCount
-
 
8091
            salesnapshotfordate.fcLocation = amazonfbasalessnapshot.fcLocation
-
 
8092
    session.commit()
-
 
8093
 
-
 
8094
def get_created_orders_for_flipkart(flipkartorderids):
-
 
8095
    item_ordercount = dict()
-
 
8096
    orders = []
-
 
8097
    flipkart_orders = session.query(FlipkartOrder).filter(FlipkartOrder.flipkartOrderId.in_(tuple(flipkartorderids))).all()
-
 
8098
    print flipkart_orders 
-
 
8099
    if len(flipkart_orders)!=0:
-
 
8100
        for order in flipkart_orders:
-
 
8101
            print order.orderId 
-
 
8102
            orders.append(order.orderId)
-
 
8103
        items =session.query(LineItem.item_id,func.count(LineItem.quantity)).join((Order,LineItem.order_id==Order.id)).filter(Order.id.in_(tuple(orders))).filter(Order.status >=3).filter(Order.shipping_timestamp==None).group_by(LineItem.item_id).all()    
-
 
8104
    else:
-
 
8105
        return item_ordercount
-
 
8106
    print "items map after query"     
-
 
8107
    print items
-
 
8108
    for item in items:
-
 
8109
        print "item id"
-
 
8110
        print item[0]
-
 
8111
        print "order count"
-
 
8112
        print item[1]
-
 
8113
        item_ordercount[item[0]] = item[1]
-
 
8114
    print item_ordercount    
-
 
8115
    return item_ordercount    
-
 
8116
 
-
 
8117
def change_easyship_mfn_order_txn_status(transaction_id, new_status, description, pickUp, orderType, source, shipTimestamp, deliveryTimeStamp):
-
 
8118
    transaction = get_transaction(transaction_id)
-
 
8119
    transaction.status = new_status
-
 
8120
    transaction.status_message = description
-
 
8121
    ## Assign runner in case of delhi pincodes
-
 
8122
    if transaction.orders[0].pickupStoreId:
-
 
8123
        logistics_client = LogisticsClient().get_client() 
-
 
8124
        store = logistics_client.getPickupStore(transaction.orders[0].pickupStoreId)
-
 
8125
        if delhi_pincodes.__contains__(store.pin):
-
 
8126
            pickUp = PickUpType.RUNNER  
-
 
8127
        
-
 
8128
    if new_status == TransactionStatus.FAILED:
-
 
8129
        for order in transaction.orders:
-
 
8130
            order.status = OrderStatus.PAYMENT_FAILED
-
 
8131
            order.statusDescription = "Payment Failed"
-
 
8132
    elif new_status == TransactionStatus.AUTHORIZED or new_status == TransactionStatus.FLAGGED:
-
 
8133
        for order in transaction.orders:
-
 
8134
            if new_status == TransactionStatus.AUTHORIZED:
-
 
8135
                order.status = OrderStatus.SUBMITTED_FOR_PROCESSING
-
 
8136
                order.statusDescription = "Submitted to warehouse"
-
 
8137
            elif new_status == TransactionStatus.FLAGGED:
-
 
8138
                order.status = OrderStatus.PAYMENT_FLAGGED
-
 
8139
                order.statusDescription = "Payment flagged by gateway"
-
 
8140
            order.cod = False
-
 
8141
            order.orderType = orderType
-
 
8142
            #After we got payment success, we will set logistics info also 
-
 
8143
            logistics_client = LogisticsClient().get_client()
-
 
8144
            #FIXME line item is only one now. If multiple will come, need to fix.
-
 
8145
            item_id = order.lineitems[0].item_id
-
 
8146
            logistics_info = logistics_client.getLogisticsInfo(order.customer_pincode, item_id, DeliveryType.PREPAID, pickUp)
-
 
8147
            
-
 
8148
            #current_time = datetime.datetime.now()
-
 
8149
            
-
 
8150
            #logistics_info.deliveryTime = adjust_delivery_time(to_py_date(deliveryTimeStamp), 0)
-
 
8151
            #logistics_info.shippingTime = adjust_delivery_time(to_py_date(shipTimestamp), 0)
-
 
8152
            #logistics_info.deliveryDelay = 0
-
 
8153
            
-
 
8154
            
-
 
8155
            order.otg = logistics_info.otgAvailable
-
 
8156
            order.warehouse_id = logistics_info.warehouseId
-
 
8157
            order.fulfilmentWarehouseId = logistics_info.fulfilmentWarehouseId
-
 
8158
            order.logistics_provider_id = 45
-
 
8159
            #Start:- Added by Manish Sharma for FedEx Integration - Shipment Creation on 31-Jul-2013
-
 
8160
            #order.airwaybill_no = logistics_info.airway_billno
-
 
8161
            #order.tracking_id = order.airwaybill_no
-
 
8162
            #End:- Added by Manish Sharma for FedEx Integration- Shipment Creation on 31-Jul-2013
-
 
8163
            
-
 
8164
            order.courier_delivery_time = to_py_date(deliveryTimeStamp).replace(hour=PREPAID_SHIPPING_CUTOFF_TIME, minute=0, second=0)
-
 
8165
            order.expected_shipping_time = to_py_date(shipTimestamp).replace(hour=PREPAID_SHIPPING_CUTOFF_TIME, minute=0, second=0)
-
 
8166
            order.promised_shipping_time = order.expected_shipping_time
-
 
8167
            order.expected_delivery_time = to_py_date(deliveryTimeStamp).replace(hour=PREPAID_SHIPPING_CUTOFF_TIME, minute=0, second=0)
-
 
8168
            order.promised_delivery_time = order.expected_delivery_time 
-
 
8169
            
-
 
8170
            if order.pickupStoreId:
-
 
8171
                order.otg = False
-
 
8172
                
-
 
8173
            inventory_client = InventoryClient().get_client()
-
 
8174
            if order.productCondition != ProductCondition.BAD:
-
 
8175
                inventory_client.reserveItemInWarehouse(item_id, logistics_info.fulfilmentWarehouseId, sourceId, order.id, to_java_date(order.created_timestamp), to_java_date(order.promised_shipping_time), order.lineitems[0].quantity)
-
 
8176
 
-
 
8177
            try:
-
 
8178
                item_pricing = inventory_client.getItemPricing(item_id, -1)
-
 
8179
                order.lineitems[0].transfer_price = item_pricing.transferPrice
-
 
8180
                order.lineitems[0].nlc = item_pricing.nlc
-
 
8181
            except:
-
 
8182
                print "Not able to get transfer price. Skipping"
-
 
8183
            
-
 
8184
            catalog_client = CatalogClient().get_client() 
-
 
8185
            voucherAmount = catalog_client.getVoucherAmount(item_id, VoucherType.SPICEDECK_MOBILE)
-
 
8186
            if voucherAmount:
-
 
8187
                __create_recharge_voucher_tracker(order, voucherAmount, VoucherType.SPICEDECK_MOBILE)
-
 
8188
            #Note 2 Buy back Offer
-
 
8189
            if item_id in (7974, 7558) and transaction.coupon_code is not None and transaction.coupon_code.lower() == "note2buyback":    
-
 
8190
                order.status = OrderStatus.COD_VERIFICATION_PENDING
-
 
8191
                order.statusDescription = "Note 2 Buy Back Offer - Approval Pending from CRM Team"
-
 
8192
                order.otg = False
-
 
8193
                                
-
 
8194
    elif new_status == TransactionStatus.COD_IN_PROCESS:
-
 
8195
        for order in transaction.orders:
-
 
8196
            order.status = OrderStatus.COD_VERIFICATION_PENDING
-
 
8197
            order.statusDescription = "Verification Pending"
-
 
8198
            order.cod = True
-
 
8199
            order.orderType = orderType
-
 
8200
            #After we got payment success, we will set logistics info also 
-
 
8201
            logistics_client = LogisticsClient().get_client()
-
 
8202
            #FIXME line item is only one now. If multiple will come, need to fix.
-
 
8203
            item_id = order.lineitems[0].item_id
-
 
8204
            if order.pickupStoreId:
-
 
8205
                # Need to send prepaid awb number for store pick up orders
-
 
8206
                logistics_info = logistics_client.getLogisticsEstimation(item_id, order.customer_pincode, DeliveryType.COD)
-
 
8207
                #//Start:- Added by Manish Sharma for FedEx Integration- Shipment Creation on 31-Jul-2013
-
 
8208
                #prepaid_logistics_info = logistics_client.getLogisticsInfo(order.customer_pincode, item_id, DeliveryType.PREPAID, pickUp)
-
 
8209
                #logistics_info.airway_billno = prepaid_logistics_info.airway_billno
-
 
8210
                #logistics_info.providerId = prepaid_logistics_info.providerId
-
 
8211
                #End:- Added by Manish Sharma for FedEx Integration- Shipment Creation on 31-Jul-2013
-
 
8212
                # Will not provide OTG in pickup store
-
 
8213
                order.otg = False
-
 
8214
            else:
-
 
8215
                logistics_info = logistics_client.getLogisticsInfo(order.customer_pincode, item_id, DeliveryType.COD, pickUp)
-
 
8216
                order.otg = logistics_info.otgAvailable
-
 
8217
            
-
 
8218
               
-
 
8219
            #current_time = datetime.datetime.now()
-
 
8220
            #logistics_info.deliveryTime = adjust_delivery_time(current_time, logistics_info.deliveryTime)
-
 
8221
            #logistics_info.shippingTime = adjust_delivery_time(current_time, logistics_info.shippingTime)
-
 
8222
            #logistics_info.deliveryDelay = adjust_delivery_time(current_time, (logistics_info.shippingTime+logistics_info.deliveryDelay))
-
 
8223
            
-
 
8224
                
-
 
8225
            order.warehouse_id = logistics_info.warehouseId
-
 
8226
            order.fulfilmentWarehouseId = logistics_info.fulfilmentWarehouseId
-
 
8227
            order.logistics_provider_id = 45
-
 
8228
            #Start:- Added by Manish Sharma for FedEx Integration- Shipment Creation on 31-Jul-2013
-
 
8229
            #order.airwaybill_no = logistics_info.airway_billno
-
 
8230
            #order.tracking_id = order.airwaybill_no
-
 
8231
            #End:- Added by Manish Sharma for FedEx Integration- Shipment Creation on 31-Jul-2013
-
 
8232
            order.courier_delivery_time = to_py_date(deliveryTimeStamp).replace(hour=PREPAID_SHIPPING_CUTOFF_TIME, minute=0, second=0)
-
 
8233
            order.expected_shipping_time = to_py_date(shipTimestamp).replace(hour=PREPAID_SHIPPING_CUTOFF_TIME, minute=0, second=0)
-
 
8234
            order.promised_shipping_time = order.expected_shipping_time
-
 
8235
            order.expected_delivery_time = to_py_date(deliveryTimeStamp).replace(hour=PREPAID_SHIPPING_CUTOFF_TIME, minute=0, second=0)
-
 
8236
            order.promised_delivery_time = order.expected_delivery_time
-
 
8237
            
-
 
8238
            inventory_client = InventoryClient().get_client()
-
 
8239
            if order.productCondition != ProductCondition.BAD:
-
 
8240
                inventory_client.reserveItemInWarehouse(item_id, logistics_info.fulfilmentWarehouseId, sourceId, order.id, to_java_date(order.created_timestamp), to_java_date(order.promised_shipping_time), order.lineitems[0].quantity)
-
 
8241
 
-
 
8242
            try:
-
 
8243
                item_pricing = inventory_client.getItemPricing(item_id, -1)
-
 
8244
                order.lineitems[0].transfer_price = item_pricing.transferPrice
-
 
8245
                order.lineitems[0].nlc = item_pricing.nlc        
-
 
8246
            except:
-
 
8247
                print "Not able to get transfer price. Skipping"
-
 
8248
            
-
 
8249
            catalog_client = CatalogClient().get_client()
-
 
8250
            voucherAmount = catalog_client.getVoucherAmount(item_id, VoucherType.SPICEDECK_MOBILE)
-
 
8251
            if voucherAmount:
-
 
8252
                __create_recharge_voucher_tracker(order, voucherAmount, VoucherType.SPICEDECK_MOBILE)
-
 
8253
 
-
 
8254
                                    
-
 
8255
    session.commit()
-
 
8256
 
-
 
8257
    if new_status in (TransactionStatus.AUTHORIZED, TransactionStatus.FLAGGED, TransactionStatus.COD_IN_PROCESS):
-
 
8258
        try:
-
 
8259
            if order.source == OrderSource.WEBSITE:    
-
 
8260
                if new_status == TransactionStatus.COD_IN_PROCESS:
-
 
8261
                    transaction_requiring_extra_processing = TransactionRequiringExtraProcessing()
-
 
8262
                    transaction_requiring_extra_processing.category = 'COD_VERIFICATION'
-
 
8263
                    transaction_requiring_extra_processing.transaction_id = transaction_id
-
 
8264
                    session.commit()
-
 
8265
                elif new_status == TransactionStatus.FLAGGED:
-
 
8266
                    transaction_requiring_extra_processing = TransactionRequiringExtraProcessing()
-
 
8267
                    transaction_requiring_extra_processing.category = 'PAYMENT_FLAGGED'
-
 
8268
                    transaction_requiring_extra_processing.transaction_id = transaction_id
-
 
8269
                    session.commit()
-
 
8270
            elif order.source == OrderSource.STORE:
-
 
8271
                order.otg = False
-
 
8272
                session.commit()
-
 
8273
                catalog_client = CatalogClient().get_client() 
-
 
8274
                sourcePricing = catalog_client.getStorePricing(order.lineitems[0].item_id)
-
 
8275
                if order.total_amount >= sourcePricing.minPrice:
-
 
8276
                    order.status = OrderStatus.SUBMITTED_FOR_PROCESSING
-
 
8277
                    order.statusDescription = "Order Accepted"
-
 
8278
                    session.commit()
-
 
8279
                    sod = StoreOrderDetail.get_by(orderId = order.id)
-
 
8280
                    __push_store_collection_to_hotspot(order, "advance", sod.cashAmount, sod.cardAmount)
-
 
8281
                    
-
 
8282
                else: 
-
 
8283
                    order.status = OrderStatus.COD_VERIFICATION_PENDING
-
 
8284
                    order.statusDescription = "Approval Pending"
-
 
8285
                    content = "<html><body>"
-
 
8286
                    content += "<h4>Order Id:  " + str(order.id) + "</h4>"
-
 
8287
                    content += "<h4>Product:  " + str(order.lineitems[0]) + "</h4>"
-
 
8288
                    content += "<h4>Min Price: " +  str(sourcePricing.minPrice) + "</h4>"
-
 
8289
                    content += "<h4>Recommended Price: " +  str(sourcePricing.recommendedPrice) + "</h4>"
-
 
8290
                    content += "<h2>Approval Requested for Price: " +  str(order.total_amount) + "</h2>"
-
 
8291
                    content += "<h2>Note 1: If this discount price is approved then reply 'Approved' otherwise 'Not Approved' without changing anythig in the Mail.</h2>"  
-
 
8292
                    content += "<h2>Note 2: For Quick approval using browser <a href='http://support.shop2020.in:8080/Support/price-approval?xszbg=" + base64.b64encode(str(order.id))  + "'>Click Here</a></h2>"
-
 
8293
                    content += "<br><br></body></html>"
-
 
8294
                    store = get_hotspot_store(order.storeId, "")
-
 
8295
                    helper_client = HelperClient().get_client()
-
 
8296
                    helper_client.saveUserEmailForSending(store.approvalEmail.split(';'), SaholicHelpEmailId, "Price approval requested for " + str(order.lineitems[0]) + " order Id " + str(order.id) + " in store " + store.hotspotId , content, str(transaction_id), "PriceApproval", [], [], order.source)
-
 
8297
                    session.commit()
-
 
8298
            else:
-
 
8299
                order.otg = False
-
 
8300
                session.commit()
-
 
8301
        except Exception as e:
-
 
8302
            print "Error inserting transaction Id: " + str(transaction_id) + " due to " + str(e)
-
 
8303
            
-
 
8304
    return True
-
 
8305
 
-
 
8306
def update_amazon_fba_order_returns(fbaOrderReturns):
-
 
8307
    for order_return in fbaOrderReturns:
-
 
8308
        orderReturn = AmazonFbaOrderReturns.query.filter(AmazonFbaOrderReturns.amazonOrderId==order_return.amazonOrderId).filter(AmazonFbaOrderReturns.insertionTimestamp == to_py_date(order_return.insertionTimestamp)).filter(AmazonFbaOrderReturns.sku==order_return.sku).first()
-
 
8309
        if orderReturn:
-
 
8310
            orderReturn.sellableReturnQuantity = order_return.sellableReturnQuantity
-
 
8311
            orderReturn.nonSellableReturnQuantity = order_return.nonSellableReturnQuantity
-
 
8312
            session.commit()
-
 
8313
        else:
-
 
8314
            orderReturn = AmazonFbaOrderReturns()
-
 
8315
            orderReturn.amazonOrderId = order_return.amazonOrderId
-
 
8316
            orderReturn.insertionTimestamp = to_py_date(order_return.insertionTimestamp)
-
 
8317
            orderReturn.sku = order_return.sku
-
 
8318
            orderReturn.creationTimestamp = to_py_date(order_return.creationTimestamp)
-
 
8319
            orderReturn.shippedQuantity = order_return.shippedQuantity
-
 
8320
            orderReturn.sellableReturnQuantity = order_return.sellableReturnQuantity
-
 
8321
            orderReturn.nonSellableReturnQuantity = order_return.nonSellableReturnQuantity
-
 
8322
            session.commit()
-
 
8323
        
-
 
8324
def get_all_amazon_fba_order_returns(insertionTimestamp):
-
 
8325
    returns = AmazonFbaOrderReturns.query.filter(AmazonFbaOrderReturns.insertionTimestamp==to_py_date(insertionTimestamp)).all()
-
 
8326
    if not returns:
-
 
8327
        returns = []
-
 
8328
    return returns  
-
 
8329
 
-
 
8330
def get_total_sale_returns_fba_skus_curent_time(insertionTimestamp):  
-
 
8331
    allFbaSkuDetails = session.query(AmazonFbaOrderReturns.sku, func.sum(AmazonFbaOrderReturns.shippedQuantity), func.sum(AmazonFbaOrderReturns.sellableReturnQuantity), func.sum(AmazonFbaOrderReturns.nonSellableReturnQuantity)).group_by(AmazonFbaOrderReturns.sku).filter(AmazonFbaOrderReturns.insertionTimestamp == to_py_date(insertionTimestamp)).all()
-
 
8332
    
-
 
8333
    returnAllFbaSkuDetails = {}
-
 
8334
    
-
 
8335
    for fbaSkuDetail in allFbaSkuDetails:
-
 
8336
        saleReturnDetail = {}
-
 
8337
        saleReturnDetail['Sale'] = fbaSkuDetail[1]
-
 
8338
        saleReturnDetail['SaleableReturn'] = fbaSkuDetail[2]
-
 
8339
        saleReturnDetail['NonSaleableReturn'] = fbaSkuDetail[3]
-
 
8340
        returnAllFbaSkuDetails[fbaSkuDetail[0]]= saleReturnDetail
-
 
8341
    
-
 
8342
    return returnAllFbaSkuDetails
-
 
8343
 
-
 
8344
def get_amazon_fba_sales_latest_snapshot_for_item_location_wise(item_id,location):
-
 
8345
    return AmazonFbaSalesSnapshot.query.filter(AmazonFbaSalesSnapshot.item_id==item_id).filter(AmazonFbaSalesSnapshot.fcLocation==location).filter(AmazonFbaSalesSnapshot.dateOfSale!=datetime.datetime.now().date()).order_by(desc(AmazonFbaSalesSnapshot.dateOfSale)).first()
-
 
8346
 
-
 
8347
def get_verification_pending_orders_fk():
-
 
8348
    retOrders = Order.query.filter(Order.source==OrderSource.FLIPKART).filter(Order.status==OrderStatus.COD_VERIFICATION_PENDING).all()
-
 
8349
    retFkOrders = []
-
 
8350
    order_ids = []
-
 
8351
    if not retOrders:
-
 
8352
        return retFkOrders
-
 
8353
    else:
-
 
8354
        for order in retOrders:
-
 
8355
            order_ids.append(order.id)
-
 
8356
        retFkOrders = FlipkartOrder.query.filter(FlipkartOrder.orderId.in_(tuple(order_ids)))
-
 
8357
        if not retFkOrders:
-
 
8358
            retFkOrders = []
-
 
8359
    return retFkOrders
-
 
8360
 
7653
def add_invoice_details_to_orders(transactionId, customerId):
8361
def add_invoice_details_to_orders(transactionId, customerId):
7654
    orders = Order.query.filter_by(transaction_id=transactionId, customer_id=customerId).all()
8362
    orders = Order.query.filter_by(transaction_id=transactionId, customer_id=customerId).all()
7655
    if not orders:
8363
    if not orders:
7656
        raise TransactionServiceException(101, "No order for the transaction Unable to Print Invoice")
8364
        raise TransactionServiceException(101, "No order for the transaction Unable to Print Invoice")
7657
    else:
8365
    else:
7658
        invoiceNo = get_next_invoice_number(orders[0].orderType)
8366
        invoiceNo = get_next_invoice_number(orders[0].orderType)
7659
        for order in orders:
8367
        for order in orders:
7660
            order.invoice_number = invoiceNo
8368
            order.invoice_number = invoiceNo
7661
            session.commit()
8369
            session.commit()
7662
               
8370
               
-
 
8371
def get_fa_order_by_fk_order_id(fk_OrderId,fk_OrderItemId):
-
 
8372
    faOrder = FlipkartAdvantageOrder.query.filter_by(fkOrderId=fk_OrderId,fkOrderItemId=fk_OrderItemId).first()
-
 
8373
    if not faOrder:
-
 
8374
        print "Not found order for orderId " + str(fk_OrderId)
-
 
8375
        raise TransactionServiceException(108, "no such order")
-
 
8376
    
-
 
8377
    return faOrder
-
 
8378
 
-
 
8379
def flipkart_fa_order_exists(fk_OrderId,fk_OrderItemId):
-
 
8380
    faOrder = FlipkartAdvantageOrder.query.filter_by(fkOrderId=fk_OrderId,fkOrderItemId=fk_OrderItemId).first()
-
 
8381
    if not faOrder:
-
 
8382
        return False
-
 
8383
    else:
-
 
8384
        return True
-
 
8385
 
-
 
8386
def get_all_fa_orders_list(status):
-
 
8387
    faOrders = None
-
 
8388
    if status == 'all':
-
 
8389
        faOrders = FlipkartAdvantageOrder.query.all()
-
 
8390
    else:
-
 
8391
        faOrders = FlipkartAdvantageOrder.query.filter(FlipkartAdvantageOrder.status==status).all()
-
 
8392
    if not faOrders:
-
 
8393
        faOrders = []   
-
 
8394
    return faOrders
-
 
8395
 
-
 
8396
def add_update_fa_orders_bulk(faOrdersList):
-
 
8397
    for faOrder in faOrdersList:
-
 
8398
        if faOrder.status == 'approved':
-
 
8399
            fa_Order = FlipkartAdvantageOrder()
-
 
8400
            fa_Order.fkOrderId = faOrder.fkOrderId
-
 
8401
            fa_Order.fkOrderItemId = faOrder.fkOrderItemId
-
 
8402
            fa_Order.sku = faOrder.sku
-
 
8403
            fa_Order.creationTimestamp = to_py_date(faOrder.creationTimestamp)
-
 
8404
            fa_Order.customerName = faOrder.customerName
-
 
8405
            fa_Order.customerAddress = faOrder.customerAddress
-
 
8406
            fa_Order.pincode = faOrder.pincode
-
 
8407
            fa_Order.customerCity = faOrder.customerCity
-
 
8408
            fa_Order.customerState = faOrder.customerState
-
 
8409
            fa_Order.customerPhone = faOrder.customerPhone
-
 
8410
            fa_Order.status = faOrder.status
-
 
8411
            fa_Order.quantity = faOrder.quantity
-
 
8412
            fa_Order.totalPrice = faOrder.totalPrice
-
 
8413
            fa_Order.listPrice = faOrder.listPrice
-
 
8414
            fa_Order.modifiedDate = to_py_date(faOrder.modifiedDate)
-
 
8415
            fa_Order.listingId = faOrder.listingId
-
 
8416
            fa_Order.cancelReason = faOrder.cancelReason
-
 
8417
            fa_Order.returnReason = faOrder.returnReason
-
 
8418
            fa_Order.freebieItemId = faOrder.freebieItemId
-
 
8419
            fa_Order.productTitle = faOrder.productTitle
-
 
8420
        else:
-
 
8421
            fa_Order = FlipkartAdvantageOrder.query.filter_by(fkOrderId=faOrder.fkOrderId,fkOrderItemId=faOrder.fkOrderItemId).first()
-
 
8422
            if fa_Order:
-
 
8423
                if fa_Order.status !=faOrder.status:
-
 
8424
                    fa_Order.status = faOrder.status
-
 
8425
                    fa_Order.cancelReason = faOrder.cancelReason
-
 
8426
                    fa_Order.returnReason = faOrder.returnReason
-
 
8427
                    fa_Order.modifiedDate = to_py_date(faOrder.modifiedDate)
-
 
8428
            else:
-
 
8429
                fa_Order = FlipkartAdvantageOrder()
-
 
8430
                fa_Order.fkOrderId = faOrder.fkOrderId
-
 
8431
                fa_Order.fkOrderItemId = faOrder.fkOrderItemId
-
 
8432
                fa_Order.sku = faOrder.sku
-
 
8433
                fa_Order.creationTimestamp = to_py_date(faOrder.creationTimestamp)
-
 
8434
                fa_Order.customerName = faOrder.customerName
-
 
8435
                fa_Order.customerAddress = faOrder.customerAddress
-
 
8436
                fa_Order.pincode = faOrder.pincode
-
 
8437
                fa_Order.customerCity = faOrder.customerCity
-
 
8438
                fa_Order.customerState = faOrder.customerState
-
 
8439
                fa_Order.customerPhone = faOrder.customerPhone
-
 
8440
                fa_Order.status = faOrder.status
-
 
8441
                fa_Order.quantity = faOrder.quantity
-
 
8442
                fa_Order.totalPrice = faOrder.totalPrice
-
 
8443
                fa_Order.listPrice = faOrder.listPrice
-
 
8444
                fa_Order.modifiedDate = to_py_date(faOrder.modifiedDate)
-
 
8445
                fa_Order.listingId = faOrder.listingId
-
 
8446
                fa_Order.cancelReason = faOrder.cancelReason
-
 
8447
                fa_Order.returnReason = faOrder.returnReason
-
 
8448
                fa_Order.freebieItemId = faOrder.freebieItemId
-
 
8449
                fa_Order.productTitle = faOrder.productTitle
-
 
8450
    session.commit()
7663
 
8451
 
7664
def get_recharge_order_status(rechargeOrderId, final):
8452
def get_recharge_order_status(rechargeOrderId, final):
7665
    d_rechargeOrder = get_recharge_order(rechargeOrderId)
8453
    d_rechargeOrder = get_recharge_order(rechargeOrderId)
7666
    if d_rechargeOrder.status == RechargeOrderStatus.RECHARGE_UNKNOWN:
8454
    if d_rechargeOrder.status == RechargeOrderStatus.RECHARGE_UNKNOWN:
7667
        try:
8455
        try:
Line 8555... Line 9343...
8555
    if txnShipSeq.invoiceFormat == 2:
9343
    if txnShipSeq.invoiceFormat == 2:
8556
        return 'Bulk'
9344
        return 'Bulk'
8557
    else:
9345
    else:
8558
        return 'Individual'
9346
        return 'Individual'
8559
    
9347
    
-
 
9348
def create_homeshop_order(hsOrder):
-
 
9349
    hs_Order = HsOrder()
-
 
9350
    hs_Order.orderId = hsOrder.orderId
-
 
9351
    hs_Order.catalogueName = hsOrder.catalogueName
-
 
9352
    hs_Order.courierName = hsOrder.courierName
-
 
9353
    hs_Order.hsItemId = hsOrder.hsItemId
-
 
9354
    hs_Order.hsOrderDate = to_py_date(hsOrder.hsOrderDate)
-
 
9355
    hs_Order.hsOrderNo = hsOrder.hsOrderNo
-
 
9356
    hs_Order.hsProductId = hsOrder.hsProductId
-
 
9357
    hs_Order.hsSubOrderNo = hsOrder.hsSubOrderNo
-
 
9358
    hs_Order.paymentMode = hsOrder.paymentMode
-
 
9359
    hs_Order.sellerSku = hsOrder.sellerSku
-
 
9360
    hs_Order.slaDays = hsOrder.slaDays
-
 
9361
    hs_Order.shippingName = hsOrder.shippingName
-
 
9362
    order = Order.get_by(id=hsOrder.orderId)
-
 
9363
    order.status = OrderStatus.ACCEPTED
-
 
9364
    order.accepted_timestamp = datetime.datetime.now()
-
 
9365
    user = None
-
 
9366
    try:
-
 
9367
        user_client = UserClient().get_client()
-
 
9368
        user_to_add = User()
-
 
9369
        user_to_add.email = 'HS.'+ str(hsOrder.orderId) + '@mailinator.com'
-
 
9370
        user_to_add.password = 'ouBPONyDYWfeAFtXeaYRkQ'
-
 
9371
        user_to_add.communicationEmail = user_to_add.email
-
 
9372
        user_to_add.sourceStartTime = int(round(time.time() * 1000))
-
 
9373
        user_to_add.sourceId = OrderSource.HOMESHOP18
-
 
9374
        user_to_add.sex = Sex.WONT_SAY
-
 
9375
        user_to_add = user_client.createUser(user_to_add)
-
 
9376
        user = user_to_add
-
 
9377
    except:
-
 
9378
        pass
-
 
9379
    
-
 
9380
    if user:
-
 
9381
        order.customer_id = user.userId
-
 
9382
        order.customer_email = user.email
-
 
9383
    session.commit()
-
 
9384
    
-
 
9385
def get_homeshop_order(order_id, hsOrderNo, hsSubOrderNo):
-
 
9386
    query = HsOrder.query
-
 
9387
    if order_id:
-
 
9388
        query = query.filter(HsOrder.orderId == order_id)
-
 
9389
    if hsOrderNo:
-
 
9390
        query = query.filter(HsOrder.hsOrderNo == hsOrderNo)
-
 
9391
    if hsSubOrderNo:
-
 
9392
        query = query.filter(HsOrder.hsSubOrderNo == hsSubOrderNo)
-
 
9393
    return query.all()
-
 
9394
 
-
 
9395
def homeshop_order_exists(hs_OrderNo, hs_SubOrderNo):
-
 
9396
    exists = HsOrder.query.filter_by(hsOrderNo=hs_OrderNo,hsSubOrderNo=hs_SubOrderNo).first()
-
 
9397
    if exists is not None:
-
 
9398
        return True
-
 
9399
    else:
-
 
9400
        return False
-
 
9401
    
8560
def split_bulk_order(order_id, split_order_quantity):
9402
def split_bulk_order(order_id, split_order_quantity):
8561
    order = get_order(order_id)
9403
    order = get_order(order_id)
8562
    if split_order_quantity >=order.lineitems[0].quantity:
9404
    if split_order_quantity >=order.lineitems[0].quantity:
8563
        raise TransactionServiceException(115, "Split Quantity is greater than or equal to order quantity")
9405
        raise TransactionServiceException(115, "Split Quantity is greater than or equal to order quantity")
8564
    if order.status not in [OrderStatus.SUBMITTED_FOR_PROCESSING, 
9406
    if order.status not in [OrderStatus.SUBMITTED_FOR_PROCESSING, 
Line 9353... Line 10195...
9353
    returnOrder = ReturnOrderInfo.get_by(id=returnOrderId)
10195
    returnOrder = ReturnOrderInfo.get_by(id=returnOrderId)
9354
    if not returnOrder:
10196
    if not returnOrder:
9355
        return None
10197
        return None
9356
    return returnOrder
10198
    return returnOrder
9357
 
10199
 
-
 
10200
def refund_return_order(returnOrderInfo, attrList):
-
 
10201
    returnOrder = ReturnOrderInfo.get_by(id=returnOrderInfo.id)
-
 
10202
    if returnOrder.returnStatus not in (OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_CERT_VALID], OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_CERT_INVALID], OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_LOST_IN_TRANSIT],OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_RECEIVED_DAMAGED] ,OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_LOST_IN_TRANSIT], OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_PRODUCT_UNUSABLE], OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_PRODUCT_USABLE],OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_RECEIVED_DAMAGED]):
-
 
10203
        print "************returnig false staus check"
-
 
10204
        return False
-
 
10205
    if returnOrder.returnAction == ReturnAction.REFUND:
-
 
10206
        returnOrder.returnTxnResolutionStatus = ReturnTxnResolutionStatus._VALUES_TO_NAMES[ReturnTxnResolutionStatus.REFUND_IN_PROCESS]
-
 
10207
    else:
-
 
10208
        returnOrder.returnTxnResolutionStatus = ReturnTxnResolutionStatus._VALUES_TO_NAMES[ReturnTxnResolutionStatus.REPLACEMENT_ORDER_CREATED]
-
 
10209
    detailsMap = {}
-
 
10210
    if returnOrder.refundedAt or returnOrder.replacementOrderId:
-
 
10211
        raise TransactionServiceException(145, "Refund/Replacemet already in Process for this return order")
-
 
10212
    if returnOrder.receivedQuantity != returnOrder.returnQuantity:
-
 
10213
        raise TransactionServiceException(145, "Quantity mismatch Return vs Received")
-
 
10214
    detailsMap['RefundReason'] = returnOrderInfo.refundReason
-
 
10215
    detailsMap['RefundType'] = returnOrderInfo.refundType
-
 
10216
    detailsMap['RefundedBy'] = returnOrderInfo.refundedBy
-
 
10217
    detailsMap['RefundAmount'] = returnOrderInfo.refundAmount
-
 
10218
    detailsMap['RefundDescription'] = returnOrderInfo.refundDescription
-
 
10219
    print detailsMap
-
 
10220
    print "*************************8"
-
 
10221
    if(not __process_return_order(returnOrder, detailsMap)):
-
 
10222
        raise TransactionServiceException(145, "Issue in __process_return_order")
-
 
10223
    returnOrder.processedAt = datetime.datetime.now()
-
 
10224
    __markReturnTransactionAsProcessed(returnOrder.returnTransaction_id)
-
 
10225
    set_order_attributes(returnOrder.orderId, attrList)
-
 
10226
    return True
-
 
10227
 
-
 
10228
def __markReturnTransactionAsProcessed(returnTransactionId):
-
 
10229
    returnTransaction = ReturnTransaction.get_by(id=returnTransactionId)
-
 
10230
    if returnTransaction is None:
-
 
10231
        raise TransactionServiceException(101, "No Return Transaction Found")
-
 
10232
    unprocessedOrders = []
-
 
10233
    for retOrder in returnTransaction.returnOrders:
-
 
10234
        if retOrder.reshippedAt is None and retOrder.refundedAt is None:
-
 
10235
            unprocessedOrders.append(retOrder)
-
 
10236
    if len(unprocessedOrders) == 0:
-
 
10237
        returnTransaction.processedAt = datetime.datetime.now()
-
 
10238
        returnTransaction.status = ReturnTransactionStatus._VALUES_TO_NAMES[ReturnTransactionStatus.PROCESSED]
-
 
10239
        session.commit()
-
 
10240
 
-
 
10241
 
9358
def get_return_orders_info_map(order_ids=None, statuses=None):
10242
def get_return_orders_info_map(order_ids=None, statuses=None):
9359
    returnOrdersInfoQuery = ReturnOrderInfo.query
10243
    returnOrdersInfoQuery = ReturnOrderInfo.query
9360
    if order_ids is not None and len(order_ids)>0:
10244
    if order_ids is not None and len(order_ids)>0:
9361
        returnOrdersInfoQuery = returnOrdersInfoQuery.filter(ReturnOrderInfo.orderId.in_(tuple(order_ids)))
10245
        returnOrdersInfoQuery = returnOrdersInfoQuery.filter(ReturnOrderInfo.orderId.in_(tuple(order_ids)))
9362
    if statuses is not None:
10246
    if statuses is not None:
Line 9527... Line 10411...
9527
 
10411
 
9528
def get_return_transaction(transaction_id):
10412
def get_return_transaction(transaction_id):
9529
    transaction = ReturnTransaction.get_by(id=transaction_id)
10413
    transaction = ReturnTransaction.get_by(id=transaction_id)
9530
    if not transaction:
10414
    if not transaction:
9531
        raise TransactionServiceException(108, "no such transaction")
10415
        raise TransactionServiceException(108, "no such transaction")
9532
    
-
 
9533
    return transaction
10416
    return transaction
9534
 
10417
 
9535
def get_return_orders_for_return_transaction(returnTransactionId):
10418
def get_return_orders_for_return_transaction(returnTransactionId):
9536
    returnOrders = ReturnOrderInfo.query.filter_by(returnTransactionId=returnTransactionId).all()
10419
    returnOrders = ReturnOrderInfo.query.filter_by(returnTransactionId=returnTransactionId).all()
9537
    
10420
    
Line 9573... Line 10456...
9573
            else:
10456
            else:
9574
                returnOrder.refundDescription = "No Pickup Required for this item. Refund in Process. It takes 7-10 working days to be in actual credit."
10457
                returnOrder.refundDescription = "No Pickup Required for this item. Refund in Process. It takes 7-10 working days to be in actual credit."
9575
        else:
10458
        else:
9576
            raise TransactionServiceException(114, "This order can't be refunded")
10459
            raise TransactionServiceException(114, "This order can't be refunded")
9577
        
10460
        
9578
        __create_refund(order, returnOrder)
10461
        __create_refund(order)
9579
                
10462
                
9580
        returnOrder.refundedAt = datetime.datetime.now()
10463
        returnOrder.refundedAt = datetime.datetime.now()
9581
        returnOrder.refundedBy = refundedBy
10464
        returnOrder.refundedBy = refundedBy
9582
        returnOrder.refundReason = refundReason
10465
        returnOrder.refundReason = refundReason
9583
        returnOrder.refundAmount = refundAmount
10466
        returnOrder.refundAmount = refundAmount
Line 9762... Line 10645...
9762
        returnTransaction.status = ReturnTransactionStatus._VALUES_TO_NAMES[new_status] 
10645
        returnTransaction.status = ReturnTransactionStatus._VALUES_TO_NAMES[new_status] 
9763
    elif new_status == ReturnTransactionStatus.PROCESSED:
10646
    elif new_status == ReturnTransactionStatus.PROCESSED:
9764
        if returnOrdersIds and len(returnOrdersIds)>0:
10647
        if returnOrdersIds and len(returnOrdersIds)>0:
9765
            unprocessedOrders = []   
10648
            unprocessedOrders = []   
9766
            for retOrder in returnTransaction.returnOrders:
10649
            for retOrder in returnTransaction.returnOrders:
9767
                if retOrder.reshippedAt is None and retOrder.refundedAt is None:
10650
                if retOrder.reshippedAt is None or retOrder.refundedAt is None:
9768
                    unprocessedOrders.append(retOrder)
10651
                    unprocessedOrders.append(retOrder)
9769
            if len(returnOrdersIds) < len(returnTransaction.returnOrders):
10652
            if len(returnOrdersIds) < len(returnTransaction.returnOrders):
9770
                if len(returnOrdersIds) == len(unprocessedOrders):
10653
                if len(returnOrdersIds) == len(unprocessedOrders):
9771
                    for ret_Order in unprocessedOrders:
10654
                    for ret_Order in unprocessedOrders:
9772
                        if ret_Order.returnAction == ReturnAction.REFUND:
10655
                        if ret_Order.returnAction == ReturnAction.REFUND:
Line 9782... Line 10665...
9782
                    else:
10665
                    else:
9783
                        ret_Order.returnTxnResolutionStatus = ReturnTxnResolutionStatus._VALUES_TO_NAMES[ReturnTxnResolutionStatus.REPLACEMENT_ORDER_CREATED]
10666
                        ret_Order.returnTxnResolutionStatus = ReturnTxnResolutionStatus._VALUES_TO_NAMES[ReturnTxnResolutionStatus.REPLACEMENT_ORDER_CREATED]
9784
                returnTransaction.processedAt = datetime.datetime.now()
10667
                returnTransaction.processedAt = datetime.datetime.now()
9785
                returnTransaction.status = ReturnTransactionStatus._VALUES_TO_NAMES[new_status]
10668
                returnTransaction.status = ReturnTransactionStatus._VALUES_TO_NAMES[new_status]
9786
            for returnOrderId in returnOrdersIds:
10669
            for returnOrderId in returnOrdersIds:
9787
                __process_return_order(get_return_order_info(returnOrderId), returnOrdersAttrMap.get(returnOrderId)) 
10670
                __process_return_order(get_return_order_info(returnOrderId), returnOrdersAttrMap.get(returnOrderId))
-
 
10671
                
-
 
10672
    elif new_status == ReturnTransactionStatus.COMPLETED:
-
 
10673
        mark_return_transaction_complete(returnTransaction.id)            
-
 
10674
     
-
 
10675
    elif new_status == ReturnTransactionStatus.CLOSED:
9788
    elif new_status == ReturnTransactionStatus.CLOSED and mark_return_transaction_complete(returnTransaction.id):
10676
        if not returnTransaction.status == ReturnTransactionStatus._VALUES_TO_NAMES[ReturnTransactionStatus.COMPLETED]:
-
 
10677
            raise
9789
        returnTransaction.closedAt = datetime.datetime.now()
10678
        returnTransaction.closedAt = datetime.datetime.now()
9790
        for ret_Order in returnTransaction.returnOrders:
10679
        for ret_Order in returnTransaction.returnOrders:
9791
            ret_Order.returnTxnResolutionStatus = ReturnTxnResolutionStatus._VALUES_TO_NAMES[ReturnTxnResolutionStatus.CLOSED]
10680
            ret_Order.returnTxnResolutionStatus = ReturnTxnResolutionStatus._VALUES_TO_NAMES[ReturnTxnResolutionStatus.CLOSED]
9792
        __communicate_customer_for_closed_transaction(returnTransaction)
10681
        __communicate_customer_for_closed_transaction(returnTransaction)
9793
        returnTransaction.status = ReturnTransactionStatus._VALUES_TO_NAMES[new_status] 
10682
        returnTransaction.status = ReturnTransactionStatus._VALUES_TO_NAMES[new_status] 
9794
     
10683
     
9795
    session.commit()
10684
    session.commit()
9796
    return True
10685
    return True
-
 
10686
 
9797
    
10687
    
9798
def create_return_pickup_request(returnOrderIds, providerId):
10688
def create_return_pickup_request(returnOrderIds):
9799
    returnPickupRequest = ReturnPickupRequest()
10689
    returnPickupRequest = ReturnPickupRequest()
9800
    returnPickupRequest.logisticsProviderId = providerId
-
 
9801
    returnPickupRequest.pickupStatus = ReturnTxnPickupStatus._VALUES_TO_NAMES[ReturnTxnPickupStatus.PICKUP_REQUESTED]
10690
    returnPickupRequest.pickupStatus = ReturnTxnPickupStatus._VALUES_TO_NAMES[ReturnTxnPickupStatus.PENDING]
9802
    
10691
 
9803
    if len(returnOrderIds) > 0:
10692
    if len(returnOrderIds) > 0:
9804
        for returnOrderId in returnOrderIds:
10693
        for returnOrderId in returnOrderIds:
9805
            returnOrder = get_return_order_info(returnOrderId)
10694
            returnOrder = get_return_order_info(returnOrderId)
9806
            returnOrder.logisticsRequestId = returnPickupRequest.id
10695
            returnOrder.logisticsRequestId = returnPickupRequest.id
9807
        session.commit()
10696
        session.commit()
9808
        return True
10697
        return returnPickupRequest.id
9809
    
10698
 
9810
    return False
10699
    return 0
9811
 
10700
 
9812
def update_return_pickup_request(returnPickupRequest):
10701
def update_return_pickup_request(returnPickupRequest):
-
 
10702
    print returnPickupRequest
9813
    try:
10703
    try:
9814
        returnPickupReq = ReturnPickupRequest.get_by(id=returnPickupRequest.id)
10704
        returnPickupReq = ReturnPickupRequest.get_by(id=returnPickupRequest.id)
-
 
10705
        if returnPickupRequest.pickupStatus == ReturnTxnPickupStatus.PICKUP_REQUESTED:
-
 
10706
            returnPickupReq.pickupStatus = ReturnTxnPickupStatus._VALUES_TO_NAMES[returnPickupRequest.pickupStatus]
-
 
10707
        
9815
        if returnPickupRequest.pickupRequestNo:
10708
        if returnPickupRequest.pickupStatus == ReturnTxnPickupStatus.PICKUP_CONFIRMED:
-
 
10709
            returnPickupReq.logisticsProviderId = returnPickupRequest.logisticsProviderId
9816
            returnPickupReq.pickupRequestNo = returnPickupRequest.pickupRequestNo
10710
            returnPickupReq.pickupRequestNo = returnPickupRequest.pickupRequestNo
9817
            returnPickupReq.confirmedAt = datetime.datetime.now()
10711
            returnPickupReq.confirmedAt = datetime.datetime.now()
9818
            returnPickupReq.pickupStatus = ReturnTxnPickupStatus._VALUES_TO_NAMES[ReturnTxnPickupStatus.PICKUP_CONFIRMED]
10712
            returnPickupReq.pickupStatus = ReturnTxnPickupStatus._VALUES_TO_NAMES[returnPickupRequest.pickupStatus]
9819
            for returnOrder in ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==returnPickupRequest.id).all():
10713
            for returnOrder in ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==returnPickupRequest.id).all():
9820
                if returnOrder.returnStatus == OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_PICKUP_REQUEST_RAISED]:
10714
                if returnOrder.returnStatus == OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_PICKUP_REQUEST_RAISED]:
9821
                    returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_PICKUP_CONFIRMED]
10715
                    returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_PICKUP_CONFIRMED]
9822
                else:
10716
                else:
9823
                    returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_PICKUP_CONFIRMED]
10717
                    returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_PICKUP_CONFIRMED]
9824
        if returnPickupRequest.pickupStatus == ReturnTxnPickupStatus.PICKUP_SCHEDULED:
10718
        if returnPickupRequest.pickupStatus == ReturnTxnPickupStatus.PICKUP_SCHEDULED:
9825
            returnPickupReq.pickupStatus = ReturnTxnPickupStatus._VALUES_TO_NAMES[returnPickupRequest.pickupStatus]
10719
            returnPickupReq.pickupStatus = ReturnTxnPickupStatus._VALUES_TO_NAMES[returnPickupRequest.pickupStatus]
9826
            returnPickupReq.promised_pickup_timestamp = datetime.datetime.now()+timedelta(days=2)
10720
            returnPickupReq.promised_pickup_timestamp = to_py_date(returnPickupRequest.promised_pickup_timestamp)
9827
            returnOrdersMap = {}
10721
            returnOrdersMap = {}
9828
            returnOrders = ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==returnPickupRequest.id).all()
10722
            returnOrders = ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==returnPickupRequest.id).all()
9829
            for returnOrder in returnOrders:
10723
            for returnOrder in returnOrders:
9830
                returnTxn = returnOrders[0].returnTransaction
10724
                returnTxn = returnOrders[0].returnTransaction
9831
                if returnOrdersMap.has_key(returnTxn.address_id):
10725
                if returnOrdersMap.has_key(returnTxn.address_id):
Line 9839... Line 10733...
9839
            for returnOrdersList in returnOrdersMap.values():
10733
            for returnOrdersList in returnOrdersMap.values():
9840
                try:
10734
                try:
9841
                    communicate_pickup_details_to_customer(returnPickupReq, returnOrdersList)
10735
                    communicate_pickup_details_to_customer(returnPickupReq, returnOrdersList)
9842
                except:
10736
                except:
9843
                    print "Customer Communication Failed for the pickup Information"
10737
                    print "Customer Communication Failed for the pickup Information"
9844
        if returnPickupRequest.pickedUpAt:
10738
        if returnPickupRequest.pickupStatus == ReturnTxnPickupStatus.PICKUP_IN_TRANSIT:
9845
            returnPickupReq.pickedUpAt = to_py_date(returnPickupRequest.pickedUpAt)
10739
            returnPickupReq.pickedUpAt = to_py_date(returnPickupRequest.pickedUpAt)
9846
            returnPickupReq.pickupStatus = ReturnTxnPickupStatus._VALUES_TO_NAMES[ReturnTxnPickupStatus.PICKUP_IN_TRANSIT]
10740
            returnPickupReq.pickupStatus = ReturnTxnPickupStatus._VALUES_TO_NAMES[ReturnTxnPickupStatus.PICKUP_IN_TRANSIT]
9847
            for returnOrder in ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==returnPickupRequest.id).all():
10741
            for returnOrder in ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==returnPickupRequest.id).all():
9848
                if returnOrder.returnStatus == OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_PICKUP_CONFIRMED]:
10742
                if returnOrder.returnStatus == OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_PICKUP_CONFIRMED]:
9849
                    returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_RETURN_IN_TRANSIT]
10743
                    returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_RETURN_IN_TRANSIT]
9850
                else:
10744
                else:
-
 
10745
                    returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_RETURN_IN_TRANSIT]
-
 
10746
        if returnPickupRequest.pickupStatus == ReturnTxnPickupStatus.PICKUP_RECEIVED:
-
 
10747
            returnPickupReq.pickupStatus = ReturnTxnPickupStatus._VALUES_TO_NAMES[ReturnTxnPickupStatus.PICKUP_RECEIVED]
-
 
10748
            for returnOrder in ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==returnPickupRequest.id).all():
9851
                    returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_RETURN_IN_TRANSIT]            
10749
                if returnOrder.returnStatus not in (OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_CERT_VALID], OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_CERT_INVALID], OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_LOST_IN_TRANSIT], OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_RECEIVED_DAMAGED],OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_CERT_VALID],OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_LOST_IN_TRANSIT], OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_PRODUCT_UNUSABLE], OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_PRODUCT_USABLE], OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_RECEIVED_DAMAGED]):
-
 
10750
                    return False
-
 
10751
                returnOrder.returnTxnResolutionStatus = ReturnTxnResolutionStatus._VALUES_TO_NAMES[ReturnTxnResolutionStatus.QUALITY_CHECK]
9852
        session.commit()
10752
        session.commit()
9853
        return True
10753
        return True
9854
    except:
10754
    except:
-
 
10755
        traceback.print_exc()
9855
        return False 
10756
        return False 
9856
    
10757
 
9857
def receive_return_pickup(returnOrdersMap, req_id):
10758
def receive_return_pickup(returnOrdersMap, req_id):
9858
    returnPickupReq = ReturnPickupRequest.get_by(id=req_id)
10759
    #returnPickupReq = ReturnPickupRequest.get_by(id=req_id)
9859
    returnOrders = ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==req_id).all()
10760
    #returnOrders = ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==req_id).all()
9860
    if len(returnOrders)!=len(returnOrdersMap.keys()):
10761
    #if len(returnOrders)!=len(returnOrdersMap.keys()):
9861
        raise TransactionServiceException(101, "All Returns Orders  Information Missing. Please Fill All Orders Info")
10762
    #    raise TransactionServiceException(101, "All Returns Orders  Information Missing. Please Fill All Orders Info")
-
 
10763
    
9862
    for returnOrder in returnOrders:
10764
    for returnOrderId in returnOrdersMap.iterkeys():
-
 
10765
        returnOrder = ReturnOrderInfo.get_by(id=returnOrderId)
-
 
10766
        if returnOrder is None:
-
 
10767
            raise TransactionServiceException(101, "Return order missing")
9863
        returnOrderDetails = returnOrdersMap.get(returnOrder.id)
10768
        returnOrderDetails = returnOrdersMap.get(returnOrder.id)
9864
        receiveCondition = ReceivedReturnType._NAMES_TO_VALUES[returnOrderDetails.get('ReceiveCondition')]
10769
        receiveCondition = ReceivedReturnType._NAMES_TO_VALUES[returnOrderDetails.get('ReceiveCondition')]
9865
        quantity = int(returnOrderDetails.get('Quantity'))
10770
        quantity = int(returnOrderDetails.get('Quantity'))
-
 
10771
        returnOrder.receivedReturnType = receiveCondition 
9866
        
10772
        returnOrder.receivedReturnType = receiveCondition 
9867
        if returnOrder.returnStatus in [OrderStatus._NAMES_TO_VALUES[OrderStatus.DOA_PICKUP_CONFIRMED], OrderStatus._NAMES_TO_VALUES[OrderStatus.DOA_RETURN_IN_TRANSIT]]:
10773
        if returnOrder.returnStatus in [OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_PICKUP_CONFIRMED], OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_RETURN_IN_TRANSIT]]:
9868
            if receiveCondition == ReceivedReturnType.PRESTINE:
10774
            if receiveCondition == ReceivedReturnType.PRESTINE:
9869
                returnOrder.returnStatus = OrderStatus._NAMES_TO_VALUES[OrderStatus.DOA_RECEIVED_PRESTINE]
10775
                returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_RECEIVED_PRESTINE]
9870
            elif receiveCondition == ReceivedReturnType.DAMAGED:
10776
            elif receiveCondition == ReceivedReturnType.DAMAGED:
9871
                returnOrder.returnStatus = OrderStatus._NAMES_TO_VALUES[OrderStatus.DOA_RECEIVED_DAMAGED]
10777
                returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_RECEIVED_DAMAGED]
9872
            elif receiveCondition == ReceivedReturnType.LOST_IN_TRANSIT:
10778
            elif receiveCondition == ReceivedReturnType.LOST_IN_TRANSIT:
9873
                returnOrder.returnStatus = OrderStatus._NAMES_TO_VALUES[OrderStatus.DOA_LOST_IN_TRANSIT]
10779
                returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_LOST_IN_TRANSIT]
9874
            returnOrder.receivedAt = datetime.datetime.now()
10780
            returnOrder.receivedAt = datetime.datetime.now()
9875
            returnOrder.receivedQuantity = quantity
10781
            returnOrder.receivedQuantity = quantity
9876
        elif returnOrder.returnStatus in [OrderStatus._NAMES_TO_VALUES[OrderStatus.RET_PICKUP_CONFIRMED], OrderStatus._NAMES_TO_VALUES[OrderStatus.RET_RETURN_IN_TRANSIT]]:
10782
        elif returnOrder.returnStatus in [OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_PICKUP_CONFIRMED], OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_RETURN_IN_TRANSIT]]:
9877
            if receiveCondition == ReceivedReturnType.PRESTINE:
10783
            if receiveCondition == ReceivedReturnType.PRESTINE:
9878
                returnOrder.returnStatus = OrderStatus._NAMES_TO_VALUES[OrderStatus.RET_RECEIVED_PRESTINE]
10784
                returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_RECEIVED_PRESTINE]
9879
            elif receiveCondition == ReceivedReturnType.DAMAGED:
10785
            elif receiveCondition == ReceivedReturnType.DAMAGED:
9880
                returnOrder.returnStatus = OrderStatus._NAMES_TO_VALUES[OrderStatus.RET_RECEIVED_DAMAGED]
10786
                returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_RECEIVED_DAMAGED]
9881
            elif receiveCondition == ReceivedReturnType.LOST_IN_TRANSIT:
10787
            elif receiveCondition == ReceivedReturnType.LOST_IN_TRANSIT:
9882
                returnOrder.returnStatus = OrderStatus._NAMES_TO_VALUES[OrderStatus.RET_LOST_IN_TRANSIT]
10788
                returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_LOST_IN_TRANSIT]
9883
            returnOrder.receivedAt = datetime.datetime.now()
10789
            returnOrder.receivedAt = datetime.datetime.now()
9884
            returnOrder.receivedQuantity = quantity
10790
            returnOrder.receivedQuantity = quantity
9885
        else:
10791
        else:
9886
            return False
10792
            return False
9887
    
10793
    
Line 9889... Line 10795...
9889
            "RET_RECEIVED_PRESTINE" : ScanType.SALE_RET,
10795
            "RET_RECEIVED_PRESTINE" : ScanType.SALE_RET,
9890
            "RET_RECEIVED_DAMAGED"  : ScanType.SALE_RET_UNUSABLE,
10796
            "RET_RECEIVED_DAMAGED"  : ScanType.SALE_RET_UNUSABLE,
9891
            "RET_LOST_IN_TRANSIT"   : ScanType.LOST_IN_TRANSIT,
10797
            "RET_LOST_IN_TRANSIT"   : ScanType.LOST_IN_TRANSIT,
9892
            "DOA_RECEIVED_PRESTINE" : ScanType.DOA_IN,
10798
            "DOA_RECEIVED_PRESTINE" : ScanType.DOA_IN,
9893
            "DOA_RECEIVED_DAMAGED"  : ScanType.DOA_IN,
10799
            "DOA_RECEIVED_DAMAGED"  : ScanType.DOA_IN,
9894
            "DOA_LOST_IN_TRANSI"   : ScanType.LOST_IN_TRANSIT
10800
            "DOA_LOST_IN_TRANSIT"   : ScanType.LOST_IN_TRANSIT
9895
        }
10801
        }
9896
    inventoryClient = InventoryClient().get_client()
10802
    inventoryClient = InventoryClient().get_client()
9897
    warehouse = inventoryClient.getWarehouse(returnOrders[0].warehouse_id)
10803
    warehouse = inventoryClient.getWarehouse(returnOrder.warehouse_id)
9898
    warehouseClient = WarehouseClient().get_client()
10804
    warehouseClient = WarehouseClient().get_client()
9899
    
10805
 
9900
    for returnOrder in returnOrders:
10806
    for returnOrderId in returnOrdersMap.iterkeys():
-
 
10807
        returnOrder = ReturnOrderInfo.get_by(id=returnOrderId)    
9901
        returnOrderDetails = returnOrdersMap.get(returnOrder.id)
10808
        returnOrderDetails = returnOrdersMap.get(returnOrder.id)
9902
        warehouse = None
10809
        warehouse = inventoryClient.getWarehouse(returnOrder.warehouse_id) 
9903
        
10810
        
9904
        serialNumbers = []
10811
        serialNumbers = []
9905
        if returnOrderDetails.has_key('SerialNumbers'):  
10812
        if returnOrderDetails.has_key('SerialNumbers'):  
9906
            serialNumbers = returnOrderDetails.get('SerialNumbers').split(',')
10813
            serialNumbersSplitted = returnOrderDetails.get('SerialNumbers').split(',')
-
 
10814
            serialNumbers = []
-
 
10815
            for t in serialNumbersSplitted:
-
 
10816
                if t.strip() !="":
-
 
10817
                    serialNumbers.append(t.strip())
9907
            
10818
                    
9908
        scanFreebie = False
10819
        scanFreebie = False
9909
        if returnOrderDetails.has_key('ScanFreebie') and returnOrderDetails.get('ScanFreebie')=='yes':
10820
        if returnOrderDetails.has_key('ScanFreebie') and returnOrderDetails.get('ScanFreebie')=='yes':
9910
            scanFreebie = True
10821
            scanFreebie = True
9911
        quantity = int(returnOrderDetails.get('Quantity'))
10822
        quantity = int(returnOrderDetails.get('Quantity'))
9912
           
10823
           
Line 9948... Line 10859...
9948
                    try:
10859
                    try:
9949
                        warehouseClient.scanfreebie(order.id, order.freebieItemId, 0, scanType)
10860
                        warehouseClient.scanfreebie(order.id, order.freebieItemId, 0, scanType)
9950
                    except:
10861
                    except:
9951
                        warehouseClient = WarehouseClient().get_client()
10862
                        warehouseClient = WarehouseClient().get_client()
9952
                        warehouseClient.scanfreebie(order.id, order.freebieItemId, 0, scanType)
10863
                        warehouseClient.scanfreebie(order.id, order.freebieItemId, 0, scanType)
-
 
10864
     
9953
    
10865
    
-
 
10866
        isValid = returnOrderDetails.get('productUsable')
9954
    returnPickupReq.pickupStatus = ReturnTxnPickupStatus._VALUES_TO_NAMES[ReturnTxnPickupStatus.PICKUP_RECEIVED]
10867
        if returnOrder.returnStatus == OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_RECEIVED_PRESTINE]:
-
 
10868
            if isValid == "true":
-
 
10869
                returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_CERT_VALID]
-
 
10870
            else:
-
 
10871
                returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_CERT_INVALID]
-
 
10872
                
-
 
10873
        elif returnOrder.returnStatus == OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_RECEIVED_PRESTINE]:
-
 
10874
            if isValid == "true":
-
 
10875
                returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_PRODUCT_USABLE]
-
 
10876
            else:
-
 
10877
                returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_PRODUCT_UNUSABLE]
9955
    session.commit()  
10878
    session.commit()  
9956
    return True
10879
    return True
-
 
10880
    
9957
 
10881
 
9958
def validate_return_pickup(returnPickupId, returnOrdersMap):
10882
def validate_return_pickup(returnPickupId, returnOrdersMap):
9959
    returnOrders = ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==returnPickupId).all()
10883
    returnOrders = ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==returnPickupId).all()
9960
    if len(returnOrders)!=len(returnOrdersMap.keys()):
10884
    if len(returnOrders)!=len(returnOrdersMap.keys()):
9961
        raise TransactionServiceException(101, "All Returns Orders Information Missing. Please Fill All Orders Info")
10885
        raise TransactionServiceException(101, "All Returns Orders Information Missing. Please Fill All Orders Info")
Line 10038... Line 10962...
10038
    if not overrideWarranty and itemCondition is not None:
10962
    if not overrideWarranty and itemCondition is not None:
10039
        if itemCondition == 'DAMAGED':
10963
        if itemCondition == 'DAMAGED':
10040
            query = query.filter(LineItem.damaged_expiry_timestamp > datetime.datetime.now())
10964
            query = query.filter(LineItem.damaged_expiry_timestamp > datetime.datetime.now())
10041
        elif itemCondition == 'DEFECTIVE':
10965
        elif itemCondition == 'DEFECTIVE':
10042
            query = query.filter(LineItem.warranty_expiry_timestamp > datetime.datetime.now())
10966
            query = query.filter(LineItem.warranty_expiry_timestamp > datetime.datetime.now())
10043
            
10967
 
10044
    orders = query.order_by(desc(Order.delivery_timestamp)).all()
10968
    orders = query.order_by(desc(Order.delivery_timestamp)).all()
10045
    return orders
10969
    return orders
10046
        
10970
        
10047
def get_eligible_return_orders_for_pickup(customerId):
10971
def get_eligible_return_orders_for_pickup(customerId):
10048
    return session.query(ReturnOrderInfo).join((ReturnTransaction,ReturnOrderInfo.returnTransaction_id==ReturnTransaction.id)).filter(ReturnTransaction.customer_id==customerId).filter(or_(ReturnOrderInfo.returnStatus==OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_PICKUP_REQUEST_RAISED], ReturnOrderInfo.returnStatus==OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_PICKUP_REQUEST_RAISED])).filter(ReturnOrderInfo.logisticsRequestId==None).all()     
10972
    return session.query(ReturnOrderInfo).join((ReturnTransaction,ReturnOrderInfo.returnTransaction_id==ReturnTransaction.id)).filter(ReturnTransaction.customer_id==customerId).filter(or_(ReturnOrderInfo.returnStatus==OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_PICKUP_REQUEST_RAISED], ReturnOrderInfo.returnStatus==OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_PICKUP_REQUEST_RAISED])).filter(ReturnOrderInfo.logisticsRequestId==None).all()
10049
 
10973
 
10050
def validate_return_transaction(customerId, returnOrdersMap, itemCondition, overrideWarranty):
10974
def validate_return_transaction(customerId, returnOrdersMap, itemCondition, overrideWarranty):
10051
    eligibleOrders = get_eligible_orders_for_return(customerId, itemCondition, overrideWarranty)
10975
    eligibleOrders = get_eligible_orders_for_return(customerId, itemCondition, overrideWarranty)
10052
    
10976
 
10053
    ordersMap = {}
10977
    ordersMap = {}
10054
    for order in eligibleOrders:
10978
    for order in eligibleOrders:
10055
        ordersMap[order.id] = order.lineitems[0].quantity - order.lineitems[0].returnQty
10979
        ordersMap[order.id] = order.lineitems[0].quantity - order.lineitems[0].returnQty
10056
    
10980
 
10057
    for orderId, returnOrderQty in returnOrdersMap.items():
10981
    for orderId, returnOrderQty in returnOrdersMap.items():
10058
        if returnOrderQty > ordersMap.get(orderId):
10982
        if returnOrderQty > ordersMap.get(orderId):
10059
            return False
10983
            return False
10060
    return True
10984
    return True
10061
 
10985
 
10062
def get_return_pickup_request(returnPickupId):
10986
def get_return_pickup_request(returnPickupId):
10063
    return ReturnPickupRequest.get_by(id=returnPickupId)
10987
    return ReturnPickupRequest.get_by(id=returnPickupId)
10064
 
10988
 
-
 
10989
def mark_return_not_required_orders_as_processed(t_returnOrderInfo):
-
 
10990
    returnOrderInfo = ReturnOrderInfo.get_by(id=t_returnOrderInfo.id)
-
 
10991
    if returnOrderInfo is None:
-
 
10992
        raise TransactionServiceException(101, "No Return Order Found")
-
 
10993
 
-
 
10994
    if returnOrderInfo.returnPickupType == ReturnPickupType.NOT_REQUIRED:
-
 
10995
        if returnOrderInfo.returnAction == ReturnAction.REPLACEMENT  or t_returnOrderInfo.refundType!= RefundType.WALLET:
-
 
10996
            raise TransactionServiceException(101, "Refund Type not Defined for return order:- "+str(returnOrderInfo.id))
-
 
10997
 
-
 
10998
    detailsMap = {}
-
 
10999
    if returnOrderInfo.refundedAt :
-
 
11000
        raise TransactionServiceException(145, "Refund already in Process for this return order")
-
 
11001
    detailsMap['RefundReason'] = "As per Customer Request"
-
 
11002
    detailsMap['RefundType'] = t_returnOrderInfo.refundType
-
 
11003
    detailsMap['RefundedBy'] = t_returnOrderInfo.refundedBy
-
 
11004
    detailsMap['RefundAmount'] = t_returnOrderInfo.refundAmount
-
 
11005
    returnOrderInfo.returnTxnResolutionStatus = ReturnTxnResolutionStatus._VALUES_TO_NAMES[ReturnTxnResolutionStatus.REFUND_IN_PROCESS]
-
 
11006
    if(not __process_return_order(returnOrderInfo, detailsMap)):
-
 
11007
        raise TransactionServiceException(145, "Issue in __process_return_order")
-
 
11008
    returnOrderInfo.processedAt = datetime.datetime.now()
-
 
11009
    returnOrderInfo.returnTxnResolutionStatus = ReturnTxnResolutionStatus._VALUES_TO_NAMES[ReturnTxnResolutionStatus.REFUND_DONE]
-
 
11010
    session.commit()
-
 
11011
    __markReturnTransactionAsProcessed(returnOrderInfo.returnTransaction_id)
-
 
11012
    return True
10065
 
11013
 
10066
def mark_return_not_required_orders_as_processed(returnTransactionId):
-
 
10067
    returnTransaction = ReturnTransaction.get_by(id=returnTransactionId)
-
 
10068
    if returnTransaction is None:
-
 
10069
        raise TransactionServiceException(101, "No Return Transaction Found")
-
 
10070
    
-
 
10071
    eligibleOrders = []
-
 
10072
    for returnOrder in returnTransaction.returnOrders:
-
 
10073
        if returnOrder.returnPickupType == ReturnPickupType.NOT_REQUIRED:
-
 
10074
            if returnOrder.returnAction and returnOrder.refundType == RefundType.INIT:
-
 
10075
                raise TransactionServiceException(101, "Refund Type not Defined for return order:- "+str(returnOrder.id))
-
 
10076
            eligibleOrders.append(returnOrder)
-
 
10077
        
-
 
10078
        
-
 
10079
    returnOrdersAttrMap = {}
-
 
10080
    returnOrderIds = []
-
 
10081
    
-
 
10082
    for returnOrder in eligibleOrders:
-
 
10083
        returnOrderIds.append(returnOrder.id)
-
 
10084
        if returnOrder.returnAction:
-
 
10085
            detailsMap = {}
-
 
10086
            if returnOrder.refundedAt:
-
 
10087
                raise TransactionServiceException(145, "Refund already in Process for this return order")
-
 
10088
            detailsMap['RefundReason'] = "As per Customer Request"
-
 
10089
            detailsMap['RefundType'] = returnOrder.refundType
-
 
10090
            detailsMap['RefundedBy'] = "CRM Executive"
-
 
10091
            detailsMap['RefundAmount'] = returnOrder.refundAmount
-
 
10092
            returnOrdersAttrMap[returnOrder.id] = detailsMap
-
 
10093
    
-
 
10094
    
-
 
10095
    return change_return_transaction_status(returnTransactionId, ReturnTransactionStatus.PROCESSED, returnOrderIds, returnOrdersAttrMap)
-
 
10096
 
11014
 
10097
def get_all_return_orders_for_return_pickup_request(logisticsRequestId):
11015
def get_all_return_orders_for_return_pickup_request(logisticsRequestId):
10098
    return ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==logisticsRequestId).all()
11016
    return ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==logisticsRequestId).all()
10099
 
11017
 
10100
def __clone_return_order(returnOrder, splitReturnOrderQty):
11018
def __clone_return_order(returnOrder, splitOrderQty):
-
 
11019
    if returnOrder.returnQuantity <= splitOrderQty or splitOrderQty<=0:
-
 
11020
        raise TransactionServiceException(101, "SplitQty canot be equal to or greater than parent return order returnQty")
-
 
11021
    returnOrder.returnQuantity = returnOrder.returnQuantity - splitOrderQty 
10101
    returnOrderInfo = ReturnOrderInfo()
11022
    new_return_order = ReturnOrderInfo()
-
 
11023
    new_return_order.returnTransaction = returnOrder.returnTransaction
-
 
11024
    new_return_order.masterOrderId = returnOrder.masterOrderId
10102
    returnOrderInfo.orderId = returnOrder.orderId
11025
    new_return_order.orderId = returnOrder.orderId
10103
    returnOrderInfo.lineItemId = returnOrder.lineItemId
11026
    new_return_order.lineItemId = returnOrder.lineItemId
-
 
11027
    new_return_order.logisticsRequestId = returnOrder.logisticsRequestId
10104
    returnOrderInfo.returnQuantity = splitReturnOrderQty
11028
    new_return_order.returnQuantity = splitOrderQty
-
 
11029
    new_return_order.receivedQuantity = returnOrder.receivedQuantity
10105
    returnOrderInfo.createdAt = datetime.datetime.now()
11030
    new_return_order.createdAt = returnOrder.createdAt
10106
    if itemCondition=="DAMAGED":
11031
    new_return_order.processedAt = returnOrder.processedAt
10107
        returnOrderInfo.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_REQUEST_RECEIVED]
11032
    new_return_order.returnStatus = returnOrder.returnStatus
10108
    else:
11033
    new_return_order.reshippedAt = returnOrder.reshippedAt
-
 
11034
    new_return_order.receivedAt = returnOrder.receivedAt
10109
        returnOrderInfo.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_REQUEST_RECEIVED]
11035
    new_return_order.refundReason = returnOrder.refundReason
-
 
11036
    new_return_order.refundedBy = returnOrder.refundedBy
10110
    returnOrderInfo.masterOrderId = order.logisticsTransactionId
11037
    new_return_order.refundedAt = returnOrder.refundedAt
10111
    returnOrderInfo.warehouse_id = order.warehouse_id
11038
    new_return_order.warehouse_id = returnOrder.warehouse_id
-
 
11039
    new_return_order.refundAmount = returnOrder.refundAmount
-
 
11040
    new_return_order.refundType = returnOrder.refundType
10112
    returnOrderInfo.returnAction = returnInfo.returnAction
11041
    new_return_order.refundDescription = returnOrder.refundDescription
-
 
11042
    new_return_order.returnPickupType = returnOrder.returnPickupType
-
 
11043
    new_return_order.shippingType = returnOrder.shippingType
-
 
11044
    new_return_order.replacementOrderId = returnOrder.replacementOrderId
-
 
11045
    new_return_order.receivedReturnType = returnOrder.receivedReturnType
10113
    returnOrderInfo.freebieItemId = order.freebieItemId
11046
    new_return_order.freebieItemId = returnOrder.freebieItemId
-
 
11047
    new_return_order.returnAction = returnOrder.returnAction
10114
    returnOrderInfo.returnTxnResolutionStatus = ReturnTxnResolutionStatus._VALUES_TO_NAMES[ReturnTxnResolutionStatus.PENDING]
11048
    new_return_order.returnTxnResolutionStatus = returnOrder.returnTxnResolutionStatus
-
 
11049
    new_return_order.lineitem = returnOrder.lineitem
-
 
11050
    new_return_order.returnPickUpRequest = returnOrder.returnPickUpRequest
-
 
11051
    return new_return_order
-
 
11052
 
10115
    
11053
    
10116
def get_seller_info(sellerId):
11054
def get_seller_info(sellerId):
10117
    sellerInfo = SellerInfo()
11055
    sellerInfo = SellerInfo()
10118
    seller = Seller.get_by(id=sellerId)
11056
    seller = Seller.get_by(id=sellerId)
10119
    if seller is None:
11057
    if seller is None:
Line 10134... Line 11072...
10134
 
11072
 
10135
def get_warehouse_address(addressId):
11073
def get_warehouse_address(addressId):
10136
    address = WarehouseAddressMaster.get_by(id=addressId)
11074
    address = WarehouseAddressMaster.get_by(id=addressId)
10137
    return to_t_warehouse_address(address)
11075
    return to_t_warehouse_address(address)
10138
 
11076
 
10139
def split_return_order_info(returnOrderId, splitReturnOrderQty):
11077
def split_return_order_info(returnOrderId, splitOrderQty):
10140
    returnOrder = ReturnOrderInfo.get_by(id=returnOrderId)
11078
    returnOrder = ReturnOrderInfo.get_by(id=returnOrderId)
10141
    if returnOrder is None:
11079
    if returnOrder is None:
10142
        raise TransactionServiceException(101, "No Return Order is there with this Order Id")
11080
        raise TransactionServiceException(101, "No Return Order is there with this Order Id")
-
 
11081
    new_return_order = __clone_return_order(returnOrder, splitOrderQty)
-
 
11082
    session.commit()
-
 
11083
    return new_return_order
10143
 
11084
 
10144
#Seller would be used to get tin number
11085
#Seller would be used to get tin number
10145
def __get_seller(warehouse_id):
11086
def __get_seller(warehouse_id):
10146
        #As of now we have hardcoded the company and 
11087
        #As of now we have hardcoded the company and 
10147
        #seller would be returned on basis warehouse and company
11088
        #seller would be returned on basis warehouse and company
Line 10151... Line 11092...
10151
        return sellerId
11092
        return sellerId
10152
 
11093
 
10153
def add_shipment_delay(shipmentDelayDetail):
11094
def add_shipment_delay(shipmentDelayDetail):
10154
    returnList = []
11095
    returnList = []
10155
    for delayObj in shipmentDelayDetail:
11096
    for delayObj in shipmentDelayDetail:
10156
        print delayObj.orderId
-
 
10157
        print delayObj.delayReason
-
 
10158
        print delayObj.delayReasonText
-
 
10159
        print delayObj.delay
-
 
10160
        order = get_order(delayObj.orderId)
11097
        order = get_order(delayObj.orderId)
10161
        if order.status not in [OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.ACCEPTED]:
11098
        if order.status not in [OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.ACCEPTED]:
10162
            returnList.append(delayObj.orderId)
11099
            returnList.append(delayObj.orderId)
10163
            continue
11100
            continue
10164
        try:
11101
        try:
Line 10167... Line 11104...
10167
            returnList.append(delayObj.orderId)
11104
            returnList.append(delayObj.orderId)
10168
            continue
11105
            continue
10169
        if not result:
11106
        if not result:
10170
            returnList.append(delayObj.orderId)
11107
            returnList.append(delayObj.orderId)
10171
    return returnList
11108
    return returnList
10172
            
-
 
10173
 
-
 
10174
 
11109
 
10175
#Buyer can be anyone based on logic
11110
#Buyer can be anyone based on logic
10176
def __get_buyer(warehouse_id):
11111
def __get_buyer(warehouse_id):
10177
        #As of now we have hardcoded the company and 
11112
        #As of now we have hardcoded the company and 
10178
        #seller would be returned on basis warehouse and company
11113
        #seller would be returned on basis warehouse and company