Win ppprrrijzen!
We zijn nu bezig met het opzetten van een sinterklaas actie voor onze payroll-krachten.
Hierbij kunnen ze mooie prijzen winnen. Tenminste: doe mij ook maar een 5 daagse vliegreis voor 2 personen naar Barcelona. Als dat er voor mij niet in zou zitten zou ik toch ook wel blij zijn met een van de Bol.com cadeaubonnen.
Het is de bedoeling dat de prijzen via een soort van digitale tombola verloot worden onder de deelnemers, en aan mij de taak om dit op de Payroll Portal te implementeren.
Omdat ik me voor zou kunnen stellen dat er in de toekomst vaker van dit soort acties plaats zullen vinden, besloot ik geen wegwerp oplossing te maken, maar eentje die herbruikbaar is voor meerdere acties.
Deze actie is bedoeld voor payroll-krachten, maar wellicht is een volgende actie ook voor opdrachtgevers. Het systeem moet hier dus mee overweg kunnen. Verder moet de winkans variabel ingesteld kunnen worden zodat, afhankelijk van het aantal deelnemers, de prijzen zo evenredig mogelijk verdeeld worden. En niet geheel onbelangrijk moet door Driessen een lijst met winnaars en hun prijzen gemaakt kunnen worden.
Technisch gezien is het allemaal compact en eenvoudig. Ik werk met een deelnametabel waar payroll-krachten en opdrachtgevers die deelnemen in worden gelogd. Daarmee kan ik ook controleren of iemand al deelgenomen heeft. Verder hebben we natuurlijk een prijzentabel waar een omschrijving van de prijs in staat, of het de hoofdprijs is, of (en door wie) de prijs gewonnen is. Voor de overzichtslijst van winnaars heb ik een view tegen beide tabellen gebouwd die, naast de gewonnen prijs, ook de NAW gegevens van de deelnemer erbij pakt zodat er contact opgenomen kan worden.
De kansgenerator is alles behalve rocketsience, het is bijna lachwekkend hoe eenvoudig hij is, maar hij spreidt de kansen wel eerlijk. Dat is natuurlijk het belangrijkste.
/// <summary>
/// Calculates if a prize is won using the winchance factor defined in the settings table
/// </summary>
/// <returns>True if a prize is won</returns>
private static bool CalculateIfPrizeIsWon(Core core)
{
// Get the win chance factor from the settings table
Settings<EnmSettingsSectionsFldName, EnmSettingsKeysFldName> settings =
new Settings<EnmSettingsSectionsFldName, EnmSettingsKeysFldName>(core);
int winChanceFactor =
settings.GetValue(EnmSettingsSectionsFldName.V1oPayrollPortal,
EnmSettingsKeysFldName.V10oCampaignWinChanceFactor,
defaultWinChanceFactor);
int participationCount =
(int)core.DataHandler.ReadValue(“srvGetCampaignWinFactor”);
// If the participant’s number is the winning number, a prize is won!
bool prizeWon = (participationCount % winChanceFactor == 0);
return prizeWon;
}
Behoorlijk recht toe recht aan dus.
De settings class en core zijn onderdelen van ons framework die me een hoop werk uit handen nemen als het gaat om data access en het gebruiken van settings e.d.
Ik heb er inmiddels een paar uurtjes ingestoken in het totale mechaniek en het werkt goed. Omdat het een permanent karakter heeft heb ik gisteravond wat tijd besteed aan het bouwen van de nodige unittests voor het valideren van de deelnemers en het loggen van deelnames en gewonnen prijzen. Het werkt als een trein. Vanavond nog wat werk afronden aan de unittests. Daarna kan ik beginnen aan de UI. Daar is mijn DTP-Collega Hans al een paar mooie ontwerpen voor aan het maken.
Ik denk dat we lekker op tijd klaar zijn, zodat zaterdag de actie van start kan gaan. Ik ben benieuwd naar de reacties.
[Edit]
Bij de unittests die ik inmiddels voor de bovenstaande code heb geschreven bleek dat het principe wel klopt, maar dat het bijvoorbeeld goed kan zijn dat bij een winkans van 1 op 50, bij 5000 passes de ene keer niemand wint en de andere keer 300 mensen. On the long run werkt het wel, maar voor het doel waar wij het voor willen gebruiken is het niet zeker genoeg dat de prijzen er ook daadwerkelijk uit gaan.
Om te kunnen garanderen de prijzen er uit gaan is de code nu aangepast naar een modulus berekening, wat overeenkomt met ‘iedere zoveelste beller wint’.
/// <summary>
/// Calculates if a prize is won using the winchance factor defined in the settings table
/// </summary>
/// <returns>True if a prize is won</returns>
private static bool CalculateIfPrizeIsWon(Core core)
{
// Get the win chance factor from the settings table
Settings<EnmSettingsSectionsFldName, EnmSettingsKeysFldName> settings =
new Settings<EnmSettingsSectionsFldName, EnmSettingsKeysFldName>(core);
int winChanceFactor =
settings.GetValue(EnmSettingsSectionsFldName.V1oPayrollPortal,
EnmSettingsKeysFldName.V10oCampaignWinChanceFactor,
defaultWinChanceFactor);
int participationCount =
(int)core.DataHandler.ReadValue(“srvGetCampaignWinFactor”);
// If the participant’s number is the winning number, a prize is won!
bool prizeWon = (participationCount % winChanceFactor == 0);
return prizeWon;
}
Dit bericht is geplaatst
op dinsdag, 17 november 2009 om 10:43 en hoort bij Algemeen.
Je kunt reacties volgen met de RSS 2.0 feed.
Je kunt een reactie achterlaten, of een trackback plaatsen vanaf je eigen site.
| 106 x bekeken






