thomson89
25.07.2010, 11:16:46
Witam!
Potrzebuję dodać do skryptu obsługę promocji. Jest tylko jedno ale. Promocja ma różne typy i musi być wdrażana na różnych etapach. A dodatkowo wyświetlana przy każdym produkcie.
Promocji będą 4 typy: kwota, powyżej wartości; zwykły odejmowany procent; inna niższa cena; ilość, powyżej wartości. Każdy typ, może być przyporządkowany do iluś set produktów, a w koszyku może być np. 10 produktów z promocji i 2 bez. A w tych 10 ileś różnych typów.
Jak więc policzyć ostateczną wartość zamówienia, nie stwarzając sobie zbyt wielu komplikacji?
Spawnm
25.07.2010, 11:21:05
może dopisać że promocje nie mogą się łączyć
thomson89
25.07.2010, 11:25:28
Na pewno jest to jakiś pomysł, z plusem dla oszczędności.
Spawnm
25.07.2010, 12:24:22
Zobacz że np. helion tak robi

Albo promocja dnia albo kod albo koszyk.
Crozin
25.07.2010, 13:25:07
Jeżeli piszesz kod w miarę przyszłościowo to powinieneś uwzględnić:
1) Promocje mogą się łączyć - nie widzę problemu z połączeniem następujących promocji: przy zakupie 5 produktów -10%, a jeżeli mieszkasz np. w Warszawie (bo tam jest magazyn sklepu) to nie płacisz nic za przesyłkę
2) Często na produkt może być nałożona wielokrotnie ta sama (ten sam typ) promocja: np.: przy zakupie 5 sztuk -10%, 10 -15%, 20 -20%
3) Niektóre promocje są przyporządkowane pojedynczemu produktowi, niektóre grupie produktów, a niektóre wszystkim (chodzi o zawartość koszyka)
4) Niektóre promocje wymagają reakcji użytkownika (np. wprowadzenie kodu promocyjnego)
Jeżeli zależy Ci na tym by działało i olać to to możesz w sumie zignorować część tego postu.
Od strony kodu (to tylko takie przemyślenia na szybko - temat wcale nie jest prosty, więc zastanów się nad nim porządnie, sprawdź czy się sprawdzi we wszystkich przewidywanych sytuacjach przed napisaniem pierwszej linii kodu):
1) Promocje mogłyby nasłuchiwać różnych "akcji" w systemie, takich jak: dodanie produktu do koszyka czy wyświetlanie koszyka i na tej podstawie odpowiednio modyfikować sam koszyk.
2) Koszyk sam w sobie na pewno nie może ograniczyć się tylko do jakiejś tablicy produktów, ilości i ceny pojedynczej sztuki.
3) Promocje to głównie kod PHP, w bazie danych mógłbyś się ograniczyć co najwyżej do przechowywania informacji o tym jakie promocje są przydzielone do danego produktu (osobna tabela z kluczem obcym na products.id) + jakaś konfiguracja takiej promocji. Taka konfiguracja mogłaby być nawet w postaci zserializowanej tablicy czy czegoś takiego.