Subversion Repositories SmartDukaan

Rev

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

Rev 16933 Rev 16964
Line 23... Line 23...
23
from elixir import *
23
from elixir import *
24
from dtr.storage import DataService
24
from dtr.storage import DataService
25
from dtr.storage.DataService import Orders, Users, CallHistory
25
from dtr.storage.DataService import Orders, Users, CallHistory
26
from sqlalchemy.sql.expression import func
26
from sqlalchemy.sql.expression import func
27
from operator import or_
27
from operator import or_
-
 
28
from time import strftime
-
 
29
from dtr.utils import utils
28
 
30
 
29
 
31
 
30
DB_HOST = "localhost"
32
DB_HOST = "localhost"
31
DB_USER = "root"
33
DB_USER = "root"
32
DB_PASSWORD = "shop2020"
34
DB_PASSWORD = "shop2020"
Line 35... Line 37...
35
 
37
 
36
con = None
38
con = None
37
dateWiseOrderMap = {}
39
dateWiseOrderMap = {}
38
weekWiseOrderMap = {}
40
weekWiseOrderMap = {}
39
monthWiseOrderMap = {}
41
monthWiseOrderMap = {}
-
 
42
dateWiseSaholicOrderMap = {}
-
 
43
weekWiseSaholicOrderMap = {}
-
 
44
monthWiseSaholicOrderMap = {}
-
 
45
 
40
orderIds = []
46
orderIds = []
41
cutOff = 1425839400
47
cutOff = 1425839400
42
#cutOff = 1425234600
48
#cutOff = 1425234600
43
oneDay = 86400
49
oneDay = 86400
44
monthCutOff = 1425148200
50
monthCutOff = 1425148200
45
weekCutOff = 1425839400
51
weekCutOff = 1425839400
46
#weekCutOff = 1425234600
52
newWeekCutOff = 1425839400
47
 
-
 
-
 
53
newMonthCutOff = 1425148200
48
DataService.initialize()
54
DataService.initialize()
49
 
55
 
