Add current state of the art
This commit is contained in:
parent
9beeb0bb1c
commit
20f64216df
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
Wochenplanung KW *_temp.xlsx
|
||||
Dispo KW *.xlsx
|
||||
BIN
Abpackplanung Vorlage.xlsx
Normal file
BIN
Abpackplanung Vorlage.xlsx
Normal file
Binary file not shown.
1363
Produktionsplanung.ipynb
Normal file
1363
Produktionsplanung.ipynb
Normal file
File diff suppressed because it is too large
Load Diff
BIN
Umfuhrplanung_Vorlage.xlsx
Normal file
BIN
Umfuhrplanung_Vorlage.xlsx
Normal file
Binary file not shown.
248
Umfuhrplanung_direct.ipynb
Normal file
248
Umfuhrplanung_direct.ipynb
Normal file
@ -0,0 +1,248 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"source": [
|
||||
"from spielbergerscripts.spielbergerscripts.storageunit import Product, Bundle, NVE\r\n",
|
||||
"from spielbergerscripts.spielbergerscripts.connector import IBMConnector"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"source": [
|
||||
"ibmconnect = IBMConnector(True)\r\n",
|
||||
"nveDict = ibmconnect.getNVETable()\r\n",
|
||||
"prodDict = ibmconnect.getProductsTable()"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"source": [
|
||||
"extResource = dict()\r\n",
|
||||
"\r\n",
|
||||
"for nve in nveDict.values():\r\n",
|
||||
" prod = prodDict.get(nve.article)\r\n",
|
||||
"\r\n",
|
||||
" if not prod is None:\r\n",
|
||||
" if nve.area != '01' and nve.area != '02' and nve.area != prod.pickArea:\r\n",
|
||||
" extResource[(nve.article, nve.area, nve.vq)] = (prod.name, prod.bundle, extResource.get((nve.article, nve.area, nve.vq), ('', '', 0))[2] + nve.amount)"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"source": [
|
||||
"ART_WU = set()\r\n",
|
||||
"\r\n",
|
||||
"for (pNr, area, vq), (pName, bundle, amount) in extResource.items():\r\n",
|
||||
" if area != '36' or bundle.strip() == \"25 KG\" or bundle.strip() == \"BIG-BAG\" or bundle.strip() == \"1000 ST\":\r\n",
|
||||
" continue\r\n",
|
||||
" print(f\"Lager {area}\\t{amount}x {pName.strip()} (#{pNr} / VQ{vq}) {bundle} auf Vorrat\")\r\n",
|
||||
" ART_WU.add(pNr)\r\n",
|
||||
"\r\n",
|
||||
"# zusätzlich\r\n",
|
||||
"ART_WU.union({\"062346\", \"062356\", \"062306\", \"062416\", \"104406\", \"104409\"})\r\n",
|
||||
"\r\n",
|
||||
"ART_WU = list(ART_WU)\r\n",
|
||||
"ART_WU.sort()"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"source": [
|
||||
"\r\n",
|
||||
"from openpyxl import load_workbook\r\n",
|
||||
"from openpyxl.styles import Color, PatternFill\r\n",
|
||||
"\r\n",
|
||||
"from dataclasses import dataclass\r\n",
|
||||
"from datetime import date, datetime, timedelta\r\n",
|
||||
"\r\n",
|
||||
"@dataclass\r\n",
|
||||
"class Request:\r\n",
|
||||
" ordernr: str\r\n",
|
||||
" cust_name: str\r\n",
|
||||
" delivdate: date\r\n",
|
||||
" artnr: str\r\n",
|
||||
" artname: str\r\n",
|
||||
" bundle: str\r\n",
|
||||
" stock: int\r\n",
|
||||
" ordered: int\r\n",
|
||||
" ord_rem: int\r\n",
|
||||
" available: int\r\n",
|
||||
" avail_wo_36:int\r\n",
|
||||
" upcoming: int\r\n",
|
||||
" upc_date: str\r\n",
|
||||
" upc_area: str\r\n",
|
||||
" stock00: int\r\n",
|
||||
" stock01: int\r\n",
|
||||
" stock33: int\r\n",
|
||||
" stock36: int\r\n",
|
||||
"\r\n",
|
||||
" def from_tuple(t):\r\n",
|
||||
" d = str(t[2])\r\n",
|
||||
" szd = f\"20{d[-2:]}-{d[-4:-2]}-{int(d[:-4]):02d}\"\r\n",
|
||||
" return Request(\r\n",
|
||||
" ordernr=str(t[0]),\r\n",
|
||||
" cust_name=str(t[1]).strip(),\r\n",
|
||||
" delivdate=date.fromisoformat(szd),\r\n",
|
||||
" artnr=str(t[3]),\r\n",
|
||||
" artname=str(t[4]),\r\n",
|
||||
" bundle=str(t[5]),\r\n",
|
||||
" stock=int(t[6]),\r\n",
|
||||
" ordered=int(t[7]),\r\n",
|
||||
" ord_rem=int(t[23]),\r\n",
|
||||
" available=int(t[9]),\r\n",
|
||||
" avail_wo_36=int(t[28]),\r\n",
|
||||
" upcoming=int(t[10]),\r\n",
|
||||
" upc_date=date.fromisoformat(f\"20{str(t[11])[-2:]}-{str(t[11])[-4:-2]}-{int(str(t[11])[:-4]):02d}\") if int(t[10]) > 0 else None,\r\n",
|
||||
" upc_area=str(t[12]),\r\n",
|
||||
" stock00=int(t[24]),\r\n",
|
||||
" stock01=int(t[25]),\r\n",
|
||||
" stock33=int(t[26]),\r\n",
|
||||
" stock36=int(t[27]),\r\n",
|
||||
" )\r\n",
|
||||
"\r\n",
|
||||
"\r\n",
|
||||
"RED = Color(rgb='E6B8B7')\r\n",
|
||||
"\r\n",
|
||||
"FROM = datetime.now().date()\r\n",
|
||||
"TO = FROM + timedelta(days=14)\r\n",
|
||||
"\r\n",
|
||||
"if FROM.month == TO.month and FROM.year == TO.year:\r\n",
|
||||
" aufbes = list(map(lambda t: Request.from_tuple(t), ibmconnect.getNegAvail(FROM.day, TO.day, FROM.month, FROM.year)))\r\n",
|
||||
"else:\r\n",
|
||||
" temp_to = FROM + timedelta(days = 31 if FROM.day >= 15 else 20)\r\n",
|
||||
" temp_to = temp_to.replace(day = 1)\r\n",
|
||||
" print(f\"Temp to = {temp_to}\")\r\n",
|
||||
" temp_to = temp_to - timedelta(days=1)\r\n",
|
||||
" print(f\"Temp to = {temp_to}\")\r\n",
|
||||
" aufbes = list(map(lambda t: Request.from_tuple(t), ibmconnect.getNegAvail(FROM.day, temp_to.day, FROM.month, FROM.year)))\r\n",
|
||||
" temp_from = temp_to + timedelta(days=1)\r\n",
|
||||
" print(f\"Temp from = {temp_from}\")\r\n",
|
||||
" while temp_from.month < TO.month:\r\n",
|
||||
" temp_to = FROM + timedelta(days = 31 if FROM.day >= 15 else 20)\r\n",
|
||||
" temp_to = temp_to.replace(day=1)\r\n",
|
||||
" temp_to = temp_to - timedelta(days=1)\r\n",
|
||||
" aufbes.extend(map(lambda t: Request.from_tuple(t), ibmconnect.getNegAvail(temp_from.day, temp_to.day, temp_from.month, temp_from.year)))\r\n",
|
||||
" temp_from = temp_to + timedelta(days=1)\r\n",
|
||||
" \r\n",
|
||||
" # last month. temp_from is the current TO month\r\n",
|
||||
" aufbes.extend(map(lambda t: Request.from_tuple(t), ibmconnect.getNegAvail(temp_from.day, TO.day, temp_from.month, temp_from.year)))\r\n",
|
||||
" \r\n",
|
||||
"\r\n",
|
||||
"\r\n",
|
||||
"aufbes.sort(key = lambda a: a.delivdate)\r\n",
|
||||
"\r\n",
|
||||
"vorlage = load_workbook(\"Umfuhrplanung_Vorlage.xlsx\")\r\n",
|
||||
"\r\n",
|
||||
"for prodNr in ART_WU:\r\n",
|
||||
" aufbes_filt = [t for t in aufbes if t.artnr == prodNr]\r\n",
|
||||
"\r\n",
|
||||
" if len(aufbes_filt) > 0:\r\n",
|
||||
" prod = prodDict.get(prodNr)\r\n",
|
||||
" sheet = vorlage.copy_worksheet(vorlage[\"Vorlage\"])\r\n",
|
||||
" sheet.title = prodNr\r\n",
|
||||
" sheet['A1'] = f\"{prod.name.strip()} (#{prodNr})\"\r\n",
|
||||
" sheet['N1'] = f\"vom {FROM} bis inklussive {TO}\\n\\n\"\r\n",
|
||||
"\r\n",
|
||||
" first = aufbes_filt[0]\r\n",
|
||||
" bestand_00 = first.stock00\r\n",
|
||||
" bestand_01 = first.stock01\r\n",
|
||||
" bestand_33 = first.stock33\r\n",
|
||||
" bestand_36 = first.stock36\r\n",
|
||||
" \r\n",
|
||||
"\r\n",
|
||||
" we = first.upcoming\r\n",
|
||||
" we_dat = first.upc_date\r\n",
|
||||
" we_area = first.upc_area\r\n",
|
||||
" we_done = False\r\n",
|
||||
"\r\n",
|
||||
" sheet['C2'] = bestand_00\r\n",
|
||||
" sheet['E2'] = bestand_33\r\n",
|
||||
" sheet['G2'] = bestand_36\r\n",
|
||||
" sheet['B3'] = we\r\n",
|
||||
" sheet['D3'] = we_dat\r\n",
|
||||
"\r\n",
|
||||
" verbleibend = bestand_00\r\n",
|
||||
" bedarf_am = \"\"\r\n",
|
||||
" bedarf_durch = \"\"\r\n",
|
||||
" bedarf_auftrag = \"\"\r\n",
|
||||
" umfuhrmenge = 0\r\n",
|
||||
" umfuhr_an = \"\"\r\n",
|
||||
" auftrag = 0\r\n",
|
||||
" auftr_dennree = 0\r\n",
|
||||
" for t in aufbes_filt:\r\n",
|
||||
" if we > 0 and t.delivdate > we_dat:\r\n",
|
||||
" if we_area == \"00\":\r\n",
|
||||
" verbleibend += we\r\n",
|
||||
" \r\n",
|
||||
" sheet.append([\"\", \"Produktion\", we_dat, t.delivdate, t.artnr, t.artname, t.bundle, \"\", f\"+{we}\", verbleibend, t.upcoming, t.upc_date, t.upc_area, t.stock00, t.stock01, t.stock33, t.stock36])\r\n",
|
||||
" we = 0\r\n",
|
||||
" if t.cust_name.strip() == \"dennree GmbH\":\r\n",
|
||||
" sheet.append([t.ordernr, t.cust_name, t.delivdate, t.artnr, t.artname, t.bundle, t.ordered, t.ord_rem, verbleibend, t.upcoming, t.upc_date, t.upc_area, t.stock00, t.stock01, t.stock33, t.stock36])\r\n",
|
||||
" for row in sheet.iter_cols(min_col=1, max_col=16, min_row=sheet.max_row, max_row=sheet.max_row):\r\n",
|
||||
" for cell in row:\r\n",
|
||||
" cell.fill = PatternFill(fgColor=RED, fill_type = 'solid')\r\n",
|
||||
" elif t.cust_name.strip() == \"Interne Umlagerung\":\r\n",
|
||||
" verbleibend += t.ordered\r\n",
|
||||
" sheet.append([t.ordernr, t.cust_name, t.delivdate, t.artnr, t.artname, t.bundle, t.ordered, f\"+{t.ordered}\", verbleibend, t.upcoming, t.upc_date, t.upc_area, t.stock00, t.stock01, t.stock33, t.stock36])\r\n",
|
||||
" else:\r\n",
|
||||
" verbleibend -= t.ord_rem\r\n",
|
||||
" sheet.append([t.ordernr, t.cust_name, t.delivdate, t.artnr, t.artname, t.bundle, t.ordered, t.ord_rem, verbleibend, t.upcoming, t.upc_date, t.upc_area, t.stock00, t.stock01, t.stock33, t.stock36])\r\n",
|
||||
" \r\n",
|
||||
" if we > 0:\r\n",
|
||||
" if we_area == \"00\":\r\n",
|
||||
" verbleibend += we\r\n",
|
||||
" \r\n",
|
||||
" sheet.append([\"\", \"Produktion\", we_dat, t.delivdate, t.artnr, t.artname, t.bundle, \"\", f\"+{we}\", verbleibend, t.upcoming, t.upc_date, t.upc_area, t.stock00, t.stock01, t.stock33, t.stock36])\r\n",
|
||||
"\r\n",
|
||||
"vorlage.save(f\"Umfuhrplanung_{FROM}.xlsx\")"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"source": [],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"orig_nbformat": 4,
|
||||
"language_info": {
|
||||
"name": "python",
|
||||
"version": "3.9.7",
|
||||
"mimetype": "text/x-python",
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"pygments_lexer": "ipython3",
|
||||
"nbconvert_exporter": "python",
|
||||
"file_extension": ".py"
|
||||
},
|
||||
"kernelspec": {
|
||||
"name": "python3",
|
||||
"display_name": "Python 3.9.7 64-bit"
|
||||
},
|
||||
"interpreter": {
|
||||
"hash": "032eb40c1682b1e6109824d577ff4427b0bbc2f8ebe1487b7b1be524c4843266"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user