summaryrefslogtreecommitdiff
path: root/LedgerSMB/Admin.pm
diff options
context:
space:
mode:
authoraurynn_cmd <aurynn_cmd@4979c152-3d1c-0410-bac9-87ea11338e46>2007-09-10 23:02:09 +0000
committeraurynn_cmd <aurynn_cmd@4979c152-3d1c-0410-bac9-87ea11338e46>2007-09-10 23:02:09 +0000
commit74afbb457aac6a1f6e2d4a2357768f710977a640 (patch)
treecc06c426397d05c5f1dc12eb40b0883f7d3b0854 /LedgerSMB/Admin.pm
parent928290e80924da702b9041a30dd776ad34d24ba9 (diff)
Creation of next-gen admin.pl, admin.pm, and admin.sql systems.
Admin.pm defines the new controller admin.pl is the direct view-backing software. POD is not completed, will be provided shortly. Full UI templates provided for the Reconciliation, Vendor, Customer, and Employee as well. UI/ is being delineated by subdirectories for Admin, Vendor, Customer and Employee, to date. Minor whitespace cleanup. git-svn-id: https://ledger-smb.svn.sourceforge.net/svnroot/ledger-smb/trunk@1557 4979c152-3d1c-0410-bac9-87ea11338e46
Diffstat (limited to 'LedgerSMB/Admin.pm')
-rw-r--r--LedgerSMB/Admin.pm179
1 files changed, 179 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