50
monthMap = {  '01':30,
56
monthMap = {  '01':30,
51
            '02':28,
57
            '02':28,
52
            '03':30,
58
            '03':30,
Line 300... Line 306...
300
    dnruSql = DNRU_QUERY
306
    dnruSql = DNRU_QUERY
301
    dauSql = DAU_QUERY
307
    dauSql = DAU_QUERY
302
    dabSql = DAB_QUERY
308
    dabSql = DAB_QUERY
303
    dtoSql = DTO_QUERY
309
    dtoSql = DTO_QUERY
304
    conn = getDbConnection()
310
    conn = getDbConnection()
305
    
311
 
306
    # prepare a cursor object using cursor() method
-
 
307
    cursor = conn.cursor()
312
    cursor = conn.cursor()
308
    # Execute the SQL command
-
 
309
    # Fetch source id.
-
 
310
    cursor.execute(datesql)
313
    cursor.execute(datesql)
311
    result = cursor.fetchall()
314
    result = cursor.fetchall()
312
    global workbook
315
    global workbook
313
    workbook = xlwt.Workbook()
316
    workbook = xlwt.Workbook()
314
    worksheet = workbook.add_sheet("User")
317
    worksheet = workbook.add_sheet("User")
Line 326... Line 329...
326
    worksheet.write(row, 3, 'DAU', boldStyle)
329
    worksheet.write(row, 3, 'DAU', boldStyle)
327
    worksheet.write(row, 4, 'DAB', boldStyle)
330
    worksheet.write(row, 4, 'DAB', boldStyle)
328
    worksheet.write(row, 5, 'DTO', boldStyle)
331
    worksheet.write(row, 5, 'DTO', boldStyle)
329
    worksheet.write(row, 6, 'DVOL', boldStyle)   
332
    worksheet.write(row, 6, 'DVOL', boldStyle)   
330
    worksheet.write(row, 7, 'DTV', boldStyle)
333
    worksheet.write(row, 7, 'DTV', boldStyle)
-
 
334
    worksheet.write(row, 8, 'DOWNVOL', boldStyle)
-
 
335
    worksheet.write(row, 9, 'DOWNVAL', boldStyle)
331
    for r in result:
336
    for r in result:
332
        row += 1
337
        row += 1
333
        column = 0
338
        column = 0
334
        for data in r :
339
        for data in r :
335
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
340
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
Line 340... Line 345...
340
    result = cursor.fetchall()
345
    result = cursor.fetchall()
341
    for r in result:
346
    for r in result:
342
        row += 1
347
        row += 1
343
        column = 1
348
        column = 1
344
        for data in r :
349
        for data in r :
345
            print "Data" + str(data)
-
 
346
            sumdata=sumdata+data
350
            sumdata=sumdata+data
347
            print "Sum Data" + str(sumdata)
-
 
348
            worksheet.write(row, column, int(sumdata) if type(sumdata) is float else sumdata, date_format if type(sumdata) is date else default_format)
351
            worksheet.write(row, column, int(sumdata) if type(sumdata) is float else sumdata, date_format if type(sumdata) is date else default_format)
349
            column += 1
352
            column += 1
350
 
353
 
351
    row = 0
354
    row = 0
352
    cursor.execute(dnruSql)
355
    cursor.execute(dnruSql)
Line 402... Line 405...
402
        result = cursor.fetchall()
405
        result = cursor.fetchall()
403
        for r in result:
406
        for r in result:
404
            quantity= r[0]   
407
            quantity= r[0]   
405
            if quantity is None:
408
            if quantity is None:
406
                quantity=0
409
                quantity=0
407
        print 'Total Sub order quantity', dateWiseOrderMap.get(x).count,' Flipkart Order', quantity
-
 
408
        worksheet.write(row,column,(dateWiseOrderMap.get(x).count)+quantity)
410
        worksheet.write(row,column,(dateWiseOrderMap.get(x).count)+quantity)
409
        column += 1
411
        column += 1
410
 
412
 
411
    row =0
413
    row =0
412
    for x in sorted(dateWiseOrderMap):
414
    for x in sorted(dateWiseOrderMap):
Line 421... Line 423...
421
            if quantity is None:
423
            if quantity is None:
422
                quantity=0
424
                quantity=0
423
        worksheet.write(row,column,(dateWiseOrderMap.get(x).value)+float(quantity))
425
        worksheet.write(row,column,(dateWiseOrderMap.get(x).value)+float(quantity))
424
        column += 1    
426
        column += 1    
425
        
427
        
-
 
428
    #For Saholic
-
 
429
    row=0
-
 
430
    cursor = conn.cursor()
-
 
431
    cursor.execute(datesql)
-
 
432
    result = cursor.fetchall()
-
 
433
    for x in sorted(dateWiseSaholicOrderMap):
-
 
434
        row=0
-
 
435
        for r in result:
-
 
436
            for data in r :
-
 
437
                row += 1
-
 
438
                z= to_x_date(x)
-
 
439
                if str(data).strip() == str(z).strip():
-
 
440
                    column = 8
-
 
441
                    worksheet.write(row,column,dateWiseSaholicOrderMap.get(x).count)
-
 
442
                    column += 1
-
 
443
                    
-
 
444
    for x in sorted(dateWiseSaholicOrderMap):
-
 
445
        row=0
-
 
446
        for r in result:
-
 
447
            for data in r :
-
 
448
                row += 1
-
 
449
                z= to_x_date(x)
-
 
450
                if str(data).strip() == str(z).strip():
-
 
451
                    column = 9
-
 
452
                    worksheet.write(row,column,dateWiseSaholicOrderMap.get(x).value)
-
 
453
                    column += 1
-
 
454
                                        
-
 
455
    
426
def generateMonthlyReport():
456
def generateMonthlyReport():
427
    monthSql = MONTH_QUERY
457
    monthSql = MONTH_QUERY
428
    mnruSql = MNRU_QUERY
458
    mnruSql = MNRU_QUERY
429
    mauSql = MAU_QUERY
459
    mauSql = MAU_QUERY
430
    mabSql = MAB_QUERY
460
    mabSql = MAB_QUERY
Line 452... Line 482...
452
    worksheet.write(row, 3, 'MAU', boldStyle)
482
    worksheet.write(row, 3, 'MAU', boldStyle)
453
    worksheet.write(row, 4, 'MAB', boldStyle)
483
    worksheet.write(row, 4, 'MAB', boldStyle)
454
    worksheet.write(row, 5, 'MTO', boldStyle)
484
    worksheet.write(row, 5, 'MTO', boldStyle)
455
    worksheet.write(row, 6, 'MVOL', boldStyle)
485
    worksheet.write(row, 6, 'MVOL', boldStyle)
456
    worksheet.write(row, 7, 'MTV', boldStyle)
486
    worksheet.write(row, 7, 'MTV', boldStyle)
-
 
487
    worksheet.write(row, 8, 'MOWNVOL', boldStyle)
-
 
488
    worksheet.write(row, 9, 'MOWNVAL', boldStyle)
457
    
489
    
458
    for r in result:
490
    for r in result:
459
        row += 1
491
        row += 1
460
        column = 0
492
        column = 0
461
        for data in r :
493
        for data in r :
Line 467... Line 499...
467
    result = cursor.fetchall()
499
    result = cursor.fetchall()
468
    for r in result:
500
    for r in result:
469
        row += 1
501
        row += 1
470
        column = 1
502
        column = 1
471
        for data in r :
503
        for data in r :
472
            print "Data" + str(data)
-
 
473
            sumdata=sumdata+data
504
            sumdata=sumdata+data
474
            print "Sum Data" + str(sumdata)
-
 
475
            worksheet.write(row, column, int(sumdata) if type(sumdata) is float else sumdata, date_format if type(sumdata) is date else default_format)
505
            worksheet.write(row, column, int(sumdata) if type(sumdata) is float else sumdata, date_format if type(sumdata) is date else default_format)
476
            column += 1
506
            column += 1
477
 
507
 
478
    row = 0
508
    row = 0
479
    cursor.execute(mnruSql)
509
    cursor.execute(mnruSql)
Line 532... Line 562...
532
        result = cursor.fetchall()
562
        result = cursor.fetchall()
533
        for r in result:
563
        for r in result:
534
            quantity= r[0]
564
            quantity= r[0]
535
            if quantity is None:
565
            if quantity is None:
536
                quantity=0
566
                quantity=0
537
        print 'Total Sub order quantity Monthly', dateWiseOrderMap.get(x).count,' Flipkart Order', quantity        
-
 
538
        worksheet.write(row,column,(monthWiseOrderMap.get(x).count)+quantity)
567
        worksheet.write(row,column,(monthWiseOrderMap.get(x).count)+quantity)
539
        column += 1
568
        column += 1
540
        
569
        
541
    row =0
570
    row =0
542
    for x in sorted(monthWiseOrderMap):
571
    for x in sorted(monthWiseOrderMap):
Line 551... Line 580...
551
        for r in result:
580
        for r in result:
552
            quantity= r[0]
581
            quantity= r[0]
553
            if quantity is None:
582
            if quantity is None:
554
                quantity=0
583
                quantity=0
555
        worksheet.write(row,column,(monthWiseOrderMap.get(x).value)+float(quantity))
584
        worksheet.write(row,column,(monthWiseOrderMap.get(x).value)+float(quantity))
556
        column += 1  
585
        column += 1
-
 
586
        
-
 
587
    row =0    
-
 
588
    for x in sorted(monthWiseSaholicOrderMap):
-
 
589
        row += 1
-
 
590
        column = 8
-
 
591
        worksheet.write(row,column,monthWiseSaholicOrderMap.get(x).count)
-
 
592
        column += 1
-
 
593
    row =0    
-
 
594
    for x in sorted(monthWiseSaholicOrderMap):
-
 
595
        row += 1
-
 
596
        column = 9
-
 
597
        worksheet.write(row,column,monthWiseSaholicOrderMap.get(x).value)
-
 
598
        column += 1
-
 
599
          
557
    workbook.save(TMP_FILE)
600
    workbook.save(TMP_FILE)
558
    sendmail(["manas.kapoor@shop2020.in","rajneesh.arora@saholic.com"], "", TMP_FILE, SUBJECT)
601
    #sendmail(["manas.kapoor@shop2020.in","rajneesh.arora@saholic.com"], "", TMP_FILE, SUBJECT)
559
    #sendmail(["manas.kapoor@shop2020.in"], "", TMP_FILE, SUBJECT)
602
    sendmail(["manas.kapoor@shop2020.in"], "", TMP_FILE, SUBJECT)
560
 
603
 
561
def generateWeeklyReport():
604
def generateWeeklyReport():
562
    weekSql = WEEK_QUERY
605
    weekSql = WEEK_QUERY
563
    wnruSql = WNRU_QUERY
606
    wnruSql = WNRU_QUERY
564
    wauSql = WAU_QUERY
607
    wauSql = WAU_QUERY
Line 587... Line 630...
587
    worksheet.write(row, 3, 'WAU', boldStyle)
630
    worksheet.write(row, 3, 'WAU', boldStyle)
588
    worksheet.write(row, 4, 'WAB', boldStyle)
631
    worksheet.write(row, 4, 'WAB', boldStyle)
589
    worksheet.write(row, 5, 'WTO', boldStyle)
632
    worksheet.write(row, 5, 'WTO', boldStyle)
590
    worksheet.write(row, 6, 'WVOL', boldStyle)
633
    worksheet.write(row, 6, 'WVOL', boldStyle)
591
    worksheet.write(row, 7, 'WTV', boldStyle)
634
    worksheet.write(row, 7, 'WTV', boldStyle)
-
 
635
    worksheet.write(row, 8, 'WOWNVOL', boldStyle)
-
 
636
    worksheet.write(row, 9, 'WOWNVAL', boldStyle)
592
   
637
   
593
    for r in result:
638
    for r in result:
594
        row += 1
639
        row += 1
595
        column = 0
640
        column = 0
596
        for data in r :
641
        for data in r :
Line 602... Line 647...
602
    result = cursor.fetchall()
647
    result = cursor.fetchall()
603
    for r in result:
648
    for r in result:
604
        row += 1
649
        row += 1
605
        column = 1
650
        column = 1
606
        for data in r :
651
        for data in r :
607
            print "Data" + str(data)
-
 
608
            sumdata=sumdata+data
652
            sumdata=sumdata+data
609
            print "Sum Data" + str(sumdata)
-
 
610
            worksheet.write(row, column, int(sumdata) if type(sumdata) is float else sumdata, date_format if type(sumdata) is date else default_format)
653
            worksheet.write(row, column, int(sumdata) if type(sumdata) is float else sumdata, date_format if type(sumdata) is date else default_format)
611
            column += 1
654
            column += 1
612
 
655
 
613
    row = 0
656
    row = 0
614
    cursor.execute(wnruSql)
657
    cursor.execute(wnruSql)
Line 665... Line 708...
665
        result = cursor.fetchall()
708
        result = cursor.fetchall()
666
        for r in result:
709
        for r in result:
667
            quantity= r[0]
710
            quantity= r[0]
668
            if quantity is None:
711
            if quantity is None:
669
                quantity=0
712
                quantity=0
670
        print 'Total Sub order quantity Weekly', dateWiseOrderMap.get(x).count,' Flipkart Order', quantity        
-
 
671
        worksheet.write(row,column,(weekWiseOrderMap.get(x).count)+quantity)
713
        worksheet.write(row,column,(weekWiseOrderMap.get(x).count)+quantity)
672
        column+=1
714
        column+=1
673
    row = 0
715
    row = 0
674
    for x in sorted(weekWiseOrderMap):
716
    for x in sorted(weekWiseOrderMap):
675
        row += 1
717
        row += 1
Line 684... Line 726...
684
            quantity= r[0]
726
            quantity= r[0]
685
            if quantity is None:
727
            if quantity is None:
686
                quantity=0
728
                quantity=0
687
        worksheet.write(row,column,(weekWiseOrderMap.get(x).value)+float(quantity))
729
        worksheet.write(row,column,(weekWiseOrderMap.get(x).value)+float(quantity))
688
        column+=1    
730
        column+=1    
689
 
731
    
-
 
732
    row=0
-
 
733
    for x in sorted(weekWiseSaholicOrderMap):
-
 
734
        row += 1
-
 
735
        column = 8
-
 
736
        worksheet.write(row,column,weekWiseSaholicOrderMap.get(x).count)
-
 
737
        column+=1
690
 
738
    
-
 
739
    row=0
-
 
740
    for x in sorted(weekWiseSaholicOrderMap):
-
 
741
        row += 1
-
 
742
        column = 9
-
 
743
        worksheet.write(row,column,weekWiseSaholicOrderMap.get(x).value)
-
 
744
        column+=1
-
 
745
        
691
def sendmail(email, message, fileName, title):
746
def sendmail(email, message, fileName, title):
692
    if email == "":
747
    if email == "":
693
        return
748
        return
694
    mailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
749
    mailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
695
    mailServer.ehlo()
750
    mailServer.ehlo()
Line 707... Line 762...
707
    fileMsg.set_payload(file(TMP_FILE).read())
762
    fileMsg.set_payload(file(TMP_FILE).read())
708
    encoders.encode_base64(fileMsg)
763
    encoders.encode_base64(fileMsg)
709
    fileMsg.add_header('Content-Disposition', 'attachment;filename=' + fileName)
764
    fileMsg.add_header('Content-Disposition', 'attachment;filename=' + fileName)
710
    msg.attach(fileMsg)
765
    msg.attach(fileMsg)
711
    
766
    
712
    MAILTO = ['manas.kapoor@saholic.com','rajneesh.arora@saholic.com']
767
    #MAILTO = ['manas.kapoor@saholic.com','rajneesh.arora@saholic.com']
713
    #MAILTO = ['manas.kapoor@saholic.com']
768
    MAILTO = ['manas.kapoor@saholic.com']
714
    mailServer.login(SENDER, PASSWORD)
769
    mailServer.login(SENDER, PASSWORD)
715
    mailServer.sendmail(PASSWORD, MAILTO, msg.as_string())
770
    mailServer.sendmail(PASSWORD, MAILTO, msg.as_string())
716
 
771
 
717
class __Order:
772
class __Order:
718
    
773
    
Line 843... Line 898...
843
            print counter+1
898
            print counter+1
844
            if monthCutOff > breakPoint:
899
            if monthCutOff > breakPoint:
845
                monthWiseOrderMap[init * 1000] = __Order(quantity, amount)
900
                monthWiseOrderMap[init * 1000] = __Order(quantity, amount)
846
                print "Breaking inner while"
901
                print "Breaking inner while"
847
                break 
902
                break 
-
 
903
 
-
 
904
def populateSaholicOrderMap():
-
 
905
    global dateWiseSaholicOrderMap
-
 
906
    allOrders = get_mongo_connection().Dtr.merchantOrder.find({'createdOnInt':{"$gte":cutOff},'storeId':{"$in":[4]}}).sort([('createdOnInt',pymongo.ASCENDING)])
-
 
907
    for orders in allOrders:
-
 
908
        if orders.get('orderId') not in order_ids:
-
 
909
            continue
-
 
910
        cdate = ((to_py_date(orders.get('createdOnInt') * 1000)))
-
 
911
        millisec = to_java_date(datetime(cdate.year, cdate.month, cdate.day))
-
 
912
        if dateWiseSaholicOrderMap.has_key(millisec):
-
 
913
            orderObj = dateWiseSaholicOrderMap.get(millisec)
-
 
914
            q, c = getSaholicSubOrderQuantity(orders.get('subOrders'))
-
 
915
            orderObj.count += q
-
 
916
            orderObj.value += c
-
 
917
        else:
-
 
918
            orderObj = __Order(None, None)
-
 
919
            q, c = getSaholicSubOrderQuantity(orders.get('subOrders'))
-
 
920
            orderObj.count = q
-
 
921
            orderObj.value = c 
-
 
922
            dateWiseSaholicOrderMap[millisec] = orderObj
-
 
923
            
-
 
924
    
-
 
925
            
-
 
926
def getSaholicSubOrderQuantity(subOrders):
-
 
927
    q = 0
-
 
928
    c = 0
-
 
929
    if subOrders is None:
-
 
930
        return q, c
-
 
931
    for subOrder in subOrders:
-
 
932
        q = q + int(subOrder.get('quantity'))
-
 
933
        try:
-
 
934
            c = c + float(subOrder.get('amountPaid').encode('utf-8'))
-
 
935
        except AttributeError:
-
 
936
            c = c + float(subOrder.get('amountPaid'))
-
 
937
    return q, c
-
 
938
 
-
 
939
def populateSaholicWeekWiseMap1():
-
 
940
    global newWeekCutOff
-
 
941
    while(True):
-
 
942
        if newWeekCutOff *1000 >= to_java_date(datetime.now()):
-
 
943
            break
-
 
944
        init = newWeekCutOff
-
 
945
        breakPoint = newWeekCutOff + (6 * oneDay)
-
 
946
        quantity, amount = 0 , 0
-
 
947
        while(True):
-
 
948
            orderObj = dateWiseSaholicOrderMap.get(newWeekCutOff * 1000)
-
 
949
            if orderObj is not None:
-
 
950
                quantity += orderObj.count
-
 
951
                amount += orderObj.value
-
 
952
            else:
-
 
953
                quantity +=0
-
 
954
                amount +=0
-
 
955
            newWeekCutOff = newWeekCutOff + oneDay
-
 
956
            if newWeekCutOff > breakPoint:
-
 
957
                weekWiseSaholicOrderMap[init * 1000] = __Order(quantity, amount)
-
 
958
                break 
-
 
959
 
-
 
960
def populateSaholicMonthWiseMap1():
-
 
961
    global newMonthCutOff
-
 
962
    while(True):
-
 
963
        
-
 
964
        print newMonthCutOff *1000
-
 
965
        a=str(to_py_date(newMonthCutOff*1000))
-
 
966
        print 'Now ' + str(to_java_date(datetime.now()))
-
 
967
        print "**********************"
-
 
968
        if newMonthCutOff *1000 >= to_java_date(datetime.now()):
-
 
969
            print "Breaking outer while"
-
 
970
            break
-
 
971
        init = newMonthCutOff
-
 
972
        breakPoint = newMonthCutOff + (monthMap.get(a[5:7]) * oneDay)
-
 
973
        print breakPoint
-
 
974
        quantity, amount = 0 , 0
-
 
975
        while(True):
-
 
976
            print to_py_date(newMonthCutOff*1000)
-
 
977
            print "weekCutOff ",newMonthCutOff
-
 
978
            print "breakPoint ",breakPoint
-
 
979
            orderObj = dateWiseSaholicOrderMap.get(newMonthCutOff * 1000)
-
 
980
            if orderObj is None:
-
 
981
                print "None for ", to_py_date(newMonthCutOff * 1000)
-
 
982
                quantity += 0
-
 
983
                amount += 0
-
 
984
            if orderObj is not None:
-
 
985
                quantity += orderObj.count
-
 
986
                amount += orderObj.value
-
 
987
            newMonthCutOff = newMonthCutOff + oneDay
-
 
988
            counter=0
-
 
989
            print counter+1
-
 
990
            if newMonthCutOff > breakPoint:
-
 
991
                monthWiseSaholicOrderMap[init * 1000] = __Order(quantity, amount)
-
 
992
                print "Breaking inner while"
-
 
993
                break 
-
 
994
 
848
            
995
            
849
def populateValidOrders():
996
def populateValidOrders():
850
    global order_ids
997
    global order_ids
851
    allOrders = session.query(Orders.id).join((Users,Orders.user_id==Users.id)).filter(or_(~(func.lower(Users.referrer)).like('emp%'),Users.utm_campaign != None)).all()
998
    allOrders = session.query(Orders.id).join((Users,Orders.user_id==Users.id)).filter(or_(~(func.lower(Users.referrer)).like('emp%'),Users.utm_campaign != None)).all()
852
    order_ids = list(zip(*allOrders)[0])
999
    order_ids = list(zip(*allOrders)[0])
Line 854... Line 1001...
854
def main():
1001
def main():
855
    populateValidOrders()
1002
    populateValidOrders()
856
    populateOrderMap()
1003
    populateOrderMap()
857
    populateWeekWiseMap1()
1004
    populateWeekWiseMap1()
858
    populateMonthWiseMap1()
1005
    populateMonthWiseMap1()
-
 
1006
    populateSaholicOrderMap()
-
 
1007
    populateSaholicWeekWiseMap1()
-
 
1008
    populateSaholicMonthWiseMap1()
859
    generateDailyReport()
1009
    generateDailyReport()
860
    generateWeeklyReport()
1010
    generateWeeklyReport()
861
    generateMonthlyReport()
1011
    generateMonthlyReport()
862
    
1012
    
-
 
1013
def to_x_date(java_timestamp):
-
 
1014
    try:
-
 
1015
        date = datetime.fromtimestamp(java_timestamp / 1e3)       
-
 
1016
    except:
-
 
1017
        return None
-
 
1018
    return date.strftime('%Y-%m-%d')
863
    
1019
    
864
if __name__ == '__main__':
1020
if __name__ == '__main__':
865
    main()
1021
    main()
866
1022