- #=====================================================================
- # LedgerSMB
- # Small Medium Business Accounting software
- # http://www.ledgersmb.org/
- #
- # Copyright (C) 2006
- # This work contains copyrighted information from a number of sources all used
- # with permission.
- #
- # This file contains source code included with or based on SQL-Ledger which
- # is Copyright Dieter Simader and DWS Systems Inc. 2000-2005 and licensed
- # under the GNU General Public License version 2 or, at your option, any later
- # version. For a full list including contact information of contributors,
- # maintainers, and copyright holders, see the CONTRIBUTORS file.
- #
- # Original Copyright Notice from SQL-Ledger 2.6.17 (before the fork):
- # Copyright (C) 2003
- #
- # Author: DWS Systems Inc.
- # Web: http://www.sql-ledger.org
- #
- # Contributors:
- #
- #======================================================================
- #
- # This file has NOT undergone whitespace cleanup.
- #
- #======================================================================
- #
- # backend code for human resources and payroll
- #
- #======================================================================
- package HR;
- sub get_employee {
- my ( $self, $myconfig, $form ) = @_;
- my $dbh = $form->{dbh};
- my $query;
- my $sth;
- my $ref;
- my $notid = "";
- if ( $form->{id} ) {
- $query = qq|SELECT e.* FROM employees e WHERE e.id = ?|;
- $sth = $dbh->prepare($query);
- $sth->execute( $form->{id} )
- || $form->dberror( __FILE__ . ':' . __LINE__ . ':' . $query );
- $ref = $sth->fetchrow_hashref(NAME_lc);
- # check if employee can be deleted, orphaned
- $form->{status} = "orphaned" unless $ref->{login};
- $ref->{employeelogin} = $ref->{login};
- delete $ref->{login};
- for ( keys %$ref ) { $form->{$_} = $ref->{$_} }
- $sth->finish;
- # get manager
- $form->{managerid} *= 1;
- $sth = $dbh->prepare("SELECT name FROM employees WHERE id = ?");
- $sth->execute( $form->{managerid} );
- ( $form->{manager} ) = $sth->fetchrow_array;
- $notid = qq|AND id != | . $dbh->quote( $form->{id} );
- }
- else {
- ( $form->{startdate} ) = $dbh->selectrow_array("SELECT current_date");
- }
- # get managers
- $query = qq|
- SELECT id, name
- FROM employees
- WHERE sales = '1'
- AND role = 'manager'
- $notid
- ORDER BY 2|;
- $sth = $dbh->prepare($query);
- $sth->execute || $form->dberror( __FILE__ . ':' . __LINE__ . ':' . $query );
- while ( $ref = $sth->fetchrow_hashref(NAME_lc) ) {
- push @{ $form->{all_manager} }, $ref;
- }
- $sth->finish;
- $dbh->commit;
- }
- sub save_employee {
- my ( $self, $myconfig, $form ) = @_;
- my $dbh = $form->{dbh};
- my $query;
- my $sth;
- if ( !$form->{id} ) {
- my $uid = localtime;
- $uid .= "$$";
- $query = qq|INSERT INTO employees (name) VALUES ('$uid')|;
- $dbh->do($query)
- || $form->dberror( __FILE__ . ':' . __LINE__ . ':' . $query );
- $query = qq|SELECT id FROM employees WHERE name = '$uid'|;
- $sth = $dbh->prepare($query);
- $sth->execute
- || $form->dberror( __FILE__ . ':' . __LINE__ . ':' . $query );
- ( $form->{id} ) = $sth->fetchrow_array;
- $sth->finish;
- }
- my ( $null, $managerid ) = split /--/, $form->{manager};
- $managerid *= 1;
- $form->{sales} *= 1;
- $form->{employeenumber} =
- $form->update_defaults( $myconfig, "employeenumber", $dbh )
- if !$form->{employeenumber};
- $query = qq|
- UPDATE employees
- SET employeenumber = ?,
- name = ?,
- address1 = ?,
- address2 = ?,
- city = ?,
- state = ?,
- zipcode = ?,
- country = ?,
- workphone = ?,
- homephone = ?,
- startdate = ?,
- enddate = ?,
- notes = ?,
- role = ?,
- sales = ?,
- email = ?,
- ssn = ?,
- dob = ?,
- iban = ?,
- bic = ?,
- managerid = ?
- WHERE id = ?|;
- $sth = $dbh->prepare($query);
- $form->{dob} ||= undef;
- $form->{startdate} ||= undef;
- $form->{enddate} ||= undef;
- $sth->execute(
- $form->{employeenumber}, $form->{name}, $form->{address1},
- $form->{address2}, $form->{city}, $form->{state},
- $form->{zipcode}, $form->{country}, $form->{workphone},
- $form->{homephone}, $form->{startdate}, $form->{enddate},
- $form->{notes}, $form->{role}, $form->{sales},
- $form->{email}, $form->{ssn}, $form->{dob},
- $form->{iban}, $form->{bic}, $managerid,
- $form->{id}
- ) || $form->dberror( __FILE__ . ':' . __LINE__ . ':' . $query );
- $dbh->commit;
- }
- sub delete_employee {
- my ( $self, $myconfig, $form ) = @_;
- # connect to database
- my $dbh = $form->{dbh};
- # delete employee
- my $query = qq|
- DELETE FROM employees
- WHERE id = | . $dbh->quote( $form->{id} );
- $dbh->do($query)
- || $form->dberror( __FILE__ . ':' . __LINE__ . ':' . $query );
- $dbh->commit;
- }
- sub employees {
- my ( $self, $myconfig, $form ) = @_;
- # connect to database
- my $dbh = $form->{dbh};
- my $where = "1 = 1";
- $form->{sort} = ( $form->{sort} ) ? $form->{sort} : "name";
- my @a = qw(name);
- my $sortorder = $form->sort_order( \@a );
- my $var;
- if ( $form->{startdatefrom} ) {
- $where .=
- " AND e.startdate >= " . $dbh->quote( $form->{startdatefrom} );
- }
- if ( $form->{startdateto} ) {
- $where .= " AND e.startddate <= " . $dbh->quote( $form->{startdateto} );
- }
- if ( $form->{name} ne "" ) {
- $var = $dbh->quote( $form->like( lc $form->{name} ) );
- $where .= " AND lower(e.name) LIKE $var";
- }
- if ( $form->{notes} ne "" ) {
- $var = $dbh->quote( $form->like( lc $form->{notes} ) );
- $where .= " AND lower(e.notes) LIKE $var";
- }
- if ( $form->{sales} eq 'Y' ) {
- $where .= " AND e.sales = '1'";
- }
- if ( $form->{status} eq 'orphaned' ) {
- $where .= qq| AND e.login IS NULL|;
- }
- if ( $form->{status} eq 'active' ) {
- $where .= qq| AND e.enddate IS NULL|;
- }
- if ( $form->{status} eq 'inactive' ) {
- $where .= qq| AND e.enddate <= current_date|;
- }
- my $query = qq|
- SELECT e.*, m.name AS manager
- FROM employees e
- LEFT JOIN employees m ON (m.id = e.managerid)
- WHERE $where
- ORDER BY $sortorder|;
- my $sth = $dbh->prepare($query);
- $sth->execute || $form->dberror( __FILE__ . ':' . __LINE__ . ':' . $query );
- while ( my $ref = $sth->fetchrow_hashref(NAME_lc) ) {
- $ref->{address} = "";
- for (qw(address1 address2 city state zipcode country)) {
- $ref->{address} .= "$ref->{$_} ";
- }
- push @{ $form->{all_employee} }, $ref;
- }
- $sth->finish;
- $dbh->commit;
- }
- 1;
|