#
# modules/Call.pm
#
# Developed by Ondrej Jombik <nepto@platon.sk>
# Copyright (c) 2004 Platon SDG, http://platon.sk/
# Licensed under terms of GNU General Public License.
# All rights reserved.
#
# Changelog:
# 18/01/2004 - created
#
# $Platon$
package Call;
use strict;
use Carp;
use vars qw($VERSION @ISA @EXPORT $AUTOLOAD);
@ISA = qw(Exporter);
@EXPORT = qw( );
$VERSION = '0.1';
use dbh_query;
use User;
sub new # {{{
{
my $this = shift;
my $class = ref($this) || $this;
my $self = {};
bless $self, $class;
return $self;
} # }}}
sub exist # {{{
{
my $call_id = shift;
my $query = 'SELECT COUNT(*) FROM calls WHERE call_id = ' . dbh_quote($call_id);
return dbh_query( $query, 'SCALAR' ) == 1;
} # }}}
sub get # {{{
{
my $call_id = shift;
my $query = 'SELECT a.*, c0.name AS customer, u0.login AS call_login,'
. ' u1.login AS created_by_login, u2.login AS changed_by_login FROM calls a'
. ' LEFT JOIN customers c0 ON a.cid = c0.cid'
. ' LEFT JOIN users u0 ON a.uid = u0.uid'
. ' LEFT JOIN users u1 ON a.created_by = u1.uid'
. ' LEFT JOIN users u2 ON a.changed_by = u2.uid'
. ' WHERE a.call_id = ' . dbh_quote($call_id);
my $call = ( dbh_query( $query, 'HASHREF' ) )[0];
$call->{'created_by_login'} ||= User::getAnnonymousLogin();
$call->{'changed_by_login'} ||= User::getAnnonymousLogin();
$call->{'call_login'} ||= User::getAnnonymousLogin();
return $call;
} # }}}
sub set # {{{
{
my $call_id = shift;
my $data = shift;
my $cur_login = shift;
my %real_data = ();
my $key;
my $val;
foreach $key ( keys %$data ) {
$val = $data->{$key};
next if ( $key !~ /^(cid|uid|call_date|type|subject|notes)$/ );
$real_data{$key} = dbh_quote($val);
}
if ( scalar keys %real_data ) {
$real_data{'changed_by'} = dbh_quote($cur_login);
$real_data{'changed_date'} = 'SYSDATE()';
my $query;
if ( Call::exist($call_id) ) {
my $delim = ' ';
$query = 'UPDATE calls SET';
foreach $key ( keys %real_data ) {
$val = $real_data{$key};
$query .= $delim;
$query .= $key;
$query .= '=';
$query .= $val;
$delim = ',' if $delim ne ',';
}
$query .= ' WHERE call_id = ' . dbh_quote($call_id)
} else {
$query = sprintf( 'INSERT INTO calls'
. '(cid, uid, call_date, type, subject, notes,'
. ' created_by, created_date, changed_by, changed_date)'
. ' VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)',
$real_data{'cid'}, $real_data{'uid'}, $real_data{'call_date'},
$real_data{'type'}, $real_data{'subject'}, $real_data{'notes'},
$real_data{'changed_by'}, $real_data{'changed_date'},
$real_data{'changed_by'}, $real_data{'changed_date'} );
}
dbh_query( $query, 'UNDEF' );
}
} # }}}
sub delete # {{{
{
my $call_id = shift;
my $query = 'DELETE FROM calls WHERE call_id = ' . dbh_quote($call_id);
dbh_query( $query, 'UNDEF' );
} # }}}
sub getCount # {{{
{
my $query = 'SELECT COUNT(*) FROM calls';
return dbh_query( $query, 'SCALAR' );
} # }}}
sub getAll # {{{
{
return Call::getFilteredList( undef, undef );
} # }}}
sub getFilteredList # {{{
{
my $where = Call::_createWhere(shift);
my $order = Call::_createOrder(shift);
my $query = 'SELECT a.*, c0.name AS customer, u0.login AS call_login'
. ' FROM calls a'
. ' LEFT JOIN customers c0 ON a.cid = c0.cid'
. ' LEFT JOIN users u0 ON a.uid = u0.uid';
$query .= " WHERE $where" if ( length $where );
$query .= " ORDER BY $order" if ( length $order );
my $ret = dbh_query( $query, 'HASHREF' );
for ( $_ = 0 ; $_ < scalar(@$ret) ; $_++ ) {
$ret->[$_]{'call_login'} ||= User::getAnnonymousLogin();
}
return $ret;
} # }}}
sub _createWhere # {{{
{
my $filter = shift;
my @ret_ar = ();
my $key;
my $val;
foreach $key ( keys %$filter ) {
$val = $filter->{$key};
next if ( $key !~ /^(cid|uid|call_id|call_uid|call_login|customer|call_date|type|subject)$/ );
next if ( !length $val );
if ( $key =~ /^(cid|uid|call_id|call_uid)$/ ) {
$key = 'uid' if ( $key eq 'call_uid' );
my %map = ( cid => 'c0.', call_id => 'a.', uid => 'a.' );
push @ret_ar, sprintf( '%s%s = %d', $map{$key}, $key, $val ) if ( $val =~ /\d+/ );
next;
}
if ( $key eq 'type' ) {
push @ret_ar, sprintf( 'LOWER(%s) LIKE LOWER(%s)',
"a.$key", dbh_quote($val) );
next;
}
my $prefix;
if ( $key =~ /call_login$/ ) {
$key =~ s/call_//g;
$prefix = 'u0.';
} elsif ( $key eq 'customer' ) {
$key = 'name';
$prefix = 'c0.';
} else {
$prefix = 'a.';
}
push @ret_ar, sprintf( 'LOWER(%s%s) LIKE LOWER(%s)',
$prefix, $key, dbh_quote( '%' . $val . '%' ) );
}
return join ( ' AND ', @ret_ar );
} # }}}
sub _createOrder # {{{
{
my $key = shift;
return '' if ( not defined $key );
return '' if ( $key !~ /^[-]?(call_id|call_login|customer|call_date|type|subject)$/ );
my $prefix;
if ( $key =~ /call_login$/ ) {
$key =~ s/call_//g;
$prefix = 'u0.';
} elsif ( $key =~ /customer$/ ) {
$key =~ s/customer/name/g;
$prefix = 'c0.';
} else {
$prefix = 'a.';
}
return $prefix . substr( $key, 1 ) . ' DESC' if ( substr( $key, 0, 1 ) eq '-' );
return $prefix . $key;
} # }}}
1;
__END__
=head1 NAME
Call - <<<description of module>>>
=head1 SYNOPSIS
use Call;
my $xxx = new Call;
=head1 DESCRIPTION
The Call module allows you ...
<<<your description here>>>
=head2 EXPORT
<<here describe exported methods>>>
=head1 SEE ALSO
=head1 AUTHORS
Ondrej Jombik, <nepto@platon.sk>
=cut
# vim: ts=4
# vim600: fdm=marker fdl=0 fdc=3
Platon Group <platon@platon.sk> http://platon.sk/
|