def import_departments(self, cr, uid, ids, context=None): dept_pool = self.pool.get('kayako.department') klog = self.pool.get('kayako.logs') sobj = self.browse(cr, uid, ids[0]) kayako_obj = KayakoAPI(sobj.api_url, sobj.api_key, sobj.secret_key) departments = kayako_obj.get_all(Department) for dept in departments: dept_ids = dept_pool.search(cr, uid, [('kayako_id', '=', dept.id)]) if not dept_ids: dept_pool.create(cr, uid, {'name' : dept.title, 'kayako_id' : dept.id}) klog.create(cr, uid, {'config_id' : sobj.id, 'message': "Departments Synced: " + ", ".join([x.title for x in departments])}) return True
def import_ticket_status(self, cr, uid, ids, context=None): ptt_pool = self.pool.get('project.task.type') klog = self.pool.get('kayako.logs') sobj = self.browse(cr, uid, ids[0]) existing_type_ids = ptt_pool.search(cr,uid,[('kayako_id','=',False)]) if existing_type_ids: raise osv.except_osv(_("Can not Proceed!"), _("First delete all default stages ")) kayako_obj = KayakoAPI(sobj.api_url, sobj.api_key, sobj.secret_key) states = kayako_obj.get_all(TicketStatus) for state in states: type_ids = ptt_pool.search(cr, uid, [('kayako_id', '=', state.id)]) if not type_ids: ptt_pool.create(cr, uid, {'name' : state.title, 'kayako_id' : state.id, 'sequence' : state.displayorder}) klog.create(cr, uid, {'config_id' : sobj.id, 'message': "Ticket Status Synced: " + ", ".join([x.title for x in states])}) return True
APIKEYS = 'APIKEYS.TXT' APIKEYS = path + APIKEYS ak = open(APIKEYS, 'r') lines = ak.readlines() for i in range(len(lines)): lines[i] = lines[i].strip("\n") API_URL = lines[0] API_KEY = lines[1] SECRET_KEY = lines[2] api = KayakoAPI(API_URL, API_KEY, SECRET_KEY) tickets = api.get_all(Ticket, 5, ticketstatusid=4) ticketcount = len(tickets) if first == True: previous = ticketcount new = '' if ticketcount == previous + 1: new = '1' elif ticketcount == previous + 2: new = '2' elif ticketcount == previous + 3: new = '3' elif ticketcount == previous + 4: new = '4' elif ticketcount == previous + 5: new = '5'
def import_ticket(self, cr, uid, ids, context=None): task_pool = self.pool.get('project.task') ttype_pool = self.pool.get('project.task.type') project_pool = self.pool.get('project.project') partner_pool = self.pool.get('res.partner') klog = self.pool.get('kayako.logs') sobj = self.browse(cr, uid, ids[0]) if not sobj.ticket_state: raise osv.except_osv(_("Can not Proceed!"), _("Missing Tickets status in configuration!")) if not sobj.department_id: raise osv.except_osv(_("Can not Proceed!"), _("Missing Department in configuration!")) kayako_obj = KayakoAPI(sobj.api_url, sobj.api_key, sobj.secret_key) # UPDATE STATUS BACK TO KAYAKO FIRST update_task_ids = task_pool.search(cr, uid, [('update_state','=',True)]) klog.create(cr, uid, {'config_id':sobj.id, 'message': " %s Tickets to update back to kayako ..." %(len(update_task_ids))}) for task in task_pool.browse(cr, uid, update_task_ids): ticket = kayako_obj.get(Ticket, task.kayako_ticket_id) if ticket: _logger.warning('Ticket %s : Status ID %s' %(ticket.displayid, ticket.statusid)) if ticket.statusid != task.kayako_config_id.export_state.kayako_id: ticket.ticketstatusid = task.kayako_config_id.export_state and task.kayako_config_id.export_state.kayako_id ticket.save() response = save_status(sobj.api_url, sobj.api_key, sobj.secret_key, ticket.id, task.kayako_config_id.export_state.kayako_id) if response and response.code == 200: klog.create(cr, uid, {'config_id':sobj.id, 'message': "Invoiced Ticket Updated ..."+ str(ticket.id)+" "+str(ticket.displayid)}) task.write({'update_state':False, 'stage_id' : task.kayako_config_id.export_state.id }) else: klog.create(cr, uid, {'config_id':sobj.id, 'message': "Invoiced Ticket Update Fail ..."+ str(ticket.id)+" "+str(ticket.displayid)}) else: task.write({'update_state':False, 'stage_id' : task.kayako_config_id.export_state.id}) # Start Import tickets = kayako_obj.get_all(Ticket, sobj.department_id.kayako_id, ticketstatusid=sobj.ticket_state.kayako_id) if not tickets: _logger.warning('No Tickets to download') kayako_ticket_ids = [] if tickets: worker_staff = kayako_obj.get_all(Staff) for ticket in tickets: ticket_handle = str(ticket.id) + " " + str(ticket.displayid) kayako_ticket_ids.append(ticket.id) task_exists = task_pool.search(cr, uid, [('kayako_ticket_id', '=', ticket.id)]) if task_exists: task_val = {} task = task_pool.browse(cr, uid, task_exists[0]) if task.name != ticket.subject: task_val['name'] = ticket.subject if task.stage_id.id != sobj.ticket_state.id: task_val['stage_id'] = sobj.ticket_state.id user = kayako_obj.get(User, ticket.userid) if not user.userorganizationid: klog.create(cr, uid, {'config_id':sobj.id, 'message': "Organization is missing, Update aborted..."+ str(ticket.id)+" "+str(ticket.displayid)}) continue customer_data = kayako_obj.get(UserOrganization, user.userorganizationid) customer_ids = partner_pool.search(cr, uid, [('name','=', customer_data.name)]) if not customer_ids: klog.create(cr, uid, {'config_id':sobj.id, 'message': "Organization is not found, Update aborted... - Ticket: %s" + str(ticket.id) + " " + str(ticket.displayid) }) continue elif task.project_id.partner_id.id != customer_ids[0]: task_val['partner_id'] = customer_ids[0] project_ids = project_pool.search(cr,uid,[('partner_id','=',customer_ids[0])]) if project_ids: task_val['project_id'] = project_ids[0] if task_val: task_pool.write(cr, uid, [task_exists[0]], task_val) klog.create(cr, uid, {'config_id':sobj.id, 'message': "Ticket Updated : " + str(ticket.id) + " " + str(ticket.displayid) }) else: klog.create(cr, uid, {'config_id':sobj.id, 'message': "Ticket Update - No Change : " + str(ticket.id) + " " + str(ticket.displayid) }) if ticket.timetracks: for timetrack in ticket.timetracks: hours = round(float(timetrack.timespent) / 3600,2) work_ids = self.pool.get('project.task.work').search(cr, uid, [('kayako_timetrack_id','=', timetrack.id)]) work_line = { 'name' : timetrack.contents, 'task_id' : task_exists[0], 'user_id' : self.get_staff_user(cr, uid, worker_staff, timetrack.workerstaffid) or 1, 'date' : str(timetrack.worktimeline) or False, 'hours' : hours, 'kayako_timetrack_id':timetrack.id } if not work_ids: self.pool.get('project.task.work').create(cr, uid, work_line) else: self.pool.get('project.task.work').write(cr, uid, work_ids, work_line) continue # FROM HERE ON -- IF TASK IS NOT EXISTS user = kayako_obj.get(User, ticket.userid) if not user.userorganizationid: klog.create(cr, uid, {'config_id':sobj.id, 'message': "Organization is missing, Skipped..."+ str(ticket.id)+" "+str(ticket.displayid)}) continue user_email=(user.email)[0] inactive_taskid = task_pool.search(cr, uid, [('kayako_ticket_id', '=', ticket.id),('active', '=', False)]) if inactive_taskid: self.pool.get('project.task').write(cr, uid,inactive_taskid, {'active':True,'stage_id':stage_id}) continue partner_ids = partner_pool.search(cr, uid, [('name','=', user.fullname)]) if partner_ids: partner_id = partner_ids[0] partner = partner_pool.browse(cr, uid, partner_id) if not partner.parent_id: customer_data = kayako_obj.get(UserOrganization, user.userorganizationid) klog.create(cr, uid, {'config_id':sobj.id, 'message': "User (%s) Exists, User's Organization (%s) missing, Skipped... - Ticket: %s" %(user.fullname, customer_data.name, ticket_handle)}) continue else: customer_id = partner.parent_id.id elif sobj.create_user: customer_data = kayako_obj.get(UserOrganization, user.userorganizationid) customer_ids = partner_pool.search(cr, uid, [('name','=', customer_data.name)]) if not customer_ids: klog.create(cr, uid, {'config_id':sobj.id, 'message': "User (%s) and Organization (%s), both missing, Skipped... - Ticket: %s" %(user.fullname, customer_data.name, ticket_handle) }) continue else: customer_id = customer_ids[0] partner_id = partner_pool.create(cr, uid, {'name': user.fullname, 'email' : user_email, 'is_company': False, 'parent_id':customer_id, 'kayako_user_id':ticket.userid }) else: klog.create(cr, uid, {'config_id':sobj.id, 'message': "User is missing, Skipped..."+ str(ticket.id)+" "+str(ticket.displayid)}) continue print "Customer IDS", customer_id project_ids = project_pool.search(cr, uid, [('partner_id','=', customer_id)]) if not project_ids: customer = partner_pool.browse(cr, uid, customer_id) project_id = project_pool.create(cr, uid, { 'name' : customer.name, 'partner_id' : customer.id}) else: project_id = project_ids[0] task_vals = { 'project_id' : project_id, 'name' : ticket.subject, 'partner_id' : partner_id, 'kayako_ticket_id' : ticket.id, 'kayako_ticket_displayid' : ticket.displayid, 'kayako_config_id' :sobj.id, 'stage_id' :sobj.ticket_state.id } task_id = task_pool.create(cr, uid, task_vals) if ticket.timetracks: for timetrack in ticket.timetracks: hours = round(float(timetrack.timespent) / 3600,2) self.pool.get('project.task.work').create(cr, uid, { 'name' : timetrack.contents, 'task_id' : task_id, 'user_id' : self.get_staff_user(cr, uid, worker_staff, timetrack.workerstaffid) or 1, 'date' : str(timetrack.worktimeline) or False, 'hours' : hours, 'kayako_timetrack_id':timetrack.id }) klog.create(cr, uid, {'config_id':sobj.id, 'message': "Ticket Created Successfully :" +str(ticket.id)+" "+str(ticket.displayid)}) # Update moved status tickets - moved_task_ids = task_pool.search(cr, uid, [('kayako_ticket_id', 'not in', kayako_ticket_ids), ('stage_id', '=', sobj.ticket_state.id), ('invoiced', '!=', True)]) klog.create(cr, uid, {'config_id':sobj.id, 'message': "Checking/Updating Status of %s Tickets" %(len(moved_task_ids))}) if moved_task_ids: tt_status_map = dict( [ (tt.kayako_id, tt.id) for tt in ttype_pool.browse(cr, uid, ttype_pool.search(cr, uid, [])) if tt.kayako_id ] ) for moved_task in task_pool.browse(cr, uid, moved_task_ids): mv_ticket = kayako_obj.get(Ticket, moved_task.kayako_ticket_id) if moved_task.stage_id.id != tt_status_map[mv_ticket.statusid]: moved_task.write({ 'stage_id' : tt_status_map[mv_ticket.statusid] }) klog.create(cr, uid, {'config_id':sobj.id, 'message': "Ticket Status Updated (Moved Tickets) :" +str(mv_ticket.id)+" "+str(mv_ticket.displayid)}) return True
auth_token = "08eee0fc2c0bebf2132ddeaaaf173576" # Your Auth Token from www.twilio.com/console client = Client(account_sid, auth_token) message = client.messages.create(to="+14232404107", from_="+14232914011", body="A new support ticket is available!") print(message.sid) """ """ if "totalunresolveditems" in line[x]: sep = 'totalunresolveditems=' unresolved = line[n].split(sep, 1)[1] for dig in range(len(unresolved)): if unresolved[dig].isdigit() == False: unresolved[dig] = '' """ #from kayako import Ticket, TicketAttachment, TicketNote, TicketPost, TicketPriority, TicketStatus, TicketType from kayako import KayakoAPI API_URL = 'https://support.fused.com/api/' API_KEY = '0b85616f-556b-8234-6146-acafbe3d5552' SECRET_KEY = 'NDMwMGFiZDEtZmJiMC02NDE0LTE5MjMtNDJlMzI4MzExNmViODE2ZjUwMzMtMDA0Ny1lMmE0LTI5OGItZTg5ZjI1M2NkZTFh' api = KayakoAPI(API_URL, API_KEY, SECRET_KEY) print(api.get_all(TicketCount)) #print(api.get_all(Ticket, 5, ticketstatusid=4))
""" if "totalunresolveditems" in line[x]: sep = 'totalunresolveditems=' unresolved = line[n].split(sep, 1)[1] for dig in range(len(unresolved)): if unresolved[dig].isdigit() == False: unresolved[dig] = '' """ #from kayako import Ticket, TicketAttachment, TicketNote, TicketPost, TicketPriority, TicketStatus, TicketType from kayako import KayakoAPI API_URL = 'https://support.fused.com/api/' API_KEY = '0b85616f-556b-8234-6146-acafbe3d5552' SECRET_KEY = 'NDMwMGFiZDEtZmJiMC02NDE0LTE5MjMtNDJlMzI4MzExNmViODE2ZjUwMzMtMDA0Ny1lMmE0LTI5OGItZTg5ZjI1M2NkZTFh' api = KayakoAPI(API_URL, API_KEY, SECRET_KEY) print(api.get_all(TicketCount)) #print(api.get_all(Ticket, 5, ticketstatusid=4))
first = True APIKEYS = 'APIKEYS.TXT' APIKEYS = path + APIKEYS ak = open(APIKEYS, 'r') lines = ak.readlines() for i in range(len(lines)): lines[i] = lines[i].strip("\n") API_URL = lines[0] API_KEY = lines[1] SECRET_KEY = lines[2] api = KayakoAPI(API_URL, API_KEY, SECRET_KEY) tickets = api.get_all(Ticket, 5, ticketstatusid=4) ticketcount = len(tickets) if first == True: previous = ticketcount print(ticketcount) for n in range(ticketcount): print(tickets[n]) new = '' if ticketcount == previous + 1: new = '1' elif ticketcount == previous + 2: new = '2' elif ticketcount == previous + 3: new = '3' elif ticketcount == previous + 4: