Subversion Repositories SmartDukaan

Rev

Rev 16323 | Blame | Compare with Previous | Last modification | View Log | RSS feed

#!/usr/bin/python
from elixir import *
from dtr.storage import DataService 
from dtr.storage.DataService import Feedbacks, Users
from shop2020.clients.CRMClient import CRMClient
from shop2020.clients.UserClient import UserClient
from shop2020.utils.Utils import to_java_date, to_py_date
from shop2020.thriftpy.crm.ttypes import SearchFilter, TicketCategory, Ticket, \
    Activity, TicketPriority, TicketStatus, ActivityType
from string import Template
import sys
import traceback

DataService.initialize(db_hostname='192.168.158.89')
customerFeedbacks = []

class __Feedback:
    def __init__(self, feedbackObj, userObj):
        self.id = feedbackObj.id
        self.user_id = feedbackObj.user_id
        self.email = feedbackObj.email
        self.subject = feedbackObj.subject
        self.message = feedbackObj.message
        self.created = to_java_date(feedbackObj.created)
        self.mobile = userObj.mobile_number
        self.customerName = userObj.first_name +' '+ userObj.last_name

def getAllFeedbacks():
    global customerFeedbacks
    feedbacksAndUsers = session.query(Users,Feedbacks).join((Feedbacks,Users.id==Feedbacks.user_id)).filter(Feedbacks.isTicketCreated==False).all()
    for feedbackNUser in feedbacksAndUsers:
        feedback = feedbackNUser[1]
        user = feedbackNUser[0]
        feedbackInfo = __Feedback(feedback, user)
        customerFeedbacks.append(feedbackInfo)
        
def createTicketsForCustomerQueries(customerFeedbacks):
    crmServiceClient = CRMClient().get_client()
    userServiceClient = UserClient().get_client()
    for customerFeedBack in customerFeedbacks:
        ticket = Ticket()
        activity = Activity()
        ticket.creatorId = 1
        user = userServiceClient.getUserByEmail(customerFeedBack.email)
        if 'Cant see my order' in customerFeedBack.subject:
            ticket.category = TicketCategory.PROFITMANDI_ORDER_NOT_SEEN
            ticket.priority = TicketPriority.HIGH
        elif 'Cashback' in customerFeedBack.subject:
            ticket.category = TicketCategory.PROFITMANDI_CASHBACK
            ticket.priority = TicketPriority.HIGH
        elif 'Feedback' in customerFeedBack.subject:
            ticket.category = TicketCategory.PROFITMANDI_FEEDBACK
            ticket.priority = TicketPriority.MEDIUM
        elif 'Recharge Related' in customerFeedBack.subject:
            ticket.category = TicketCategory.PROFITMANDI_RECHARGE_ISSUE
            ticket.priority = TicketPriority.HIGH
        else:
            ticket.category = TicketCategory.PROFITMANDI_OTHER
            ticket.priority = TicketPriority.MEDIUM
        ticket.description = 'User Specified Subject :- '+ customerFeedBack.subject + ' | ' +  customerFeedBack.message
        ticket.customerEmailId = customerFeedBack.email
        if user is not None and user.userId !=-1:
            ticket.customerId = user.userId
        ticket.status = TicketStatus.OPEN
        ticket.openDate = customerFeedBack.created
        ticket.customerMobileNumber = customerFeedBack.mobile
        ticket.customerName = customerFeedBack.customerName
        
        activity.creatorId = 1
        activity.ticketAssigneeId = ticket.assigneeId
        activity.type = ActivityType.RECEIVED_EMAIL_FROM_CUSTOMER
        activity.description = 'User Specified Subject :- '+ customerFeedBack.subject + ' | ' +  customerFeedBack.message
        activity.ticketCategory = ticket.category
        activity.ticketDescription = ticket.description
        activity.ticketPriority = ticket.priority
        activity.ticketStatus = ticket.status
        activity.customerEmailId = customerFeedBack.email
        if user is not None and user.userId !=-1:
            activity.customerId  = user.userId
        activity.customerName = customerFeedBack.customerName
        activity.customerMobileNumber = customerFeedBack.mobile
        activity.creationTimestamp = customerFeedBack.created
        activity.customerEmailId= customerFeedBack.email
        
        if not crmServiceClient.isAlive():
            crmServiceClient = CRMClient().get_client()
        
        ticketId = crmServiceClient.insertTicket(ticket, activity)
        
        if ticketId >0:
            feedback = Feedbacks.get_by(id = customerFeedBack.id)
            feedback.isTicketCreated = True
            session.commit()
        

def main():
    try:
        getAllFeedbacks()
        createTicketsForCustomerQueries(customerFeedbacks)
    finally:
        session.close()

if __name__ == '__main__':
    main()