summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--LedgerSMB/Admin.pm179
-rw-r--r--LedgerSMB/DBObject/User.pm80
-rw-r--r--LedgerSMB/Employee.pm91
3 files changed, 350 insertions, 0 deletions
diff --git a/LedgerSMB/Admin.pm b/LedgerSMB/Admin.pm
new file mode 100644
index 00000000..8e6c5dfd
--- /dev/null
+++ b/LedgerSMB/Admin.pm
@@ -0,0 +1,179 @@
+package LedgerSMB::DBObject::Admin;
+
+use base LedgerSMB::DBObject;
+
+use LedgerSMB::DBObject::Location;
+use LedgerSMB::DBObject::Employee;
+use LedgerSMB::DBObject::Contact;
+
+sub save_user {
+
+ my $self = shift @_;
+
+ my $entity_id = shift @{ $self->exec_method( procname => "save_user" ) };
+ $self->merge($entity_id);
+
+ my $employee = LedgerSMB::DBObject::Employee->new(base=>$self, copy=>'list',
+ merge=>[
+ 'salutation',
+ 'first_name',
+ 'last_name',
+ 'employeenumber',
+ ]
+ );
+
+ $employee->{entity_id} = $entity_id->{id};
+ $employee->save_employee();
+
+ my $loc = LedgerSMB::DBObject::Location->new(base=>$self, copy=>'list',
+ merge=>[
+ 'address1',
+ 'address2',
+ 'city',
+ 'state',
+ 'zipcode',
+ 'country',
+ 'companyname',
+ ]
+ );
+ $loc->save_location();
+ $loc->join_to_person(person=>$employee);
+
+
+ my $contact = LedgerSMB::DBObject::Contact->new(base=>$self, copy=>'list',
+ merge=>[
+ 'workphone',
+ 'homephone',
+ 'email',
+ ]
+ );
+
+ $contact->save_homephone(person=>$employee);
+ $contact->save_workphone(person=>$employee);
+ $contact->save_email(person=>$employee);
+
+ my $roles = $self->exec_method( procname => "all_roles" );
+ my $user_roles = $self->exec_method(procname => "get_user_roles", args=>[ $self->{ modifying_user } ] );
+
+ my %active_roles;
+ for my $role (@{$user_roles}) {
+
+ # These are our user's roles.
+
+ $active_roles{$role} = 1;
+ }
+
+ my $status;
+
+ for my $role ( @{ $roles } ) {
+
+ # These roles are were ALL checked on the page, so they're the active ones.
+
+ if ($active_roles{$role} && $self->{incoming_roles}->{$role}) {
+
+ # do nothing.
+ }
+ elsif ($active_roles{$role} && !($self->{incoming_roles}->{$role} )) {
+
+ # do remove function
+ $status = $self->exec_method(procname => "remove_user_from_role",
+ args=>[ $self->{ modifying_user }, $role ]
+ }
+ elsif ($self->{incoming_roles}->{$role} and !($active_roles{$role} )) {
+
+ # do add function
+ $status = $self->exec_method(procname => "add_user_to_role",
+ args=>[ $self->{ modifying_user }, $role ]
+ );
+ }
+ }
+}
+
+sub save_group {
+
+ my $self = shift @_;
+
+ my $existant = shift @{ $self->exec_method (procname=> "is_group", args=>[$self->{modifying_group}]) };
+
+ my $group = shift @{ $self->exec_method (procname=> "save_group") };
+
+ # first we grab all roles
+
+ my $roles = $self->exec_method( procname => "all_roles" );
+ my $user_roles = $self->exec_method(procname => "get_user_roles",
+ args=>[ $self->{ group_name } ]
+ );
+
+ my %active_roles;
+ for my $role (@{$user_roles}) {
+
+ # These are our user's roles.
+
+ $active_roles{$role} = 1;
+ }
+
+ my $status;
+
+ for my $role ( @{ $roles } ) {
+
+ # These roles are were ALL checked on the page, so they're the active ones.
+
+ if ($active_roles{$role} && $self->{incoming_roles}->{$role}) {
+
+ # we don't need to do anything.
+ }
+ elsif ($active_roles{$role} && !($self->{incoming_roles}->{$role} )) {
+
+ # do remove function
+ $status = $self->exec_method(
+ procname => "remove_group_from_role",
+ args=>[ $self->{ modifying_user }, $role ]
+ );
+ }
+ elsif ($self->{incoming_roles}->{$role} and !($active_roles{$role} )) {
+
+ # do add function
+ $status = $self->exec_method(
+ procname => "add_group_to_role",
+ args=>[ $self->{ modifying_user }, $role ]
+ );
+ }
+ }
+}
+
+
+sub delete_user {
+
+ my $self = shift @_;
+
+ my $status = shift @{ $self->exec_method(procname=>'delete_user', args=>[$self->{modifying_user}]) };
+
+ if ($status) {
+
+ return 1;
+ } else {
+
+ my $error = LedgerSMB::Error->new("Delete user failed.");
+ $error->set_status($status);
+ return $error;
+ }
+}
+
+sub delete_group {
+
+ my $self = shift @_;
+
+ my $status = shift @{ $self->exec_method(procname=>'delete_group', args=>[$self->{groupname}])};
+
+ if ($status) {
+
+ return 1;
+ } else {
+
+ my $error = LedgerSMB::Error->new("Delete group failed.");
+ $error->set_status($status);
+ return $error;
+ }
+}
+
+1; \ No newline at end of file
diff --git a/LedgerSMB/DBObject/User.pm b/LedgerSMB/DBObject/User.pm
new file mode 100644
index 00000000..c84c6336
--- /dev/null
+++ b/LedgerSMB/DBObject/User.pm
@@ -0,0 +1,80 @@
+package LedgerSMB::DBObject::User;
+
+use base qw/LedgerSMB::DBObject/;
+
+sub save {
+
+ my $self = shift @_;
+
+ my $user = $self->get();
+
+ if ( $user->{id} && $self->{is_a_user} ) {
+
+ # doesn't check for the password - that's done in the sproc.
+ $self->{id} = shift @{ $self->exec_method(procname=>'admin__save_user',
+ args=>[$user->{id}, $self->{username}, $self->{password}] ) };
+ if (!$self->{id}) {
+
+ return 0;
+ }
+ }
+ elsif ($user && !$self->{is_a_user}) {
+
+ # there WAS a user, and we've decided we want that user to go away now.
+
+ $self->{id} = $user->{id};
+ return $self->remove();
+
+ }
+ elsif ($self->{is_a_user}) {
+
+ # No user ID, meaning, creating a new one.
+ $self->{id} = shift @{ $self->exec_method(procname=>'admin__save_user',
+ args=>[undef, $self->{username}, $self->{password}] ) };
+ }
+ return 1;
+}
+
+sub get {
+
+ my $self = shift @_;
+
+ my ($user_id, $username) = @{ $self->exec_method(procname=>'admin__get_user',
+ args=>[$self->{id}])};
+
+ return {id=>$user_id, username=>$username};
+}
+
+sub remove {
+
+ my $self = shift;
+
+ my $code = $self->exec_method(procname=>"admin__delete_user", args=>[$self->{id}, $self->{username}]);
+ $self->{id} = undef; # never existed..
+
+ return $code->[0];
+}
+
+sub save_prefs {
+
+ my $self = shift @_;
+
+ my $pref_id = $self->exec_method(procname=>"admin__save_preferences",
+ args=>[
+ 'language',
+ 'stylesheet',
+ 'printer',
+ 'dateformat',
+ 'numberformat'
+ ]
+ );
+}
+
+sub get_all_users {
+
+ my $self = shift @_;
+
+ $self->{users} = $self->exec_method( procname=>"user__get_all_users" );
+}
+
+1;
diff --git a/LedgerSMB/Employee.pm b/LedgerSMB/Employee.pm
new file mode 100644
index 00000000..e792aa84
--- /dev/null
+++ b/LedgerSMB/Employee.pm
@@ -0,0 +1,91 @@
+
+=head1 NAME
+
+LedgerSMB::Employee - LedgerSMB class for managing Employees
+
+=head1 SYOPSIS
+
+This module creates object instances based on LedgerSMB's in-database ORM.
+
+=head1 METHODS
+
+The following method is static:
+
+=over
+
+=item new ($LedgerSMB object);
+
+=back
+
+The following methods are passed through to stored procedures via Autoload.
+
+=over
+
+=item save
+
+=item get
+
+=item search
+
+=item list_managers
+
+The above list may grow over time, and may depend on other installed modules.
+
+=back
+
+=head1 Copyright (C) 2007, The LedgerSMB core team.
+
+This file is licensed under the Gnu General Public License version 2, or at your
+option any later version. A copy of the license should have been included with
+your software.
+
+=cut
+
+package LedgerSMB::Employee;
+use base qw(LedgerSMB::DBObject);
+use strict;
+our $VERSION = '1.0.0';
+
+sub save {
+ my $self = shift;
+
+ my $hashref = shift @{ $self->exec_method( procname => "employee_save" ) };
+ $self->merge( $hashref, 'id' );
+}
+
+sub get {
+ my $self = shift;
+ my $hashref = shift @{ $self->exec_method( procname => "employee_get" ) };
+ $self->merge( $hashref, keys %{$hashref} );
+}
+
+sub list_managers {
+ my $self = shift;
+ $self->{manager_list} =
+ $self->exec_method( procname => "employee_list_managers" );
+}
+
+sub search {
+ my $self = shift;
+ $self->{search_results} =
+ $self->exec_method( procname => "employee_search" );
+}
+
+sub set_location {
+
+ my $self = shift @_;
+ my $location = shift @_;
+
+ my $code = $self->exec_method ( procname => 'employee_set_location',
+ args=>[ $self->{id}, $location->{id} ] );
+
+ if ($code) {
+
+ # good, it worked.
+
+ return 1;
+ }
+ return 0;
+}
+
+1;