You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by jl...@apache.org on 2009/10/16 13:23:57 UTC

svn commit: r825846 - in /ofbiz/trunk/specialpurpose/pos/src/org/ofbiz/pos: PosTransaction.java screen/ClientProfile.java

Author: jleroux
Date: Fri Oct 16 11:23:56 2009
New Revision: 825846

URL: http://svn.apache.org/viewvc?rev=825846&view=rev
Log:
Modify the Client Profile screen behavior. 
Not having an UserLogin for parties created from the POS was not a good idea.
I will soon update the Till manual to explain how this new feature is supposed to be used, how it works and what it brings to the POS.
A the same time I will also update the Till manual for the other things introduced since its last update (2006/09/15)

Modified:
    ofbiz/trunk/specialpurpose/pos/src/org/ofbiz/pos/PosTransaction.java
    ofbiz/trunk/specialpurpose/pos/src/org/ofbiz/pos/screen/ClientProfile.java

Modified: ofbiz/trunk/specialpurpose/pos/src/org/ofbiz/pos/PosTransaction.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/pos/src/org/ofbiz/pos/PosTransaction.java?rev=825846&r1=825845&r2=825846&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/pos/src/org/ofbiz/pos/PosTransaction.java (original)
+++ ofbiz/trunk/specialpurpose/pos/src/org/ofbiz/pos/PosTransaction.java Fri Oct 16 11:23:56 2009
@@ -98,7 +98,6 @@
     private static PrintWriter defaultPrintWriter = new Log4jLoggerWriter(Debug.getLogger(module));
     private static PosTransaction currentTx = null;
     private static LifoSet<PosTransaction> savedTx = new LifoSet<PosTransaction>();
-    private Locale defaultLocale = Locale.getDefault();
 
     protected XuiSession session = null;
     protected ShoppingCart cart = null;
@@ -113,7 +112,7 @@
     protected String currency = null;
     protected String orderId = null;
     protected String partyId = null;
-    protected Locale locale = null;
+    protected Locale locale = Locale.getDefault();
     protected boolean isOpen = false;
     protected int drawerIdx = 0;
 
@@ -265,7 +264,7 @@
         itemInfo.put("adjustments", "");
         if (item.getOtherAdjustments().compareTo(BigDecimal.ZERO) != 0) {
             itemInfo.put("itemDiscount", UtilFormatOut.padString(
-                    UtilProperties.getMessage(PosTransaction.resource,"PosItemDiscount",defaultLocale), Receipt.pridLength[0] + 1, true, ' '));
+                    UtilProperties.getMessage(resource,"PosItemDiscount", locale), Receipt.pridLength[0] + 1, true, ' '));
             itemInfo.put("adjustments", UtilFormatOut.formatPrice(item.getOtherAdjustments()));
         }
 
@@ -812,7 +811,7 @@
        // cart.setCarrierPartyId();
 
         // validate payment methods
