Subversion Repositories SmartDukaan

Rev

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

Rev 8128 Rev 8182
Line 41... Line 41...
41
    Order, BatchNoGenerator, InvoiceIDGenerator, TransactionRequiringExtraProcessing, \
41
    Order, BatchNoGenerator, InvoiceIDGenerator, TransactionRequiringExtraProcessing, \
42
    OrderInventory, Alert, PaymentSettlement, EBSSettlementSummary, \
42
    OrderInventory, Alert, PaymentSettlement, EBSSettlementSummary, \
43
    CodVerificationAgent, Attribute, RechargeVoucherTracker, EmiScheme, MiscCharges, \
43
    CodVerificationAgent, Attribute, RechargeVoucherTracker, EmiScheme, MiscCharges, \
44
    BlockedIpRange, DeniedIpAddress, InsuranceDetailForOrder, DocumentStore, \
44
    BlockedIpRange, DeniedIpAddress, InsuranceDetailForOrder, DocumentStore, \
45
    RechargeTransaction, HotspotStore, WalletForCompany, WalletHistoryForCompany, \
45
    RechargeTransaction, HotspotStore, WalletForCompany, WalletHistoryForCompany, \
46
    FRC, OperatorSeries, SourceDetail, Company, \
46
    FRC, OperatorSeries, SourceDetail, Company, EbayOrder, \
47
    AmazonOrder, StoreOrderDetail, EdcBank, StoreOrderCollection, HotspotServiceMatrix
47
    AmazonOrder, StoreOrderDetail, EdcBank, StoreOrderCollection, HotspotServiceMatrix
48
from shop2020.model.v1.order.impl.model.BaseOrder import BaseOrder
48
from shop2020.model.v1.order.impl.model.BaseOrder import BaseOrder
49
from shop2020.model.v1.order.impl.model.DTHRechargeOrder import DTHRechargeOrder
49
from shop2020.model.v1.order.impl.model.DTHRechargeOrder import DTHRechargeOrder
50
from shop2020.model.v1.order.impl.model.MobileRechargeOrder import \
50
from shop2020.model.v1.order.impl.model.MobileRechargeOrder import \
51
    MobileRechargeOrder
51
    MobileRechargeOrder
Line 150... Line 150...
150
 
150
 
151
def create_order(t_order):
151
def create_order(t_order):
152
    order = Order()
152
    order = Order()
153
    if t_order.warehouse_id:
153
    if t_order.warehouse_id:
154
        order.warehouse_id = t_order.warehouse_id
154
        order.warehouse_id = t_order.warehouse_id
-
 
155
        order.fulfilmentWarehouseId = t_order.fulfilmentWarehouseId
155
    if t_order.logistics_provider_id:    
156
    if t_order.logistics_provider_id:    
156
        order.logistics_provider_id = t_order.logistics_provider_id
157
        order.logistics_provider_id = t_order.logistics_provider_id
157
        order.airwaybill_no = t_order.airwaybill_no
158
        order.airwaybill_no = t_order.airwaybill_no
158
        order.tracking_id = t_order.tracking_id
159
        order.tracking_id = t_order.tracking_id
159
    if t_order.expected_shipping_time:
160
    if t_order.expected_shipping_time:
Line 192... Line 193...
192
        insuranceDetail.guardianName = t_order.guardianName
193
        insuranceDetail.guardianName = t_order.guardianName
193
        insuranceDetail.order = order
194
        insuranceDetail.order = order
194
    if t_order.freebieItemId:
195
    if t_order.freebieItemId:
195
        order.freebieItemId = t_order.freebieItemId
196
        order.freebieItemId = t_order.freebieItemId
196
    order.source = t_order.source
197
    order.source = t_order.source
-
 
198
    #Change this temporary
-
 
199
    if t_order.orderType is None:
-
 
200
        order.orderType = 0
197
    order.advanceAmount = t_order.advanceAmount
201
    order.advanceAmount = t_order.advanceAmount
198
    order.storeId = t_order.storeId
202
    order.storeId = t_order.storeId
199
    return order
203
    return order
200
    
