diff --git a/reporting.ipynb b/reporting.ipynb index e62181a..51a5fe2 100644 --- a/reporting.ipynb +++ b/reporting.ipynb @@ -16,13 +16,13 @@ "import importlib\n", "importlib.reload(neo)\n", "\n", - "plant = neo.Plant.from_id(\"76f89f82-1238-43bb-b34f-796a92d491a2\")\n", - "print(plant.name)\n", + "#plant = neo.Asset.Plant.from_id(\"76f89f82-1238-43bb-b34f-796a92d491a2\")\n", + "#print(plant.name)\n", "\n", "\n", - "seedings = neo.Seeding.get_list()\n", + "seedings = neo.Log.Seeding.get_list()\n", "for seeding in seedings:\n", - " plant = seeding.getPlant()\n", + " plant = seeding.plant\n", " equipment = seeding.equipment[0]\n", " quantity1 = seeding.quantities[0]\n", " quantity2 = seeding.quantities[1]\n", @@ -45,6 +45,50 @@ " print(f\"Q2 units: {quantity2.units.name}\")" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "c1bf2175-65f7-4704-8d39-15a08849c9ae", + "metadata": { + "jupyter": { + "source_hidden": true + } + }, + "outputs": [], + "source": [ + "import neofarm.lib as neo\n", + "import importlib\n", + "importlib.reload(neo)\n", + "\n", + "#plant = neo.Asset.Plant.from_id(\"76f89f82-1238-43bb-b34f-796a92d491a2\")\n", + "#print(plant.name)\n", + "\n", + "\n", + "seedings = neo.Log.Purchase.get_list()\n", + "for seeding in seedings:\n", + " plant = seeding.plant\n", + " #equipment = seeding.equipment[0]\n", + " quantity1 = seeding.quantities[0]\n", + " # quantity2 = seeding.quantities[1]\n", + " print(f\"name: {seeding.name}\")\n", + " print(f\"timestamp: {seeding.timestamp}\")\n", + " #print(f\"plant name: {plant.name}\")\n", + " #print(f\"plant crop: {plant.crop[0].name}\")\n", + " #print(f\"plant loc: {plant.location[0].name}\")\n", + " #print(f\"equipment: {equipment.name}\")\n", + " print(f\"isMovement: {seeding.isMovement}\")\n", + " print(f\"Q1 type: {quantity1.type}\")\n", + " print(f\"Q1 measure: {quantity1.measure}\")\n", + " print(f\"Q1 value: {quantity1.value}\")\n", + " print(f\"Q1 units: {quantity1.units.name}\")\n", + " print(f\"Q1 inv adj: {quantity1.inventory_adjustment}\")\n", + " print(f\"Q1 inv ass: {quantity1.inventory_asset.name}\")\n", + " print(f\"Q2 type: {quantity2.type}\")\n", + " print(f\"Q2 measure: {quantity2.measure}\")\n", + " print(f\"Q2 value: {quantity2.value}\")\n", + " print(f\"Q2 units: {quantity2.units.name}\")" + ] + }, { "cell_type": "code", "execution_count": null, @@ -158,8 +202,8 @@ " print(f\"quant_measure: {input.quantities[0].measure}\")\n", " print(f\"quant_value: {input.quantities[0].value}\")\n", " print(f\"quant_inventory_adjustment: {input.quantities[0].inventory_adjustment}\")\n", - " print(f\"quant_value: {input.quantities[0].unit_price}\")\n", - "\n", + " #print(f\"quant_value: {input.quantities[0].unit_price}\")\n", + " print(f\"unit_name: {input.quantities[0].units.name}\")\n", " \t\n", "#log Seeding \n", " logs = asset.get_logs_of_type(neo.Log.Seeding)\n", @@ -246,70 +290,214 @@ }, { "cell_type": "code", - "execution_count": null, - "id": "ce30a9db-735e-4174-ad56-0f0079ab04c6", - "metadata": { - "jupyter": { - "source_hidden": true - } - }, - "outputs": [], - "source": [ - "#alle logs von einem Plant in Tabelle\n", - "import neofarm.lib as neo\n", - "import pandas as pd\n", - "from datetime import datetime\n", - "\n", - "if __name__ == \"__main__\":\n", - " asset = neo.Asset.Plant.from_id(\"76f89f82-1238-43bb-b34f-796a92d491a2\")\n", - " \n", - " # Definiere den Pflanzennamen\n", - " PlantName = \"W-Raps Helmacker Plant 24/25\"\n", - " print(f\"PlantName: {PlantName}\")\n", - " \n", - " # Erstelle eine Liste, in der die Log-Daten für die Tabelle gesammelt werden\n", - " data = []\n", - "\n", - " # Funktion, um die Logs zu verarbeiten und zur Tabelle hinzuzufügen\n", - " def process_logs(logs, log_type):\n", - " for log in logs:\n", - " formatted_date = datetime.fromisoformat(log.timestamp).strftime(\"%d.%m.%y %H:%M\")\n", - " equipment_name = log.equipment[0].name if log.equipment else \"\"\n", - " location_name = log.location[0].name if hasattr(log, 'location') and log.location else \"\"\n", - " data.append({\n", - " #\"PlantName\": PlantName,\n", - " \"LogType\": log_type,\n", - " \"Name\": log.name,\n", - " \"Timestamp\": formatted_date,\n", - " \"Equipment\": equipment_name,\n", - " \"Location\": location_name\n", - " })\n", - "\n", - " # Verarbeite die verschiedenen Log-Typen\n", - " process_logs(asset.get_logs_of_type(neo.Log.Maintenance), \"Maintenance\")\n", - " process_logs(asset.get_logs_of_type(neo.Log.Seeding), \"Seeding\")\n", - " process_logs(asset.get_logs_of_type(neo.Log.Input), \"Input\")\n", - " process_logs(asset.get_logs_of_type(neo.Log.Medical), \"Medical\")\n", - " process_logs(asset.get_logs_of_type(neo.Log.Harvest), \"Harvest\")\n", - " process_logs(asset.get_logs_of_type(neo.Log.Sale), \"Sale\")\n", - "\n", - " # Erstelle ein DataFrame aus den gesammelten Daten und zeige es an\n", - " df = pd.DataFrame(data)\n", - " display(df)\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "649e4d8e-c3a9-4d5f-9bdf-9427f416fca9", "metadata": { + "collapsed": true, "jupyter": { + "outputs_hidden": true, "source_hidden": true - } + }, + "scrolled": true }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "PlantName: W-Raps Helmacker Plant 24/25\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PlantNameLogTypeNameTimestampEquipmentLocationQuantTypeQuantMeasureQuantValueQuantInventoryAdjustment
0W-Raps Helmacker Plant 24/25MaintenanceScheibeneggen Helmacker Maintenance 24/2528.07.24 11:34Scheibenegge CatrosNonequantity--pricetime2None
1W-Raps Helmacker Plant 24/25SeedingW-Raps Otello KWS Helmacker Seeding 24/2522.08.24 22:00Sähmaschine CatayaHelmackerquantity--standardweight50decrement
2W-Raps Helmacker Plant 24/25SeedingW-Raps Otello KWS Helmacker Seeding 24/2522.08.24 22:00Sähmaschine CatayaHelmackerquantity--standardarea3.02None
3W-Raps Helmacker Plant 24/25InputInnovert Raps Input 24/2512.10.24 13:18SpritzeNonequantity--standardvolume10decrement
4W-Raps Helmacker Plant 24/25InputInnovert Raps Input 24/2503.11.24 23:00SpritzeNonequantity--standardvolume10decrement
5W-Raps Helmacker Plant 24/25MedicalSchneckenkorn Medical 24/2530.08.24 06:42Schneckenkornstreuer LeinfelderNonequantity--standardweight10decrement
6W-Raps Helmacker Plant 24/25HarvestW-Raps Helmacker Harvest 24/2520.10.24 10:11Mähdrescher LeinfelderNonequantity--standardweight5increment
7W-Raps Helmacker Plant 24/25SaleW-Raps Sale 24/2528.10.24 07:54NoneNonequantity--priceweight5decrement
\n", + "
" + ], + "text/plain": [ + " PlantName LogType \\\n", + "0 W-Raps Helmacker Plant 24/25 Maintenance \n", + "1 W-Raps Helmacker Plant 24/25 Seeding \n", + "2 W-Raps Helmacker Plant 24/25 Seeding \n", + "3 W-Raps Helmacker Plant 24/25 Input \n", + "4 W-Raps Helmacker Plant 24/25 Input \n", + "5 W-Raps Helmacker Plant 24/25 Medical \n", + "6 W-Raps Helmacker Plant 24/25 Harvest \n", + "7 W-Raps Helmacker Plant 24/25 Sale \n", + "\n", + " Name Timestamp \\\n", + "0 Scheibeneggen Helmacker Maintenance 24/25 28.07.24 11:34 \n", + "1 W-Raps Otello KWS Helmacker Seeding 24/25 22.08.24 22:00 \n", + "2 W-Raps Otello KWS Helmacker Seeding 24/25 22.08.24 22:00 \n", + "3 Innovert Raps Input 24/25 12.10.24 13:18 \n", + "4 Innovert Raps Input 24/25 03.11.24 23:00 \n", + "5 Schneckenkorn Medical 24/25 30.08.24 06:42 \n", + "6 W-Raps Helmacker Harvest 24/25 20.10.24 10:11 \n", + "7 W-Raps Sale 24/25 28.10.24 07:54 \n", + "\n", + " Equipment Location QuantType \\\n", + "0 Scheibenegge Catros None quantity--price \n", + "1 Sähmaschine Cataya Helmacker quantity--standard \n", + "2 Sähmaschine Cataya Helmacker quantity--standard \n", + "3 Spritze None quantity--standard \n", + "4 Spritze None quantity--standard \n", + "5 Schneckenkornstreuer Leinfelder None quantity--standard \n", + "6 Mähdrescher Leinfelder None quantity--standard \n", + "7 None None quantity--price \n", + "\n", + " QuantMeasure QuantValue QuantInventoryAdjustment \n", + "0 time 2 None \n", + "1 weight 50 decrement \n", + "2 area 3.02 None \n", + "3 volume 10 decrement \n", + "4 volume 10 decrement \n", + "5 weight 10 decrement \n", + "6 weight 5 increment \n", + "7 weight 5 decrement " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "#Alle logs zu plant mit quantities untereinander\n", + "#Alle logs zu plant mit quantities untereinander tabelle\n", "import neofarm.lib as neo\n", "import pandas as pd\n", "from datetime import datetime\n", @@ -385,7 +573,7 @@ }, "outputs": [], "source": [ - "#Alle logs zu plant mit quantities nebeneinander\n", + "#Alle logs zu plant mit quantities nebeneinander tabelle\n", "import neofarm.lib as neo\n", "import pandas as pd\n", "from datetime import datetime\n", @@ -465,7 +653,11 @@ "cell_type": "code", "execution_count": null, "id": "c1b73098-08f3-43fd-9bf0-d3d628b15e0d", - "metadata": {}, + "metadata": { + "jupyter": { + "source_hidden": true + } + }, "outputs": [], "source": [ "#Alle logs zu plant mit quantities nebeneinander in Excel exportiert\n", @@ -481,12 +673,16 @@ "downloads_folder = os.path.join(os.path.expanduser(\"~\"), \"Downloads\")\n", "file_path = os.path.join(downloads_folder, \"PlantLogs.xlsx\")\n", "\n", - "if __name__ == \"__main__\":\n", - " asset = neo.Asset.Plant.from_id(\"76f89f82-1238-43bb-b34f-796a92d491a2\")\n", "\n", - " # Definiere den Pflanzennamen\n", - " PlantName = \"W-Raps Helmacker Plant 24/25\"\n", - " print(f\"PlantName: {PlantName}\")\n", + "# Definiere den Pflanzennamen\n", + "PlantName = \"W-Raps Helmacker Plant 24/25\"\n", + "PlantId = \"76f89f82-1238-43bb-b34f-796a92d491a2\"\n", + "print(f\"PlantName: {PlantName}\")\n", + "\n", + "\n", + "if __name__ == \"__main__\":\n", + " asset = neo.Asset.Plant.from_id(PlantId)\n", + "\n", "\n", " data = []\n", "\n", @@ -573,7 +769,7 @@ " cell.number_format = 'DD.MM.YYYY' # Setze das Datumsformat\n", " \n", " max_length = max(max_length, len(str(cell.value)) if cell.value else 0)\n", - " adjusted_width = (max_length + 2) * 1.2 # Extra Puffer hinzufügen\n", + " adjusted_width = (max_length + 2) * 1.0 # Extra Puffer hinzufügen\n", " worksheet.column_dimensions[col_letter].width = adjusted_width\n", "\n", " # Speichern Sie die Datei\n", @@ -585,9 +781,88 @@ "cell_type": "code", "execution_count": null, "id": "ebcc62d0-4334-4c61-aaa2-14cd96e8a6f0", - "metadata": {}, + "metadata": { + "jupyter": { + "source_hidden": true + } + }, "outputs": [], - "source": [] + "source": [ + "#Alle logs zu plant mit quantities nebeneinander tabelle\n", + "import neofarm.lib as neo\n", + "import pandas as pd\n", + "from datetime import datetime\n", + "\n", + "if __name__ == \"__main__\":\n", + " asset = neo.Asset.Plant.from_id(\"\")\n", + "\n", + " # Definiere den Pflanzennamen\n", + " PlantName = \"W-Raps Helmacker Plant 24/25\"\n", + " print(f\"PlantName: {PlantName}\")\n", + "\n", + " # Erstelle eine Liste zur Sammlung der Daten\n", + " data = []\n", + "\n", + " # Funktion, um Logs zu verarbeiten und die Daten zur Liste hinzuzufügen\n", + " def process_logs(logs, log_type):\n", + " for log in logs:\n", + " formatted_date = datetime.fromisoformat(log.timestamp).strftime(\"%d.%m.%y %H:%M\")\n", + " equipment_name = log.equipment[0].name if log.equipment else \"None\"\n", + " location_name = log.location[0].name if hasattr(log, 'location') and log.location else \"\"\n", + "\n", + " # Menge und weitere Details (bis zu zwei Mengen)\n", + " quantities = getattr(log, 'quantities', [])\n", + " \n", + " # Initialisiere Standardwerte für die zweite Menge\n", + " quant_type_2 = quant_measure_2 = quant_value_2 = quant_inventory_adjustment_2 = \"\"\n", + "\n", + " if len(quantities) > 0:\n", + " # Erste Menge vorhanden\n", + " quant_type_1 = quantities[0].type\n", + " quant_measure_1 = quantities[0].measure\n", + " quant_value_1 = quantities[0].value\n", + " quant_inventory_adjustment_1 = quantities[0].inventory_adjustment\n", + " else:\n", + " # Keine Mengenangaben vorhanden\n", + " quant_type_1 = quant_measure_1 = quant_value_1 = quant_inventory_adjustment_1 = \"\"\n", + " \n", + " if len(quantities) > 1:\n", + " # Zweite Menge vorhanden\n", + " quant_type_2 = quantities[1].type\n", + " quant_measure_2 = quantities[1].measure\n", + " quant_value_2 = quantities[1].value\n", + " quant_inventory_adjustment_2 = quantities[1].inventory_adjustment\n", + "\n", + " # Daten zur Tabelle hinzufügen\n", + " data.append({\n", + " \"PlantName\": PlantName,\n", + " \"LogType\": log_type,\n", + " \"Name\": log.name,\n", + " \"Timestamp\": formatted_date,\n", + " \"Equipment\": equipment_name,\n", + " \"Location\": location_name,\n", + " \"QuantType_1\": quant_type_1,\n", + " \"QuantMeasure_1\": quant_measure_1,\n", + " \"QuantValue_1\": quant_value_1,\n", + " \"QuantInventoryAdjustment_1\": quant_inventory_adjustment_1,\n", + " \"QuantType_2\": quant_type_2,\n", + " \"QuantMeasure_2\": quant_measure_2,\n", + " \"QuantValue_2\": quant_value_2,\n", + " \"QuantInventoryAdjustment_2\": quant_inventory_adjustment_2\n", + " })\n", + "\n", + " # Verarbeite die verschiedenen Log-Typen\n", + " process_logs(asset.get_logs_of_type(neo.Log.Maintenance), \"Maintenance\")\n", + " process_logs(asset.get_logs_of_type(neo.Log.Seeding), \"Seeding\")\n", + " process_logs(asset.get_logs_of_type(neo.Log.Input), \"Input\")\n", + " process_logs(asset.get_logs_of_type(neo.Log.Medical), \"Medical\")\n", + " process_logs(asset.get_logs_of_type(neo.Log.Harvest), \"Harvest\")\n", + " process_logs(asset.get_logs_of_type(neo.Log.Sale), \"Sale\")\n", + "\n", + " # Erstelle ein DataFrame aus den gesammelten Daten und zeige es an\n", + " df = pd.DataFrame(data)\n", + " display(df)\n" + ] }, { "cell_type": "code",