]> git.mxchange.org Git - jfinancials-war.git/commitdiff
Product-only:
authorRoland Häder <roland@mxchange.org>
Fri, 30 Mar 2018 22:12:45 +0000 (00:12 +0200)
committerRoland Häder <roland@mxchange.org>
Fri, 30 Mar 2018 22:12:45 +0000 (00:12 +0200)
- in product list, allow clicking ("selecting") a row (single product) and
  show a dialog (modal) box with all detailed data
- _HEADER is now everwhere a suffix, not 2nd prefix of i18n keys

Signed-off-by: Roland Häder <roland@mxchange.org>
src/java/org/mxchange/jfinancials/beans/generic_product/list/FinancialsProductListWebViewBean.java
src/java/org/mxchange/localization/project_de_DE.properties
src/java/org/mxchange/localization/project_en_US.properties
web/WEB-INF/faces-config.xml
web/admin/generic_product/admin_generic_product_list.xhtml
web/admin/product_category/admin_product_category_list.xhtml

index e9e260cbff99e35ffa3a6d25cad24c7d632e03ad..46401688f8ba334354932f3fb0812bb9d2c8dfc4 100644 (file)
@@ -74,6 +74,11 @@ public class FinancialsProductListWebViewBean extends BaseFinancialsBean impleme
        @NamedCache (cacheName = "productCache")
        private transient Cache<Long, Product> productCache;
 
+       /**
+        * Selected product
+        */
+       private Product selectedProduct;
+
        /**
         * Default constructor
         */
@@ -167,6 +172,24 @@ public class FinancialsProductListWebViewBean extends BaseFinancialsBean impleme
                this.filteredProducts = filteredProducts;
        }
 
+       /**
+        * Getter for selected product
+        * <p>
+        * @return Selected product
+        */
+       public Product getSelectedProduct () {
+               return this.selectedProduct;
+       }
+
+       /**
+        * Setter for selected product
+        * <p>
+        * @param selectedProduct Selected product
+        */
+       public void setSelectedProduct (final Product selectedProduct) {
+               this.selectedProduct = selectedProduct;
+       }
+
        /**
         * Initialization of this bean
         */
index a317a33c01fc73cffdc7e796d9e518f2336f9c86..dcbd7304bc914f7c453d68a2fce99df4795a6d07 100644 (file)
@@ -122,15 +122,14 @@ CONTENT_TITLE_ADMIN_LIST_GENERIC_PRODUCT=Produkte auflisten:
 TABLE_SUMMARY_ADMIN_LIST_GENERIC_PRODUCTS=Diese Tabelle listet alle eingetragenen Produkte auf.
 #@TODO Please fix German umlauts!
 ADMIN_EMPTY_LIST_GENERIC_PRODUCTS=Es befinden sich keine Produkte in der Datenbank. Oder Ihre Suche ergab keine Uebereinstimmungen.
-ADMIN_LIST_GENERIC_PRODUCTS_HEADER=Alle Produkte auflisten
 ADMIN_LINK_SHOW_GENERIC_PRODUCT_TITLE=Zeigt Daten des Produktes an.
-ADMIN_HEADER_ASSIGNED_PRODUCT_CATEGORY=Zugewiesene Produktkategorie:
+ADMIN_ASSIGNED_PRODUCT_CATEGORY_HEADER=Zugewiesene Produktkategorie:
 LABEL_PRODUCT_CATEGORIES=Produktkategorien
 FILTER_BY_MULTIPLE_PRODUCT_CATEGORIES_TITLE=Liste durch Auswahl von ein oder mehr Produktkategorien filtern.
 ADMIN_LINK_SHOW_GENERIC_PRODUCT_CATEGORY_TITLE=Zeigt Daten der Produktkategorie an.
-ADMIN_HEADER_PRODUCT_GROSS_PRICE=Bruttopreis:
+ADMIN_PRODUCT_GROSS_PRICE_HEADER=Bruttopreis:
 #@TODO Please fix German umlauts!
-ADMIN_HEADER_PRODUCT_AVAILABILITY=Produkt verfuegbar:
+PRODUCT_AVAILABILITY_HEADER=Produkt verfuegbar:
 #@TODO Please fix German umlauts!
 ADMIN_ADD_GENERIC_PRODUCT_TITLE=Neues Produkt hinzufuegen
 #@TODO Please fix German umlauts!
@@ -165,7 +164,7 @@ TABLE_SUMMARY_ADMIN_LIST_PRODUCT_CATEGORIES=Diese Tabelle listet alle eingetrage
 #@TODO Please fix German umlauts!
 ADMIN_EMPTY_LIST_PRODUCT_CATEGORIES=Es befinden sich keine Produktkategorien in der Datenbank. Oder Ihre Suche ergab keine Uebereinstimmungen.
 ADMIN_LIST_PRODUCT_CATEGORIES_HEADER=Alle Produktkategorien auflisten
