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",
- " name | \n",
- " timestamp | \n",
- " plant_name | \n",
- " plant_crop | \n",
- " plant_location | \n",
- " equipment | \n",
- " isMovement | \n",
- " Q1_type | \n",
- " Q1_measure | \n",
- " Q1_value | \n",
- " Q1_units | \n",
- " Q1_inventory_adjustment | \n",
- " Q1_inventory_asset | \n",
- " Q2_type | \n",
- " Q2_measure | \n",
- " Q2_value | \n",
- " Q2_units | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " W-Raps Otello KWS Helmacker Seeding 24/25 | \n",
- " 22.08.2024 | \n",
- " W-Raps Helmacker Plant 24/25 | \n",
- " Raps | \n",
- " Helmacker | \n",
- " Sähmaschine Cataya | \n",
- " False | \n",
- " quantity--standard | \n",
- " weight | \n",
- " 50 | \n",
- " kg | \n",
- " decrement | \n",
- " W-Raps Saatgut Otello KWS Seed 08/24 | \n",
- " quantity--standard | \n",
- " area | \n",
- " 3.02 | \n",
- " ha | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " W-Raps Otello KWS Nachtweide Seeding 24/25 | \n",
- " 28.08.2024 | \n",
- " W-Raps Nachtweide Plant 24/25 | \n",
- " Raps | \n",
- " Nachtweide | \n",
- " Sähmaschine Cataya | \n",
- " False | \n",
- " quantity--standard | \n",
- " weight | \n",
- " 66 | \n",
- " kg | \n",
- " decrement | \n",
- " W-Raps Saatgut Otello KWS Seed 08/24 | \n",
- " quantity--standard | \n",
- " area | \n",
- " 4.5 | \n",
- " ha | \n",
- "
\n",
- " \n",
- "
\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",
- " name | \n",
- " timestamp | \n",
- " plant_name | \n",
- " equipment | \n",
- " Q1_type | \n",
- " Q1_measure | \n",
- " Q1_value | \n",
- " Q1_units | \n",
- " Q1_inventory_adjustment | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " Scheibeneggen Helmacker Maintenance 24/25 | \n",
- " 28.07.2024 | \n",
- " W-Raps Helmacker Plant 24/25 | \n",
- " Scheibenegge Catros | \n",
- " quantity--price | \n",
- " time | \n",
- " 2 | \n",
- " h | \n",
- " None | \n",
- "
\n",
- " \n",
- "
\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",
- " name | \n",
- " timestamp | \n",
- " plant_name | \n",
- " plant_crop | \n",
- " plant_location | \n",
- " equipment | \n",
- " isMovement | \n",
- " Q1_type | \n",
- " Q1_measure | \n",
- " Q1_value | \n",
- " Q1_units | \n",
- " Q1_inventory_adjustment | \n",
- " Q1_inventory_asset | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " Innovert Raps Input 24/25 | \n",
- " 12.10.2024 | \n",
- " W-Raps Helmacker Plant 24/25 | \n",
- " Raps | \n",
- " Helmacker | \n",
- " Spritze | \n",
- " False | \n",
- " quantity--standard | \n",
- " volume | \n",
- " 10 | \n",
- " l | \n",
- " decrement | \n",
- " Innovert Raps Material 08/24 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " Innovert Raps Input 24/25 | \n",
- " 03.11.2024 | \n",
- " W-Raps Helmacker Plant 24/25 | \n",
- " Raps | \n",
- " Helmacker | \n",
- " Spritze | \n",
- " False | \n",
- " quantity--standard | \n",
- " volume | \n",
- " 10 | \n",
- " l | \n",
- " decrement | \n",
- " Innovert Raps Material 08/24 | \n",
- "
\n",
- " \n",
- "
\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",
- " name | \n",
- " timestamp | \n",
- " plant_name | \n",
- " plant_crop | \n",
- " plant_location | \n",
- " equipment | \n",
- " isMovement | \n",
- " Q1_type | \n",
- " Q1_measure | \n",
- " Q1_value | \n",
- " Q1_units | \n",
- " Q1_inventory_adjustment | \n",
- " Q1_inventory_asset | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " Schneckenkorn Medical 24/25 | \n",
- " 30.08.2024 | \n",
- " W-Raps Helmacker Plant 24/25 | \n",
- " Raps | \n",
- " Helmacker | \n",
- " Schneckenkornstreuer Leinfelder | \n",
- " False | \n",
- " quantity--standard | \n",
- " weight | \n",
- " 10 | \n",
- " kg | \n",
- " decrement | \n",
- " Schneckenkorn Material 08/24 | \n",
- "
\n",
- " \n",
- "
\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",
- " name | \n",
- " timestamp | \n",
- " plant_name | \n",
- " plant_crop | \n",
- " plant_location | \n",
- " equipment | \n",
- " isMovement | \n",
- " Q1_type | \n",
- " Q1_measure | \n",
- " Q1_value | \n",
- " Q1_units | \n",
- " Q1_inventory_adjustment | \n",
- " Q1_inventory_asset | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " W-Raps Helmacker Harvest 24/25 | \n",
- " 20.10.2024 | \n",
- " W-Raps Helmacker Plant 24/25 | \n",
- " Raps | \n",
- " Helmacker | \n",
- " Mähdrescher Leinfelder | \n",
- " False | \n",
- " quantity--standard | \n",
- " weight | \n",
- " 5 | \n",
- " to | \n",
- " increment | \n",
- " W-Raps Product 08/24 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " W-Raps Nachtweide Harvest 24/25 | \n",
- " 28.10.2024 | \n",
- " W-Raps Nachtweide Plant 24/25 | \n",
- " Raps | \n",
- " Nachtweide | \n",
- " Mähdrescher Leinfelder | \n",
- " False | \n",
- " quantity--standard | \n",
- " weight | \n",
- " 7.8 | \n",
- " to | \n",
- " increment | \n",
- " W-Raps Product 08/24 | \n",
- "
\n",
- " \n",
- "
\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",
- " name | \n",
- " timestamp | \n",
- " plant_name | \n",
- " plant_crop | \n",
- " plant_location | \n",
- " equipment | \n",
- " isMovement | \n",
- " Q1_type | \n",
- " Q1_measure | \n",
- " Q1_value | \n",
- " Q1_units | \n",
- " Q1_inventory_adjustment | \n",
- " Q1_inventory_asset | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " W-Raps Sale 24/25 | \n",
- " 28.10.2024 | \n",
- " W-Raps Helmacker Plant 24/25 | \n",
- " Raps | \n",
- " Helmacker | \n",
- " Mähdrescher Leinfelder | \n",
- " False | \n",
- " quantity--price | \n",
- " weight | \n",
- " 5 | \n",
- " to | \n",
- " decrement | \n",
- " W-Raps Product 08/24 | \n",
- "
\n",
- " \n",
- "
\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": []