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