[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

SF.net SVN: ledger-smb: [2213] trunk/LedgerSMB



Revision: 2213
          http://ledger-smb.svn.sourceforge.net/ledger-smb/?rev=2213&view=rev
Author:   aurynn_cmd
Date:     2008-07-11 13:20:58 -0700 (Fri, 11 Jul 2008)

Log Message:
-----------
Re-adding my admin-specific stuff.

Added Paths:
-----------
    trunk/LedgerSMB/Admin.pm
    trunk/LedgerSMB/DBObject/User.pm
    trunk/LedgerSMB/Employee.pm

Added: trunk/LedgerSMB/Admin.pm
===================================================================
--- trunk/LedgerSMB/Admin.pm	                        (rev 0)
+++ trunk/LedgerSMB/Admin.pm	2008-07-11 20:20:58 UTC (rev 2213)
@@ -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

Added: trunk/LedgerSMB/DBObject/User.pm
===================================================================
--- trunk/LedgerSMB/DBObject/User.pm	                        (rev 0)
+++ trunk/LedgerSMB/DBObject/User.pm	2008-07-11 20:20:58 UTC (rev 2213)
@@ -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;

Added: trunk/LedgerSMB/Employee.pm
===================================================================
--- trunk/LedgerSMB/Employee.pm	                        (rev 0)
+++ trunk/LedgerSMB/Employee.pm	2008-07-11 20:20:58 UTC (rev 2213)
@@ -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;


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.