-        output.print(UtilProperties.getMessage(PosTransaction.resource,"PosValidating",defaultLocale));
+        output.print(UtilProperties.getMessage(resource, "PosValidating", locale));
         Map valRes = ch.validatePaymentMethods();
         if (valRes != null && ServiceUtil.isError(valRes)) {
             throw new GeneralException(ServiceUtil.getErrorMessage(valRes));
@@ -820,7 +819,7 @@
 
         // store the "order"
          if (UtilValidate.isEmpty(this.orderId)) {  // if order does not exist
-             output.print(UtilProperties.getMessage(PosTransaction.resource,"PosSaving",defaultLocale));
+             output.print(UtilProperties.getMessage(resource, "PosSaving", locale));
              Map orderRes = ch.createOrder(session.getUserLogin());
              //Debug.log("Create Order Resp : " + orderRes, module);
 
@@ -839,7 +838,7 @@
              svcCtx.put("userLogin", session.getUserLogin());
              svcCtx.put("orderId", orderId);
              svcCtx.put("shoppingCart", cart);
-             svcCtx.put("locale", this.locale);
+             svcCtx.put("locale", locale);
              svcCtx.put("changeMap", changeMap);
 
              Map svcRes = null;
@@ -854,7 +853,7 @@
           }
 
         // process the payment(s)
-        output.print(UtilProperties.getMessage(PosTransaction.resource, "PosProcessing", defaultLocale));
+        output.print(UtilProperties.getMessage(resource, "PosProcessing", locale));
         Map payRes = null;
         try {
             payRes = ch.processPayment(ProductStoreWorker.getProductStore(productStoreId, session.getDelegator()), session.getUserLogin(), true);
@@ -871,7 +870,7 @@
         BigDecimal change = grandTotal.subtract(paymentAmt);
 
         // notify the change due
-        output.print(UtilProperties.getMessage(PosTransaction.resource,"PosChange",defaultLocale) + " " + UtilFormatOut.formatPrice(this.getTotalDue().negate()));
+        output.print(UtilProperties.getMessage(resource,"PosChange",locale) + " " + UtilFormatOut.formatPrice(this.getTotalDue().negate()));
 
         // threaded drawer/receipt printing
         final PosTransaction currentTrans = this;
@@ -977,7 +976,7 @@
                     // append the promo info
                     XModel promo = Journal.appendNode(model, "tr", "itemadjustment", "");
                     Journal.appendNode(promo, "td", "sku", "");
-                    Journal.appendNode(promo, "td", "desc", UtilProperties.getMessage(PosTransaction.resource,"PosItemDiscount",defaultLocale));
+                    Journal.appendNode(promo, "td", "desc", UtilProperties.getMessage(resource, "PosItemDiscount", locale));
                     Journal.appendNode(promo, "td", "qty", "");
                     Journal.appendNode(promo, "td", "price", UtilFormatOut.formatPrice(adjustment));
                 }
@@ -1016,7 +1015,7 @@
                     XModel adjustmentLine = Journal.appendNode(model, "tr", "adjustment", "");
                     Journal.appendNode(adjustmentLine, "td", "sku", "");
                     Journal.appendNode(adjustmentLine, "td", "desc",
-                            UtilProperties.getMessage(PosTransaction.resource, "PosSalesDiscount",defaultLocale));
+                            UtilProperties.getMessage(resource, "PosSalesDiscount", locale));
                     if (UtilValidate.isNotEmpty(amount)) {
                         Journal.appendNode(adjustmentLine, "td", "qty", "");
                         Journal.appendNode(adjustmentLine, "td", "price", UtilFormatOut.formatPrice(amount));
@@ -1033,14 +1032,14 @@
             XModel taxLine = Journal.appendNode(model, "tr", "tax", "");
             Journal.appendNode(taxLine, "td", "sku", "");
 
-            Journal.appendNode(taxLine, "td", "desc", UtilProperties.getMessage(PosTransaction.resource,"PosSalesTax",defaultLocale));
+            Journal.appendNode(taxLine, "td", "desc", UtilProperties.getMessage(resource, "PosSalesTax", locale));
             Journal.appendNode(taxLine, "td", "qty", "");
             Journal.appendNode(taxLine, "td", "price", UtilFormatOut.formatPrice(taxAmount));
             Journal.appendNode(taxLine, "td", "index", "-1");
 
             XModel totalLine = Journal.appendNode(model, "tr", "total", "");
             Journal.appendNode(totalLine, "td", "sku", "");
-            Journal.appendNode(totalLine, "td", "desc", UtilProperties.getMessage(PosTransaction.resource,"PosGrandTotal",defaultLocale));
+            Journal.appendNode(totalLine, "td", "desc", UtilProperties.getMessage(resource, "PosGrandTotal", locale));
             Journal.appendNode(totalLine, "td", "qty", "");
             Journal.appendNode(totalLine, "td", "price", UtilFormatOut.formatPrice(total));
             Journal.appendNode(totalLine, "td", "index", "-1");
@@ -1067,7 +1066,7 @@
                     paymentMethodType = paymentInfoObj;
                 }
 
