Sziasztok!
Adott egy összetett feladat amivel kissé megragadtam, vagy beragadtam a saját elképzelésembe, így tőletek mint külső, jártas szemlélőktől kérek segítséget.
Létrehoztam 3 különböző user role-t: - mindhárom szinten más-más jogosultságokkal rendelkezik az oda tartozó user.
- kezdő
- haladó
- szakértő
(administrator + admin)
(Ill. ezen felül van még a regisztrált szint)
A feladat, hogy a felhasználókat egy bizonyos tevékenység (havi vásárlások) számához viszonyítva léptessük be/ki a szintekből. Ha kiesik egy szintből, legyen újra "regisztrált" felhasználó.
A kritériumok:
a.1:- 5 vásárlás esetén kezdő szintre léptetés --> 1 hónapos időtartamra.
a.2:- 10 vásárlás esetén haladó szintre léptetés --> 1 hónapos időtartamra.
a.3:- 15 vásárlás esetén szakértő szintre léptetés --> 1 hónapos időtartamra.
b.1: - Ezen dinamikus szint léptetések mellett a felhasználónak lehetősége legyen "SZINT" (kezdő|haladó|szakértő) vásárlásra is, ami szintén egy hónapra szól.
Az A+B lehetőségek működjenek párhuzamosan egymás mellett.
Ill. figyelnem kell azt is, hogy amennyiben az a lehetőségek valamelyikében elérte az adott szintet, a szint elérése óta mennyit vásárolt a szint lejárásának végéig, és ha ugyanannyit, mint az adott szint megkövetel, akkor megtartani azon a szinten, ha többet akkor magasabb szinte léptetni.
Illetve ha az 1 hónap alatt többet vásárolt szintén léptesse egy szinttel feljebb és a lejáratát ettől a szint lépéstől figyelje.
Attól tartok logikai ellentmondások is lehetnek a feladatban... Hiszen ha "szintet" vásárolt, nem kell a vásárlások száma szerint léptetni (De figyelni kell a számát 1 hónapig, hiszen ha lejár a "szint" valahova be kell sorolni (regisztrál|kezdő|haladó|szakértő).
Segítsetek kérlek tisztábban látni.
Üdv.:
V007
Hozzászólások
A szintjét mindenképpen vásárolja. Vagy egyszerre, soron kívül, vagy az előző havi vásárlásaival.
Azt kell csak figyelni, mikor jár le az egy hónap, és akkor emelni a pallost.
Technikailag mi lenne erre a legegyszerűbb módszer?
Én erre gondoltam:
1. egy custom field bevezetése ahol növelem a vásárlások darab számát. -> rules
2. egy custom field ahol tárolom az időpontot amikor elért egy szintet/vásárolt soron kívül egyet. -> rules
2.a ha lejárt a 30 nap, visszaléptetem egy 0. szintre -> rules.
2.b mivel lejárt az adott hónap az 1. pont beli mező értékét kinullázom.
3. egy rules bevezetése ami a megfelelő szintbe lépteti a felhasználót.
4. 2. pont
De ez az eset =(ha így jó) még mindig nem kezeli azt a szituációt, hogy ha egy felhasználó a megszerzett szint érvényességi ideje alatt tovább vásárol, de nem ér el új szintet. Ekkor a 2.b. pont szerint kinullázódnak a pontjai.
amielott lenullazod a 1. pont beli mezot, azelot beteszed a vasarlasok szamanak megfelolo csoprtba. szerintem.
Viszont ha nem éri el a minimumot akkor elveszti az addig gyűjtött pontjait, és nem tudom betenni a megfelelő csoportba.
Ez a feladat. Nem?
Ha nem éri el újra a pontokat, elveszti a szintet.
Igen: ha nem ér el újra annyi vásárlást mint amennyi kell, hogy szinten maradjon vagy feljebb lépjen akkor regisztrált szintre kell lépnie.
De tegyük fel, hogy jelenleg haladó szinten van 12 ponttal. Letelt az egy hónap, de a 12 pontból csak 10-et kellene elvennem hiszen 10 ponttól már haladó és 15-től szakértő, tehát a köztes pontokat nem kell elvennem.
Ez biztosan lekezel minden eshetőséget?
Csak amiket írtál. :)
Azzal is érdemes foglalkozni, hogy ha szintet vásárol, ne kerüljön alacsonyabb szintre, mint amit a vásárlásaival amúgy is "kiérdemelt".
A vastagon szedett rész kimaradt az első feltételből
"Vásárlás" az utolsó hónapban történt vásárlásainak száma
E szerint a logika szerint mi lesz 1 hónap után a Vásárlások számával? Kinullázódik?
Nem nullázódik ki soha semmi.
Mindig csak az utolsó hónap vásárlásait nézed.
Ha vásárolt, annak megfelelően kap "rangot", ha nem, akkor visszalép.
Mindegy, hogy régebben mennyit vásárolt. A régi vásárlások ettől még lekérdezhetőek maradnak, ha szükség lenne rásjuk valamiért.
Ezt rules-szal kellene megvalósítanom? Megmondom őszintén hozzá sem tudok kezdeni :(
Mivel "Drupal-ul" nem tudok, így a gyakorlati megvalósításban nem tudok segíteni, csak az elméletben. Sajnálom.
felmerülhet az a lehetőség, hogy a felfelé léptetéseket mindig on-air intézed a custom szabályaiddal a vásárlások alatt/után, míg a visszaléptetéseket elég csak napi egyszer vagy mondjuk óránként intéztetned. erre egy külön egyedi szabály ha adott időközönként lefut, az elég. a napi/óránkénti lefutást megoldhatod mondjuk az elysia_cron-nal (habár vannak bajok néha a modullal).
Van néhány kérdésem:
- A felhasználók fel léptetését egy rules-szal nem lehet megoldani ugye?
--> Tehát:
--- Minden szint léptetéshez külön-külön rule-t kell csinálnom.
--- Minden olyan esetre ahol soron kívül megveszi valaki a szintet külön rule-t kell csinálnom.
- Hogyan tudnám a szint elérésének dátumát elmenteni? Egy date típusú custom filed rules alóli módosításával?
- Ennek a custom fieldnek a leszürkítését, azonban megjelenítését a felhasználó saját adai alatt meg tudom oldani?
Jelenleg működik:
1. külön rule: - Tudom számolni a vásárlások számát
2. külön rule: - Ehhez viszonyítva tudom másik role-ba tenni az adott usert. Ezt mind a fizetési folyamat befejezése után.
# UPDATE:
Közben kiderült, hogy a soron kívüli szint váltást 12 fél időtartamra lehessen megvásárolni, ami kicsit túlbonyolítja a feladatot:
Kezdő szint 1 hónapra;
Kezdő szint 3 hónapra;
Kezdő szint 6 hónapra;
Kezdő szint 12 hónapra;
Haladó szint 1 hónapra;
Haladó szint 3 hónapra;
Haladó szint 6 hónapra;
Haladó szint 12 hónapra;
Szakértő szint 1 hónapra;
Szakértő szint 3 hónapra;
Szakértő szint 6 hónapra;
Szakértő szint 12 hónapra;
Nem bonyolít ez semmit, ha a lejárat dátumát tárolod el és azt kezeled mindig.
Valóban :) Lassan haladok, de biztosan.
A vásárlás alapján már tudom fel léptetni a felhasználókat, fokozni is a lejárati dátum alapján. Viszont ennek az időzítése trükkös.
A felhasználó lefokozásnál tartok. Hogyan gondoltad az elysia_cron-nal felügyelt saját cron job indítását?
Magát a job-ot nem tudom létrehozni.
a dátumot figyelve, ha az utolsó szintlépés ideje egy hónapnál több, akkor visszalépteted eggyel és módosítod a dátumot. és ezt óránként hívogatod, s amikor észlel valakit, akkor lefokozza. írsz hozzá egy külön rule-t vagy bármit, és azt hívogatod elysiával.
Nem akar összejönni. Jó szintakszist használok?
Kep
nekem annak tűnik. viszont: azt tudod ugye, hogy a cron igazából csak akkor fut le (és szerintem az elysiánál is így van), ha az oldalt "időközben" ténylegesen látogatják is. ugyanis a cron tárolja az utolsó futás idejét, és ha egy random betöltődéskor azt észleli az oldalad, hogy futnia kellett volna, akkor fog futni. ergo ha te ténylegesen naponta, percenként stb. akarod egy meghatározott időben futtatni ezt, akkor érdemesebb ezt a funkciót kikapcsolni az elysiában (is), és a szervereden belőni egy szimpla kis szkriptet, ami majd meghívogatja naponta, percenként stb. a drupal/elysia cront (az elysiával ugyebár nem csak az a lényeges, hogy állítgatni tudod a configurációs oldalán, hogy mikor és mi fusson, hanem lényeges az is, hogy a szétszedett cron jobokkal jókora terhelést veszel le a szerveredről).
Én nem venném külön a lefokozást és az előléptetést.
Ha a Dátum lekérdezésekor kiderül, hogy eljött az idő a rang felülvizsgálatára, akkor az utolsó havi vásárlásai alapján betenném a neki megfelelő csoportba. Tök mindegy, hogy előtte magasabb, vagy alacsonyabb "rangban" volt-e, mindenki a helyére kerül.
Ezt szerintem nem kell óránként futtatni, elég naponta egyszer a teljes user adatbázisra, mondjuk hajnali 4-kor ezt a kódot.
ez attól függ. ha neki az előléptetés "azonnal" kell egy 5., 10. stb. vásárlás után, akkor szerintem érdemes.
Jogos, nem fogalmaztam világosan.
Minden vásárlás után per-user le kell futtatni, a teljes adatbázisra elég naponta egyszer.