2020-05-25 17:08:15 +02:00
package org.hso.ecommerce.action.cronjob ;
import java.util.HashMap ;
import java.util.List ;
import java.util.Map.Entry ;
import org.hso.ecommerce.action.cronjob.ReadSupplierDataAction.ArticleIdentifier ;
import org.hso.ecommerce.action.cronjob.ReadSupplierDataAction.Offer ;
import org.hso.ecommerce.api.data.Article ;
import org.hso.ecommerce.entities.supplier.ArticleOffer ;
public class UpdateOffersAction {
private List < ArticleOffer > offers ;
private HashMap < ArticleIdentifier , Offer > cheapestOffer ;
public UpdateOffersAction ( List < ArticleOffer > offers , HashMap < ArticleIdentifier , Offer > cheapestOffer ) {
this . offers = offers ;
this . cheapestOffer = cheapestOffer ;
}
private HashMap < ArticleIdentifier , ArticleOffer > mapOffers ( ) {
HashMap < ArticleIdentifier , ArticleOffer > map = new HashMap < > ( ) ;
for ( ArticleOffer offer : offers ) {
ArticleIdentifier identifier = new ArticleIdentifier ( offer . manufacturer , offer . articleNumber ) ;
map . put ( identifier , offer ) ;
}
return map ;
}
public List < ArticleOffer > finish ( ) {
HashMap < ArticleIdentifier , ArticleOffer > availableOffers = mapOffers ( ) ;
2020-05-25 17:19:25 +02:00
2020-05-30 18:25:23 +02:00
// Reset all advertise-flags and supplier relations first. They are set again below.
2020-05-25 17:19:25 +02:00
for ( ArticleOffer offer : availableOffers . values ( ) ) {
offer . shouldBeAdvertised = false ;
2020-05-30 18:25:23 +02:00
offer . cheapestSupplier = null ;
2020-05-25 17:19:25 +02:00
}
2020-05-25 17:08:15 +02:00
for ( Entry < ArticleIdentifier , Offer > cheapestOffer : cheapestOffer . entrySet ( ) ) {
String manufacturer = cheapestOffer . getKey ( ) . manufacturer ;
String articleNumber = cheapestOffer . getKey ( ) . articleNumber ;
ArticleOffer currentOffer = availableOffers . get ( cheapestOffer . getKey ( ) ) ;
if ( currentOffer = = null ) {
currentOffer = new ArticleOffer ( ) ;
currentOffer . manufacturer = manufacturer ;
currentOffer . articleNumber = articleNumber ;
offers . add ( currentOffer ) ;
}
Article currentOfferedArticle = cheapestOffer . getValue ( ) . apiSupplier . findArticle ( manufacturer ,
articleNumber ) ;
2020-05-30 18:25:23 +02:00
currentOffer . title = currentOfferedArticle . title ;
2020-05-25 17:08:15 +02:00
currentOffer . vatPercent = currentOfferedArticle . vatPercent ;
2020-05-30 18:25:23 +02:00
currentOffer . cheapestSupplier = cheapestOffer . getValue ( ) . dbSupplier ;
currentOffer . pricePerUnitNet = currentOfferedArticle . pricePerUnitNet ;
2020-05-25 17:19:25 +02:00
// Set advertise-flag if any supplier wants it to be set
if ( currentOfferedArticle . shouldBeAdvertised ) {
currentOffer . shouldBeAdvertised = true ;
}
2020-05-25 17:08:15 +02:00
}
return offers ;
}
}