Nella mia app, molti appuntamenti possono essere prenotati per le attività. Ogni attività ha molti pacchetti di prezzo con un prezzo e una quantità.
Quando mostro il carrello, ho bisogno di capire quale combinazione di pacchetti usare per ottenere all'utente i prezzi migliori e permettere che tutti gli appuntamenti siano contabilizzati.
Non esiste sempre un pacchetto quantità 1.
C'è un modello comune da applicare a questo?
Ecco dove sono arrivato prima che mi rendessi conto di quanto sarebbe stato difficile:
cost = 0
i = appointments.count
activity.packages.order(:quantity => :asc).each do |package|
if i >= package.quantity && i.modulo(package.quantity) == 0
cost = cost + (package.price * i/package.quantity )
i = i - i/package.quantity
end
end
if i > 0
raise "error: packages do not cover number of children."
end
Questo è in ruby (rail).
Quindi il problema che non ho visto fino a quando ho scritto quanto sopra è, e se ci sono 8 appuntamenti e pacchetti per 4 & 5 - userà il pacchetto 5, quindi l'ultimo 3 non entrerà in un pacchetto 4 e fallirà.
MODIFICA: maggiori dettagli
Quindi la struttura è
activities has_many packages
packages:
quantity: integer
price: float
Quindi un pacchetto definisce un prezzo per un gruppo di appuntamenti per un'attività.
Quindi, ad esempio, le lezioni di vela sono $ 500 per 5 o $ 430 per 4.
Se l'utente ordina 8 lezioni di vela, l'app deve capire che dovrebbe utilizzare due dei pacchetti quantità 4 = $ 860
Se l'utente ordina 9 lezioni di vela, l'app dovrebbe funzionare hanno bisogno di 1 pacchetto di Quantità 5 e un pacchetto di quantità 4. etc