-                Object desc = paymentMethodType != null ? paymentMethodType.get("description",defaultLocale) : "??";
+                Object desc = paymentMethodType != null ? paymentMethodType.get("description",locale) : "??";
                 String descString = desc.toString();
                 BigDecimal amount = BigDecimal.ZERO;
                 if (inf.amount == null) {
@@ -1405,13 +1404,12 @@
     public void saveOrder(String shoppingListName, PosScreen pos) {
         trace("Save an order");
         if (cart.size() == 0) {
-            pos.showDialog("dialog/error/exception", UtilProperties.getMessage("OrderErrorUiLabels", "OrderUnableToCreateNewShoppingList",locale));
+            pos.showDialog("dialog/error/exception", UtilProperties.getMessage("OrderErrorUiLabels", "OrderUnableToCreateNewShoppingList", locale));
             return;
         }
         Delegator delegator = this.session.getDelegator();
         LocalDispatcher dispatcher = session.getDispatcher();
         GenericValue userLogin = session.getUserLogin();
-        Locale locale = defaultLocale;
         String shoppingListId = null;
 
         if (!UtilValidate.isEmpty(shoppingListName)) {
@@ -1435,13 +1433,12 @@
     public void saveSale(String  shoppingListName, PosScreen pos) {
         trace("Save a sale");
         if (cart.size() == 0) {
-            pos.showDialog("dialog/error/exception", UtilProperties.getMessage("OrderErrorUiLabels", "OrderUnableToCreateNewShoppingList",locale));
+            pos.showDialog("dialog/error/exception", UtilProperties.getMessage("OrderErrorUiLabels", "OrderUnableToCreateNewShoppingList", locale));
             return;
         }
         Delegator delegator = this.session.getDelegator();
         LocalDispatcher dispatcher = session.getDispatcher();
         GenericValue userLogin = session.getUserLogin();
-        Locale locale = defaultLocale;
         String shoppingListId = null;
 
         if (!UtilValidate.isEmpty(shoppingListName)) {
@@ -1456,7 +1453,7 @@
                 newListResult = dispatcher.runSync("createShoppingList", serviceCtx);
             } catch (GenericServiceException e) {
                 Debug.logError(e, "Problem while creating new ShoppingList", module);
-                pos.showDialog("dialog/error/exception", UtilProperties.getMessage("OrderErrorUiLabels", "OrderUnableToCreateNewShoppingList",locale));
+                pos.showDialog("dialog/error/exception", UtilProperties.getMessage("OrderErrorUiLabels", "OrderUnableToCreateNewShoppingList", locale));
                 return;
             }
 
@@ -1473,7 +1470,7 @@
                 shoppingListId = (String) newListResult.get("shoppingListId");
             } else {
                 Debug.logError("Problem while creating new ShoppingList", module);
-                pos.showDialog("dialog/error/exception", UtilProperties.getMessage("OrderErrorUiLabels", "OrderUnableToCreateNewShoppingList",locale));
+                pos.showDialog("dialog/error/exception", UtilProperties.getMessage("OrderErrorUiLabels", "OrderUnableToCreateNewShoppingList", locale));
                 return;
             }
         }
@@ -1488,7 +1485,7 @@
             ShoppingListEvents.addBulkFromCart(delegator, dispatcher, cart, userLogin, shoppingListId, selectedCartItems, true, true);
         } catch (IllegalArgumentException e) {
             Debug.logError(e, "Problem while creating new ShoppingList", module);
-            pos.showDialog("dialog/error/exception", UtilProperties.getMessage("OrderErrorUiLabels", "OrderUnableToCreateNewShoppingList",locale));
+            pos.showDialog("dialog/error/exception", UtilProperties.getMessage("OrderErrorUiLabels", "OrderUnableToCreateNewShoppingList", locale));
         }
     }
 
@@ -1552,11 +1549,14 @@
         dynamicView.addAlias("PT", "partyId");
         dynamicView.addAlias("PT", "statusId");
         dynamicView.addAlias("PT", "partyTypeId");
+        dynamicView.addMemberEntity("PUL", "PartyAndUserLogin");
+        dynamicView.addAlias("PUL", "userLoginId");
         dynamicView.addMemberEntity("PE", "Person");
         dynamicView.addAlias("PE", "partyId");
         dynamicView.addAlias("PE", "lastName");
-        dynamicView.addAlias("PE", "memberId");
+        dynamicView.addAlias("PE", "cardId");
         dynamicView.addViewLink("PT", "PE", Boolean.FALSE, ModelKeyMap.makeKeyMapList("partyId"));
