Package de.hybris.platform.voucher.jalo
Class Voucher
- java.lang.Object
-
- All Implemented Interfaces:
java.io.Serializable
,java.lang.Comparable
- Direct Known Subclasses:
GeneratedPromotionVoucher
,GeneratedSerialVoucher
public abstract class Voucher extends GeneratedVoucher
The vouchers are redeemed on the total value of an order. The calculation of the discount is done on the total value of the applicable product's prices, inclusive of VAT. Non-applicable products in the order are not subject to the discount rules. To discover to which products in the order the voucher is applicable one could assign various restrictions to the voucher.- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static class
Voucher.InvalidVoucherKeyException
-
Nested classes/interfaces inherited from class de.hybris.platform.jalo.GenericItem
GenericItem.GenericItemImpl
-
Nested classes/interfaces inherited from class de.hybris.platform.jalo.c2l.LocalizableItem
LocalizableItem.LocalizableItemImpl
-
Nested classes/interfaces inherited from class de.hybris.platform.jalo.ExtensibleItem
ExtensibleItem.ExtensibleItemImpl
-
Nested classes/interfaces inherited from class de.hybris.platform.jalo.Item
Item.AttributeFilter, Item.AttributeMode, Item.CachedGetter, Item.CachedSetter, Item.ItemAttributeMap, Item.ItemConstraint, Item.ItemImpl, Item.JaloCachedComputationException
-
-
Field Summary
Fields Modifier and Type Field Description protected static int
CODELENGTH
protected static java.lang.String
DIVIDER
protected static int
LENGTH_CODE
-
Fields inherited from class de.hybris.platform.voucher.jalo.GeneratedVoucher
DEFAULT_INITIAL_ATTRIBUTES, DESCRIPTION, FREESHIPPING, INVALIDATIONS, INVALIDATIONSHANDLER, RESTRICTIONS, RESTRICTIONSHANDLER, VALUESTRING
-
Fields inherited from class de.hybris.platform.jalo.order.price.Discount
EXTERNAL_KEY, GLOBAL, VALUE_END, VALUE_START
-
Fields inherited from class de.hybris.platform.jalo.order.price.GeneratedDiscount
ABSOLUTE, CODE, CURRENCY, DISCOUNTSTRING, NAME, ORDERDISCOUNTRELATION_MARKMODIFIED, ORDERDISCOUNTRELATION_SRC_ORDERED, ORDERDISCOUNTRELATION_TGT_ORDERED, ORDERS, PRIORITY, VALUE
-
Fields inherited from class de.hybris.platform.jalo.c2l.LocalizableItem
LANGUAGE_FALLBACK_ENABLED
-
Fields inherited from class de.hybris.platform.jalo.Item
_CREATION_TIME_INTERNAL, _MODIFIED_TIME_INTERNAL, accessorLog, CREATION_TIME, DISABLE_ATTRIBUTE_CHECK, DISABLE_ITEMCHECK_BEFORE_REMOVABLE, EVEN, FEATURE_ACCESSMAP_QUALIFIER, HJMPTS, INITIAL_CREATION_FLAG, isJaloOnly, MODIFIED_TIME, NEGATIVE, NOT_FOUND, OWNER, PK, POSITIVE, SAVE_FROM_SERVICE_LAYER, staticTransientObjects, TYPE
-
Fields inherited from class de.hybris.platform.util.BridgeAbstraction
impl, tenant
-
-
Constructor Summary
Constructors Constructor Description Voucher()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description abstract boolean
checkVoucherCode(java.lang.String aVoucherCode)
Returns true if the specified voucher code is valid for this voucher.protected void
createAndStoreKey(SessionContext ctx, Discount item)
protected Item
createItem(SessionContext ctx, ComposedType type, Item.ItemAttributeMap allAttributes)
Has to be implemented for each concrete subtype of item.VoucherInvalidation
createVoucherInvalidation(java.lang.String aVoucherCode, Order anOrder)
java.lang.String
generateVoucherCode()
VoucherEntrySet
getApplicableEntries(AbstractOrder anOrder)
Returns all positions or parts of positions of the specified abstract order that are eligible for this voucher.protected VoucherValue
getApplicableValue(AbstractOrder anOrder)
Returns a VoucherValue object representing the partial value of the total of the specified abstract order that is eligible for this voucher.VoucherValue
getAppliedValue(AbstractOrder anOrder)
Returns a VoucherValue object representing the discount value of this voucher.protected ComposedType
getComposedType(java.lang.Class aClass)
DiscountValue
getDiscountValue(AbstractOrder anOrder)
Calculates avalue
which should be applied to the given order during (re)calculation.protected VoucherInvalidation
getInvalidation(java.lang.String aVoucherCode, Order anOrder)
Returns a voucher invalidation object if the specified voucher code was used in the specified order or null else.protected java.util.Collection<VoucherInvalidation>
getInvalidations(java.lang.String aVoucherCode)
Returns all voucher invalidations representing the usage of the specified voucher code.protected java.util.Collection<VoucherInvalidation>
getInvalidations(java.lang.String aVoucherCode, User anUser)
Returns all voucher invalidations representing the usage of the specified voucher code by the specified user.protected abstract int
getNextVoucherNumber(SessionContext ctx)
java.lang.String
getValueString(SessionContext ctx)
Convenience method.java.util.List<Restriction>
getViolatedRestrictions(AbstractOrder anOrder)
Returns all restrictions that are not fulfilled by the specified abstract order.java.util.List<Restriction>
getViolatedRestrictions(Product aProduct)
Returns all restrictions that are not fulfilled by the specified product.java.util.List<java.lang.String>
getViolationMessages(AbstractOrder anOrder)
java.util.List<java.lang.String>
getViolationMessages(Product aProduct)
protected int
getVoucherNumber(java.lang.String voucherCode)
VoucherValue
getVoucherValue(AbstractOrder anOrder)
protected static java.lang.String
insertDividers(java.lang.String voucherCode)
boolean
isApplicable(AbstractOrder anOrder)
Returns true if the specified abstract order is eligible for this voucher.boolean
isApplicable(Product aProduct)
Returns true if the specified product is eligible for this voucher.boolean
isReservable(java.lang.String aVoucherCode, AbstractOrder abstractOrder)
abstract boolean
isReservable(java.lang.String aVoucherCode, User user)
boolean
redeem(java.lang.String aVoucherCode, Cart aCart)
VoucherInvalidation
redeem(java.lang.String aVoucherCode, Order anOrder)
void
release(java.lang.String aVoucherCode, Cart aCart)
void
release(java.lang.String aVoucherCode, Order anOrder)
void
remove(SessionContext ctx)
Removes this item.protected static java.lang.String
removeDividers(java.lang.String voucherCode)
protected void
removeInvalidations(SessionContext ctx)
Upon voucher removal this method deletes allVoucherInvalidation
items which belong to this voucher.VoucherInvalidation
reserve(java.lang.String aVoucherCode, Order anOrder)
protected java.lang.String
threeByteSig(java.lang.String sigText)
-
Methods inherited from class de.hybris.platform.voucher.jalo.GeneratedVoucher
addToInvalidations, addToInvalidations, addToRestrictions, addToRestrictions, getAllDescription, getAllDescription, getDefaultAttributeModes, getDescription, getDescription, getInvalidations, getInvalidations, getRestrictions, getRestrictions, getValueString, isFreeShipping, isFreeShipping, isFreeShippingAsPrimitive, isFreeShippingAsPrimitive, removeFromInvalidations, removeFromInvalidations, removeFromRestrictions, removeFromRestrictions, setAllDescription, setAllDescription, setDescription, setDescription, setFreeShipping, setFreeShipping, setFreeShipping, setFreeShipping, setInvalidations, setInvalidations, setRestrictions, setRestrictions
-
Methods inherited from class de.hybris.platform.jalo.order.price.Discount
addOrder, getAllNames, getDiscountstring, getDiscountString, getPriority, getValue, isAbsolute, notifyOrderCalculated, notifyOrderRemoval, removeOrder, setAllNames, setCode
-
Methods inherited from class de.hybris.platform.jalo.order.price.GeneratedDiscount
addToOrders, addToOrders, getAllName, getAllName, getCode, getCode, getCurrency, getCurrency, getDiscountString, getName, getName, getOrders, getOrders, getOrdersCount, getOrdersCount, getPriority, getPriorityAsPrimitive, getPriorityAsPrimitive, getValue, getValueAsPrimitive, getValueAsPrimitive, isAbsolute, isAbsoluteAsPrimitive, isAbsoluteAsPrimitive, isGlobal, isGlobal, isGlobalAsPrimitive, isGlobalAsPrimitive, isMarkModifiedDisabled, removeFromOrders, removeFromOrders, setAllName, setAllName, setCode, setCurrency, setCurrency, setGlobal, setGlobal, setGlobal, setGlobal, setName, setName, setOrders, setOrders, setPriority, setPriority, setPriority, setPriority, setValue, setValue, setValue, setValue
-
Methods inherited from class de.hybris.platform.jalo.GenericItem
getImplementation, getInitialProperties, getNonInitialAttributes, getRelatedItems, setRelatedItems
-
Methods inherited from class de.hybris.platform.jalo.c2l.LocalizableItem
getAllLocalizedProperties, getAllLocalizedProperties, getAllLocalizedProperties, getAllLocalizedProperties, getAllValuesSessionContext, getLocalizedProperty, getLocalizedProperty, getLocalizedPropertyInternal, getLocalizedPropertyNames, getLocalizedPropertyNames, hasLanguage, isEmptyValue, isFallbackEnabled, removeLocalizedProperty, removeLocalizedProperty, setAllLocalizedProperties, setAllLocalizedProperties, setLocalizedProperty, setLocalizedProperty
-
Methods inherited from class de.hybris.platform.jalo.ExtensibleItem
createNonClassAccessor, getAllProperties, getAllProperties, getProperty, getProperty, getPropertyNames, getPropertyNames, removeProperty, removeProperty, setAllProperties, setAllProperties, setProperty, setProperty
-
Methods inherited from class de.hybris.platform.jalo.Item
addLinkedItems, addLinkedItems, addLinkedItems, addLinkedItems, addLinkedItems, addLinkedItems, addLinkedItems, addLinkedItems, addLinkedItems, addNegativePermission, addPermission, addPositivePermission, assureExtensionsLoaded, changeTypeAfterCreation, checkConstraint, checkItemPermission, checkMandatoryAttribute, checkMandatoryAttribute, checkPermission, checkPermission, checkRemovable, clearPermission, compareTo, ctx, doAfterRemove, doBeforeRemove, equals, getAccessorFor, getAllAttributes, getAllAttributes, getAllAttributes, getAllAttributes, getAllAttributesInternal, getAllLinkedItems, getAndCheckCacheBoundItem, getAttribute, getAttribute, getCacheBoundItem, getComposedType, getComposedTypePK, getCreationTime, getCurrentlyRemovingCount, getLinkedItems, getLinkedItems, getLinkedItems, getLinkedItems, getLinkedItems, getLinkedItems, getLinkedItems, getLinkedItemsCount, getLinkedItemsCount, getLinkedItemsCount, getModificationTime, getNegativePermissions, getOwner, getPermissionMap, getPermissions, getPersistenceVersion, getPK, getPositivePermissions, getRestrictedPrincipals, getSession, getSyncObject, getTenant, getTransientObject, getTransientObjectMap, hashCode, hasRegisteredClassAccessorFor, internal_registerClassAccessorFor, internal_registerNonClassAccessorFor, invalidateLocalCaches, isAlive, isCacheBound, isCurrentlyRemoving, isCurrentlyRemoving, isEmptyRelationValue, isInCreate, isInstanceOf, isItemCheckBeforeRemoveableDisabled, isRelationLocalizationFallbackEnabled, newInstance, notifyExtensionsAfterItemCreation, notifyExtensionsBeforeItemCreation, notifyItemRemoval, notifyManagerAboutItemRemoval, readResolve, registerAccessFor, registerAccessFor, registerJaloInvalidationListeners, remove, removeItemCollection, removeItemCollection, removeLinkedItems, removeLinkedItems, removeLinkedItems, removeLinkedItems, removeLinks, removePartOfItems, removePartOfItems, setAllAttributes, setAllAttributes, setAllAttributesInternal, setAllLinkedItems, setAllLinkedItems, setAllLinkedItems, setAllLinkedItems, setAttribute, setAttribute, setAttributeFromString, setAttributeFromString, setCacheBound, setComposedType, setCreationTime, setImplementation, setLinkedItems, setLinkedItems, setLinkedItems, setLinkedItems, setLinkedItems, setLinkedItems, setLinkedItems, setLinkedItems, setModificationTime, setNonInitialAttributes, setOwner, setPermissionsByMap, setTransientObject, setUseTA, toString, useTA, writeReplace
-
Methods inherited from class de.hybris.platform.util.BridgeAbstraction
setTenant
-
-
-
-
Field Detail
-
CODELENGTH
protected static final int CODELENGTH
- See Also:
- Constant Field Values
-
LENGTH_CODE
protected static final int LENGTH_CODE
- See Also:
- Constant Field Values
-
DIVIDER
protected static final java.lang.String DIVIDER
- See Also:
- Constant Field Values
-
-
Method Detail
-
createItem
protected Item createItem(SessionContext ctx, ComposedType type, Item.ItemAttributeMap allAttributes) throws JaloBusinessException
Description copied from class:Item
Has to be implemented for each concrete subtype of item. This method is responsible for creating a new item instance ( by calling managers, ejb homes, etc. ) duringComposedType.newInstance(Map)
.In case this method uses any of the attribute values during creation it is required to override
Item.getNonInitialAttributes(SessionContext, ItemAttributeMap)
too.
Sn example:public static final String MY_ATTRIBUTE = "someAttribute"; ... protected Item createItem(SessionContext ctx, ComposedType type, Map allAttributes ) throws JaloBusinessException { MyManager man = ... return man.createMyItem( (String)allAttributes.get(MY_ATTRIBUTE) ); // here MY_ATTRIBUTE is used for creation, so it must not be set again } protected Map getNonInitialAttributes( SessionContext ctx, Map allAttributes ) { // let superclass remove its own initial attributes Map ret = super.getNonInitialAttributes( ctx, allAttributes ); // remove MY_ATTRIBUTE from all attributes since if has already been set ret.remove(MY_ATTRIBUTE); return ret; }
- Overrides:
createItem
in classDiscount
- Parameters:
ctx
- the current session context which this item is created withintype
- the actual item type ( since subtypes may not provide a own jalo class this may be different from the type which this method was implemented for )- Returns:
- the new item instance
- Throws:
JaloBusinessException
- indicates an error during creation - any changes will be rollbacked
-
remove
public void remove(SessionContext ctx) throws ConsistencyCheckException
Description copied from class:Item
Removes this item.This method is using the following attributes of the given SessionContext:
CacheUsage Language StagingMethod n/a (this is a setter method) no, language doesn't matter for removal yes if called on a StageableItem, no otherwise
- Overrides:
remove
in classItem
- Parameters:
ctx
- A SessionContext object- Throws:
ConsistencyCheckException
- if this item could not be removed for some reason
-
removeInvalidations
protected void removeInvalidations(SessionContext ctx)
Upon voucher removal this method deletes allVoucherInvalidation
items which belong to this voucher.- Parameters:
ctx
-
-
createAndStoreKey
protected void createAndStoreKey(SessionContext ctx, Discount item)
-
createVoucherInvalidation
public VoucherInvalidation createVoucherInvalidation(java.lang.String aVoucherCode, Order anOrder)
-
checkVoucherCode
public abstract boolean checkVoucherCode(java.lang.String aVoucherCode)
Returns true if the specified voucher code is valid for this voucher.- Parameters:
aVoucherCode
- the voucher code to check validity of.- Returns:
- true if the specified voucher code is valid for this voucher, false else.
-
getApplicableEntries
public VoucherEntrySet getApplicableEntries(AbstractOrder anOrder)
Returns all positions or parts of positions of the specified abstract order that are eligible for this voucher.- Parameters:
anOrder
- the abstract order to get eligible positions of.- Returns:
- a VoucherEntrySet containing a VoucherEntry object for every position that is fully or partly eligible for this voucher.
-
getApplicableValue
protected VoucherValue getApplicableValue(AbstractOrder anOrder)
Returns a VoucherValue object representing the partial value of the total of the specified abstract order that is eligible for this voucher. Typically this would correspond to the sum of all totals of the applicable entries.- Parameters:
anOrder
- the abstract order to get applicable value of.- Returns:
- a VoucherValue representing the partial value of the total of the specified abstract order that is eligible for this voucher.
-
getAppliedValue
public VoucherValue getAppliedValue(AbstractOrder anOrder)
Returns a VoucherValue object representing the discount value of this voucher. If the voucher is applicable to the specified abstract order this value is calculated in consideration of the applicable value returned by getApplicableValue(AbstractOrder).- Parameters:
anOrder
- the abstract order to get discount value of.- Returns:
- a VoucherValue representing the discount value of this voucher.
-
getComposedType
protected ComposedType getComposedType(java.lang.Class aClass)
-
getDiscountValue
public DiscountValue getDiscountValue(AbstractOrder anOrder)
Description copied from class:Discount
Calculates avalue
which should be applied to the given order during (re)calculation.- Overrides:
getDiscountValue
in classDiscount
- Parameters:
anOrder
- the order which is currently being calculated
-
getInvalidation
protected VoucherInvalidation getInvalidation(java.lang.String aVoucherCode, Order anOrder)
Returns a voucher invalidation object if the specified voucher code was used in the specified order or null else.- Parameters:
aVoucherCode
- the voucher code to check.anOrder
- the order to check.- Returns:
- a VoucherInvalidation object representing the usage of a voucher code in an order.
-
getInvalidations
protected java.util.Collection<VoucherInvalidation> getInvalidations(java.lang.String aVoucherCode)
Returns all voucher invalidations representing the usage of the specified voucher code. If voucher code represents a serial voucher the returned collection should not contain more than one item since serial voucher codes can only be used once.- Parameters:
aVoucherCode
- the voucher code to check- Returns:
- a Collection containing none, one or more VoucherInvalidation objects.
-
getInvalidations
protected java.util.Collection<VoucherInvalidation> getInvalidations(java.lang.String aVoucherCode, User anUser)
Returns all voucher invalidations representing the usage of the specified voucher code by the specified user. If voucher code represents a serial voucher the returned collection should not contain more than one item since serial voucher codes can only be used once.- Parameters:
aVoucherCode
- the voucher code to checkanUser
- the user to check- Returns:
- a Collection containing none, one or more VoucherInvalidation objects.
-
getValueString
public java.lang.String getValueString(SessionContext ctx)
Convenience method. Returns a string representation of the value of this voucher, e.g. 5$ or 10%.- Specified by:
getValueString
in classGeneratedVoucher
- Parameters:
ctx
- the context of the actual session- Returns:
- a String representing the alue of this voucher.
-
getViolatedRestrictions
public java.util.List<Restriction> getViolatedRestrictions(AbstractOrder anOrder)
Returns all restrictions that are not fulfilled by the specified abstract order.- Parameters:
anOrder
- the abstract order to return violated restrictions for.- Returns:
- a List object containing all Restriction objects associated with this voucher that the specified abstract order does not fulfill.
-
getViolatedRestrictions
public java.util.List<Restriction> getViolatedRestrictions(Product aProduct)
Returns all restrictions that are not fulfilled by the specified product.- Parameters:
aProduct
- the product to return violated restrictions for.- Returns:
- a List object containing all Restriction objects associated with this voucher that the specified product does not fulfill.
-
getViolationMessages
public java.util.List<java.lang.String> getViolationMessages(AbstractOrder anOrder)
-
getViolationMessages
public java.util.List<java.lang.String> getViolationMessages(Product aProduct)
-
getVoucherValue
public VoucherValue getVoucherValue(AbstractOrder anOrder)
-
isApplicable
public boolean isApplicable(AbstractOrder anOrder)
Returns true if the specified abstract order is eligible for this voucher. More formally, returns true if the specified abstract order fulfills all restrictions associated with this voucher.- Parameters:
anOrder
- the abstract order to check whether it is eligible for this voucher.- Returns:
- true if the specified abstract order is eligible for this voucher, false else.
-
isApplicable
public boolean isApplicable(Product aProduct)
Returns true if the specified product is eligible for this voucher. More formally, returns true if the specified product fulfills all restrictions associated with this voucher.- Parameters:
aProduct
- the product to check whether it is eligible for this voucher.- Returns:
- true if the specified product is eligible for this voucher, false else.
-
isReservable
public abstract boolean isReservable(java.lang.String aVoucherCode, User user)
-
isReservable
public boolean isReservable(java.lang.String aVoucherCode, AbstractOrder abstractOrder)
-
redeem
public boolean redeem(java.lang.String aVoucherCode, Cart aCart) throws JaloPriceFactoryException
- Throws:
JaloPriceFactoryException
-
redeem
public VoucherInvalidation redeem(java.lang.String aVoucherCode, Order anOrder)
-
release
public void release(java.lang.String aVoucherCode, Order anOrder) throws ConsistencyCheckException
- Throws:
ConsistencyCheckException
-
release
public void release(java.lang.String aVoucherCode, Cart aCart) throws JaloPriceFactoryException
- Throws:
JaloPriceFactoryException
-
reserve
public VoucherInvalidation reserve(java.lang.String aVoucherCode, Order anOrder)
-
insertDividers
protected static java.lang.String insertDividers(java.lang.String voucherCode)
-
removeDividers
protected static java.lang.String removeDividers(java.lang.String voucherCode)
-
generateVoucherCode
public java.lang.String generateVoucherCode() throws java.security.NoSuchAlgorithmException
- Throws:
java.security.NoSuchAlgorithmException
-
getNextVoucherNumber
protected abstract int getNextVoucherNumber(SessionContext ctx)
-
getVoucherNumber
protected int getVoucherNumber(java.lang.String voucherCode) throws Voucher.InvalidVoucherKeyException
-
threeByteSig
protected java.lang.String threeByteSig(java.lang.String sigText) throws java.security.NoSuchAlgorithmException
- Throws:
java.security.NoSuchAlgorithmException
-
-