-ADMIN_HEADER_ASSIGNED_PARENT_CATEGORY=Zugewiesene Elternkategorie:
+ADMIN_ASSIGNED_PARENT_CATEGORY_HEADER=Zugewiesene Elternkategorie:
 ADMIN_LINK_SHOW_PRODUCT_CATEGORY_TITLE=Zeigt Daten der Produktkategorie an.
 ADMIN_LINK_ASSIGN_PARENT_CATEGORY_TITLE=Elternkategorie zuweisen.
 #@TODO Please fix German umlauts!
@@ -200,7 +199,7 @@ ADMIN_ASSIGN_PRODUCT_MANUFACTURER=Produktehersteller dem Produkt zuweisen:
 ADMIN_ASSIGN_PRODUCT_MANUFACTURER_TITLE=Zweisen Sie hier ein Hersteller dem Produkt zu. Supermaerke verkaufen oefters nur die Produkte, die ein anderes Unternehmen hergestellt hat.
 #@TODO Please fix German umlauts!
 SELECT_RECEIPT_ITEM_MANUFACTURER=Hersteller zum Kassenboneintrah auswaehlen:
-ADMIN_HEADER_RECEIPT_ITEM_MANUFACTURER_NAME=Hersteller des Boneintrages:
+ADMIN_RECEIPT_ITEM_MANUFACTURER_NAME_HEADER=Hersteller des Boneintrages:
 ENTER_RECEIPT_ITEM_BRAND_NAME=Warenzeichen/Marke eingeben:
 ENTER_RECEIPT_ITEM_BRAND_NAME_TITLE=Geben Sie das Warenzeichen ein, dass Sie auf dem Kassenbon finden.
 ADMIN_PRODUCT_CURRENCY_CODE_REQUIRED=Bitte geben Sie den Waehrungscode fuer das Produkt ein. Beispiele: EUR, USD, PHP
@@ -208,7 +207,7 @@ ADMIN_PRODUCT_CURRENCY_CODE_REQUIRED=Bitte geben Sie den Waehrungscode fuer das
 ADMIN_PRODUCT_UNIT_AMOUNT_REQUIRED=Bitte geben Sie die Stueckanzahl des Produktes ein. Beispiel: 500 fuer 500g
 #@TODO Please fix German umlauts!
 ADMIN_PRODUCT_UNIT_I18N_KEY_REQUIRED=Bitte geben Sie den Uebersetzungschluessel zur Stueckzahl ein. Beispiel: UNIT_TYPE_GRAMS fuer Gramm
-ADMIN_HEADER_PRODUCT_MANUFACTURER_NAME=Produktehersteller:
+ADMIN_PRODUCT_MANUFACTURER_NAME_HEADER=Produktehersteller:
 ADMIN_NO_PRODUCT_MANUFACTURER_ASSIGNED_TITLE=Es ist kein Hersteller dem Produkt zugewiesen.
 RECEIPT_ISSUED=Ausgestellt:
 RECEIPT_NUMBER=Kassenbonnummer:
@@ -242,11 +241,43 @@ ADMIN_SELECT_PRODUCT_AGE_GROUP_TITLE=Bitte waehlen Sie wenn moeglich eine Alters
 ADMIN_ENTER_GENERIC_PRODUCT_SIZE=Groesse des Produktes:
 #@TODO Please fix German umlauts!
 ADMIN_ENTER_GENERIC_PRODUCT_SIZE_TITLE=Geben Sie hier die Groesse des Produktes an. Zum Beispiel haben Schuhe oder Kleider Groessen.
-AGE_GROUP_NEWBORN=Altersgruppe "Neugeborene"
+AGE_GROUP_NEWBORN=Altersgruppe "Neugeboren"
 AGE_GROUP_BABY=Altersgruppe "Baby"
 AGE_GROUP_CHILD=Altersgruppe "Kind"
 AGE_GROUP_YOUTH=Altersgruppe "Jugend"
-AGE_GROUP_ADULT=Altersgruppe "Erwachsene"
-AGE_GROUP_SENIOR=Altersgruppe "Senioren"
+AGE_GROUP_ADULT=Altersgruppe "Erwachsen"
+AGE_GROUP_SENIOR=Altersgruppe "Senior"
 #@TODO Please fix German umlauts!
 LABEL_RECEIPT_SELLERS=Verkaeufer
