Subversion Repositories SmartDukaan

Rev

Rev 17274 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

namespace java in.shop2020.crm
namespace py shop2020.thriftpy.crm

include "GenericService.thrift"

enum TicketPriority {
    LOW = 0,
    HIGH = 1,
    MEDIUM = 2
}

enum TicketStatus {
    OPEN = 0,
    CLOSED = 1,
    REOPEN = 2
}

enum TicketCategory {
    RETURN_FORM = 1,
    ORDER_CANCELLATION = 2,
    DELIVERY_PROBLEM = 3,
    PAYMENT_STATUS = 4,
    ORDER_STATUS = 5,
    PRODUCT_REQUEST = 6,
    RECHARGE_RELATED = 7,
    OTHER = 8,
    COD_VERIFICATION = 9,
    FAILED_PAYMENTS = 10,
    DELAYED_DELIVERY = 11,
    PAYMENT_FLAGGED = 12,
    DOA_RECEIVED = 13,
    PRODUCT_PROCUREMENT = 14,
    UNDELIVERED = 15,
    CATEGORY = 16,
    STORE_PICKUP = 17,
    ON_TIME_GUARANTEE = 18,
    LOW_INVENTORY_CANCELLED_ORDERS = 19,
    //Start:- Added By Manish Sharma for Creating a new Ticket: Category- RTO Refund on 21-Jun-2013
    RTO_REFUND = 20,
    //End:- Added By Manish Sharma for Creating a new Ticket: Category- RTO Refund on 21-Jun-2013
    Bulk_Order_ENQUIRY = 21,
    PROFITMANDI_FEEDBACK = 22,
    PROFITMANDI_ORDER_NOT_SEEN = 23,
    PROFITMANDI_CASHBACK = 24,
    PROFITMANDI_RECHARGE_ISSUE = 25,
    PROFITMANDI_OTHER = 26,
    PROFITMANDI_ORDER_TRACKING_ISSUE = 27,
    PROFITMANDI_REFUND_PROBLEM=28,
    PROFITMANDI_TECHNICAL_PROBLEM=29,
    PROFITMANDI_PRODUCT_ISSUE=30,
    PROFITMANDI_DELAYED_DELIVERY=31    
}

enum ActivityType {
    SEND_EMAIL_TO_CUSTOMER = 1,
    RECEIVED_EMAIL_FROM_CUSTOMER = 2,
    CALLED_CUSTOMER = 3,
    RECEIVED_CALL_FROM_CUSTOMER = 4,
    OTHER = 5,
    ESCALATE_TICKET = 6,
    PROFITMANDI_CRM_APP_TICKET=7
}

struct Agent {
    1:i64 id,
    2:string name,
    3:string emailId,
    4:optional i64 managerId,
    5:string password,
    6:bool is_active,
    7:bool is_pmCrmUser,
    8:bool is_allAssignable;
}

struct Ticket {
    1:i64 id,
    2:optional i64 customerId,
    3:i64 openDate,
    4:optional i64 closeDate,
    5:optional string description,
    6:TicketPriority priority,
    7:TicketCategory category,
    8:TicketStatus status,
    9:optional i64 assigneeId,
   10:i64 creatorId,
   11:optional i64 orderId,
   12:optional string airwayBillNo,
   13:optional string productName,

   // used for un-registered users
   14:optional string customerMobileNumber,
   15:optional string customerEmailId,
   16:optional string customerName
}

struct Activity {
    1:i64 id,
    2:optional string description,
    3:i64 creationTimestamp, // represents time at which this activity occurred
    4:ActivityType type,
    5:optional i64 customerId, // used for registered users
    6:i64 creatorId,

    // represents the numeric identifier for the emails sent to customers
    // These are archived in helper..useremailarchive or helper..useremail
    7:optional i64 userEmailId,

    // ticket related fields to track changes on ticket fields
    8:optional i64 ticketId,
    9:optional TicketPriority ticketPriority,
   10:optional i64 ticketAssigneeId,
   11:optional TicketStatus ticketStatus,
   12:optional TicketCategory ticketCategory,
   13:optional string ticketDescription,

   // Activities created as part of mails received from customers
   // have to be explicitly marked as read by agents in CRM.
   // This flag is set over such activities when any agent marks it as read!
   14:optional bool isRead,

   // used for un-registered users
   15:optional string customerMobileNumber,
   16:optional string customerEmailId,
   17:optional string customerName,

   // used for attachments name separated by semicolon
   18:optional string attachments
}

struct SearchFilter {
    1:optional i64 ticketId,
    2:optional i64 activityId,
    3:optional list<i64> ticketAssigneeIds,
    4:optional list<i64> activityCreatorIds,
    5:optional i64 agentId,
    6:optional i64 customerId,
    7:optional i64 startTimestamp,
    8:optional i64 endTimestamp,
    9:optional bool isActivityRead,
   10:optional string agentEmailId,
   11:optional string customerEmailId,
   12:optional string customerMobileNumber,
   13:optional list<TicketStatus> ticketStatuses,
   14:optional TicketCategory ticketCategory,
   15:optional TicketPriority ticketPriority,
   16:optional ActivityType activityType,
   17:optional list<TicketCategory> ticketCategoryList,
   18:optional bool notShowPmTickets
}

exception CRMServiceException {
    1:GenericService.ExceptionType exceptionType,
    2:string message
}

service CRMService extends GenericService.GenericService{
    // Methods to read/write tickets from/in database
    list<Ticket> getTickets(1:SearchFilter searchFilter);
    list<Ticket> getUnassignedTickets();
    void updateTicket(1:Ticket ticket, 2:Activity activity);
    i64 insertTicket(1:Ticket ticket, 2:Activity activity);
    void unassignAgentTickets(1:i32 assigneeId);

    // Methods to read/write activities from/in database
    list<Activity> getActivities(1:SearchFilter searchFilter);
    i64 insertActivity(1:Activity activity);
    void markAsRead(1:i64 activityId, 2:i64 agentId);

    // Methods to read agent information
    list<Agent> getAgents(1:SearchFilter searchFilter);
    list<Agent> getInactiveAgents(1:SearchFilter searchFilter);
    void updatePasswordForAgent(1:string agentEmailId, 2:string password);

    // Methods to read roles and permissions information
    list<string> getRoleNamesForAgent(1:string agentEmailId);
    list<string> getPermissionsForRoleName(1:string roleName);

    // Misc methods
    i64 getLastEmailProcessedTimestamp();
    void updateLastEmailProcessedTimestamp(1:i64 timestamp);
    
    // Method to change active/inactive status of Agent
    void changeAgentStatus(1:bool status, 2:string emailId);
    
    //Method to add a new CRM Agent 
    void insertAgent(1:Agent agent, 2:list<string> role);
    
    //Method to change CRM agent role
    void changeAgentRole(1:i64 id, 2:list<string> role);
    
    //Method to get openTicketCount for any agent
    i32 getOpenTicketCountForAgent(1:i64 agentId);
    
    //Method to get all open tickets grouped by categories
    map<string,i64> getOpenTicketsMap();
    
    //Method to get Required Data Map for Fedex Reconciliation
    map<string,string> getFedexReconciliationDataMap(1:list<i64> order_ids, string method_key);
}