diff --git a/billing.log b/billing.log index e69de29..8ee2963 100644 --- a/billing.log +++ b/billing.log @@ -0,0 +1,176 @@ +2023-08-16 15:19:28,234 - billing_reports - INFO - test +2023-08-16 15:39:00,080 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,081 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,082 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,082 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,083 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,084 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,085 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,086 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,086 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,087 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,088 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,088 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,089 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,090 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,090 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,091 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,092 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,092 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,093 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,093 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,094 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,094 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,095 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,096 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,097 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,097 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,098 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,099 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,099 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,100 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,100 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,102 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,105 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,106 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,107 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,108 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,110 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,111 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,114 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,115 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,116 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,117 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,118 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,120 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,121 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,122 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,124 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,125 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,126 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,128 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,129 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,130 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,131 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,131 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,131 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,132 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,132 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,133 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,133 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,134 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,134 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,135 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,135 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,136 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,138 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,140 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,142 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,143 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,144 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,145 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,146 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,147 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,151 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,152 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,153 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,153 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,154 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,154 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,155 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,155 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,156 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,157 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,157 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 15:39:00,207 - billing_reports - INFO - Folder already in list: 31976 +2023-08-16 15:39:00,230 - billing_reports - INFO - Folder already in list: 31915 +2023-08-16 15:39:00,233 - billing_reports - INFO - Folder already in list: 32155 +2023-08-16 16:19:34,115 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,117 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,118 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,118 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,119 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,119 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,120 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,121 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,122 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,123 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,124 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,124 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,125 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,126 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,126 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,127 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,128 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,128 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,129 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,129 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,130 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,131 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,131 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,132 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,133 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,134 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,134 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,135 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,135 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,136 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,136 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,137 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,138 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,138 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,139 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,139 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,140 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,140 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,141 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,141 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,142 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,142 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,143 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,144 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,144 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,145 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,145 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,146 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,147 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,149 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,149 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,150 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,151 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,151 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,152 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,152 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,153 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,153 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,154 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,155 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,155 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,156 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,157 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,157 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,158 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,159 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,160 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,160 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,162 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,165 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,165 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,166 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,167 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,168 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,169 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,174 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,175 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,175 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,176 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,176 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,177 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,178 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,178 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,179 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,179 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,180 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment +2023-08-16 16:19:34,230 - billing_reports - INFO - Folder already in list: 31976 +2023-08-16 16:19:34,254 - billing_reports - INFO - Folder already in list: 31915 +2023-08-16 16:19:34,255 - billing_reports - INFO - Folder already in list: 32155 diff --git a/hp-billing-report.ipynb b/hp-billing-report.ipynb index a610084..277d8b4 100644 --- a/hp-billing-report.ipynb +++ b/hp-billing-report.ipynb @@ -2,15 +2,492 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "import lattice\n", + "import logging\n", + "import json\n", + "\n", + "logger = logging.getLogger('billing_reports')\n", + "logger.setLevel(logging.INFO)\n", + "\n", + "fh = logging.FileHandler('/Users/nico/Documents/Github/hp-billing-report/billing.log')\n", + "fh.setLevel(logging.INFO)\n", + "\n", + "ch = logging.StreamHandler()\n", + "ch.setLevel(logging.ERROR)\n", + "\n", + "formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')\n", + "fh.setFormatter(formatter)\n", + "ch.setFormatter(formatter)\n", + "\n", + "logger.addHandler(fh)\n", + "logger.addHandler(ch)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "#Mistaway data collection\n", + "from datetime import datetime as dt\n", + "\n", + "json_file_output = False\n", + "console_output = False" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "nodes = lattice.getNodes()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# Find a value for a given key in a given dictionary\n", + "def _findItem(obj, key):\n", + " if key in obj: return obj[key] \n", + " for k, v in obj.items():\n", + " if isinstance(v,dict):\n", + " item = _findItem(v, key)\n", + " if item is not None:\n", + " return item" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# recursively go through folders to build folder structure\n", + "def putFolder(folder, fs):\n", + " try:\n", + " if not folder[\"id\"] == folder[\"parentFolderId\"]:\n", + " parent = _findItem(fs, folder[\"parentFolderId\"])\n", + " parent[folder[\"id\"]] = folder\n", + " putFolder(parent,fs)\n", + " else:\n", + " fs[folder[\"id\"]] = folder\n", + " return fs\n", + " except Exception as e:\n", + " logger.error(f\"Exception in putFolder: {e}\")\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-08-16 16:19:34,115 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,117 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,118 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,118 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,119 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,119 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,120 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,121 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,122 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,123 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,124 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,124 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,125 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,126 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,126 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,127 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,128 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,128 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,129 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,129 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,130 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,131 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,131 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,132 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,133 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,134 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,134 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,135 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,135 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,136 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,136 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,137 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,138 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,138 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,139 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,139 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,140 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,140 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,141 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,141 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,142 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,142 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,143 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,144 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,144 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,145 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,145 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,146 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,147 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,149 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,149 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,150 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,151 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,151 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,152 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,152 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,153 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,153 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,154 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,155 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,155 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,156 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,157 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,157 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,158 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,159 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,160 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,160 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,162 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,165 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,165 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,166 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,167 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,168 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,169 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,174 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,175 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,175 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,176 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,176 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,177 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,178 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,178 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,179 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,179 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n", + "2023-08-16 16:19:34,180 - billing_reports - ERROR - Exception in putFolder: 'NoneType' object does not support item assignment\n" + ] + } + ], + "source": [ + "# Go through every folder and build a proper folder structure\n", + "# Output to JSON file\n", + "folders = lattice.getFolders()\n", + "foldermap = {}\n", + "#print(json.dumps(folders, indent=4))\n", + "for folder in folders:\n", + " logger.debug(folder)\n", + " putFolder(folder,foldermap)\n", + "if console_output:\n", + " print(json.dumps(foldermap, indent=4))\n", + "if json_file_output:\n", + " with open(\"./folderMap\" + str(dt.date(dt.now())) +\".json\", \"w\") as f:\n", + " json.dump(foldermap, f, indent=4)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "# Go through every node and collect unique device id (MAC)\n", + "# Output to JSON file\n", + "foldersTracker = []\n", + "vanityMap = {}\n", + "for node in nodes:\n", + " if not node[\"uniqueId\"][-6:] in [\":00:00\", \":00:30\"]:\n", + " if not node[\"folderId\"] in foldersTracker:\n", + " foldersTracker.append(node[\"folderId\"])\n", + " folder = _findItem(foldermap, node[\"folderId\"])\n", + " if folder:\n", + " deviceName = folder[\"name\"]\n", + " latitude = folder[\"location\"][\"lat\"]\n", + " longitude = folder[\"location\"][\"lng\"]\n", + " pfolder = _findItem(foldermap, folder[\"parentFolderId\"])\n", + " ppfolder = _findItem(foldermap, pfolder[\"parentFolderId\"])\n", + " customer = ppfolder[\"name\"]\n", + " vanityMap[node[\"uniqueId\"]] = {\"deviceName\": deviceName, \"customer\": customer, \"latitude\": latitude, \"longitude\": longitude}\n", + " else:\n", + " logger.info(\"Folder does not exist: \" + str(node[\"folderId\"]))\n", + " else:\n", + " logger.info(\"Folder already in list: \" + str(node[\"folderId\"]))\n", + "#print(vanityMap)\n", + "if json_file_output:\n", + " with open(\"./deviceMap\" + str(dt.date(dt.now())) +\".json\", \"w\") as f:\n", + " json.dump(vanityMap, f, indent=4)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'\\nData to be collected:\\n {\\n \"customer\":{\\n \"sales_order\": {\\n \"billable_item_1\": {\\n \"sales_price\": 75,\\n \"platform_cost\": 10,\\n \"platform\": \"thingsboard\", # \"thingsboard\", \"mistaway\"\\n \"cellular_cost\": 15,\\n \"billing_type\": \"stand-alone\" # \"stand-alone\", \"AP\", \"AP-bundled\", \"networked\", \"stand-alone-wifi\"\\n },\\n \"billable_item_2:{...},\\n ...\\n },\\n \"sales_order_2\":{...}\\n },\\n \"customer_2\":{...}\\n }\\n'" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\"\"\"\n", + "Data to be collected:\n", + " {\n", + " \"customer\":{\n", + " \"sales_order\": {\n", + " \"billable_item_1\": {\n", + " \"sales_price\": 75,\n", + " \"platform_cost\": 10,\n", + " \"platform\": \"thingsboard\", # \"thingsboard\", \"mistaway\"\n", + " \"cellular_cost\": 15,\n", + " \"billing_type\": \"stand-alone\" # \"stand-alone\", \"AP\", \"AP-bundled\", \"networked\", \"stand-alone-wifi\"\n", + " },\n", + " \"billable_item_2:{...},\n", + " ...\n", + " },\n", + " \"sales_order_2\":{...}\n", + " },\n", + " \"customer_2\":{...}\n", + " }\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "mistaway_data = {}\n", + "for key, value in vanityMap.items():\n", + " customer = value[\"customer\"]\n", + " device = value[\"deviceName\"]\n", + " if not device in [\"Melinda 252\"]:\n", + " if customer not in mistaway_data:\n", + " mistaway_data[customer] = {f\"HPSO-1\": {}}\n", + " mistaway_data[customer][\"HPSO-1\"][device] = {\n", + " \"Sales Price\": 75,\n", + " \"Platform Cost\": 10,\n", + " \"Platform\": \"Mistaway\", # \"thingsboard\", \"mistaway\"\n", + " \"Cellular Cost\": 15,\n", + " \"Billing Type\": \"Stand-Alone\" # \"stand-alone\", \"AP\", \"AP-bundled\", \"networked\", \"stand-alone-wifi\"\n", + " }\n", + " \n", + " \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "#ThingsBoard data collection\n", + "from tb_rest_client.rest_client_ce import *\n", + "from tb_rest_client.rest import ApiException" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "# ThingsBoard REST API URL\n", + "url = \"https://hp.henrypump.cloud\"\n", + "# Default Tenant Administrator credentials\n", + "username = \"henry.pump.automation@gmail.com\"\n", + "password = \"Henry Pump @ 2022\"" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "def getDevices(rest_client, customers, page=0, pageSize=500):\n", + " thingsboard_data = {}\n", + " for c in customers.data:\n", + " cname = c.name\n", + " cid = c.id.id\n", + " if cname != \"Test Company\":\n", + " if cname not in thingsboard_data:\n", + " thingsboard_data[cname] = {f\"HPSO-1\": {}}\n", + " devices = rest_client.get_customer_devices(customer_id=cid, page_size=pageSize, page=page)\n", + " for device in devices.data:\n", + " if '\"' in device.name:\n", + " deviceName = device.name.replace('\"', 'in')\n", + " else:\n", + " deviceName = device.name\n", + " thingsboard_data[cname][\"HPSO-1\"][deviceName] = {\n", + " \"Sales Price\": 75,\n", + " \"Platform Cost\": 0,\n", + " \"Platform\": \"ThingsBoard\", # \"thingsboard\", \"mistaway\"\n", + " \"Cellular Cost\": 15,\n", + " \"Billing Type\": \"Stand-Alone\" # \"stand-alone\", \"AP\", \"AP-bundled\", \"networked\", \"stand-alone-wifi\"\n", + " }\n", + " return thingsboard_data" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "def getThingsBoardData(url, username, password):\n", + " # Creating the REST client object with context manager to get auto token refresh\n", + " with RestClientCE(base_url=url) as rest_client:\n", + " try:\n", + " # Auth with credentials\n", + " rest_client.login(username=username, password=password)\n", + " # Get customers > get devices under a target customer > get keys for devices > get data for devices\n", + " customers = rest_client.get_customers(page_size=\"100\", page=\"0\")\n", + " thingsboard_data = getDevices(rest_client=rest_client, customers=customers)\n", + " return thingsboard_data\n", + " except ApiException as e:\n", + " logger.error(e)\n", + " return False" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "thingsboard_data = getThingsBoardData(url, username,password)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "#Mixing data from Mistaway and ThingsBoard\n", + "excel_data = {}\n", + "excel_data.update(mistaway_data)\n", + "for customer in thingsboard_data.keys():\n", + " if customer in excel_data:\n", + " for so in thingsboard_data[customer].keys():\n", + " if so in excel_data[customer]:\n", + " excel_data[customer][so].update(thingsboard_data[customer][so])\n", + " else:\n", + " excel_data[customer].update(thingsboard_data[customer])\n", + " else:\n", + " excel_data[customer] = thingsboard_data[customer]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'CrownQuest': {'HPSO-1': {'Nail Ranch 37 SR 2-3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wrage 21 SR 2-2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wrage 28 SR 2-2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Free 40 WS 2-2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 1 WS 1-9': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 1 WS 1-10B': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 39 WS 1-3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 4 WS 1-10': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Horton 34 WS 10-5': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Rig Pump #3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Rig Pump #4': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'CQ Wrage Ranch 32 SR 1-1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'LimeQuest 5 WS 10-10': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson Ranch 34 SR 2-2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Nail Ranch 2 SR 3-3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Nail Ranch 38 SR 2-3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Nail Ranch 25 SR 2-1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Nail Ranch 28 SR 3-3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Nail Ranch 38 SR 1-3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Nail Ranch 3 SR 3-2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Nail Ranch 28 SR 2-2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Nail Ranch 28 SR 1-1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Guitar 22 SR 3-3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson Ranch 33 SR 2-2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson Ranch 35 SR 1-1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson Ranch 1 SR 2-2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Limequest Transfer Lite': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'S. Wilkinson Transfer Lite': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Nail Ranch 2 SR 2-2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Horton Transfer Lite': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'South Wilkinson Transfer #2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson Ranch 37 SR 2-1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 39 WS 1-5': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 39 WS 1-4': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 39 WS 1-2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Free 40 WS 1-2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 39 WS 1-1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Free 32 WS 2-7': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Free 32 WS 3-10C': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Free 40 WS 6-5': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Free 40 WS 1-4': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Free 40 WS 1-6': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Free 32 WS 3-10A': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 34 WS 9-10': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 33 WS 10-3A': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 33 WS 10-3B': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 33 WS 10-1B': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 33 WS 6-7': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Free 32 WS 3-10B': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'LimeQuest 5 WS 9-9': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'LimeQuest 5 WS 6-8': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'LimeQuest 5 WS 2-4': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'LimeQuest 5 WS 8-5': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'LimeQuest 5 WS 7-5': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'LimeQuest 5 WS 4-7': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Horton 23 WS 5-6': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Horton 23 WS 8-6': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Horton 23 WS 6-5': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Horton 23 WS 6-6': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Horton 34 WS 1-1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Horton 34 WS 1-2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Horton 23 WS 5-3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Horton 23 WS 5-2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Horton 23 WS 5-5': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 37 WS 1-9B': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 39 WS 2-2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 37 WS 1-8': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 1 WS 9-4B': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'ToolBox South': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Rig Pump #8': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'LimeQuest 5 WS 7-9': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Horton 34 WS 1-4': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'LimeQuest 5 WS 3-5': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Free Transfer Pit': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 34 WS 5-10': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 33 WS 5-2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 33 WS 6-3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 37 WS 7-8': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 33 WS 4-1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 37 WS 8-8': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 34 WS 1-8': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 39 WS 2-4': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 37 WS 10-9': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 33 WS 3-1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 34 WS 2-10': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 37 WS 1-5': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 37 WS 3-5': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 37 WS 3-6': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 37 WS 5-7': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 34 WS 10-9': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 39 WS 1-10': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 37 WS 4-7': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 39 WS 2-8': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson Ranch 39 SR 1-1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 37 WS 1-7': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'LimeQuest 5 WS 8-9': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'LimeQuest 5 WS 1-4': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'LimeQuest 10 WS 3-6': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wrage 33 SR 3-3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'N. Wilkinson Transfer Lite': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 33 WS 10-4': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 34 WS 9-9': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 1 WS 2-10': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 33 ws 10-1A': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 37 WS 1-10': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 1 WS 1-10A': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Rig Pump #7': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Horton 34 WS 1-3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 39 ws 3-8': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 34 WS 6-10': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Free 40 SR 2-1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 33 WS 7-2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Nail Ranch 12 SR 1-3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 33 WS 6-2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'LimeQuest 6 SR 1-1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 39 WS 1-7': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 1 WS 2-9': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 34 WS 10-10': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 39 WS 2-10': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Free 40 WS 1-1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 39 WS 1-6': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'ToolBox North': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 33 WS 10-2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Nail Ranch 37 SR 3-2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 37 WS 8-6': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Rig Pump #6': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 37 WS 5-5': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Rig Pump #10': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'LLL 6 SR 1-1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 39 WS 1-9': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 39 WS 1-8': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wilkinson 39 WS 2-6': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'LimeQuest 5 WS 10-9': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Rig Pump #11': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Rig Pump #12': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}}}, 'Summit Petroleum': {'HPSO-1': {'Bowling WW 4-1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay WW 7-1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay WW 5-1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Bowling WW 37-1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay WW 504': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay WW 18 #4': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay WW 18 #9': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Windham 108-1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Windham 108-3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Florence WW #2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Florence WW #1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Madelyn Kate #3 WW': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Jessica WW #3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Windham 108-7': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Windham 108-6': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Windham 108-5': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Windham 107-1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Windham 107-2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Windham 108-8': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Windham 108-10': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Windham 108-2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Windham 108-9': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Jessica WW #7': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Carmanita WW 12-2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Carmanita WW 12-1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay North Frac Pit': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay South Frac Pit': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay South Inlet': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay WW 18 #3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Carmanita WW 12-3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay WW 8-5': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay WW 8-2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay WW 6-1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay WW 18 #10': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Carmanita WW 12-4': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay WW 18 #1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Caden WW #1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Caden WW #2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Caden WW #3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Caden WW #4': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Lisa WW #1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Madeline WW #2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Caden WW #6': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Laurie Gwen WW #1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Jessica WW #4': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Jessica WW #1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Jessica WW #2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Denali East Frac Pit': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay WW 8-4': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Jessica WW #5': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Map Rock Transfer Pump Monitor': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay North Pit Inlet #1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay North Pit Outlet #1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Yvonne Frac Pit': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Denali Frac Pit': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Cindy #1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Cindy #3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Cindy #2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Lindsey #3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Elizabeth 1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Railway 12-3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Railway 12-2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Elizabeth B1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Elizabeth B2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Rhonda 1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Sec 46 #1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Cynthia 1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Nancy #2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Nancy #1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Rhonda Pit': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Jitterbug 28-1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Reagan #1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Aurora 7': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Aurora 8': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Aurora 9': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Aurora 10': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Aurora 11': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Aurora 6': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'RebJean #2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Terri #6': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'RobJane #2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'RobJane #3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'RebJean #1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'RobJane #1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Kelsey #2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Stephanie 41 #2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Kelsey #1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Stephanie 41 #3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'RobJane #4': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Terri #2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Terri #1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Terri #3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Terri #4': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Mary 43 #3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Mary 43 #5': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Mary 43 #2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Mary 43 #1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'KD #2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'KD #4': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'KD #7': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'KD #5': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Bobbie #1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Bobbie #2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Elizabeth A1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Patty #1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Rhonda 2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Terri Transfer Pump Monitor': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Trumann 1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Trumann 3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Trumann 4': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Trumann 5': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Trumann 2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Patty #2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Kate A1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Kate A2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Kate B1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Tessa Lyn': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Patty #3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Smith #1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Smith #2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Dorcus': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Monique #1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Monique #2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Monique #3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Dawn #2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Dawn #3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Yvonne Transfer Pump 3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Yvonne Transfer Pump 2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Yvonne Transfer Pump 1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Bobbie #3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Kelsey Pit': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay WW 18 #5': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay WW 5-2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay WW 8-3': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay WW 18 #7': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay WW 806 North': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay WW 806 South': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay WW 18 #8': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Denali East Inlet': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Lindsey #1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Lindsey #2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Denali East Transfer Pump Monitor': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Map Rock Transfer Pump Monitor #2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Terri Frac Pit': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Dawn Frac Pit': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Barnett 19-2 WW': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Laney A #2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Barnett 24-1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Nancy Pit': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay WW 18 #2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay WW 18 #6': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay WW 6-2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay WW #7': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Banay WW 7-2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Penny North': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Penny South': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Terri Pit Inlet': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Baylee Pit': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}}}, 'Keegan Faudree Water': {'HPSO-1': {'Faudree Frac Pit Pump #1': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Faudree Frac Pit Pump #2': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Faudree West Tank Transfer': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Faudree East Transfer': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}}}, 'Henry Resources': {'HPSO-1': {'Melinda 252': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Gwendolyn SWD Transfer Station': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Benners North': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Avery Central': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Lisa Central': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'RankinBaker SWD': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wynn Central': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Sadie Central': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Benners Central': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Denise Central': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Emma Central': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Hollis Central': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Meredith Central': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'John J Bush Central': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Joshua Central': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Gwendolyn 23': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Noel Central': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Gwendolyn 24': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Gila S2': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Pearl Central': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Benedum Central': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}}}, 'Wishbone Water': {'HPSO-1': {'Wishbone Water #27 SR': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wishbone Water Well #14 SR': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wishbone/SM Booster Station': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}}}, 'Patriot Resources': {'HPSO-1': {'Transfer Addax Pit': {'Sales Price': 75, 'Platform Cost': 10, 'Platform': 'Mistaway', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}}}, 'Saulsbury Ventures': {'HPSO-1': {'Power Plant Transfer': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Triple 4in': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'InHand-Demo': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Dove Lease Checkmeter': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Single 12in': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}}}, 'Chuda Resources': {'HPSO-1': {'Chuda Flow Meter #1': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Chuda Flow Meter #4': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Chuda Flow Meter #2': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Chuda Flow Meter #3': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}}}, 'Faskens': {'HPSO-1': {'BV-602': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BZ-201': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'AU-3401': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BP Pond': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BL-3201': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BW-72': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'AW Battery': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BZ-202': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BN Pond': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BE-71': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'CI-401': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BJ-701': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BI-31': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BE-601': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BP-201': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'AA-101': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'AV-701': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'FB-501': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BQ-41': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BX-101': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BN-2202': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Fee BM Battery': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BP Battery': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BK-1701': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BQ-301': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Valve Controller': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BV-601': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'AW-901': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'CG-701': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'AS-11': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BL-3401': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BE-51': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BW-041': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'CG-601': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BM-1501': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BX-901': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'CI-501': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'AT-101': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BX-902': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'AW-3401': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BN-301': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BV Battery': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'S-601': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'CF Pond': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BY-501': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BK-801': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'CI-1301': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BP-601': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'CF-1501': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BV-101': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'BJ-101': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'AA Pond': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}}}, 'Amerus Safety Solutions': {'HPSO-1': {'Camera Trailer 107': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 200': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 129': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 202': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 206': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 201': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 102': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 110': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 203': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 204': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 116': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 101': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 127': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 109': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 128': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 112': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 114': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 120': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 119': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 103': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 100': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 205': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 105': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 106': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 126': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 111': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 115': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 117': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 122': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 113': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 104': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 108': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 123': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Camera Trailer 130': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}}}, 'Henry Petroleum': {'HPSO-1': {'Davis Check Meter': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Great Western Check Meter': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Francis Hill Check Meter': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Foundation Check Meter': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Wess Hill Check Meter': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Lively Check Meter': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Glasscock Check Meter': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Mann Check Meter': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}}}, 'Test Company': {'HPSO-1': {'HP Test Location 2': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'HP Test Location': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}}}, 'ConocoPhillips': {'HPSO-1': {'CRMWD': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Ratliff Well 42': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Ratliff Well A 35': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Ratliff Well 36': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Ratliff Well A 41': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Ratliff Well A 39': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Ratliff Well A 37': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Ratliff Well B 36': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Ratliff Well 45': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Ratliff Well A 34': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Ratliff Well A 43': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Ratliff Well A 46': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Ratliff Well 38': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Ratliff Well A 40': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Ratliff Well A 44': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Ratliff Prod Well 27': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Ratliff Well A 30': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Ratliff Well 29': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Ratliff Well 31': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Ratliff Well 28': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Pond A Gateway': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Headlee 3401 WS in3 Meter': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Purity-B': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'HP Inlet - 10in': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Ratliff Well A 33': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Ratliff Well A 32': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Tree Gateway': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'HP Outlet - 8in': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Parks Inlet #2 - 10in': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Yukon A': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Parks Inlet #1- 10in': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Pond A': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Purity-A': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Yukon B': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, '12in Flow Meter': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Parks Outlet - 6in': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Tree 22': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Tree 14': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Tree Pond': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Tree 17': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Tree 26': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Tree 13': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Tree 21': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Tree 20': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Tree 19': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Tree 25': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Tree 15': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Tree 16': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Tree 18': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}, 'Tree 23': {'Sales Price': 75, 'Platform Cost': 0, 'Platform': 'ThingsBoard', 'Cellular Cost': 15, 'Billing Type': 'Stand-Alone'}}}}\n" + ] + } + ], + "source": [ + "print(excel_data)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "#Build report from data" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "import xlsxwriter\n", + "import pandas as pd\n", + "\n", + "# Create a new Excel writer object\n", + "with pd.ExcelWriter(\"output.xlsx\", engine=\"xlsxwriter\") as writer:\n", + "\n", + " # Loop through customers\n", + " for customer, orders in excel_data.items():\n", + " \n", + " rows = []\n", + "\n", + " # Loop through each sales order for the customer\n", + " for order, items in orders.items():\n", + " for item, details in items.items():\n", + " row = {\n", + " \"Sales Order\": order,\n", + " \"Location\": item\n", + " }\n", + " row.update(details)\n", + " rows.append(row)\n", + " \n", + " # Convert the data to a DataFrame\n", + " df = pd.DataFrame(rows)\n", + " \n", + " # Sort by sales order\n", + " df = df.sort_values(by=\"Sales Order\")\n", + " \n", + " # Write to a specific sheet in the Excel file\n", + " df.to_excel(writer, sheet_name=customer, index=False)\n", + "\n", + " for column in df:\n", + " column_length = max(df[column].astype(str).map(len).max(), len(column))\n", + " col_idx = df.columns.get_loc(column)\n", + " writer.sheets[customer].set_column(col_idx, col_idx, column_length)\n", + " " + ] } ], "metadata": { + "kernelspec": { + "display_name": "thingsboard", + "language": "python", + "name": "python3" + }, "language_info": { - "name": "python" + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.5" }, "orig_nbformat": 4 }, diff --git a/output.xlsx b/output.xlsx new file mode 100644 index 0000000..2285f65 Binary files /dev/null and b/output.xlsx differ