+ADMIN_PRODUCT_DETAILS_HEADER=Details zum Produkt "{0}" (Id {1}):
+ADMIN_SINGLE_PRODUCT_DETAILS_HEADER=Details zum einzelnen Produkt
+PRODUCT_ID_NUMBER_TITLE=Id-Nummer des Produktes
+#@TODO Please fix German umlauts!
+PRODUCT_I18N_KEY_TITLE=Internationalisierungsschluessel fuer das Produkt
+#@TODO Please fix German umlauts!
+PRODUCT_AVAILABILITY_TITLE=Ob das Produkt zur Verfuegung steht.
+AGE_GROUP_HEADER=Altersgruppe:
+PRODUCT_AGE_GROUP_TITLE=Altersgruppe des Produktes.
+PRODUCT_HAS_NO_AGE_GROUP=Das Produkt hat keine Altersgruppe.
+#@TODO Please fix German umlauts!
+CURRENCY_CODE_HEADER=Waehrungscode
+#@TODO Please fix German umlauts!
+PRODUCT_CURRENCY_CODE_TITLE=Waehrungscode des Produktpreises
+PRODUCT_GROSS_PRICE_HEADER=Bruttopreis:
+PRODUCT_GROSS_PRICE_TITLE=Bruttopreis des Produktes
+PRODUCT_NET_PRICE_HEADER=Nettopreis:
+PRODUCT_NET_PRICE_TITLE=Nettopreis des Produktes
+PRODUCT_TAX_RATE_HEADER=Steuersatz:
+PRODUCT_TAX_RATE_TITLE=Steuersatz des Produktes
+PRODUCT_NUMBER_HEADER=Produktnummer:
+PRODUCT_NUMBER_TITLE=Nummer des Produktes
+#@TODO Please fix German umlauts!
+PRODUCT_SIZE_HEADER=Produktgroesse
+PRODUCT_UNIT_AMOUNT_HEADER=Produktmenge:
+PRODUCT_UNIT_AMOUNT_TITLE=Mengenangabe des Produktes
+#@TODO Please fix German umlauts!
+PRODUCT_UNIT_I18N_KEY_HEADER=Internationalisierungsschluessel fuer Einheit:
+PRODUCT_UNIT_I18N_KEY_TITLE=Internationalisierungsschluessel fuer Einheit
+PRODUCT_HAS_NO_MANUFACTURER_ASSIGNED=Produkt hat keinen Hersteller zugewiesen.
+ADMIN_ASSIGNED_PRODUCT_MANUFACTURER_HEADER=Zugewiesener Hersteller:
+ADMIN_ASSIGNED_PRODUCT_MANUFACTURER_TITLE=Diesem Produkt zugewiesner Hersteller.
index 16e002c1af7adf51790367199947325a36f16d8b..235104555a9e57c14cbfe7a0711edff5f20c61d5 100644 (file)
@@ -92,14 +92,13 @@ PAGE_TITLE_ADMIN_LIST_GENERIC_PRODUCT=List products
 CONTENT_TITLE_ADMIN_LIST_GENERIC_PRODUCT=List products:
 TABLE_SUMMARY_ADMIN_LIST_GENERIC_PRODUCTS=This table lists all products.
 ADMIN_EMPTY_LIST_GENERIC_PRODUCTS=There are no products in database. Or your search criteria doesn't match anything.
-ADMIN_LIST_GENERIC_PRODUCTS_HEADER=List all products
 ADMIN_LINK_SHOW_GENERIC_PRODUCT_TITLE=Shows product data.
-ADMIN_HEADER_ASSIGNED_PRODUCT_CATEGORY=Assigned product category:
+ADMIN_ASSIGNED_PRODUCT_CATEGORY_HEADER=Assigned product category:
 LABEL_PRODUCT_CATEGORIES=Product categories
 FILTER_BY_MULTIPLE_PRODUCT_CATEGORIES_TITLE=Filter list by selecting one or more product categories.
 ADMIN_LINK_SHOW_GENERIC_PRODUCT_CATEGORY_TITLE=Shows product category data.
-ADMIN_HEADER_PRODUCT_GROSS_PRICE=Gross price:
-ADMIN_HEADER_PRODUCT_AVAILABILITY=Product available:
+ADMIN_PRODUCT_GROSS_PRICE_HEADER=Gross price:
+PRODUCT_AVAILABILITY_HEADER=Product available:
 ADMIN_ADD_GENERIC_PRODUCT_TITLE=Add new product
 ADMIN_ADD_GENERIC_PRODUCT_MINIMUM_DATA=Please choose a product category and enter product title, unit amount and type, gross price and currency code (e.g. USD).
 ADMIN_GENERIC_PRODUCT_DATA_LEGEND=Product data:
