1736 lines
71 KiB
Plaintext
1736 lines
71 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "f512fba3-877f-411e-935c-0c878d478b2d",
|
|
"metadata": {
|
|
"jupyter": {
|
|
"source_hidden": true
|
|
},
|
|
"scrolled": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"#alle Seeding logs\n",
|
|
"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.Log.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",
|
|
" \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].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",
|
|
" \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",
|
|
" print(f\"quant_inventory_name: {input.quantities[0].inventory_asset.name}\")\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": null,
|
|
"id": "de57b155-d635-4367-9a56-90d033c3a922",
|
|
"metadata": {
|
|
"jupyter": {
|
|
"source_hidden": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"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\")\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",
|
|
" \"UnitName\": quantities[0].units.name,\n",
|
|
" \"QuantInventoryAdjustment\": quantity.inventory_adjustment\n",
|
|
" \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\": \"\",\n",
|
|
" \"QuantMeasure\": \"\",\n",
|
|
" \"QuantValue\": \"\",\n",
|
|
" \"UnitName\": quantities[0].units.name,\n",
|
|
" \"QuantInventoryAdjustment\": \"\"\n",
|
|
" \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": "3e3fe365-b32b-4210-847c-bea0b36bd34c",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "946b0281-c77a-4a1e-8e91-5f06ba74afa5",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "d6d12b59-4895-426e-9a30-c9cee801671e",
|
|
"metadata": {
|
|
"jupyter": {
|
|
"source_hidden": true
|
|
},
|
|
"scrolled": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"#Master Report je Plant\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",
|
|
" \"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",
|
|
" \"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": "172b3075-7435-40e1-bbb5-138e1ca48800",
|
|
"metadata": {
|
|
"jupyter": {
|
|
"source_hidden": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"#ExcelExport\n",
|
|
"import pandas as pd\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",
|
|
"def export_to_excel(df, file_path, date_column=\"D\"):\n",
|
|
" # Exportiere den DataFrame zu Excel\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",
|
|
" 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",
|
|
" cell.alignment = Alignment(wrap_text=True)\n",
|
|
" \n",
|
|
" # Setze das Datumsformat für die angegebene Spalte\n",
|
|
" if col_letter == date_column:\n",
|
|
" cell.number_format = 'DD.MM.YYYY'\n",
|
|
" \n",
|
|
" max_length = max(max_length, len(str(cell.value)) if cell.value else 0)\n",
|
|
" \n",
|
|
" adjusted_width = (max_length + 2) * 1.0\n",
|
|
" worksheet.column_dimensions[col_letter].width = adjusted_width\n",
|
|
"\n",
|
|
" workbook.save(file_path)\n",
|
|
" print(f\"Die Datei wurde erfolgreich nach '{file_path}' exportiert, mit Autofilter, Zeilenumbruch und angepasster Spaltenbreite.\")\n",
|
|
"\n",
|
|
"# Beispielaufruf\n",
|
|
"if __name__ == \"__main__\":\n",
|
|
" downloads_folder = os.path.join(os.path.expanduser(\"~\"), \"Downloads\")\n",
|
|
" file_path = os.path.join(downloads_folder, \"PlantLogs.xlsx\")\n",
|
|
" \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",
|
|
" export_to_excel(df, file_path)\n",
|
|
" else:\n",
|
|
" print(\"Der Export wurde abgebrochen.\")\n",
|
|
" else:\n",
|
|
" export_to_excel(df, file_path)\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "fc1f2524-ca06-426f-a402-9e61ec9ddfbe",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "849c4af5-f0f9-47f4-b841-fa8dc3e27c15",
|
|
"metadata": {
|
|
"jupyter": {
|
|
"source_hidden": true
|
|
},
|
|
"scrolled": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"#Alle Seeding Logs\n",
|
|
"import neofarm.lib as neo\n",
|
|
"import pandas as pd\n",
|
|
"from datetime import datetime\n",
|
|
"\n",
|
|
"# Liste für die Sammlung der Seeding-Log-Daten\n",
|
|
"data = []\n",
|
|
"\n",
|
|
"# Alle Seeding-Logs abrufen\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",
|
|
" \n",
|
|
" # Seeding-Daten als Dictionary hinzufügen\n",
|
|
" data.append({\n",
|
|
" \"name\": seeding.name,\n",
|
|
" \"timestamp\": datetime.fromisoformat(seeding.timestamp).strftime(\"%d.%m.%Y\"), # Konvertiere in das gewünschte Format\n",
|
|
" \"plant_name\": plant.name,\n",
|
|
" \"plant_crop\": plant.crop[0].name,\n",
|
|
" \"plant_location\": plant.location[0].name,\n",
|
|
" \"equipment\": equipment.name,\n",
|
|
" \"isMovement\": seeding.isMovement,\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",
|
|
" })\n",
|
|
"\n",
|
|
"# DataFrame erstellen und anzeigen\n",
|
|
"df = pd.DataFrame(data)\n",
|
|
"df\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "27e54d8e-cda2-465c-88eb-963a0fff3c5d",
|
|
"metadata": {
|
|
"jupyter": {
|
|
"source_hidden": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"#Alle Maintenance Logs\n",
|
|
"import neofarm.lib as neo\n",
|
|
"import pandas as pd\n",
|
|
"from datetime import datetime\n",
|
|
"\n",
|
|
"# Liste für die Sammlung der Mainenance-Log-Daten\n",
|
|
"data = []\n",
|
|
"\n",
|
|
"# Alle Maintenance-Logs abrufen\n",
|
|
"maintenances = neo.Log.Maintenance.get_list()\n",
|
|
"for maintenance in maintenances:\n",
|
|
" plant = maintenance.plant\n",
|
|
" equipment = maintenance.equipment[0]\n",
|
|
" quantity1 = maintenance.quantities[0]\n",
|
|
" \n",
|
|
" \n",
|
|
" # Maintenance-Daten als Dictionary hinzufügen\n",
|
|
" data.append({\n",
|
|
" \"name\": maintenance.name,\n",
|
|
" \"timestamp\": datetime.fromisoformat(maintenance.timestamp).strftime(\"%d.%m.%Y\"), # Konvertiere in das gewünschte Format\n",
|
|
" \"plant_name\": plant.name,\n",
|
|
" \"equipment\": equipment.name,\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",
|
|
"\n",
|
|
"\n",
|
|
" })\n",
|
|
"\n",
|
|
"# DataFrame erstellen und anzeigen\n",
|
|
"df = pd.DataFrame(data)\n",
|
|
"df\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "e8e0222a-25c8-4f3f-a1e8-5e7753432c4b",
|
|
"metadata": {
|
|
"jupyter": {
|
|
"source_hidden": true
|
|
},
|
|
"scrolled": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"#Alle Input Logs\n",
|
|
"import neofarm.lib as neo\n",
|
|
"import pandas as pd\n",
|
|
"from datetime import datetime\n",
|
|
"\n",
|
|
"# Liste für die Sammlung der Input-Log-Daten\n",
|
|
"data = []\n",
|
|
"\n",
|
|
"# Alle Input-Logs abrufen\n",
|
|
"inputs = neo.Log.Input.get_list()\n",
|
|
"for input in inputs:\n",
|
|
" plant = input.plant\n",
|
|
" equipment = input.equipment[0]\n",
|
|
" quantity1 = input.quantities[0]\n",
|
|
"\n",
|
|
" \n",
|
|
" # Input-Daten als Dictionary hinzufügen\n",
|
|
" data.append({\n",
|
|
" \"name\": input.name,\n",
|
|
" \"timestamp\": datetime.fromisoformat(input.timestamp).strftime(\"%d.%m.%Y\"), # Konvertiere in das gewünschte Format\n",
|
|
" \"plant_name\": plant.name,\n",
|
|
" \"plant_crop\": plant.crop[0].name,\n",
|
|
" \"plant_location\": plant.location[0].name,\n",
|
|
" \"equipment\": equipment.name,\n",
|
|
" \"isMovement\": input.isMovement,\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",
|
|
"\n",
|
|
" })\n",
|
|
"\n",
|
|
"# DataFrame erstellen und anzeigen\n",
|
|
"df = pd.DataFrame(data)\n",
|
|
"df\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "318b15bd-4ea4-4eb6-b434-00900f1528dc",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "6356e491-8615-40eb-ad75-a21cb517afc2",
|
|
"metadata": {
|
|
"jupyter": {
|
|
"source_hidden": true
|
|
},
|
|
"scrolled": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"#Alle Medical Logs\n",
|
|
"import neofarm.lib as neo\n",
|
|
"import pandas as pd\n",
|
|
"from datetime import datetime\n",
|
|
"\n",
|
|
"# Liste für die Sammlung der Medical-Log-Daten\n",
|
|
"data = []\n",
|
|
"\n",
|
|
"# Alle Medical-Logs abrufen\n",
|
|
"medicals = neo.Log.Medical.get_list()\n",
|
|
"for medical in medicals:\n",
|
|
" plant = medical.plant\n",
|
|
" equipment = medical.equipment[0]\n",
|
|
" quantity1 = medical.quantities[0]\n",
|
|
"\n",
|
|
" \n",
|
|
" # Medical-Daten als Dictionary hinzufügen\n",
|
|
" data.append({\n",
|
|
" \"name\": medical.name,\n",
|
|
" \"timestamp\": datetime.fromisoformat(medical.timestamp).strftime(\"%d.%m.%Y\"), # Konvertiere in das gewünschte Format\n",
|
|
" \"plant_name\": plant.name,\n",
|
|
" \"plant_crop\": plant.crop[0].name,\n",
|
|
" \"plant_location\": plant.location[0].name,\n",
|
|
" \"equipment\": equipment.name,\n",
|
|
" \"isMovement\": medical.isMovement,\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",
|
|
"\n",
|
|
" })\n",
|
|
"\n",
|
|
"# DataFrame erstellen und anzeigen\n",
|
|
"df = pd.DataFrame(data)\n",
|
|
"df\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "ee597e4c-7275-4cda-8cc6-2daf82dbd4d8",
|
|
"metadata": {
|
|
"jupyter": {
|
|
"source_hidden": true
|
|
},
|
|
"scrolled": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"#Alle Harvest Logs\n",
|
|
"import neofarm.lib as neo\n",
|
|
"import pandas as pd\n",
|
|
"from datetime import datetime\n",
|
|
"\n",
|
|
"# Liste für die Sammlung der Harvest-Log-Daten\n",
|
|
"data = []\n",
|
|
"\n",
|
|
"# Alle Harvest-Logs abrufen\n",
|
|
"harvests = neo.Log.Harvest.get_list()\n",
|
|
"for harvest in harvests:\n",
|
|
" plant = harvest.plant\n",
|
|
" equipment = harvest.equipment[0]\n",
|
|
" quantity1 = harvest.quantities[0]\n",
|
|
"\n",
|
|
" \n",
|
|
" # Harvest-Daten als Dictionary hinzufügen\n",
|
|
" data.append({\n",
|
|
" \"name\": harvest.name,\n",
|
|
" \"timestamp\": datetime.fromisoformat(harvest.timestamp).strftime(\"%d.%m.%Y\"), # Konvertiere in das gewünschte Format\n",
|
|
" \"plant_name\": plant.name,\n",
|
|
" \"plant_crop\": plant.crop[0].name,\n",
|
|
" \"plant_location\": plant.location[0].name,\n",
|
|
" \"equipment\": equipment.name,\n",
|
|
" \"isMovement\": harvest.isMovement,\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",
|
|
"\n",
|
|
" })\n",
|
|
"\n",
|
|
"# DataFrame erstellen und anzeigen\n",
|
|
"df = pd.DataFrame(data)\n",
|
|
"df\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "3279d05b-5bae-497e-891d-3337844904f7",
|
|
"metadata": {
|
|
"jupyter": {
|
|
"source_hidden": true
|
|
},
|
|
"scrolled": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"#Alle Sale Logs\n",
|
|
"import neofarm.lib as neo\n",
|
|
"import pandas as pd\n",
|
|
"from datetime import datetime\n",
|
|
"\n",
|
|
"# Liste für die Sammlung der Sale-Log-Daten\n",
|
|
"data = []\n",
|
|
"\n",
|
|
"# Alle Sale-Logs abrufen\n",
|
|
"sales = neo.Log.Sale.get_list()\n",
|
|
"for sale in sales:\n",
|
|
" plant = sale.plant\n",
|
|
" \n",
|
|
" quantity1 = sale.quantities[0]\n",
|
|
"\n",
|
|
" \n",
|
|
" # Sale-Daten als Dictionary hinzufügen\n",
|
|
" data.append({\n",
|
|
" \"name\": sale.name,\n",
|
|
" \"timestamp\": datetime.fromisoformat(sale.timestamp).strftime(\"%d.%m.%Y\"), # Konvertiere in das gewünschte Format\n",
|
|
" \"plant_name\": plant.name,\n",
|
|
" \"plant_crop\": plant.crop[0].name,\n",
|
|
" \"plant_location\": plant.location[0].name,\n",
|
|
" \"equipment\": equipment.name,\n",
|
|
" \"isMovement\": sale.isMovement,\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",
|
|
"\n",
|
|
" })\n",
|
|
"\n",
|
|
"# DataFrame erstellen und anzeigen\n",
|
|
"df = pd.DataFrame(data)\n",
|
|
"df\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "8471814f-e362-424c-af3e-aa7865048782",
|
|
"metadata": {
|
|
"jupyter": {
|
|
"source_hidden": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"#alle Purchase Logs Baustelle\n",
|
|
"import neofarm.lib as neo\n",
|
|
"import pandas as pd\n",
|
|
"from datetime import datetime\n",
|
|
"\n",
|
|
"# Liste für die Sammlung der Purchase-Log-Daten\n",
|
|
"data = []\n",
|
|
"\n",
|
|
"# Alle Purchase-Logs abrufen\n",
|
|
"purchases = neo.Log.Purchase.get_list()\n",
|
|
"for purchase in purchases:\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",
|
|
" **quantity_info\n",
|
|
" })\n",
|
|
"\n",
|
|
"# DataFrame erstellen und anzeigen\n",
|
|
"df = pd.DataFrame(data)\n",
|
|
"df\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"id": "a7c72234-8838-461c-a4d7-b1c0170f789f",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"Activity:\n",
|
|
"name: Move 24/25 Nachtweide Raps Plant to Nachtweide\n",
|
|
"timestamp: 14.10.24\n",
|
|
"plant_name: W-Raps Nachtweide Plant 24/25 \n",
|
|
"location: Nachtweide\n",
|
|
"\n",
|
|
"Activity:\n",
|
|
"name: Move W-Raps Helmacker Plant 24/25 to Helmacker\n",
|
|
"timestamp: 14.10.24\n",
|
|
"plant_name: W-Raps Helmacker Plant 24/25\n",
|
|
"location: Helmacker\n",
|
|
"\n",
|
|
"Activity:\n",
|
|
"name: Move W-Raps Helmacker Plant 24/25 to Helmacker\n",
|
|
"timestamp: 22.10.24\n",
|
|
"plant_name: W-Raps Helmacker Plant 24/25\n",
|
|
"location: Helmacker\n",
|
|
"\n",
|
|
"Maintenance:\n",
|
|
"name: Scheibeneggen Helmacker Maintenance 24/25\n",
|
|
"timestamp: 28.07.24\n",
|
|
"equipment: Scheibenegge Catros\n",
|
|
"plant_name: W-Raps Helmacker Plant 24/25\n",
|
|
"quant_type: quantity--price\n",
|
|
"quant_measure: time\n",
|
|
"quant_value: 2.0\n",
|
|
"unit_name: h\n",
|
|
"unit_price_1: = 20.0\n",
|
|
"unit_price_1: = 40.0\n",
|
|
"\n",
|
|
"Purchase:\n",
|
|
"name: Schneckenkorn Purchase 24/25\n",
|
|
"timestamp: 11.08.24\n",
|
|
"quant0_type: quantity--price\n",
|
|
"quant0_measure: weight\n",
|
|
"quant0_value: 10.0\n",
|
|
"unit0_name: kg\n",
|
|
"quant0_inventory_adjustment: increment\n",
|
|
"unit0_price_1: = 30.0\n",
|
|
"unit0_price_1: = 300.0\n",
|
|
"inventory_asset1: = Schneckenkorn Material 08/24\n",
|
|
"\n",
|
|
"Purchase:\n",
|
|
"name: Innovert Raps Purchase 24/25\n",
|
|
"timestamp: 10.08.24\n",
|
|
"quant0_type: quantity--price\n",
|
|
"quant0_measure: volume\n",
|
|
"quant0_value: 10.0\n",
|
|
"unit0_name: l\n",
|
|
"quant0_inventory_adjustment: increment\n",
|
|
"unit0_price_1: = 2.5\n",
|
|
"unit0_price_1: = 25.0\n",
|
|
"inventory_asset1: = Innovert Raps Material 08/24\n",
|
|
"quant1_type: quantity--material\n",
|
|
"quant1_measure: ratio\n",
|
|
"quant1_value: 69.0\n",
|
|
"quant1materialtype: N\n",
|
|
"quant2_type: quantity--material\n",
|
|
"quant2_measure: ratio\n",
|
|
"quant2_value: 138.0\n",
|
|
"quant3_type: quantity--material\n",
|
|
"quant3_measure: ratio\n",
|
|
"quant3_value: 12.0\n",
|
|
"quant4_type: quantity--material\n",
|
|
"quant4_measure: ratio\n",
|
|
"quant4_value: 60.0\n",
|
|
"quant5_type: quantity--material\n",
|
|
"quant5_measure: ratio\n",
|
|
"quant5_value: 70.0\n",
|
|
"quant6_type: quantity--material\n",
|
|
"quant6_measure: ratio\n",
|
|
"quant6_value: 4.0\n",
|
|
"\n",
|
|
"Purchase:\n",
|
|
"name: W-Raps Saatgut Otello KWS Saatgut Purchase 24/25\n",
|
|
"timestamp: 01.08.24\n",
|
|
"quant0_type: quantity--price\n",
|
|
"quant0_measure: weight\n",
|
|
"quant0_value: 50.0\n",
|
|
"unit0_name: kg\n",
|
|
"quant0_inventory_adjustment: increment\n",
|
|
"unit0_price_1: = 2.0\n",
|
|
"unit0_price_1: = 100.0\n",
|
|
"inventory_asset1: = W-Raps Saatgut Otello KWS Seed 08/24\n",
|
|
"\n",
|
|
"Seeding:\n",
|
|
"name: W-Raps Otello KWS Helmacker Seeding 24/25\n",
|
|
"notes: Särad: fein (orange)\n",
|
|
"Schieber: 3/4\n",
|
|
"Bodenklappe: 1\n",
|
|
"Rührwelle: aus\n",
|
|
"Kalibrierwert: 0,856\n",
|
|
"Für abgedrehte Aussaatstärke: 40kö/m² 2,18kg\n",
|
|
"Sähtiefen-Einstellung: 6. Strich\n",
|
|
"Schardruck: voll\n",
|
|
"Kreiselegge: 3\n",
|
|
"Planierschild: 4\n",
|
|
"tatsächliche Aussaatmenge gesamt: ca.42kö/m²\n",
|
|
"Saatfläche laut Amatron: 3,2 ha\n",
|
|
"Saatstärke ca. 42kö/m²\n",
|
|
"\n",
|
|
"timestamp: 22.08.24\n",
|
|
"plant_name: W-Raps Helmacker Plant 24/25\n",
|
|
"plant loc: Helmacker\n",
|
|
"plant_crop: Raps\n",
|
|
"plant_season: 24/25\n",
|
|
"equipment: Sähmaschine Cataya\n",
|
|
"quant_type: quantity--standard\n",
|
|
"quant_measure: weight\n",
|
|
"quant_value: 50.0\n",
|
|
"unit0_name: kg\n",
|
|
"quant_inventory_adjustment: decrement\n",
|
|
"quant_inventory_name: W-Raps Saatgut Otello KWS Seed 08/24\n",
|
|
"\n",
|
|
"Seeding:\n",
|
|
"name: W-Raps Otello KWS Nachtweide Seeding 24/25\n",
|
|
"notes: Särad: fein (orange)\n",
|
|
"Schieber: 3/4\n",
|
|
"Bodenklappe: 1\n",
|
|
"Rührwelle: aus\n",
|
|
"Kalibrierwert: 0,856\n",
|
|
"Für abgedrehte Aussaatstärke: 40kö/m² 2,18kg\n",
|
|
"Sähtiefen-Einstellung: 6. Strich\n",
|
|
"Schardruck: voll\n",
|
|
"Kreiselegge: 3\n",
|
|
"Planierschild: 4\n",
|
|
"tatsächliche Aussaatmenge gesamt: ca.42kö/m²\n",
|
|
"Saatfläche laut Amatron: 3,2 ha\n",
|
|
"Saatstärke ca. 42kö/m²\n",
|
|
"\n",
|
|
"timestamp: 28.08.24\n",
|
|
"plant_name: W-Raps Nachtweide Plant 24/25 \n",
|
|
"plant loc: Nachtweide\n",
|
|
"plant_crop: Raps\n",
|
|
"plant_season: 24/25\n",
|
|
"equipment: Sähmaschine Cataya\n",
|
|
"quant_type: quantity--standard\n",
|
|
"quant_measure: weight\n",
|
|
"quant_value: 66.0\n",
|
|
"unit0_name: kg\n",
|
|
"quant_inventory_adjustment: decrement\n",
|
|
"quant_inventory_name: W-Raps Saatgut Otello KWS Seed 08/24\n",
|
|
"\n",
|
|
"Input:\n",
|
|
"name: Innovert Raps Input 24/25\n",
|
|
"timestamp: 12.10.24\n",
|
|
"plant_name: W-Raps Helmacker Plant 24/25\n",
|
|
"plant_crop: Raps\n",
|
|
"plant_season: 24/25\n",
|
|
"equipment: Spritze\n",
|
|
"quant_type: quantity--standard\n",
|
|
"quant_measure: volume\n",
|
|
"quant_value: 10.0\n",
|
|
"quant_value: l\n",
|
|
"quant_inventory_adjustment: decrement\n",
|
|
"inventory_asset: = Innovert Raps Material 08/24\n",
|
|
"\n",
|
|
"Input:\n",
|
|
"name: Innovert Raps Input 24/25\n",
|
|
"timestamp: 03.11.24\n",
|
|
"plant_name: W-Raps Helmacker Plant 24/25\n",
|
|
"plant_crop: Raps\n",
|
|
"plant_season: 24/25\n",
|
|
"equipment: Spritze\n",
|
|
"quant_type: quantity--standard\n",
|
|
"quant_measure: volume\n",
|
|
"quant_value: 10.0\n",
|
|
"quant_value: l\n",
|
|
"quant_inventory_adjustment: decrement\n",
|
|
"inventory_asset: = Innovert Raps Material 08/24\n",
|
|
"\n",
|
|
"Medical:\n",
|
|
"name: Schneckenkorn Medical 24/25\n",
|
|
"timestamp: 30.08.24\n",
|
|
"plant_name: W-Raps Helmacker Plant 24/25\n",
|
|
"plant_crop: Raps\n",
|
|
"plant_season: 24/25\n",
|
|
"equipment: Schneckenkornstreuer Leinfelder\n",
|
|
"quant_type: quantity--standard\n",
|
|
"quant_measure: weight\n",
|
|
"quant_value: 10.0\n",
|
|
"quant_inventory_adjustment: decrement\n",
|
|
"quant_inventory_name: Schneckenkorn Material 08/24\n",
|
|
"\n",
|
|
"Harvest:\n",
|
|
"name: W-Raps Helmacker Harvest 24/25\n",
|
|
"timestamp: 20.10.24\n",
|
|
"plant_name: W-Raps Helmacker Plant 24/25\n",
|
|
"plant_crop: Raps\n",
|
|
"plant_season: 24/25\n",
|
|
"equipment: Mähdrescher Leinfelder\n",
|
|
"quant_type: quantity--standard\n",
|
|
"quant_measure: weight\n",
|
|
"quant_value: 5.0\n",
|
|
"quant_inventory_adjustment: increment\n",
|
|
"quant_inventory_name: W-Raps Product 08/24\n",
|
|
"\n",
|
|
"Harvest:\n",
|
|
"name: W-Raps Nachtweide Harvest 24/25\n",
|
|
"timestamp: 28.10.24\n",
|
|
"plant_name: W-Raps Nachtweide Plant 24/25 \n",
|
|
"plant_crop: Raps\n",
|
|
"plant_season: 24/25\n",
|
|
"equipment: Mähdrescher Leinfelder\n",
|
|
"quant_type: quantity--standard\n",
|
|
"quant_measure: weight\n",
|
|
"quant_value: 7.8\n",
|
|
"quant_inventory_adjustment: increment\n",
|
|
"quant_inventory_name: W-Raps Product 08/24\n",
|
|
"\n",
|
|
"Sale:\n",
|
|
"name: W-Raps Sale 24/25\n",
|
|
"timestamp: 28.10.24\n",
|
|
"plant_name: W-Raps Helmacker Plant 24/25\n",
|
|
"plant_crop: Raps\n",
|
|
"plant_season: 24/25\n",
|
|
"quant_type: quantity--price\n",
|
|
"quant_measure: weight\n",
|
|
"quant_value: 5.0\n",
|
|
"quant_inventory_adjustment: decrement\n",
|
|
"quant_inventory_name: W-Raps Product 08/24\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"#Mein Master Report\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",
|
|
" plant = log.plant\n",
|
|
" location = log.location\n",
|
|
" print(\"\")\n",
|
|
" print(\"Activity:\")\n",
|
|
" print(f\"name: {log.name}\")\n",
|
|
" formatted_date = datetime.fromisoformat(log.timestamp).strftime(\"%d.%m.%y\") # Konvertiere in das gewünschte Format\n",
|
|
" print(f\"timestamp: {formatted_date}\")\n",
|
|
" print(f\"plant_name: {plant.name}\")\n",
|
|
" print(f\"location: {location[0].name}\")\n",
|
|
" \n",
|
|
" \t\n",
|
|
" \n",
|
|
"#log Maintenance\n",
|
|
" \n",
|
|
" logs = neo.Log.Maintenance.get_list()\n",
|
|
" for log in logs:\n",
|
|
" plant = log.plant\n",
|
|
" print(\"\")\n",
|
|
" print(\"Maintenance:\")\n",
|
|
" print(f\"name: {log.name}\")\n",
|
|
" formatted_date = datetime.fromisoformat(log.timestamp).strftime(\"%d.%m.%y\") # Konvertiere in das gewünschte Format\n",
|
|
" print(f\"timestamp: {formatted_date}\") \n",
|
|
" print(f\"equipment: {log.equipment[0].name}\")\n",
|
|
" print(f\"plant_name: {plant.name}\")\n",
|
|
"\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\"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",
|
|
"#Log Purchase\n",
|
|
" logs = neo.Log.Purchase.get_list()\n",
|
|
" for log in logs:\n",
|
|
" print(\"\")\n",
|
|
" print(\"Purchase:\")\n",
|
|
" print(f\"name: {log.name}\")\n",
|
|
" formatted_date = datetime.fromisoformat(log.timestamp).strftime(\"%d.%m.%y\") # 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\"unit0_name: {input.quantities[0].units.name}\")\n",
|
|
" print(f\"quant0_inventory_adjustment: {input.quantities[0].inventory_adjustment}\")\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\"quant1materialtype: {input.quantities[1].material_types[0].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",
|
|
" print(f\"quant3_type: {input.quantities[3].type}\") \n",
|
|
" print(f\"quant3_measure: {input.quantities[3].measure}\")\n",
|
|
" print(f\"quant3_value: {input.quantities[3].value}\") \n",
|
|
"\n",
|
|
" print(f\"quant4_type: {input.quantities[4].type}\") \n",
|
|
" print(f\"quant4_measure: {input.quantities[4].measure}\")\n",
|
|
" print(f\"quant4_value: {input.quantities[4].value}\") \n",
|
|
"\n",
|
|
"\n",
|
|
" print(f\"quant5_type: {input.quantities[5].type}\") \n",
|
|
" print(f\"quant5_measure: {input.quantities[5].measure}\")\n",
|
|
" print(f\"quant5_value: {input.quantities[5].value}\") \n",
|
|
"\n",
|
|
" print(f\"quant6_type: {input.quantities[6].type}\") \n",
|
|
" print(f\"quant6_measure: {input.quantities[6].measure}\")\n",
|
|
" print(f\"quant6_value: {input.quantities[6].value}\") \n",
|
|
" \n",
|
|
" \n",
|
|
"\n",
|
|
" \n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"#log Seeding \n",
|
|
" logs = neo.Log.Seeding.get_list()\n",
|
|
" for log in logs:\n",
|
|
" plant = log.plant\n",
|
|
" location = log.location\n",
|
|
" print(\"\")\n",
|
|
" print(\"Seeding:\")\n",
|
|
" print(f\"name: {log.name}\")\n",
|
|
" print(f\"notes: {log.notes}\")\n",
|
|
" formatted_date = datetime.fromisoformat(log.timestamp).strftime(\"%d.%m.%y\") # Konvertiere in das gewünschte Format\n",
|
|
" print(f\"timestamp: {formatted_date}\")\n",
|
|
" print(f\"plant_name: {plant.name}\")\n",
|
|
" print(f\"plant loc: {log.location[0].name}\")\n",
|
|
" print(f\"plant_crop: {plant.crops[0].name}\")\n",
|
|
" print(f\"plant_season: {plant.seasons[0].name}\")\n",
|
|
" print(f\"equipment: {log.equipment[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\"unit0_name: {input.quantities[0].units.name}\")\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",
|
|
"\n",
|
|
" \n",
|
|
"#log Input \n",
|
|
" logs = neo.Log.Input.get_list()\n",
|
|
" for log in logs:\n",
|
|
" plant = log.plant\n",
|
|
" print(\"\")\n",
|
|
" print(\"Input:\")\n",
|
|
" print(f\"name: {log.name}\")\n",
|
|
" formatted_date = datetime.fromisoformat(log.timestamp).strftime(\"%d.%m.%y\") # Konvertiere in das gewünschte Format\n",
|
|
" print(f\"timestamp: {formatted_date}\")\n",
|
|
" print(f\"plant_name: {plant.name}\")\n",
|
|
" print(f\"plant_crop: {plant.crops[0].name}\")\n",
|
|
" print(f\"plant_season: {plant.seasons[0].name}\")\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_value: {input.quantities[0].units.name}\")\n",
|
|
" print(f\"quant_inventory_adjustment: {input.quantities[0].inventory_adjustment}\")\n",
|
|
" print (f\"inventory_asset: = {input.quantities[0].inventory_asset.name}\")\n",
|
|
" #print(f\"quant_inventory_name: {input.quantities[0].inventory_asset.get_logs_of_type(Log.Purchase)}\")\n",
|
|
"\n",
|
|
"#log Medical\n",
|
|
" logs = neo.Log.Medical.get_list()\n",
|
|
" for log in logs:\n",
|
|
" plant = log.plant\n",
|
|
"\n",
|
|
" print(\"\")\n",
|
|
" print(\"Medical:\")\n",
|
|
" print(f\"name: {log.name}\")\n",
|
|
" formatted_date = datetime.fromisoformat(log.timestamp).strftime(\"%d.%m.%y\") # Konvertiere in das gewünschte Format\n",
|
|
" print(f\"timestamp: {formatted_date}\")\n",
|
|
" print(f\"plant_name: {plant.name}\")\n",
|
|
" print(f\"plant_crop: {plant.crops[0].name}\")\n",
|
|
" print(f\"plant_season: {plant.seasons[0].name}\")\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",
|
|
" print(f\"quant_inventory_name: {input.quantities[0].inventory_asset.name}\")\n",
|
|
" \n",
|
|
"\n",
|
|
"#log Harvest \n",
|
|
" logs = neo.Log.Harvest.get_list()\n",
|
|
" for log in logs:\n",
|
|
" plant = log.plant\n",
|
|
"\n",
|
|
" print(\"\")\n",
|
|
" print(\"Harvest:\")\n",
|
|
" print(f\"name: {log.name}\")\n",
|
|
" formatted_date = datetime.fromisoformat(log.timestamp).strftime(\"%d.%m.%y\") # Konvertiere in das gewünschte Format\n",
|
|
" print(f\"timestamp: {formatted_date}\")\n",
|
|
" print(f\"plant_name: {plant.name}\")\n",
|
|
" print(f\"plant_crop: {plant.crops[0].name}\")\n",
|
|
" print(f\"plant_season: {plant.seasons[0].name}\")\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",
|
|
" print(f\"quant_inventory_name: {input.quantities[0].inventory_asset.name}\")\n",
|
|
"\n",
|
|
" \n",
|
|
"#log Sale \n",
|
|
" logs = neo.Log.Sale.get_list()\n",
|
|
" for log in logs:\n",
|
|
" plant = log.plant\n",
|
|
" print(\"\")\n",
|
|
" print(\"Sale:\")\n",
|
|
" print(f\"name: {log.name}\")\n",
|
|
" formatted_date = datetime.fromisoformat(log.timestamp).strftime(\"%d.%m.%y\") # Konvertiere in das gewünschte Format\n",
|
|
" print(f\"timestamp: {formatted_date}\")\n",
|
|
" print(f\"plant_name: {plant.name}\")\n",
|
|
" print(f\"plant_crop: {plant.crops[0].name}\")\n",
|
|
" print(f\"plant_season: {plant.seasons[0].name}\")\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}\")\n",
|
|
" print(f\"quant_inventory_name: {input.quantities[0].inventory_asset.name}\")\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
" "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "5d34dcc9-a4b9-423f-91d4-da1958ecc20e",
|
|
"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(\"\")\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"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "ac163dc6-3593-4bdb-976b-a4e4bd651b5e",
|
|
"metadata": {
|
|
"jupyter": {
|
|
"source_hidden": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"#log Purchase und Input\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(\"\")\n",
|
|
" print(\"Purchase:\")\n",
|
|
" print(f\"name: {log.name}\")\n",
|
|
" formatted_date = datetime.fromisoformat(log.timestamp).strftime(\"%d.%m.%y\") # 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\"unit0_name: {input.quantities[0].units.name}\")\n",
|
|
" print(f\"quant0_inventory_adjustment: {input.quantities[0].inventory_adjustment}\")\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",
|
|
"#log Input \n",
|
|
"logs = neo.Log.Input.get_list()\n",
|
|
"for log in logs:\n",
|
|
" print(\"\")\n",
|
|
" print(\"Input:\")\n",
|
|
" print(f\"name: {log.name}\")\n",
|
|
" formatted_date = datetime.fromisoformat(log.timestamp).strftime(\"%d.%m.%y\") # 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_value: {input.quantities[0].units.name}\")\n",
|
|
" print(f\"quant_inventory_adjustment: {input.quantities[0].inventory_adjustment}\")\n",
|
|
" print (f\"inventory_asset: = {input.quantities[0].inventory_asset.name}\")\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "96e31109-66d8-44ae-98fb-0c11fad2a7ae",
|
|
"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
|
|
}
|