130 lines
3.3 KiB
Perl
130 lines
3.3 KiB
Perl
use strict;
|
|
|
|
package TrsrDB::HTTP::Account;
|
|
use Mojo::Base 'Mojolicious::Controller';
|
|
use Carp qw(croak);
|
|
|
|
sub list {
|
|
my $self = shift;
|
|
|
|
my $accounts = $self->app->db->resultset("Account");
|
|
my $user = $self->stash("user");
|
|
my %args = $user->grade ? ()
|
|
: $accounts->find( $user->user_id ) ? ( 'me.ID' => $user->user_id )
|
|
: ( type => q{} );
|
|
$accounts = $accounts->search(\%args, {
|
|
order_by => { -asc => [qw/type balance.even_until me.ID/] },
|
|
prefetch => 'balance'
|
|
});
|
|
|
|
$self->stash( accounts => $accounts );
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
sub upsert {
|
|
my $self = shift;
|
|
|
|
my $db = $self->app->db;
|
|
my $account_rs = $db->resultset("Account");
|
|
my $account;
|
|
if ( my $name = $self->stash("account") ) {
|
|
$self->stash( id => $name );
|
|
$account = $account_rs->find($name);
|
|
}
|
|
else {
|
|
$self->stash( id => undef );
|
|
$account = $account_rs->new({});
|
|
}
|
|
$self->stash( account => $account );
|
|
|
|
my $iban = $self->param("IBAN") // $account->IBAN;
|
|
|
|
if ( $self->req->method eq 'POST' ) {
|
|
my $p = $self->req->params->to_hash;
|
|
if ( $p->{IBAN} eq q{*} ) {
|
|
$p->{IBAN} = q{};
|
|
}
|
|
elsif ( !$iban ) {
|
|
delete $p->{IBAN};
|
|
}
|
|
for my $field ($account->result_source->columns) {
|
|
my $value = $p->{ $field };
|
|
$account->$field($value);
|
|
}
|
|
$account->update_or_insert();
|
|
$self->redirect_to("home");
|
|
}
|
|
else {
|
|
if ( defined( $iban ) ) {
|
|
$iban = q{*} if !$iban;
|
|
$account->IBAN($iban);
|
|
}
|
|
my @types = $account_rs->search({ type => { '!=' => q// } }, {
|
|
columns => ['type'], distinct => 1
|
|
})->get_column("type")->all;
|
|
$self->stash( types => \@types );
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
sub history {
|
|
my $self = shift;
|
|
my %query = ( account => $self->stash("account") );
|
|
if ( my $p = $self->param("purpose") ) {
|
|
# ...
|
|
}
|
|
my $history = $self->app->db->resultset("History")->search(
|
|
TrsrDB::HTTP::process_table_filter_widget(
|
|
$self, \%query,
|
|
{ order_by => { -desc => [qw/date/] } }
|
|
)
|
|
);
|
|
|
|
$self->stash( history => $history );
|
|
}
|
|
|
|
sub transfer {
|
|
my $self = shift;
|
|
my $db = $self->app->db;
|
|
my $account = $db->resultset("Account")->find( $self->stash("account") );
|
|
|
|
my $credits_rs = $account->available_credits;
|
|
my $arrears_rs = $account->current_arrears;
|
|
|
|
my $credit_ids = $self->every_param('credits');
|
|
my $arrear_ids = $self->every_param('debits');
|
|
|
|
if ( $self->req->method eq 'POST' && @$credit_ids && @$arrear_ids ) {
|
|
$db->make_transfers( $credit_ids => $arrear_ids );
|
|
}
|
|
|
|
if ( !( $credits_rs->count && $arrears_rs->count ) ) {
|
|
$self->redirect_to('home');
|
|
return;
|
|
}
|
|
|
|
$self->stash( credits => $credits_rs, arrears => $arrears_rs );
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
sub report {
|
|
my $self = shift;
|
|
my $account = $self->app->db
|
|
->resultset("Account")
|
|
->find( $self->stash("account") )
|
|
;
|
|
|
|
$self->stash( report => $account->report->search_rs(
|
|
{}, { order_by => { -asc => [qw/date/] } }
|
|
) );
|
|
|
|
}
|
|
|
|
1;
|
|
|