{ "cells": [ { "cell_type": "code", "execution_count": null, "id": "f512fba3-877f-411e-935c-0c878d478b2d", "metadata": { "jupyter": { "source_hidden": true }, "scrolled": true }, "outputs": [], "source": [ "import neofarm.lib as neo\n", "\n", "#plant = neo.Asset.Plant.from_id(\"76f89f82-1238-43bb-b34f-796a92d491a2\")\n", "#print(plant.name)\n", "\n", "\n", "seedings = neo.Log.Seeding.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, "id": "c1bf2175-65f7-4704-8d39-15a08849c9ae", "metadata": { "jupyter": { "source_hidden": true } }, "outputs": [], "source": [ "import neofarm.lib as 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, "id": "fdf49f3b-3949-4895-97fb-f5bd2484fce3", "metadata": { "jupyter": { "source_hidden": true } }, "outputs": [], "source": [ "import neofarm.lib as neo\n", "\n", "inputs = neo.Input.get_list()\n", "for element in inputs:\n", " #equipment = element.equipment[0]\n", " print(f\"name: {element.name}\")\n", " print(f\"timestamp: {element.timestamp}\")\n", " print(f\"plant name: {element.plant.name}\")\n", " print(f\"plant crop: {element.plant.crop[0].name}\")\n", " print(f\"plant loc: {element.plant.location[0].name}\")\n", " print(f\"equipment: {element.equipment[0].name}\")\n", " print(f\"isMovement: {element.isMovement}\")" ] }, { "cell_type": "code", "execution_count": null, "id": "28598d92-24f2-47cb-bb19-9943800eefe1", "metadata": { "jupyter": { "source_hidden": true } }, "outputs": [], "source": [ "import neofarm.lib as neo\n", "\n", "data = neo.Harvest.get_list()\n", "for element in data:\n", " #equipment = element.equipment[0]\n", " print(f\"name: {element.name}\")\n", " print(f\"timestamp: {element.timestamp}\")\n", " print(f\"plant name: {element.plant.name}\")\n", " print(f\"plant crop: {element.plant.crop[0].name}\")\n", " print(f\"plant loc: {element.plant.location[0].name}\")\n", " print(f\"equipment: {element.equipment[0].name}\")\n", " print(f\"isMovement: {element.isMovement}\")\n", " print(f\"Name vom Inventory asset von der Quantity: {element.quantities[0].inventory_asset.name}\")" ] }, { "cell_type": "code", "execution_count": null, "id": "a993570d-dea2-4bd6-80c0-b36297ce6a3a", "metadata": { "jupyter": { "source_hidden": true } }, "outputs": [], "source": [ "#Beispiel\n", "import neofarm.lib as neo\n", "\n", "if __name__ == \"__main__\":\n", " asset = neo.Asset.Plant.from_id(\"76f89f82-1238-43bb-b34f-796a92d491a2\")\n", " logs = asset.get_logs_of_type(neo.Log.Activity)\n", " for log in logs:\n", " print(log.name)" ] }, { "cell_type": "code", "execution_count": null, "id": "3a33ffb1-afe7-44b5-863b-9779a95a2a9c", "metadata": { "jupyter": { "source_hidden": true } }, "outputs": [], "source": [ "# alle logs von einem Plant\n", "import neofarm.lib as neo\n", "from datetime import datetime\n", "\n", "if __name__ == \"__main__\":\n", " asset = neo.Asset.Plant.from_id(\"76f89f82-1238-43bb-b34f-796a92d491a2\")\n", "\n", "#Plantname\n", " PlantName = \"W-Raps Helmacker Plant 24/25\" \n", " print(f\"PlantName: {PlantName}\")\n", "\n", " \n", "#log Maintenance\n", " logs = asset.get_logs_of_type(neo.Log.Maintenance)\n", " for log in logs:\n", " print(\"Maintenance:\")\n", " print(f\"name: {log.name}\")\n", " formatted_date = datetime.fromisoformat(log.timestamp).strftime(\"%d.%m.%y %H:%M \") # Konvertiere in das gewünschte Format\n", " print(f\"timestamp: {formatted_date}\") \n", " print(f\"equipment: {log.equipment[0].name}\")\n", "#quantity\n", " input=neo.Log.Maintenance.from_id(log.id)\n", " print(f\"quant_type: {input.quantities[0].type}\")\n", " 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", " 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", " for log in logs:\n", " print(\"Seeding:\")\n", " print(f\"name: {log.name}\")\n", " formatted_date = datetime.fromisoformat(log.timestamp).strftime(\"%d.%m.%y %H:%M \") # Konvertiere in das gewünschte Format\n", " print(f\"timestamp: {formatted_date}\")\n", " print(f\"equipment: {log.equipment[0].name}\")\n", " print(f\"plant loc: {log.location[0].name}\")\n", "#quantity\n", " input=neo.Log.Seeding.from_id(log.id)\n", " print(f\"quant_type: {input.quantities[0].type}\")\n", " 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", " \t\n", "\n", "#log Input \n", " logs = asset.get_logs_of_type(neo.Log.Input)\n", " for log in logs:\n", " print(\"Input:\")\n", " print(f\"name: {log.name}\")\n", " #print(f\"name: {log.id}\")\n", " formatted_date = datetime.fromisoformat(log.timestamp).strftime(\"%d.%m.%y %H:%M \") # Konvertiere in das gewünschte Format\n", " print(f\"timestamp: {formatted_date}\")\n", " print(f\"equipment: {log.equipment[0].name}\")\n", "\n", "#quantity\n", " input=neo.Log.Input.from_id(log.id)\n", " print(f\"quant_type: {input.quantities[0].type}\")\n", " 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", "\n", "#log Medical\n", " logs = asset.get_logs_of_type(neo.Log.Medical)\n", " for log in logs:\n", " print(\"Medical:\")\n", " print(f\"name: {log.name}\")\n", " formatted_date = datetime.fromisoformat(log.timestamp).strftime(\"%d.%m.%y %H:%M \") # Konvertiere in das gewünschte Format\n", " print(f\"timestamp: {formatted_date}\")\n", " print(f\"equipment: {log.equipment[0].name}\")\n", "\n", "#quantity\n", " input=neo.Log.Medical.from_id(log.id)\n", " print(f\"quant_type: {input.quantities[0].type}\")\n", " 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", "\n", "\n", "#log Harvest \n", " logs = asset.get_logs_of_type(neo.Log.Harvest)\n", " for log in logs:\n", " print(\"Harvest:\")\n", " print(f\"name: {log.name}\")\n", " formatted_date = datetime.fromisoformat(log.timestamp).strftime(\"%d.%m.%y %H:%M \") # Konvertiere in das gewünschte Format\n", " print(f\"timestamp: {formatted_date}\")\n", " print(f\"equipment: {log.equipment[0].name}\")\n", "\n", "#quantity\n", " input=neo.Log.Harvest.from_id(log.id)\n", " print(f\"quant_type: {input.quantities[0].type}\")\n", " 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", "\n", "#log Sale \n", " logs = asset.get_logs_of_type(neo.Log.Sale)\n", " for log in logs:\n", " print(\"Sale:\")\n", " print(f\"name: {log.name}\")\n", " formatted_date = datetime.fromisoformat(log.timestamp).strftime(\"%d.%m.%y %H:%M \") # Konvertiere in das gewünschte Format\n", " print(f\"timestamp: {formatted_date}\")\n", "\n", "#quantity\n", " input=neo.Log.Sale.from_id(log.id)\n", " print(f\"quant_type: {input.quantities[0].type}\")\n", " 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}\")" ] }, { "cell_type": "code", "execution_count": 1, "id": "649e4d8e-c3a9-4d5f-9bdf-9427f416fca9", "metadata": { "collapsed": true, "jupyter": { "outputs_hidden": true, "source_hidden": true }, "scrolled": true }, "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 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 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 \"None\"\n", "\n", " # Menge und weitere Details (falls vorhanden)\n", " quantities = getattr(log, 'quantities', [])\n", " for quantity in quantities:\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\": quantity.type,\n", " \"QuantMeasure\": quantity.measure,\n", " \"QuantValue\": quantity.value,\n", " \"QuantInventoryAdjustment\": quantity.inventory_adjustment\n", " })\n", " # Falls keine Mengeninformationen vorhanden sind\n", " if not quantities:\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\": \"None\",\n", " \"QuantMeasure\": \"None\",\n", " \"QuantValue\": \"None\",\n", " \"QuantInventoryAdjustment\": \"None\"\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, "id": "ef3c14f0-b158-4be9-ae7d-fd3b81aeb4ff", "metadata": { "jupyter": { "source_hidden": true } }, "outputs": [], "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(\"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 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", "execution_count": null, "id": "c1b73098-08f3-43fd-9bf0-d3d628b15e0d", "metadata": { "jupyter": { "source_hidden": true } }, "outputs": [], "source": [ "#Alle logs zu plant mit quantities nebeneinander in Excel exportiert\n", "import neofarm.lib as neo\n", "import pandas as pd\n", "from datetime import datetime\n", "import os\n", "from openpyxl import load_workbook\n", "from openpyxl.utils import get_column_letter\n", "from openpyxl.styles import Alignment\n", "\n", "# Spezifizierter Pfad zum Downloads-Ordner (Windows-Standardpfad)\n", "downloads_folder = os.path.join(os.path.expanduser(\"~\"), \"Downloads\")\n", "file_path = os.path.join(downloads_folder, \"PlantLogs.xlsx\")\n", "\n", "\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", " # 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", " # Entferne die Zeitzone vom Timestamp\n", " timestamp = datetime.fromisoformat(log.timestamp).replace(tzinfo=None) # Sicherstellen, dass es timezone-unaware ist\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", "\n", " quantities = getattr(log, 'quantities', [])\n", " quant_type_2 = quant_measure_2 = quant_value_2 = quant_inventory_adjustment_2 = \"\"\n", "\n", " if len(quantities) > 0:\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", " quant_type_1 = quant_measure_1 = quant_value_1 = quant_inventory_adjustment_1 = \"\"\n", " \n", " if len(quantities) > 1:\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", " data.append({\n", " \"PlantName\": PlantName,\n", " \"LogType\": log_type,\n", " \"Name\": log.name,\n", " \"Timestamp\": timestamp, # Direkte Speicherung des datetime-Objekts\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\n", " df = pd.DataFrame(data)\n", " \n", " # Prüfe, ob die Datei bereits existiert\n", " if os.path.exists(file_path):\n", " overwrite = input(f\"Die Datei '{file_path}' existiert bereits. Möchten Sie sie überschreiben? (ja/nein): \")\n", " if overwrite.lower() != 'ja':\n", " print(\"Der Export wurde abgebrochen.\")\n", " else:\n", " df.to_excel(file_path, index=False)\n", " else:\n", " df.to_excel(file_path, index=False)\n", "\n", " # Lade die Arbeitsmappe, um Formatierungen hinzuzufügen\n", " workbook = load_workbook(file_path)\n", " worksheet = workbook.active\n", "\n", " # Füge Autofilter hinzu\n", " worksheet.auto_filter.ref = worksheet.dimensions\n", "\n", " # Passen Sie die Spaltenbreite an und aktivieren Sie den Zeilenumbruch\n", " for col in worksheet.columns:\n", " max_length = 0\n", " col_letter = get_column_letter(col[0].column)\n", " for cell in col:\n", " # Setze den Zeilenumbruch\n", " cell.alignment = Alignment(wrap_text=True) # Zeilenumbruch aktivieren\n", " \n", " # Formatieren der Timestamp-Spalte als Datum\n", " if col_letter == 'D': # Angenommen, die Timestamp-Spalte ist Spalte D\n", " 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.0 # Extra Puffer hinzufügen\n", " worksheet.column_dimensions[col_letter].width = adjusted_width\n", "\n", " # Speichern Sie die Datei\n", " workbook.save(file_path)\n", " print(f\"Die Datei wurde erfolgreich nach '{file_path}' exportiert, mit Autofilter, Zeilenumbruch und angepasster Spaltenbreite.\")\n" ] }, { "cell_type": "code", "execution_count": null, "id": "ebcc62d0-4334-4c61-aaa2-14cd96e8a6f0", "metadata": { "jupyter": { "source_hidden": true } }, "outputs": [], "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", "execution_count": null, "id": "de57b155-d635-4367-9a56-90d033c3a922", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.5" } }, "nbformat": 4, "nbformat_minor": 5 }