{"database": "fishbowl_archive", "table": "biscript", "rows": [[14, "_binary \u0001", "const dateRange = $RANGE{Date_Range|this month};\r\nconst currentSalesColor = '$COLOR{Current_Sales_Color|#33D566}';\r\nlet goal = \"$MONEY{Goal}\";\r\ngoal = Number(goal.replace(/[^0-9\\.-]+/g,\"\"));\r\n\r\nlet rep = \"$USER{Rep|%}\";\r\nif (rep != \"%\"){\r\n    rep = parseInt(rep);\r\n}\r\nif (rep == -1) {\r\n    rep = \"%\";\r\n}\r\n\r\nconst data = JSON.parse(runQuery(\"SELECT sysuser.firstName, sysuser.lastName, DAY(PostSo.postDate) AS PostedDate, SUM(PostSoItem.totalPrice) AS TotalPrice \"\r\n    + \"FROM PostSoItem \"\r\n    + \"JOIN PostSo ON PostSo.id = PostSoItem.postSoId \"\r\n    + \"JOIN SoItem ON PostSoItem.soItemId = SoItem.id AND SoItem.typeId <> 40 \"\r\n    + \"JOIN so ON so.id = soitem.soId \"\r\n    + \"JOIN sysuser ON so.salesmanId = sysuser.id \"\r\n    + \"WHERE postDate >= '\" + dateRange.fromDate + \"' \"\r\n    + \"AND postDate <= '\" + dateRange.toDate + \"' \"\r\n    + \"AND salesmanId LIKE '\" + rep + \"' \"\r\n    + \"GROUP BY CAST(PostSo.postDate AS DATE), sysuser.firstName, sysuser.lastName\"));\r\n\r\nconst doughnutLabels = [\"Current Sales\",\"Remaining Goal\"];\r\nconst doughnutDatasets = [];\r\nconst allSales = []\r\n\r\nlet totalSales = 0;\r\n\r\nfor (let i = 0; i < data.length; i++) {\r\n    totalSales += data[i].totalprice;\r\n}\r\n\r\nconst goalSales = totalSales;\r\nlet remainingGoal = goal - goalSales;\r\nremainingGoal = remainingGoal < 0 ? 0 : remainingGoal; \r\n\r\nallSales.push(goalSales);\r\nallSales.push(remainingGoal);\r\ndoughnutDatasets.push(createDoughnut(allSales, [UTIL.convertHex(currentSalesColor,100),'rgba(0,0,0,0)'],[UTIL.convertHex(currentSalesColor,50),UTIL.convertHex(currentSalesColor,50)]));\r\n\r\nlet dateStr = UTIL.convertDate(dateRange.fromDate, true) + \" - \" + UTIL.convertDate(dateRange.toDate, false);\r\nif (moment(dateRange.fromDate).isSame('1000-01-01', 'year') && moment(dateRange.toDate).isSame('3000-01-01', 'year')) {\r\n  dateStr = 'All';\r\n}\r\n\r\nconst doughnutData = {\r\n    labels: doughnutLabels,\r\n    datasets: doughnutDatasets\r\n};\r\n\r\nconst doughnutOptions = {\r\n    tooltips: {\r\n        callbacks: {\r\n            label: function (tooltipItem, data) {\r\n                return UTIL.dollarify(data.datasets[0].data[tooltipItem.index]);\r\n            },\r\n           title: (tooltipItem, data) => {\r\n                return data.labels[tooltipItem[0].index]; \r\n            }\r\n        }\r\n    },\r\n    plugins: {\r\n        datalabels: {\r\n            color: '#828891',\r\n            display: false,\r\n            font: {\r\n                weight: 'bold',\r\n                family: 'Roboto'\r\n            },\r\n            formatter: function(value, context) {\r\n                return UTIL.dollarify(value);\r\n            }\r\n        }\r\n    },\r\n    responsive: true,\r\n    maintainAspectRatio: false,\r\n    pieceLabel: {\r\n        render: 'label',\r\n        fontColor: '#828891',\r\n        fontSize: 14,\r\n        fontStyle: 'bold',\r\n        position: 'outside',\r\n        render: function (args) {\r\n            let label = (args.value/goal * 100).toFixed(1) + '%';\r\n            return label;\r\n        }\r\n    },\r\n    legend: {\r\n        position: 'bottom',\r\n        display: false\r\n    },\r\n    layout: {\r\n        padding: {\r\n            right: 50,\r\n            left: 50\r\n        }\r\n    },\r\n    \r\n    circumference: Math.PI,\r\n    rotation: Math.PI,\r\n    \r\n};\r\n\r\n// DOM Population =================================================================================\r\n\r\nconst ctxBar = document.getElementById('topSalesman');\r\nnew Chart(ctxBar, {\r\n    type: 'doughnut',\r\n    data: doughnutData,\r\n    options: doughnutOptions\r\n});\r\n\r\nconst titleHtml = document.getElementById(\"title\");\r\nif (rep == \"%\") {\r\n    titleHtml.innerHTML = \"Sales Goal\";\r\n} else if (data[0]) {\r\n    titleHtml.innerHTML = \"Sales Goal - \" + data[0].firstname + ' ' + data[0].lastname;\r\n} else {\r\n    const repName = JSON.parse(runQuery(\"SELECT firstName, lastName FROM SysUser WHERE id='\" + rep + \"'\"));\r\n    titleHtml.innerHTML = \"Sales Goal - \" + repName[0].firstname + ' ' + repName[0].lastname;\r\n}\r\n\r\ndocument.getElementById(\"subTitle\").innerHTML = UTIL.dollarify(totalSales, 0) + \" of \" + UTIL.dollarify(goal, 0) + \" Goal\";\r\ndocument.getElementById(\"description\").innerHTML = dateStr;\r\n\r\n// Function Declarations ==========================================================================\r\n\r\nfunction createDoughnut(data, colors, borderColor){\r\n    return {\r\n        data: data,\r\n        backgroundColor: colors,\r\n        borderColor: borderColor,\r\n        borderWidth: 2\r\n    };\r\n}\r\n", "2023-01-05 17:28:06.990000", "Query and logic for the Sales Goal page", "Sales Goal", "", 20, 3, "sales-goal", 0]], "columns": ["id", "active", "data", "dateLastModified", "description", "name", "note", "typeId", "fbVersion", "fbName", "published"], "primary_keys": ["id"], "primary_key_values": ["14"], "units": {}, "query_ms": 1.4812969602644444}