204
    
201
def create_transaction(t_transaction):
205
def create_transaction(t_transaction):
Line 939... Line 943...
939
    else:
943
    else:
940
        freebie_orderId = get_order_attribute_value(order.id, "freebieOrderId")
944
        freebie_orderId = get_order_attribute_value(order.id, "freebieOrderId")
941
        if freebie_orderId != "":
945
        if freebie_orderId != "":
942
            line_items = get_line_items_for_order(int(freebie_orderId))
946
            line_items = get_line_items_for_order(int(freebie_orderId))
943
            freebie_order = get_order(int(freebie_orderId))
947
            freebie_order = get_order(int(freebie_orderId))
944
            if order.cod:
-
 
945
                freebie_shipping_time = datetime.datetime.now() + datetime.timedelta(hours = 72)
-
 
946
                freebie_text = freebie_text + "We wish to inform you that your freebie item " +line_items[0].brand + " " + line_items[0].model_name + " " + line_items[0].model_number + " will be shipped by" + freebie_shipping_time.strftime("%A, %d. %B %Y") + "<br/>"
-
 
947
            else:
-
 
948
                freebie_text = freebie_text + " We wish to inform you that your freebie item " +line_items[0].brand + " " + line_items[0].model_name + " " + line_items[0].model_number + " will be sent as a separate order with OrderId : " + freebie_orderId + " and is expected to be delivered on " + freebie_order.expected_delivery_time.strftime("%A, %d %B %Y")+ "<br/>You can track the status of this order from My Orders section in saholic.com" 
948
            freebie_text = freebie_text + " We wish to inform you that your freebie item " +line_items[0].brand + " " + line_items[0].model_name + " " + line_items[0].model_number + " will be sent as a separate order with OrderId : " + freebie_orderId + " and is expected to be delivered on " + freebie_order.expected_delivery_time.strftime("%A, %d %B %Y")+ "<br/>You can track the status of this order from My Orders section in saholic.com"  
949
    
949
    
950
    html_header = html_header + thank_you_html + """        
950
    html_header = html_header + thank_you_html + """        
951
        </p>
951
        </p>
952
        <div>
952
        <div>
953
            Order Date: $order_date <br>
953
            Order Date: $order_date <br>
Line 2929... Line 2929...
2929
        amazon_order.transactionId = old_amazon_order.transactionId
2929
        amazon_order.transactionId = old_amazon_order.transactionId
2930
        amazon_order.item_id= old_amazon_order.item_id
2930
        amazon_order.item_id= old_amazon_order.item_id
2931
        amazon_order.status= old_amazon_order.status
2931
        amazon_order.status= old_amazon_order.status
2932
        amazon_order.purchaseDateOnAmazon= old_amazon_order.purchaseDateOnAmazon
2932
        amazon_order.purchaseDateOnAmazon= old_amazon_order.purchaseDateOnAmazon
2933
        session.commit()
2933
        session.commit()
-
 
2934
    if order.source == 6:
-
 
2935
        old_ebay_order = EbayOrder.get_by(orderId=order.id)
-
 
2936
        ebay_order = EbayOrder()
-
 
2937
        ebay_order.orderId = new_order.id
-
 
2938
        ebay_order.salesRecordNumber = old_ebay_order.salesRecordNumber
-
 
2939
        ebay_order.paisaPayId = old_ebay_order.paisaPayId
-
 
2940
        ebay_order.ebayListingId = old_ebay_order.ebayListingId
-
 
2941
        ebay_order.subsidyAmount= old_ebay_order.subsidyAmount
-
 
2942
        ebay_order.ebayTxnDate= old_ebay_order.ebayTxnDate
-
 
2943
        ebay_order.transactionId= old_ebay_order.transactionId
-
 
2944
        ebay_order.listingName= old_ebay_order.listingName
-
 
2945
        session.commit()
2934
    
2946
    
2935
    attributes = Attribute.query.filter(Attribute.orderId == order.id).all()
2947
    attributes = Attribute.query.filter(Attribute.orderId == order.id).all()
2936
    if attributes:
2948
    if attributes:
