Compare commits
1 commit
developmen
...
james/meda
Author | SHA1 | Date | |
---|---|---|---|
|
e3969fe222 |
1 changed files with 225 additions and 0 deletions
|
@ -20,6 +20,7 @@ sub index {
|
|||
total => 1,
|
||||
},
|
||||
};
|
||||
|
||||
my $organisation_placeholder = {
|
||||
org_id => {
|
||||
group_name => {
|
||||
|
@ -36,6 +37,230 @@ sub index {
|
|||
},
|
||||
};
|
||||
|
||||
# James test data
|
||||
my $entity = $c->stash->{api_user}->entity;
|
||||
|
||||
my $now = DateTime->now;
|
||||
my $today = DateTime->today;
|
||||
my $week_ago = $today->clone->subtract( days => 7 );
|
||||
my $purchase_rs = $entity->purchases;
|
||||
# need to add way to search through all transactions and get a true statement to not run this every time
|
||||
|
||||
# https://www.perlmonks.org/?node_id=1092020
|
||||
|
||||
my $day_0 = $purchase_rs->search({
|
||||
'buyer.purchase_time'
|
||||
},
|
||||
{
|
||||
order_by => { -asc => 'buyer.purchase_time' },
|
||||
rows => 1
|
||||
});
|
||||
|
||||
my $day_5 = $day_0->clone->add( days => 5 );
|
||||
|
||||
#shopaholic check (5 transactions in 1 day)
|
||||
my $shopaholic = 0;
|
||||
|
||||
# TODO need to do quantized stuff here
|
||||
|
||||
$check_day = $day_0->clone;
|
||||
while ( $check_day->add(days => 1) < $today )
|
||||
{
|
||||
my $today_transactions = $purchase_rs->search({
|
||||
'buyer.purchase_time'->day => $check_day
|
||||
});
|
||||
|
||||
my $today_count = $today_transactions->count;
|
||||
|
||||
if ( $today_count >= 5 )
|
||||
{
|
||||
$shopaholic = 1;
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
my $transaction_count = $purchase_rs->count;
|
||||
my $fair_transaction = $purchase_rs->search({
|
||||
'organisation.is_fair' => 1,
|
||||
},
|
||||
{
|
||||
join => { 'buyer' => 'organisation' }
|
||||
});
|
||||
|
||||
my $local_transaction = $purchase_rs->search({
|
||||
'organisation.is_local' => 1,
|
||||
},
|
||||
{
|
||||
join => { 'buyer' => 'organisation' }
|
||||
});
|
||||
|
||||
my $close_transaction = $purchase_rs->search({
|
||||
'me.distance' => { '<', 20000 },
|
||||
});
|
||||
|
||||
# Not unique names
|
||||
my @orgs = $purchase_rs->search({
|
||||
'organisation.id',
|
||||
'organisation.name',
|
||||
},
|
||||
{
|
||||
join => { 'buyer' => 'organisation' },
|
||||
distinct => 1,
|
||||
});
|
||||
|
||||
my $org_completionist_count = 0;
|
||||
|
||||
# Need to add all org medals to each organisation, in loop maybe?
|
||||
my $organisation_medals_test = {
|
||||
for $org (@orgs)
|
||||
{
|
||||
my $org_transactions = $purchase_rs->search({
|
||||
'organisation.id' => $org.id,
|
||||
},
|
||||
{
|
||||
join => { 'buyer' => 'organisation' }
|
||||
});
|
||||
|
||||
my $loyal_customer = $org_transactions->count;
|
||||
|
||||
my $devoted_customer = 0;
|
||||
|
||||
my $org_day_0 = $org_transactions->search({
|
||||
'buyer.purchase_time'
|
||||
},
|
||||
{
|
||||
order_by => { -asc => 'buyer.purchase_time' },
|
||||
rows => 1
|
||||
});
|
||||
|
||||
#Devoted Customer -start
|
||||
my $org_check_day_start = $org_day_0->clone;
|
||||
my $devoted_customer = 0;
|
||||
|
||||
# TODO need to do quantized stuff here
|
||||
|
||||
while ( $org_check_day_start->add(days => 1) < $today )
|
||||
{
|
||||
my $org_check_day_end = $org_check_day_start->clone->add( days => 7 );
|
||||
my $week_transactions = $purchase_rs->search({
|
||||
'buyer.purchase_time'->day => { -between => [ $org_check_day_start, $org_check_day_end ] }
|
||||
});
|
||||
|
||||
my $week_count = $week_transactions->count;
|
||||
|
||||
if ( $week_count >= 5 )
|
||||
{
|
||||
$devoted_customer = 1;
|
||||
last;
|
||||
}
|
||||
}
|
||||
#Devoted Customer -end
|
||||
|
||||
#Repeat Customer -start
|
||||
my $repeat_customer_check_day = $org_day_0->clone;
|
||||
my $repeat_customer = 0;
|
||||
|
||||
# TODO need to do quantized stuff here
|
||||
while ( $repeat_customer_check_day->add(days => 1) < $today )
|
||||
{
|
||||
my $today_transactions = $purchase_rs->search({
|
||||
'buyer.purchase_time'->day => $repeat_customer_check_day
|
||||
});
|
||||
|
||||
my $today_count = $today_transactions->count;
|
||||
|
||||
if ( $today_count >= 2 )
|
||||
{
|
||||
$repeat_customer = 1;
|
||||
last;
|
||||
}
|
||||
}
|
||||
#Repeat Customer -end
|
||||
|
||||
#Completionist -start
|
||||
if( $loyal_customer >= 50 && $devoted_customer == 1 && $repeat_customer == 1)
|
||||
{
|
||||
$org_completionist_count++;
|
||||
}
|
||||
#Completionist -end
|
||||
|
||||
$org.name => {
|
||||
# Visit org x times
|
||||
LoyalCustomer => {
|
||||
2 => { awarded => false, awarded_at => false, threshold => 2, points => 20, multiplier => 1, },
|
||||
5 => { awarded => false, awarded_at => false, threshold => 5, points => 50, multiplier => 1, },
|
||||
10 => { awarded => false, awarded_at => false, threshold => 10, points => 100, multiplier => 1, },
|
||||
25 => { awarded => false, awarded_at => false, threshold => 25, points => 250, multiplier => 1, },
|
||||
50 => { awarded => false, awarded_at => false, threshold => 50, points => 500, multiplier => 1, },
|
||||
total => $loyal_customer,
|
||||
},
|
||||
# visit org 5 times in one week
|
||||
DevotedCustomer => {
|
||||
1 => { awarded => false, awarded_at => false, threshold => 1, points => 50, multiplier => 1, },
|
||||
total => $devoted_customer,
|
||||
},
|
||||
# visit org twice in one day
|
||||
RepeatCustomer => {
|
||||
2 => { awarded => false, awarded_at => false, threshold => 5, points => 20, multiplier => 1, },
|
||||
total => $repeat_customer,
|
||||
},
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
my $global_medals_test = {
|
||||
# Total number of transations
|
||||
KeenShopper => {
|
||||
1 => { awarded => false, awarded_at => false, threshold => 1, points => 10, },
|
||||
5 => { awarded => false, awarded_at => false, threshold => 5, points => 50, },
|
||||
25 => { awarded => false, awarded_at => false, threshold => 25, points => 250, },
|
||||
100 => { awarded => false, awarded_at => false, threshold => 100, points => 1000, },
|
||||
1000 => { awarded => false, awarded_at => false, threshold => 1000, points => 10000, },
|
||||
total => $transaction_count,
|
||||
},
|
||||
# Total number of 'fair' transactions
|
||||
FairTradesman => {
|
||||
1 => { awarded => false, awarded_at => false, threshold => 1, points => 10, },
|
||||
5 => { awarded => false, awarded_at => false, threshold => 5, points => 50, },
|
||||
25 => { awarded => false, awarded_at => false, threshold => 25, points => 250, },
|
||||
100 => { awarded => false, awarded_at => false, threshold => 100, points => 1000, },
|
||||
1000 => { awarded => false, awarded_at => false, threshold => 1000, points => 10000, },
|
||||
total => $fair_transaction->count,
|
||||
},
|
||||
# Total number of 'local' transactions
|
||||
LocalLoyalist => {
|
||||
1 => { awarded => false, awarded_at => false, threshold => 1, points => 10, },
|
||||
5 => { awarded => false, awarded_at => false, threshold => 5, points => 50, },
|
||||
25 => { awarded => false, awarded_at => false, threshold => 25, points => 250, },
|
||||
100 => { awarded => false, awarded_at => false, threshold => 100, points => 1000, },
|
||||
1000 => { awarded => false, awarded_at => false, threshold => 1000, points => 10000, },
|
||||
total => $local_transaction->count,
|
||||
},
|
||||
# Total number of 'close' transactions
|
||||
Agoraphobic => {
|
||||
1 => { awarded => false, awarded_at => false, threshold => 1, points => 10, },
|
||||
5 => { awarded => false, awarded_at => false, threshold => 5, points => 50, },
|
||||
25 => { awarded => false, awarded_at => false, threshold => 25, points => 250, },
|
||||
100 => { awarded => false, awarded_at => false, threshold => 100, points => 1000, },
|
||||
1000 => { awarded => false, awarded_at => false, threshold => 1000, points => 10000, },
|
||||
total => $close_transaction->count,
|
||||
},
|
||||
# Visit 5 shops in one day
|
||||
Shopaholic => {
|
||||
1 => { awarded => false, awarded_at => false, threshold => 1, points => 250, },
|
||||
total => $shopaholic,
|
||||
},
|
||||
# Earn all medals for an organisation
|
||||
Completionist => {
|
||||
1 => { awarded => false, awarded_at => false, threshold => 1, points => 500, },
|
||||
3 => { awarded => false, awarded_at => false, threshold => 3, points => 1000, },
|
||||
10 => { awarded => false, awarded_at => false, threshold => 10, points => 2500, },
|
||||
25 => { awarded => false, awarded_at => false, threshold => 25, points => 5000, },
|
||||
50 => { awarded => false, awarded_at => false, threshold => 50, points => 15000, },
|
||||
total => $org_completionist_count,
|
||||
},
|
||||
};
|
||||
|
||||
return $c->render(
|
||||
json => {
|
||||
success => Mojo::JSON->true,
|
||||
|
|
Reference in a new issue