Subversion Repositories SmartDukaan

Rev

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

Rev 3986 Rev 3994
Line 242... Line 242...
242
    except Exception as e:
242
    except Exception as e:
243
        print e
243
        print e
244
 
244
 
245
    return True
245
    return True
246
 
246
 
247
def adjust_delivery_time(order_time, delivery_days):
247
def __get_holidays(start_time=0L, to_time=-1L):
248
    order_date = order_time.date()
-
 
249
    
248
    '''
250
    delivery_date = order_date + datetime.timedelta(days = delivery_days)
249
    Get the list of all public holidays since start time including the
251
    final_delivery_date = delivery_date
250
    day of start time if it's a holiday
252
    
251
    '''
253
    time_format = "%Y-%m-%d %H:%M:%S.%f"
-
 
254
    t = time.strptime(str(order_time), time_format)
-
 
255
    midnightTime = datetime.datetime(*t[:3])
252
    midnightTime = start_time.replace(hour=0, minute=0, second=0, microsecond=0)
256
    fromDate = to_java_date(midnightTime)
253
    fromDate = to_java_date(midnightTime)
257
    toDate = -1L
-
 
258
    
-
 
259
    logistics_client = LogisticsClient().get_client()
254
    logistics_client = LogisticsClient().get_client()
-
 
255
    #TODO: This list should be cached after the first call.
-
 
256
    #Calling logistics server is also unnecessary.
260
    holiday_dates = logistics_client.getHolidays(fromDate, toDate)
257
    holidays = logistics_client.getHolidays(fromDate, to_time)
261
    holiday_dates = [(to_py_date(h_date)).date() for h_date in holiday_dates]
258
    holidays = [to_py_date(holiday).date() for holiday in holidays]
-
 
259
    return holidays
-
 
260
        
-
 
261
 
-
 
262
def adjust_delivery_time(start_time, delivery_days):
-
 
263
    '''
-
 
264
    Returns the actual no. of days which will pass while 'delivery_days'
-
 
265
    no. of business days will pass since 'order_time'. 
-
 
266
    '''
-
 
267
    start_date = start_time.date()
-
 
268
    end_date = start_date + datetime.timedelta(days = delivery_days)
-
 
269
    holidays = __get_holidays(start_time)
262
    
270
    
263
    while order_date <= final_delivery_date:
271
    while start_date <= end_date:
-
 
272
        start_date = start_date + datetime.timedelta(days = 1)
264
        if order_date.weekday() == 6 or is_holiday(holiday_dates, order_date):
273
        if start_date.weekday() == 6 or start_date in holidays:
265
            delivery_days = delivery_days + 1
274
            delivery_days = delivery_days + 1
266
            final_delivery_date = final_delivery_date + datetime.timedelta(days = 1)
-
 
267
        order_date = order_date + datetime.timedelta(days = 1)
275
            end_date = end_date + datetime.timedelta(days = 1)
-
 
276
    
268
    return delivery_days
277
    return delivery_days
269
 
278
 
270
 
-
 
271
 
-
 
272
def is_holiday(holidays, date):
-
 
273
    try:
-
 
274
        holidays.index(date)
-
 
275
        return 1
-
 
276
    except:
-
 
277
        return 0
-
 
278
 
-
 
279
def enqueue_transaction_info_email(transaction_id):
279
def enqueue_transaction_info_email(transaction_id):
280
    transaction = get_transaction(transaction_id)
280
    transaction = get_transaction(transaction_id)
281
    
281
    
282
    html_header = """
282
    html_header = """
283
<html>
283
<html>
Line 1321... Line 1321...
1321
    session.commit()
1321
    session.commit()
1322
    return order
1322
    return order
1323
 
1323
 
1324
def add_delay_reason(order_id, reason, further_delay=0):
1324
def add_delay_reason(order_id, reason, further_delay=0):
1325
    '''
1325
    '''
1326
    Adds a delay reason to the order
1326
    Adds a delay reason to the order and updates the expected delivery time.
1327
    '''
1327
    '''
1328
    order = get_order(order_id)
1328
    order = get_order(order_id)
1329
    try:
1329
    try:
1330
        order.delay_reason = DelayReason._VALUES_TO_NAMES[reason]
1330
        order.delay_reason = DelayReason._VALUES_TO_NAMES[reason]
-
 
1331
        actual_delay = adjust_delivery_time(order.expected_delivery_time, further_delay)
1331
        order.expected_delivery_time = order.expected_delivery_time + datetime.timedelta(days=further_delay)
1332
        order.expected_delivery_time = order.expected_delivery_time + datetime.timedelta(days=actual_delay)
1332
        session.commit()
1333
        session.commit()
1333
        return True
1334
        return True
1334
    except:
1335
    except:
-
 
1336
        print sys.exc_info()[0]
1335
        return False
1337
        return False
1336
 
1338
 
1337
def reconcile_cod_collection(collected_amount_map, xferBy, xferTxnId, xferDate):
1339
def reconcile_cod_collection(collected_amount_map, xferBy, xferTxnId, xferDate):
1338
    unprocessed_awbs = {}
1340
    unprocessed_awbs = {}
1339
    for awb, amount in collected_amount_map.iteritems():
1341
    for awb, amount in collected_amount_map.iteritems():