@@ -121,7 +120,7 @@ CONTENT_TITLE_ADMIN_LIST_PRODUCT_CATEGORY=List product categories:
 TABLE_SUMMARY_ADMIN_LIST_PRODUCT_CATEGORIES=This table lists all product categories.
 ADMIN_EMPTY_LIST_PRODUCT_CATEGORIES=There are no product categories in database. Or your search criteria doesn't match anything.
 ADMIN_LIST_PRODUCT_CATEGORIES_HEADER=List all product categories
-ADMIN_HEADER_ASSIGNED_PARENT_CATEGORY=Assigned parent category:
+ADMIN_ASSIGNED_PARENT_CATEGORY_HEADER=Assigned parent category:
 ADMIN_LINK_SHOW_PRODUCT_CATEGORY_TITLE=Shows product category data.
 ADMIN_LINK_ASSIGN_PARENT_CATEGORY_TITLE=Assign parent cateogory.
 ADMIN_ADD_PRODUCT_CATEGORY_TITLE=Add new product category
@@ -144,14 +143,14 @@ ADMIN_ENTER_GENERIC_PRODUCT_UNIT_I18N_KEY_TITLE=Enter the product unit's i18n ke
 ADMIN_ASSIGN_PRODUCT_MANUFACTURER=Assign product's manufacturing/producing company:
 ADMIN_ASSIGN_PRODUCT_MANUFACTURER_TITLE=Assign a manufacturing/producing company to this product. Supermarkets are often only selling products other companies have produced.
 SELECT_RECEIPT_ITEM_MANUFACTURER=Choose manufacturer for receipt item:
-ADMIN_HEADER_RECEIPT_ITEM_MANUFACTURER_NAME=Manufacturer of product item:
+ADMIN_RECEIPT_ITEM_MANUFACTURER_NAME_HEADER=Manufacturer of product item:
 ADMIN_ENTER_GENERIC_PRODUCT_CURRENCY_CODE_TITLE=Enter the currency code for product. Examples: EUR, USD, PHP
 ENTER_RECEIPT_ITEM_BRAND_NAME=Enter item's brand name:
 ENTER_RECEIPT_ITEM_BRAND_NAME_TITLE=Enter the item's brand name found on receipt.
 ADMIN_PRODUCT_CURRENCY_CODE_REQUIRED=Please enter current code for product. Example: EUR, USD, PHP
 ADMIN_PRODUCT_UNIT_AMOUNT_REQUIRED=Please enter a unit amount. Example 500 for 500 grams.
 ADMIN_PRODUCT_UNIT_I18N_KEY_REQUIRED=Please enter unit's i18n key. Example: UNIT_TYPE_GRAMS for grams
-ADMIN_HEADER_PRODUCT_MANUFACTURER_NAME=Product manufacturer:
+ADMIN_PRODUCT_MANUFACTURER_NAME_HEADER=Product manufacturer:
 ADMIN_NO_PRODUCT_MANUFACTURER_ASSIGNED_TITLE=No manufacturer is assigned with this product.
 RECEIPT_ISSUED=Issued at:
 RECEIPT_NUMBER=Receipt number:
@@ -182,3 +181,29 @@ AGE_GROUP_ADULT=Age group "Adult"
 AGE_GROUP_SENIOR=Age group "Senior"
 BUTTON_ADMIN_ADD_GENERIC_PRODUCT=Add product
 LABEL_RECEIPT_SELLERS=Seller
+ADMIN_PRODUCT_DETAILS_HEADER=Details of product "{0}" (Id {1}):
+ADMIN_SINGLE_PRODUCT_DETAILS_HEADER=Details of a single product
+PRODUCT_ID_NUMBER_TITLE=Id number of product
+PRODUCT_I18N_KEY_TITLE=Internationalization key of product
+PRODUCT_AVAILABILITY_TITLE=Whether product is available.
+AGE_GROUP_HEADER=Age group:
+PRODUCT_AGE_GROUP_TITLE=Age group of product.
+PRODUCT_HAS_NO_AGE_GROUP=The product has no age group.
+CURRENCY_CODE_HEADER=Currency code
+PRODUCT_CURRENCY_CODE_TITLE=Currency code of product's price
+PRODUCT_GROSS_PRICE_HEADER=Gross price:
+PRODUCT_GROSS_PRICE_TITLE=Gross price of product
+PRODUCT_NET_PRICE_HEADER=Net price:
+PRODUCT_NET_PRICE_TITLE=Net price of product
+PRODUCT_TAX_RATE_HEADER=Tax rate:
+PRODUCT_TAX_RATE_TITLE=Tax rate of product
+PRODUCT_NUMBER_HEADER=Product number:
+PRODUCT_NUMBER_TITLE=Number of product
+PRODUCT_SIZE_HEADER=Product size
+PRODUCT_UNIT_AMOUNT_HEADER=Product amount:
+PRODUCT_UNIT_AMOUNT_TITLE=Amount of product
+PRODUCT_UNIT_I18N_KEY_HEADER=Internationalization key for unit:
+PRODUCT_UNIT_I18N_KEY_TITLE=Internationalization key for unit
+PRODUCT_HAS_NO_MANUFACTURER_ASSIGNED=Product has no manufacturer assigned.
+ADMIN_ASSIGNED_PRODUCT_MANUFACTURER_HEADER=Assigned manufacturer:
+ADMIN_ASSIGNED_PRODUCT_MANUFACTURER_TITLE=This product assigned manufacturer.
index e0ce1167953967dd28daf77ba26f5a2743011143..2a6b503be9fbaa73550696aefb3a6710afe483af 100644 (file)
                        <from-outcome>admin_show_product_category</from-outcome>
                        <to-view-id>/admin/product_category/admin_product_category_show.xhtml</to-view-id>
                </navigation-case>
