Compare commits

..

No commits in common. "master" and "cart" have entirely different histories.
master ... cart

25 changed files with 677 additions and 1017 deletions

View File

@ -50,4 +50,3 @@ We don't provide any support for the content in this repository.
### License
The project is licensed under the GPLv3 license.

View File

@ -1,4 +1,6 @@
from django.db import models
from decimal import Decimal
import datetime
class ExchangeRate_name(models.Model):
@ -23,7 +25,7 @@ class ExchangeRate(models.Model):
def exchange(_currency_id, _base_currency):
rate = ExchangeRate.objects.filter(name=_currency_id).latest('date')
return round(rate.exchange_rate_to_chf * _base_currency, 2)
return round(rate.exchange_rate_to_chf * _base_currency,2)
def __str__(self):
return '{} {}'.format(self.exchange_rate_to_chf, self.name)
return str(self.name)

View File

@ -4,7 +4,7 @@ from currencies.models import (ExchangeRate,
ExchangeRate_date,
ExchangeRate_name)
from currencies import exchange_rates
from webshop.utils import get_categories
from django.http import JsonResponse
def currencies(request):
@ -160,10 +160,9 @@ def currencies(request):
"""
# know we can query our data for presentaton:
ordered_currency_list = ExchangeRate.objects.order_by('name', 'date')
category_list = get_categories()
# and publish it on template:
return render(request,
'currencies/index.html',
{'ordered_currency_list': ordered_currency_list,
'category_list': category_list,
'message': message})

File diff suppressed because it is too large Load Diff

View File

@ -59,14 +59,6 @@
<dt><dl>{{ total }} {{ currency_name }}</dl></dt>
</td>
</tr>
<tr>
<td scope="col" colspan="5" class="text-right">
<td scope="col" class="price-value">
<dt><dl>Exchange Rate to 1 CHF:</dl></dt></td>
<td scope="col" class="price-value">
<dt><dl>{{ exchange_rate }}</dl></dt>
</td>
</tr>
</table>
<form id="checkout_form" action="{% url 'cart' %}" method="POST">
{% csrf_token %}

View File

@ -22,6 +22,7 @@
<th scope="col">NAME</th>
<th scope="col">STOCK</th>
<th scope="col">AMOUNT</th>
<th scope="col" class="price-label">PRICE p.pce.</th>
<th scope="col" class="price-label">POSITION PRICE</th>
</tr>
{% for order_position, price, pos_price in order_position_list_zip %}
@ -36,12 +37,16 @@
<td scope="col">{{ order_position.article.stock }}</td>
<td scope="col">{{ order_position.amount }}</td>
<td scope="col" class="price-value">
{{ price }} {{ currency_name }}
{{ price }}
{{ currency_name }}
</td>
<td scope="col" class="price-value">
{{ pos_price }} {{ currency_name }}
</td>
</tr>
{% endfor %}
<tr>
<td scope="col" colspan="4"class="text-right">
<td scope="col" colspan="5"class="text-right">
<td scope="col" class="price-value">
<dl><dt>Total:</dl></dt></td>
<td scope="col" class="price-value">

View File

@ -397,13 +397,11 @@ def checkout(request):
order = Order.objects.create(user=request.user,
status=orderstatus)
for position in cart_positions:
article = Article.objects.get(pk=position.article.id)
OrderPosition.objects.create(
article=position.article,
order=order,
amount=position.amount,
price_in_chf=article.price_in_chf * Decimal.from_float(
position.amount)
price_in_chf=position.article.price_in_chf
)
return HttpResponseRedirect('/order/%s/' % order.id)
@ -416,12 +414,10 @@ def checkout(request):
'category_list': category_list,
'message': message,
'person': person,
'exchange_rate': exchange_rate,
})
def order(request, order_id):
category_list = get_categories()
price_list = []
totalprice_list = []
order_position_list_zip = []
@ -452,13 +448,14 @@ def order(request, order_id):
price = round(
rate.exchange_rate_to_chf * order_position.price_in_chf,
2)
currency_name = order.exchange_rate.name
currency_name = order.exchange_rate
else:
currency_name = 'CHF'
price = order_position.price_in_chf
position_price = price * Decimal.from_float(order_position.amount)
order_position_list[idx] = order_position
price_list.append(price)
totalprice_list.append(price)
totalprice_list.append(position_price)
total = sum(totalprice_list)
order_position_list_zip = zip(order_position_list,
price_list,
@ -468,5 +465,4 @@ def order(request, order_id):
'order_position_list_zip': order_position_list_zip,
'total': total,
'currency_name': currency_name,
'category_list': category_list,
})

View File

@ -2,7 +2,7 @@
month = {{01}},
note = {{\url{https://github.com/django-extensions/django-extensions}}},
Urldate = {2018-01-05},
author = {{django-extensions}},
author = {django-extensions},
title = {{Django Extensions Source Code}},
year = {2018},
}

View File

@ -57,7 +57,7 @@ steht unter einer GPLv3\footcite{gplv3} Lizenz. Dadurch darf die
Arbeit unter Einhaltung der Regeln der GPLv3 kopiert und
weiterverarbeitet werden.
* Projektanalyse und Planung
* TODO Projektanalyse und Planung
** Projektziele
Der Student erarbeitet in einer Zweiergruppe einen selbst entwickelten
@ -118,19 +118,6 @@ geeignet erscheinenden Frameworks. Jede noch so kleine Zeiteinsparung
durch vorgefertigte Entwicklungen werden angenommen und dennoch wollen
wir keine fertigen Software Produkte einsetzen.
Um einen ersten Anhaltspunkt zu haben, haben wir ein Mindmap
gezeichnet in welchem wir unsere ersten Ideen erfassten. Zusehen ist
dies in der Abbildung([[fig:mindmap]]).
#+LATEX:\newpage
#+LATEX:\begin{landscape}
#+CAPTION: Mindmap
#+ATTR_LATEX: :height.9\textwidth
#+NAME: fig:mindmap
[[file:diagrammes/mindmap/webshop.png]]
#+LATEX:\end{landscape}
#+LATEX:\newpage
** SWOT-Analyse
Die SWOT-Analyse ist eine Methode, die Stärken, Schwächen, Chancen und
@ -230,7 +217,7 @@ Abbildung:(\ref{fig:swot}) zu sehen.
\item Der Kunde vertraut uns und die Beziehung ist gut.
Diese Ausgangslage mag helfen interne Schwächen durch
offene Kommunikation zu übergehen.
\end{itemize}}
\end{itemize}
};
\node[
any,
@ -242,7 +229,7 @@ Abbildung:(\ref{fig:swot}) zu sehen.
\item Die Implementierung von Währungsänderungen ist
nicht trivial. Der Zeitpunkt zu dem die Kosten
eines Produktes sich ändert, muss gut durchdacht werden.
\end{itemize}}
\end{itemize}
};
\node[
any,
@ -294,7 +281,7 @@ Abbildung:([[fig:umweltgrafik]]) grafisch dargestellt.
| | | | - Viele Arbeitsschritte automatisieren | mittel |
|-------+----------------------+----------------------+-----------------------------------------------+----------------------------------------------|
| 3. | Interessenten | gering | - Intuitiv bedienbare Webseite | hoch |
| | | | - schnell finden, was gesucht wird. | hoch |
| | | | - schnell finden, was gesucht wird. | hoch |
|-------+----------------------+----------------------+-----------------------------------------------+----------------------------------------------|
| 4. | Projektleiter | hoch | - Gutes innovatives Produkt erschaffen. | mittel |
| | | | - Anerkennung im fachlichen Umfeld | hoch |
@ -310,7 +297,7 @@ Abbildung:([[fig:umweltgrafik]]) grafisch dargestellt.
*** Risikobeschreibung
#+CAPTION: Risikobeschreibung
#+ATTR_LATEX: :align |>{\columncolor[HTML]{EFEFEF}}p{0.8cm}|p{5cm}|p{5cm}|p{0.8cm}|p{0.8cm}| :placement [H]
#+ATTR_LATEX: :align |>{\columncolor[HTML]{EFEFEF}}p{0.8cm}|p{5cm}|p{5cm}|p{0.8cm}|p{0.8cm}|
#+NAME: tab:risikobeschreibung
|------------+--------------------------------+--------------------------------+-------------------------------+-------------------------------|
| <10> | <30> | <30> | | |
@ -352,14 +339,9 @@ Abbildung:([[fig:umweltgrafik]]) grafisch dargestellt.
#+NAME: fig:risk
[[file:diagrammes/risk_analysis.eps]]
** Projektabgrenzung
** TODO Projektabgrenzung
Der Webshop wird nur zum Teil aufgebaut. Funktionen wie die Bezahlung
, das Versenden von Email Benachrichtigungen und einen automatisierte
Aktualisierung der Warenbestände sind nicht Teil der Umsetzung.
Aufgrund des hohen Mehraufwandes der für die Umsetzung nötig gewesen
wäre, ist es zur Zeit nur möglich einen Artikel einem Bild zuzuweisen
und nicht die Bilder direkt auf dem Aritkel hochzuladen.
Am Ende des Projekts die nicht lauffähigen Teile ausgrenzen. :-)
* Projektmanagement
** Organigramm
@ -399,6 +381,7 @@ und nicht die Bilder direkt auf dem Aritkel hochzuladen.
\end{figure}
#+END_EXPORT
** Projektstrukturplan
** Varianten
Wir haben uns 3 mögliche Varianten in Bezug auf die zu
@ -445,7 +428,6 @@ zu können.
| Lernfaktor | 5 | 10 | 6 | 30 |
|----------------------+----------------------+----------------------+----------------------+----------------------|
| *Total* | | | | 141 |
|----------------------+----------------------+----------------------+----------------------+----------------------|
#+TBLFM: @3$5=@3$2 * @3$4::@4$5=@4$2 * @4$4::@5$5=@5$2 * @5$4::@6$5=@6$2 * @6$4::@7$5=@7$2 * @7$4::@8$5=@8$2 * @8$4
#+TBLFM: @9$5=@9$2 * @9$4
#+TBLFM: @10$5=vsum(@3$5..@9$5)
@ -482,7 +464,6 @@ anderen Varianten jedoch auf jeden Fall weniger.
| Lernfaktor | 5 | 10 | 4 | 20 |
|----------------------+----------------------+----------------------+----------------------+----------------------|
| *Total* | | | | 161 |
|----------------------+----------------------+----------------------+----------------------+----------------------|
#+TBLFM: @3$5=@3$2 * @3$4::@4$5=@4$2 * @4$4::@5$5=@5$2 * @5$4::@6$5=@6$2 * @6$4::@7$5=@7$2 * @7$4::@8$5=@8$2 * @8$4
#+TBLFM: @9$5=@9$2 * @9$4
#+TBLFM: @10$5=vsum(@3$5..@9$5)
@ -519,7 +500,6 @@ als eher niedrig eingestuft dafür den Lernfaktor umso höher.
| Lernfaktor | 5 | 10 | 8 | 40 |
|----------------------+----------------------+----------------------+----------------------+----------------------|
| *Total* | | | | 196 |
|----------------------+----------------------+----------------------+----------------------+----------------------|
#+TBLFM: @3$5=@3$2 * @3$4::@4$5=@4$2 * @4$4::@5$5=@5$2 * @5$4::@6$5=@6$2 * @6$4::@7$5=@7$2 * @7$4::@8$5=@8$2 * @8$4
#+TBLFM: @9$5=@9$2 * @9$4
#+TBLFM: @10$5=vsum(@3$5..@9$5)
@ -534,7 +514,7 @@ Erstellen der Case Study verwendet wurden und erklären, wenn möglich
auch, weshalb wir uns dafür entschieden haben.
#+CAPTION: Variantenbewertung Ergebnis
#+ATTR_LATEX: :align |>{\columncolor[HTML]{EFEFEF}}p{4.5cm}|r| :placement [H]
#+ATTR_LATEX: :align |>{\columncolor[HTML]{EFEFEF}}p{4.5cm}|r|
#+NAME: tab:result
|------------------------------------+-----------------------------------------------|
| *Variante*\cellcolor[HTML]{C0C0C0} | *Erreichte Punktzahl*\cellcolor[HTML]{C0C0C0} |
@ -542,109 +522,11 @@ auch, weshalb wir uns dafür entschieden haben.
| ASP.NET und SQL Server | 141 |
| PHP und MySQL | 161 |
| Django und MariaDB | 196 |
|------------------------------------+-----------------------------------------------|
#+LATEX:\newpage
#+LATEX:\begin{landscape}
** Zeitplanung
** Architektur vorbereiten
** Arbeitspakete definieren
In der Tabelle:([[tab:time]]) ist die Zeitplanung für das Projekt zu
sehen. Die einzelnen Phasen wurden dabei gegenüber ihren Subtasks hervorgehoben.
#+CAPTION: Variantenbewertung Ergebnis
#+NAME: tab:time
#+ATTR_LATEX: :environment longtable :align |r|l|l|l|r|r|
|------------+----------------------------------------------------+------------+------------+------------+------------|
| <10> | | <10> | <10> | <10> | <10> |
| *ID*\cellcolor[HTML]{C0C0C0} | *Subject*\cellcolor[HTML]{C0C0C0} | *Type*\cellcolor[HTML]{C0C0C0} | *Status*\cellcolor[HTML]{C0C0C0} | *Estimated time*\cellcolor[HTML]{C0C0C0} | *Spent time*\cellcolor[HTML]{C0C0C0} |
|------------+----------------------------------------------------+------------+------------+------------+------------|
| *201* | *Projektanalyse und Planung* | *Phase* | *Closed* | | |
| 202 | Projektziele | Task | Closed | 1 | 0.5 |
| 203 | Vision | Task | Closed | 1 | 0.5 |
| 204 | SWOT-Analyse | Task | Closed | 3 | 0.5 |
| 205 | Umweltanalyse | Task | Closed | 3 | 1.5 |
| 206 | Risikomanagement | Task | Closed | 2 | 2.5 |
| 207 | Projektabgrenzung | Task | Closed | 2 | 2 |
| 259 | Meeting 1 | Milestone | Closed | 3 | 6 |
| 200 | Kickoff | Milestone | Closed | 4 | 8 |
| 301 | Meeting 2 | Milestone | Closed | 3 | 3 |
| 306 | Meeting 3 | Milestone | Closed | 1.5 | 3 |
| 313 | Meeting 4 | Milestone | Closed | 1 | 1 |
| 314 | Meeting 5 | Milestone | Closed | 1 | 1 |
| *208* | *Projektmanagement* | *Phase* | *Closed* | | |
| 218 | Architektur vorbereiten | Phase | Closed | | |
| 219 | Architektur Grafik | Task | Rejected | 6 | 0 |
| 220 | Use Case Grafiken | Task | Closed | 6 | 3 |
| 221 | User Stories | Task | Closed | 1 | 1 |
| 310 | Use Case Beschreibungen | Task | Closed | 10 | 9 |
| 254 | Test Cases benennen | Task | Closed | 10 | 10 |
| 222 | Organigramm | Task | Closed | 0.5 | 0.5 |
| 223 | Projektstrukturplan | Task | Closed | 1.5 | 1.5 |
| 224 | Arbeitspakete definieren | Task | Closed | 4 | 1 |
| *225* | *Datenbank* | *Phase* | *Closed* | | |
| 226 | Anforderungsanalyse | Task | Closed | 0.5 | 0 |
| 227 | Relationen Model | Task | Closed | 2 | 0.5 |
| 228 | Relationen Diagramm | Task | Closed | 4 | 5.25 |
| 229 | SQL Create DB | Task | Closed | 0.5 | 0.5 |
| 230 | SQL Insert Testdaten | Task | Closed | 10 | 7 |
| 231 | SQL Restriktionen erarbeiten | Task | Rejected | 0.5 | 0.1 |
| 232 | SQL Views erstellen | Task | Rejected | 2 | 0.1 |
| 233 | SQL Prozeduren und Funktionen erarbeiten | Task | Rejected | 2 | 0.1 |
| 304 | SQL Create Tables | Task | Rejected | 2 | 0.1 |
| *234* | *Benutzerinterface* | *Phase* | *Closed* | | |
| 235 | Mockup skizzieren | Task | Closed | 1 | 1 |
| *236* | *Frontend* *Umsetzung* | *Phase* | *Closed* | | |
| 237 | Login | Task | Closed | 0.5 | 2.75 |
| 315 | BUG: Eine zu lange Strassenummer wirf einen Fehler | Task | Closed | 0.5 | 0.25 |
| 238 | Artikel | Task | Closed | | 0.25 |
| 312 | BUG, Preise können negativ sein. | Task | Closed | | 0.25 |
| 239 | Artikelliste | Task | Closed | 5 | 5 |
| 240 | Warenkorb | Task | Closed | 5 | 12 |
| 241 | Checkout | Task | Closed | 5 | 5 |
| *242* | *Backend* *Umsetzung* | *Phase* | *Closed* | | |
| 243 | Login | Task | Closed | 5 | 5 |
| 244 | Artikel | Task | Closed | 5 | 1 |
| 247 | Artikelliste | Task | Closed | 2.5 | 0.5 |
| 302 | Artikel Erstellung | Task | Closed | 2.5 | 0.5 |
| 245 | Kategorien | Task | Closed | 5 | 1 |
| 248 | Kategorie Liste | Task | Closed | 2.5 | 0.5 |
| 303 | Kategorie erstellen | Task | Closed | 2.5 | 0.5 |
| 246 | Artikel Attributte | Task | Closed | 4 | 1.5 |
| 249 | Atributt Liste | Task | Rejected | 1 | 0 |
| 305 | Bilder hochladen | Task | Closed | 3 | 1.5 |
| 250 | Kunden Liste | Task | Closed | 1 | 0.5 |
| 308 | Models | Task | Closed | 3 | 5 |
| 309 | Währungskurse | Task | Closed | 5 | 18 |
| *252* | *Testing* | *Phase* | *Closed* | | |
| 255 | Test Cases Durchführung | Task | Closed | 10 | 10 |
| 257 | Dokumentations Styling | Task | Closed | 2 | 2.5 |
| 258 | Präsentation | Milestone | In progress | 2 | 0 |
| 263 | Vorprojekt | Task | Closed | 28.25 | 35.5 |
| *209* | *Tools* *vorbereiten* | *Phase* | *Closed* | | |
| 210 | GIT-Workspace | Task | Closed | 0.5 | 0.5 |
| 211 | Development Container | Task | Closed | 2 | 7.25 |
| 261 | Domain reservieren | Task | Closed | 0.25 | 0.25 |
| 262 | Produktions Server aufsetzen | Task | Closed | 2 | 4 |
| *212* | *Technologien* *abklären* | *Phase* | *Closed* | | |
| 213 | C# | Task | Closed | 1 | 1 |
| 214 | Django | Task | Closed | 5 | 5 |
| 215 | MariaDB | Task | Closed | 0.5 | 0.5 |
| 216 | SQL Server | Task | Closed | 1 | 1 |
| 217 | Laravel | Task | Closed | 5 | 5 |
| 316 | MySQL | Task | Closed | 1 | 1 |
| 264 | Architektur Tests | Task | Closed | 6 | 6 |
| 307 | Machbarkeitsanalyse | Task | Closed | 2 | 2 |
| 251 | Varianten Erarbeiten | Task | Closed | 2 | 2 |
| 265 | Abgabetermin | Milestone | Scheduled | 0.5 | 0 |
| 266 | Zwischenbericht ablieferen | Task | Closed | 0.5 | 0 |
|------------+----------------------------------------------------+------------+------------+------------+------------|
| *Total* | | | | 218.50 | 214.65 |
|------------+----------------------------------------------------+------------+------------+------------+------------|
#+TBLFM: @>$5=vsum(@3..@-1);%.2f
#+TBLFM: @>$6=vsum(@3..@-1);%.2f
#+LATEX:\end{landscape}
* Umsetzung
* TODO Umsetzung
** Werkzeuge
Während dem Erstellen dieser Arbeit wurde eine Vielzahl an Werkzeugen
@ -834,11 +716,11 @@ LaTeX ist freie Software unter der LaTeX Project Public License.
Die Grafiken in diesem Dokument wurden hauptsächlich mit dem Vektor
Grafik Editor Inkscape\footcite{inkscape} erstellt. Inkscape ist freie
Software unter der GNU Public License v3. Für das Entity Relation
Diagramm in [[Models]] haben wir jedoch Dia\footcite{dia} verwendet. Dia
Diagramm in [[Modells]] haben wir jedoch Dia\footcite{dia} verwendet. Dia
ist freie Software unter der GNU Public License v2.
Die Klassendiagramme haben wir mit der Django Erweiterung
"Django-Extensions"\footcite{djangoextensions} erstellt.
"Django-Extensions"\footcite{django_extensions} erstellt.
Django-Extensions ist freie Software unter der MIT Lizenz.
** Spezifikation
@ -939,17 +821,17 @@ ausprogrammiert haben. Die gesamte Liste an Use Cases sieht wie folgt
aus, die Use Cases mit den Nummern wurden dabei im Detail ausgearbeitet:
#+LATEX: {\footnotesize
| - [[tab:browse_article][1.0 Artikel durchstöbern]] | - Kategorie erfassen (Admin Funktion) |
| - [[tab:registration][2.0 Registration]] | - Kategorie ändern (Admin Funktion) |
| - [[tab:login][2.1 User Login]] | - Kategorie löschen (Admin Funktion) |
| - [[*Artikel durchst%C3%B6bern][1.0 Artikel durchstöbern]] | - Kategorie erfassen (Admin Funktion) |
| - [[Registration][2.0 Registration]] | - Kategorie ändern (Admin Funktion) |
| - [[User Login][2.1 User Login]] | - Kategorie löschen (Admin Funktion) |
| - User Profil ansehen | - Bild hochladen (Admin Funktion) |
| - [[tab:cart][3.0 Artikel in Warenkorb legen]] | - Bild ändern (Admin Funktion) |
| - [[tab:currency][3.1 Währung ändern]] | - Bild löschen (Admin Funktion) |
| - [[Artikel in Warenkorb legen][3.0 Artikel in Warenkorb legen]] | - Bild ändern (Admin Funktion) |
| - [[W%C3%A4hrung %C3%A4ndern][3.1 Währung ändern]] | - Bild löschen (Admin Funktion) |
| - Währung aktualisieren (Admin Funktion) | - Bestellung erfassen (Admin Funktion) |
| - [[tab:checkout][3.2 Checkout]] | - [[tab:change_order][7.0 Bestellung ändern/korrigieren (Admin Funktion)]] |
| - [[tab:password][4.0 User Passwort ändern (Admin Funktion)]] | - Bestellung löschen (Admin Funktion) |
| - [[tab:create_article][5.0 Artikel erfassen (Admin Funktion)]] | - [[tab:max_pictures][6.0 max_pictures Option anpassen (Admin Funktion)]] |
| - [[tab:create_article][5.1 Artikel ändern (Admin Funktion)]] | - max_pictures Option deaktivieren (Admin Funktion) |
| - [[Checkout][3.2 Checkout]] | - [[Bestellung %C3%A4ndern/korrigieren][7.0 Bestellung ändern/korrigieren (Admin Funktion)]] |
| - [[User Passwort %C3%A4ndern][4.0 User Passwort ändern (Admin Funktion)]] | - Bestellung löschen (Admin Funktion) |
| - [[Artikel erfassen][5.0 Artikel erfassen (Admin Funktion)]] | - [[max_pictures Option anpassen][6.0 max_pictures Option anpassen (Admin Funktion)]] |
| - [[Artikel %C3%A4ndern][5.1 Artikel ändern (Admin Funktion)]] | - max_pictures Option deaktivieren (Admin Funktion) |
| - Artikel löschen (Admin Funktion) | - User erfassen (Admin Funktion) |
| - Materialbestellung erfassen (Admin Funktion) | - User/Personen Daten ändern (Admin Funktion) |
| - Materialbestellung ändern/korrigieren (Admin Funktion) | - User löschen (Admin Funktion) |
@ -959,8 +841,7 @@ aus, die Use Cases mit den Nummern wurden dabei im Detail ausgearbeitet:
| - Stadt löschen (Admin Funktion) | |
#+LATEX:}
#+latex:\newpage
*1.0 Artikel durchstöbern*
***** Artikel durchstöbern
#+LATEX:{\footnotesize
#+CAPTION: Use 1.0 Artikel durchstöbern
@ -1000,7 +881,7 @@ aus, die Use Cases mit den Nummern wurden dabei im Detail ausgearbeitet:
|---------------------+--------------------------------|
#+LATEX:}
*2.0 Registration*
***** Registration
#+LATEX:{\footnotesize
#+CAPTION: Use Case 2.0 Registration
@ -1046,7 +927,7 @@ aus, die Use Cases mit den Nummern wurden dabei im Detail ausgearbeitet:
|---------------------+--------------------------------|
#+LATEX:}
*2.1 User Login*
***** User Login
#+LATEX:{\footnotesize
#+CAPTION: Use Case 2.1 User Login
@ -1090,7 +971,7 @@ aus, die Use Cases mit den Nummern wurden dabei im Detail ausgearbeitet:
|---------------------+--------------------------------|
#+LATEX:}
*3.0 Artikel in Warenkorb legen*
***** Artikel in Warenkorb legen
#+LATEX:{\footnotesize
#+CAPTION: Use Case 3.0 Artikel in Warenkorb legen
@ -1132,7 +1013,7 @@ aus, die Use Cases mit den Nummern wurden dabei im Detail ausgearbeitet:
|---------------------+--------------------------------|
#+LATEX:}
*3.1 Währung ändern*
***** Währung ändern
#+LATEX:{\footnotesize
#+CAPTION: Use Case 3.1 Währung ändern
@ -1171,7 +1052,7 @@ aus, die Use Cases mit den Nummern wurden dabei im Detail ausgearbeitet:
|---------------------+--------------------------------|
#+LATEX:}
*3.2 Checkout*
***** Checkout
#+LATEX:{\footnotesize
#+CAPTION: Use Case 3.2 Checkout
@ -1217,7 +1098,7 @@ aus, die Use Cases mit den Nummern wurden dabei im Detail ausgearbeitet:
|---------------------+--------------------------------|
#+LATEX:}
*4.0 User Passwort ändern*
***** User Passwort ändern
#+LATEX:{\footnotesize
#+CAPTION: 4.0 User Passwort ändern
@ -1267,7 +1148,7 @@ aus, die Use Cases mit den Nummern wurden dabei im Detail ausgearbeitet:
|---------------------+--------------------------------|
#+LATEX:}
*5.0 Artikel erfassen*
***** Artikel erfassen
#+LATEX:{\footnotesize
#+CAPTION: 5.0 Artikel erfassen
@ -1316,7 +1197,7 @@ aus, die Use Cases mit den Nummern wurden dabei im Detail ausgearbeitet:
|---------------------+--------------------------------|
#+LATEX:}
*5.1 Artikel ändern*
***** Artikel ändern
#+LATEX:{\footnotesize
#+CAPTION: 5.1 Artikel ändern
@ -1358,7 +1239,7 @@ aus, die Use Cases mit den Nummern wurden dabei im Detail ausgearbeitet:
|---------------------+--------------------------------|
#+LATEX:}
*6.0 max_pictures Option anpassen*
***** max_pictures Option anpassen
#+LATEX:{\footnotesize
#+CAPTION: Use Case 6.0 max_pictures Option anpassen
@ -1406,7 +1287,7 @@ aus, die Use Cases mit den Nummern wurden dabei im Detail ausgearbeitet:
|---------------------+--------------------------------|
#+LATEX:}
*7.0 Bestellung ändern/korrigieren*
***** Bestellung ändern/korrigieren
#+LATEX:{\footnotesize
#+CAPTION: Use Case 7.0 Bestellung ändern/korrigieren
@ -1752,14 +1633,6 @@ User speichern. Man sollte im Profil jedoch nur Daten speichern, welche
nicht sicherheitsrelevant sind. Der Nachteil dieser Variante ist, dass
die Datenbank mit zusätzlichen Anfragen belastet werden kann.
Wir haben uns hier auch dazu entschieden nur Einkäufe nach erfolgter
Registrierung zu erlauben. Dies einerseits weil wir sowieso bereits
eine "One-to-One" Beziehung zwischen einem User und einer Person
ermöglichen. Zum anderen da es auch aus Sicht der Shop Betreiber,
Kunden die bereits einen Account haben kommen öfters wieder, wie auch
aus Sicht der Kunden, ein Account kann einem viele Vorteile bringen
wie etwa einfachere Garantieabwicklung oder Bestellungsübersichten,
absolut Sinn macht.
#+ATTR_LATEX: :width 9cm :placement [H]
#+CAPTION: Klassenmodell für Personen
#+NAME: fig:person
@ -1816,9 +1689,8 @@ vereinfacht in 3 Bereiche:
Submodule wie Categories oder Warenkorb beinhaltet.
2. Ein Backend, welches zum Bearbeiten/Erstellen von Produkten dient.
3. Currencies, die täglich abgeholt werden
#+LATEX:\newpage
** Testing
** TODO Testing
Um die Funktionalität des Webshops sicherzustellen, haben wir die
Applikation kontinuierlich gemäss den Testfällen unter [[Testfälle]]
@ -1849,7 +1721,7 @@ dazugehörige Funktionen korrekt funktionieren.
#+LATEX:\newpage
#+LATEX:\begin{landscape}
*** Testfälle
*** NEXT Testfälle
Alle Testfälle werden von der Index Seite aus gestartet.
Dies wird in den Test Cases nicht noch einmal explizit erwähnt. Die
@ -1885,9 +1757,9 @@ entdeckt.
|----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------|
| *TC-10* | Währung ändern | - | 1. Auf das Dropdown "Currencies" klicken.\newline 2. Den Eintrag "EUR" auswählen.\newline 3. Auf den Button "Select" klicken. | - | Die Artikel Preise werden in Euro angezeigt. | Die Index Seite wird angezeigt. | Erfolgreich durchgeführt 19.02.2018 I.H. |
|----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------|
| *TC-11* | Checkout | TC-09\newline ausgeführt | 1. Auf den Button "CHECKOUT" klicken.\newline 2. Die TOS annehmen.\newline 3. Auf den "Order" Button klicken. | - | Die Bestellung wird gespeichert. | Die Bestellbestätigung wird angezeigt. | Erfolgreich durchgeführt 19.02.2018 I.H. |
| *TC-11* | Checkout | TC-09\newline ausgeführt | | | | | Erfolgreich durchgeführt 19.02.2018 I.H. |
|----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------|
| *TC-12* | Checkout | TC-09\newline ausgeführt | 1. Auf den Button "CHECKOUT" klicken.\newline 2. Auf den "Cancel" Button klicken. | - | Die Bestellung wird nicht ausgeführt. | Der Warenkorb wird wieder angezeigt. | Erfolgreich durchgeführt 19.02.2018 I.H. |
| *TC-12* | Checkout | TC-09\newline ausgeführt | | | | | Erfolgreich durchgeführt 19.02.2018 I.H. |
|----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------|
| *TC-13* | Artikel erfassen | - | 1. Die URL http://localhost:8000/admin aufrufen.\newline 2. Userdaten eingeben.\newline 3. Neben "Articles" auf "+ Add" klicken.\newline 4. Artikel Daten eingeben.\newline 5. Auf den "SAVE" Button klicken. | Username: admin\newline Password: password\newline Name: Test Artikel\newline Description: Test Description\newline Stock: 10\newline Status: active\newline Price in chf: 23 | Der Artikel wird in der Datenbank gespeichert. | Die Artikelliste wird mit dem Artikel "Test Artikel" angezeigt. | Erfolgreich durchgeführt 19.02.2018 A.Z. |
|----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------|
@ -1907,59 +1779,9 @@ entdeckt.
* Fazit
** Projektmanagement
Eine sorgfälltige Planung ist wichtig um ein Projekt erfolgreich zum
Abschluss zu bringen. Insbesondere wenn es im Projekt gewisse
Unbekannte gibt hilft einem eine gute Planung das Ziel nicht aus den
Augen zu verlieren.
Eine gute Planung ist auch für die Kommunikation im Team wichtig damit
jeder Projektmitarbeiter den aktuellen Stand kennt, weiss was geplannt
ist und welche Schritte als nächstes gemacht werden müssen.
Eine gutes Beispiel für diese Kommunikation ist ein Missverständiss dass
Zwischen Andreas und Ivan entstand als die Positionen in der Bestellung
das erste mal abgefragt wurden. Ivan hatte den preis in CHF pro Stück abgelegt
und Andreas hatte die Summe der Stückzahl mal Preis in CHF erwaret.
Das fürte zu verwirrung als die Positionen plötzlich x-fach teurer Angezeigt
wurden als sie Gekauft wurden.
** Umsetzung
Ein Framework ist nahezu immer eine komplexe Angelegenheit und braucht
viel Einarbeitungszeit wenn man sich zuvor noch nie damit beschäftigt
hat. Dabei macht es nicht einmal einen grossen Unterschied ob man die
jeweilige Programmiersprache bereits kennt. Das Framework bringt in
der Regel viele eigene Wege und Lösungen mit um Probleme anzugehen.
Wir haben jedoch festgestellt das eine Framework eine grosse Hilfe
sein kann, bei Aufgaben welche immer wieder kommen. Zusätzlich
empfanden wir es als sehr angenehm uns nicht gross mit der Datenbank
auseinander setzen zu müssen. Leider kann ein Framework das
Sprachenchaos bei einer Webanwendung nur bedingt vereinfachen da man
am Schluss dann doch immer mindestens drei Sprachen einsetzt.
** Gelerntes
Wir haben bei dieser Case Study einmal mehr gemerkt das eine gute
Vorbereitung und Planung in einem Projekt von grosser Wichtigkeit ist.
Spezifikationen sollten früh ausgearbeitet werden und auch konstant
nachgeführt werden damit man im Team immer auf dem gleichen
Wissensstand ist und von der gleichen Sache redet.
Im Bezug auf die Umsetzung haben wir die Vorzüge eines Systems wie
Vagrant schätzen gelernt welches jedem Entwickler die gleiche Umgebung
zur Verfügung stellt. Somit hatten wir nahezu nie das Problem, dass
ein Code Update bei einem Entwickler nicht funktionierte und wenn es
mal auftrat war es dann jeweils sehr schnell behoben.
Zusätzlich haben wir gelernt das ein Framework zwar die Arbeit enorm
vereinfachen kann aber durchaus auch seine Tücken hat und zuerst
einmal verstanden werden muss bevor man es korrekt einsetzen kann.
Insgesamt war es eine sehr interessante Case Study bei welcher wir zum
ersten Mal das Gefühl hatten das wir über eine genügende Wissensbasis
verfügten um das Projekt in Angriff zu nehmen.
* TODO samples [to be deleted] :noexport:
*** Subsubsection

0
docs/doku.synctex(busy) Normal file
View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

View File

@ -1 +0,0 @@
<mxfile userAgent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:58.0) Gecko/20100101 Firefox/58.0" version="8.4.6" editor="www.draw.io" type="device"><diagram id="08cd9217-de5f-1429-298d-04c22af63481" name="Page-1">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</diagram></mxfile>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 251 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 598 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

View File

@ -1 +0,0 @@
<mxfile userAgent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:58.0) Gecko/20100101 Firefox/58.0" version="8.4.0" editor="www.draw.io" type="device"><diagram id="283ea62a-d2dd-6ffc-9a9e-c1de98e88eac" name="Page-1">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</diagram></mxfile>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 374 KiB

View File

@ -1,153 +0,0 @@
#+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
- Webshop erstellen
- Währungsumrechnung CHF zu ...
- Freie Software in Bezug auf Open-Source Code.
** 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]]
* Varianten
** ASP.NET (C#) und SQL Server
[[file:pictures/csharp.png]]
** Laravel (PHP) 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 und Lernfaktor
** Vergleich
|------------------------+-------------------------------|
| *Variante* | *Erreichte Punktzahl von 235* |
|------------------------+-------------------------------|
| ASP.NET und SQL Server | 141 |
| Laravel und MySQL | 161 |
| Django und MariaDB | 196 |
|------------------------+-------------------------------|
* Kosten
** Tools
- Ausgaben während der Case-Study: 0.00 CHF
- 100% freie Software
- "Let's Encrypt" für SSL
- "freenom.com" für Domain
** 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 problemlos in andere Applikationen eingebunden werden können.
- Die Quelle der Währungen ist die Schweizerische Nationalbank mit der URL:
https://www.snb.ch
https://www.snb.ch/selector/de/mmr/exfeed/rss
#+ATTR_HTML: :width 80%
[[file:pictures/currencies-rss-reader.png]]
** Currencies - Quelle
[[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 90%
[[file:pictures/Server-Architecture.png]]
** Programmierung
#+ATTR_HTML: :width 60%
[[file:pictures/form.png]]
#+BEGIN_SRC python
amount_form = CartForm(
initial={'amount_form': cart_position.amount}
)
#+END_SRC
* Fazit
- Trotz Model View Controll, SQL unerlässlich.
- Vagrant (up, suspend, provision, destroy)
- Git
- Python/Django, JS brauchts trotzdem.
** Besten Dank für die Aufmerksahmkeit.
Ivan & Andreas