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,
|
total => 1,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
my $organisation_placeholder = {
|
my $organisation_placeholder = {
|
||||||
org_id => {
|
org_id => {
|
||||||
group_name => {
|
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(
|
return $c->render(
|
||||||
json => {
|
json => {
|
||||||
success => Mojo::JSON->true,
|
success => Mojo::JSON->true,
|
||||||
|
|
Reference in a new issue