#------------------------------------------------------------
# Copyright (C) 2007 RoyaltyShare, Inc.   All Rights Reserved
# $Id$
#------------------------------------------------------------
package RPS::DB::Item::ConsolidatedArtistRoyaltyRunMissedSaleLog;

use strict;
use warnings;

use lib '/app/tools/common/lib';
use Common::DB::ItemCollection;
use Common::Assert;
use Common::RSApp;
use Common::Log;

use Common::DB::Item;
use base 'Common::DB::Item';

use constant kTable => 'consolidated_artist_royalty_run_missed_sale_log';
use constant kDB    => Common::DB::Item::kClientDB();

sub _config {
    return {
        'album_artist'          => {},
        'album_custom_1'        => {},
        'album_custom_2'        => {},
        'album_custom_3'        => {},
        'album_date_created'    => {},
        'album_id'              => {},
        'album_title'           => {},
        'artist_contract_id'    => {},
        'artist_contract_title' => {},
        'catalog_number'        => {},
        'client_album_id'       => {},
        'details'               => {},
        'format_type'           => {},
        'gross_revenue'         => {},
        'label_name'            => {},
        'product_type_id'       => {},
        'reason'                => {},
        'total_revenue'         => {},
        'track_artist'          => {},
        'track_custom_1'        => {},
        'track_custom_2'        => {},
        'track_custom_3'        => {},
        'track_id'              => {},
        'track_title'           => {},
        'units'                 => {},
    };
}

sub GetByRunID {
    my ( $class, $id ) = @_;

    my @selectFields;

    # Report data
    push @selectFields, "sale_log.reason";
    push @selectFields, "sale_log.details";
    push @selectFields, "sale_log.units";
    push @selectFields, "sale_log.total_revenue";
    push @selectFields, "sale_log.gross_revenue";

    # Album metadata
    push @selectFields, "sale_log.album_id";
    push @selectFields, "album.title as album_title";
    push @selectFields, "a_artist.name as album_artist";
    push @selectFields, "album.catalog_number";
    push @selectFields, "album.client_album_id";
    push @selectFields, "album.date_created as album_date_created";
    push @selectFields, "album.custom_1 as album_custom_1";
    push @selectFields, "album.custom_2 as album_custom_2";
    push @selectFields, "album.custom_3 as album_custom_3";

    # Track metadata
    push @selectFields, "sale_log.track_id";
    push @selectFields, "track.title as track_title";
    push @selectFields, "t_artist.name as track_artist";
    push @selectFields, "track.custom_1 as track_custom_1";
    push @selectFields, "track.custom_2 as track_custom_2";
    push @selectFields, "track.custom_3 as track_custom_3";

    # Product metadata
    push @selectFields, "sale_log.product_type_id";
    push @selectFields, "sale_log.format_type";

    # Contract Metadata
    push @selectFields, "sale_log.artist_contract_id";
    push @selectFields, "new_artist_contract.title as artist_contract_title";

    # Label metadata
    push @selectFields, "label.label_name";

    my $selectClause = join( ',', @selectFields );

    my $sql =
        "SELECT $selectClause FROM " . kTable . " as sale_log"
      . " LEFT JOIN album ON (album.album_id = sale_log.album_id)"
      . " LEFT JOIN track ON (track.track_id = sale_log.track_id)"
      . " LEFT JOIN artist as t_artist ON (t_artist.artist_id = track.artist_id)"
      . " LEFT JOIN artist as a_artist ON (a_artist.artist_id = album.artist_id)"
      . " LEFT JOIN label ON (label.label_id = album.label_id)"
      . " LEFT JOIN new_artist_contract ON (new_artist_contract.artist_contract_id = sale_log.artist_contract_id)"
      . " WHERE artist_royalty_run_id = " . $class->quote($id)
      . " ORDER BY album.catalog_number, album_title, track_title, reason, details, units DESC";

    return $class->SUPER::GetAll($sql);
}

sub DeleteByRunID {
    my ( $class, $id ) = @_;

    my $dbo = Common::RSApp::GetClientDB();
    my $sql =
        "DELETE FROM "
        . kTable
        . " WHERE artist_royalty_run_id = "
        . $dbo->DBQuote($id);

    $dbo->DoCmd($sql);
}

1;
