/* * GnuDialer - Complete, free predictive dialer * * Complete, free predictive dialer for contact centers. * * Copyright (C) 2006, GnuDialer Project * * Heath Schultz * Richard Lyman * * This program is free software, distributed under the terms of * the GNU General Public License. */ #ifndef EVALUATE #define EVALUATE template inline const T max(const T & x, const T & y) { return ((x > y) ? x : y); } template inline const T min(const T & x, const T & y) { return ((x < y) ? x : y); } int power(const double maxratio, const int availagents, const int linesdialing) { return (availagents) ? (max(static_cast(maxratio * static_cast(availagents) - static_cast(linesdialing)),0)) : 0; } int evaluate(std::string mode, \ const unsigned int & linesdialing, \ const unsigned int & onlineagents, \ const unsigned int & availagents, \ const unsigned int & dialableagents, \ double fudge, \ double maxratio, \ const unsigned int & maxlines, \ double maxabandons, \ const unsigned long int & calls, \ const unsigned long int & abandons) \ { \ unsigned long int temp = 0; maxabandons = maxabandons / 100.0; int linestodial = 0; double dLinesDialing = static_cast(linesdialing); //double dOnlineAgents = static_cast(onlineagents); double dAvailAgents = static_cast(availagents); double dDialableAgents = static_cast(dialableagents); //double dCalls = static_cast(calls); //double dAbandons = static_cast(abandons); if (mode == "auto") { return max(maxlines - linesdialing,0); } if (mode == "preview") { maxratio = 1.0; mode == "predictive"; } if (mode == "power") { return power(maxratio,availagents,linesdialing); } if (mode == "predictive") { //linestodial = max(static_cast((maxabandons * dCalls) - dAbandons - dLinesDialing + dAvailAgents),0); //linestodial = max(static_cast((maxabandons * dCalls) - dAbandons - dLinesDialing + dAvailAgents + ((dAvailAgents / dDialableAgents)*10)),0); //been using //linestodial = max(static_cast(dDialableAgents + ((dAvailAgents / dDialableAgents)*10) - dLinesDialing),0); //linestodial = min(min(linestodial,maxlines),power(maxratio,availagents,linesdialing)); //new stuff linestodial = max(static_cast(dDialableAgents + ((dAvailAgents / dDialableAgents)*10) - dLinesDialing),0); linestodial = min(min(linestodial,maxlines-linesdialing),power(maxratio,availagents,linesdialing)); //linestodial = max(static_cast(dDialableAgents + ((dAvailAgents / dDialableAgents) * fudge) - dLinesDialing),0); if (!availagents) { return 0; } temp = linestodial; if (availagents - linesdialing > temp && linesdialing < availagents) { if (maxlines == 1) { if (linesdialing == 1) { return 0; } else { return 1; } } else { return min(availagents - linesdialing,maxlines); } } else { //old //return min(linestodial,maxlines); //new return min(linestodial,maxlines-linesdialing); } } return 0; } #endif