package Lacuna::Web::MissionCurator;
use Moose;
use utf8;
no warnings qw(uninitialized);
extends qw(Lacuna::Web);
use Lacuna::Constants qw(FOOD_TYPES ORE_TYPES);
use Module::Find;
use UUID::Tiny ':std';
use Lacuna::Util qw(format_date);
use List::Util qw(sum);
use Text::CSV_XS;
sub www_add_essentia {
my ($self, $request) = @_;
my $empires = Lacuna->db->resultset('Lacuna::DB::Result::Empire');
my $empire = $empires->find($request->param('id'));
unless (defined $empire) {
confess [404, 'Empire not found.'];
}
my $curator = $empires->search({name=>$request->user})->first;
my $jt = $empires->find(2);
$empire->add_essentia({
amount => 100,
reason => 'Mission Pack Approved By '.$curator->name,
});
$empire->update;
$empire->send_message(
from => $curator,
subject => 'Mission Bounty',
body => 'I have approved your mission pack and awarded you 100 essentia.',
tags => ['Mission','Correspondence'],
);
$jt->send_message(
from => $curator,
subject => 'Mission Bounty',
body => 'I have approved a mission pack for '.$empire->name.'.',
tags => ['Mission','Correspondence'],
);
my $dt_parser = Lacuna->db->storage->datetime_parser;
my $seven_days_ago = $dt_parser->format_datetime( DateTime->now->subtract(days => 7) );
my $recent = Lacuna->db->resultset('Lacuna::DB::Result::Log::Essentia')->search({
empire_id => $curator->id,
description => 'Mission Curator',
date_stamp => { '>' => $seven_days_ago},
})->count;
if (not $recent) {
$curator->add_essentia({
amount => 100,
reason => 'Mission Curator',
});
$curator->update;
}
return $self->www_default($request, 'Essentia Added');
}
sub www_stats {
my ($self, $request) = @_;
my $csv = Text::CSV_XS->new({binary => 1});
my $logs = Lacuna->db->resultset('Lacuna::DB::Result::Log::Mission');
$csv->combine('filename','number of times offered','number of incompletes','number of completes','completes university level','seconds to complete','number of skips','skips university level');
my $out = $csv->string."\n";
while (my $log = $logs->next) {
$csv->combine(
$log->filename,
$log->offers,
$log->incompletes,
$log->completes,
$log->complete_uni_level,
$log->seconds_to_complete,
$log->skips,
$log->skip_uni_level,
);
$out .= $csv->string."\n";
}
return [$out, { content_type => 'text/csv' }];
}
sub www_payouts {
my ($self, $request) = @_;
my $payouts = Lacuna->db->resultset('Lacuna::DB::Result::Log::Essentia')->search(
{description => [{ '=' => 'Mission Curator' }, { like => 'Mission Pack Approved By%'} ] },
{order_by => { -desc => 'date_stamp' } }
);
my $out = '
Back To Empires
Mission Payout History
';
$out .= '| Date | Paid To | Description |
';
while (my $payout = $payouts->next) {
$out .= sprintf('| %s | %s | %s |
', $payout->date_stamp, $payout->empire_name, $payout->description);
}
$out .= '
';
return $self->wrap($out);
}
sub www_default {
my ($self, $request, $message) = @_;
my $page_number = $request->param('page_number') || 1;
my $empires = Lacuna->db->resultset('Lacuna::DB::Result::Empire')->search(undef, {order_by => ['name'], rows => 25, page => $page_number });
my $name = $request->param('name') || '';
if ($name) {
$empires = $empires->search({name => { like => $name.'%' }});
}
my $out = $message.'Add Mission Essentia
';
$out .= '';
$out .= '| Add Essentia | Name | Email |
';
while (my $empire = $empires->next) {
$out .= sprintf('| Add Essentia | %s | %s |
', $empire->id, $empire->name, $empire->email);
}
$out .= '
';
$out .= $self->format_paginator('default', 'name', $name, $page_number);
$out .= ' ';
return $self->wrap($out);
}
sub format_paginator {
my ($self, $method, $key, $value, $page_number) = @_;
my $out = '';
return $out;
}
sub wrap {
my ($self, $content) = @_;
return $self->wrapper($content,
{ title => 'Mission Curator Panel'}
);
}
no Moose;
__PACKAGE__->meta->make_immutable(inline_constructor => 0);