Dobrá programátorská hádanka

Možná to ani programátorská hádanka není. Možná to není ani klasická anekdota. Ale kdo ví.

Mám elektronický obchod. Prodávám zboží. Respektive, já jej kompletně celý napsal a klient přes něj prodává zboží, abych nemystifikoval. Každý zákazník, který se registruje, získá slevu na všechny další nákupy 2 %. 99 % výrobků bude mít o 2 % levnější. Nakoupit může i bez registrace a bez slevy.

Slevy jsou ale ještě vychytanější – nakupuje-li už po páté v řadě a součet předchozích čtyř objednávek přesáhl třeba 10 000 Kč, pak získá na aktuální nákup slevu 20 % (a podobně).

To je také ještě představitelné.

U každého produktu je uložena „běžná cena“ a „akční cena“. A já každému zákazníkovi jednoduchým výpočtem zobrazuji, kolik % při nákupu u nás ušetří. Po Vánocích totiž byl celý sortiment o 10 až 20 % plošně zlevněn (dle výrobce zboží).

Takže příklad: produkt X stál 400 Kč („běžná cena“). Po plošné slevě 10 % stojí nyní 360 Kč („akční cena“). Výpočet slevy: (1 – 360/400)*100 = 10 %. Proč to počítám? Protože v současnosti e-shop neumí držet informace o slevách výrobků různých výrobců, takže sice vím, že zboží je levnější o buď 10 nebo 20 %, ale nevím které. Přecenění proběhlo manuálním dotazem do databáze. Proto si musím aktuální slevu z obou cen vždy vypočítat.

Takže máme produkt X a jeho slevu 10 %, koncová cena je nyní 360 Kč. A nyní na scénu přichází zákazník nakupující již popáté a v předešlých objednávkách utratil tolik peněz, že se na jeho aktuální nákup vztahuje bonusová sleva 10 %.

A co se stane? Zobrazím mu produkt X, od jeho ceny 360 Kč odečtu bonusovou slevu 10 % (36 Kč) a konečná cena pro tohoto zákazníka je 324 Kč. Ten se má … jenže … ono to tak úplně nesedí. Zákazník totiž ví, že produkt X se po Vánocích o 10 % zlevnil. A on má nyní ještě dalších 10 % bonusovou slevu. Takže produkt by měl být levnější o 20 %. A náš výpočet (1 – 324/400)*100 vrátí podezřelých 19 %. Ceny se totiž liší o 19, ne o 20 %.

Ono je to správně, samozřejmě. Oněch bonusových 10% je sleva z 360 Kč na 324 Kč. Není to 10% z původních 400 Kč, protože tolik ten produkt nyní nestojí.

A pokud zjistím původní slevu produktu 10 % a k tomu jen přičtu bonusových 10 % a mám slevu 20 %, tak je vypočtená cena stejně stále 324 Kč, přičemž při slevě 20 % to má být 320 Kč :) Krásné odpoledne… no jsem v tom zamotaný až běda.

A teď jak z toho ven… :)

před devíti roky | Programování Ze života | 9 komentářů

Komentáře

1 | endlife | před devíti roky

Nu, a je ti jasné, jestli chce slevovat 2× 10% nebo 20%? Tzn. obchod říká, že poskytuje 20% slevu, nebo že všechno šlo o 10% dolů a věrný zákazník dostává dalších 10% z nové ceny?

Když jsem spravoval systém pro provoz DVD půjčoven, řetězily se tam hodně často dvě a více slev (Happy hour + happy day + sleva na daném DVD + sleva pro věrného zákazníka + sleva za větší množství výpůjček zároveň apod.). Jestli to řešit sčítáním slevy nebo postupným odčítáním jsme se vždycky domlouvali s klientem…

reagovat

2 | juneau | před devíti roky

Jojo, uvědomuju si, že je to spíš otázka principu než výpočtu :)

Jen se vžívám do role zákazníka, který si nebude s kalkulačkou ověřovat, že těch výsledných 19 % je stejných jako původních 2×10 % :)

reagovat

3 | endlife | před devíti roky

Jasně, nejhorší bylo vždycky, když přišel zákazník, že něco nesedí, a obsluha nevěděla, esli je to bug nebo feature. Takže většinou jsem nafasoval mail zákazníka a vypisoval jsem se, jak že to funguje ;-)

reagovat

4 | BH | před devíti roky

A co kdybys mu nevypisoval slevu celkem, ale „akční sleva 10 %, Vaše sleva navíc 10 %“? Jako dvě oddělené položky.

reagovat

5 | juneau | před devíti roky

No … teoreticky jo, ale na takový slovní výpis to není právě zařízeno.

reagovat

6 | BH | před devíti roky

Tak jenom „10 % + 10 %“ :-)

reagovat

7 | juneau | před devíti roky

To by se tam vešlo. Ale „10 % + 10 %“ je pro každého zákazníka ve výsledku zase těch samých 20 % a přitom rozdíl cen je jen 19 % :)

reagovat

8 | jakub | před devíti roky

Princip spočívá v tom zobrazovat slevu 10% už zlevněného, navrhnul bych to takhle:

  • původní cena: 400 Kč
  • akční vánoční sleva 10%: 360 Kč
  • Vaše věrností sleva 10% z prodejní ceny pro běžného zákazníka 10%: 324 Kč

To snad pochopí každý…

reagovat

9 | juneau | před devíti roky

No to ano, to by měl pochopit každý, ale já mám tři buňky tabulky, kam se sotva vejdou 2 ceny a sleva, natož odstavec textu :)

Ale vyřeším to jinak, nějakým fikaným rozhraním pro správu slev, a pak je budu moct sčítat dohromady, což nyní nejde.

reagovat

Připojte váš komentář!

Můžete používat Texy! syntaxi.

* Hvězdičkou jsou označeny povinné informace.