Subversion Repositories SmartDukaan

Rev

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

Rev 5677 Rev 5791
Line 9... Line 9...
9
'''
9
'''
10
import xlwt
10
import xlwt
11
import datetime
11
import datetime
12
from optparse import OptionParser
12
from optparse import OptionParser
13
from textwrap import dedent
13
from textwrap import dedent
14
 
-
 
15
 
-
 
-
 
14
import traceback
-
 
15
from shop2020.clients.TransactionClient import TransactionClient
-
 
16
from mx.DateTime.DateTime import TimeDelta
16
 
17
 
17
if __name__ == '__main__' and __package__ is None:
18
if __name__ == '__main__' and __package__ is None:
18
    import sys
19
    import sys
19
    import os
20
    import os
20
    sys.path.insert(0, os.getcwd())
21
    sys.path.insert(0, os.getcwd())
21
 
22
 
-
 
23
from shop2020.clients.CRMClient import CRMClient
22
from shop2020.model.v1.order.impl import DataService
24
from shop2020.model.v1.order.impl import DataService
23
from shop2020.model.v1.order.impl.DataService import Order
25
from shop2020.model.v1.order.impl.DataService import Order, Attribute
24
from shop2020.thriftpy.model.v1.order.ttypes import OrderStatus
26
from shop2020.thriftpy.model.v1.order.ttypes import OrderStatus
25
from shop2020.clients.LogisticsClient import LogisticsClient
27
from shop2020.clients.LogisticsClient import LogisticsClient
26
from shop2020.thriftpy.logistics.ttypes import PickupStore, DeliveryType
28
from shop2020.thriftpy.logistics.ttypes import PickupStore, DeliveryType
27
from shop2020.clients.CatalogClient import CatalogClient
29
from shop2020.clients.CatalogClient import CatalogClient
28
from shop2020.utils.EmailAttachmentSender import mail, get_attachment_part
30
from shop2020.utils.EmailAttachmentSender import mail, get_attachment_part
-
 
31
from shop2020.thriftpy.crm.ttypes import Ticket, Activity, TicketCategory, TicketStatus, TicketPriority, ActivityType, SearchFilter
-
 
32
 
-
 
33
 
-
 
34
 
-
 
35
def createCrmTicket(order):
-
 
36
    try :
-
 
37
        cc = CRMClient().get_client()
-
 
38
        searchFilter = SearchFilter()
-
 
39
        searchFilter.ticketCategory = TicketCategory.STORE_PICKUP
-
 
40
        searchFilter.ticketStatuses = [TicketStatus.OPEN]
-
 
41
        tickets = cc.getTickets(searchFilter)
-
 
42
        
-
 
43
        ticketPresent = False
-
 
44
        for ticket in tickets :
-
 
45
            if ticket.orderId == order.id :
-
 
46
                ticketPresent = True
-
 
47
        if ticketPresent :
-
 
48
            return
-
 
49
        
-
 
50
        createTicket = True
-
 
51
        tc = TransactionClient().get_client()
-
 
52
        attributes = tc.getAllAttributesForOrderId(order.id)
-
 
53
        for attribute in attributes :
-
 
54
            if attribute.name == "pickupExtension" :
-
 
55
                expiryDate = datetime.datetime.strptime(order.delivery_timestamp, "%Y-%m-%d %H-%M-%S") + datetime.timedelta(days = 3) + datetime.timedelta(days = int(attribute.value))
-
 
56
                now = datetime.datetime.now()
-
 
57
                if expiryDate - now > datetime.timedelta(days = 2) :
-
 
58
                    createTicket = False
-
 
59
        
-
 
60
        if not createTicket:
-
 
61
            return
-
 
62
        
-
 
63
        ticket = Ticket()
-
 
64
        activity = Activity()
-
 
65
        ticket.category = TicketCategory.STORE_PICKUP
-
 
66
        ticket.customerEmailId = order.customer_email
-
 
67
        ticket.customerId = order.customer_id
-
 
68
        ticket.customerMobileNumber = order.customer_mobilenumber
-
 
69
        ticket.customerName = order.customer_name
-
 
70
        ticket.description = "Consignment not picked up yet. "
-
 
71
        ticket.orderId = order.id
-
 
72
        ticket.creatorId = 1
-
 
73
        ticket.priority = TicketPriority.HIGH
-
 
74
        ticket.status = TicketStatus.OPEN
-
 
75
        
-
 
76
        activity.creatorId = 1
-
 
77
        activity.ticketAssigneeId = ticket.assigneeId
-
 
78
        activity.type = ActivityType.OTHER
-
 
79
        activity.description = "Creating Ticket"
-
 
80
        activity.ticketCategory = ticket.category
-
 
