Ticket.findOne({company: ardsResponse.Company, tenant: ardsResponse.Tenant, _id: ardsResponse.SessionID}, function (err, ticket) { if (err) { jsonString = messageFormatter.FormatMessage(err, "Fail Find Ticket", false, undefined); res.writeHead(503, {'Content-Type': 'application/json; charset=utf-8'}); res.end(jsonString); } else { if (ticket) { var oldTicket = deepcopy(ticket.toJSON()); var time = Date.now(); ticket.updated_at = time; var tEvent = TicketEvent({ type: 'status', body: { "message" : "ARDS Ticket Assign To "+user.id, "time" : time } }); ticket.events.push(tEvent); ticket.assignee_group = undefined; ticket.assignee = user.id ; ticket.update(ticket, function (err, obj) { if (err) { jsonString = messageFormatter.FormatMessage(err, "Fail Find Ticket", false, undefined); res.writeHead(503, {'Content-Type': 'application/json; charset=utf-8'}); res.end(jsonString); } if(obj){ jsonString = messageFormatter.FormatMessage(undefined, "Ticket Assign To User.", true, undefined); res.writeHead(200, {'Content-Type': 'application/json; charset=utf-8'}); res.end(jsonString); RemoveRequest(ardsResponse.Tenant, ardsResponse.Company,ardsResponse.SessionID, "NONE", function(){ }); TriggerWorker.ExecuteTrigger(ticket.id, "change_assignee", oldTicket.assignee); } else{ jsonString = messageFormatter.FormatMessage(undefined, "Invalid Ticket Information.", false, undefined); res.writeHead(200, {'Content-Type': 'application/json; charset=utf-8'}); res.end(jsonString); RejectRequest(ardsResponse.Tenant, ardsResponse.Company,ardsResponse.SessionID, "NoSession", function(){ }); } }); } else { jsonString = messageFormatter.FormatMessage(undefined, "Fail Find Ticket", false, undefined); res.writeHead(200, {'Content-Type': 'application/json; charset=utf-8'}); res.end(jsonString); RejectRequest(ardsResponse.Tenant, ardsResponse.Company,ardsResponse.SessionID, "NoSession", function(){ }); } } });
var CreateNewCase = function(tenant, company, caseConfig, ticketArray, callback){ logger.info("DVP-LiteTicket.CaseWorker.CreateNewCase Internal method "); //var ticketArray = [ticketInfo._id]; //Ticket.find({ // company: company, // tenant: tenant, // active: true, // isolated_tags: { $all: caseConfig.tagArray }, // status: {$nin: ['closed', 'solved']} //}, function (err, tickets) { // if (err) { // logger.error("Get Tickets By isolated_tags Failed :: "+ err); // } else { // // if (tickets) { // for(var i =0; i < tickets.length;i++){ // if(caseConfig.activeTicketTypes && caseConfig.activeTicketTypes.length > 0){ // if(caseConfig.activeTicketTypes.indexOf(tickets[i].type) > -1){ // logger.info("Ticket Id:: "+tickets[i]._id +" Added to Case"); // ticketArray.push(tickets[i]._id); // } // }else{ // // logger.info("Ticket Id:: "+tickets[i]._id +" Added to Case"); // ticketArray.push(tickets[i]._id); // } // } // // } else { // logger.info("Get Tickets By isolated_tags Failed"); // } // } var time = new Date(); var tEvent = TicketEvent({ type: 'status', "author": 'system', "create_at": Date.now(), body: { "message": "System Create Case", "time": time } }); var caseName = util.format('%s-%d', caseConfig.configurationName, time.getTime()); var caseInfo = Case({ created_at: time.toISOString(), updated_at: time.toISOString(), active: true, status: "new", caseName: caseName, description: caseConfig.description, company: company, tenant: tenant, caseConfiguration: caseConfig._id, related_tickets:ticketArray, events: [tEvent], SLAViolated: false }); caseInfo.save(function (err, caseData) { if (err) { logger.error("Create Case Failed :: "+ err); callback(err, "Create Case Failed"); } else { if (caseData) { logger.info("Case Saved Successfully :: "+ caseData); callback(undefined, "Case Saved Successfully"); } else { logger.info("Fail To Save Case :: "+ caseData); callback(undefined, "Fail To Save Case"); } } }); //}); };
Case.findOne({company: company, tenant: tenant, caseConfiguration: caseConf._id, active: true}, function (err, caseData) { if (err) { logger.error("Fail Find Case:: "+ err); callback(err, "Fail Find Case"); } else { if (caseData) { if(caseConf.activeTicketTypes && caseConf.activeTicketTypes.indexOf(ticketInfo.type) > -1) { logger.info("Ticket Id:: " + ticketInfo._id + " Added to Case"); var time = new Date().toISOString(); var tEvent = TicketEvent({ type: 'status', "author": 'system', "create_at": Date.now(), body: { "message": "System Add Ticket To Case " + ticketInfo._id, "time": time, "differences": {} } }); caseData.update({ "$set": { "updated_at": Date.now() }, "$addToSet": {"events": tEvent, "related_tickets": ticketInfo._id} }, function (err, rCase) { if (err) { logger.error("Fail Update Case:: " + err); callback(err, "Fail Update Case"); } else { if (rCase) { logger.info("Add Ticket To Case Success:: " + rCase); callback(undefined, "Add Ticket To Case Success"); } else { logger.info("Failed To Update Case:: " + caseData._id); callback(undefined, "Failed To Update Case"); } } }); }else{ callback(undefined, "Ticket Not Matched"); } } else { logger.info("Fail Find Case"); //GetCurrentTicketCount(ticketInfo.tenant, ticketInfo.company, caseConf.configurationRule.replace(/ /g,''), function(err, currentCount){ GetCurrentTicketCount(ticketInfo.tenant, ticketInfo.company, caseConf, function(err, currentTickets){ if(err){ callback(err, "Get Current Ticket Count Failed"); }else{ if(caseConf.threshold && currentTickets.length >= caseConf.threshold){ currentTickets.push(ticketInfo._id); CreateNewCase(ticketInfo.tenant, ticketInfo.company, caseConf, currentTickets, function(err, msg){ callback(err, msg); }); }else{ logger.info("Threshold Not Exceeded"); callback(undefined, "Threshold Not Exceeded"); } } }); } } });