diff --git a/reporting.ipynb b/reporting.ipynb index 1e26829..a5deb18 100644 --- a/reporting.ipynb +++ b/reporting.ipynb @@ -5,6 +5,9 @@ "execution_count": null, "id": "f512fba3-877f-411e-935c-0c878d478b2d", "metadata": { + "jupyter": { + "source_hidden": true + }, "scrolled": true }, "outputs": [], @@ -112,7 +115,11 @@ "cell_type": "code", "execution_count": null, "id": "28598d92-24f2-47cb-bb19-9943800eefe1", - "metadata": {}, + "metadata": { + "jupyter": { + "source_hidden": true + } + }, "outputs": [], "source": [ "import neofarm.lib as neo\n", @@ -155,7 +162,11 @@ "cell_type": "code", "execution_count": null, "id": "3a33ffb1-afe7-44b5-863b-9779a95a2a9c", - "metadata": {}, + "metadata": { + "jupyter": { + "source_hidden": true + } + }, "outputs": [], "source": [ "# alle logs von einem Plant \n", @@ -163,6 +174,7 @@ "from datetime import datetime\n", "\n", "if __name__ == \"__main__\":\n", + " \n", " asset = neo.Asset.Plant.from_id(\"76f89f82-1238-43bb-b34f-796a92d491a2\")\n", "\n", "#Plantname\n", @@ -186,7 +198,8 @@ " print(f\"quant_inventory_adjustment: {input.quantities[0].inventory_adjustment}\")\n", " print(f\"quant_value: {input.quantities[0].value}\")\n", " print(f\"unit_name: {input.quantities[0].units.name}\")\n", - " \n", + " print (f\"unit_price_1: = {input.quantities[0].unit_price}\")\n", + " print (f\"unit_price_1: = {input.quantities[0].total_price}\")\n", " \t\n", "#log Seeding \n", " logs = asset.get_logs_of_type(neo.Log.Seeding)\n", @@ -372,11 +385,14 @@ "execution_count": null, "id": "d6d12b59-4895-426e-9a30-c9cee801671e", "metadata": { + "jupyter": { + "source_hidden": true + }, "scrolled": true }, "outputs": [], "source": [ - "#Master Report\n", + "#Master Report je Plant\n", "# Importieren der benötigten Bibliotheken\n", "import neofarm.lib as neo\n", "import pandas as pd\n", @@ -433,24 +449,29 @@ " quantities = getattr(log, 'quantities', [])\n", " \n", " # Initialisieren von Platzhaltern für den Fall, dass weniger als zwei Mengen vorhanden sind\n", - " quant_type_2 = quant_measure_2 = quant_value_2 = quant_inventory_adjustment_2 = \"\"\n", + " quant_type_2 = quant_measure_2 = quant_value_2 = quant_inventory_adjustment_2 = quant_unit_price_1 = quant_total_price_1 =quant_inventory_name_1 = \"\"\n", " quant_unit_name_1 = quant_unit_name_2 = \"\"\n", "\n", + "\n", + "\n", + "\n", + " \n", " # Verarbeitung der ersten Menge, falls vorhanden\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_unit_price_1 = quantities[0].unit_price \n", - " #quant_total_price = quantities[0].total_price\n", + " quant_unit_price_1 = quantities[0].unit_price if hasattr(quantities[0], 'unit_price') and quantities[0].unit_price else \"\"\n", + " quant_total_price_1 = quantities[0].total_price if hasattr(quantities[0], 'total_price') and quantities[0].total_price else \"\"\n", " quant_inventory_adjustment_1 = quantities[0].inventory_adjustment\n", - " # quant_inventory_name_1 = quantities[0].inventory_asset\n", + " quant_inventory_name_1 = quantities[0].inventory_asset.name if hasattr(quantities[0], 'inventory_asset.name') and quantities[0].inventory_asset.name else \"\"\n", " quant_unit_name_1 = quantities[0].units.name if quantities[0].units else \"\"\n", " quant_inventory_name_1 = quantities[0].inventory_asset.name if quantities[0].inventory_asset else \"\"\n", " \n", + " \n", " else:\n", " # Leere Werte, falls keine Menge vorhanden ist\n", - " quant_type_1 = quant_measure_1 = quant_value_1 = quant_inventory_adjustment_1 = \"\"\n", + " quant_type_1 = quant_measure_1 = quant_value_1 = quant_inventory_adjustment_1 = quant_unit_price_1 = quant_total_price_1 = quant_inventory_name_1 = \"\"\n", "\n", " # Verarbeitung der zweiten Menge, falls vorhanden\n", " if len(quantities) > 1:\n", @@ -472,8 +493,152 @@ " \"QuantMeasure_1\": quant_measure_1,\n", " \"QuantValue_1\": quant_value_1,\n", " \"QuantUnitName1\": quant_unit_name_1,\n", + " \"QuantUnitPrice_1\" : quant_unit_price_1,\n", + " \"QuantTotalPrice_1\" : quant_total_price_1,\n", " \"QuantInventoryAdjustment_1\": quant_inventory_adjustment_1,\n", - " \"quant_inventory_name_1\": quant_inventory_name_1,\n", + " \"QuantInventoryName_1\": quant_inventory_name_1,\n", + " \"QuantType_2\": quant_type_2,\n", + " \"QuantMeasure_2\": quant_measure_2,\n", + " \"QuantValue_2\": quant_value_2,\n", + " \"QuantUnitName2\": quant_unit_name_2,\n", + " \"QuantInventoryAdjustment_2\": quant_inventory_adjustment_2\n", + " })\n", + " \n", + " # Rückgabe des DataFrames mit allen gesammelten Log-Daten\n", + " return pd.DataFrame(data)\n", + "\n", + "# Beispielaufruf zur Demonstration\n", + "if __name__ == \"__main__\":\n", + " # ID und Name der Pflanze definieren\n", + " asset_id = \"76f89f82-1238-43bb-b34f-796a92d491a2\"\n", + " plant_name = \"W-Raps Helmacker Plant 24/25\"\n", + " \n", + " # Abrufen und Formatieren der Logs in einem DataFrame\n", + " df = process_logs(asset_id, plant_name)\n", + " \n", + " # Konvertieren des 'Timestamp' in ein Datum für die korrekte Anzeige und Berechnung\n", + " df['Timestamp'] = pd.to_datetime(df['Timestamp'], format=\"%d.%m.%Y\")\n", + " \n", + " # Anzeigen des DataFrames zur Veranschaulichung\n", + " display(df)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "19779605-63f3-46b0-b382-ec0e979b2eae", + "metadata": { + "jupyter": { + "source_hidden": true + } + }, + "outputs": [], + "source": [ + "#Master Report Baustelle\n", + "# Importieren der benötigten Bibliotheken\n", + "import neofarm.lib as neo\n", + "import pandas as pd\n", + "from datetime import datetime\n", + "\n", + "def process_logs(asset_id, plant_name):\n", + " \"\"\"\n", + " Diese Funktion ruft alle Log-Daten für eine bestimmte Pflanzen-ID ab,\n", + " formatiert sie und organisiert sie in einer Liste von Dictionarys.\n", + " Schließlich gibt sie einen DataFrame zurück, der die aggregierten Log-Daten enthält.\n", + " \n", + " Parameter:\n", + " asset_id (str): Die ID der Pflanze, für die die Logs abgerufen werden sollen.\n", + " plant_name (str): Der Name der Pflanze.\n", + "\n", + " Rückgabe:\n", + " pd.DataFrame: Ein DataFrame mit allen gesammelten Log-Daten zur angegebenen Pflanze.\n", + " \"\"\"\n", + " # Lade die Pflanze basierend auf ihrer ID\n", + " asset = neo.Asset.Plant.from_id(asset_id)\n", + " data = [] # Liste zum Sammeln der Log-Daten\n", + " \n", + " # Definieren der Log-Typen, die abgefragt werden sollen\n", + " log_types = [\n", + " (\"Maintenance\", neo.Log.Maintenance),\n", + " (\"Seeding\", neo.Log.Seeding),\n", + " (\"Input\", neo.Log.Input),\n", + " (\"Medical\", neo.Log.Medical),\n", + " (\"Harvest\", neo.Log.Harvest),\n", + " (\"Sale\", neo.Log.Sale),\n", + " ]\n", + " \n", + " # Durchlaufen jeder Log-Typ-Kombination und Abrufen der zugehörigen Log-Daten\n", + " for log_name, log_type in log_types:\n", + " logs = asset.get_logs_of_type(log_type)\n", + " \n", + " # Verarbeitung der einzelnen Logs für den aktuellen Log-Typ\n", + " for log in logs:\n", + " # Formatieren des Timestamps im deutschen Datumsformat\n", + " formatted_date = datetime.fromisoformat(log.timestamp).strftime(\"%d.%m.%Y\")\n", + " \n", + " # Abrufen des ersten Equipment-Namens oder Standardwert, falls nicht vorhanden\n", + " equipment_name = log.equipment[0].name if log.equipment else \"None\"\n", + "\n", + " \n", + " # Abrufen des ersten Location-Namens oder leer, falls nicht vorhanden\n", + " location_name = log.location[0].name if hasattr(log, 'location') and log.location else \"\"\n", + "\n", + " # Abrufen des ersten inventory_asset-Namens oder leer, falls nicht vorhanden\n", + " #inventory_asset_name = log.inventory_asset.name if hasattr(log, 'inventory_asset') and log.inventory_asset else \"\"\n", + "\n", + " \n", + " # Abrufen aller Mengen (quantities) im Log\n", + " quantities = getattr(log, 'quantities', [])\n", + " \n", + " # Initialisieren von Platzhaltern für den Fall, dass weniger als zwei Mengen vorhanden sind\n", + " quant_type_2 = quant_measure_2 = quant_value_2 = quant_inventory_adjustment_2 = quant_unit_price_1 = quant_total_price_1 =quant_inventory_name_1 = \"\"\n", + " quant_unit_name_1 = quant_unit_name_2 = \"\"\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " # Verarbeitung der ersten Menge, falls vorhanden\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_unit_price_1 = quantities[0].unit_price if hasattr(quantities[0], 'unit_price') and quantities[0].unit_price else \"\"\n", + " quant_total_price_1 = quantities[0].total_price if hasattr(quantities[0], 'total_price') and quantities[0].total_price else \"\"\n", + " quant_inventory_adjustment_1 = quantities[0].inventory_adjustment\n", + " quant_inventory_name_1 = quantities[0].inventory_asset.name if hasattr(quantities[0], 'inventory_asset.name') and quantities[0].inventory_asset.name else \"\"\n", + " quant_unit_name_1 = quantities[0].units.name if quantities[0].units else \"\"\n", + " quant_inventory_name_1 = quantities[0].inventory_asset.name if quantities[0].inventory_asset else \"\"\n", + " \n", + " \n", + " else:\n", + " # Leere Werte, falls keine Menge vorhanden ist\n", + " quant_type_1 = quant_measure_1 = quant_value_1 = quant_inventory_adjustment_1 = quant_unit_price_1 = quant_total_price_1 = quant_inventory_name_1 = \"\"\n", + "\n", + " # Verarbeitung der zweiten Menge, falls vorhanden\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", + " quant_unit_name_2 = quantities[1].units.name if quantities[1].units else \"\"\n", + "\n", + " # Hinzufügen der gesammelten Daten für diesen Log als Dictionary in die Liste\n", + " data.append({\n", + " \"PlantName\": plant_name,\n", + " \"LogType\": log_name,\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", + " \"QuantUnitName1\": quant_unit_name_1,\n", + " \"QuantUnitPrice_1\" : quant_unit_price_1,\n", + " \"QuantTotalPrice_1\" : quant_total_price_1,\n", + " \"QuantInventoryAdjustment_1\": quant_inventory_adjustment_1,\n", + " \"QuantInventoryName_1\": quant_inventory_name_1,\n", " \"QuantType_2\": quant_type_2,\n", " \"QuantMeasure_2\": quant_measure_2,\n", " \"QuantValue_2\": quant_value_2,\n", @@ -573,129 +738,15 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "849c4af5-f0f9-47f4-b841-fa8dc3e27c15", "metadata": { - "collapsed": true, "jupyter": { - "outputs_hidden": true, "source_hidden": true }, "scrolled": true }, - "outputs": [ - { - "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", - "
nametimestampplant_nameplant_cropplant_locationequipmentisMovementQ1_typeQ1_measureQ1_valueQ1_unitsQ1_inventory_adjustmentQ1_inventory_assetQ2_typeQ2_measureQ2_valueQ2_units
0W-Raps Otello KWS Helmacker Seeding 24/2522.08.2024W-Raps Helmacker Plant 24/25RapsHelmackerSähmaschine CatayaFalsequantity--standardweight50kgdecrementW-Raps Saatgut Otello KWS Seed 08/24quantity--standardarea3.02ha
1W-Raps Otello KWS Nachtweide Seeding 24/2528.08.2024W-Raps Nachtweide Plant 24/25RapsNachtweideSähmaschine CatayaFalsequantity--standardweight66kgdecrementW-Raps Saatgut Otello KWS Seed 08/24quantity--standardarea4.5ha
\n", - "
" - ], - "text/plain": [ - " name timestamp \\\n", - "0 W-Raps Otello KWS Helmacker Seeding 24/25 22.08.2024 \n", - "1 W-Raps Otello KWS Nachtweide Seeding 24/25 28.08.2024 \n", - "\n", - " plant_name plant_crop plant_location \\\n", - "0 W-Raps Helmacker Plant 24/25 Raps Helmacker \n", - "1 W-Raps Nachtweide Plant 24/25 Raps Nachtweide \n", - "\n", - " equipment isMovement Q1_type Q1_measure Q1_value \\\n", - "0 Sähmaschine Cataya False quantity--standard weight 50 \n", - "1 Sähmaschine Cataya False quantity--standard weight 66 \n", - "\n", - " Q1_units Q1_inventory_adjustment Q1_inventory_asset \\\n", - "0 kg decrement W-Raps Saatgut Otello KWS Seed 08/24 \n", - "1 kg decrement W-Raps Saatgut Otello KWS Seed 08/24 \n", - "\n", - " Q2_type Q2_measure Q2_value Q2_units \n", - "0 quantity--standard area 3.02 ha \n", - "1 quantity--standard area 4.5 ha " - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "#Alle Seeding Logs\n", "import neofarm.lib as neo\n", @@ -741,80 +792,14 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "27e54d8e-cda2-465c-88eb-963a0fff3c5d", "metadata": { - "collapsed": true, "jupyter": { - "outputs_hidden": true + "source_hidden": true } }, - "outputs": [ - { - "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", - "
nametimestampplant_nameequipmentQ1_typeQ1_measureQ1_valueQ1_unitsQ1_inventory_adjustment
0Scheibeneggen Helmacker Maintenance 24/2528.07.2024W-Raps Helmacker Plant 24/25Scheibenegge Catrosquantity--pricetime2hNone
\n", - "
" - ], - "text/plain": [ - " name timestamp \\\n", - "0 Scheibeneggen Helmacker Maintenance 24/25 28.07.2024 \n", - "\n", - " plant_name equipment Q1_type \\\n", - "0 W-Raps Helmacker Plant 24/25 Scheibenegge Catros quantity--price \n", - "\n", - " Q1_measure Q1_value Q1_units Q1_inventory_adjustment \n", - "0 time 2 h None " - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "#Alle Maintenance Logs\n", "import neofarm.lib as neo\n", @@ -854,7 +839,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "e8e0222a-25c8-4f3f-a1e8-5e7753432c4b", "metadata": { "jupyter": { @@ -862,103 +847,7 @@ }, "scrolled": true }, - "outputs": [ - { - "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", - "
nametimestampplant_nameplant_cropplant_locationequipmentisMovementQ1_typeQ1_measureQ1_valueQ1_unitsQ1_inventory_adjustmentQ1_inventory_asset
0Innovert Raps Input 24/2512.10.2024W-Raps Helmacker Plant 24/25RapsHelmackerSpritzeFalsequantity--standardvolume10ldecrementInnovert Raps Material 08/24
1Innovert Raps Input 24/2503.11.2024W-Raps Helmacker Plant 24/25RapsHelmackerSpritzeFalsequantity--standardvolume10ldecrementInnovert Raps Material 08/24
\n", - "
" - ], - "text/plain": [ - " name timestamp plant_name \\\n", - "0 Innovert Raps Input 24/25 12.10.2024 W-Raps Helmacker Plant 24/25 \n", - "1 Innovert Raps Input 24/25 03.11.2024 W-Raps Helmacker Plant 24/25 \n", - "\n", - " plant_crop plant_location equipment isMovement Q1_type \\\n", - "0 Raps Helmacker Spritze False quantity--standard \n", - "1 Raps Helmacker Spritze False quantity--standard \n", - "\n", - " Q1_measure Q1_value Q1_units Q1_inventory_adjustment \\\n", - "0 volume 10 l decrement \n", - "1 volume 10 l decrement \n", - "\n", - " Q1_inventory_asset \n", - "0 Innovert Raps Material 08/24 \n", - "1 Innovert Raps Material 08/24 " - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "#Alle Input Logs\n", "import neofarm.lib as neo\n", @@ -1009,88 +898,15 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "6356e491-8615-40eb-ad75-a21cb517afc2", "metadata": { + "jupyter": { + "source_hidden": true + }, "scrolled": true }, - "outputs": [ - { - "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", - "
nametimestampplant_nameplant_cropplant_locationequipmentisMovementQ1_typeQ1_measureQ1_valueQ1_unitsQ1_inventory_adjustmentQ1_inventory_asset
0Schneckenkorn Medical 24/2530.08.2024W-Raps Helmacker Plant 24/25RapsHelmackerSchneckenkornstreuer LeinfelderFalsequantity--standardweight10kgdecrementSchneckenkorn Material 08/24
\n", - "
" - ], - "text/plain": [ - " name timestamp plant_name \\\n", - "0 Schneckenkorn Medical 24/25 30.08.2024 W-Raps Helmacker Plant 24/25 \n", - "\n", - " plant_crop plant_location equipment isMovement \\\n", - "0 Raps Helmacker Schneckenkornstreuer Leinfelder False \n", - "\n", - " Q1_type Q1_measure Q1_value Q1_units Q1_inventory_adjustment \\\n", - "0 quantity--standard weight 10 kg decrement \n", - "\n", - " Q1_inventory_asset \n", - "0 Schneckenkorn Material 08/24 " - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "#Alle Medical Logs\n", "import neofarm.lib as neo\n", @@ -1133,108 +949,15 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "id": "ee597e4c-7275-4cda-8cc6-2daf82dbd4d8", "metadata": { + "jupyter": { + "source_hidden": true + }, "scrolled": true }, - "outputs": [ - { - "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", - "
nametimestampplant_nameplant_cropplant_locationequipmentisMovementQ1_typeQ1_measureQ1_valueQ1_unitsQ1_inventory_adjustmentQ1_inventory_asset
0W-Raps Helmacker Harvest 24/2520.10.2024W-Raps Helmacker Plant 24/25RapsHelmackerMähdrescher LeinfelderFalsequantity--standardweight5toincrementW-Raps Product 08/24
1W-Raps Nachtweide Harvest 24/2528.10.2024W-Raps Nachtweide Plant 24/25RapsNachtweideMähdrescher LeinfelderFalsequantity--standardweight7.8toincrementW-Raps Product 08/24
\n", - "
" - ], - "text/plain": [ - " name timestamp \\\n", - "0 W-Raps Helmacker Harvest 24/25 20.10.2024 \n", - "1 W-Raps Nachtweide Harvest 24/25 28.10.2024 \n", - "\n", - " plant_name plant_crop plant_location \\\n", - "0 W-Raps Helmacker Plant 24/25 Raps Helmacker \n", - "1 W-Raps Nachtweide Plant 24/25 Raps Nachtweide \n", - "\n", - " equipment isMovement Q1_type Q1_measure Q1_value \\\n", - "0 Mähdrescher Leinfelder False quantity--standard weight 5 \n", - "1 Mähdrescher Leinfelder False quantity--standard weight 7.8 \n", - "\n", - " Q1_units Q1_inventory_adjustment Q1_inventory_asset \n", - "0 to increment W-Raps Product 08/24 \n", - "1 to increment W-Raps Product 08/24 " - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "#Alle Harvest Logs\n", "import neofarm.lib as neo\n", @@ -1277,85 +1000,15 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "id": "3279d05b-5bae-497e-891d-3337844904f7", "metadata": { + "jupyter": { + "source_hidden": true + }, "scrolled": true }, - "outputs": [ - { - "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", - "
nametimestampplant_nameplant_cropplant_locationequipmentisMovementQ1_typeQ1_measureQ1_valueQ1_unitsQ1_inventory_adjustmentQ1_inventory_asset
0W-Raps Sale 24/2528.10.2024W-Raps Helmacker Plant 24/25RapsHelmackerMähdrescher LeinfelderFalsequantity--priceweight5todecrementW-Raps Product 08/24
\n", - "
" - ], - "text/plain": [ - " name timestamp plant_name plant_crop \\\n", - "0 W-Raps Sale 24/25 28.10.2024 W-Raps Helmacker Plant 24/25 Raps \n", - "\n", - " plant_location equipment isMovement Q1_type \\\n", - "0 Helmacker Mähdrescher Leinfelder False quantity--price \n", - "\n", - " Q1_measure Q1_value Q1_units Q1_inventory_adjustment Q1_inventory_asset \n", - "0 weight 5 to decrement W-Raps Product 08/24 " - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "#Alle Sale Logs\n", "import neofarm.lib as neo\n", @@ -1398,26 +1051,16 @@ }, { "cell_type": "code", - "execution_count": 21, - "id": "d6be8923-8eb0-4d3b-927a-af15fe2c0ba0", + "execution_count": null, + "id": "8471814f-e362-424c-af3e-aa7865048782", "metadata": { - "scrolled": true - }, - "outputs": [ - { - "ename": "IndexError", - "evalue": "list index out of range", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mIndexError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[21], line 15\u001b[0m\n\u001b[0;32m 11\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m purchase \u001b[38;5;129;01min\u001b[39;00m purchases:\n\u001b[0;32m 14\u001b[0m quantity1 \u001b[38;5;241m=\u001b[39m purchase\u001b[38;5;241m.\u001b[39mquantities[\u001b[38;5;241m0\u001b[39m]\n\u001b[1;32m---> 15\u001b[0m quantity2 \u001b[38;5;241m=\u001b[39m \u001b[43mpurchase\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mquantities\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m]\u001b[49m\n\u001b[0;32m 18\u001b[0m \u001b[38;5;66;03m# Purchase-Daten als Dictionary hinzufügen\u001b[39;00m\n\u001b[0;32m 19\u001b[0m data\u001b[38;5;241m.\u001b[39mappend({\n\u001b[0;32m 20\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mname\u001b[39m\u001b[38;5;124m\"\u001b[39m: purchase\u001b[38;5;241m.\u001b[39mname,\n\u001b[0;32m 21\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtimestamp\u001b[39m\u001b[38;5;124m\"\u001b[39m: datetime\u001b[38;5;241m.\u001b[39mfromisoformat(purchase\u001b[38;5;241m.\u001b[39mtimestamp)\u001b[38;5;241m.\u001b[39mstrftime(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m%d\u001b[39;00m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m%\u001b[39m\u001b[38;5;124mm.\u001b[39m\u001b[38;5;124m%\u001b[39m\u001b[38;5;124mY\u001b[39m\u001b[38;5;124m\"\u001b[39m), \u001b[38;5;66;03m# Konvertiere in das gewünschte Format\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 34\u001b[0m \n\u001b[0;32m 35\u001b[0m })\n", - "\u001b[1;31mIndexError\u001b[0m: list index out of range" - ] + "jupyter": { + "source_hidden": true } - ], + }, + "outputs": [], "source": [ - "#Alle Purchase Logs Baustelle!!\n", + "#alle Purchase Logs Baustelle\n", "import neofarm.lib as neo\n", "import pandas as pd\n", "from datetime import datetime\n", @@ -1428,29 +1071,48 @@ "# Alle Purchase-Logs abrufen\n", "purchases = neo.Log.Purchase.get_list()\n", "for purchase in purchases:\n", - " \n", - " \n", - " quantity1 = purchase.quantities[0]\n", - " quantity2 = purchase.quantities[1]\n", - "\n", + " quantities = purchase.quantities\n", " \n", + " # Hilfsfunktion, um sicher Werte abzurufen oder Standardwerte zurückzugeben\n", + " def get_quantity_info(quantities, index):\n", + " if len(quantities) > index:\n", + " quantity = quantities[index]\n", + " return {\n", + " f\"Q{index}_type\": quantity.type,\n", + " #f\"Q{index}_typex\": taxonomy.material_type if taxonomy.material_type else \"\",\n", + "\n", + " \n", + " f\"Q{index}_measure\": quantity.measure,\n", + " f\"Q{index}_value\": quantity.value,\n", + " f\"Q{index}_units\": quantity.units.name if quantity.units else \"\",\n", + " f\"Q{index}_quant_unit_price\" : quantities[0].unit_price if hasattr(quantities[0], 'unit_price') and quantities[0].unit_price else \"\",\n", + " f\"Q{index}_quant_total_price\" : quantities[0].total_price if hasattr(quantities[0], 'total_price') and quantities[0].total_price else \"\",\n", + " f\"Q{index}_inventory_adjustment\": quantity.inventory_adjustment,\n", + " f\"Q{index}_inventory_asset\": quantity.inventory_asset.name if quantity.inventory_asset else \"\"\n", + " }\n", + " else:\n", + " # Rückgabe von Standardwerten, wenn die Menge nicht vorhanden ist\n", + " return {\n", + " f\"Q{index}_type\": \"\",\n", + " f\"Q{index}_measure\": \"\",\n", + " f\"Q{index}_value\": \"\",\n", + " f\"Q{index}_units\": \"\",\n", + " f\"Q{index}_quant_unit_price\": \"\",\n", + " f\"Q{index}_quant_total_price\" : \"\",\n", + " f\"Q{index}_inventory_adjustment\": \"\",\n", + " f\"Q{index}_inventory_asset\": \"\"\n", + " }\n", + "\n", + " # Alle Mengeninformationen abrufen und gruppieren\n", + " quantity_info = {}\n", + " for i in range(8): # Von 0 bis 7\n", + " quantity_info.update(get_quantity_info(quantities, i))\n", + "\n", " # Purchase-Daten als Dictionary hinzufügen\n", " data.append({\n", " \"name\": purchase.name,\n", " \"timestamp\": datetime.fromisoformat(purchase.timestamp).strftime(\"%d.%m.%Y\"), # Konvertiere in das gewünschte Format\n", - " \"Q1_type\": quantity1.type,\n", - " \"Q1_measure\": quantity1.measure,\n", - " \"Q1_value\": quantity1.value,\n", - " \"Q1_units\": quantity1.units.name,\n", - " \"Q1_inventory_adjustment\": quantity1.inventory_adjustment,\n", - " \"Q1_inventory_asset\": quantity1.inventory_asset.name,\n", - " \"Q2_type\": quantity2.type,\n", - " \"Q2_measure\": quantity2.measure,\n", - " \"Q2_value\": quantity2.value,\n", - " \"Q2_units\": quantity2.units.name,\n", - " \"Q2_inventory_adjustment\": quantity2.inventory_adjustment,\n", - " \"Q2_inventory_asset\": quantity2.inventory_asset.name\n", - "\n", + " **quantity_info\n", " })\n", "\n", "# DataFrame erstellen und anzeigen\n", @@ -1461,7 +1123,230 @@ { "cell_type": "code", "execution_count": null, - "id": "d63742e3-04a4-4cc0-972f-3edd868325cc", + "id": "34cfb8bd-fccc-436e-9391-f903f715c9d8", + "metadata": { + "jupyter": { + "source_hidden": true + } + }, + "outputs": [], + "source": [ + "Alle Logs\n", + "\n", + "\n", + "# alle logs von einem Plant \n", + "import neofarm.lib as neo\n", + "from datetime import datetime\n", + "\n", + "if __name__ == \"__main__\":\n", + " \n", + "#log Activity\n", + " \n", + " logs = neo.Log.Activity.get_list()\n", + " for log in logs:\n", + " print(\"Activity:\")\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", + " \t\n", + " \n", + "#log Maintenance\n", + " \n", + " logs = neo.Log.Maintenance.get_list()\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].value}\")\n", + " print(f\"unit_name: {input.quantities[0].units.name}\")\n", + " print (f\"unit_price_1: = {input.quantities[0].unit_price}\")\n", + " print (f\"unit_price_1: = {input.quantities[0].total_price}\")\n", + "\n", + "\n", + "#log Purchase\n", + " \n", + " logs = neo.Log.Purchase.get_list()\n", + " for log in logs:\n", + " print(\"Purchase:\")\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.Purchase.from_id(log.id)\n", + " print(f\"quant0_type: {input.quantities[0].type}\")\n", + " print(f\"quant0_measure: {input.quantities[0].measure}\")\n", + " print(f\"quant0_value: {input.quantities[0].value}\")\n", + " print(f\"quant0_inventory_adjustment: {input.quantities[0].inventory_adjustment}\")\n", + " print(f\"unit0_name: {input.quantities[0].units.name}\")\n", + " print (f\"unit0_price_1: = {input.quantities[0].unit_price}\")\n", + " print (f\"unit0_price_1: = {input.quantities[0].total_price}\")\n", + "\n", + " print(f\"quant1_type: {input.quantities[0].type}\")\n", + " print(f\"quant1_measure: {input.quantities[0].measure}\")\n", + " print(f\"quant1_value: {input.quantities[0].value}\")\n", + " print(f\"unit1_name: {input.quantities[0].units.name}\")\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + " \n", + "\n", + " \n", + " \n", + "#log Seeding \n", + " logs = neo.Log.Seeding.get_list()\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", + " print(f\"quant_inventory_name: {input.quantities[0].inventory_asset.name}\")\n", + "\n", + "#log Input \n", + " logs = neo.Log.Input.get_list()\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 = neo.Log.Medical.get_list()\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 = neo.Log.Harvest.get_list()\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 = neo.Log.Sale.get_list()\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": null, + "id": "743232d5-48d1-49f3-8b5f-4fd499e2126e", + "metadata": { + "jupyter": { + "source_hidden": true + } + }, + "outputs": [], + "source": [ + "#log Purchase\n", + "import neofarm.lib as neo\n", + "from datetime import datetime\n", + "\n", + "logs = neo.Log.Purchase.get_list()\n", + "for log in logs:\n", + " print(\"Purchase:\")\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.Purchase.from_id(log.id)\n", + "\n", + " print(f\"quant0_type: {input.quantities[0].type}\")\n", + " print(f\"quant0_measure: {input.quantities[0].measure}\")\n", + " print(f\"quant0_value: {input.quantities[0].value}\")\n", + " print(f\"quant0_inventory_adjustment: {input.quantities[0].inventory_adjustment}\")\n", + " print(f\"unit0_name: {input.quantities[0].units.name}\")\n", + " print (f\"unit0_price_1: = {input.quantities[0].unit_price}\")\n", + " print (f\"unit0_price_1: = {input.quantities[0].total_price}\")\n", + " print (f\"inventory_asset1: = {input.quantities[0].inventory_asset.name}\")\n", + "\n", + "\n", + "\n", + " if len(input.quantities) > 1:\n", + " print(f\"quant1_type: {input.quantities[1].type}\") \n", + " print(f\"quant1_measure: {input.quantities[1].measure}\")\n", + " print(f\"quant1_value: {input.quantities[1].value}\")\n", + " #print(f\"taxonomy1_name: {input.quantities[1].taxonomy_term.name}\")\n", + " \n", + " print(f\"quant2_type: {input.quantities[2].type}\") \n", + " print(f\"quant2_measure: {input.quantities[2].measure}\")\n", + " print(f\"quant2_value: {input.quantities[2].value}\") \n", + " \n", + " \n", + " \n", + "\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5d34dcc9-a4b9-423f-91d4-da1958ecc20e", "metadata": {}, "outputs": [], "source": []