81
        activity.ticketDescription = ticket.description
-
 
82
        activity.ticketPriority = ticket.priority
-
 
83
        activity.ticketStatus = ticket.status
-
 
84
        activity.customerEmailId = order.customer_email
-
 
85
        activity.customerId = order.customer_id
-
 
86
        activity.customerMobileNumber = order.customer_mobilenumber
-
 
87
        activity.customerName = order.customer_name
-
 
88
        
-
 
89
        cc.insertTicket(ticket, activity)
-
 
90
        
-
 
91
    except:
-
 
92
        print "Some issue while creating crm ticket for order :" + str(order.id)
-
 
93
        traceback.print_exc()
29
 
94
 
30
 
95
 
31
def process_pickup_store_returns():
96
def process_pickup_store_returns():
32
    DataService.initialize(db_hostname="192.168.190.114", echoOn=True)
97
    DataService.initialize(db_hostname="192.168.190.114", echoOn=True)
-
 
98
    DataService.initialize(db_hostname="localhost", echoOn=True)
-
 
99
    to_date = datetime.datetime.today() + datetime.timedelta(days = -3)
-
 
100
    orders = Order.query.filter(Order.pickupStoreId > 0).filter(Order.status == OrderStatus.RECEIVED_AT_STORE).filter(Order.delivery_timestamp <= to_date).all()
-
 
101
    for order in orders:
-
 
102
        createCrmTicket(order)
-
 
103
    
33
    to_date = datetime.datetime.today() + datetime.timedelta(days = -5)
104
    to_date = datetime.datetime.today() + datetime.timedelta(days = -5)
34
    logistics_store_order_mapping = {}
105
    logistics_store_order_mapping = {}
35
    orders = Order.query.filter(Order.pickupStoreId > 0).filter(Order.delivery_timestamp <= to_date).order_by(Order.pickupStoreId).order_by(Order.logistics_provider_id).order_by(Order.warehouse_id).all()
106
    orders = Order.query.filter(Order.pickupStoreId > 0).filter(Order.status == OrderStatus.RECEIVED_AT_STORE).filter(Order.delivery_timestamp <= to_date).order_by(Order.pickupStoreId).order_by(Order.logistics_provider_id).order_by(Order.warehouse_id).all()
36
    for order in orders:
107
    for order in orders:
-
 
108
        attribute = Attribute.query.filter(Attribute.orderId == order.id).filter(Attribute.name == "pickupExtension").first()
-
 
109
        expiry = order.delivery_timestamp + datetime.timedelta(days = 5) + datetime.timedelta(days = int(attribute.value)) 
-
 
110
        if expiry > datetime.datetime.today() :
-
 
111
            continue        
37
        if logistics_store_order_mapping.has_key(order.pickupStoreId, order.logistics_provider_id, order.warehouse_id):
112
        if logistics_store_order_mapping.has_key(order.pickupStoreId, order.logistics_provider_id, order.warehouse_id):
38
            logistics_store_order_mapping.get(order.pickupStoreId, order.logistics_provider_id, order.warehouse_id).append(order.id)
113
            logistics_store_order_mapping.get(order.pickupStoreId, order.logistics_provider_id, order.warehouse_id).append(order.id)
39
        else:
114
        else:
40
            logistics_store_order_mapping[order.pickupStoreId, order.logistics_provider_id, order.warehouse_id] = [order.id]
115
            logistics_store_order_mapping[order.pickupStoreId, order.logistics_provider_id, order.warehouse_id] = [order.id]
41
        order.status = OrderStatus.RET_PICKUP_REQUEST_RAISED
116
        order.status = OrderStatus.RET_PICKUP_REQUEST_RAISED
42
        order.statusDescription = "Return request raised"
117
        order.statusDescription = "Return request raised"
43
    session.commit()
118
    session.commit()
44
    
119
    
45
    lclient = LogisticsClient().get_client()
120
    lclient = LogisticsClient().get_client()
46
    cclient = CatalogClient().get_client()
121
    cclient = CatalogClient().get_client()
47
    for key in logistics_store_order_mapping.iterkeys():
122
    for key in logistics_store_order_mapping.keys():
48
        provider = lclient.getProvider(key[1])
123
        provider = lclient.getProvider(key[1])
49
        to_addr = provider.details[DeliveryType.PREPAID].email
124
        to_addr = provider.details[DeliveryType.PREPAID].email
50
        pickupStore = lclient.getPickupStore(key[0])
125
        pickupStore = lclient.getPickupStore(key[0])
51
        warehouse = cclient.getWarehouse(key[2])
126
        warehouse = cclient.getWarehouse(key[2])
52
        subject = "Pickup request from " + pickupStore.city
127
        subject = "Pickup request from " + pickupStore.city