Platon Technologies
neprihlásený Prihlásiť Registrácia
SlovakEnglish
open source software development oslavujeme 10 rokov vývoja otvoreného softvéru! Nedeľa, 15. marec 2026

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

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

CALL CENTRE SYSTEM added into CVS.

#
# modules/Customer.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:
# 17/01/2004 - created
#

# $Platon$

package Customer;

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 $cid   = shift;
    my $query = 'SELECT COUNT(*) FROM customers WHERE cid = ' . dbh_quote($cid);
    return dbh_query( $query, 'SCALAR' ) == 1;
}          # }}}

sub get    # {{{
{
    my $cid   = shift;
    my $query = 'SELECT c.*,'
      . ' u1.login AS created_by_login, u2.login AS changed_by_login FROM customers c'
      . ' LEFT JOIN users u1 ON c.created_by = u1.uid'
      . ' LEFT JOIN users u2 ON c.changed_by = u2.uid'
      . ' WHERE c.cid = ' . dbh_quote($cid);
    my $customer = ( dbh_query( $query, 'HASHREF' ) )[0];
    $customer->{'created_by_login'} ||= User::getAnnonymousLogin();
    $customer->{'changed_by_login'} ||= User::getAnnonymousLogin();
    return $customer;
}          # }}}

sub set    # {{{
{
    my $cid       = 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 !~ /^(ico|name|website|phone|person|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 ( Customer::exist($cid) ) {
            my $delim = ' ';
            $query = 'UPDATE customers SET';
            foreach $key ( keys %real_data ) {
                $val = $real_data{$key};
                $query .= $delim;
                $query .= $key;
                $query .= '=';
                $query .= $val;
                $delim = ',' if $delim ne ',';
            }
            $query .= ' WHERE cid = ' . dbh_quote($cid)
        } else {
            $query = sprintf( 'INSERT INTO customers'
                  . '(ico, name, website, phone, person, notes,'
                  . ' created_by, created_date, changed_by, changed_date)'
                  . ' VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)',
                $real_data{'ico'}, $real_data{'name'}, $real_data{'website'},
                $real_data{'phone'}, $real_data{'person'}, $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 $cid   = shift;
    my $query = 'DELETE FROM customers WHERE cid = ' . dbh_quote($cid);
    dbh_query( $query, 'UNDEF' );
}             # }}}

sub getCount  # {{{
{
    my $query = 'SELECT COUNT(*) FROM customers';
    return dbh_query( $query, 'SCALAR' );
}             # }}}

sub getAll    # {{{
{
    return Customer::getFilteredList( undef, undef );
}             # }}}

sub getFilteredList    # {{{
{
    my $where = Customer::_createWhere(shift);
    my $order = Customer::_createOrder(shift);
    my $query = 'SELECT * FROM customers';
    $query .= " WHERE $where"    if ( length $where );
    $query .= " ORDER BY $order" if ( length $order );
    my $ret = dbh_query( $query, 'HASHREF' );
    my @ids = ();
    foreach (@$ret) {
        push @ids, $_->{'cid'};
    }
    if ( scalar(@ids) ) {
        $query = 'SELECT c.cid, count(*) AS cnt,'
          . ' SUBSTRING(MAX(a.call_date),1,10) AS call_date'
          . ' FROM customers c LEFT JOIN calls a ON c.cid = a.cid'
          . ' WHERE c.cid IN (' . join ( ',', @ids ) . ')'
          . ' GROUP BY c.cid';
        my $tmp1 = dbh_query( $query, 'HASHARRAYREF' );
        $query = 'SELECT c.cid, count(*) AS cnt,'
          . ' SUBSTRING(MAX(o.changed_by),1,10) AS changed_by'
          . ' FROM customers c LEFT JOIN orders o ON c.cid = o.cid'
          . ' WHERE c.cid IN (' . join ( ',', @ids ) . ')'
          . ' GROUP BY c.cid';
        my $tmp2 = dbh_query( $query, 'HASHARRAYREF' );

        for ( $_ = 0 ; $_ < scalar(@$ret) ; $_++ ) {
            my $cid        = int $ret->[$_]{'cid'};
            my $calls      = $tmp1->{$cid}[0];
            my $orders     = $tmp2->{$cid}[0];
            my $last_call  = $tmp1->{$cid}[1];
            my $last_order = $tmp2->{$cid}[1];
            if ( !defined $last_call ) {
                $calls     = 0;
                $last_call = '';
            }
            if ( !defined $last_order ) {
                $orders     = 0;
                $last_order = '';
            }

            #print STDERR "XXX: $calls, $last_call, $orders, $last_order\n";
            #print STDERR "CID: $cid\n";
            #print STDERR "XXX: " . $tmp1->{$cid}[2] . "|" . $calls . "\n";
            $ret->[$_]{'calls'}      = $calls;
            $ret->[$_]{'last_call'}  = $last_call;
            $ret->[$_]{'orders'}     = $orders;
            $ret->[$_]{'last_order'} = $last_order;
        }
    }

    return $ret;
}    # }}}

sub getNameList    # {{{
{
    my $query = 'SELECT cid, name FROM customers';
    return dbh_query( $query, 'HASH' );
}                  # }}}

sub _createWhere   # {{{
{
    my $filter = shift;
    my @ret_ar = ();
    my $key;
    my $val;
    foreach $key ( keys %$filter ) {
        $val = $filter->{$key};
        next if ( $key !~ /^(cid|ico|name|website|phone)$/ );
        next if ( !length $val );
        if ( $key eq 'cid' ) {
            push @ret_ar, sprintf( '%s = %d', $key, $val ) if ( $val =~ /\d+/ );
            next;
        }
        push @ret_ar, sprintf( 'LOWER(%s) LIKE LOWER(%s)',
            $key, dbh_quote( '%' . $val . '%' ) );
    }
    return join ( ' AND ', @ret_ar );
}    # }}}

sub _createOrder    # {{{
{
    my $key = shift;
    return '' if ( not defined $key );
    return '' if ( $key !~ /^[-]?(cid|ico|name|website|phone)$/ );
    return substr( $key, 1 ) . ' DESC' if ( substr( $key, 0, 1 ) eq '-' );
    return $key;
}                   # }}}

1;

__END__

=head1 NAME

Customer - <<<description of module>>>

=head1 SYNOPSIS

use Customer;

my $xxx = new Customer;

=head1 DESCRIPTION

The Customer 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