#+TITLE: Case-Study
#+AUTHOR: Ivan Hörler und Andreas Zweili
#+OPTIONS: toc:1 num:nil
#+REVEAL_TRANS: linear
#+REVEAL_THEME: solarized
#+REVEAL_ROOT: https://cdn.jsdelivr.net/reveal.js/3.0.0/
#+LANGUAGE: de

* Ausgangslage
- Freie Software in Bezug auf Open-Source Code.

Um einen ersten Anhaltspunkt zu haben, haben wir ein Mindmap gezeichnet in
welchem wir unsere ersten Ideen erfassten.

** Vision
Die Vision wurde anhand eines Mindmaps erstmals grob umfasst:

#+ATTR_HTML: :width 70%
[[file:pictures/webshop.png]]

** Vision - Artikel

#+ATTR_HTML: :width 80%
[[file:pictures/Vision-Artikel.png]]

** Vision - Warenkorb

#+ATTR_HTML: :width 80%
[[file:pictures/Vision-Warenkorb.png]]

** Vision - Abgaben

#+ATTR_HTML: :width 80%
[[file:pictures/Vision-Abgaben.png]]

* Varianten

** C# und SQL Server

[[file:pictures/csharp.png]]

** Laravel und MySQL

[[file:pictures/laravel.png]]

** Django und MariaDB

[[file:pictures/django.png]]

** Kriterien
- Freie Software
- Cross Plattform nutzbar
- Lesbarkeit des Codes
- Einfachheit des Setups
- Ohne spezielle Tools nutzbar
- Vorkenntnisse Lernfaktor

** Vergleich

|------------------------+-----------------------|
| *Variante*             | *Erreichte Punktzahl* |
|------------------------+-----------------------|
| ASP.NET und SQL Server |                   141 |
| PHP und MySQL          |                   161 |
| Django und MariaDB     |                   196 |
|------------------------+-----------------------|

** Auswahl

* Kosten
** Laravel Webshop

| Sprache | Codezeilen |
|---------+------------|
| PHP     | 8679       |
|---------+------------|
| *Total* | *8679*     |
|---------+------------|
#+TBLFM: @>$2=vsum(@2..@-1);%.0f

** Django Webshop

| Sprache | Codezeilen |
|---------+------------|
| Python  |       1460 |
| SQL     |       4639 |
|---------+------------|
| *Total* |     *6099* |
|---------+------------|
#+TBLFM: @>$2=vsum(@2..@-1);%.0f

* Vorgehen
** Currencies - App

- Wurde in Django als eigenen App entwickelt und sollte daher problemloos in
andere Applikationen eingebunden werden können.

- Die Quelle der Währungen ist die Schweizerische Nationalbank mit der URL:

https://www.snb.ch | resp:
https://www.snb.ch/selector/de/mmr/exfeed/rss

#+ATTR_HTML: :width 80%
[[file:pictures/currencies-rss-reader.png]]

** Currencies - Quelle

#+ATTR_HTML: :width 80%
[[file:pictures/currencies-rss-xml.png]]

** Currencies - Parsing

- Das Konvertieren des XML's wurde mit Python eigener Module gemacht.
- für das Herunterladen des XML's wurde das Modul 'urllib' verwendet (1)
- für das Parsen über die einzelnen items/nodes das Modul xml.etree.ElementTree. (2)

(1) https://docs.python.org/2/library/urllib.html
(2) https://docs.python.org/2/library/xml.etree.elementtree.html

** Currencies - Ablauf

#+ATTR_HTML: :width 55%
[[file:pictures/currencies.png]]

** Infrastruktur

#+BEGIN_NOTES
Andreas erzählt wie die infrastruktur aufgebaut ist.
#+END_NOTES

#+ATTR_HTML: :width 60%
[[file:pictures/Server-Architecture.png]]

** Programmierung
vieleicht zwei Schwierigkeiten

** Programmierung - Hürde #1

- Django hat ein modul das die Forms speziell handelt so dass man mit wehnig Code
Einen HTML Button oder ein Feld erzeugen kann.
- Die schwierigkeit war nun heraus zu finden wie man dem Feld ein von der DB stammenden
default wert mitgeben konnte.
- Es stellte sich heraus dass das Feld ein Key: Value paar benötigte um zu wissen wohin es
den wert schreiben soll....

Note: hier den code higlighter einfügen:
amount_form = CartForm(
    initial={'amount_form': cart_position.amount}
)

* Fazit

special thanks to:
- draw.io,
- Python,
- Django,
- stackexchange and
- Beer.
