{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "ce2c6555",
   "metadata": {},
   "source": [
    "<div style=\"float: right;\"><img src=\"https://datascience.hs-bochum.de/images/hs-bo_logo.svg\" style=\"height:40px;\"></div>\n",
    "<div style=\"clear: both;\"></div>\n",
    "<div style='text-align: center; margin-top: 40px; margin-bottom:40px;'>\n",
    "<h1>Lernwerkstatt Wirtschaftsinformatik</h1>\n",
    "<h2>Übung 3 — Vertiefung</h2>\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a7261aef",
   "metadata": {},
   "source": [
    "Dieses Blatt baut auf Übung 3 auf und ist **anspruchsvoller**: Jede Aufgabe kombiniert\n",
    "mehrere Funktionen mit **Entscheidungen** (`if`/`elif`/`else`) — an typischen\n",
    "betriebswirtschaftlichen Rechenwegen.\n",
    "\n",
    "Wie gewohnt: Zellen **von oben nach unten** mit **`Shift`+`Enter`** ausführen. Denken Sie daran:\n",
    "Eine Zelle mit `def` muss ausgeführt sein, bevor eine spätere Zelle die Funktion benutzt."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "60b5a2f5",
   "metadata": {},
   "source": [
    "## Wiederholung — Notebook bedienen\n",
    "\n",
    "Führen Sie zum Warmwerden die Zelle aus. Sie zeigt das **Muster** für dieses Blatt: eine Funktion\n",
    "mit mehreren Fällen und eine zweite Funktion, die die erste benutzt. Brick-Flow staffelt den\n",
    "Palettenpreis: unter 10 Paletten **80 €**, ab 10 **76 €**, ab 50 **72 €** — jeweils für die\n",
    "*gesamte* Bestellung."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "061f1775",
   "metadata": {},
   "outputs": [],
   "source": [
    "def preis_je_palette(menge):\n",
    "    if menge >= 50:\n",
    "        return 72\n",
    "    elif menge >= 10:\n",
    "        return 76\n",
    "    else:\n",
    "        return 80\n",
    "\n",
    "def warenwert(menge):\n",
    "    preis = preis_je_palette(menge)\n",
    "    return menge * preis\n",
    "\n",
    "print(warenwert(12))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a6974548",
   "metadata": {},
   "source": [
    "**Zum Ausprobieren:** Berechnen Sie `warenwert(49)` und `warenwert(50)`. Was fällt auf — und\n",
    "was würden Sie einem Kunden raten, der 48 Paletten bestellen will?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "31f8f300",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Ihr Code:\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1224d513",
   "metadata": {},
   "source": [
    "## Aufgabe 1 — Lieferantenvergleich (Bezugskalkulation)\n",
    "\n",
    "Brick-Flow kauft Granulat ein. Zwei Angebote liegen vor. **Skonto** gibt es nur bei Zahlung\n",
    "**innerhalb von 10 Tagen**.\n",
    "\n",
    "| | Listenpreis | Liefererrabatt | Skonto | Bezugskosten (Fracht) |\n",
    "|---|---:|---:|---:|---:|\n",
    "| Lieferant A | 2000 € | 10 % | 2 % | 60 € |\n",
    "| Lieferant B | 1870 € | — | 4 % | frei Haus |\n",
    "\n",
    "Rechenweg: Listenpreis − Rabatt = **Zieleinkaufspreis**; − Skonto (falls rechtzeitig gezahlt) =\n",
    "**Bareinkaufspreis**; + Bezugskosten = **Bezugspreis**.\n",
    "\n",
    "**a)** Schreiben Sie `bezugspreis(listenpreis, rabatt, skonto, bezugskosten, zahlung_nach_tagen)`.\n",
    "Rabatt und Skonto werden in Prozent übergeben (z. B. `10` für 10 %).<br>\n",
    "**Kontrollwert:** Lieferant A, Zahlung nach 7 Tagen → `1824.0`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ac4d1acd",
   "metadata": {},
   "outputs": [],
   "source": [
    "def bezugspreis(listenpreis, rabatt, skonto, bezugskosten, zahlung_nach_tagen):\n",
    "    # 1. Zieleinkaufspreis berechnen\n",
    "    # 2. Skonto nur, wenn innerhalb von 10 Tagen gezahlt wird\n",
    "    # 3. Bezugskosten addieren und zurueckgeben\n",
    "    return 0    # <- ersetzen\n",
    "\n",
    "print(bezugspreis(2000, 10, 2, 60, 7))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5d014ea8",
   "metadata": {},
   "source": [
    "**b)** Schreiben Sie `guenstiger(preis_a, preis_b)`, die `\"A\"`, `\"B\"` oder `\"gleich\"` zurückgibt.\n",
    "\n",
    "**c)** Welcher Lieferant ist günstiger, wenn Brick-Flow nach **7 Tagen** zahlt — und welcher bei\n",
    "Zahlung nach **30 Tagen**? Nutzen Sie beide Funktionen."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4c8268d0",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Aufgabe 1 b) und c):\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bdba9f42",
   "metadata": {},
   "source": [
    "## Aufgabe 2 — Vertriebsgehalt mit Stufenprovision\n",
    "\n",
    "Ein Außendienstmitarbeiter erhält monatlich:\n",
    "\n",
    "- ein **Fixum** von **2500 €**,\n",
    "- **2 %** Provision auf den Umsatz **bis 40000 €**,\n",
    "- **4 %** Provision *nur auf den Teil* des Umsatzes **über 40000 €**,\n",
    "- einen **Zielbonus von 1000 €**, wenn das Umsatzziel erreicht wird (Standard: **60000 €**).\n",
    "\n",
    "**a)** Schreiben Sie `provision(umsatz)` — nur die Provision.<br>\n",
    "**Tipp:** Rechnen Sie `provision(70000)` zuerst **von Hand**, bevor Sie in Python testen.<br>\n",
    "**Kontrollwert:** `provision(30000)` → `600.0`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a11f62e0",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Aufgabe 2 a):\n",
    "def provision(umsatz):\n",
    "    return 0    # <- ersetzen\n",
    "\n",
    "print(provision(30000))\n",
    "print(provision(70000))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4484836b",
   "metadata": {},
   "source": [
    "**b)** Schreiben Sie `monatsgehalt(umsatz, ziel=60000)`, die `provision` benutzt.\n",
    "\n",
    "**c)** Testen Sie mit **30000**, **50000** und **70000 €** Umsatz. Was ändert sich bei\n",
    "70000 €, wenn das Ziel auf **80000 €** steigt?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6ee8add6",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Aufgabe 2 b) und c):\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e769f4f8",
   "metadata": {},
   "source": [
    "## Aufgabe 3 — Make or Buy? *(selbst lösen)*\n",
    "\n",
    "Ein Bauteil kann Brick-Flow selbst fertigen (**12000 €** Fixkosten + **18 €** je Stück) oder\n",
    "zukaufen (**26 €** je Stück, **ab 2000 Stück nur 22 €** je Stück). Ein Kollege hat die beiden\n",
    "Kostenfunktionen schon geschrieben. Führen Sie die Zelle aus — sie schlägt **mit Absicht** fehl.\n",
    "Lesen Sie die **letzte Zeile** der Fehlermeldung."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1c99d188",
   "metadata": {},
   "outputs": [],
   "source": [
    "def kosten_eigen(menge):\n",
    "    return 12000 + 18 * menge\n",
    "\n",
    "def kosten_fremd(menge):\n",
    "    if menge >= 2000:\n",
    "        return 22 * menge\n",
    "    else:\n",
    "        26 * menge\n",
    "\n",
    "print(kosten_eigen(2400) - kosten_fremd(2400))\n",
    "print(kosten_eigen(1000) - kosten_fremd(1000))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "89aea23e",
   "metadata": {},
   "source": [
    "Seltsam: Für **2400** Stück klappt es, für **1000** Stück nicht. In der Fehlermeldung steht\n",
    "`NoneType` — das kennen Sie aus Übung 3.\n",
    "\n",
    "**a)** Finden und reparieren Sie den Fehler in der Zelle unten."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "fbb769e7",
   "metadata": {},
   "outputs": [],
   "source": [
    "def kosten_eigen(menge):\n",
    "    return 12000 + 18 * menge\n",
    "\n",
    "def kosten_fremd(menge):\n",
    "    if menge >= 2000:\n",
    "        return 22 * menge\n",
    "    else:\n",
    "        26 * menge\n",
    "\n",
    "print(kosten_eigen(2400) - kosten_fremd(2400))\n",
    "print(kosten_eigen(1000) - kosten_fremd(1000))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bd07f49d",
   "metadata": {},
   "source": [
    "**b)** Schreiben Sie `entscheidung(menge)`, die `\"Eigenfertigung\"`, `\"Fremdbezug\"` oder\n",
    "`\"gleich\"` zurückgibt — je nachdem, was billiger ist.\n",
    "\n",
    "**c)** Testen Sie mit **1000**, **1800**, **2400** und **4000** Stück. Erklären Sie in einem\n",
    "Satz, warum die Entscheidung mehrmals wechselt.\n",
    "\n",
    "**Zusatz:** Bei welchen Mengen kommt genau `\"gleich\"` heraus? (Tipp: kritische Menge =\n",
    "Fixkosten / Differenz der Stückkosten.)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "87ba9874",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Aufgabe 3 b) und c):\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "596536a6",
   "metadata": {},
   "source": [
    "## Geschafft! 🎉\n",
    "\n",
    "Sie haben mehrstufige Entscheidungen **in** Funktionen programmiert, Funktionen miteinander\n",
    "kombiniert und drei typische BWL-Rechenwege umgesetzt: **Bezugskalkulation**,\n",
    "**Stufenprovision** und **Make-or-Buy**.\n",
    "\n",
    "**Zum Mitnehmen:** Testen Sie eine Funktion immer mit Werten auf **beiden Seiten** jeder Grenze\n",
    "und genau **auf** der Grenze (z. B. 1999, 2000, 2001) — sonst bleibt ein Fehler wie in\n",
    "Aufgabe 3 leicht unentdeckt."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