+               <navigation-case>
+                       <from-outcome>admin_show_basic_data</from-outcome>
+                       <to-view-id>/admin/basic_data/admin_basic_data_show.xhtml</to-view-id>
+               </navigation-case>
        </navigation-rule>
        <navigation-rule>
                <from-view-id>/admin/financial/receipt/admin_receipt_list.xhtml</from-view-id>
index 973c5d18dff1f513b5ed5518927627d535eedc09..d32e6cf293554e3264e58e4eef89eb9b7ce83bdc 100644 (file)
        </ui:define>
 
        <ui:define name="content">
-               <h4>
-                       <h:outputText value="#{project.ADMIN_LIST_GENERIC_PRODUCTS_HEADER}" />
-               </h4>
-
                <h:form id="form-list-products">
                        <p:dataTable
                                id="productList"
@@ -39,6 +35,9 @@
                                summary="#{project.TABLE_SUMMARY_ADMIN_LIST_GENERIC_PRODUCTS}"
                                emptyMessage="#{project.ADMIN_EMPTY_LIST_GENERIC_PRODUCTS}"
                                widgetVar="productList"
+                               selectionMode="single"
+                               selection="#{productListController.selectedProduct}"
+                               skipChildren="true"
                                >
 
                                <f:facet name="header">
                                        </p:panelGrid>
                                </f:facet>
 
-                               <p:column headerText="#{msg.ADMIN_HEADER_ID_NUMBER}" sortBy="#{product.productId}" filterable="false">
+                               <p:ajax
+                                       event="rowSelect"
+                                       update=":master:form-list-products:product-details"
+                                       oncomplete="PF('productDialog').show()"
+                                       />
+
+                               <p:column headerText="#{msg.ID_NUMBER_HEADER}" sortBy="#{product.productId}" filterable="false">
                                        <p:link outcome="admin_show_generic_product" title="#{project.ADMIN_LINK_SHOW_GENERIC_PRODUCT_TITLE}" value="#{product.productId}">
                                                <f:param name="productId" value="#{product.productId}" />
                                        </p:link>
                                </p:column>
 
-                               <p:column headerText="#{msg.ADMIN_HEADER_I18N_KEY}" sortBy="#{product.productI18nKey}" filterBy="#{product.productI18nKey}">
+                               <p:column headerText="#{msg.ADMIN_I18N_KEY_HEADER}" sortBy="#{product.productI18nKey}" filterBy="#{product.productI18nKey}">
                                        <h:outputText value="#{local[product.productI18nKey]}" title="#{product.productI18nKey}" />
                                </p:column>
 
-                               <p:column headerText="#{project.ADMIN_HEADER_ASSIGNED_PRODUCT_CATEGORY}" sortBy="#{product.productCategory}" filterBy="#{product.productCategory}" filterMatchMode="in">
+                               <p:column headerText="#{project.ADMIN_ASSIGNED_PRODUCT_CATEGORY_HEADER}" sortBy="#{product.productCategory}" filterBy="#{product.productCategory}" filterMatchMode="in">
                                        <f:facet name="filter">
                                                <p:selectCheckboxMenu
                                                        filter="true"
                                        </p:link>
                                </p:column>
 
-                               <p:column headerText="#{project.ADMIN_HEADER_PRODUCT_GROSS_PRICE}" sortBy="#{product.productGrossPrice}" filterBy="#{product.productGrossPrice}" filterFunction="#{productListController.filterByPrice}">
+                               <p:column headerText="#{project.ADMIN_PRODUCT_GROSS_PRICE_HEADER}" sortBy="#{product.productGrossPrice}" filterBy="#{product.productGrossPrice}" filterFunction="#{productListController.filterByPrice}">
                                        <h:outputText value="#{product.productGrossPrice}">
                                                <!-- @TODO Hard-coded EUR again -->
                                                <f:convertNumber type="currency" currencyCode="EUR" />
                                        </h:outputText>
                                </p:column>
 
