diff options
-rw-r--r-- | LedgerSMB/DBObject/Admin.pm | 9 | ||||
-rw-r--r-- | LedgerSMB/DBObject/Location.pm | 1 | ||||
-rw-r--r-- | LedgerSMB/DBObject/User.pm | 16 | ||||
-rw-r--r-- | UI/Admin/edit_user.html | 12 | ||||
-rw-r--r-- | scripts/admin.pl | 60 | ||||
-rw-r--r-- | sql/modules/Person.sql | 53 |
6 files changed, 107 insertions, 44 deletions
diff --git a/LedgerSMB/DBObject/Admin.pm b/LedgerSMB/DBObject/Admin.pm index 5ab869b0..e16e5dea 100644 --- a/LedgerSMB/DBObject/Admin.pm +++ b/LedgerSMB/DBObject/Admin.pm @@ -264,4 +264,11 @@ sub get_countries { $self->debug({file => '/tmp/user'}); return $self->{countries}; } -1; +sub get_contact_classes { + + my $self = shift @_; + my $sth = $self->{dbh}->prepare("select id, class as classname from contact_class"); + my $code = $sth->execute(); + return $sth->fetchall_arrayref({}); +} +1;
\ No newline at end of file diff --git a/LedgerSMB/DBObject/Location.pm b/LedgerSMB/DBObject/Location.pm index 3deb967f..1b7e2699 100644 --- a/LedgerSMB/DBObject/Location.pm +++ b/LedgerSMB/DBObject/Location.pm @@ -69,5 +69,6 @@ sub get_all { my $type = shift @_; my @locations = $self->exec_method(funcname=>$type."__all_locations", args=>[$user_id]); + return \@locations; } 1;
\ No newline at end of file diff --git a/LedgerSMB/DBObject/User.pm b/LedgerSMB/DBObject/User.pm index 7682acbe..0ca6bcfc 100644 --- a/LedgerSMB/DBObject/User.pm +++ b/LedgerSMB/DBObject/User.pm @@ -141,4 +141,20 @@ sub roles { } +sub save_contact { + + my $self = shift @_; + my $id = shift @_; + my $contact = shift @_; + + my @ret = $self->exec_method(funcname=>"person__save_contact", + args=>[ + $self->{entity_id}, + $self->{contacts}->[$id]->{contact_class}, + $self->{contacts}->[$id]->{contact}, + $contact + ] + ); +} + 1; diff --git a/UI/Admin/edit_user.html b/UI/Admin/edit_user.html index c77406a2..536b8ffa 100644 --- a/UI/Admin/edit_user.html +++ b/UI/Admin/edit_user.html @@ -195,11 +195,13 @@ <tr> <td></td> <td> - <select name="class"> - <?lsmb FOREACH class IN contact_classes?> - <option name="<?lsmb class.id?>" <?lsmb IF contact.contact_class_id == class.id?>selected<?lsmb END?>><?lsmb class.contact?></option> - <?lsmb END?> - </select> + <?lsmb PROCESS select element_data = { + name = "contact_class" + options = contact_classes + default_values = [contact.contact_class_id] + value_attr = "id" + text_attr = "classname" + } ?> </td> <td> <input type="textarea" name="contact" value="<?lsmb contact.contact?>"/> diff --git a/scripts/admin.pl b/scripts/admin.pl index 9a09f40f..3a92425c 100644 --- a/scripts/admin.pl +++ b/scripts/admin.pl @@ -62,9 +62,9 @@ sub edit_user { # uses the same page as create_user, only pre-populated. my ($request) = @_; my $admin = LedgerSMB::DBObject::Admin->new(base=>$request, copy=>'user_id'); - my $user = LedgerSMB::DBObject::User->new(base=>$request, copy=>'user_id'); - - $user->get($request->{user_id}); + my $user_obj = LedgerSMB::DBObject::User->new(base=>$request, copy=>'user_id'); + $user_obj->{company} = $request->{company}; + $user_obj->get($request->{user_id}); my @all_roles = $admin->get_roles(); @@ -75,16 +75,19 @@ sub edit_user { format => 'HTML', path=>'UI' ); - + my $location = LedgerSMB::DBObject::Location->new(base=>$request); my $template_data = { - user=>$user, + user=>$user_obj, roles=>@all_roles, countries=>$admin->get_countries(), - user_roles=>$user->{roles}, + user_roles=>$user_obj->{roles}, salutations=>$admin->get_salutations(), - locations=>$location->get_all($u_id,"person"), + contact_classes=>$admin->get_contact_classes(), + locations=>$location->get_all($user_obj->{entity_id},"person"), }; + print STDERR Dumper($template_data->{contact_classes}); + print STDERR Dumper($template_data->{user_roles}); if ($request->type() eq 'POST') { $admin->save_user(); @@ -94,10 +97,8 @@ sub edit_user { else { # print STDERR Dumper($user); # print STDERR Dumper(@all_roles); - my $loc; - my $location = LedgerSMB::DBObject::Location->new(base=>$request); if ($request->{location_id}) { - $loc = $location->get($request->{location_id}); + $template_data->{location} = $location->get($request->{location_id}); } $template->render($template_data); } @@ -248,7 +249,7 @@ sub main { $template->render( { users=>$user->{users} } ); } -sub edit_contact { +sub save_contact { my $request = shift @_; @@ -258,13 +259,39 @@ sub edit_contact { # We have a contact ID, ie, something we made up. my $c_id = $request->{contact_id}; my $u_id = $request->{user_id}; - my $user = LedgerSMB::DBObject::User->new(base=>$request, copy=>'user_id'); - $user->get($u_id); + my $user_obj = LedgerSMB::DBObject::User->new(base=>$request, copy=>'list', merge=>['user_id','company']); + $user_obj->get($u_id); # so we have a user object. # ->{contacts} is an arrayref to the list of contacts this user has # $request->{contact_id} is a reference to this structure. + $user_obj->save_contact($c_id); + + my $admin = LedgerSMB::DBObject::Admin->new(base=>$request, copy=>'user_id'); + + $user_obj->get($request->{user_id}); + + my @all_roles = $admin->get_roles(); + + my $template = LedgerSMB::Template->new( + user => $user, + template => 'Admin/edit_user', + language => $user->{language}, + format => 'HTML', + path=>'UI' + ); + my $template_data = + { + user=>$user_obj, + roles=>@all_roles, + countries=>$admin->get_countries(), + user_roles=>$user_obj->{roles}, + salutations=>$admin->get_salutations(), + contact_classes=>$admin->get_contact_classes(), + locations=>$location->get_all($user_obj->{entity_id},"person"), + }; + $template->render($template_data); } } @@ -293,13 +320,6 @@ sub delete_contact { } } -sub new_contact { - - my $request = shift @_; - - -} - sub save_location { my $request = shift @_; diff --git a/sql/modules/Person.sql b/sql/modules/Person.sql index f942b137..546398e9 100644 --- a/sql/modules/Person.sql +++ b/sql/modules/Person.sql @@ -117,32 +117,49 @@ BEGIN END; $$ LANGUAGE plpgsql; +-- + CREATE OR REPLACE FUNCTION person__save_contact -(in_entity_id int, in_contact_class int, in_contact text) +(in_entity_id int, in_contact_class int, in_contact_orig text, in_contact_new TEXT) RETURNS INT AS $$ -DECLARE out_id int; +DECLARE + out_id int; + v_orig person_to_contact; BEGIN - INSERT INTO person_to_contact(person_id, contact_class_id, contact) - SELECT id, in_contact_class, in_contact FROM person - WHERE entity_id = in_entity_id; - - RETURN 1; + + SELECT cc.* into v_orig + FROM contact_class cc, person p + WHERE p.entity_id = in_entity_id + and contact_class = in_contact_class + AND contact = in_contact_orig + AND cc.person_id = p.id; + IF NOT FOUND THEN + + -- create + INSERT INTO person_to_contact(person_id, contact_class_id, contact) + VALUES ( + (SELECT id FROM person WHERE entity_id = in_entity_id), + in_contact_class, + in_contact_new + ); + return 1; + ELSE + -- edit. + UPDATE person_to_contact + SET contact = in_contact_new + WHERE + contact = in_contact_orig + AND person_id = v_orig.person_id + AND contact_class = in_contact_class; + return 0; + END IF; + END; $$ LANGUAGE PLPGSQL; +-- -/*( - unknown, - unknown, - unknown, - unknown, - unknown, - unknown, - unknown, - unknown) - -*/ create or replace function person__save_location( in_entity_id int, in_location_id int, |