#---------------------------------------------------------------
# ____                   _ _         ____  _
#|  _ \ ___  _   _  __ _| | |_ _   _/ ___|| |__   __ _ _ __ ___
#| |_) / _ \| | | |/ _` | | __| | | \___ \| '_ \ / _` | '__/ _ \
#|  _ < (_) | |_| | (_| | | |_| |_| |___) | | | | (_| | | |  __/
#|_| \_\___/ \__, |\__,_|_|\__|\__, |____/|_| |_|\__,_|_|  \___|
#            |___/             |___/
#
# Copyright (C) 2011 RoyaltyShare, Inc.   All Rights Reserved
#---------------------------------------------------------------

package RPS::Report::Dynamic::Transactions::Base;

use strict;
use warnings;

use lib '/app/tools/common/lib';
use lib '/app/tools/rps/lib';
use lib '/app/tools/report/lib';
use Common::Client;

use base 'Report::Dynamic::SingleQuery';

#sub Type { 'License Transactions' }
#sub FilenameType { 'License Transactions' }
#sub ClientTypeMask { return Common::Client::kArtist; }

sub Group { 'Transactions' }

sub UserLevelIsValid {
    my ( $class, $userLevel ) = @_;
    my %validLevels = (
        AppUser::DB::Item::AccessLevel::kRSAdmin()          => 1,
        AppUser::DB::Item::AccessLevel::kRSAccountRep()     => 1,
        AppUser::DB::Item::AccessLevel::kRoyalty()          => 1,
        AppUser::DB::Item::AccessLevel::kAdminCatalogView() => 1,
        AppUser::DB::Item::AccessLevel::kAdmin()            => 1,
    );

    return $validLevels{$userLevel};
}

# All these Transaction reports have the same parameters.
#
sub _ParamClass { 'RPS::Report::Dynamic::Payee::Transactions::Base::Parameters'; }

# All these Transaction reports will use the same columns for the Transaction details.
# But they will have a lot of different stuff as well.
#
sub _transactionCols {
    my ( $self, $cols ) = @_;

    push @$cols,
      {
        header => {
            name => 'payor-name',
        },
        column => {
            field => 'payor_name',
        }
      },
      {
        header => {
            name => 'client-payor-no',
        },
        column => {
            field => 'client_payor_no',
        }
      },
      {
        header => {
            name => 'payor-status',
        },
        column => {
            field => 'payor_status',
        }
      },
      {
        header => {
            name => 'default-payor',
        },
        column => {
            field => 'default_payor',
        }
      },
      {
        header => {
            name   => 'min-payment',
            method => '_appendCurrencyCode',
        },
        column => {
            field => 'min_payment',
            excel => 'number:0.00',
        },
      },
      {
        header => {
            name => 'transaction-status',
        },
        column => {
            field => 't_status',
        }
      },
      {
        header => {
            name => 'transaction-type',
        },
        column => {
            field => 't_type',
        }
      },
      {
        header => {
            name   => 'amount',
            method => '_appendCurrencyCode',
        },
        column => {
            field => 't_amount',
            excel => 'number:0.00',
        }
      },
      {
        header => {
            name => 'transaction-date',
        },
        column => {
            field  => 't_date',
            method => '_formatDate',
            excel  => 'date:Y-M-D',
        }
      },
      {
        header => {
            name => 'check-no',
        },
        column => {
            field => 't_check_no',
        }
      },
      {
        header => {
            name => 'memo',
        },
        column => {
            field => 't_memo',
        }
      },
      {
        header => {
            name   => 'balance',
            method => '_appendCurrencyCode',
        },
        column => {
            field => 't_balance',
            excel => 'number:0.00',
        }
      },
      {
        header => {
            name => 'transaction-date-created',
        },
        column => {
            field  => 't_date_created',
            method => '_formatDate',
            excel  => 'date:Y-M-D',
        }
      },
      {
        header => {
            name => 'transaction-date-modified',
        },
        column => {
            field  => 't_date_modified',
            method => '_formatDate',
            excel  => 'date:Y-M-D',
        }
      },
      {
        header => {
            name => 'rs-transaction-id',
        },
        column => {
            field => 't_id',
        }
      };
}

1;

package RPS::Report::Dynamic::Payee::Transactions::Base::Parameters;

use strict;
use warnings;

use lib '/app/tools/common/lib';
use lib '/app/tools/report/lib';
use lib '/app/tools/rps/lib';

use base 'RPS::Report::Dynamic::Parameters';

sub _Criteria {
    return {
        'StartDate' => {
            order   => 1,
            type    => Report::Dynamic::Parameters::kTypeDate,
            display => 'Start Date',
        },
        'EndDate' => {
            order   => 2,
            type    => Report::Dynamic::Parameters::kTypeDate,
            display => 'End Date',
        },
        'DateType' => {
            type        => Report::Dynamic::Parameters::kTypeMenu,
            display     => 'Only show data based on date parameters',
            validValues => [ 'None', 'Date Created', 'Date Modified' ],
            value       => 'None',
        },
    };
}

sub _OptionalData {
    {
        'ReportType' => {
            type          => Report::Dynamic::Parameters::kTypeRadioGroup,
            order         => 1,
            validValues   => [ 'Pending', 'Processed', 'All' ],
            displayValues => [ 'Show Pending Transactions', 'Show Processed Transactions', 'Show All Transactions' ],

            #            display => 'Options',
            value => 'Pending',                                 # This sets the _default_ value.
            filename => [ 'wPending', 'wProcessed', 'wAll' ],
        },
    };
}

1;
