svn commit: r1305581 [7/36] - in /ofbiz/branches/20111205EmailHandling: ./ applications/accounting/config/ applications/accounting/data/ applications/accounting/entitydef/ applications/accounting/script/org/ofbiz/accounting/finaccount/ applications/acc...

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r1305581 [7/36] - in /ofbiz/branches/20111205EmailHandling: ./ applications/accounting/config/ applications/accounting/data/ applications/accounting/entitydef/ applications/accounting/script/org/ofbiz/accounting/finaccount/ applications/acc...

erwan
Modified: ofbiz/branches/20111205EmailHandling/applications/manufacturing/src/org/ofbiz/manufacturing/bom/BOMServices.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/20111205EmailHandling/applications/manufacturing/src/org/ofbiz/manufacturing/bom/BOMServices.java?rev=1305581&r1=1305580&r2=1305581&view=diff
==============================================================================
--- ofbiz/branches/20111205EmailHandling/applications/manufacturing/src/org/ofbiz/manufacturing/bom/BOMServices.java (original)
+++ ofbiz/branches/20111205EmailHandling/applications/manufacturing/src/org/ofbiz/manufacturing/bom/BOMServices.java Mon Mar 26 20:56:02 2012
@@ -84,9 +84,8 @@ public class BOMServices {
         if (bomType == null) {
             try {
                 List<GenericValue> bomTypesValues = delegator.findByAnd("ProductAssocType", UtilMisc.toMap("parentTypeId", "PRODUCT_COMPONENT"));
-                Iterator<GenericValue> bomTypesValuesIt = bomTypesValues.iterator();
-                while (bomTypesValuesIt.hasNext()) {
-                    bomTypes.add((bomTypesValuesIt.next()).getString("productAssocTypeId"));
+                for(GenericValue bomTypesValue : bomTypesValues) {
+                    bomTypes.add(bomTypesValue.getString("productAssocTypeId"));
                 }
             } catch (GenericEntityException gee) {
                 return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ManufacturingBomErrorRunningMaxDethAlgorithm", UtilMisc.toMap("errorString", gee.getMessage()), locale));
@@ -97,10 +96,8 @@ public class BOMServices {
 
         int depth = 0;
         int maxDepth = 0;
-        Iterator<String> bomTypesIt = bomTypes.iterator();
         try {
-            while (bomTypesIt.hasNext()) {
-                String oneBomType = bomTypesIt.next();
+            for(String oneBomType : bomTypes) {
                 depth = BOMHelper.getMaxDepth(productId, oneBomType, fromDate, delegator);
                 if (depth > maxDepth) {
                     maxDepth = depth;
@@ -149,10 +146,8 @@ public class BOMServices {
                     UtilMisc.toMap("productIdTo", productId, "productAssocTypeId", "PRODUCT_VARIANT"));
             virtualProducts = EntityUtil.filterByDate(virtualProducts);
             int virtualMaxDepth = 0;
-            Iterator<GenericValue> virtualProductsIt = virtualProducts.iterator();
-            while (virtualProductsIt.hasNext()) {
+            for(GenericValue oneVirtualProductAssoc : virtualProducts) {
                 int virtualDepth = 0;
-                GenericValue oneVirtualProductAssoc = virtualProductsIt.next();
                 GenericValue virtualProduct = delegator.findByPrimaryKey("Product", UtilMisc.toMap("productId", oneVirtualProductAssoc.getString("productId")));
                 if (virtualProduct.get("billOfMaterialLevel") != null) {
                     virtualDepth = virtualProduct.getLong("billOfMaterialLevel").intValue();
@@ -190,9 +185,7 @@ public class BOMServices {
                 List<GenericValue> variantProducts = delegator.findByAnd("ProductAssoc",
                         UtilMisc.toMap("productId", productId, "productAssocTypeId", "PRODUCT_VARIANT"));
                 variantProducts = EntityUtil.filterByDate(variantProducts, true);
-                Iterator<GenericValue> variantProductsIt = variantProducts.iterator();
-                while (variantProductsIt.hasNext()) {
-                    GenericValue oneVariantProductAssoc = variantProductsIt.next();
+                for(GenericValue oneVariantProductAssoc : variantProducts) {
                     GenericValue variantProduct = delegator.findByPrimaryKey("Product", UtilMisc.toMap("productId", oneVariantProductAssoc.getString("productId")));
                     variantProduct.set("billOfMaterialLevel", llc);
                     variantProduct.store();
@@ -220,20 +213,16 @@ public class BOMServices {
         try {
             List<GenericValue> products = delegator.findList("Product", null, null,
                     UtilMisc.toList("isVirtual DESC"), null, false);
-            Iterator<GenericValue> productsIt = products.iterator();
             Long zero = Long.valueOf(0);
             List<GenericValue> allProducts = FastList.newInstance();
-            while (productsIt.hasNext()) {
-                GenericValue product = productsIt.next();
+            for(GenericValue product : products) {
                 product.set("billOfMaterialLevel", zero);
                 allProducts.add(product);
             }
             delegator.storeAll(allProducts);
             Debug.logInfo("Low Level Code set to 0 for all the products", module);
 
-            productsIt = products.iterator();
-            while (productsIt.hasNext()) {
-                GenericValue product = productsIt.next();
+            for(GenericValue product : products) {
                 try {
                     Map<String, Object> depthResult = dispatcher.runSync("updateLowLevelCode", UtilMisc.<String, Object>toMap("productIdTo", product.getString("productId"), "alsoComponents", Boolean.valueOf(false), "alsoVariants", Boolean.valueOf(false)));
                     Debug.logInfo("Product [" + product.getString("productId") + "] Low Level Code [" + depthResult.get("lowLevelCode") + "]", module);
@@ -414,10 +403,8 @@ public class BOMServices {
 
         // also return a componentMap (useful in scripts and simple language code)
         List<Map<String, Object>> componentsMap = FastList.newInstance();
-        Iterator<BOMNode> componentsIt = components.iterator();
-        while (componentsIt.hasNext()) {
+        for(BOMNode node : components) {
             Map<String, Object> componentMap = FastMap.newInstance();
-            BOMNode node = componentsIt.next();
             componentMap.put("product", node.getProduct());
             componentMap.put("quantity", node.getQuantity());
             componentsMap.add(componentMap);
@@ -466,9 +453,7 @@ public class BOMServices {
         } catch (GenericEntityException gee) {
             return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ManufacturingBomErrorCreatingBillOfMaterialsTree", UtilMisc.toMap("errorString", gee.getMessage()), locale));
         }
-        Iterator<BOMNode> componentsIt = components.iterator();
-        while (componentsIt.hasNext()) {
-            BOMNode oneComponent = componentsIt.next();
+        for(BOMNode oneComponent : components) {
             if (!oneComponent.isManufactured()) {
                 notAssembledComponents.add(oneComponent);
             }
@@ -503,11 +488,9 @@ public class BOMServices {
         } catch (GenericEntityException gee) {
             return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ManufacturingBomErrorLoadingShipmentItems", locale));
         }
-        Iterator<GenericValue> shipmentItemsIt = shipmentItems.iterator();
         Map<String, Object> orderReadHelpers = FastMap.newInstance();
         Map<String, Object> partyOrderShipments = FastMap.newInstance();
-        while (shipmentItemsIt.hasNext()) {
-            GenericValue shipmentItem = shipmentItemsIt.next();
+        for(GenericValue shipmentItem : shipmentItems) {
             // Get the OrderShipments
             List<GenericValue> orderShipments = null;
             try {

Modified: ofbiz/branches/20111205EmailHandling/applications/manufacturing/src/org/ofbiz/manufacturing/jobshopmgt/ProductionRunServices.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/20111205EmailHandling/applications/manufacturing/src/org/ofbiz/manufacturing/jobshopmgt/ProductionRunServices.java?rev=1305581&r1=1305580&r2=1305581&view=diff
==============================================================================
--- ofbiz/branches/20111205EmailHandling/applications/manufacturing/src/org/ofbiz/manufacturing/jobshopmgt/ProductionRunServices.java (original)
+++ ofbiz/branches/20111205EmailHandling/applications/manufacturing/src/org/ofbiz/manufacturing/jobshopmgt/ProductionRunServices.java Mon Mar 26 20:56:02 2012
@@ -125,9 +125,7 @@ public class ProductionRunServices {
                         UtilMisc.toMap("workEffortId", productionRunId, "workEffortGoodStdTypeId", "PRUN_PROD_DELIV",
                                 "statusId", "WEGS_CREATED"));
                 if (!UtilValidate.isEmpty(products)) {
-                    Iterator<GenericValue> productsIt = products.iterator();
-                    while (productsIt.hasNext()) {
-                        GenericValue product = productsIt.next();
+                    for(GenericValue product : products) {
                         product.set("statusId", "WEGS_CANCELLED");
                         product.store();
                     }
@@ -135,10 +133,8 @@ public class ProductionRunServices {
 
                 // change the tasks status to PRUN_CANCELLED
                 List<GenericValue> tasks = productionRun.getProductionRunRoutingTasks();
-                GenericValue oneTask = null;
                 String taskId = null;
-                for (int i = 0; i < tasks.size(); i++) {
-                    oneTask = tasks.get(i);
+                for(GenericValue oneTask : tasks) {
                     taskId = oneTask.getString("workEffortId");
                     serviceContext.clear();
                     serviceContext.put("workEffortId", taskId);
@@ -150,9 +146,7 @@ public class ProductionRunServices {
                             UtilMisc.toMap("workEffortId", taskId, "workEffortGoodStdTypeId", "PRUNT_PROD_NEEDED",
                                     "statusId", "WEGS_CREATED"));
                     if (!UtilValidate.isEmpty(components)) {
-                        Iterator<GenericValue> componentsIt = components.iterator();
-                        while (componentsIt.hasNext()) {
-                            GenericValue component = componentsIt.next();
+                        for(GenericValue component : components) {
                             component.set("statusId", "WEGS_CANCELLED");
                             component.store();
                         }
@@ -305,11 +299,8 @@ public class ProductionRunServices {
         }
 
         // Multi creation (like clone) ProductionRunTask and GoodAssoc
-        Iterator<GenericValue>  rt = routingTaskAssocs.iterator();
         boolean first = true;
-        while (rt.hasNext()) {
-            GenericValue routingTaskAssoc = rt.next();
-
+        for(GenericValue routingTaskAssoc : routingTaskAssocs) {
             if (EntityUtil.isValueActive(routingTaskAssoc, startDate)) {
                 GenericValue routingTask = null;
                 try {
@@ -368,11 +359,9 @@ public class ProductionRunServices {
                 // Now we iterate thru the components returned by the getManufacturingComponents service
                 // TODO: if in the BOM a routingWorkEffortId is specified, but the task is not in the routing
                 //       the component is not added to the production run.
-                Iterator<BOMNode>  pb = components.iterator();
-                while (pb.hasNext()) {
+                for(BOMNode node : components) {
                     // The components variable contains a list of BOMNodes:
                     // each node represents a product (component).
-                    BOMNode node = pb.next();
                     GenericValue productBom = node.getProductAssoc();
                     if ((productBom.getString("routingWorkEffortId") == null && first) || (productBom.getString("routingWorkEffortId") != null && productBom.getString("routingWorkEffortId").equals(routingTask.getString("workEffortId")))) {
                         serviceContext.clear();
@@ -433,9 +422,7 @@ public class ProductionRunServices {
         }
 
         if (workEffortPartyAssignments != null) {
-            Iterator<GenericValue> i = workEffortPartyAssignments.iterator();
-            while (i.hasNext()) {
-                GenericValue workEffortPartyAssignment = i.next();
+            for(GenericValue workEffortPartyAssignment : workEffortPartyAssignments) {
                 Map<String, Object> partyToWorkEffort = UtilMisc.<String, Object>toMap(
                         "workEffortId",  productionRunTaskId,
                         "partyId",  workEffortPartyAssignment.getString("partyId"),
@@ -600,9 +587,7 @@ public class ProductionRunServices {
                 return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ManufacturingProductionRunStatusNotChanged", locale));
             }
             // change the production run tasks status to PRUN_SCHEDULED
-            Iterator<GenericValue> tasks = productionRun.getProductionRunRoutingTasks().iterator();
-            while (tasks.hasNext()) {
-                GenericValue task = tasks.next();
+            for(GenericValue task : productionRun.getProductionRunRoutingTasks()) {
                 serviceContext.clear();
                 serviceContext.put("workEffortId", task.getString("workEffortId"));
                 serviceContext.put("currentStatusId", statusId);
@@ -634,9 +619,7 @@ public class ProductionRunServices {
                 return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ManufacturingProductionRunStatusNotChanged", locale));
             }
             // change the production run tasks status to PRUN_DOC_PRINTED
-            Iterator<GenericValue> tasks = productionRun.getProductionRunRoutingTasks().iterator();
-            while (tasks.hasNext()) {
-                GenericValue task = tasks.next();
+            for(GenericValue task : productionRun.getProductionRunRoutingTasks()) {
                 serviceContext.clear();
                 serviceContext.put("workEffortId", task.getString("workEffortId"));
                 serviceContext.put("currentStatusId", "PRUN_DOC_PRINTED");
@@ -726,9 +709,7 @@ public class ProductionRunServices {
                 return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ManufacturingProductionRunStatusNotChanged", locale));
             }
             // change the production run tasks status to PRUN_CLOSED
-            Iterator<GenericValue> tasks = productionRun.getProductionRunRoutingTasks().iterator();
-            while (tasks.hasNext()) {
-                GenericValue task = tasks.next();
+            for(GenericValue task : productionRun.getProductionRunRoutingTasks()) {
                 serviceContext.clear();
                 serviceContext.put("workEffortId", task.getString("workEffortId"));
                 serviceContext.put("currentStatusId", "PRUN_CLOSED");
@@ -996,13 +977,11 @@ public class ProductionRunServices {
             List<GenericValue> costComponents = EntityUtil.filterByDate(delegator.findByAnd("CostComponent",
                     UtilMisc.toMap("workEffortId", workEffortId)));
             result.put("costComponents", costComponents);
-            Iterator<GenericValue> costComponentsIt = costComponents.iterator();
             // TODO: before doing these totals we should convert the cost components' costs to the
             //       base currency uom of the owner of the facility in which the task is running
             BigDecimal totalCost = ZERO;
             BigDecimal totalCostNoMaterials = ZERO;
-            while (costComponentsIt.hasNext()) {
-                GenericValue costComponent = costComponentsIt.next();
+            for(GenericValue costComponent : costComponents) {
                 BigDecimal cost = costComponent.getBigDecimal("cost");
                 totalCost = totalCost.add(cost);
                 if (!"ACTUAL_MAT_COST".equals(costComponent.getString("costComponentTypeId"))) {
@@ -1027,14 +1006,12 @@ public class ProductionRunServices {
         try {
             List<GenericValue> tasks = delegator.findByAnd("WorkEffort",
                     UtilMisc.toMap("workEffortParentId", workEffortId), UtilMisc.toList("workEffortId"));
-            Iterator<GenericValue> tasksIt = tasks.iterator();
             BigDecimal totalCost = ZERO;
             Map<String, Object> outputMap = dispatcher.runSync("getWorkEffortCosts",
                     UtilMisc.<String, Object>toMap("userLogin", userLogin, "workEffortId", workEffortId));
             BigDecimal productionRunHeaderCost = (BigDecimal)outputMap.get("totalCost");
             totalCost = totalCost.add(productionRunHeaderCost);
-            while (tasksIt.hasNext()) {
-                GenericValue task = tasksIt.next();
+            for(GenericValue task : tasks) {
                 outputMap = dispatcher.runSync("getWorkEffortCosts",
                         UtilMisc.<String, Object>toMap("userLogin", userLogin, "workEffortId", task.getString("workEffortId")));
                 BigDecimal taskCost = (BigDecimal)outputMap.get("totalCost");
@@ -1085,9 +1062,7 @@ public class ProductionRunServices {
                     UtilMisc.toMap("workEffortId", productionRunTaskId));
             workEffortCostCalcs = EntityUtil.filterByDate(workEffortCostCalcs);
 
-            Iterator<GenericValue> workEffortCostCalcsIt = workEffortCostCalcs.iterator();
-            while (workEffortCostCalcsIt.hasNext()) {
-                GenericValue workEffortCostCalc = workEffortCostCalcsIt.next();
+            for (GenericValue workEffortCostCalc : workEffortCostCalcs) {
                 GenericValue costComponentCalc = workEffortCostCalc.getRelatedOne("CostComponentCalc");
                 GenericValue customMethod = costComponentCalc.getRelatedOne("CustomMethod");
                 if (UtilValidate.isEmpty(customMethod) || UtilValidate.isEmpty(customMethod.getString("customMethodName"))) {
@@ -1164,11 +1139,9 @@ public class ProductionRunServices {
         }
         // materials costs: these are the costs derived from the materials used by the production run task
         try {
-            Iterator<GenericValue> inventoryAssignIt = delegator.findByAnd("WorkEffortAndInventoryAssign",
-                    UtilMisc.toMap("workEffortId", productionRunTaskId)).iterator();
             Map<String, BigDecimal> materialsCostByCurrency = FastMap.newInstance();
-            while (inventoryAssignIt.hasNext()) {
-                GenericValue inventoryConsumed = inventoryAssignIt.next();
+            for(GenericValue inventoryConsumed : delegator.findByAnd("WorkEffortAndInventoryAssign",
+                                UtilMisc.toMap("workEffortId", productionRunTaskId))) {
                 BigDecimal quantity = inventoryConsumed.getBigDecimal("quantity");
                 BigDecimal unitCost = inventoryConsumed.getBigDecimal("unitCost");
                 if (UtilValidate.isEmpty(unitCost) || UtilValidate.isEmpty(quantity)) {
@@ -1182,9 +1155,7 @@ public class ProductionRunServices {
                 materialsCost = materialsCost.add(unitCost.multiply(quantity)).setScale(decimals, rounding);
                 materialsCostByCurrency.put(currencyUomId, materialsCost);
             }
-            Iterator<String> currencyIt = materialsCostByCurrency.keySet().iterator();
-            while (currencyIt.hasNext()) {
-                String currencyUomId = currencyIt.next();
+            for(String currencyUomId : materialsCostByCurrency.keySet()) {
                 BigDecimal materialsCost = materialsCostByCurrency.get(currencyUomId);
                 Map<String, Object> inMap = UtilMisc.<String, Object>toMap("userLogin", userLogin,
                         "workEffortId", productionRunTaskId);
@@ -1539,9 +1510,7 @@ public class ProductionRunServices {
             Debug.logError(e.getMessage(),  module);
         }
         if (workEffortPartyAssignments != null) {
-            Iterator<GenericValue> i = workEffortPartyAssignments.iterator();
-            while (i.hasNext()) {
-                GenericValue workEffortPartyAssignment = i.next();
+            for(GenericValue workEffortPartyAssignment : workEffortPartyAssignments) {
                 Map<String, Object> partyToWorkEffort = UtilMisc.<String, Object>toMap(
                         "workEffortId",  productionRunTaskId,
                         "partyId",  workEffortPartyAssignment.getString("partyId"),
@@ -1980,21 +1949,17 @@ public class ProductionRunServices {
         // are currently assigned to this task.
         // If less than passed quantity then return an error message.
         try {
-            Iterator<GenericValue> issuances = (delegator.findByAnd("WorkEffortAndInventoryAssign",
-                    UtilMisc.toMap("workEffortId", productionRunTaskId, "productId", productId))).iterator();
             BigDecimal totalIssued = BigDecimal.ZERO;
-            while (issuances.hasNext()) {
-                GenericValue issuance = issuances.next();
+            for(GenericValue issuance : delegator.findByAnd("WorkEffortAndInventoryAssign",
+                            UtilMisc.toMap("workEffortId", productionRunTaskId, "productId", productId))) {
                 BigDecimal issued = issuance.getBigDecimal("quantity");
                 if (issued != null) {
                     totalIssued = totalIssued.add(issued);
                 }
             }
-            Iterator<GenericValue> returns = (delegator.findByAnd("WorkEffortAndInventoryProduced",
-                    UtilMisc.toMap("workEffortId", productionRunTaskId, "productId", productId))).iterator();
             BigDecimal totalReturned = BigDecimal.ZERO;
-            while (returns.hasNext()) {
-                GenericValue returned = returns.next();
+            for(GenericValue returned : delegator.findByAnd("WorkEffortAndInventoryProduced",
+                            UtilMisc.toMap("workEffortId", productionRunTaskId, "productId", productId))) {
                 GenericValue returnDetail = EntityUtil.getFirst(delegator.findByAnd("InventoryItemDetail", UtilMisc.toMap("inventoryItemId", returned.getString("inventoryItemId")), UtilMisc.toList("inventoryItemDetailSeqId")));
                 if (returnDetail != null) {
                     BigDecimal qtyReturned = returnDetail.getBigDecimal("quantityOnHandDiff");
@@ -2342,15 +2307,11 @@ public class ProductionRunServices {
         String productionRunId = (String)resultService.get("productionRunId");
         result.put("productionRunId", productionRunId);
 
-        Iterator<ConfigOption> options = config.getSelectedOptions().iterator();
         Map<String, BigDecimal> components = FastMap.newInstance();
-        while (options.hasNext()) {
-            ConfigOption co = options.next();
+        for(ConfigOption co : config.getSelectedOptions()) {
             //components.addAll(co.getComponents());
-            Iterator<GenericValue> selComponents = co.getComponents().iterator();
-            while (selComponents.hasNext()) {
+            for(GenericValue selComponent : co.getComponents()) {
                 BigDecimal componentQuantity = null;
-                GenericValue selComponent = selComponents.next();
                 if (selComponent.get("quantity") != null) {
                     componentQuantity = selComponent.getBigDecimal("quantity");
                 }
@@ -3073,9 +3034,7 @@ public class ProductionRunServices {
             if (UtilValidate.isEmpty(components)) {
                 return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ManufacturingProductionRunCannotDecomposingInventoryItemNoComponentsFound", UtilMisc.toMap("productId", inventoryItem.getString("productId")), locale));
             }
-            Iterator<Map<String, Object>> componentsIt = components.iterator();
-            while (componentsIt.hasNext()) {
-                Map<String, Object> component = componentsIt.next();
+            for(Map<String, Object> component : components) {
                 // get the component's standard cost
                 serviceContext.clear();
                 serviceContext = UtilMisc.toMap("productId", ((GenericValue)component.get("product")).getString("productId"),
@@ -3120,9 +3079,7 @@ public class ProductionRunServices {
             List<GenericValue> resultList = delegator.findByAnd("WorkEffortAndGoods",
                     UtilMisc.toMap("workEffortGoodStdTypeId", "PRUN_PROD_DELIV",
                             "statusId", "WEGS_CREATED", "workEffortTypeId", "PROD_ORDER_HEADER"));
-            Iterator<GenericValue> iteratorResult = resultList.iterator();
-            while (iteratorResult.hasNext()) {
-                GenericValue genericResult = iteratorResult.next();
+            for(GenericValue genericResult : resultList) {
                 if ("PRUN_CLOSED".equals(genericResult.getString("currentStatusId")) ||
                     "PRUN_CREATED".equals(genericResult.getString("currentStatusId"))) {
                     continue;
@@ -3163,11 +3120,9 @@ public class ProductionRunServices {
             resultList = delegator.findByAnd("OrderHeaderAndItems",
                     UtilMisc.toMap("orderTypeId", "PURCHASE_ORDER",
                             "itemStatusId", "ITEM_APPROVED"), UtilMisc.toList("orderId"));
-            iteratorResult = resultList.iterator();
             String orderId = null;
             GenericValue orderDeliverySchedule = null;
-            while (iteratorResult.hasNext()) {
-                GenericValue genericResult = iteratorResult.next();
+            for(GenericValue genericResult : resultList) {
                 String newOrderId =  genericResult.getString("orderId");
                 if (!newOrderId.equals(orderId)) {
                     orderDeliverySchedule = null;
@@ -3218,9 +3173,7 @@ public class ProductionRunServices {
             List<GenericValue> backorders = delegator.findList("OrderItemAndShipGrpInvResAndItem",
                     EntityCondition.makeCondition(backordersCondList, EntityOperator.AND), null,
                     UtilMisc.toList("shipBeforeDate"), null, false);
-            Iterator<GenericValue> backordersIt = backorders.iterator();
-            while (backordersIt.hasNext()) {
-                GenericValue genericResult = backordersIt.next();
+            for(GenericValue genericResult : backorders) {
                 String productId = genericResult.getString("productId");
                 GenericValue orderItemShipGroup = delegator.findByPrimaryKey("OrderItemShipGroup", UtilMisc.toMap("orderId", genericResult.get("orderId"),
                                                                                                                   "shipGroupSeqId", genericResult.get("shipGroupSeqId")));
@@ -3238,9 +3191,7 @@ public class ProductionRunServices {
                 TreeMap<Timestamp, Object> productMap = products.get(productId);
                 SortedMap<Timestamp, Object> subsetMap = productMap.headMap(requiredByDate);
                 // iterate and 'reserve'
-                Iterator<Timestamp> subsetMapKeysIt = subsetMap.keySet().iterator();
-                while (subsetMapKeysIt.hasNext()) {
-                    Timestamp currentDate = subsetMapKeysIt.next();
+                for(Timestamp currentDate : subsetMap.keySet()) {
                     Map<String, Object> currentDateMap = UtilGenerics.checkMap(subsetMap.get(currentDate));
                     //List reservations = (List)currentDateMap.get("reservations");
                     BigDecimal remainingQty = (BigDecimal)currentDateMap.get("remainingQty");

Modified: ofbiz/branches/20111205EmailHandling/applications/manufacturing/src/org/ofbiz/manufacturing/mrp/MrpServices.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/20111205EmailHandling/applications/manufacturing/src/org/ofbiz/manufacturing/mrp/MrpServices.java?rev=1305581&r1=1305580&r2=1305581&view=diff
==============================================================================
--- ofbiz/branches/20111205EmailHandling/applications/manufacturing/src/org/ofbiz/manufacturing/mrp/MrpServices.java (original)
+++ ofbiz/branches/20111205EmailHandling/applications/manufacturing/src/org/ofbiz/manufacturing/mrp/MrpServices.java Mon Mar 26 20:56:02 2012
@@ -103,9 +103,7 @@ public class MrpServices {
         }
         if (listResult != null) {
             try {
-                Iterator<GenericValue> listResultIt = listResult.iterator();
-                while (listResultIt.hasNext()) {
-                    GenericValue tmpRequirement = listResultIt.next();
+                for(GenericValue tmpRequirement : listResult) {
                     listResultRoles.addAll(tmpRequirement.getRelated("RequirementRole"));
                     //int numOfRecordsRemoved = delegator.removeRelated("RequirementRole", tmpRequirement);
                 }
@@ -129,10 +127,8 @@ public class MrpServices {
             }
         }
 
-        GenericValue genericResult = null;
         Map<String, Object> parameters = null;
         List<GenericValue> resultList = null;
-        Iterator<GenericValue> iteratorResult = null;
         // ----------------------------------------
         // Loads all the approved sales order items and purchase order items
         // ----------------------------------------
@@ -147,7 +143,6 @@ public class MrpServices {
             notAssignedDate = new Timestamp(calendar.getTimeInMillis());
         }
         resultList = null;
-        iteratorResult = null;
         parameters = UtilMisc.<String, Object>toMap("orderTypeId", "SALES_ORDER", "oiStatusId", "ITEM_APPROVED");
         parameters.put("facilityId", facilityId);
         try {
@@ -157,9 +152,7 @@ public class MrpServices {
             Debug.logError(e, "Error : parameters = "+parameters,module);
             return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ManufacturingMrpEventFindError", locale));
         }
-        iteratorResult = resultList.iterator();
-        while (iteratorResult.hasNext()) {
-            genericResult = iteratorResult.next();
+        for(GenericValue genericResult : resultList) {
             String productId =  genericResult.getString("productId");
             BigDecimal reservedQuantity = genericResult.getBigDecimal("reservedQuantity");
             BigDecimal shipGroupQuantity = genericResult.getBigDecimal("quantity");
@@ -211,7 +204,6 @@ public class MrpServices {
         // Loads all the approved product requirements (po requirements)
         // ----------------------------------------
         resultList = null;
-        iteratorResult = null;
         parameters = UtilMisc.<String, Object>toMap("requirementTypeId", "PRODUCT_REQUIREMENT",
                 "statusId", "REQ_APPROVED", "facilityId", facilityId);
         try {
@@ -219,9 +211,7 @@ public class MrpServices {
         } catch (GenericEntityException e) {
             return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ManufacturingMrpEventFindError", locale));
         }
-        iteratorResult = resultList.iterator();
-        while (iteratorResult.hasNext()) {
-            genericResult = iteratorResult.next();
+        for(GenericValue genericResult : resultList) {
             String productId =  genericResult.getString("productId");
             BigDecimal eventQuantityTmp = genericResult.getBigDecimal("quantity");
             if (productId == null || eventQuantityTmp == null) {
@@ -244,7 +234,6 @@ public class MrpServices {
         // Loads all the approved purchase order items
         // ----------------------------------------
         resultList = null;
-        iteratorResult = null;
         String orderId = null;
         GenericValue orderDeliverySchedule = null;
         try {
@@ -259,9 +248,7 @@ public class MrpServices {
         } catch (GenericEntityException e) {
             return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ManufacturingMrpEventFindError", locale));
         }
-        iteratorResult = resultList.iterator();
-        while (iteratorResult.hasNext()) {
-            genericResult = iteratorResult.next();
+        for(GenericValue genericResult : resultList) {
             String newOrderId =  genericResult.getString("orderId");
             if (!newOrderId.equals(orderId)) {
                 orderDeliverySchedule = null;
@@ -321,14 +308,11 @@ public class MrpServices {
         // PRODUCTION Run: components
         // ----------------------------------------
         resultList = null;
-        iteratorResult = null;
         parameters = UtilMisc.<String, Object>toMap("workEffortGoodStdTypeId", "PRUNT_PROD_NEEDED",
                    "statusId", "WEGS_CREATED", "facilityId", facilityId);
         try {
             resultList = delegator.findByAnd("WorkEffortAndGoods", parameters);
-            iteratorResult = resultList.iterator();
-            while (iteratorResult.hasNext()) {
-                genericResult = iteratorResult.next();
+            for(GenericValue genericResult : resultList) {
                 if ("PRUN_CLOSED".equals(genericResult.getString("currentStatusId")) ||
                     "PRUN_COMPLETED".equals(genericResult.getString("currentStatusId")) ||
                     "PRUN_CANCELLED".equals(genericResult.getString("currentStatusId"))) {
@@ -359,14 +343,11 @@ public class MrpServices {
         // PRODUCTION Run: product produced
         // ----------------------------------------
         resultList = null;
-        iteratorResult = null;
         parameters = UtilMisc.<String, Object>toMap("workEffortGoodStdTypeId", "PRUN_PROD_DELIV",
                 "statusId", "WEGS_CREATED", "workEffortTypeId", "PROD_ORDER_HEADER", "facilityId", facilityId);
         try {
             resultList = delegator.findByAnd("WorkEffortAndGoods", parameters);
-            iteratorResult = resultList.iterator();
-            while (iteratorResult.hasNext()) {
-                genericResult = iteratorResult.next();
+            for(GenericValue genericResult : resultList) {
                 if ("PRUN_CLOSED".equals(genericResult.getString("currentStatusId")) ||
                     "PRUN_COMPLETED".equals(genericResult.getString("currentStatusId")) ||
                     "PRUN_CANCELLED".equals(genericResult.getString("currentStatusId"))) {
@@ -402,7 +383,6 @@ public class MrpServices {
         // Products without upcoming events but that are already under minimum quantity in warehouse
         // ----------------------------------------
         resultList = null;
-        iteratorResult = null;
         parameters = UtilMisc.<String, Object>toMap("facilityId", facilityId);
         try {
             resultList = delegator.findByAnd("ProductFacility", parameters);
@@ -410,9 +390,7 @@ public class MrpServices {
             Debug.logError(e, "Unable to retrieve ProductFacility records.", module);
             return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ManufacturingMrpCannotFindProductFacility", locale));
         }
-        iteratorResult = resultList.iterator();
-        while (iteratorResult.hasNext()) {
-            genericResult = iteratorResult.next();
+        for(GenericValue genericResult : resultList) {
             String productId = genericResult.getString("productId");
             BigDecimal minimumStock = genericResult.getBigDecimal("minimumStock");
             if (minimumStock == null) {
@@ -444,7 +422,6 @@ public class MrpServices {
         // SALES FORECASTS
         // ----------------------------------------
         resultList = null;
-        iteratorResult = null;
         GenericValue facility = null;
         try {
             facility = delegator.findOne("Facility", UtilMisc.toMap("facilityId", facilityId), false);
@@ -457,9 +434,7 @@ public class MrpServices {
         } catch (GenericEntityException e) {
             return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ManufacturingMrpCannotFindSalesForecasts", locale));
         }
-        iteratorResult = resultList.iterator();
-        while (iteratorResult.hasNext()) {
-            genericResult = iteratorResult.next();
+        for(GenericValue genericResult : resultList) {
             String customTimePeriodId =  genericResult.getString("customTimePeriodId");
             GenericValue customTimePeriod = null;
             try {
@@ -472,24 +447,21 @@ public class MrpServices {
                     continue;
                 } else {
                     List<GenericValue> salesForecastDetails = null;
-                    Iterator<GenericValue> sfdIter = null;
                     try {
                         salesForecastDetails = delegator.findByAnd("SalesForecastDetail", UtilMisc.toMap("salesForecastId", genericResult.getString("salesForecastId")));
                     } catch (GenericEntityException e) {
                         return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ManufacturingMrpCannotFindSalesForecastDetails", locale));
                     }
-                    sfdIter = salesForecastDetails.iterator();
-                    while (sfdIter.hasNext()) {
-                        genericResult = sfdIter.next();
-                        String productId =  genericResult.getString("productId");
-                        BigDecimal eventQuantityTmp = genericResult.getBigDecimal("quantity");
+                    for(GenericValue sfd : salesForecastDetails) {
+                        String productId =  sfd.getString("productId");
+                        BigDecimal eventQuantityTmp = sfd.getBigDecimal("quantity");
                         if (productId == null || eventQuantityTmp == null) {
                             continue;
                         }
                         eventQuantityTmp = eventQuantityTmp.negate();
                         parameters = UtilMisc.toMap("mrpId", mrpId, "productId", productId, "eventDate", customTimePeriod.getDate("fromDate"), "mrpEventTypeId", "SALES_FORECAST");
                         try {
-                            InventoryEventPlannedServices.createOrUpdateMrpEvent(parameters, eventQuantityTmp, null, genericResult.getString("salesForecastDetailId"), false, delegator);
+                            InventoryEventPlannedServices.createOrUpdateMrpEvent(parameters, eventQuantityTmp, null, sfd.getString("salesForecastDetailId"), false, delegator);
                         } catch (GenericEntityException e) {
                             return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ManufacturingMrpEventProblemInitializing", UtilMisc.toMap("mrpEventTypeId", "SALES_FORECAST"), locale));
                         }
@@ -564,9 +536,7 @@ public class MrpServices {
         Delegator delegator = product.getDelegator();
 
         if (UtilValidate.isNotEmpty(listComponent)) {
-            Iterator<BOMNode> listComponentIter = listComponent.iterator();
-            while (listComponentIter.hasNext()) {
-                BOMNode node = listComponentIter.next();
+            for(BOMNode node : listComponent) {
                 GenericValue productComponent = node.getProductAssoc();
                 // read the startDate for the component
                 String routingTask = node.getProductAssoc().getString("routingWorkEffortId");
@@ -629,9 +599,7 @@ public class MrpServices {
                 if (UtilValidate.isEmpty(facilities)) {
                     return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ManufacturingMrpFacilityGroupIsNotAssociatedToFacility", UtilMisc.toMap("facilityGroupId", facilityGroupId), locale));
                 }
-                Iterator<GenericValue> facilitiesIt = facilities.iterator();
-                while (facilitiesIt.hasNext()) {
-                    GenericValue facilityMember = facilitiesIt.next();
+                for(GenericValue facilityMember : facilities) {
                     GenericValue facility = facilityMember.getRelatedOne("Facility");
                     if ("WAREHOUSE".equals(facility.getString("facilityTypeId")) && UtilValidate.isEmpty(facilityId)) {
                         facilityId = facility.getString("facilityId");
@@ -672,7 +640,6 @@ public class MrpServices {
         Map<String, Object> parameters = null;
         List<GenericValue> listInventoryEventForMRP = null;
         ListIterator<GenericValue> iteratorListInventoryEventForMRP = null;
-        GenericValue inventoryEventForMRP = null;
 
         // Initialization of the MrpEvent table, This table will contain the products we want to buy or build.
         parameters = UtilMisc.<String, Object>toMap("mrpId", mrpId, "reInitialize", Boolean.TRUE, "defaultYearsOffset", defaultYearsOffset, "userLogin", userLogin);
@@ -703,11 +670,9 @@ public class MrpServices {
 
             if (UtilValidate.isNotEmpty(listInventoryEventForMRP)) {
                 bomLevelWithNoEvent = 0;
-                iteratorListInventoryEventForMRP = listInventoryEventForMRP.listIterator();
 
                 oldProductId = "";
-                while (iteratorListInventoryEventForMRP.hasNext()) {
-                    inventoryEventForMRP = iteratorListInventoryEventForMRP.next();
+                for(GenericValue inventoryEventForMRP : listInventoryEventForMRP) {
                     productId = inventoryEventForMRP.getString("productId");
                     eventQuantity = inventoryEventForMRP.getBigDecimal("quantity");
 

Modified: ofbiz/branches/20111205EmailHandling/applications/manufacturing/src/org/ofbiz/manufacturing/techdata/TechDataServices.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/20111205EmailHandling/applications/manufacturing/src/org/ofbiz/manufacturing/techdata/TechDataServices.java?rev=1305581&r1=1305580&r2=1305581&view=diff
==============================================================================
--- ofbiz/branches/20111205EmailHandling/applications/manufacturing/src/org/ofbiz/manufacturing/techdata/TechDataServices.java (original)
+++ ofbiz/branches/20111205EmailHandling/applications/manufacturing/src/org/ofbiz/manufacturing/techdata/TechDataServices.java Mon Mar 26 20:56:02 2012
@@ -132,9 +132,7 @@ public class TechDataServices {
         }
 
         if (listRoutingTaskAssoc != null) {
-            Iterator<GenericValue> i = listRoutingTaskAssoc.iterator();
-            while (i.hasNext()) {
-                GenericValue routingTaskAssoc = i.next();
+            for(GenericValue routingTaskAssoc : listRoutingTaskAssoc) {
                 if (! workEffortIdFrom.equals(routingTaskAssoc.getString("workEffortIdFrom")) ||
                 ! workEffortIdTo.equals(routingTaskAssoc.getString("workEffortIdTo")) ||
                 ! workEffortAssocTypeId.equals(routingTaskAssoc.getString("workEffortAssocTypeId")) ||

Modified: ofbiz/branches/20111205EmailHandling/applications/manufacturing/webapp/manufacturing/WEB-INF/controller.xml
URL: http://svn.apache.org/viewvc/ofbiz/branches/20111205EmailHandling/applications/manufacturing/webapp/manufacturing/WEB-INF/controller.xml?rev=1305581&r1=1305580&r2=1305581&view=diff
==============================================================================
--- ofbiz/branches/20111205EmailHandling/applications/manufacturing/webapp/manufacturing/WEB-INF/controller.xml (original)
+++ ofbiz/branches/20111205EmailHandling/applications/manufacturing/webapp/manufacturing/WEB-INF/controller.xml Mon Mar 26 20:56:02 2012
@@ -466,7 +466,7 @@ under the License.
     </request-map>
     <request-map uri="ShowProductionRun">
         <security https="true" auth="true"/>
-        <event type="groovy" path="component://manufacturing/webapp/manufacturing/jobshopmgt/" invoke="ShowProductionRun.groovy"/>
+        <event type="groovy" path="component://manufacturing/webapp/manufacturing/jobshopmgt/ShowProductionRun.groovy"/>
         <response name="docs_not_printed" type="view" value="EditProductionRun"/>
         <response name="docs_printed" type="view" value="ProductionRunDeclaration"/>
         <response name="error" type="view" value="FindProductionRun"/>

Modified: ofbiz/branches/20111205EmailHandling/applications/marketing/config/MarketingUiLabels.xml
URL: http://svn.apache.org/viewvc/ofbiz/branches/20111205EmailHandling/applications/marketing/config/MarketingUiLabels.xml?rev=1305581&r1=1305580&r2=1305581&view=diff
==============================================================================
--- ofbiz/branches/20111205EmailHandling/applications/marketing/config/MarketingUiLabels.xml (original)
+++ ofbiz/branches/20111205EmailHandling/applications/marketing/config/MarketingUiLabels.xml Mon Mar 26 20:56:02 2012
@@ -27,6 +27,7 @@
         <value xml:lang="pt_BR">Custo real</value>
         <value xml:lang="ro">Cost Actual</value>
         <value xml:lang="th">ราคาจริง</value>
+        <value xml:lang="vi">Chi phí thá»±c tế</value>
         <value xml:lang="zh">实际费用</value>
         <value xml:lang="zh_TW">實際費用</value>
     </property>
@@ -68,6 +69,7 @@
         <value xml:lang="fr">Prospects convertis</value>
         <value xml:lang="it">Leads convertiti</value>
         <value xml:lang="pt_BR">Leads concretizados</value>
+        <value xml:lang="vi">Các đầu mối được chuyển đổi</value>
         <value xml:lang="zh">转化了的线索</value>
         <value xml:lang="zh_TW">轉化了的線索</value>
     </property>
@@ -197,6 +199,7 @@
         <value xml:lang="pt_BR">Campanha de Marketing</value>
         <value xml:lang="ro">Campania Vanzare</value>
         <value xml:lang="th">การวางแผนทางการตลาด</value>
+        <value xml:lang="vi">Chiến dịch tiếp thị</value>
         <value xml:lang="zh">市场攻势</value>
         <value xml:lang="zh_TW">行銷活動</value>
     </property>
@@ -210,6 +213,7 @@
         <value xml:lang="pt_BR">Criar Campanha de Marketing</value>
         <value xml:lang="ro">Creare Campanie Vanzare</value>
         <value xml:lang="th">สร้างการวางแผนทางการตลาด</value>
+        <value xml:lang="vi">Tạo Chiến dịch tiếp thị</value>
         <value xml:lang="zh">新建市场攻势</value>
         <value xml:lang="zh_TW">新建行銷活動</value>
     </property>
@@ -223,6 +227,7 @@
         <value xml:lang="pt_BR">ID de Campanha de Marketing</value>
         <value xml:lang="ro">Cod Campanie Vanzare</value>
         <value xml:lang="th">รหัสการวางแผนทางการตลาด</value>
+        <value xml:lang="vi">Mã chiến dịch tiếp thị</value>
         <value xml:lang="zh">市场攻势标识</value>
         <value xml:lang="zh_TW">行銷活動ID</value>
     </property>
@@ -234,6 +239,7 @@
         <value xml:lang="nl">Fout emailadres opgegeven.</value>
         <value xml:lang="pt_BR">Endereço de e-mail inválido</value>
         <value xml:lang="th">เข้าสู่ที่อยู่ของอีเมล์ไม่ได้</value>
+        <value xml:lang="vi">Địa chỉ email nhập vào không phù hợp.</value>
         <value xml:lang="zh">输入的电子邮件地址无效。</value>
         <value xml:lang="zh_TW">輸入的電子郵件位址無效。</value>
     </property>
@@ -247,6 +253,7 @@
         <value xml:lang="pt_BR">Nome de campanha</value>
         <value xml:lang="ro">Nume Campanie</value>
         <value xml:lang="th">ชื่อโครงการ</value>
+        <value xml:lang="vi">Tên chiến dịch</value>
         <value xml:lang="zh">攻势名称</value>
         <value xml:lang="zh_TW">活動名稱</value>
     </property>
@@ -260,6 +267,7 @@
         <value xml:lang="pt_BR">Relatório de campanha de marketing</value>
         <value xml:lang="ro">Tiparire Campanie de Vanzare</value>
         <value xml:lang="th">รายงานการวางแผนทางการตลาด</value>
+        <value xml:lang="vi">Báo cáo chiến dịch tiếp thị</value>
         <value xml:lang="zh">市场攻势报告</value>
         <value xml:lang="zh_TW">行銷活動報告</value>
     </property>
@@ -273,6 +281,7 @@
         <value xml:lang="pt_BR">Criar papel de campanha de marketig</value>
         <value xml:lang="ro">Creare Rol Campanie Vanzare</value>
         <value xml:lang="th">สร้างสถานะการวางแผนทางการตลาด</value>
+        <value xml:lang="vi">Khởi tạo vai trò trong chiến dịch</value>
         <value xml:lang="zh">新建市场攻势角色</value>
         <value xml:lang="zh_TW">新建行銷活動角色</value>
     </property>
@@ -286,6 +295,7 @@
         <value xml:lang="pt_BR">Descrição da campanha</value>
         <value xml:lang="ro">Sumar Campanie</value>
         <value xml:lang="th">สรุปโครงการ</value>
+        <value xml:lang="vi">Tóm tắt chiến dịch</value>
         <value xml:lang="zh">攻势摘要</value>
         <value xml:lang="zh_TW">活動摘要</value>
     </property>
@@ -299,6 +309,7 @@
         <value xml:lang="pt_BR">OFBiz: Gerente de Marketing</value>
         <value xml:lang="ro">OFBiz: Gestione Vendite</value>
         <value xml:lang="th">OFBiz: การจัดการทางการตลาด</value>
+        <value xml:lang="vi">OFBiz: Quản lý tiếp thị</value>
         <value xml:lang="zh">OFBiz: 市场宣传管理</value>
         <value xml:lang="zh_TW">OFBiz: 行銷管理</value>
     </property>
@@ -329,6 +340,7 @@
         <value xml:lang="pt_BR">Lista de contatos</value>
         <value xml:lang="ro">Lista Contact</value>
         <value xml:lang="th">รายการติดต่อ</value>
+        <value xml:lang="vi">Danh sách liên hệ</value>
         <value xml:lang="zh">联系列表</value>
         <value xml:lang="zh_TW">聯系列表</value>
     </property>
@@ -341,6 +353,7 @@
         <value xml:lang="pt_BR">Criar envento de comunicação</value>
         <value xml:lang="ro">Creare Noua Lista Contact Eveniment Comunicatie</value>
         <value xml:lang="th">สร้างรายการผลการติดต่อใหม่</value>
+        <value xml:lang="vi">Tạo mới danh sách liên hệ cho sá»± kiện</value>
         <value xml:lang="zh">新建联系列表沟通事件</value>
         <value xml:lang="zh_TW">新建聯系列表溝通事件</value>
     </property>
@@ -353,6 +366,7 @@
         <value xml:lang="pt_BR">ID de evento de comunicação</value>
         <value xml:lang="ro">Cod Eveniment Comunicatie</value>
         <value xml:lang="th">รหัสผลการติดต่อ</value>
+        <value xml:lang="vi">Mã sá»± kiện truyền thông</value>
         <value xml:lang="zh">沟通事件标识</value>
         <value xml:lang="zh_TW">通訊事件ID</value>
     </property>
@@ -370,6 +384,7 @@
     <property key="MarketingContactListCommStatus">
         <value xml:lang="en">Contact List Communication Status</value>
         <value xml:lang="pt_BR">Estado da comunicação com Lista de contatos</value>
+        <value xml:lang="vi">Tình trạng danh sách liên hệ truyền thông</value>
         <value xml:lang="zh">联系列表沟通状态</value>
         <value xml:lang="zh_TW">聯絡列表溝通狀態</value>
     </property>
@@ -382,6 +397,7 @@
         <value xml:lang="pt_BR">ID de lista de contatos</value>
         <value xml:lang="ro">Cod Lista Contact</value>
         <value xml:lang="th">รหัสรายการติดต่อ</value>
+        <value xml:lang="vi">Mã danh sách liên hệ</value>
         <value xml:lang="zh">联系列表标识</value>
         <value xml:lang="zh_TW">聯絡列表ID</value>
     </property>
@@ -394,6 +410,7 @@
         <value xml:lang="pt_BR">Nome da lista de contatos</value>
         <value xml:lang="ro">Nume Lista Contact</value>
         <value xml:lang="th">รายชื่อที่ติดต่อ</value>
+        <value xml:lang="vi">Tên danh sách liên hệ</value>
         <value xml:lang="zh">联系列表名称</value>
         <value xml:lang="zh_TW">聯系列表名稱</value>
     </property>
@@ -406,6 +423,7 @@
         <value xml:lang="pt_BR">ID do tipo de lista de contato</value>
         <value xml:lang="ro">Tip Lista Contact</value>
         <value xml:lang="th">รหัสประเภทรายการติดต่อ</value>
+        <value xml:lang="vi">Mã phân loại danh sách liên hệ</value>
         <value xml:lang="zh">联系列表类型标识</value>
         <value xml:lang="zh_TW">聯絡列表類型ID</value>
     </property>
@@ -430,6 +448,7 @@
         <value xml:lang="pt_BR">Criar nova lista de contatos</value>
         <value xml:lang="ro">Creare Noua Lista Contact</value>
         <value xml:lang="th">สร้างรายการติดต่อใหม่</value>
+        <value xml:lang="vi">Tạo mới danh sách liên hệ</value>
         <value xml:lang="zh">新建联系列表</value>
         <value xml:lang="zh_TW">新建聯系列表</value>
     </property>
@@ -441,6 +460,7 @@
         <value xml:lang="pt_BR">Encontrar lista de contato</value>
         <value xml:lang="ro">Cauta Liste Contact</value>
         <value xml:lang="th">ค้นหารายการติดต่อ</value>
+        <value xml:lang="vi">Tìm kiếm danh sách liên hệ</value>
         <value xml:lang="zh">查找联系列表</value>
         <value xml:lang="zh_TW">查找聯系列表</value>
     </property>
@@ -454,6 +474,7 @@
         <value xml:lang="pt_BR">É pública ?</value>
         <value xml:lang="ro">Este Public ?</value>
         <value xml:lang="th">เป็นสาธารณะ ?</value>
+        <value xml:lang="vi">Nó được phổ biến không ?</value>
         <value xml:lang="zh">公开吗?</value>
         <value xml:lang="zh_TW">公開嗎?</value>
     </property>
@@ -466,6 +487,7 @@
         <value xml:lang="pt_BR">É de uso único ?</value>
         <value xml:lang="ro">Este pentru un unic utilizatir?</value>
         <value xml:lang="th">ใช้ได้ครั้งเดียว ?</value>
+        <value xml:lang="vi">Nó được sá»­ dụng độc lập không ?</value>
         <value xml:lang="zh">单一用途吗?</value>
         <value xml:lang="zh_TW">單一用途嗎?</value>
     </property>
@@ -477,6 +499,7 @@
         <value xml:lang="pt_BR">Não foi possível encontrar lista de e-mail [${contactListId}].</value>
         <value xml:lang="ro">Nu este posibila gasirea listei e-mail [${contactListId}].</value>
         <value xml:lang="th">ไม่สามารถค้นหารายการติดต่อ [${contactListId}]</value>
+        <value xml:lang="vi">Không tìm thấy danh sách email [${contactListId}].</value>
         <value xml:lang="zh">无法找到电子邮件列表 [${contactListId}]。</value>
         <value xml:lang="zh_TW">無法找到電子郵件列表 [${contactListId}]。</value>
     </property>
@@ -511,6 +534,7 @@
         <value xml:lang="pt_BR">ID do proprietário</value>
         <value xml:lang="ro">Cod Subiect Proprietar</value>
         <value xml:lang="th">รหัสของกลุ่มผู้ใช้</value>
+        <value xml:lang="vi">Mã đối tượng sở hữu</value>
         <value xml:lang="zh">拥有人会员标识</value>
         <value xml:lang="zh_TW">擁有者成員ID</value>
     </property>
@@ -523,6 +547,7 @@
         <value xml:lang="pt_BR">Participante de Lista de contatos</value>
         <value xml:lang="ro">Lista Contacte Subiecti</value>
         <value xml:lang="th">รายการติดต่อกลุ่มผู้ใช้</value>
+        <value xml:lang="vi">Danh sách liên hệ tới đối tượng</value>
         <value xml:lang="zh">联系列表会员</value>
         <value xml:lang="zh_TW">聯絡列表成員</value>
     </property>
@@ -535,6 +560,7 @@
         <value xml:lang="pt_BR">Criar novo participante de lista de contatos</value>
         <value xml:lang="ro">Creare Noua Lista Contact Subiect</value>
         <value xml:lang="th">สร้างรายการติดต่อกลุ่มผู้ใช้ใหม่</value>
+        <value xml:lang="vi">Tạo mới danh sách liên hệ tới đối tượng</value>
         <value xml:lang="zh">新建联系列表会员</value>
         <value xml:lang="zh_TW">新建聯絡列表成員</value>
     </property>
@@ -548,12 +574,14 @@
         <value xml:lang="pt_BR">ID de participante</value>
         <value xml:lang="ro">Cod Subiect</value>
         <value xml:lang="th">รหัสกลุ่มผู้ใช้</value>
+        <value xml:lang="vi">Mã đối tượng</value>
         <value xml:lang="zh">会员标识</value>
         <value xml:lang="zh_TW">成員ID</value>
     </property>
     <property key="MarketingContactListPartiesImport">
         <value xml:lang="en">Import Parties</value>
         <value xml:lang="th">นำเข้ากลุ่มผู้ใช้</value>
+        <value xml:lang="vi">Nhập vào các đối tượng</value>
     </property>
     <property key="MarketingContactListPreferredContactMech">
         <value xml:lang="en">Preferred Contact Mechanism</value>
@@ -577,6 +605,7 @@
         <value xml:lang="pt_BR">Verificação de e-mail de origem</value>
         <value xml:lang="ro">Verifica Email De la</value>
         <value xml:lang="th">ตรวจสอบอีเมล์จาก</value>
+        <value xml:lang="vi">Xác nhận email từ</value>
         <value xml:lang="zh">验证电子邮件来自</value>
         <value xml:lang="zh_TW">驗証電子郵件來自</value>
     </property>
@@ -590,6 +619,7 @@
         <value xml:lang="pt_BR">Tela de verificação de e-mail</value>
         <value xml:lang="ro">Verifica Email Videata</value>
         <value xml:lang="th">ตรวจสอบอีเมล์</value>
+        <value xml:lang="vi">Màn hình xác nhận email</value>
         <value xml:lang="zh">验证电子邮件屏幕</value>
         <value xml:lang="zh_TW">驗証電子郵件螢幕</value>
     </property>
@@ -661,6 +691,7 @@
         <value xml:lang="en">Email Status Report</value>
         <value xml:lang="it">Report stato e-mail</value>
         <value xml:lang="pt_BR">Relatório de estado de e-mail</value>
+        <value xml:lang="vi">Báo cáo tình trạng email</value>
     </property>
     <property key="MarketingFindAccounts">
         <value xml:lang="en">Find SFA Accounts</value>
@@ -668,6 +699,7 @@
         <value xml:lang="it">Ricerca utenze SFA</value>
         <value xml:lang="pt_BR">Encontrar contas da equipe de vendas</value>
         <value xml:lang="th">ค้นหา Account</value>
+        <value xml:lang="vi">Tìm kiếm tài khoản bán hàng</value>
         <value xml:lang="zh">查找销售管理账户</value>
         <value xml:lang="zh_TW">查找銷售管理賬戶</value>
     </property>
@@ -676,12 +708,14 @@
         <value xml:lang="fr">Rechercher des contacts</value>
         <value xml:lang="pt_BR">Encontrar contatos da equipe de vendas</value>
         <value xml:lang="th">ค้นหา Contact</value>
+        <value xml:lang="vi">Tìm kiến liên hệ bán hàng</value>
     </property>
     <property key="MarketingFindLeads">
         <value xml:lang="en">Find SFA Leads</value>
         <value xml:lang="fr">Rechercher des prospects</value>
         <value xml:lang="pt_BR">Buscar Leads da equipe de vendas</value>
         <value xml:lang="th">ค้นหา Lead</value>
+        <value xml:lang="vi">Tìm đầu mối bán hàng</value>
     </property>
     <property key="MarketingMainPage">
         <value xml:lang="de">Haupt</value>
@@ -693,6 +727,7 @@
         <value xml:lang="pt_BR">Principal</value>
         <value xml:lang="ro">Pagina Principala</value>
         <value xml:lang="th">หน้าหลัก</value>
+        <value xml:lang="vi">Trang chính</value>
         <value xml:lang="zh">首页</value>
         <value xml:lang="zh_TW">首頁</value>
     </property>
@@ -705,6 +740,7 @@
         <value xml:lang="pt_BR">Gestão de Marketing</value>
         <value xml:lang="ro">Aplicatie Gestiune Vanzare</value>
         <value xml:lang="th">โปรแกรมประยุกต์การจัดการทางการตลาด</value>
+        <value xml:lang="vi">Quản lý tiếp thị</value>
         <value xml:lang="zh">市场管理应用程序</value>
         <value xml:lang="zh_TW">行銷管理</value>
     </property>
@@ -717,6 +753,7 @@
         <value xml:lang="pt_BR">Aplicação de Gestão de Marketing</value>
         <value xml:lang="ro">Aplicatie Gestiune Vanzare</value>
         <value xml:lang="th">โปรแกรมประยุกต์การจัดการทางการตลาด</value>
+        <value xml:lang="vi">Ứng dụng quản lý tiếp thị</value>
         <value xml:lang="zh">市场管理应用程序</value>
         <value xml:lang="zh_TW">行銷管理應用程式</value>
     </property>
@@ -726,6 +763,7 @@
         <value xml:lang="it">Benvenuto nell'applicazione gestione vendite!</value>
         <value xml:lang="pt_BR">Bem-vindo à aplicação de Gestão de Marketing</value>
         <value xml:lang="th">ยินดีต้อนรับสู่การจัดการทางการตลาด</value>
+        <value xml:lang="vi">Chào mừng bạn đến với Ứng dụng quản lý tiếp thị!</value>
         <value xml:lang="zh">欢迎使用市场管理程序!</value>
         <value xml:lang="zh_TW">歡迎使用行銷管理程式!</value>
     </property>
@@ -735,6 +773,7 @@
         <value xml:lang="fr">N° des employés</value>
         <value xml:lang="it">N. di impiegati</value>
         <value xml:lang="pt_BR">Número de empregados</value>
+        <value xml:lang="vi">Không có nhân viên nào</value>
         <value xml:lang="zh">雇员数量</value>
         <value xml:lang="zh_TW">雇員數量</value>
     </property>
@@ -777,6 +816,7 @@
         <value xml:lang="en">Party Status Report</value>
         <value xml:lang="it">Report stato soggetti</value>
         <value xml:lang="pt_BR">Relatório de estado de participante</value>
+        <value xml:lang="vi">Báo cáo tình trạng đối tượng</value>
     </property>
     <property key="MarketingReports">
         <value xml:lang="de">Berichte</value>
@@ -788,6 +828,7 @@
         <value xml:lang="pt_BR">Relatórios</value>
         <value xml:lang="ro">Tiparire</value>
         <value xml:lang="th">รายงาน</value>
+        <value xml:lang="vi">Báo cáo</value>
         <value xml:lang="zh">报告</value>
         <value xml:lang="zh_TW">報告</value>
     </property>
@@ -799,6 +840,7 @@
         <value xml:lang="pt_BR">Segmento</value>
         <value xml:lang="ro">Segment</value>
         <value xml:lang="th">กลุ่ม</value>
+        <value xml:lang="vi">Phân đoạn</value>
         <value xml:lang="zh">分区</value>
         <value xml:lang="zh_TW">分區</value>
     </property>
@@ -811,6 +853,7 @@
         <value xml:lang="pt_BR">Criar grupo de classificação de segmento</value>
         <value xml:lang="ro">Creare Noua Clasificare Grup Segment</value>
         <value xml:lang="th">สร้างการจัดแบ่งประเภทของกลุ่มใหม่</value>
+        <value xml:lang="vi">Tạo mới các lớp cho nhóm phân đoạn</value>
         <value xml:lang="zh">新建分区组分类</value>
         <value xml:lang="zh_TW">新建分區組分類</value>
     </property>
@@ -823,6 +866,7 @@
         <value xml:lang="pt_BR">Criar novo grupo de segmento</value>
         <value xml:lang="ro">Creare Nou Grup Segment</value>
         <value xml:lang="th">สร้างส่วนของกลุ่มใหม่</value>
+        <value xml:lang="vi">Tạo mới các nhóm phân đoạn</value>
         <value xml:lang="zh">新建分区组</value>
         <value xml:lang="zh_TW">新建分區組</value>
     </property>
@@ -830,6 +874,7 @@
         <value xml:lang="en">Error on creation Segment Group</value>
         <value xml:lang="it">Errore durante la creazione di un nuovo gruppo segmento</value>
         <value xml:lang="pt_BR">Erro ao criar grupo de segmento</value>
+        <value xml:lang="vi">Lỗi trong việc khởi tạo nhóm phân đoạn</value>
         <value xml:lang="zh">创建分区组时出错</value>
         <value xml:lang="zh_TW">創建分區組時出錯</value>
     </property>
@@ -837,6 +882,7 @@
         <value xml:lang="en">Error on delete Segment Group</value>
         <value xml:lang="it">Errore durante la cancellazione di un gruppo segmento</value>
         <value xml:lang="pt_BR">Erro ao excluir grupo de segmento</value>
+        <value xml:lang="vi">Lỗi trong việc xóa nhóm phân đoạn</value>
         <value xml:lang="zh">删除分区组时出错</value>
         <value xml:lang="zh_TW">刪除分區組時出錯</value>
     </property>
@@ -850,6 +896,7 @@
         <value xml:lang="pt_BR">Descrição</value>
         <value xml:lang="ro">Descriere</value>
         <value xml:lang="th">รายละเอียด</value>
+        <value xml:lang="vi">Mô tả</value>
         <value xml:lang="zh">描述</value>
         <value xml:lang="zh_TW">描述</value>
     </property>
@@ -862,6 +909,7 @@
         <value xml:lang="pt_BR">Criar nova localização de grupo de segmento</value>
         <value xml:lang="ro">Creare Nou Grup Segment Geografie</value>
         <value xml:lang="th">สร้างส่วนของโครงสร้างกลุ่มใหม่</value>
+        <value xml:lang="vi">Tạo mới nhóm phân đoạn địa lý</value>
         <value xml:lang="zh">新建分区组地理</value>
         <value xml:lang="zh_TW">新建分區組地理</value>
     </property>
@@ -1031,6 +1079,7 @@
         <value xml:lang="pt_BR">Rastreio</value>
         <value xml:lang="ro">Traseu</value>
         <value xml:lang="th">การติดตาม</value>
+        <value xml:lang="vi">Truy vết</value>
         <value xml:lang="zh">跟踪</value>
         <value xml:lang="zh_TW">跟蹤</value>
     </property>
@@ -1042,6 +1091,7 @@
         <value xml:lang="pt_BR">Código para rastreio</value>
         <value xml:lang="ro">Cod Traseu</value>
         <value xml:lang="th">รหัส Tracking</value>
+        <value xml:lang="vi">Mã truy vết</value>
         <value xml:lang="zh">跟踪码</value>
         <value xml:lang="zh_TW">跟蹤碼</value>
     </property>
@@ -1236,6 +1286,7 @@
         <value xml:lang="pt_BR">Relatório de código de rastreio</value>
         <value xml:lang="ro">Tiparire Cod Traseu</value>
         <value xml:lang="th">รหัส Tracking</value>
+        <value xml:lang="vi">Báo cáo mã truy vết</value>
         <value xml:lang="zh">跟踪码报告</value>
         <value xml:lang="zh_TW">跟蹤碼報告</value>
     </property>
@@ -1247,6 +1298,7 @@
         <value xml:lang="pt_BR">ID de subgrupo</value>
         <value xml:lang="ro">Cod Sub-Grup</value>
         <value xml:lang="th">รหัสกลุ่มย่อย</value>
+        <value xml:lang="vi">Mã nhóm cấp dưới</value>
         <value xml:lang="zh">下级组标识</value>
         <value xml:lang="zh_TW">次級群組ID</value>
     </property>
@@ -1258,6 +1310,7 @@
         <value xml:lang="pt_BR">Tempo de vida</value>
         <value xml:lang="ro">Traseu Timp de Viata</value>
         <value xml:lang="th">เส้นทางที่ใช้ได้ตลอดเวลา</value>
+        <value xml:lang="vi">Tiến trình truy vết</value>
         <value xml:lang="zh">可跟踪期限</value>
         <value xml:lang="zh_TW">追蹤期限</value>
     </property>
@@ -1269,6 +1322,7 @@
         <value xml:lang="pt_BR">ID de código de rastreio</value>
         <value xml:lang="ro">Code Traseu</value>
         <value xml:lang="th">รหัส Tracking</value>
+        <value xml:lang="vi">Mã truy vết</value>
         <value xml:lang="zh">跟踪码标识</value>
         <value xml:lang="zh_TW">追蹤碼ID</value>
     </property>
@@ -1280,6 +1334,7 @@
         <value xml:lang="pt_BR">ID de tipo de código de rastreio</value>
         <value xml:lang="ro">Tip Traseu</value>
         <value xml:lang="th">รหัสประเภทรหัส Tracking</value>
+        <value xml:lang="vi">Mã phân loại truy vết</value>
         <value xml:lang="zh">跟踪码类型标识</value>
         <value xml:lang="zh_TW">追蹤碼類型ID</value>
     </property>
@@ -1291,6 +1346,7 @@
         <value xml:lang="pt_BR">Tipo de código de rastreio</value>
         <value xml:lang="ro">Tip Cod Traseu</value>
         <value xml:lang="th">ประเภทรหัส Tracking</value>
+        <value xml:lang="vi">Phân loại mã truy vết</value>
         <value xml:lang="zh">跟踪码类型</value>
         <value xml:lang="zh_TW">跟蹤碼類型</value>
     </property>
@@ -1302,6 +1358,7 @@
         <value xml:lang="pt_BR">Criar tipo de código de rastreio</value>
         <value xml:lang="ro">Creare Tip Traseu</value>
         <value xml:lang="th">สร้างประเภทรหัส Tracking</value>
+        <value xml:lang="vi">Tạo loại mã truy vết</value>
         <value xml:lang="zh">新建跟踪码类型</value>
         <value xml:lang="zh_TW">新建跟蹤碼類型</value>
     </property>
@@ -1314,6 +1371,7 @@
         <value xml:lang="pt_BR">Descrição</value>
         <value xml:lang="ro">Descriere</value>
         <value xml:lang="th">รายละเอียด</value>
+        <value xml:lang="vi">Mô tả</value>
         <value xml:lang="zh">描述</value>
         <value xml:lang="zh_TW">描述</value>
     </property>
@@ -1586,6 +1644,7 @@
         <value xml:lang="fr">Créer un prospect depuis une vCard</value>
         <value xml:lang="it">Creare lead dalla vCard</value>
         <value xml:lang="pt_BR">Criar novo Lead a partir do vCard</value>
+        <value xml:lang="vi">Tạo đầu mối từ vCard</value>
         <value xml:lang="zh">从vCard新建线索</value>
         <value xml:lang="zh_TW">從vCard新建線索</value>
     </property>
@@ -1595,6 +1654,7 @@
         <value xml:lang="fr">Modifier le compte</value>
         <value xml:lang="it">Aggiornare utente</value>
         <value xml:lang="pt_BR">Editar conta</value>
+        <value xml:lang="vi">Chỉnh sá»­a tài khoản</value>
         <value xml:lang="zh">编辑账户</value>
         <value xml:lang="zh_TW">編輯賬戶</value>
     </property>
@@ -2102,6 +2162,7 @@
         <value xml:lang="fr">Comptes</value>
         <value xml:lang="it">Utenze</value>
         <value xml:lang="pt_BR">Contas</value>
+        <value xml:lang="vi">Tài khoản</value>
         <value xml:lang="zh">账户</value>
         <value xml:lang="zh_TW">賬戶</value>
     </property>
@@ -2130,6 +2191,7 @@
         <value xml:lang="fr">Tous les comptes</value>
         <value xml:lang="pt_BR">Todas contas</value>
         <value xml:lang="th">Account ทั้งหมด</value>
+        <value xml:lang="vi">Toàn bộ tài khoản</value>
     </property>
     <property key="SfaAllContacts">
         <value xml:lang="de">Alle Kontakte</value>
@@ -2137,12 +2199,14 @@
         <value xml:lang="fr">Tous les contacts</value>
         <value xml:lang="pt_BR">Todos contatos</value>
         <value xml:lang="th">Contact ทั้งหมด</value>
+        <value xml:lang="vi">Toàn bộ liên hệ</value>
     </property>
     <property key="SfaAllLeads">
         <value xml:lang="en">All Leads</value>
         <value xml:lang="fr">Tous les prospects</value>
         <value xml:lang="pt_BR">Todos Leads</value>
         <value xml:lang="th">Lead ทั้งหมด</value>
+        <value xml:lang="vi">Toàn bộ đầu mối</value>
     </property>
     <property key="SfaAssignToMe">
         <value xml:lang="de">Zugewiesen an mich</value>
@@ -2150,6 +2214,7 @@
         <value xml:lang="fr">Me l'assigner</value>
         <value xml:lang="pt_BR">Designar para mim</value>
         <value xml:lang="th">กำหนดให้ฉัน</value>
+        <value xml:lang="vi">Phân quyền cho tôi</value>
     </property>
     <property key="SfaAssignedBy">
         <value xml:lang="de">Zugewiesen von</value>
@@ -2157,6 +2222,7 @@
         <value xml:lang="fr">Assigné par</value>
         <value xml:lang="pt_BR">Designada por</value>
         <value xml:lang="th">กำหนดโดย</value>
+        <value xml:lang="vi">Phân quyền bởi</value>
     </property>
     <property key="SfaAutoCreateContactByImportingVCard">
         <value xml:lang="de">Automatisches Erstellen eines neuen Kontaktes bei dem Import einer vCard</value>
@@ -2228,6 +2294,7 @@
         <value xml:lang="fr">OFBiz: gestion des ventes</value>
         <value xml:lang="it">OFBiz: Gestione forze di vendita</value>
         <value xml:lang="pt_BR">OFBiz: gestor da equipe de vendas</value>
+        <value xml:lang="vi">OFBiz: Quản lý bán hàng</value>
         <value xml:lang="zh">OFBiz: 销售管理程序</value>
         <value xml:lang="zh_TW">OFBiz: 銷售管理程式</value>
     </property>
@@ -2236,6 +2303,7 @@
         <value xml:lang="fr">Concurrents &amp; Associés</value>
         <value xml:lang="it">Competitori e soci</value>
         <value xml:lang="pt_BR">Concorrentes &amp; Parceiros</value>
+        <value xml:lang="vi">Đối tác</value>
         <value xml:lang="zh">竞争者和合作伙伴</value>
         <value xml:lang="zh_TW">競爭者和合作伙伴</value>
     </property>
@@ -2244,6 +2312,7 @@
         <value xml:lang="en">Complete</value>
         <value xml:lang="pt_BR">Completo</value>
         <value xml:lang="th">เสร็จสิ้น</value>
+        <value xml:lang="vi">Hoàn thành</value>
     </property>
     <property key="SfaContact">
         <value xml:lang="de">Kontakt</value>
@@ -2251,6 +2320,7 @@
         <value xml:lang="fr">Contact</value>
         <value xml:lang="it">Contatto</value>
         <value xml:lang="pt_BR">Contato</value>
+        <value xml:lang="vi">Liên hệ</value>
         <value xml:lang="zh">联系</value>
         <value xml:lang="zh_TW">聯系</value>
     </property>
@@ -2259,6 +2329,7 @@
         <value xml:lang="fr">Contacts</value>
         <value xml:lang="it">Contatti</value>
         <value xml:lang="pt_BR">Contatos</value>
+        <value xml:lang="vi">Liên hệ</value>
         <value xml:lang="zh">联系</value>
         <value xml:lang="zh_TW">聯系</value>
     </property>
@@ -2268,6 +2339,7 @@
         <value xml:lang="fr">Convertir le prospect</value>
         <value xml:lang="it">Converti lead</value>
         <value xml:lang="pt_BR">Concretizar Lead</value>
+        <value xml:lang="vi">Chuyển đổi đầu mối</value>
         <value xml:lang="zh">转化线索</value>
         <value xml:lang="zh_TW">轉化線索</value>
     </property>
@@ -2312,6 +2384,7 @@
         <value xml:lang="fr">Documents</value>
         <value xml:lang="it">Documenti</value>
         <value xml:lang="pt_BR">Documentos</value>
+        <value xml:lang="vi">Tài liệu</value>
         <value xml:lang="zh">文档</value>
         <value xml:lang="zh_TW">文檔</value>
     </property>
@@ -2345,6 +2418,7 @@
         <value xml:lang="fr">Évènements</value>
         <value xml:lang="it">Eventi</value>
         <value xml:lang="pt_BR">Eventos</value>
+        <value xml:lang="vi">Sá»± kiện</value>
         <value xml:lang="zh">事件</value>
         <value xml:lang="zh_TW">事件</value>
     </property>
@@ -2364,12 +2438,14 @@
         <value xml:lang="en">Find Account Leads</value>
         <value xml:lang="pt_BR">Buscar contas de Leads</value>
         <value xml:lang="th">ค้นหา Account Leads</value>
+        <value xml:lang="vi">Tìm kiếm tài khoản đầu mối</value>
     </property>
     <property key="SfaFindAccounts">
         <value xml:lang="de">Finde Konten</value>
         <value xml:lang="en">Find Accounts</value>
         <value xml:lang="pt_BR">Buscar contas</value>
         <value xml:lang="th">ค้นหา Accounts</value>
+        <value xml:lang="vi">Tìm kiếm tài khoản</value>
     </property>
     <property key="SfaFindContacts">
         <value xml:lang="de">Finde Kontakte</value>
@@ -2377,6 +2453,7 @@
         <value xml:lang="fr">Rechercher les contacts</value>
         <value xml:lang="it">Ricerca contatti</value>
         <value xml:lang="pt_BR">Buscar contatos</value>
+        <value xml:lang="vi">Tìm kiếm liên hệ</value>
         <value xml:lang="zh">查找联系</value>
         <value xml:lang="zh_TW">查找聯系</value>
     </property>
@@ -2386,6 +2463,7 @@
         <value xml:lang="fr">Recherchers les prospects</value>
         <value xml:lang="it">Ricerca leads</value>
         <value xml:lang="pt_BR">Buscar Leads</value>
+        <value xml:lang="vi">Tìm kiếm đầu mối</value>
         <value xml:lang="zh">查找线索</value>
         <value xml:lang="zh_TW">查找線索</value>
     </property>
@@ -2395,6 +2473,7 @@
         <value xml:lang="fr">Rechercher les opportunités</value>
         <value xml:lang="it">Ricerca opportunità</value>
         <value xml:lang="pt_BR">Buscar oportunidades</value>
+        <value xml:lang="vi">Tìm kiếm cÆ¡ hội</value>
         <value xml:lang="zh">查找机会</value>
         <value xml:lang="zh_TW">查找機會</value>
     </property>
@@ -2405,6 +2484,7 @@
         <value xml:lang="fr">Rechercher les résultats</value>
         <value xml:lang="it">Ricerca risultati</value>
         <value xml:lang="pt_BR">Buscar resultados</value>
+        <value xml:lang="vi">Tìm kiếm kết quả</value>
         <value xml:lang="zh">查找结果</value>
         <value xml:lang="zh_TW">查找結果</value>
     </property>
@@ -2429,6 +2509,7 @@
         <value xml:lang="fr">Prévision</value>
         <value xml:lang="it">Previsioni</value>
         <value xml:lang="pt_BR">Previsão</value>
+        <value xml:lang="vi">Dá»± báo</value>
         <value xml:lang="zh">预测</value>
         <value xml:lang="zh_TW">預測</value>
     </property>
@@ -2482,6 +2563,7 @@
         <value xml:lang="fr">Prospects</value>
         <value xml:lang="it">Leads</value>
         <value xml:lang="pt_BR">Leads</value>
+        <value xml:lang="vi">Đầu mối</value>
         <value xml:lang="zh">线索</value>
         <value xml:lang="zh_TW">線索</value>
     </property>
@@ -2498,6 +2580,7 @@
         <value xml:lang="fr">Application de gestion des ventes</value>
         <value xml:lang="it">Gestione vendite</value>
         <value xml:lang="pt_BR">Gestor de automação de equipe de vendas</value>
+        <value xml:lang="vi">Quản lý bán hàng</value>
         <value xml:lang="zh">销售管理应用程序</value>
         <value xml:lang="zh_TW">銷售管理應用程式</value>
     </property>
@@ -2532,6 +2615,7 @@
         <value xml:lang="fr">Fusionner les prospects</value>
         <value xml:lang="it">Merge Leads</value>
         <value xml:lang="pt_BR">Mesclar Leads</value>
+        <value xml:lang="vi">Ghép trộn các đầu mối</value>
         <value xml:lang="zh">合并线索</value>
         <value xml:lang="zh_TW">合並線索</value>
     </property>
@@ -2563,6 +2647,7 @@
         <value xml:lang="fr">Mes prospects</value>
         <value xml:lang="pt_BR">Meus Leads</value>
         <value xml:lang="th">Lead ของฉัน</value>
+        <value xml:lang="vi">Đầu mối cá»§a tôi</value>
     </property>
     <property key="SfaNewSalesForecast">
         <value xml:lang="de">Neue Verkaufsprognose</value>
@@ -2599,6 +2684,7 @@
         <value xml:lang="fr">Opportunités</value>
         <value xml:lang="it">Opportunità</value>
         <value xml:lang="pt_BR">Oportunidades</value>
+        <value xml:lang="vi">CÆ¡ hội</value>
         <value xml:lang="zh">机会</value>
         <value xml:lang="zh_TW">機會</value>
     </property>
@@ -2652,6 +2738,7 @@
         <value xml:lang="fr">Ajout rapide d'un contact</value>
         <value xml:lang="it">Aggiunta veloce contatto</value>
         <value xml:lang="pt_BR">Adição rápida de contato</value>
+        <value xml:lang="vi">Thêm nhanh Liên hệ</value>
         <value xml:lang="zh">快速添加联系</value>
         <value xml:lang="zh_TW">快速添加聯系</value>
     </property>
@@ -2660,6 +2747,7 @@
         <value xml:lang="fr">Ajout rapide d'un prospect</value>
         <value xml:lang="it">Aggiunta veloce lead</value>
         <value xml:lang="pt_BR">Adição rápida de Lead</value>
+        <value xml:lang="vi">Thêm nhanh Đầu mối</value>
         <value xml:lang="zh">快速添加线索</value>
         <value xml:lang="zh_TW">快速添加線索</value>
     </property>
@@ -2669,6 +2757,7 @@
         <value xml:lang="fr">Prévision de ventes</value>
         <value xml:lang="it">Previsioni di vendita</value>
         <value xml:lang="pt_BR">Previsão de vendas</value>
+        <value xml:lang="vi">Dá»± đoán bán hàng</value>
         <value xml:lang="zh">销售预测</value>
         <value xml:lang="zh_TW">銷售預測</value>
     </property>
@@ -2677,6 +2766,7 @@
         <value xml:lang="fr">Deuxième contact</value>
         <value xml:lang="it">Secondo contatto</value>
         <value xml:lang="pt_BR">Segundo contato</value>
+        <value xml:lang="vi">Liên hệ thứ 2</value>
         <value xml:lang="zh">第二联系方式</value>
         <value xml:lang="zh_TW">第二聯系方式</value>
     </property>