From 14b2944fd8d813757ab7ecc150a1e80439cfddf8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Tue, 26 Apr 2016 17:57:13 +0200 Subject: [PATCH] Continued a lot more: - added ability to link any contact with user and/or customer accounts (later is unfinished) - to make thism working, a controller method selectableContacts() is needed (cached) - also the event for administrators adding users (customers missing!) must be observed to remove contact from selectable list - because of the above, the HTML form can no longer validate required="true", it must be done by the controller (ugly exceptions for now) - some beans/controllers loaded/injected - added missing i18n strings - fixed some exception messages - ignored strings for i18n - changed CSS class in admin area pages from small to medium (needs more space) - removed double underscore (one removed) MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Roland Häder --- .../localization/bundle_de_DE.properties | 7 ++ .../localization/bundle_en_US.properties | 7 ++ .../contact/PizzaContactWebSessionBean.java | 6 +- .../user/PizzaAdminUserWebRequestBean.java | 89 ++++++++++++--- .../beans/user/PizzaUserWebSessionBean.java | 107 +++++++++++++++++- .../user/PizzaUserWebSessionController.java | 17 +++ .../admin/contact/admin_form_contact_data.tpl | 52 ++++----- .../admin/user/admin_form_user_data.tpl | 20 ++-- web/admin/customer/admin_customer_list.xhtml | 43 +++++-- web/admin/user/admin_user_list.xhtml | 27 ++++- web/resources/css/cssLayout.css | 2 +- 11 files changed, 303 insertions(+), 74 deletions(-) diff --git a/src/java/org/mxchange/localization/bundle_de_DE.properties b/src/java/org/mxchange/localization/bundle_de_DE.properties index 47969ef9..5613871f 100644 --- a/src/java/org/mxchange/localization/bundle_de_DE.properties +++ b/src/java/org/mxchange/localization/bundle_de_DE.properties @@ -327,3 +327,10 @@ BUTTON_ADMIN_ADD_CUSTOMER=Kunde hinzuf\u00fcgen ADMIN_ADD_CUSTOMER_TITLE=Neuen Kunden anlegen ADMIN_CUSTOMER_PERSONAL_DATA_MINIMUM_NOTICE=Die Kundennummer wird automatisch vergeben. Bitte mindestens Anrede, Vor- und Nachname eingeben. PAGE_TITLE_LOGIN_AREA=Benutzerbereich +ADMIN_SELECT_USER_CONTACT_LEGEND=Kontakt f\u00fcr neues Benutzeraccount ausw\u00e4hlen: +ADMIN_SELECT_USER_CONTACT_LEGEND_TITLE=W\u00e4hlen Sie entweder einen Kontakt aus, der mit dem neuen Benutzeraccount verkn\u00fcpft werden soll ... +ADMIN_SELECT_USER_CONTACT=Kontakt zum Verkn\u00fcpfen ausw\u00e4hlen: +ADMIN_ADD_OR_ENTER_CONTACT_DATA=... oder geben Sie mindestens Vorname, Nachname und Anrede ein (Benutzername und Email-Adresse nicht vergessen): +ADMIN_SELECT_CUSTOMER_CONTACT_LEGEND=Kontakt f\u00fcr neuen Kunden ausw\u00e4hlen: +ADMIN_SELECT_CUSTOMER_CONTACT_LEGEND_TITLE=W\u00e4hlen Sie entweder einen Kontakt aus, der mit dem neuen Kunden verkn\u00fcpft werden soll ... +ADMIN_SELECT_CUSTOMER_CONTACT=Kontakt zum Verkn\u00fcpfen ausw\u00e4hlen: diff --git a/src/java/org/mxchange/localization/bundle_en_US.properties b/src/java/org/mxchange/localization/bundle_en_US.properties index 38b85205..faaec2c5 100644 --- a/src/java/org/mxchange/localization/bundle_en_US.properties +++ b/src/java/org/mxchange/localization/bundle_en_US.properties @@ -328,3 +328,10 @@ ADMIN_MENU_CUSTOMER_TITLE=Customer management BUTTON_ADMIN_ADD_CUSTOMER=Add customer ADMIN_ADD_CUSTOMER_TITLE=Create new customer ADMIN_CUSTOMER_PERSONAL_DATA_MINIMUM_NOTICE=The customer number is being created automatically. Please enter at least gender, first name and family name. +ADMIN_SELECT_USER_CONTACT_LEGEND=Select contact for new user account: +ADMIN_SELECT_USER_CONTACT_LEGEND_TITLE=Whether choose a contact that should be linked with the new user account or ... +ADMIN_SELECT_USER_CONTACT=Select contact for linking: +ADMIN_ADD_OR_ENTER_CONTACT_DATA=or enter gender, first name and family name (don't forget to enter user name and email address): +ADMIN_SELECT_CUSTOMER_CONTACT_LEGEND=Select contact for new customer account: +ADMIN_SELECT_CUSTOMER_CONTACT_LEGEND_TITLE=Whether choose a contact that should be linked with the new customer account or ... +ADMIN_SELECT_CUSTOMER_CONTACT=Select contact for linking: diff --git a/src/java/org/mxchange/pizzaapplication/beans/contact/PizzaContactWebSessionBean.java b/src/java/org/mxchange/pizzaapplication/beans/contact/PizzaContactWebSessionBean.java index 0de36a38..f8542a9c 100644 --- a/src/java/org/mxchange/pizzaapplication/beans/contact/PizzaContactWebSessionBean.java +++ b/src/java/org/mxchange/pizzaapplication/beans/contact/PizzaContactWebSessionBean.java @@ -237,13 +237,13 @@ public class PizzaContactWebSessionBean implements PizzaContactWebSessionControl throw new NullPointerException("event is null"); //NOI18N } else if (event.getUpdatedContact()== null) { // Throw NPE again - throw new NullPointerException("event.user is null"); //NOI18N + throw new NullPointerException("event.updatedUser is null"); //NOI18N } else if (event.getUpdatedContact().getContactId() == null) { // userId is null - throw new NullPointerException("event.user.userId is null"); //NOI18N + throw new NullPointerException("event.updatedUser.userId is null"); //NOI18N } else if (event.getUpdatedContact().getContactId() < 1) { // Not avalid id - throw new IllegalArgumentException(MessageFormat.format("userId of user={0} is not valid: {1}", event.getUpdatedContact(), event.getUpdatedContact().getContactId())); //NOI18N + throw new IllegalArgumentException(MessageFormat.format("contactId of contact={0} is not valid: {1}", event.getUpdatedContact(), event.getUpdatedContact().getContactId())); //NOI18N } // Get iterator from list diff --git a/src/java/org/mxchange/pizzaapplication/beans/user/PizzaAdminUserWebRequestBean.java b/src/java/org/mxchange/pizzaapplication/beans/user/PizzaAdminUserWebRequestBean.java index 6f98b9c6..6000c201 100644 --- a/src/java/org/mxchange/pizzaapplication/beans/user/PizzaAdminUserWebRequestBean.java +++ b/src/java/org/mxchange/pizzaapplication/beans/user/PizzaAdminUserWebRequestBean.java @@ -143,36 +143,87 @@ public class PizzaAdminUserWebRequestBean implements PizzaAdminUserWebRequestCon @Override public String addUser () { // Create new user instance - User localUser = new LoginUser(); + User user = new LoginUser(); + + // As the form cannot validate the data (required="true"), check it here + if (this.getUserName() == null) { + // Throw NPE + throw new NullPointerException("userName is null"); //NOI18N + } else if (this.getUserName().isEmpty()) { + // Is empty + throw new IllegalArgumentException("userName is null"); //NOI18N + } else if (this.adminHelper.getContact() == null) { + // No contact instance set, so test required fields: gender, first name and family name + if (this.contactController.getGender() == null) { + // Throw NPE again + throw new NullPointerException("contactController.gender is null"); //NOI18N + } else if (this.contactController.getFirstName() == null) { + // ... and again + throw new NullPointerException("contactController.firstName is null"); //NOI18N //NOI18N + } else if (this.contactController.getFirstName().isEmpty()) { + // ... and again + throw new IllegalArgumentException("contactController.firstName is empty"); + } else if (this.contactController.getFamilyName() == null) { + // ... and again + throw new NullPointerException("contactController.familyName is null"); //NOI18N + } else if (this.contactController.getFamilyName().isEmpty()) { + // ... and again + throw new IllegalArgumentException("contactController.familyName is empty"); //NOI18N //NOI18N + } else if (this.contactController.getEmailAddress()== null) { + // ... and again + throw new NullPointerException("contactController.emailAddress is null"); + } else if (this.contactController.getEmailAddress().isEmpty()) { + // ... and again + throw new IllegalArgumentException("contactController.emailAddress is empty"); //NOI18N //NOI18N + } else if (this.contactController.getEmailAddressRepeat()== null) { + // ... and again + throw new NullPointerException("contactController.emailAddressRepeat is null"); + } else if (this.contactController.getEmailAddressRepeat().isEmpty()) { + // ... and again + throw new IllegalArgumentException("contactController.emailAddressRepeat is empty"); //NOI18N //NOI18N + } else if (!Objects.equals(this.contactController.getEmailAddress(), this.contactController.getEmailAddressRepeat())) { + // Is not same email address + throw new IllegalArgumentException("Both entered email addresses don't match."); + } + } // Set user name, CONFIRMED and INVISIBLE - localUser.setUserName(this.getUserName()); - localUser.setUserAccountStatus(UserAccountStatus.CONFIRMED); - localUser.setUserProfileMode(ProfileMode.INVISIBLE); + user.setUserName(this.getUserName()); + user.setUserAccountStatus(UserAccountStatus.CONFIRMED); + user.setUserProfileMode(ProfileMode.INVISIBLE); - // Create contact instance - Contact contact = this.contactController.createContactInstance(); + // Init instance + Contact contact; + + // Is a contact instance in helper set? + if (this.adminHelper.getContact() instanceof Contact) { + // Then use it for contact linking + contact = this.adminHelper.getContact(); + } else { + // Create contact instance + contact = this.contactController.createContactInstance(); + } // Set contact in user - localUser.setUserContact(contact); + user.setUserContact(contact); // Init variable for password String password = null; // Is the user name or email address used already? // @TODO Add password length check - if (this.userController.isUserNameRegistered(localUser)) { + if (this.userController.isUserNameRegistered(user)) { // User name is already used - throw new FaceletException(new UserNameAlreadyRegisteredException(localUser)); - } else if (this.contactController.isEmailAddressRegistered(localUser.getUserContact())) { + throw new FaceletException(new UserNameAlreadyRegisteredException(user)); + } else if ((this.adminHelper.getContact() == null) && (this.contactController.isEmailAddressRegistered(user.getUserContact()))) { // Email address is already used - throw new FaceletException(new EmailAddressAlreadyRegisteredException(localUser)); + throw new FaceletException(new EmailAddressAlreadyRegisteredException(user)); } else if ((this.getUserPassword() == null && (this.getUserPasswordRepeat() == null)) || ((this.getUserPassword().isEmpty()) && (this.getUserPasswordRepeat().isEmpty()))) { // Empty password entered, then generate one password = UserUtils.createRandomPassword(PizzaUserWebSessionController.MINIMUM_PASSWORD_LENGTH); } else if (!this.isSamePasswordEntered()) { // Both passwords don't match - throw new FaceletException(new UserPasswordRepeatMismatchException(localUser)); + throw new FaceletException(new UserPasswordRepeatMismatchException(user)); } else { // Both match, so get it from this bean password = this.getUserPassword(); @@ -183,15 +234,21 @@ public class PizzaAdminUserWebRequestBean implements PizzaAdminUserWebRequestCon assert (password.length() >= PizzaUserWebSessionController.MINIMUM_PASSWORD_LENGTH) : "Password is not long enough."; //NOI18N // Encrypt password and set it - localUser.setUserEncryptedPassword(UserUtils.encryptPassword(password)); + user.setUserEncryptedPassword(UserUtils.encryptPassword(password)); // Init updated user instance User updatedUser = null; try { // Now, that all is set, call EJB - updatedUser = this.userBean.addUser(localUser); - } catch (final UserNameAlreadyRegisteredException | EmailAddressAlreadyRegisteredException ex) { + if (this.adminHelper.getContact() instanceof Contact) { + // Link contact with this user + updatedUser = this.userBean.linkUser(user); + } else { + // Add new contact + updatedUser = this.userBean.addUser(user); + } + } catch (final UserNameAlreadyRegisteredException | EmailAddressAlreadyRegisteredException ex) { // Throw again throw new FaceletException(ex); } @@ -253,7 +310,7 @@ public class PizzaAdminUserWebRequestBean implements PizzaAdminUserWebRequestCon throw new NullPointerException("adminHelper.user.userId is null"); //NOI18N //NOI18N } else if (user.getUserId() < 1) { // Invalid id - throw new IllegalStateException(MessageFormat.format("adminHelper.user.userId={0} is invalid", user.getUserId())); + throw new IllegalStateException(MessageFormat.format("adminHelper.user.userId={0} is invalid", user.getUserId())); //NOI18N //NOI18N } else if (this.getUserName() == null) { // Not all required fields are set throw new NullPointerException("this.userName is null"); //NOI18N diff --git a/src/java/org/mxchange/pizzaapplication/beans/user/PizzaUserWebSessionBean.java b/src/java/org/mxchange/pizzaapplication/beans/user/PizzaUserWebSessionBean.java index aa114001..42a83a3a 100644 --- a/src/java/org/mxchange/pizzaapplication/beans/user/PizzaUserWebSessionBean.java +++ b/src/java/org/mxchange/pizzaapplication/beans/user/PizzaUserWebSessionBean.java @@ -16,6 +16,8 @@ */ package org.mxchange.pizzaapplication.beans.user; +import de.chotime.jratecalc.beans.contact.RateCalcContactWebSessionController; +import de.chotime.jratecalc.beans.login.RateCalcUserLoginWebSessionController; import java.text.MessageFormat; import java.util.Collections; import java.util.Iterator; @@ -33,11 +35,13 @@ import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import org.mxchange.jcontacts.contact.Contact; +import org.mxchange.jcontacts.contact.ContactSessionBeanRemote; import org.mxchange.jphone.phonenumbers.cellphone.DialableCellphoneNumber; import org.mxchange.jphone.phonenumbers.fax.DialableFaxNumber; import org.mxchange.jphone.phonenumbers.landline.DialableLandLineNumber; import org.mxchange.jusercore.events.login.UserLoggedInEvent; import org.mxchange.jusercore.events.registration.UserRegisteredEvent; +import org.mxchange.jusercore.events.user.add.AdminAddedUserEvent; import org.mxchange.jusercore.events.user.update.UpdatedUserPersonalDataEvent; import org.mxchange.jusercore.events.user.update.UserUpdatedPersonalDataEvent; import org.mxchange.jusercore.exceptions.UserNotFoundException; @@ -63,6 +67,17 @@ public class PizzaUserWebSessionBean implements PizzaUserWebSessionController { */ private static final long serialVersionUID = 542_145_347_916L; + /** + * Administrative user controller + */ + @Inject + private RateCalcAdminUserWebRequestController adminController; + + /** + * Remote user bean + */ + private final ContactSessionBeanRemote contactBean; + /** * General contact controller */ @@ -75,6 +90,11 @@ public class PizzaUserWebSessionBean implements PizzaUserWebSessionController { @Inject private PizzaUserLoginWebSessionController loginController; + /** + * A list of all selectable contacts + */ + private List selectableContacts; + /** * Event being fired when user updated personal data */ @@ -133,6 +153,9 @@ public class PizzaUserWebSessionBean implements PizzaUserWebSessionController { // Try to lookup this.userBean = (UserSessionBeanRemote) context.lookup("java:global/PizzaService-ejb/user!org.mxchange.jusercore.model.user.UserSessionBeanRemote"); //NOI18N + + // Try to lookup + this.contactBean = (ContactSessionBeanRemote) context.lookup("java:global/PizzaService-ejb/contact!org.mxchange.jcontacts.contact.ContactSessionBeanRemote"); //NOI18N } catch (final NamingException e) { // Throw again throw new FaceletException(e); @@ -187,6 +210,39 @@ public class PizzaUserWebSessionBean implements PizzaUserWebSessionController { System.out.println("UserWebBean:afterRegistration: EXIT!"); //NOI18N } + @Override + public void afterAdminAddedUserEvent (@Observes final AdminAddedUserEvent event) { + // Trace message + System.out.println(MessageFormat.format("ContactWebBean:afterAdminAddedUserEvent: event={0} - CALLED!", event)); //NOI18N + + // The event must be valid + if (null == event) { + // Throw NPE + throw new NullPointerException("event is null"); //NOI18N + } else if (event.getAddedUser() == null) { + // Throw NPE again + throw new NullPointerException("event.addedUser is null"); //NOI18N + } else if (event.getAddedUser().getUserId() == null) { + // userId is null + throw new NullPointerException("event.addedUser.userId is null"); //NOI18N + } else if (event.getAddedUser().getUserId() < 1) { + // Not avalid id + throw new IllegalArgumentException(MessageFormat.format("userId of user={0} is not valid: {1}", event.getAddedUser(), event.getAddedUser().getUserId())); //NOI18N + } else if (event.getAddedUser().getUserContact() == null) { + // userId is null + throw new NullPointerException("event.addedUser.userContact is null"); //NOI18N + } else if (event.getAddedUser().getUserContact().getContactId() == null) { + // userId is null + throw new NullPointerException("event.addedUser.userContact.contactId is null"); //NOI18N + } else if (event.getAddedUser().getUserContact().getContactId() < 1) { + // userId is null + throw new IllegalArgumentException(MessageFormat.format("event.addedUser.userContact.contactId={0} is not valid", event.getAddedUser().getUserContact().getContactId())); //NOI18N + } + + // Remove this contact from selectable list + assert(this.selectableContacts.remove(event.getAddedUser().getUserContact())) : "contact was not removed"; //NOI18N + } + @Override public void afterUserLogin (final @Observes UserLoggedInEvent event) { // Trace message @@ -271,12 +327,12 @@ public class PizzaUserWebSessionBean implements PizzaUserWebSessionController { this.contactController.updateContactDataFromController(user.getUserContact()); // It should be there, so run some tests on it - assert (user instanceof User) : "Instance loginController.loggedInUser is null"; - assert (user.getUserId() instanceof Long) : "Instance loginController.loggedInUser.userId is null"; - assert (user.getUserId() > 0) : MessageFormat.format("loginController.loggedInUser.userId={0} is invalid", user.getUserId()); - assert (user.getUserContact() instanceof Contact) : "Instance loginController.loggedInUser.userContact is null"; - assert (user.getUserContact().getContactId() instanceof Long) : "Instance loginController.userContact.contactId is null"; - assert (user.getUserContact().getContactId() > 0) : MessageFormat.format("Instance loginController.userContact.contactId={0} is invalid", user.getUserContact().getContactId()); + assert (user instanceof User) : "Instance loginController.loggedInUser is null"; //NOI18N + assert (user.getUserId() instanceof Long) : "Instance loginController.loggedInUser.userId is null"; //NOI18N + assert (user.getUserId() > 0) : MessageFormat.format("loginController.loggedInUser.userId={0} is invalid", user.getUserId()); //NOI18N + assert (user.getUserContact() instanceof Contact) : "Instance loginController.loggedInUser.userContact is null"; //NOI18N + assert (user.getUserContact().getContactId() instanceof Long) : "Instance loginController.userContact.contactId is null"; //NOI18N + assert (user.getUserContact().getContactId() > 0) : MessageFormat.format("Instance loginController.userContact.contactId={0} is invalid", user.getUserContact().getContactId()); //NOI18N // Update all fields user.setUserProfileMode(this.getUserProfileMode()); @@ -357,6 +413,40 @@ public class PizzaUserWebSessionBean implements PizzaUserWebSessionController { // Initialize user list this.visibleUserList = this.userBean.allPublicUsers(); } + + // Get all users + List allUsers = this.adminController.allUsers(); + + // Get all contacts + List allContacts = this.contactBean.getAllContacts(); + + // Get iterator + Iterator iterator = allContacts.iterator(); + + // Loop through it + while (iterator.hasNext()) { + // Get next element + Contact next = iterator.next(); + + // Get iterator + Iterator userIterator = allUsers.iterator(); + + // Loop through all users + while (userIterator.hasNext()) { + // Get user instance + User nextUser = userIterator.next(); + + // Is contact same? + if (Objects.equals(next, nextUser.getUserContact())) { + // Found same + iterator.remove(); + break; + } + } + } + + // Set contact list + this.selectableContacts = allContacts; } @Override @@ -429,6 +519,11 @@ public class PizzaUserWebSessionBean implements PizzaUserWebSessionController { return localUser; } + @Override + public List selectableContacts () { + return Collections.unmodifiableList(this.selectableContacts); + } + /** * Adds user's name and email address to bean's internal list. It also * updates the public user list if the user has decided to ha } diff --git a/src/java/org/mxchange/pizzaapplication/beans/user/PizzaUserWebSessionController.java b/src/java/org/mxchange/pizzaapplication/beans/user/PizzaUserWebSessionController.java index 133ddea4..19fef777 100644 --- a/src/java/org/mxchange/pizzaapplication/beans/user/PizzaUserWebSessionController.java +++ b/src/java/org/mxchange/pizzaapplication/beans/user/PizzaUserWebSessionController.java @@ -18,8 +18,10 @@ package org.mxchange.pizzaapplication.beans.user; import java.io.Serializable; import java.util.List; +import org.mxchange.jcontacts.contact.Contact; import org.mxchange.jusercore.events.login.UserLoggedInEvent; import org.mxchange.jusercore.events.registration.UserRegisteredEvent; +import org.mxchange.jusercore.events.user.add.AdminAddedUserEvent; import org.mxchange.jusercore.exceptions.UserNotFoundException; import org.mxchange.jusercore.model.user.User; import org.mxchange.jusercore.model.user.profilemodes.ProfileMode; @@ -36,6 +38,14 @@ public interface PizzaUserWebSessionController extends Serializable { */ public static final Integer MINIMUM_PASSWORD_LENGTH = 5; + /** + * Returns a list of all selectable contacts for user creation. Contacts + * from already existing users are excluded in this list. + *

+ * @return A list of all selectable contacts + */ + List selectableContacts (); + /** * Tries to lookup user by given id number. If the user is not found or the * account status is not CONFIRMED proper exceptions are thrown. @@ -48,6 +58,13 @@ public interface PizzaUserWebSessionController extends Serializable { */ User lookupUserById (final Long userId) throws UserNotFoundException; + /** + * Event observer for newly added users by an administrator + *

+ * @param event Event being fired + */ + void afterAdminAddedUserEvent(final AdminAddedUserEvent event); + /** * Event observer for new user registrations *

diff --git a/web/WEB-INF/templates/admin/contact/admin_form_contact_data.tpl b/web/WEB-INF/templates/admin/contact/admin_form_contact_data.tpl index 76e108b1..8baf888e 100644 --- a/web/WEB-INF/templates/admin/contact/admin_form_contact_data.tpl +++ b/web/WEB-INF/templates/admin/contact/admin_form_contact_data.tpl @@ -10,11 +10,11 @@ #{msg.ADMIN_CONTACT_PERSONAL_DATA_LEGEND}

-
+
-
+
@@ -24,39 +24,35 @@
-
+
-
- - - +
+
-
+
-
- - - +
+
-
+
-
+
@@ -64,11 +60,11 @@
-
+
-
+
@@ -78,11 +74,11 @@
-
+
-
+
@@ -92,11 +88,11 @@
-
+
-
+
@@ -104,11 +100,11 @@
-
+
-
+
@@ -119,11 +115,11 @@
-
+
-
+
@@ -142,11 +138,11 @@
-
+
-
+
@@ -165,11 +161,11 @@
-
+
-
+
diff --git a/web/WEB-INF/templates/admin/user/admin_form_user_data.tpl b/web/WEB-INF/templates/admin/user/admin_form_user_data.tpl index 1b0c1cb8..0958a9fb 100644 --- a/web/WEB-INF/templates/admin/user/admin_form_user_data.tpl +++ b/web/WEB-INF/templates/admin/user/admin_form_user_data.tpl @@ -13,12 +13,12 @@ #{msg.ADMIN_USER_DATA_EMAIL_LEGEND}
-
+
-
- +
+
@@ -28,12 +28,12 @@
-
+
-
- +
+
@@ -43,11 +43,11 @@
-
+
-
+
@@ -55,11 +55,11 @@
-
+
-
+
diff --git a/web/admin/customer/admin_customer_list.xhtml b/web/admin/customer/admin_customer_list.xhtml index 8cd88e59..1b7cce22 100644 --- a/web/admin/customer/admin_customer_list.xhtml +++ b/web/admin/customer/admin_customer_list.xhtml @@ -18,7 +18,7 @@ - #{msg.ADMIN_LIST__CUSTOMER_ID} + #{msg.ADMIN_LIST_CUSTOMER_ID} @@ -26,43 +26,43 @@ - #{msg.ADMIN_LIST__CUSTOMER_NUMBER} + #{msg.ADMIN_LIST_CUSTOMER_NUMBER} - #{msg.ADMIN_LIST__CUSTOMER_GENDER} + #{msg.ADMIN_LIST_CUSTOMER_GENDER} - #{msg.ADMIN_LIST__CUSTOMER_FIRST_NAME} + #{msg.ADMIN_LIST_CUSTOMER_FIRST_NAME} - #{msg.ADMIN_LIST__CUSTOMER_FAMILY_NAME} + #{msg.ADMIN_LIST_CUSTOMER_FAMILY_NAME} - #{msg.ADMIN_LIST__CUSTOMER_ACCOUNT_STATUS} + #{msg.ADMIN_LIST_CUSTOMER_ACCOUNT_STATUS} - #{msg.ADMIN_LIST__CUSTOMER_PROFILE_MODE} + #{msg.ADMIN_LIST_CUSTOMER_PROFILE_MODE} - #{msg.ADMIN_LIST__CUSTOMER_CREATED} + #{msg.ADMIN_LIST_CUSTOMER_CREATED} @@ -70,12 +70,37 @@ -
+
#{msg.ADMIN_ADD_CUSTOMER_TITLE}
+
+
+ #{msg.ADMIN_SELECT_CUSTOMER_CONTACT_LEGEND} + +
+
+ +
+ +
+ + + + +
+ +
+
+
+
+ +
+ +
+