-                               <p:column headerText="#{project.ADMIN_HEADER_PRODUCT_AVAILABILITY}" sortBy="#{product.productAvailability}" filterBy="#{product.productAvailability}" filterMatchMode="exact">
+                               <p:column headerText="#{project.PRODUCT_AVAILABILITY_HEADER}" sortBy="#{product.productAvailability}" filterBy="#{product.productAvailability}" filterMatchMode="exact">
                                        <f:facet name="filter">
                                                <p:selectOneMenu onchange="PF('productList').filter()">
                                                        <f:converter converterId="javax.faces.Boolean" />
                                                        <f:selectItem itemLabel="#{msg.CHOICE_NO}" itemValue="false" />
                                                </p:selectOneMenu>
                                        </f:facet>
+
                                        <h:outputText value="#{product.productAvailability ? msg.CHOICE_YES : msg.CHOICE_NO}" />
                                </p:column>
 
-                               <p:column headerText="#{project.ADMIN_HEADER_PRODUCT_MANUFACTURER_NAME}" sortBy="#{product.productManufacturer}" filterBy="#{product.productManufacturer}" filterMatchMode="in">
+                               <p:column headerText="#{project.ADMIN_PRODUCT_MANUFACTURER_NAME_HEADER}" sortBy="#{product.productManufacturer}" filterBy="#{product.productManufacturer}" filterMatchMode="in">
                                        <f:facet name="filter">
                                                <p:selectCheckboxMenu
                                                        filter="true"
                                                target="_blank"
                                                title="#{msg.LINK_COMPANY_WEBSITE_URL_TITLE}"
                                                rel="external"
-                                               rendered="#{not empty product.productManufacturer.companyWebsiteUrl and not empty product.productManufacturer.companyName}"
+                                               rendered="#{not empty product.productManufacturer and not empty product.productManufacturer.companyWebsiteUrl}"
                                                >
                                                <h:outputText value="#{product.productManufacturer.companyName}" />
                                        </p:link>
 
-                                       <h:outputText value="#{product.productManufacturer.companyName}" title="#{msg.NO_WEBSITE_URL_ENTERED}" rendered="#{empty product.productManufacturer.companyWebsiteUrl and not empty product.productManufacturer.companyName}" />
+                                       <h:outputText value="#{product.productManufacturer.companyName}" title="#{msg.NO_WEBSITE_URL_ENTERED}" rendered="#{not empty product.productManufacturer and empty product.productManufacturer.companyWebsiteUrl}" />
 
                                        <h:outputText value="#{msg.ADMIN_NOT_ASSIGNED}" title="#{project.ADMIN_NO_PRODUCT_MANUFACTURER_ASSIGNED_TITLE}" rendered="#{empty product.productManufacturer}" />
                                </p:column>
 
-                               <p:column headerText="#{msg.ADMIN_HEADER_ENTRY_CREATED}" sortBy="#{product.productCreated}" filterable="false">
+                               <p:column headerText="#{msg.ENTRY_CREATED_HEADER}" sortBy="#{product.productCreated}" filterable="false">
                                        <h:outputText id="productCreated" value="#{product.productCreated.time}">
                                                <f:convertDateTime for="productCreated" type="both" timeStyle="short" dateStyle="short" />
                                        </h:outputText>
                                </p:column>
 
-                               <p:column headerText="#{msg.ADMIN_HEADER_ACTION_LINKS}" sortable="false" filterable="false">
+                               <p:column headerText="#{msg.ADMIN_ACTION_LINKS_HEADER}" sortable="false" filterable="false">
                                        <product-links:outputGenericProductAdminMiniLinks product="#{product}" />
                                </p:column>
                        </p:dataTable>
