2016-04-19 13 views
0

Angenommen, ich habe 3 verschiedene Ladepläne für ein Zimmer für drei Arten von Mitgliedschaften:Schreiben Konfigurierbare Schritt Funktionen

Normale

0 - 1 in Zeiten: 10 $ pro Stunde

1 bis 5 Stunden : $ 9 pro Stunde

5-12 Stunden: 8 $ pro Stunde

Mitglied

0 - 1 Stunde: 8 $ pro Stunde

1 bis 5 Stunden: $ 7 pro Stunde

5-12 Stunden: 6 pro Stunde

$ Premium-

0 - 1 Stunden: $ 4 pro Stunde

1 - 5 Stunden: $ 3 pro Stunde

5 - 12 Stunden: $ 2 pro Stunde

Dies sind Gebühren, die am Frontend konfiguriert werden können.

Was sind Best Practices, um sie dynamisch zu speichern und die Berechnung durchzuführen?

Ich habe eine Idee, aber ich glaube, es gibt besser da draußen:

SQL Tabelle: membership_rates

membership,min_hr,max_hr,rate 
normal,0,1,10 
normal,1,5,9 
normal,5,12,8 
member,0,1,8 
member,1,5,7 
member,5,12,6 
premium,0,1,4 
premium,1,5,3 
premium,5,12,2   

Dann in dem Pseudo-Code,

find out membership type 
query the rates for the membership type in an array 

while rent_amt is larger than max_hr of the query: 
    rate = selected_rate from the bracket 
    find next smaller rate 


return the rate * the no. of hours used 

Ein Beispiel in Python (Django) ist:

amt_used = rent.amt_used 
membership = member.membership 
rates = Rates.objects.filter(membership=membership).order_by(max_rate) 
rate = 0 
while amt_used > rates.max_hr: 
    rate = rates.rate 

return amt_used * rate 
+0

Was meinen Sie mit "dynamisch gespeichert"? Diese Werte können sich oft ändern? – vmonteco

+0

ja die Werte können geändert werden. – bryansis2010

Antwort

0

Ich schlage vor, Sie Ihre Werte in einer Variablen zu setzen:

CHARGES_SCHEDULES = {"normal" : {0 : {"time" : 1, 
             "per_hour" : 10}, 
           {1 : {"time" : 5, 
             "per_hour" : 9}}, 
           {5 : {"time" : 12, 
             "per_hour" : 8}},}, 
        "member" : {0 : {"time" : 1, 
             "per_hour" : 8}, 
           {1 : {"time" : 5, 
             "per_hour" : 7}}, 
           {5 : {"time" : 12, 
             "per_hour" : 6}},}, 
        "premium" : {0 : {"time" : 1, 
             "per_hour" : 4}, 
           {1 : {"time" : 5, 
             "per_hour" : 3}}, 
           {5 : {"time" : 12, 
             "per_hour" : 2}},}} 

(Sie können die variable Struktur ändern, natürlich. Früher habe ich hier Wörterbücher, aber Sie können Tupel, Listen oder etwas verwenden, die besser auf Ihre Bedürfnisse anpassen können.)

Dann können Sie entweder direkt in Ihrem settings.py oder in einer anderen Python-Datei setzen (charges.py zum Beispiel) und importieren Sie es in Ihre settings.py.

1. Lösung 1:

es in Ihrem Einstellungen Setzen Sie direkt.py und dann einfach Ihre Werte in Ihren Python-Dateien importieren, wenn nötig:

anyfile.py:

from django.conf import settings 

print(settings.CHARGES_SCHEDULES["member"][1]["time"]) 

2. Lösung 2:

Legen Sie es in einer separaten Python-Datei (zB: charges.py) und importieren Sie diese Datei in Ihre settings.py:

settings.py:

from charges import CHARGES_SCHEDULES 

und dann wie zuvor in der anderen Python-Dateien importieren (vgl Lösung 1).