2937
        for attribute in attributes:
2949
        for attribute in attributes:
2938
            newattribute = Attribute()
2950
            newattribute = Attribute()
Line 3196... Line 3208...
3196
    if provider_id != 7:
3208
    if provider_id != 7:
3197
        awb_number = logistics_client.getEmptyAWB(provider_id, order.cod)
3209
        awb_number = logistics_client.getEmptyAWB(provider_id, order.cod)
3198
    order.logistics_provider_id = provider_id
3210
    order.logistics_provider_id = provider_id
3199
    if provider_id != 7:
3211
    if provider_id != 7:
3200
        order.airwaybill_no = awb_number
3212
        order.airwaybill_no = awb_number
3201
        order.track_id = awb_number
3213
        order.tracking_id = awb_number
3202
    session.commit()
3214
    session.commit()
3203
 
3215
 
3204
    return order
3216
    return order
3205
 
3217
 
3206
def change_product(order_id, item_id):
3218
def change_product(order_id, item_id):
Line 4005... Line 4017...
4005
    logistics_info = lclient.getLogisticsEstimation(order.lineitems[0].item_id, order.customer_pincode, DeliveryType.PREPAID)
4017
    logistics_info = lclient.getLogisticsEstimation(order.lineitems[0].item_id, order.customer_pincode, DeliveryType.PREPAID)
4006
    dt = datetime.datetime.strptime(str(order.shipping_timestamp), "%Y-%m-%d %H:%M:%S")
4018
    dt = datetime.datetime.strptime(str(order.shipping_timestamp), "%Y-%m-%d %H:%M:%S")
4007
    shipping_date = dt.strftime("%A, %d %B %Y %I:%M%p")
4019
    shipping_date = dt.strftime("%A, %d %B %Y %I:%M%p")
4008
    product = str(order.lineitems[0])
4020
    product = str(order.lineitems[0])
4009
    new_expected_delivery_timestamp = datetime.datetime.now() + timedelta(adjust_delivery_time(datetime.datetime.now(), (logistics_info.deliveryTime - logistics_info.shippingTime)))
4021
    new_expected_delivery_timestamp = datetime.datetime.now() + timedelta(adjust_delivery_time(datetime.datetime.now(), (logistics_info.deliveryTime - logistics_info.shippingTime)))
-
 
4022
    if order.source ==6:
-
 
4023
        new_expected_delivery_timestamp = datetime.datetime.now() + timedelta(adjust_delivery_time(datetime.datetime.now(), 3))
4010
    new_courier_delivery_time = datetime.datetime.now() + timedelta(adjust_delivery_time(datetime.datetime.now(), (logistics_info.deliveryTime - logistics_info.shippingTime - logistics_info.deliveryDelay)))
4024
    new_courier_delivery_time = datetime.datetime.now() + timedelta(adjust_delivery_time(datetime.datetime.now(), (logistics_info.deliveryTime - logistics_info.shippingTime - logistics_info.deliveryDelay)))
4011
    #update new expected timestamp
4025
    #update new expected timestamp
4012
    if order.cod:
4026
    if order.cod:
4013
        new_expected_delivery_timestamp = new_expected_delivery_timestamp.replace(hour=COD_SHIPPING_CUTOFF_TIME, minute=0, second=0, microsecond=0)
4027
        new_expected_delivery_timestamp = new_expected_delivery_timestamp.replace(hour=COD_SHIPPING_CUTOFF_TIME, minute=0, second=0, microsecond=0)
4014
        order.courier_delivery_time = new_courier_delivery_time.replace(hour=COD_SHIPPING_CUTOFF_TIME, minute=0, second=0, microsecond=0)
4028
        order.courier_delivery_time = new_courier_delivery_time.replace(hour=COD_SHIPPING_CUTOFF_TIME, minute=0, second=0, microsecond=0)
Line 4037... Line 4051...
4037
    else:
4051
    else:
4038
        freebie_orderId = get_order_attribute_value(order.id, "freebieOrderId")
4052
        freebie_orderId = get_order_attribute_value(order.id, "freebieOrderId")
