Author: adrianc
Date: Mon Sep 24 12:38:03 2007 New Revision: 578930 URL: http://svn.apache.org/viewvc?rev=578930&view=rev Log: New feature - assign parties to products. Patch is from Ean Schuessler - OFBIZ-1177, plus some additional work from me. Still needs a party ID lookup screen. Added: ofbiz/trunk/applications/product/webapp/catalog/product/EditProductParties.ftl Modified: ofbiz/trunk/applications/product/config/ProductUiLabels.properties ofbiz/trunk/applications/product/entitydef/entitygroup.xml ofbiz/trunk/applications/product/entitydef/entitymodel.xml ofbiz/trunk/applications/product/script/org/ofbiz/product/product/ProductServices.xml ofbiz/trunk/applications/product/servicedef/services.xml ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/controller.xml ofbiz/trunk/applications/product/webapp/catalog/product/ProductTabBar.ftl ofbiz/trunk/applications/product/widget/catalog/CatalogCommonScreens.xml ofbiz/trunk/applications/product/widget/catalog/ProductScreens.xml Modified: ofbiz/trunk/applications/product/config/ProductUiLabels.properties URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/config/ProductUiLabels.properties?rev=578930&r1=578929&r2=578930&view=diff ============================================================================== --- ofbiz/trunk/applications/product/config/ProductUiLabels.properties (original) +++ ofbiz/trunk/applications/product/config/ProductUiLabels.properties Mon Sep 24 12:38:03 2007 @@ -132,6 +132,7 @@ PageTitleEditProductPromos=Edit Product Promos PageTitleEditProductPromotionCode=Edit Product Promotion Code PageTitleEditProductQuickAdmin=Edit Product Quick Admin +PageTitleEditProductParties=Edit Product Parties PageTitleEditProductStore=Edit Product Store PageTitleEditProductStoreCatalogs=Edit Product Store Catalogs PageTitleEditProductStoreEmailSetup=Edit Product Store Email Setup @@ -329,6 +330,7 @@ ProductAssetUsage=Rental ProductAssignPicker=Assign Picker ProductAssociatePartyToCategory=Associate Party to Category (enter Party ID, select Type, then enter optional From Date) +ProductAssociatePartyToProduct=Associate Party to Product (enter Party ID, select Type, then enter optional From Date) ProductAssociationNotFound=Association not found: Product Id=${productId?if_exists}, Product Id To=${productIdTo?if_exists}, Association Type Id=${productAssocTypeId?if_exists}, From Date=${fromDate?if_exists} ProductAssociationType=Association Type ProductAssociationTypeId=Association Type ID @@ -434,7 +436,6 @@ ProductCopyProductCategoryMembersToAnotherCategory=Copy Product Category Members to Another Category ProductCostPrice=Cost Price ProductCosts=Costs -ProductCostPrice=Cost Price ProductCouldNotFindFacilityWithId=Could Not Find Facility with ID ProductCouldNotFindProduct=Could Not Find Product with ID ProductCouldNotFindProductCategoryWithId=Could not Find Product Category with Id Modified: ofbiz/trunk/applications/product/entitydef/entitygroup.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/entitydef/entitygroup.xml?rev=578930&r1=578929&r2=578930&view=diff ============================================================================== --- ofbiz/trunk/applications/product/entitydef/entitygroup.xml (original) +++ ofbiz/trunk/applications/product/entitydef/entitygroup.xml Mon Sep 24 12:38:03 2007 @@ -176,6 +176,7 @@ <entity-group group="org.ofbiz" entity="ProductMaint" /> <entity-group group="org.ofbiz" entity="ProductMaintType" /> <entity-group group="org.ofbiz" entity="ProductReview" /> + <entity-group group="org.ofbiz" entity="ProductRole" /> <entity-group group="org.ofbiz" entity="ProductSearchConstraint" /> <entity-group group="org.ofbiz" entity="ProductSearchResult" /> <entity-group group="org.ofbiz" entity="ProductType" /> @@ -336,5 +337,7 @@ <entity-group group="org.ofbiz" entity="ShippingDocument" /> <entity-group group="org.ofbiz" entity="PackedQtyVsOrderItemQuantity" /> </entitygroup> + + Modified: ofbiz/trunk/applications/product/entitydef/entitymodel.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/entitydef/entitymodel.xml?rev=578930&r1=578929&r2=578930&view=diff ============================================================================== --- ofbiz/trunk/applications/product/entitydef/entitymodel.xml (original) +++ ofbiz/trunk/applications/product/entitydef/entitymodel.xml Mon Sep 24 12:38:03 2007 @@ -2190,6 +2190,33 @@ <key-map field-name="parentTypeId" rel-field-name="productAssocTypeId"/> </relation> </entity> + <entity entity-name="ProductRole" + package-name="org.ofbiz.product.product" + title="Product Role Entity"> + <field name="productId" type="id-ne"></field> + <field name="partyId" type="id-ne"></field> + <field name="roleTypeId" type="id-ne"></field> + <field name="fromDate" type="date-time"></field> + <field name="thruDate" type="date-time"></field> + <field name="comments" type="comment"></field> + <prim-key field="productId"/> + <prim-key field="partyId"/> + <prim-key field="roleTypeId"/> + <prim-key field="fromDate"/> + <relation type="one-nofk" rel-entity-name="Party"> + <key-map field-name="partyId"/> + </relation> + <relation type="one-nofk" rel-entity-name="RoleType"> + <key-map field-name="roleTypeId"/> + </relation> + <relation type="one" fk-name="PROD_RLE_PTYRLE" rel-entity-name="PartyRole"> + <key-map field-name="partyId"/> + <key-map field-name="roleTypeId"/> + </relation> + <!-- <relation type="one" fk-name="PROD_RLE_CATEGORY" rel-entity-name="Product"> + <key-map field-name="productCategoryId"/> + </relation> --> + </entity> <entity entity-name="ProductAttribute" package-name="org.ofbiz.product.product" title="Product Attribute Entity"> Modified: ofbiz/trunk/applications/product/script/org/ofbiz/product/product/ProductServices.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/script/org/ofbiz/product/product/ProductServices.xml?rev=578930&r1=578929&r2=578930&view=diff ============================================================================== --- ofbiz/trunk/applications/product/script/org/ofbiz/product/product/ProductServices.xml (original) +++ ofbiz/trunk/applications/product/script/org/ofbiz/product/product/ProductServices.xml Mon Sep 24 12:38:03 2007 @@ -900,4 +900,49 @@ <entity-one entity-name="ProductAttribute" value-name="lookedUpValue"/> <remove-value value-name="lookedUpValue"/> </simple-method> + + <!-- ================================================================ --> + <!-- ProductRole Services --> + <!-- ================================================================ --> + + <simple-method method-name="addPartyToProduct" short-description="Add Party to Product"> + <set value="addPartyToProduct" field="callingMethodName"/> + <set value="CREATE" field="checkAction"/> + <call-simple-method method-name="checkProductRelatedPermission"/> + <check-errors/> + + <make-value value-name="newEntity" entity-name="ProductRole"/> + <set-pk-fields map-name="parameters" value-name="newEntity"/> + <set-nonpk-fields map-name="parameters" value-name="newEntity"/> + + <if-empty field-name="newEntity.fromDate"> + <now-timestamp-to-env env-name="newEntity.fromDate"/> + </if-empty> + + <create-value value-name="newEntity"/> + </simple-method> + <simple-method method-name="updatePartyToProduct" short-description="Update Party to Product"> + <set value="updatePartyToProduct" field="callingMethodName"/> + <set value="UPDATE" field="checkAction"/> + <call-simple-method method-name="checkProductRelatedPermission"/> + <check-errors/> + + <make-value value-name="lookupPKMap" entity-name="ProductRole"/> + <set-pk-fields map-name="parameters" value-name="lookupPKMap"/> + <find-by-primary-key entity-name="ProductRole" map-name="lookupPKMap" value-name="lookedUpValue"/> + <set-nonpk-fields map-name="parameters" value-name="lookedUpValue"/> + <store-value value-name="lookedUpValue"/> + </simple-method> + <simple-method method-name="removePartyFromProduct" short-description="Remove Party From Product"> + <set value="removePartyFromProduct" field="callingMethodName"/> + <set value="DELETE" field="checkAction"/> + <call-simple-method method-name="checkProductRelatedPermission"/> + <check-errors/> + + <make-value value-name="lookupPKMap" entity-name="ProductRole"/> + <set-pk-fields map-name="parameters" value-name="lookupPKMap"/> + <find-by-primary-key entity-name="ProductRole" map-name="lookupPKMap" value-name="lookedUpValue"/> + <remove-value value-name="lookedUpValue"/> + </simple-method> + </simple-methods> Modified: ofbiz/trunk/applications/product/servicedef/services.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/servicedef/services.xml?rev=578930&r1=578929&r2=578930&view=diff ============================================================================== --- ofbiz/trunk/applications/product/servicedef/services.xml (original) +++ ofbiz/trunk/applications/product/servicedef/services.xml Mon Sep 24 12:38:03 2007 @@ -716,6 +716,35 @@ <attribute name="fromDate" type="Timestamp" mode="IN" optional="false"/> </service> + <service name="addPartyToProduct" engine="simple" + location="component://product/script/org/ofbiz/product/product/ProductServices.xml" invoke="addPartyToProduct" auth="true"> + <description>Add Party To Product</description> + <attribute name="productId" type="String" mode="IN" optional="false"/> + <attribute name="partyId" type="String" mode="IN" optional="false"/> + <attribute name="roleTypeId" type="String" mode="IN" optional="false"/> + <attribute name="fromDate" type="Timestamp" mode="IN" optional="true"/> + <attribute name="thruDate" type="Timestamp" mode="IN" optional="true"/> + <attribute name="comments" type="String" mode="IN" optional="true"/> + </service> + <service name="updatePartyToProduct" engine="simple" + location="component://product/script/org/ofbiz/product/product/ProductServices.xml" invoke="updatePartyToProduct" auth="true"> + <description>Update Party To Product</description> + <attribute name="productId" type="String" mode="IN" optional="false"/> + <attribute name="partyId" type="String" mode="IN" optional="false"/> + <attribute name="roleTypeId" type="String" mode="IN" optional="false"/> + <attribute name="fromDate" type="Timestamp" mode="IN" optional="false"/> + <attribute name="thruDate" type="Timestamp" mode="IN" optional="true"/> + <attribute name="comments" type="String" mode="IN" optional="true"/> + </service> + <service name="removePartyFromProduct" engine="simple" + location="component://product/script/org/ofbiz/product/product/ProductServices.xml" invoke="removePartyFromProduct" auth="true"> + <description>Remove Party From Product</description> + <attribute name="productId" type="String" mode="IN" optional="false"/> + <attribute name="partyId" type="String" mode="IN" optional="false"/> + <attribute name="roleTypeId" type="String" mode="IN" optional="false"/> + <attribute name="fromDate" type="Timestamp" mode="IN" optional="false"/> + </service> + <service name="safeAddProductCategoryToCategory" engine="simple" location="org/ofbiz/product/category/CategoryServices.xml" invoke="addProductCategoryToCategory" auth="true"> <description>Safe Add ProductCategory To Category (requires fromDate)</description> Modified: ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/controller.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/controller.xml?rev=578930&r1=578929&r2=578930&view=diff ============================================================================== --- ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/controller.xml (original) +++ ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/controller.xml Mon Sep 24 12:38:03 2007 @@ -512,8 +512,31 @@ <request-map uri="ProductBarCode.pdf"> <security https="true" auth="true"/> <response name="success" type="view" value="ProductBarCode.pdf"/> + </request-map> + + <!-- ================ Product Roles Requests ================= --> + <request-map uri="EditProductParties"> + <security https="true" auth="true"/> + <response name="success" type="view" value="EditProductParties"/> + </request-map> + <request-map uri="addPartyToProduct"> + <security https="true" auth="true"/> + <event type="service" path="" invoke="addPartyToProduct"/> + <response name="success" type="view" value="EditProductParties"/> + <response name="error" type="view" value="EditProductParties"/> + </request-map> + <request-map uri="updatePartyToProduct"> + <security https="true" auth="true"/> + <event type="service" path="" invoke="updatePartyToProduct"/> + <response name="success" type="view" value="EditProductParties"/> + <response name="error" type="view" value="EditProductParties"/> + </request-map> + <request-map uri="removePartyFromProduct"> + <security https="true" auth="true"/> + <event type="service" path="" invoke="removePartyFromProduct"/> + <response name="success" type="view" value="EditProductParties"/> + <response name="error" type="view" value="EditProductParties"/> </request-map> - <!-- ================ Product Asset Usage (rental) Requests ================= --> <request-map uri="EditProductAssetUsage"> @@ -2505,6 +2528,7 @@ <view-map name="EditProduct" type="screen" page="component://product/widget/catalog/ProductScreens.xml#EditProduct"/> <view-map name="EditProductPrices" type="screen" page="component://product/widget/catalog/ProductScreens.xml#EditProductPrices"/> <view-map name="EditProductAssetUsage" type="screen" page="component://product/widget/catalog/ProductScreens.xml#EditProductAssetUsage"/> + <view-map name="EditProductParties" type="screen" page="component://product/widget/catalog/ProductScreens.xml#EditProductParties"/> <view-map name="showFixedAssetProduct" type="screen" page="component://product/widget/catalog/ProductScreens.xml#showFixedAssetProduct"/> <view-map name="newFixedAssetProduct" type="screen" page="component://product/widget/catalog/ProductScreens.xml#newFixedAssetProduct"/> <view-map name="ProductBarCode.pdf" type="screenfop" page="component://product/widget/catalog/ProductScreens.xml#ProductBarCode.fo" content-type="application/pdf" encoding="none"/> Added: ofbiz/trunk/applications/product/webapp/catalog/product/EditProductParties.ftl URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/webapp/catalog/product/EditProductParties.ftl?rev=578930&view=auto ============================================================================== --- ofbiz/trunk/applications/product/webapp/catalog/product/EditProductParties.ftl (added) +++ ofbiz/trunk/applications/product/webapp/catalog/product/EditProductParties.ftl Mon Sep 24 12:38:03 2007 @@ -0,0 +1,78 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if productId?exists && product?exists> + <table class="basic-table" cellspacing="0"> + <tr class="header-row"> + <td>${uiLabelMap.PartyPartyId}</td> + <td>${uiLabelMap.PartyRole}</td> + <td>${uiLabelMap.CommonFromDateTime}</td> + <td>${uiLabelMap.CommonThruDateTime}</td> + <td> </td> + </tr> + <#assign line = 0> + <#list productRoles as productRole> + <#assign line = line + 1> + <#assign curRoleType = productRole.getRelatedOneCache("RoleType")> + <tr> + <td><a href="/partymgr/control/viewprofile?party_id=${(productRole.partyId)?if_exists}" target="_blank" class="buttontext">${(productRole.partyId)?if_exists}</a></td> + <td>${(curRoleType.get("description",locale))?if_exists}</td> + <#assign hasntStarted = false> + <#if (productRole.getTimestamp("fromDate"))?exists && Static["org.ofbiz.base.util.UtilDateTime"].nowTimestamp().before(productRole.getTimestamp("fromDate"))> <#assign hasntStarted = true></#if> + <td<#if hasntStarted> class="alert"</#if>>${(productRole.fromDate)?if_exists}</td> + <td align="center"> + <form method="post" action="<@ofbizUrl>updatePartyToProduct</@ofbizUrl>" name="lineForm${line}"> + <#assign hasExpired = false> + <#if (productRole.getTimestamp("thruDate"))?exists && (Static["org.ofbiz.base.util.UtilDateTime"].nowTimestamp().after(productRole.getTimestamp("thruDate")))> <#assign hasExpired = true></#if> + <input type="hidden" name="productId" value="${(productRole.productId)?if_exists}"> + <input type="hidden" name="partyId" value="${(productRole.partyId)?if_exists}"> + <input type="hidden" name="roleTypeId" value="${(productRole.roleTypeId)?if_exists}"> + <input type="hidden" name="fromDate" value="${(productRole.getTimestamp("fromDate"))?if_exists}"> + <input type="text" size="25" name="thruDate" value="${(productRole. getTimestamp("thruDate"))?if_exists}" class="inputBox" <#if hasExpired> style="color: red;"</#if>> + <a href="javascript:call_cal(document.lineForm${line}.thruDate, '${(productRole.getTimestamp("thruDate"))?default(nowTimestamp?string)}');"><img src="<@ofbizContentUrl>/images/cal.gif</@ofbizContentUrl>" width="16" height="16" border="0" alt="Calendar"></a> + <input type="submit" value="${uiLabelMap.CommonUpdate}"> + </form> + </td> + <td align="center"> + <a href="<@ofbizUrl>removePartyFromProduct?productId=${(productRole.productId)?if_exists}&partyId=${(productRole.partyId)?if_exists}&roleTypeId=${(productRole.roleTypeId)?if_exists}&fromDate=${Static["org.ofbiz.base.util.UtilFormatOut"].encodeQueryValue(productRole.getTimestamp("fromDate").toString())}</@ofbizUrl>" class="buttontext"> + ${uiLabelMap.CommonDelete}</a> + </td> + </tr> + </#list> + </table> + <br/> + <h2>${uiLabelMap.ProductAssociatePartyToProduct}:</h2> + <br/> + <form method="post" action="<@ofbizUrl>addPartyToProduct</@ofbizUrl>" name="addNewForm"> + <input type="hidden" name="productId" value="${productId}"> + <input type="text" size="20" maxlength="20" name="partyId" value=""> + <#-- TODO: Add PartyId lookup screen + <a href="javascript:call_fieldlookup2(document.addNewForm.partyId,'LookupCustomerName');"> + <img src='/images/fieldlookup.gif' width='15' height='14' border='0' alt='Click here For Field Lookup'/> + </a> --> + <select name="roleTypeId" size="1"> + <#list roleTypes as roleType> + <option value="${(roleType.roleTypeId)?if_exists}" <#if roleType.roleTypeId.equals("_NA_")> ${uiLabelMap.ProductSelected}</#if>>${(roleType.get("description",locale))?if_exists}</option> + </#list> + </select> + <input type="text" size="25" name="fromDate"> + <a href="javascript:call_cal(document.addNewForm.fromDate, '${nowTimestamp?string}');"><img src="<@ofbizContentUrl>/images/cal.gif</@ofbizContentUrl>" width="16" height="16" border="0" alt="Calendar"></a> + <input type="submit" value="${uiLabelMap.CommonAdd}"> + </form> +</#if> Modified: ofbiz/trunk/applications/product/webapp/catalog/product/ProductTabBar.ftl URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/webapp/catalog/product/ProductTabBar.ftl?rev=578930&r1=578929&r2=578930&view=diff ============================================================================== --- ofbiz/trunk/applications/product/webapp/catalog/product/ProductTabBar.ftl (original) +++ ofbiz/trunk/applications/product/webapp/catalog/product/ProductTabBar.ftl Mon Sep 24 12:38:03 2007 @@ -55,6 +55,7 @@ <#if product?exists && product.productTypeId?if_exists == "ASSET_USAGE"> <a href="<@ofbizUrl>EditProductAssetUsage?productId=${productId}</@ofbizUrl>" class="${selectedClassMap.EditProductAssetUsage?default(unselectedClassName)}">${uiLabelMap.ProductAssetUsage}</a> </#if> - <a href="<@ofbizUrl>EditProductWorkEfforts?productId=${productId}</@ofbizUrl>" class="${selectedClassMap.EditProductWorkEfforts?default(unselectedClassName)}">${uiLabelMap.WorkEffortWorkEffort}</a> + <a href="<@ofbizUrl>EditProductWorkEfforts?productId=${productId}</@ofbizUrl>" class="${selectedClassMap.EditProductWorkEfforts?default(unselectedClassName)}">${uiLabelMap.WorkEffortWorkEffort}</a> + <a href="<@ofbizUrl>EditProductParties?productId=${productId}</@ofbizUrl>" class="${selectedClassMap.EditProductParties?default(unselectedClassName)}">${uiLabelMap.PartyParties}</a> </div> </#if> Modified: ofbiz/trunk/applications/product/widget/catalog/CatalogCommonScreens.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/widget/catalog/CatalogCommonScreens.xml?rev=578930&r1=578929&r2=578930&view=diff ============================================================================== --- ofbiz/trunk/applications/product/widget/catalog/CatalogCommonScreens.xml (original) +++ ofbiz/trunk/applications/product/widget/catalog/CatalogCommonScreens.xml Mon Sep 24 12:38:03 2007 @@ -78,7 +78,7 @@ </container> <!-- add Create Product and View Product (in ecommerce) links --> - <container> + <container style="button-bar"> <link target="EditProduct" text="${uiLabelMap.ProductNewProduct}" style="buttontext"/> <link target="CreateVirtualWithVariantsForm" text="${uiLabelMap.ProductNewVirtualProduct}" style="buttontext"/> <link target="/ecommerce/control/product?product_id=${productId}" url-mode="inter-app" text="${uiLabelMap.ProductProductPage}" style="buttontext"/> Modified: ofbiz/trunk/applications/product/widget/catalog/ProductScreens.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/widget/catalog/ProductScreens.xml?rev=578930&r1=578929&r2=578930&view=diff ============================================================================== --- ofbiz/trunk/applications/product/widget/catalog/ProductScreens.xml (original) +++ ofbiz/trunk/applications/product/widget/catalog/ProductScreens.xml Mon Sep 24 12:38:03 2007 @@ -974,4 +974,37 @@ </section> </screen> + <screen name="EditProductParties"> + <section> + <actions> + <set field="titleProperty" value="PageTitleEditProductParties"/> + <set field="headerItem" value="product"/> + <set field="tabButtonItem" value="EditProductParties"/> + <set field="labelTitleProperty" value="PartyParties"/> + + <set field="productId" from-field="parameters.productId"/> + <entity-one entity-name="Product" value-name="product"/> + + <entity-condition entity-name="ProductRole" list-name="productRoles"> + <condition-expr field-name="productId" env-name="productId"/> + <order-by field-name="roleTypeId"/> + <order-by field-name="partyId"/> + </entity-condition> + + <entity-condition entity-name="RoleType" list-name="roleTypes"> + <order-by field-name="description"/> + </entity-condition> + </actions> + <widgets> + <decorator-screen name="CommonProductDecorator" location="${parameters.mainDecoratorLocation}"> + <decorator-section name="body"> + <platform-specific> + <html><html-template location="component://product/webapp/catalog/product/EditProductParties.ftl"/></html> + </platform-specific> + </decorator-section> + </decorator-screen> + </widgets> + </section> + </screen> + </screens> |
The loopkup for a party is pretty easy, though easier (as with many things here...) using the form widget instead of an ftl file. In fact, we have a project-wide goal of converting all generic ftl screens like this to use the form widget. Of course, I wasn't involved in discussions around this and only read what has gone through the lists and the issue... was there a reason for using FTL instead of the Form Widget (Ean or Adrian)? -David [hidden email] wrote: > Author: adrianc > Date: Mon Sep 24 12:38:03 2007 > New Revision: 578930 > > URL: http://svn.apache.org/viewvc?rev=578930&view=rev > Log: > New feature - assign parties to products. Patch is from Ean Schuessler - OFBIZ-1177, plus some additional work from me. Still needs a party ID lookup screen. > > Added: > ofbiz/trunk/applications/product/webapp/catalog/product/EditProductParties.ftl > Modified: > ofbiz/trunk/applications/product/config/ProductUiLabels.properties > ofbiz/trunk/applications/product/entitydef/entitygroup.xml > ofbiz/trunk/applications/product/entitydef/entitymodel.xml > ofbiz/trunk/applications/product/script/org/ofbiz/product/product/ProductServices.xml > ofbiz/trunk/applications/product/servicedef/services.xml > ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/controller.xml > ofbiz/trunk/applications/product/webapp/catalog/product/ProductTabBar.ftl > ofbiz/trunk/applications/product/widget/catalog/CatalogCommonScreens.xml > ofbiz/trunk/applications/product/widget/catalog/ProductScreens.xml > > Modified: ofbiz/trunk/applications/product/config/ProductUiLabels.properties > URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/config/ProductUiLabels.properties?rev=578930&r1=578929&r2=578930&view=diff > ============================================================================== > --- ofbiz/trunk/applications/product/config/ProductUiLabels.properties (original) > +++ ofbiz/trunk/applications/product/config/ProductUiLabels.properties Mon Sep 24 12:38:03 2007 > @@ -132,6 +132,7 @@ > PageTitleEditProductPromos=Edit Product Promos > PageTitleEditProductPromotionCode=Edit Product Promotion Code > PageTitleEditProductQuickAdmin=Edit Product Quick Admin > +PageTitleEditProductParties=Edit Product Parties > PageTitleEditProductStore=Edit Product Store > PageTitleEditProductStoreCatalogs=Edit Product Store Catalogs > PageTitleEditProductStoreEmailSetup=Edit Product Store Email Setup > @@ -329,6 +330,7 @@ > ProductAssetUsage=Rental > ProductAssignPicker=Assign Picker > ProductAssociatePartyToCategory=Associate Party to Category (enter Party ID, select Type, then enter optional From Date) > +ProductAssociatePartyToProduct=Associate Party to Product (enter Party ID, select Type, then enter optional From Date) > ProductAssociationNotFound=Association not found: Product Id=${productId?if_exists}, Product Id To=${productIdTo?if_exists}, Association Type Id=${productAssocTypeId?if_exists}, From Date=${fromDate?if_exists} > ProductAssociationType=Association Type > ProductAssociationTypeId=Association Type ID > @@ -434,7 +436,6 @@ > ProductCopyProductCategoryMembersToAnotherCategory=Copy Product Category Members to Another Category > ProductCostPrice=Cost Price > ProductCosts=Costs > -ProductCostPrice=Cost Price > ProductCouldNotFindFacilityWithId=Could Not Find Facility with ID > ProductCouldNotFindProduct=Could Not Find Product with ID > ProductCouldNotFindProductCategoryWithId=Could not Find Product Category with Id > > Modified: ofbiz/trunk/applications/product/entitydef/entitygroup.xml > URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/entitydef/entitygroup.xml?rev=578930&r1=578929&r2=578930&view=diff > ============================================================================== > --- ofbiz/trunk/applications/product/entitydef/entitygroup.xml (original) > +++ ofbiz/trunk/applications/product/entitydef/entitygroup.xml Mon Sep 24 12:38:03 2007 > @@ -176,6 +176,7 @@ > <entity-group group="org.ofbiz" entity="ProductMaint" /> > <entity-group group="org.ofbiz" entity="ProductMaintType" /> > <entity-group group="org.ofbiz" entity="ProductReview" /> > + <entity-group group="org.ofbiz" entity="ProductRole" /> > <entity-group group="org.ofbiz" entity="ProductSearchConstraint" /> > <entity-group group="org.ofbiz" entity="ProductSearchResult" /> > <entity-group group="org.ofbiz" entity="ProductType" /> > @@ -336,5 +337,7 @@ > <entity-group group="org.ofbiz" entity="ShippingDocument" /> > <entity-group group="org.ofbiz" entity="PackedQtyVsOrderItemQuantity" /> > </entitygroup> > + > + > > > > Modified: ofbiz/trunk/applications/product/entitydef/entitymodel.xml > URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/entitydef/entitymodel.xml?rev=578930&r1=578929&r2=578930&view=diff > ============================================================================== > --- ofbiz/trunk/applications/product/entitydef/entitymodel.xml (original) > +++ ofbiz/trunk/applications/product/entitydef/entitymodel.xml Mon Sep 24 12:38:03 2007 > @@ -2190,6 +2190,33 @@ > <key-map field-name="parentTypeId" rel-field-name="productAssocTypeId"/> > </relation> > </entity> > + <entity entity-name="ProductRole" > + package-name="org.ofbiz.product.product" > + title="Product Role Entity"> > + <field name="productId" type="id-ne"></field> > + <field name="partyId" type="id-ne"></field> > + <field name="roleTypeId" type="id-ne"></field> > + <field name="fromDate" type="date-time"></field> > + <field name="thruDate" type="date-time"></field> > + <field name="comments" type="comment"></field> > + <prim-key field="productId"/> > + <prim-key field="partyId"/> > + <prim-key field="roleTypeId"/> > + <prim-key field="fromDate"/> > + <relation type="one-nofk" rel-entity-name="Party"> > + <key-map field-name="partyId"/> > + </relation> > + <relation type="one-nofk" rel-entity-name="RoleType"> > + <key-map field-name="roleTypeId"/> > + </relation> > + <relation type="one" fk-name="PROD_RLE_PTYRLE" rel-entity-name="PartyRole"> > + <key-map field-name="partyId"/> > + <key-map field-name="roleTypeId"/> > + </relation> > + <!-- <relation type="one" fk-name="PROD_RLE_CATEGORY" rel-entity-name="Product"> > + <key-map field-name="productCategoryId"/> > + </relation> --> > + </entity> > <entity entity-name="ProductAttribute" > package-name="org.ofbiz.product.product" > title="Product Attribute Entity"> > > Modified: ofbiz/trunk/applications/product/script/org/ofbiz/product/product/ProductServices.xml > URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/script/org/ofbiz/product/product/ProductServices.xml?rev=578930&r1=578929&r2=578930&view=diff > ============================================================================== > --- ofbiz/trunk/applications/product/script/org/ofbiz/product/product/ProductServices.xml (original) > +++ ofbiz/trunk/applications/product/script/org/ofbiz/product/product/ProductServices.xml Mon Sep 24 12:38:03 2007 > @@ -900,4 +900,49 @@ > <entity-one entity-name="ProductAttribute" value-name="lookedUpValue"/> > <remove-value value-name="lookedUpValue"/> > </simple-method> > + > + <!-- ================================================================ --> > + <!-- ProductRole Services --> > + <!-- ================================================================ --> > + > + <simple-method method-name="addPartyToProduct" short-description="Add Party to Product"> > + <set value="addPartyToProduct" field="callingMethodName"/> > + <set value="CREATE" field="checkAction"/> > + <call-simple-method method-name="checkProductRelatedPermission"/> > + <check-errors/> > + > + <make-value value-name="newEntity" entity-name="ProductRole"/> > + <set-pk-fields map-name="parameters" value-name="newEntity"/> > + <set-nonpk-fields map-name="parameters" value-name="newEntity"/> > + > + <if-empty field-name="newEntity.fromDate"> > + <now-timestamp-to-env env-name="newEntity.fromDate"/> > + </if-empty> > + > + <create-value value-name="newEntity"/> > + </simple-method> > + <simple-method method-name="updatePartyToProduct" short-description="Update Party to Product"> > + <set value="updatePartyToProduct" field="callingMethodName"/> > + <set value="UPDATE" field="checkAction"/> > + <call-simple-method method-name="checkProductRelatedPermission"/> > + <check-errors/> > + > + <make-value value-name="lookupPKMap" entity-name="ProductRole"/> > + <set-pk-fields map-name="parameters" value-name="lookupPKMap"/> > + <find-by-primary-key entity-name="ProductRole" map-name="lookupPKMap" value-name="lookedUpValue"/> > + <set-nonpk-fields map-name="parameters" value-name="lookedUpValue"/> > + <store-value value-name="lookedUpValue"/> > + </simple-method> > + <simple-method method-name="removePartyFromProduct" short-description="Remove Party From Product"> > + <set value="removePartyFromProduct" field="callingMethodName"/> > + <set value="DELETE" field="checkAction"/> > + <call-simple-method method-name="checkProductRelatedPermission"/> > + <check-errors/> > + > + <make-value value-name="lookupPKMap" entity-name="ProductRole"/> > + <set-pk-fields map-name="parameters" value-name="lookupPKMap"/> > + <find-by-primary-key entity-name="ProductRole" map-name="lookupPKMap" value-name="lookedUpValue"/> > + <remove-value value-name="lookedUpValue"/> > + </simple-method> > + > </simple-methods> > > Modified: ofbiz/trunk/applications/product/servicedef/services.xml > URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/servicedef/services.xml?rev=578930&r1=578929&r2=578930&view=diff > ============================================================================== > --- ofbiz/trunk/applications/product/servicedef/services.xml (original) > +++ ofbiz/trunk/applications/product/servicedef/services.xml Mon Sep 24 12:38:03 2007 > @@ -716,6 +716,35 @@ > <attribute name="fromDate" type="Timestamp" mode="IN" optional="false"/> > </service> > > + <service name="addPartyToProduct" engine="simple" > + location="component://product/script/org/ofbiz/product/product/ProductServices.xml" invoke="addPartyToProduct" auth="true"> > + <description>Add Party To Product</description> > + <attribute name="productId" type="String" mode="IN" optional="false"/> > + <attribute name="partyId" type="String" mode="IN" optional="false"/> > + <attribute name="roleTypeId" type="String" mode="IN" optional="false"/> > + <attribute name="fromDate" type="Timestamp" mode="IN" optional="true"/> > + <attribute name="thruDate" type="Timestamp" mode="IN" optional="true"/> > + <attribute name="comments" type="String" mode="IN" optional="true"/> > + </service> > + <service name="updatePartyToProduct" engine="simple" > + location="component://product/script/org/ofbiz/product/product/ProductServices.xml" invoke="updatePartyToProduct" auth="true"> > + <description>Update Party To Product</description> > + <attribute name="productId" type="String" mode="IN" optional="false"/> > + <attribute name="partyId" type="String" mode="IN" optional="false"/> > + <attribute name="roleTypeId" type="String" mode="IN" optional="false"/> > + <attribute name="fromDate" type="Timestamp" mode="IN" optional="false"/> > + <attribute name="thruDate" type="Timestamp" mode="IN" optional="true"/> > + <attribute name="comments" type="String" mode="IN" optional="true"/> > + </service> > + <service name="removePartyFromProduct" engine="simple" > + location="component://product/script/org/ofbiz/product/product/ProductServices.xml" invoke="removePartyFromProduct" auth="true"> > + <description>Remove Party From Product</description> > + <attribute name="productId" type="String" mode="IN" optional="false"/> > + <attribute name="partyId" type="String" mode="IN" optional="false"/> > + <attribute name="roleTypeId" type="String" mode="IN" optional="false"/> > + <attribute name="fromDate" type="Timestamp" mode="IN" optional="false"/> > + </service> > + > <service name="safeAddProductCategoryToCategory" engine="simple" > location="org/ofbiz/product/category/CategoryServices.xml" invoke="addProductCategoryToCategory" auth="true"> > <description>Safe Add ProductCategory To Category (requires fromDate)</description> > > Modified: ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/controller.xml > URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/controller.xml?rev=578930&r1=578929&r2=578930&view=diff > ============================================================================== > --- ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/controller.xml (original) > +++ ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/controller.xml Mon Sep 24 12:38:03 2007 > @@ -512,8 +512,31 @@ > <request-map uri="ProductBarCode.pdf"> > <security https="true" auth="true"/> > <response name="success" type="view" value="ProductBarCode.pdf"/> > + </request-map> > + > + <!-- ================ Product Roles Requests ================= --> > + <request-map uri="EditProductParties"> > + <security https="true" auth="true"/> > + <response name="success" type="view" value="EditProductParties"/> > + </request-map> > + <request-map uri="addPartyToProduct"> > + <security https="true" auth="true"/> > + <event type="service" path="" invoke="addPartyToProduct"/> > + <response name="success" type="view" value="EditProductParties"/> > + <response name="error" type="view" value="EditProductParties"/> > + </request-map> > + <request-map uri="updatePartyToProduct"> > + <security https="true" auth="true"/> > + <event type="service" path="" invoke="updatePartyToProduct"/> > + <response name="success" type="view" value="EditProductParties"/> > + <response name="error" type="view" value="EditProductParties"/> > + </request-map> > + <request-map uri="removePartyFromProduct"> > + <security https="true" auth="true"/> > + <event type="service" path="" invoke="removePartyFromProduct"/> > + <response name="success" type="view" value="EditProductParties"/> > + <response name="error" type="view" value="EditProductParties"/> > </request-map> > - > > <!-- ================ Product Asset Usage (rental) Requests ================= --> > <request-map uri="EditProductAssetUsage"> > @@ -2505,6 +2528,7 @@ > <view-map name="EditProduct" type="screen" page="component://product/widget/catalog/ProductScreens.xml#EditProduct"/> > <view-map name="EditProductPrices" type="screen" page="component://product/widget/catalog/ProductScreens.xml#EditProductPrices"/> > <view-map name="EditProductAssetUsage" type="screen" page="component://product/widget/catalog/ProductScreens.xml#EditProductAssetUsage"/> > + <view-map name="EditProductParties" type="screen" page="component://product/widget/catalog/ProductScreens.xml#EditProductParties"/> > <view-map name="showFixedAssetProduct" type="screen" page="component://product/widget/catalog/ProductScreens.xml#showFixedAssetProduct"/> > <view-map name="newFixedAssetProduct" type="screen" page="component://product/widget/catalog/ProductScreens.xml#newFixedAssetProduct"/> > <view-map name="ProductBarCode.pdf" type="screenfop" page="component://product/widget/catalog/ProductScreens.xml#ProductBarCode.fo" content-type="application/pdf" encoding="none"/> > > Added: ofbiz/trunk/applications/product/webapp/catalog/product/EditProductParties.ftl > URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/webapp/catalog/product/EditProductParties.ftl?rev=578930&view=auto > ============================================================================== > --- ofbiz/trunk/applications/product/webapp/catalog/product/EditProductParties.ftl (added) > +++ ofbiz/trunk/applications/product/webapp/catalog/product/EditProductParties.ftl Mon Sep 24 12:38:03 2007 > @@ -0,0 +1,78 @@ > +<#-- > +Licensed to the Apache Software Foundation (ASF) under one > +or more contributor license agreements. See the NOTICE file > +distributed with this work for additional information > +regarding copyright ownership. The ASF licenses this file > +to you under the Apache License, Version 2.0 (the > +"License"); you may not use this file except in compliance > +with the License. You may obtain a copy of the License at > + > +http://www.apache.org/licenses/LICENSE-2.0 > + > +Unless required by applicable law or agreed to in writing, > +software distributed under the License is distributed on an > +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY > +KIND, either express or implied. See the License for the > +specific language governing permissions and limitations > +under the License. > +--> > + > +<#if productId?exists && product?exists> > + <table class="basic-table" cellspacing="0"> > + <tr class="header-row"> > + <td>${uiLabelMap.PartyPartyId}</td> > + <td>${uiLabelMap.PartyRole}</td> > + <td>${uiLabelMap.CommonFromDateTime}</td> > + <td>${uiLabelMap.CommonThruDateTime}</td> > + <td> </td> > + </tr> > + <#assign line = 0> > + <#list productRoles as productRole> > + <#assign line = line + 1> > + <#assign curRoleType = productRole.getRelatedOneCache("RoleType")> > + <tr> > + <td><a href="/partymgr/control/viewprofile?party_id=${(productRole.partyId)?if_exists}" target="_blank" class="buttontext">${(productRole.partyId)?if_exists}</a></td> > + <td>${(curRoleType.get("description",locale))?if_exists}</td> > + <#assign hasntStarted = false> > + <#if (productRole.getTimestamp("fromDate"))?exists && Static["org.ofbiz.base.util.UtilDateTime"].nowTimestamp().before(productRole.getTimestamp("fromDate"))> <#assign hasntStarted = true></#if> > + <td<#if hasntStarted> class="alert"</#if>>${(productRole.fromDate)?if_exists}</td> > + <td align="center"> > + <form method="post" action="<@ofbizUrl>updatePartyToProduct</@ofbizUrl>" name="lineForm${line}"> > + <#assign hasExpired = false> > + <#if (productRole.getTimestamp("thruDate"))?exists && (Static["org.ofbiz.base.util.UtilDateTime"].nowTimestamp().after(productRole.getTimestamp("thruDate")))> <#assign hasExpired = true></#if> > + <input type="hidden" name="productId" value="${(productRole.productId)?if_exists}"> > + <input type="hidden" name="partyId" value="${(productRole.partyId)?if_exists}"> > + <input type="hidden" name="roleTypeId" value="${(productRole.roleTypeId)?if_exists}"> > + <input type="hidden" name="fromDate" value="${(productRole.getTimestamp("fromDate"))?if_exists}"> > + <input type="text" size="25" name="thruDate" value="${(productRole. getTimestamp("thruDate"))?if_exists}" class="inputBox" <#if hasExpired> style="color: red;"</#if>> > + <a href="javascript:call_cal(document.lineForm${line}.thruDate, '${(productRole.getTimestamp("thruDate"))?default(nowTimestamp?string)}');"><img src="<@ofbizContentUrl>/images/cal.gif</@ofbizContentUrl>" width="16" height="16" border="0" alt="Calendar"></a> > + <input type="submit" value="${uiLabelMap.CommonUpdate}"> > + </form> > + </td> > + <td align="center"> > + <a href="<@ofbizUrl>removePartyFromProduct?productId=${(productRole.productId)?if_exists}&partyId=${(productRole.partyId)?if_exists}&roleTypeId=${(productRole.roleTypeId)?if_exists}&fromDate=${Static["org.ofbiz.base.util.UtilFormatOut"].encodeQueryValue(productRole.getTimestamp("fromDate").toString())}</@ofbizUrl>" class="buttontext"> > + ${uiLabelMap.CommonDelete}</a> > + </td> > + </tr> > + </#list> > + </table> > + <br/> > + <h2>${uiLabelMap.ProductAssociatePartyToProduct}:</h2> > + <br/> > + <form method="post" action="<@ofbizUrl>addPartyToProduct</@ofbizUrl>" name="addNewForm"> > + <input type="hidden" name="productId" value="${productId}"> > + <input type="text" size="20" maxlength="20" name="partyId" value=""> > + <#-- TODO: Add PartyId lookup screen > + <a href="javascript:call_fieldlookup2(document.addNewForm.partyId,'LookupCustomerName');"> > + <img src='/images/fieldlookup.gif' width='15' height='14' border='0' alt='Click here For Field Lookup'/> > + </a> --> > + <select name="roleTypeId" size="1"> > + <#list roleTypes as roleType> > + <option value="${(roleType.roleTypeId)?if_exists}" <#if roleType.roleTypeId.equals("_NA_")> ${uiLabelMap.ProductSelected}</#if>>${(roleType.get("description",locale))?if_exists}</option> > + </#list> > + </select> > + <input type="text" size="25" name="fromDate"> > + <a href="javascript:call_cal(document.addNewForm.fromDate, '${nowTimestamp?string}');"><img src="<@ofbizContentUrl>/images/cal.gif</@ofbizContentUrl>" width="16" height="16" border="0" alt="Calendar"></a> > + <input type="submit" value="${uiLabelMap.CommonAdd}"> > + </form> > +</#if> > > Modified: ofbiz/trunk/applications/product/webapp/catalog/product/ProductTabBar.ftl > URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/webapp/catalog/product/ProductTabBar.ftl?rev=578930&r1=578929&r2=578930&view=diff > ============================================================================== > --- ofbiz/trunk/applications/product/webapp/catalog/product/ProductTabBar.ftl (original) > +++ ofbiz/trunk/applications/product/webapp/catalog/product/ProductTabBar.ftl Mon Sep 24 12:38:03 2007 > @@ -55,6 +55,7 @@ > <#if product?exists && product.productTypeId?if_exists == "ASSET_USAGE"> > <a href="<@ofbizUrl>EditProductAssetUsage?productId=${productId}</@ofbizUrl>" class="${selectedClassMap.EditProductAssetUsage?default(unselectedClassName)}">${uiLabelMap.ProductAssetUsage}</a> > </#if> > - <a href="<@ofbizUrl>EditProductWorkEfforts?productId=${productId}</@ofbizUrl>" class="${selectedClassMap.EditProductWorkEfforts?default(unselectedClassName)}">${uiLabelMap.WorkEffortWorkEffort}</a> > + <a href="<@ofbizUrl>EditProductWorkEfforts?productId=${productId}</@ofbizUrl>" class="${selectedClassMap.EditProductWorkEfforts?default(unselectedClassName)}">${uiLabelMap.WorkEffortWorkEffort}</a> > + <a href="<@ofbizUrl>EditProductParties?productId=${productId}</@ofbizUrl>" class="${selectedClassMap.EditProductParties?default(unselectedClassName)}">${uiLabelMap.PartyParties}</a> > </div> > </#if> > > Modified: ofbiz/trunk/applications/product/widget/catalog/CatalogCommonScreens.xml > URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/widget/catalog/CatalogCommonScreens.xml?rev=578930&r1=578929&r2=578930&view=diff > ============================================================================== > --- ofbiz/trunk/applications/product/widget/catalog/CatalogCommonScreens.xml (original) > +++ ofbiz/trunk/applications/product/widget/catalog/CatalogCommonScreens.xml Mon Sep 24 12:38:03 2007 > @@ -78,7 +78,7 @@ > </container> > > <!-- add Create Product and View Product (in ecommerce) links --> > - <container> > + <container style="button-bar"> > <link target="EditProduct" text="${uiLabelMap.ProductNewProduct}" style="buttontext"/> > <link target="CreateVirtualWithVariantsForm" text="${uiLabelMap.ProductNewVirtualProduct}" style="buttontext"/> > <link target="/ecommerce/control/product?product_id=${productId}" url-mode="inter-app" text="${uiLabelMap.ProductProductPage}" style="buttontext"/> > > Modified: ofbiz/trunk/applications/product/widget/catalog/ProductScreens.xml > URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/widget/catalog/ProductScreens.xml?rev=578930&r1=578929&r2=578930&view=diff > ============================================================================== > --- ofbiz/trunk/applications/product/widget/catalog/ProductScreens.xml (original) > +++ ofbiz/trunk/applications/product/widget/catalog/ProductScreens.xml Mon Sep 24 12:38:03 2007 > @@ -974,4 +974,37 @@ > </section> > </screen> > > + <screen name="EditProductParties"> > + <section> > + <actions> > + <set field="titleProperty" value="PageTitleEditProductParties"/> > + <set field="headerItem" value="product"/> > + <set field="tabButtonItem" value="EditProductParties"/> > + <set field="labelTitleProperty" value="PartyParties"/> > + > + <set field="productId" from-field="parameters.productId"/> > + <entity-one entity-name="Product" value-name="product"/> > + > + <entity-condition entity-name="ProductRole" list-name="productRoles"> > + <condition-expr field-name="productId" env-name="productId"/> > + <order-by field-name="roleTypeId"/> > + <order-by field-name="partyId"/> > + </entity-condition> > + > + <entity-condition entity-name="RoleType" list-name="roleTypes"> > + <order-by field-name="description"/> > + </entity-condition> > + </actions> > + <widgets> > + <decorator-screen name="CommonProductDecorator" location="${parameters.mainDecoratorLocation}"> > + <decorator-section name="body"> > + <platform-specific> > + <html><html-template location="component://product/webapp/catalog/product/EditProductParties.ftl"/></html> > + </platform-specific> > + </decorator-section> > + </decorator-screen> > + </widgets> > + </section> > + </screen> > + > </screens> > > |
Free forum by Nabble | Edit this page |