Subversion Repositories SmartDukaan

Rev

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

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