Platon Technologies
neprihlásený Prihlásiť Registrácia
SlovakEnglish
open source software development oslavujeme 10 rokov vývoja otvoreného softvéru! Piatok, 19. apríl 2024

Súbor: [Platon] / web-apps / call-centre-system / modules / Call.pm (stiahnutie)

Revízia 1.1, Wed Mar 10 11:34:53 2004 UTC (20 years, 1 month ago) by nepto

CALL CENTRE SYSTEM added into CVS.

#
# 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/
Copyright © 2002-2006 Platon Group
Stránka používa redakčný systém Metafox
Na začiatok