4039
        if freebie_orderId != "":
4053
        if freebie_orderId != "":
4040
            line_items = get_line_items_for_order(int(freebie_orderId))
4054
            line_items = get_line_items_for_order(int(freebie_orderId))
4041
            freebie_order = get_order(int(freebie_orderId))
4055
            freebie_order = get_order(int(freebie_orderId))
4042
            if order.cod:
-
 
4043
                freebie_text = freebie_text + "We wish to inform you that your freebie item " +line_items[0].brand + " " + line_items[0].model_name + " " + line_items[0].model_number + " will be shipped within 72 hours of delivery of your product<br/>"
-
 
4044
            else:
-
 
4045
                freebie_text = freebie_text + "We wish to inform you that your freebie item " +line_items[0].brand + " " + line_items[0].model_name + " " + line_items[0].model_number + " will be sent as a separate order with OrderId : " + freebie_orderId + " and is expected to be delivered on " + freebie_order.expected_delivery_time.strftime("%A, %d %B %Y")+ "<br/>"
4056
            freebie_text = freebie_text + "We wish to inform you that your freebie item " +line_items[0].brand + " " + line_items[0].model_name + " " + line_items[0].model_number + " will be sent as a separate order with OrderId : " + freebie_orderId + " and is expected to be delivered on " + freebie_order.expected_delivery_time.strftime("%A, %d %B %Y")+ "<br/>"
4046
        else:
4057
        else:
4047
            freebie_text = ""
4058
            freebie_text = ""
4048
        
4059
        
4049
    info = dict(order_id = order.id, product_name = product, shipping_datetime = shipping_date, awb = order.airwaybill_no, expected_delivery_date = new_expected_delivery_date, courier_name = provider_name, courier_phone = provider_phone, source_name = source_name, otg_text = otg_text, freebie_text = freebie_text)
4060
    info = dict(order_id = order.id, product_name = product, shipping_datetime = shipping_date, awb = order.airwaybill_no, expected_delivery_date = new_expected_delivery_date, courier_name = provider_name, courier_phone = provider_phone, source_name = source_name, otg_text = otg_text, freebie_text = freebie_text)
4050
    return Template(html).substitute(info)
4061
    return Template(html).substitute(info)
Line 5307... Line 5318...
5307
    logistics_client = LogisticsClient().get_client()
5318
    logistics_client = LogisticsClient().get_client()
5308
    logistics_info = logistics_client.getLogisticsInfo(order.customer_pincode, order.freebieItemId, DeliveryType.PREPAID, PickUpType.COURIER)
5319
    logistics_info = logistics_client.getLogisticsInfo(order.customer_pincode, order.freebieItemId, DeliveryType.PREPAID, PickUpType.COURIER)
5309
    freebie_order.logistics_provider_id = logistics_info.providerId;
5320
    freebie_order.logistics_provider_id = logistics_info.providerId;
5310
    freebie_order.tracking_id = logistics_info.airway_billno
5321
    freebie_order.tracking_id = logistics_info.airway_billno
5311
    freebie_order.airwaybill_no = logistics_info.airway_billno
5322
    freebie_order.airwaybill_no = logistics_info.airway_billno
-
 
5323
    new_shipping_date = max(to_py_date(shippingDate),order.expected_delivery_time+datetime.timedelta(hours=72))
5312
    freebie_order.expected_delivery_time = (to_py_date(shippingDate)+datetime.timedelta(days=logistics_info.deliveryTime)).replace(hour=PREPAID_SHIPPING_CUTOFF_TIME, minute=0, second=0)  
5324
    #freebie_order.expected_delivery_time = (to_py_date(shippingDate)+datetime.timedelta(days=logistics_info.deliveryTime)).replace(hour=PREPAID_SHIPPING_CUTOFF_TIME, minute=0, second=0)
-
 
5325
    freebie_order.expected_delivery_time = (new_shipping_date+datetime.timedelta(days=logistics_info.deliveryTime)).replace(hour=PREPAID_SHIPPING_CUTOFF_TIME, minute=0, second=0)  