+
+                       <p:dialog
+                               dynamic="true"
+                               modal="true"
+                               resizable="false"
+                               header="#{project.ADMIN_SINGLE_PRODUCT_DETAILS_HEADER}"
+                               hideEffect="fade"
+                               showEffect="fade"
+                               widgetVar="productDialog"
+                               position="center center"
+                               responsive="true"
+                               >
+                               <p:outputPanel id="product-details">
+                                       <p:panelGrid columns="2" rendered="#{not empty productListController.selectedProduct}" columnClasses="label,value">
+                                               <f:facet name="header">
+                                                       <h:outputFormat value="#{project.ADMIN_PRODUCT_DETAILS_HEADER}">
+                                                               <f:param value="#{local[productListController.selectedProduct.productI18nKey]}" />
+                                                               <f:param value="#{productListController.selectedProduct.productId}" />
+                                                       </h:outputFormat>
+                                               </f:facet>
+
+                                               <p:outputLabel value="#{msg.ID_NUMBER_HEADER}" title="#{project.PRODUCT_ID_NUMBER_TITLE}" />
+                                               <h:outputText value="#{productListController.selectedProduct.productId}" />
+
+                                               <p:outputLabel value="#{msg.ADMIN_I18N_KEY_HEADER}" title="#{project.PRODUCT_I18N_KEY_TITLE}" />
+                                               <h:outputText value="#{productListController.selectedProduct.productI18nKey}" title="#{local[productListController.selectedProduct.productI18nKey]}" />
+
+                                               <p:outputLabel value="#{project.PRODUCT_NUMBER_HEADER}" title="#{project.PRODUCT_NUMBER_TITLE}" />
+                                               <h:outputText value="#{productListController.selectedProduct.productNumber}" />
+
+                                               <p:outputLabel value="#{project.PRODUCT_AVAILABILITY_HEADER}" title="#{project.PRODUCT_AVAILABILITY_TITLE}" />
+                                               <h:outputText value="#{productListController.selectedProduct.productAvailability ? msg.CHOICE_YES : msg.CHOICE_NO}" />
+
+                                               <p:outputLabel value="#{project.AGE_GROUP_HEADER}" title="#{project.PRODUCT_AGE_GROUP_TITLE}" />
+                                               <h:outputText value="#{project[productListController.selectedProduct.productAgeGroup.i18nKey]}" title="#{productListController.selectedProduct.productAgeGroup.i18nKey}" rendered="#{not empty productListController.selectedProduct.productAgeGroup.i18nKey}" />
+                                               <h:outputText value="#{project.PRODUCT_HAS_NO_AGE_GROUP}" rendered="#{empty productListController.selectedProduct.productAgeGroup.i18nKey}" />
+
+                                               <p:outputLabel value="#{project.CURRENCY_CODE_HEADER}" title="#{project.PRODUCT_CURRENCY_CODE_TITLE}" />
+                                               <h:outputText value="#{productListController.selectedProduct.productCurrencyCode}" />
+
+                                               <p:outputLabel value="#{project.PRODUCT_GROSS_PRICE_HEADER}" title="#{project.PRODUCT_GROSS_PRICE_TITLE}" />
+                                               <h:outputText value="#{productListController.selectedProduct.productGrossPrice}">
+                                                       <f:convertNumber type="currency" currencyCode="#{productListController.selectedProduct.productCurrencyCode}" />
+                                               </h:outputText>
+
+                                               <p:outputLabel value="#{project.PRODUCT_NET_PRICE_HEADER}" title="#{project.PRODUCT_NET_PRICE_TITLE}" />
+                                               <h:outputText value="#{productListController.selectedProduct.productNetPrice}">
+                                                       <f:convertNumber type="currency" currencyCode="#{productListController.selectedProduct.productCurrencyCode}" />
+                                               </h:outputText>
+
+                                               <p:outputLabel value="#{project.PRODUCT_TAX_RATE_HEADER}" title="#{project.PRODUCT_TAX_RATE_TITLE}" />
+                                               <h:outputText value="#{productListController.selectedProduct.productTaxRate}">
+                                                       <!-- @TODO No real percentage number, 7 means 7%, not 700% -->
+                                                       <f:convertNumber type="number" />
+                                               </h:outputText>
+
+                                               <p:outputLabel value="#{project.PRODUCT_SIZE_HEADER}" title="#{project.PRODUCT_SIZE_TITLE}" />
+                                               <h:outputText value="#{productListController.selectedProduct.productSize}" />
+
+                                               <p:outputLabel value="#{project.PRODUCT_UNIT_AMOUNT_HEADER}" title="#{project.PRODUCT_UNIT_AMOUNT_TITLE}" />
+                                               <h:outputText value="#{productListController.selectedProduct.productUnitAmount}">
+                                                       <f:convertNumber type="number" />
+                                               </h:outputText>
+
+                                               <p:outputLabel value="#{project.PRODUCT_UNIT_I18N_KEY_HEADER}" title="#{project.PRODUCT_UNIT_I18N_KEY_TITLE}" />
+                                               <h:outputText value="#{productListController.selectedProduct.productUnitI18nKey}" title="#{local[productListController.selectedProduct.productUnitI18nKey]}" />
+
+                                               <p:outputLabel value="#{project.ADMIN_ASSIGNED_PRODUCT_CATEGORY_HEADER}" title="#{project.ADMIN_ASSIGNED_PRODUCT_CATEGORY_TITLE}" />
+                                               <p:link outcome="admin_show_product_category" title="#{project.ADMIN_LINK_SHOW_GENERIC_PRODUCT_CATEGORY_TITLE}" value="#{local[productListController.selectedProduct.productCategory.categoryI18nKey]}">
+                                                       <f:param name="categoryId" value="#{productListController.selectedProduct.productCategory.categoryId}" />
+                                               </p:link>
+
+                                               <p:outputLabel value="#{project.ADMIN_ASSIGNED_PRODUCT_MANUFACTURER_HEADER}" title="#{project.ADMIN_ASSIGNED_PRODUCT_MANUFACTURER_TITLE}" />
+                                               <p:link
+                                                       outcome="admin_show_basic_data"
+                                                       title="#{msg.ADMIN_LINK_SHOW_BASIC_DATA_TITLE}"
+                                                       rendered="#{not empty productListController.selectedProduct.productManufacturer}"
+                                                       >
+                                                       <h:outputFormat value="#{msg.BASIC_DATA_LINK_MASK}">
+                                                               <f:param value="#{productListController.selectedProduct.productManufacturer.companyName}" />
+                                                               <f:param value="#{productListController.selectedProduct.productManufacturer.basicDataId}" />
+                                                       </h:outputFormat>
+                                                       <f:param name="basicDataId" value="#{productListController.selectedProduct.productManufacturer.basicDataId}" />
+                                               </p:link>
+                                               <h:outputText value="#{project.PRODUCT_HAS_NO_MANUFACTURER_ASSIGNED}" rendered="#{empty productListController.selectedProduct.productManufacturer}" />
+                                       </p:panelGrid>
+                               </p:outputPanel>
+                       </p:dialog>
                </h:form>
 
                <h:form>
