]> git.mxchange.org Git - jfinancials-war.git/blob
ba2b0a0e3fecc7131d2c1a23cff2218627066985
[jfinancials-war.git] /
1 /*
2  * Copyright (C) 2016 - 2020 Free Software Foundation
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU Affero General Public License as
6  * published by the Free Software Foundation, either version 3 of the
7  * License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU Affero General Public License for more details.
13  *
14  * You should have received a copy of the GNU Affero General Public License
15  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
16  */
17 package org.mxchange.jfinancials.beans.generic_product.action;
18
19 import java.math.BigDecimal;
20 import java.text.MessageFormat;
21 import javax.ejb.EJB;
22 import javax.enterprise.event.Event;
23 import javax.enterprise.inject.Any;
24 import javax.faces.FacesException;
25 import javax.faces.view.ViewScoped;
26 import javax.faces.view.facelets.FaceletException;
27 import javax.inject.Inject;
28 import javax.inject.Named;
29 import org.mxchange.jcontactsbusiness.model.basicdata.BasicData;
30 import org.mxchange.jfinancials.beans.BaseFinancialsBean;
31 import org.mxchange.jfinancials.beans.generic_product.list.FinancialsProductListWebViewController;
32 import org.mxchange.jproduct.events.product.added.AddedProductEvent;
33 import org.mxchange.jproduct.events.product.added.ProductAddedEvent;
34 import org.mxchange.jproduct.events.product.updated.ObservableProductUpdatedEvent;
35 import org.mxchange.jproduct.events.product.updated.ProductUpdatedEvent;
36 import org.mxchange.jproduct.exceptions.product.ProductAlreadyAddedException;
37 import org.mxchange.jproduct.exceptions.product.ProductNotFoundException;
38 import org.mxchange.jproduct.model.category.Category;
39 import org.mxchange.jproduct.model.product.AdminProductSessionBeanRemote;
40 import org.mxchange.jproduct.model.product.GenericProduct;
41 import org.mxchange.jproduct.model.product.Product;
42 import org.mxchange.jproduct.model.product.agegroup.AgeGroup;
43
44 /**
45  * Main application class
46  * <p>
47  * @author Roland Häder<roland@mxchange.org>
48  */
49 @Named ("adminGenericProductActionController")
50 @ViewScoped
51 public class FinancialAdminGenericProductActionWebViewBean extends BaseFinancialsBean implements FinancialAdminProductActionWebViewController {
52
53         /**
54          * Serial number
55          */
56         private static final long serialVersionUID = 5_819_375_183_472_872L;
57
58         /**
59          * Event for added currentProduct
60          */
61         @Inject
62         @Any
63         private Event<AddedProductEvent> addedProductEvent;
64
65         /**
66          * Remote bean for products
67          */
68         @EJB (lookup = "java:global/jfinancials-ejb/adminProduct!org.mxchange.jproduct.model.product.AdminProductSessionBeanRemote")
69         private AdminProductSessionBeanRemote adminProductBean;
70
71         /**
72          * Product instance
73          */
74         private Product currentProduct;
75
76         /**
77          * Product's age group
78          */
79         private AgeGroup productAgeGroup;
80
81         /**
82          * Availability
83          */
84         private Boolean productAvailability;
85
86         /**
87          * Barcode number
88          */
89         private String productBarCodeNumber;
90
91         /**
92          * Category instance
93          */
94         private Category productCategory;
95
96         /**
97          * Product's price currency code like EUR or USD
98          */
99         private String productCurrencyCode;
100
101         /**
102          * Product's gross price
103          */
104         private BigDecimal productGrossPrice;
105
106         /**
107          * I18n key of currentProduct
108          */
109         private String productI18nKey;
110
111         /**
112          * Product id
113          */
114         private Long productId;
115
116         /**
117          * Product list controller
118          */
119         @Inject
120         private FinancialsProductListWebViewController productListController;
121
122         /**
123          * Product's manufacturing/producing company
124          */
125         private BasicData productManufacturer;
126
127         /**
128          * Product's net price
129          */
130         private BigDecimal productNetPrice;
131
132         /**
133          * Product number
134          */
135         private Long productNumber;
136
137         /**
138          * Product size (for shoes, clothings)
139          */
140         private String productSize;
141
142         /**
143          * Product's tax rate
144          */
145         private BigDecimal productTaxRate;
146
147         /**
148          * Product's unit amount
149          */
150         private BigDecimal productUnitAmount;
151
152         /**
153          * Product's i18n key
154          */
155         private String productUnitI18nKey;
156
157         /**
158          * Event for updated currentProduct
159          */
160         @Inject
161         @Any
162         private Event<ObservableProductUpdatedEvent> updatedProductEvent;
163
164         /**
165          * Default constructor
166          */
167         public FinancialAdminGenericProductActionWebViewBean () {
168                 // Call super constructor
169                 super();
170         }
171
172         /**
173          * Adds given product data from request to database
174          * <p>
175          * @throws FaceletException If something unexpected happened
176          */
177         public void addProduct () throws FaceletException {
178                 // Is product i18n key already used?
179                 if (this.productListController.isProductI18nKeyAdded(this.getProductI18nKey())) {
180                         // Then throw exception
181                         throw new FacesException(MessageFormat.format("Product i18n key {0} already added.", this.getProductI18nKey()));
182                 }
183
184                 // Create current product instance
185                 final Product product = this.createProductInstance();
186
187                 // Declare updated current product instance
188                 final Product updatedProduct;
189
190                 try {
191                         // Call EJB
192                         updatedProduct = this.adminProductBean.addGenericProduct(product);
193                 } catch (final ProductAlreadyAddedException ex) {
194                         // Continue to throw
195                         throw new FacesException(ex);
196                 }
197
198                 // Fire event
199                 this.addedProductEvent.fire(new ProductAddedEvent(updatedProduct));
200         }
201
202         /**
203          * Copies all currentProduct's properties back to this bean.
204          */
205         public void copyAllProductProperties () {
206                 // Validate current product instance
207                 if (this.getCurrentProduct() == null) {
208                         // Throw NPE
209                         throw new NullPointerException("this.product is null"); //NOI18N
210                 } else if (this.getCurrentProduct().getProductId() == null) {
211                         // Throw NPE again
212                         throw new NullPointerException("this.product.productId is null"); //NOI18N
213                 } else if (this.getCurrentProduct().getProductId() < 1) {
214                         // Not valid
215                         throw new IllegalStateException(MessageFormat.format("this.product.productId={0} is not valid.", this.getCurrentProduct().getProductId())); //NOI18N
216                 }
217
218                 // Now copy all fields
219                 this.setProductAgeGroup(this.getCurrentProduct().getProductAgeGroup());
220                 this.setProductAvailability(this.getCurrentProduct().getProductAvailability());
221                 this.setProductBarCodeNumber(this.getCurrentProduct().getProductBarCodeNumber());
222                 this.setProductCategory(this.getCurrentProduct().getProductCategory());
223                 this.setProductCurrencyCode(this.getCurrentProduct().getProductCurrencyCode());
224                 this.setProductGrossPrice(this.getCurrentProduct().getProductGrossPrice());
225                 this.setProductI18nKey(this.getCurrentProduct().getProductI18nKey());
226                 this.setProductId(this.getCurrentProduct().getProductId());
227                 this.setProductManufacturer(this.getCurrentProduct().getProductManufacturer());
228                 this.setProductNetPrice(this.getCurrentProduct().getProductNetPrice());
229                 this.setProductNumber(this.getCurrentProduct().getProductNumber());
230                 this.setProductSize(this.getCurrentProduct().getProductSize());
231                 this.setProductTaxRate(this.getCurrentProduct().getProductTaxRate());
232                 this.setProductUnitAmount(this.getCurrentProduct().getProductUnitAmount());
233                 this.setProductUnitI18nKey(this.getCurrentProduct().getProductUnitI18nKey());
234         }
235
236         /**
237          * Getter for current product instance
238          * <p>
239          * @return Product instance
240          */
241         public Product getCurrentProduct () {
242                 return this.currentProduct;
243         }
244
245         /**
246          * Setter for current product instance
247          * <p>
248          * @param currentProduct Current product instance
249          */
250         public void setCurrentProduct (final Product currentProduct) {
251                 this.currentProduct = currentProduct;
252         }
253
254         /**
255          * Getter for product's age group
256          * <p>
257          * @return Product's age group
258          */
259         public AgeGroup getProductAgeGroup () {
260                 return this.productAgeGroup;
261         }
262
263         /**
264          * Setter for product's age group
265          * <p>
266          * @param productAgeGroup Product's age group
267          */
268         public void setProductAgeGroup (final AgeGroup productAgeGroup) {
269                 this.productAgeGroup = productAgeGroup;
270         }
271
272         /**
273          * Getter for product's available
274          * <p>
275          * @return Product's available
276          */
277         public Boolean getProductAvailability () {
278                 return this.productAvailability;
279         }
280
281         /**
282          * Setter for product's available
283          * <p>
284          * @param productAvailability Product's available
285          */
286         public void setProductAvailability (final Boolean productAvailability) {
287                 this.productAvailability = productAvailability;
288         }
289
290         /**
291          * Getter for product's bar-code number
292          * <p>
293          * @return Product's bar-code number
294          */
295         public String getProductBarCodeNumber () {
296                 return this.productBarCodeNumber;
297         }
298
299         /**
300          * Setter for product's bar-code number
301          * <p>
302          * @param productBarCodeNumber Product's bar-code number
303          */
304         public void setProductBarCodeNumber (final String productBarCodeNumber) {
305                 this.productBarCodeNumber = productBarCodeNumber;
306         }
307
308         /**
309          * Getter for product's category
310          * <p>
311          * @return Product's category
312          */
313         public Category getProductCategory () {
314                 return this.productCategory;
315         }
316
317         /**
318          * Setter for product's category instance
319          * <p>
320          * @param productCategory Product's category instance
321          */
322         public void setProductCategory (final Category productCategory) {
323                 this.productCategory = productCategory;
324         }
325
326         /**
327          * Getter for product's price currency code
328          * <p>
329          * @return Product's price currency code
330          */
331         public String getProductCurrencyCode () {
332                 return this.productCurrencyCode;
333         }
334
335         /**
336          * Setter for product's price currency code
337          * <p>
338          * @param productCurrencyCode Product's price currency code
339          */
340         public void setProductCurrencyCode (final String productCurrencyCode) {
341                 this.productCurrencyCode = productCurrencyCode;
342         }
343
344         /**
345          * Getter for product's gross price
346          * <p>
347          * @return Product's gross price
348          */
349         public BigDecimal getProductGrossPrice () {
350                 return this.productGrossPrice;
351         }
352
353         /**
354          * Setter for product's gross price
355          * <p>
356          * @param productGrossPrice Product's gross price
357          */
358         public void setProductGrossPrice (final BigDecimal productGrossPrice) {
359                 this.productGrossPrice = productGrossPrice;
360         }
361
362         /**
363          * Getter for product unit's i18n key
364          * <p>
365          * @return Product's i18n key
366          */
367         public String getProductI18nKey () {
368                 return this.productI18nKey;
369         }
370
371         /**
372          * Setter for product unit's i18n key
373          * <p>
374          * @param productI18nKey Product's i18n key
375          */
376         public void setProductI18nKey (final String productI18nKey) {
377                 this.productI18nKey = productI18nKey;
378         }
379
380         /**
381          * Getter for product id
382          * <p>
383          * @return Product id
384          */
385         public Long getProductId () {
386                 return this.productId;
387         }
388
389         /**
390          * Setter for product id
391          * <p>
392          * @param productId Product id
393          */
394         public void setProductId (final Long productId) {
395                 this.productId = productId;
396         }
397
398         /**
399          * Getter for product's manufacturing/producing company
400          * <p>
401          * @return Product's manufacturing/producing company
402          */
403         public BasicData getProductManufacturer () {
404                 return this.productManufacturer;
405         }
406
407         /**
408          * Setter for product's manufacturing/producing company
409          * <p>
410          * @param productManufacturer Product's manufacturing/producing company
411          */
412         public void setProductManufacturer (final BasicData productManufacturer) {
413                 this.productManufacturer = productManufacturer;
414         }
415
416         /**
417          * Getter for product's net price
418          * <p>
419          * @return Product's net price
420          */
421         public BigDecimal getProductNetPrice () {
422                 return this.productNetPrice;
423         }
424
425         /**
426          * Setter for product's net price
427          * <p>
428          * @param productNetPrice Product's net price
429          */
430         public void setProductNetPrice (final BigDecimal productNetPrice) {
431                 this.productNetPrice = productNetPrice;
432         }
433
434         /**
435          * Getter for product's number
436          * <p>
437          * @return Product's number
438          */
439         public Long getProductNumber () {
440                 return this.productNumber;
441         }
442
443         /**
444          * Setter for product's number
445          * <p>
446          * @param productNumber Product's number
447          */
448         public void setProductNumber (final Long productNumber) {
449                 this.productNumber = productNumber;
450         }
451
452         /**
453          * Getter for product's size
454          * <p>
455          * @return Product's size
456          */
457         public String getProductSize () {
458                 return this.productSize;
459         }
460
461         /**
462          * Setter for product's size
463          * <p>
464          * @param productSize Product's size
465          */
466         public void setProductSize (final String productSize) {
467                 this.productSize = productSize;
468         }
469
470         /**
471          * Getter for product's tax rate
472          * <p>
473          * @return Product's tax rate
474          */
475         public BigDecimal getProductTaxRate () {
476                 return this.productTaxRate;
477         }
478
479         /**
480          * Setter for product's tax rate
481          * <p>
482          * @param productTaxRate Product's tax rate
483          */
484         public void setProductTaxRate (final BigDecimal productTaxRate) {
485                 this.productTaxRate = productTaxRate;
486         }
487
488         /**
489          * Getter for product's unit amount
490          * <p>
491          * @return Product's unit amount
492          */
493         public BigDecimal getProductUnitAmount () {
494                 return this.productUnitAmount;
495         }
496
497         /**
498          * Setter for product's unit amount
499          * <p>
500          * @param productUnitAmount Product's unit amount
501          */
502         public void setProductUnitAmount (final BigDecimal productUnitAmount) {
503                 this.productUnitAmount = productUnitAmount;
504         }
505
506         /**
507          * Getter for product unit's i18n key
508          * <p>
509          * @return Product's i18n key
510          */
511         public String getProductUnitI18nKey () {
512                 return this.productUnitI18nKey;
513         }
514
515         /**
516          * Setter for product unit's i18n key
517          * <p>
518          * @param productUnitI18nKey Product unit's i18n key
519          */
520         public void setProductUnitI18nKey (final String productUnitI18nKey) {
521                 this.productUnitI18nKey = productUnitI18nKey;
522         }
523
524         /**
525          * Updates given product data from request to database
526          * <p>
527          * @throws FaceletException If something unexpected happened
528          */
529         public void updateProduct () throws FaceletException {
530                 // Get new product instance
531                 final Product newProduct = this.createProductInstance();
532
533                 // Check if current product instance is in helper and valid
534                 if (null == newProduct) {
535                         // Throw NPE
536                         throw new NullPointerException("newProduct is null"); //NOI18N
537                 } else if (newProduct.getProductId() == null) {
538                         // Throw NPE again
539                         throw new NullPointerException("newProduct.productId is null"); //NOI18N //NOI18N
540                 } else if (newProduct.getProductId() < 1) {
541                         // Invalid id
542                         throw new IllegalStateException(MessageFormat.format("newProduct.productId={0} is invalid", newProduct.getProductId())); //NOI18N
543                 }
544
545                 // Init productr
546                 final Product updatedProduct;
547
548                 try {
549                         // Call EJB for updating product data
550                         updatedProduct = this.adminProductBean.updateProductData(newProduct);
551                 } catch (final ProductNotFoundException ex) {
552                         // Throw again
553                         throw new FacesException(ex);
554                 }
555
556                 // Fire event
557                 this.updatedProductEvent.fire(new ProductUpdatedEvent(updatedProduct));
558
559                 // Clear bean
560                 this.clear();
561         }
562
563         /**
564          * Clears this bean (example: product has been added)
565          */
566         private void clear () {
567                 // Clear all data
568                 this.setProductAgeGroup(null);
569                 this.setProductAvailability(Boolean.FALSE);
570                 this.setProductBarCodeNumber(null);
571                 this.setProductCategory(null);
572                 this.setProductGrossPrice(null);
573                 this.setProductI18nKey(null);
574                 this.setProductId(null);
575                 this.setProductManufacturer(null);
576                 this.setProductNetPrice(null);
577                 this.setProductNumber(null);
578                 this.setProductSize(null);
579                 this.setProductTaxRate(null);
580                 this.setProductUnitAmount(null);
581                 this.setProductUnitI18nKey(null);
582         }
583
584         /**
585          * Creates a new product instance with all fields
586          * <p>
587          * @return Product instance
588          */
589         private Product createProductInstance () {
590                 // Create new product instance
591                 final Product newProduct = new GenericProduct(
592                                           this.getProductI18nKey(),
593                                           this.getProductGrossPrice(),
594                                           this.getProductCurrencyCode(),
595                                           this.getProductCategory(),
596                                           this.getProductAvailability(),
597                                           this.getProductUnitAmount(),
598                                           this.getProductUnitI18nKey()
599                           );
600
601                 // Set all optional fields
602                 newProduct.setProductAgeGroup(this.getProductAgeGroup());
603                 newProduct.setProductBarCodeNumber(this.getProductBarCodeNumber());
604                 newProduct.setProductManufacturer(this.getProductManufacturer());
605                 newProduct.setProductNumber(this.getProductNumber());
606                 newProduct.setProductNetPrice(this.getProductNetPrice());
607                 newProduct.setProductSize(this.getProductSize());
608                 newProduct.setProductTaxRate(this.getProductTaxRate());
609
610                 // Is product id set?
611                 if (this.getProductId() instanceof Long) {
612                         // Set it, too
613                         newProduct.setProductId(this.getProductId());
614                 }
615
616                 // Return it
617                 return newProduct;
618         }
619
620 }