5313
    freebie_order.promised_delivery_time = order.promised_delivery_time
5326
    freebie_order.promised_delivery_time = order.promised_delivery_time
5314
    freebie_order.expected_shipping_time = to_py_date(shippingDate)
5327
    freebie_order.expected_shipping_time = new_shipping_date
5315
    freebie_order.promised_shipping_time = order.promised_shipping_time
5328
    freebie_order.promised_shipping_time = order.promised_shipping_time
5316
 
5329
 
5317
    inventory_client = InventoryClient().get_client()
5330
    inventory_client = InventoryClient().get_client()
5318
    item_availability = inventory_client.getItemAvailabilityAtLocation(order.freebieItemId,1)
5331
    item_availability = inventory_client.getItemAvailabilityAtLocation(order.freebieItemId,1)
5319
    freebie_order.warehouse_id = item_availability[2]
5332
    freebie_order.warehouse_id = item_availability[2]
Line 5933... Line 5946...
5933
 
5946
 
5934
def get_hotspot_service_matrices():
5947
def get_hotspot_service_matrices():
5935
    hotspotServiceMatrices = HotspotServiceMatrix.query.all()
5948
    hotspotServiceMatrices = HotspotServiceMatrix.query.all()
5936
    return hotspotServiceMatrices
5949
    return hotspotServiceMatrices
5937
 
5950
 
-
 
5951
def get_orders_by_vendor(vendors, statuses):
-
 
5952
    if not len(statuses):
-
 
5953
        raise TransactionServiceException(101, "Status list is empty")
-
 
5954
    if not len(vendors):
-
 
5955
        raise TransactionServiceException(101, "Vendor list is empty")
-
 
5956
    warehouse_ids = []
-
 
5957
    inventory_client = InventoryClient().get_client()
-
 
5958
    for vendor in vendors:
-
 
5959
        warehouses = inventory_client.getWarehouses(None, None, vendor, 0, 0)
-
 
5960
        for warehouse in warehouses:
-
 
5961
            warehouse_ids.append(warehouse.id)
-
 
5962
    query = Order.query.filter(Order.status.in_(statuses))
-
 
5963
    query = query.filter(Order.warehouse_id.in_(warehouse_ids))
-
 
5964
        #raise TransactionServiceException(101, "bad warehouse id")
-
 
5965
    return query.all()    
-
 
5966
 
-
 
5967
def create_ebay_order(ebay_order):
-
 
5968
    ebayOrder = EbayOrder()
-
 
5969
    ebayOrder.orderId =  ebay_order.orderId
-
 
5970
    ebayOrder.paisaPayId =  ebay_order.paisaPayId
-
 
5971
    ebayOrder.salesRecordNumber = ebay_order.salesRecordNumber
-
 
5972
    ebayOrder.ebayListingId =  ebay_order.ebayListingId
-
 
5973
    ebayOrder.subsidyAmount =  ebay_order.subsidyAmount
-
 
5974
    ebayOrder.ebayTxnDate =  to_py_date(ebay_order.ebayTxnDate)
-
 
5975
    ebayOrder.transactionId = ebay_order.transactionId
-
 
5976
    ebayOrder.listingName = ebay_order.listingName
-
 
5977
    ebayOrder.listingPrice = ebay_order.listingPrice
-
 
5978
    session.commit()
-
 
5979
 
-
 
5980
def get_ebay_order_by_sales_rec_number(sales_rec_number):
-
 
5981
    return EbayOrder.query.filter(EbayOrder.salesRecordNumber == sales_rec_number).one()
-
 
5982
 
-
 
5983
def get_ebay_order(sales_rec_number, listingId):
-
 
5984
    return EbayOrder.query.filter(EbayOrder.salesRecordNumber == sales_rec_number).filter(EbayOrder.ebayListingId == listingId).one()
-
 
5985
 
-
 
5986
def get_ebay_order_by_orderId(order_id):
-
 
5987
    return EbayOrder.query.filter(EbayOrder.orderId == order_id).one()
-
 
5988
 
-
 
5989
def update_ebay_order(ebay_order):
-
 