+        dynamicView.addViewLink("PT", "PUL", Boolean.FALSE, ModelKeyMap.makeKeyMapList("partyId"));
 
         Boolean onlyPhone = UtilValidate.isEmpty(name) && UtilValidate.isEmpty(email) && UtilValidate.isNotEmpty(phone) && UtilValidate.isEmpty(card);
         if (UtilValidate.isNotEmpty(email)) {
@@ -1589,7 +1589,7 @@
             // fields we need to select; will be used to set distinct
             fieldsToSelect.add("partyId");
             fieldsToSelect.add("lastName");
-            fieldsToSelect.add("memberId");
+            fieldsToSelect.add("cardId");
             if (UtilValidate.isNotEmpty(email)) {
                 fieldsToSelect.add("infoString");
             } else if (onlyPhone) {
@@ -1600,6 +1600,7 @@
             // This allows to get all clients when any informations has been entered
             andExprs.add(EntityCondition.makeCondition(EntityCondition.makeCondition("statusId", EntityOperator.EQUALS, null), EntityOperator.OR, EntityCondition.makeCondition("statusId", EntityOperator.NOT_EQUAL, "PARTY_DISABLED")));
             andExprs.add(EntityCondition.makeCondition("partyTypeId", EntityOperator.EQUALS, "PERSON")); // Only persons for now...
+            andExprs.add(EntityCondition.makeCondition("userLoginId", EntityOperator.NOT_EQUAL, null)); // Should have a login (which implies an email and phone if created from the POS)
             if (UtilValidate.isNotEmpty(name)) {
                 // andExprs.add(EntityCondition.makeCondition("lastName", EntityOperator.EQUALS, name));  // Plain name 
                 // andExprs.add(EntityCondition.makeCondition("lastName", EntityOperator.LIKE, "%"+name+"%")); // Less restrictive
@@ -1607,7 +1608,7 @@
                 
             }
             if (UtilValidate.isNotEmpty(card)) {
-                andExprs.add(EntityCondition.makeCondition("memberId", EntityOperator.EQUALS, card));
+                andExprs.add(EntityCondition.makeCondition("cardId", EntityOperator.EQUALS, card));
             }
             if (UtilValidate.isNotEmpty(email)) {
                 andExprs.add(EntityCondition.makeCondition("infoString", EntityOperator.EQUALS, email));
@@ -1670,7 +1671,7 @@
                     Map partyMap = FastMap.newInstance();
                     partyMap.put("partyId", party.getString("partyId"));
                     partyMap.put("lastName", party.getString("lastName"));
-                    partyMap.put("memberId", party.getString("memberId"));
+                    partyMap.put("cardId", party.getString("cardId"));
                     if (!onlyPhone && UtilValidate.isNotEmpty(email)) {
                         partyMap.put("infoString", party.getString("infoString"));
                         partyMap.put("contactNumber", "");
@@ -1700,13 +1701,14 @@
     }
 
     public String editClientProfile(String name, String email, String  phone, String card, PosScreen pos, String editType, String partyId) {
-        // We suppose here that a memberId (card number) can only belongs to one person (it's used as owned PromoCode)
+        // We suppose here that a cardId (card number) can only belongs to one person (it's used as owned PromoCode)
         // We use the 1st party's login (it may change and be multiple since it depends on email and card)
         // We suppose only one email address (should be ok anyway because of the contactMechPurposeTypeId == "PRIMARY_EMAIL")
         // we suppose only one phone number (should be ok anyway because of the contactMechPurposeTypeId == "PHONE_HOME")
         Delegator delegator = session.getDelegator();
         LocalDispatcher dispatcher = session.getDispatcher();
         GenericValue userLogin = session.getUserLogin();
+        GenericValue partyUserLogin = null;        
         String result = null;
 
         Map<String, Object> svcCtx = FastMap.newInstance();
@@ -1715,183 +1717,178 @@
         // Create
         if ("create".equals(editType)) {
             trace("Create a client profile");
-            if (UtilValidate.isNotEmpty(name)) {
-                // createPersonAndUserLogin
-                trace("createPersonAndUserLogin");
-                if (UtilValidate.isNotEmpty(card)) {
-                    svcCtx.put("memberId", card);
-                }
-                svcCtx.put("lastName", name);
-                svcCtx.put("firstName", ""); // Needed by service createPersonAndUserLogin
-                svcCtx.put("userLogin", userLogin);
-                if (UtilValidate.isNotEmpty(email) && UtilValidate.isNotEmpty(card)) {
-                    svcCtx.put("userLoginId", email);
-                    svcCtx.put("currentPassword", card);
-                    svcCtx.put("currentPasswordVerify", card);
-                    svcCtx.put("passwordHint", "Your card number is your password");
-                    try {
-                        svcRes = dispatcher.runSync("createPersonAndUserLogin", svcCtx);
-                    } catch (GenericServiceException e) {
-                        Debug.logError(e, module);
-                        pos.showDialog("dialog/error/exception", e.getMessage());
-                       return result;
-                    }
-                    if (ServiceUtil.isError(svcRes)) {
-                        pos.showDialog("dialog/error/exception", ServiceUtil.getErrorMessage(svcRes));
-                        return result;
-                    }
-                    
-                } else {
-                    // createPerson
-                    trace("createPerson");
-                    try {
-                        svcRes = dispatcher.runSync("createPerson", svcCtx);
-                    } catch (GenericServiceException e) {
-                        Debug.logError(e, module);
-                        pos.showDialog("dialog/error/exception", e.getMessage());
-                       return result;
-                    }
-                    if (ServiceUtil.isError(svcRes)) {
-                        pos.showDialog("dialog/error/exception", ServiceUtil.getErrorMessage(svcRes));
-                        return result;
-                    }                    
-                }
-    
-                partyId = (String) svcRes.get("partyId");
+            // createPersonAndUserLogin
+            trace("createPersonAndUserLogin");
+            if (UtilValidate.isNotEmpty(card)) {
+                svcCtx.put("cardId", card);
             }
+            svcCtx.put("userLogin", userLogin);
+            svcCtx.put("lastName", name);
+            svcCtx.put("firstName", ""); // Needed by service createPersonAndUserLogin
+            svcCtx.put("userLoginId", email);
+            svcCtx.put("currentPassword", phone);
+            svcCtx.put("currentPasswordVerify", phone);
+            try {
+                svcRes = dispatcher.runSync("createPersonAndUserLogin", svcCtx);
+            } catch (GenericServiceException e) {
+                Debug.logError(e, module);
+                pos.showDialog("dialog/error/exception", e.getMessage());
+               return null;
+            }
+            if (ServiceUtil.isError(svcRes)) {
+                pos.showDialog("dialog/error/exception", ServiceUtil.getErrorMessage(svcRes));
+                return null;
+            }
+            partyId = (String) svcRes.get("partyId");
+            partyUserLogin = (GenericValue) svcRes.get("newUserLogin");
 
-            if (UtilValidate.isNotEmpty(email)) {
-                // createPartyEmailAddress
-                trace("createPartyEmailAddress");
-                svcCtx.clear();
-                svcCtx.put("userLogin", userLogin);
-                svcCtx.put("emailAddress", email);
-                svcCtx.put("partyId", partyId);
-                svcCtx.put("contactMechPurposeTypeId", "PRIMARY_EMAIL");
-                try {
-                    svcRes = dispatcher.runSync("createPartyEmailAddress", svcCtx);
-                } catch (GenericServiceException e) {
-                    Debug.logError(e, module);
-                    pos.showDialog("dialog/error/exception", e.getMessage());
-                    return result;
-                }
-                if (ServiceUtil.isError(svcRes)) {
-                    pos.showDialog("dialog/error/exception", ServiceUtil.getErrorMessage(svcRes));
-                    return result;
-                }
+            // createPartyEmailAddress
+            trace("createPartyEmailAddress");
+            svcCtx.clear();
+            svcCtx.put("userLogin", partyUserLogin);
+            svcCtx.put("emailAddress", email);
+            svcCtx.put("partyId", partyId);
+            svcCtx.put("contactMechPurposeTypeId", "PRIMARY_EMAIL");
+            try {
+                svcRes = dispatcher.runSync("createPartyEmailAddress", svcCtx);
+            } catch (GenericServiceException e) {
+                Debug.logError(e, module);
+                pos.showDialog("dialog/error/exception", e.getMessage());
+                return null;
+            }
+            if (ServiceUtil.isError(svcRes)) {
+                pos.showDialog("dialog/error/exception", ServiceUtil.getErrorMessage(svcRes));
+                return null;
             }
 
-            if (UtilValidate.isNotEmpty(phone)) {
-                // createPartyTelecomNumber
-                trace("createPartyTelecomNumber");
-                svcCtx.clear();
-                svcCtx.put("userLogin", userLogin);
-                svcCtx.put("contactNumber", phone);
-                svcCtx.put("partyId", partyId);
-                svcCtx.put("contactMechPurposeTypeId", "PHONE_HOME");
-                try {
-                    svcRes = dispatcher.runSync("createPartyTelecomNumber", svcCtx);
-                } catch (GenericServiceException e) {
-                    Debug.logError(e, module);
-                    pos.showDialog("dialog/error/exception", e.getMessage());
-                    return result;
-                }
-                if (ServiceUtil.isError(svcRes)) {
-                    pos.showDialog("dialog/error/exception", ServiceUtil.getErrorMessage(svcRes));
-                    return result;
-                }
+            // createPartyTelecomNumber
+            trace("createPartyTelecomNumber");
+            svcCtx.clear();
+            svcCtx.put("userLogin", partyUserLogin);
+            svcCtx.put("contactNumber", phone);
+            svcCtx.put("partyId", partyId);
+            svcCtx.put("contactMechPurposeTypeId", "PHONE_HOME");
+            try {
+                svcRes = dispatcher.runSync("createPartyTelecomNumber", svcCtx);
+            } catch (GenericServiceException e) {
+                Debug.logError(e, module);
+                pos.showDialog("dialog/error/exception", e.getMessage());
+                return null;
+            }
+            if (ServiceUtil.isError(svcRes)) {
+                pos.showDialog("dialog/error/exception", ServiceUtil.getErrorMessage(svcRes));
+                return null;
             }
+            
             result = partyId;
-        } else {
+            
+        // Update
+        } else if (UtilValidate.isNotEmpty(partyId)){
             trace("Update a client profile");
-            List<GenericValue>  userLogins = null;
+            GenericValue  person = null;
+
             try {
-                userLogins = session.getDelegator().findByAnd("UserLogin", UtilMisc.toMap("partyId", partyId));
+                person = session.getDelegator().findByPrimaryKey("Person", UtilMisc.toMap("partyId", partyId));
             } catch (GenericEntityException e) {
                 Debug.logError(e, module);
                 pos.showDialog("dialog/error/exception", e.getMessage());
-                return result;
+                return null;
             }
-            GenericValue partyLogin = userLogins.get(0); // We need at least a party's login, we are sure there is one as we keep only users with at least one login
-            GenericValue  person = null;
+            
             try {
-                person = session.getDelegator().findByPrimaryKey("Person", UtilMisc.toMap("partyId", partyId));
+                List<GenericValue>  userLogins = session.getDelegator().findByAnd("UserLogin", UtilMisc.toMap("partyId", partyId));
+                partyUserLogin = userLogins.get(0); // We need a party's login, it can't be empty because we filter on PartyAndUserLogin in searchClientProfile 
             } catch (GenericEntityException e) {
                 Debug.logError(e, module);
                 pos.showDialog("dialog/error/exception", e.getMessage());
-                return result;
+                return null;
             }
-            
-            if (UtilValidate.isNotEmpty(name) && !person.getString("lastName").equals(name)
-                    || UtilValidate.isNotEmpty(card) && !card.equals(person.getString("memberId"))) {
+
+            if (!person.getString("lastName").equals(name)
+                    || UtilValidate.isNotEmpty(card) && !card.equals(person.getString("cardId"))) {
+                // Update name and card (cardId)
                 svcCtx.put("partyId", partyId);
                 svcCtx.put("firstName", ""); // Needed by service updatePerson
-                svcCtx.put("userLogin", partyLogin);
-                if (UtilValidate.isNotEmpty(name)) {
-                    svcCtx.put("lastName", name);
-                }
+                svcCtx.put("userLogin", partyUserLogin);
+                svcCtx.put("lastName", name);
                 if (UtilValidate.isNotEmpty(card)) {
-                    svcCtx.put("memberId", card);
-                    if (!card.equals(person.getString("memberId"))) {
-                        // Update password, we need to temporary set password.accept.encrypted.and.plain to "true"
-                        // This is done only for the properties loaded for the session in memory (we don't persist the value)
-                        String passwordAcceptEncryptedAndPlain = UtilProperties.getPropertyValue("security.properties", "password.accept.encrypted.and.plain");
-                        UtilProperties.setPropertyValueInMemory("security.properties", "password.accept.encrypted.and.plain", "true");
-                        try {
-                            svcRes = dispatcher.runSync("updatePassword", 
-                                    UtilMisc.toMap("userLogin", partyLogin,
-                                    "userLoginId", partyLogin.getString("userLoginId"), 
-                                    "currentPassword", partyLogin.getString("currentPassword"), 
-                                    "newPassword", card, 
-                                    "newPasswordVerify", card,
-                                    "passwordHint", "Your card number is your password"));            
-                        } catch (GenericServiceException e) {
-                            Debug.logError(e, "Error calling updatePassword service", module);
-                            pos.showDialog("dialog/error/exception", e.getMessage());
-                            return result;
-                        }
-                        if (ServiceUtil.isError(svcRes)) {
-                            pos.showDialog("dialog/error/exception", ServiceUtil.getErrorMessage(svcRes));
-                            return result;
-                        }
-                        // Put back passwordAcceptEncryptedAndPlain value in memory
-                        UtilProperties.setPropertyValueInMemory("security.properties", "password.accept.encrypted.and.plain", passwordAcceptEncryptedAndPlain);
-                        partyLogin = (GenericValue) svcRes.get("updatedUserLogin");
-                        svcCtx.put("userLogin", partyLogin);
-                    }                    
-                }
-    
-                // Update name and card (memberId)
+                    svcCtx.put("cardId", card);
+                }                                  
                 try {
                     svcRes = dispatcher.runSync("updatePerson", svcCtx);
                 } catch (GenericServiceException e) {
                     Debug.logError(e, module);
                     pos.showDialog("dialog/error/exception", e.getMessage());
-                    return result;
+                    return null;
                 }
                 if (ServiceUtil.isError(svcRes)) {
                     pos.showDialog("dialog/error/exception", ServiceUtil.getErrorMessage(svcRes));
-                    return result;
-                }                
+                    return null;
+                }
             }
 
-            // Update email            
-            if (UtilValidate.isNotEmpty(email) && !partyLogin.getString("userLoginId").equals(email)) {                
-                // create a new UserLogin (Update a UserLoginId by creating a new one and expiring the old one)
+            // Update phone
+            GenericValue PartyTelecomNumber = null;
+            String contactNumber = null;
+            String newContactMechId = null;
+            svcCtx.clear();
+            svcCtx.put("partyId", partyId);
+            svcCtx.put("thruDate", null); // last one            
+            try {
+                List<GenericValue>  PartyTelecomNumbers = session.getDelegator().findByAnd("PartyAndTelecomNumber", svcCtx);
+                PartyTelecomNumber = PartyTelecomNumbers.get(0); // There is  only one phone number (contactMechPurposeTypeId == "PHONE_HOME") and there is always one (used as password in UserLogin)
+                contactNumber = PartyTelecomNumber.getString("contactNumber");
+                newContactMechId = PartyTelecomNumber.getString("contactMechId");
+            } catch (GenericEntityException e) {
+                Debug.logError(e, module);
+                pos.showDialog("dialog/error/exception", e.getMessage());
+                return null;
+            }                        
+            if (UtilValidate.isNotEmpty(contactNumber) && !phone.equals(contactNumber)) {
+                svcCtx.clear();
+                svcCtx.put("partyId", partyId);
+                svcCtx.put("thruDate", null); // last one                
+                svcCtx.put("userLogin", partyUserLogin);
+                svcCtx.put("contactNumber", phone);
+                svcCtx.put("contactMechPurposeTypeId", "PHONE_HOME");
+                svcCtx.put("contactMechId", newContactMechId);                 
                 try {
-                    svcRes = dispatcher.runSync("updateUserLoginId", UtilMisc.toMap("userLoginId", email, "userLogin", partyLogin));
+                    svcRes = dispatcher.runSync("updatePartyTelecomNumber", svcCtx);
                 } catch (GenericServiceException e) {
                     Debug.logError(e, module);
                     pos.showDialog("dialog/error/exception", e.getMessage());
-                   return result;
+                    return null;
                 }
                 if (ServiceUtil.isError(svcRes)) {
                     pos.showDialog("dialog/error/exception", ServiceUtil.getErrorMessage(svcRes));
-                    return result;
+                    return null;
                 }
-                
-                partyLogin = (GenericValue) svcRes.get("newUserLogin");
-                
+                // Update password, we need to temporary set password.accept.encrypted.and.plain to "true"
+                // This is done only for the properties loaded for the session in memory (we don't persist the value)
+                String passwordAcceptEncryptedAndPlain = UtilProperties.getPropertyValue("security.properties", "password.accept.encrypted.and.plain");
+                UtilProperties.setPropertyValueInMemory("security.properties", "password.accept.encrypted.and.plain", "true");
+                try {
+                    svcRes = dispatcher.runSync("updatePassword", 
+                            UtilMisc.toMap("userLogin", partyUserLogin,
+                            "userLoginId", partyUserLogin.getString("userLoginId"), 
+                            "currentPassword", partyUserLogin.getString("currentPassword"), 
+                            "newPassword", phone, 
+                            "newPasswordVerify", phone));            
+                } catch (GenericServiceException e) {
+                    Debug.logError(e, "Error calling updatePassword service", module);
+                    pos.showDialog("dialog/error/exception", e.getMessage());
+                    return null;
+                }
+                if (ServiceUtil.isError(svcRes)) {
+                    pos.showDialog("dialog/error/exception", ServiceUtil.getErrorMessage(svcRes));
+                    return null;
+                }
+                // Put back passwordAcceptEncryptedAndPlain value in memory
+                UtilProperties.setPropertyValueInMemory("security.properties", "password.accept.encrypted.and.plain", passwordAcceptEncryptedAndPlain);
+            }
+
+            // Update email            
+            if (!partyUserLogin.getString("userLoginId").equals(email)) {                
                 svcCtx.clear();
                 svcCtx.put("partyId", partyId);
                 svcCtx.put("contactMechTypeId", "EMAIL_ADDRESS");                
@@ -1902,91 +1899,45 @@
                 } catch (GenericEntityException e) {
                     Debug.logError(e, module);
                     pos.showDialog("dialog/error/exception", e.getMessage());
-                    return result;
+                    return null;
                 }
 
                 svcCtx.clear();
-                svcCtx.put("userLogin", partyLogin);
+                svcCtx.put("userLogin", userLogin);
                 svcCtx.put("emailAddress", email);
                 svcCtx.put("partyId", partyId);
                 svcCtx.put("contactMechPurposeTypeId", "PRIMARY_EMAIL");
-
-                if (UtilValidate.isNotEmpty(PartyEmails)) {
-                    svcCtx.put("contactMechId", PartyEmails.get(0).getString("contactMechId")); // We suppose only one email address (should be ok anyway because of the contactMechPurposeTypeId == "PRIMARY_EMAIL")
-                }
+                svcCtx.put("contactMechId", PartyEmails.get(0).getString("contactMechId")); // We suppose only one email address (should be ok anyway because of the contactMechPurposeTypeId == "PRIMARY_EMAIL")
                 try {
                     svcRes = dispatcher.runSync("createUpdatePartyEmailAddress", svcCtx);
                 } catch (GenericServiceException e) {
                     Debug.logError(e, module);
                     pos.showDialog("dialog/error/exception", e.getMessage());
-                    return result;
+                    return null;
                 }
                 if (ServiceUtil.isError(svcRes)) {
                     pos.showDialog("dialog/error/exception", ServiceUtil.getErrorMessage(svcRes));
-                    return result;
+                    return null;
                 }
-            }
 
-            // Update phone
-            if (UtilValidate.isNotEmpty(phone)) {
-                svcCtx.clear();
-                svcCtx.put("partyId", partyId);
-                svcCtx.put("thruDate", null); // last one
-                List<GenericValue>  PartyTelecomNumbers = null;
+                // create a new UserLogin (Update a UserLoginId by creating a new one and expiring the old one). Keep the same password possibly changed just above if phone has also changed.
                 try {
-                    PartyTelecomNumbers = session.getDelegator().findByAnd("PartyAndTelecomNumber", svcCtx);
-                } catch (GenericEntityException e) {
+                    svcRes = dispatcher.runSync("updateUserLoginId", UtilMisc.toMap("userLoginId", email, "userLogin", userLogin));
+                } catch (GenericServiceException e) {
                     Debug.logError(e, module);
                     pos.showDialog("dialog/error/exception", e.getMessage());
-                    return result;
-                }
-                
-                if (UtilValidate.isNotEmpty(PartyTelecomNumbers)) {                 
-                    GenericValue PartyTelecomNumber = PartyTelecomNumbers.get(0); // we suppose only one phone number (should be ok anyway because of the contactMechPurposeTypeId == "PHONE_HOME")
-                    String contactNumber = PartyTelecomNumber.getString("contactNumber");
-                    if (!phone.equals(contactNumber)) {
-                        String newContactMechId = PartyTelecomNumber.getString("contactMechId");
-        
-                        svcCtx.put("userLogin", partyLogin);
-                        svcCtx.put("contactNumber", phone);
-                        svcCtx.put("contactMechPurposeTypeId", "PHONE_HOME");
-                        if (UtilValidate.isNotEmpty(PartyTelecomNumbers)) {
-                            svcCtx.put("contactMechId", newContactMechId); 
-                        }
-                        
-                        try {
-                            svcRes = dispatcher.runSync("createUpdatePartyTelecomNumber", svcCtx);
-                        } catch (GenericServiceException e) {
-                            Debug.logError(e, module);
-                            pos.showDialog("dialog/error/exception", e.getMessage());
-                            return result;
-                        }
-                        if (ServiceUtil.isError(svcRes)) {
-                            pos.showDialog("dialog/error/exception", ServiceUtil.getErrorMessage(svcRes));
-                            return result;
-                        }
-                    }
-                } else {
-                    // createPartyTelecomNumber
-                    svcCtx.clear();
-                    svcCtx.put("userLogin", partyLogin);
-                    svcCtx.put("contactNumber", phone);
-                    svcCtx.put("partyId", partyId);
-                    svcCtx.put("contactMechPurposeTypeId", "PHONE_HOME");
-                    try {
-                        svcRes = dispatcher.runSync("createPartyTelecomNumber", svcCtx);
-                    } catch (GenericServiceException e) {
-                        Debug.logError(e, module);
-                        pos.showDialog("dialog/error/exception", e.getMessage());
-                        return result;
-                    }
-                    if (ServiceUtil.isError(svcRes)) {
-                        pos.showDialog("dialog/error/exception", ServiceUtil.getErrorMessage(svcRes));
-                        return result;
-                    }
+                   return null;
                 }
+                if (ServiceUtil.isError(svcRes)) {
+                    pos.showDialog("dialog/error/exception", ServiceUtil.getErrorMessage(svcRes));
+                    return null;
+                }                
             }
+
+        } else {
+            pos.showDialog("dialog/error/exception", UtilProperties.getMessage(resource, "PosNoClientProfile", locale));
+            return null;            
         }
-        return result;
+        return null;
     }
 }

Modified: ofbiz/trunk/specialpurpose/pos/src/org/ofbiz/pos/screen/ClientProfile.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/pos/src/org/ofbiz/pos/screen/ClientProfile.java?rev=825846&r1=825845&r2=825846&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/pos/src/org/ofbiz/pos/screen/ClientProfile.java (original)
+++ ofbiz/trunk/specialpurpose/pos/src/org/ofbiz/pos/screen/ClientProfile.java Fri Oct 16 11:23:56 2009
@@ -142,7 +142,7 @@
                 Debug.logError(e, module);
             }   
             if (UtilValidate.isNotEmpty(person)) {
-                String promoCode = person.getString("memberId");
+                String promoCode = person.getString("cardId");
                 if (UtilValidate.isNotEmpty(promoCode)) {          
                     String result = m_trans.addProductPromoCode(promoCode);
                     if(UtilValidate.isNotEmpty(result)) {
@@ -234,10 +234,14 @@
             String email = m_emailEdit.getText().trim();
             String phone = m_phoneEdit.getText().trim();
             String card = m_cardEdit.getText().trim();
-            if (UtilValidate.isNotEmpty(name)) {
-                editClientProfile(name, email, phone, card, editType, m_partyId);
+            if (UtilValidate.isNotEmpty(name) && UtilValidate.isNotEmpty(email) && UtilValidate.isNotEmpty(phone) ) {
+                if (phone.length() > 4 ) {
+                    editClientProfile(name, email, phone, card, editType, m_partyId);
+                } else {
+                    m_pos.showDialog("dialog/error/exception", UtilProperties.getMessage(PosTransaction.resource, "PosPhoneField5Required", locale));                    
+                }
             } else {
-                m_pos.showDialog("dialog/error/exception", UtilProperties.getMessage(PosTransaction.resource, "PosNameFieldRequired", locale));
+                m_pos.showDialog("dialog/error/exception", UtilProperties.getMessage(PosTransaction.resource, "PosFieldsRequired", locale));
             }
         }
     }
@@ -256,7 +260,7 @@
                 phone = (String) party.get("contactNumber");
                 String partyId = (String) party.get("partyId");
                 m_clientListBidingCombo.add(partyId);
-                card = (String) party.get("memberId");
+                card = (String) party.get("cardId");
                 name = name == null ? "" : name;
                 email = email == null ? "" : email;
                 phone = phone == null ? "" : phone;