{"database": "fishbowl_archive", "table": "biscript", "rows": [[2, "_binary \u0001", "const today = new Date();\r\n\r\nvar canvas = document.querySelector('canvas');\r\n\r\nfunction createYearQuery(subtractYear) {\r\n    let mm = (today.getMonth() + 1).toString().padStart(2, '0'); // January is 0!\r\n    let timestamp = (today.getFullYear() - subtractYear) + '-' + mm + '-01 00:00:00';\r\n    \r\n    return \"SELECT 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 AND SoItem.statusID = 50 \"\r\n        + \"WHERE postDate >= '\" + timestamp + \"' \"\r\n        + \"AND postDate < DATE_ADD('\" + timestamp + \"', INTERVAL 1 MONTH) \"\r\n        + \"GROUP BY CAST(PostSo.postDate AS DATE)\";\r\n}\r\n\r\n\r\n\r\nfunction createData(query) {\r\n    const result = runQuery(query);\r\n    return JSON.parse(result);\r\n}\r\nfunction createDataset(label, data, backgroundColor, borderColor) {\r\n    return {\r\n        label: label,\r\n        fill: true,\r\n        data: data,\r\n        backgroundColor: backgroundColor,\r\n        borderColor: borderColor,\r\n        borderWidth: 2,\r\n        pointRadius: 3,\r\n        pointHoverRadius: 5,\r\n        pointHitRadius: 7,\r\n        lineTension: 0\r\n    };\r\n}\r\n\r\nconst data = [];\r\ndata.push(createData(createYearQuery(1)));\r\ndata.push(createData(createYearQuery(0)));\r\nconsole.log(data);\r\n\r\nlet runningTotal = 0;\r\nconst monthData = [];\r\nconst labels = [];\r\nfor (let year = 0; year < data.length; year++) {\r\n    if(data[year].length != 0){\r\n        data[year] = data[year].reduce(\r\n            (obj, day) => {\r\n                obj[day.posteddate] = day.totalprice;\r\n                return obj;\r\n            }, {});\r\n            \r\n        runningTotal = 0;\r\n        let mData = [];\r\n        let yearOffset = 1\r\n        if (year == 1) {yearOffset = 0}\r\n        for (let day = 1; day <= new Date((today.getFullYear() - yearOffset), today.getMonth() + 1, 0).getDate(); day++) {\r\n            if (labels.length < moment().daysInMonth()) {\r\n                labels.push(day);\r\n            }\r\n    \r\n            if (year === data.length - 1 && day > today.getDate()) {\r\n                continue;\r\n            }\r\n    \r\n            runningTotal += data[year][day] || 0;\r\n            mData.push(runningTotal);\r\n        }\r\n        monthData.push(mData);\r\n    }\r\n}\r\n\r\nconst chartData = [];\r\nconst currentYearColor = '$COLOR{Current_Year|#33D566}';\r\nconst previousYearColor = '$COLOR{Previous_Year|#4682b4}';\r\n\r\nif (monthData.length == 1) {\r\n    chartData.push(createDataset(today.getFullYear(), monthData[0], UTIL.convertHex(currentYearColor, 50), currentYearColor));\r\n    chartData.push(createDataset(today.getFullYear() - 1, monthData[1], UTIL.convertHex(previousYearColor, 50), previousYearColor));\r\n} else {\r\n    chartData.push(createDataset(today.getFullYear(), monthData[1], UTIL.convertHex(currentYearColor, 50), currentYearColor));\r\n    chartData.push(createDataset(today.getFullYear() - 1, monthData[0], UTIL.convertHex(previousYearColor, 50), previousYearColor));\r\n}\r\n\r\nconst options = {\r\n        legend: {\r\n            position: 'right'\r\n        },\r\n        scales: {\r\n            yAxes: [{\r\n                ticks: {\r\n                    beginAtZero: true,\r\n                    callback: function (value, values) {\r\n                        return UTIL.dollarify(value, 0);\r\n                    }\r\n                }\r\n            }],\r\n        },\r\n        tooltips: {\r\n            callbacks: {\r\n                label: function (tooltipItem, data) {\r\n                    return UTIL.dollarify(tooltipItem.yLabel);\r\n                },\r\n                title: (tooltipItem) => {\r\n                    return moment().format('MMMM') + ' ' + tooltipItem[0].xLabel;\r\n                 }\r\n            }\r\n        },\r\n    responsive: true,\r\n    maintainAspectRatio: false,\r\n    plugins: {\r\n        datalabels: {\r\n            display: false\r\n        }\r\n    }\r\n};\r\nconst ctx = document.getElementById('myChart');\r\nnew Chart(ctx, {\r\n    type: 'line',\r\n    data: {\r\n        labels: labels,\r\n        datasets: chartData\r\n    },\r\n    options: options\r\n});\r\n\r\ndocument.getElementById(\"title\").innerHTML = 'Revenue ' + moment().format('MMMM') + ' ' + today.getFullYear();\r\ndocument.getElementById(\"subTitle\").innerHTML = 'MTD - ' + UTIL.dollarify(runningTotal);\r\ndocument.getElementById(\"description\").innerHTML = '<Description>';\r\n\r\n\r\n", "2024-05-15 08:55:40.430000", "Query and logic for the MTD Chart page", "MTD Chart", "", 20, 3, "mtd-chart", 0]], "columns": ["id", "active", "data", "dateLastModified", "description", "name", "note", "typeId", "fbVersion", "fbName", "published"], "primary_keys": ["id"], "primary_key_values": ["2"], "units": {}, "query_ms": 1.5095699927769601}