5990
    ebayOrder = get_ebay_order_by_orderId(ebay_order.orderId)
-
 
5991
    ebayOrder.subsidyAmount = ebay_order.subsidyAmount
-
 
5992
    ebayOrder.transactionId = ebay_order.transactionId
-
 
5993
    ebayOrder.ebayTxnDate = ebay_order.ebayTxnDate
-
 
5994
    session.commit()
5938
 
5995
 
-
 
5996
def ebay_order_exists(sales_rec_number, ebay_listing_id):
-
 
5997
    try:
-
 
5998
        ebayOrder = get_ebay_order_by_sales_rec_number(sales_rec_number)
-
 
5999
        if ebayOrder.ebayListingId == ebay_listing_id:
-
 
6000
            return True
-
 
6001
        else:
-
 
6002
            return False
-
 
6003
    except Exception as e:
-
 
6004
        return False
-
 
6005
def update_order_for_ebay(t_order):
-
 
6006
    order = get_order(t_order.id)
-
 
6007
    order.customer_id = t_order.customer_id
-
 
6008
    order.customer_name = t_order.customer_name
-
 
6009
    order.customer_city = t_order.customer_city
-
 
6010
    order.customer_state = t_order.customer_state
-
 
6011
    order.customer_mobilenumber = t_order.customer_mobilenumber
-
 
6012
    order.customer_pincode = t_order.customer_pincode
-
 
6013
    order.customer_address1 = t_order.customer_address1
-
 
6014
    order.customer_address2 = t_order.customer_address2
-
 
6015
    order.customer_email = t_order.customer_email
-
 
6016
    order.logistics_provider_id = t_order.logistics_provider_id
-
 
6017
    order.airwaybill_no = t_order.airwaybill_no
-
 
6018
    order.tracking_id = t_order.tracking_id
-
 
6019
    order.status = t_order.status  
-
 
6020
    order.statusDescription = t_order.statusDescription
-
 
6021
    order.otg = False
-
 
6022
    order.freebieItemId = 0
-
 
6023
    order.orderType = OrderType.B2C
-
 
6024
    order.source = 6
-
 
6025
    
-
 
6026
    transaction = get_transaction(order.transaction_id)
-
 
6027
    transaction.status = TransactionStatus.AUTHORIZED
-
 
6028
    transaction.customer_id = t_order.customer_id
-
 
6029
    session.commit()
-
 
6030
    
-
 
6031
def split_ebay_order(order_id, split_order_qty, split_order_item_id, use_power_ship):
-
 
6032
    #In case of split now order is always assigned based on the website logic...Also itemId won't work for now
-
 
6033
    order = get_order(order_id)
-
 
6034
    if split_order_qty >=order.lineitems[0].quantity:
-
 
6035
        raise TransactionServiceException(108, "Split Quantity is greater than or equal to order quantity")
-
 
6036
    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]:
-
 
6037
        raise TransactionServiceException(108, "Order not allowed to be split")
-
 
6038
    new_order = __clone_order(order, False, False)
-
 
6039
    new_order.expected_delivery_time = order.expected_delivery_time
-
 
6040
    new_order.promised_delivery_time = order.promised_delivery_time
-
 
6041
    new_order.expected_shipping_time = order.expected_shipping_time
-
 
6042
    new_order.promised_shipping_time = order.promised_shipping_time
-
 
6043
    if use_power_ship:
-
 
6044
        new_order.logistics_provider_id = order.logistics_provider_id
-
 
6045
        new_order.airwaybill_no = order.airwaybill_no
-
 
6046
        new_order.tracking_id = order.tracking_id
-
 
6047
    
-
 
6048
    new_order.lineitems[0].quantity = split_order_qty
-
 
6049
    order.lineitems[0].quantity = order.lineitems[0].quantity - split_order_qty
-
 
6050
    session.commit()
-
 
6051
    return new_order
-
 
6052
    
5939
if __name__ == '__main__':
6053
if __name__ == '__main__':
5940
    print get_orders_by_mobile_number("9650889334")
6054
    print get_orders_by_mobile_number("9650889334")
5941
6055