index 44f7668ffaacb90ab1c7dc36f4d6c70279fe31b8..0d7176f54d3cabce3cfbd768fd6ff0d90e7bd98f 100644 (file)
                                        </p:panelGrid>
                                </f:facet>
 
-                               <p:column headerText="#{msg.ADMIN_HEADER_ID_NUMBER}" sortBy="#{category.categoryId}" filterable="false">
+                               <p:column headerText="#{msg.ID_NUMBER_HEADER}" sortBy="#{category.categoryId}" filterable="false">
                                        <p:link outcome="admin_show_product_category" title="#{project.ADMIN_LINK_SHOW_PRODUCT_CATEGORY_TITLE}" value="#{category.categoryId}">
                                                <f:param name="categoryId" value="#{category.categoryId}" />
                                        </p:link>
                                </p:column>
 
-                               <p:column headerText="#{msg.ADMIN_HEADER_I18N_KEY}" sortBy="#{category.categoryI18nKey}" filterBy="#{category.categoryI18nKey}" filterMatchMode="contains">
+                               <p:column headerText="#{msg.ADMIN_I18N_KEY_HEADER}" sortBy="#{category.categoryI18nKey}" filterBy="#{category.categoryI18nKey}" filterMatchMode="contains">
                                        <h:outputText value="#{local[category.categoryI18nKey]}" title="#{category.categoryI18nKey}" />
                                </p:column>
 
-                               <p:column headerText="#{project.ADMIN_HEADER_ASSIGNED_PARENT_CATEGORY}" sortBy="#{category.parentCategory}" filterBy="#{category.parentCategory}" filterMatchMode="in">
+                               <p:column headerText="#{project.ADMIN_ASSIGNED_PARENT_CATEGORY_HEADER}" sortBy="#{category.parentCategory}" filterBy="#{category.parentCategory}" filterMatchMode="in">
                                        <f:facet name="filter">
                                                <p:selectCheckboxMenu
                                                        filter="true"
                                        </p:link>
                                </p:column>
 
-                               <p:column headerText="#{msg.ADMIN_HEADER_ENTRY_CREATED}" sortBy="#{category.categoryCreated}" filterable="false">
+                               <p:column headerText="#{msg.ENTRY_CREATED_HEADER}" sortBy="#{category.categoryCreated}" filterable="false">
                                        <h:outputText id="categoryCreated" value="#{category.categoryCreated.time}">
                                                <f:convertDateTime for="categoryCreated" type="both" timeStyle="short" dateStyle="short" />
                                        </h:outputText>
                                </p:column>
 
-                               <p:column headerText="#{msg.ADMIN_HEADER_ACTION_LINKS}" sortable="false" filterable="false">
+                               <p:column headerText="#{msg.ADMIN_ACTION_LINKS_HEADER}" sortable="false" filterable="false">
                                        <product-links:outputProductCategoryAdminMiniLinks category="#{category}" />
                                </p:column>
                        </p:dataTable>