Felipe Marcelo
Felipe Marcelo

Reputation: 73

How to create a date range as a condition of a promotion in hybris?

is it possible to create a date condition for promotion in hybris?

I am trying to do this implementation. my first problem is how to map the parameter value

<bean id="dateRuleParameterValueMapperDefinition" class="de.hybris.platform.ruleengineservices.rule.strategies.impl.RuleParameterValueMapperDefinition">
    <property name="mapper" ref="dateRuleParameterValueMapper" />
    <property name="type" value="java.util.Date" />
</bean>

in this mapping, I have an exception that the type is not supported (Caused by: de.hybris.platform.ruleengineservices.rule.strategies.RuleParameterValueMapperException:)

if so, can I resolve this error .. is it possible to create a date condition in the RuleConditionTranslator?

hybris version: 6.5

Upvotes: 1

Views: 872

Answers (2)

Anurag Sharma
Anurag Sharma

Reputation: 36

If you want to add any new RuleParameterValueMapperDefinition, you have to implement 'RuleParameterValueMapper' and override 'toString' and 'fromString' methods in your mapper implementation.

public class MediaTypeRuleParameterValueMapper implements RuleParameterValueMapper<MediaModel>
{
  @Resource
  MediaService mediaService;

  @Override
  public String toString(final MediaModel mediaModel)
  {
      Preconditions.checkArgument(Objects.nonNull(mediaModel), "mediaModel must not be null!");
      return mediaModel.getCode();
  }

  @Override
  public MediaModel fromString(final String mediaCode)
  {
      try
      {
          return mediaService.getMedia(mediaCode);
      }
      catch (UnknownIdentifierException e)
      {
          e.message()
      }
      return null;
  }
}

Now create a custom mapper definition (RuleParameterValueMapperDefinition)

<bean id="mediaTypeRuleParameterValueMapper" class="com.hybris.MediaTypeRuleParameterValueMapper"/>

<bean id="mediaTypeRuleParameterValueMapperDefinition" class="de.hybris.platform.ruleengineservices.rule.strategies.impl.RuleParameterValueMapperDefinition">
    <property name="mapper" ref="mediaTypeRuleParameterValueMapper"/>
    <property name="type" value="ItemType(Media)"/>
</bean>

Now you are ready to use RuleConditionDefinitionParameter.type=ItemType(Media)

Upvotes: 1

Neil Hubert-Price
Neil Hubert-Price

Reputation: 996

I don't believe that you need to map a date in that way, it should be treated the same as a String or Integer. So for reference look at the way any of the String or Integer parameters are handled.

My basis for saying this is the following from ruleengineservices-spring-rule.xml:

<alias name="defaultRuleParameterSupportedTypes" alias="ruleParameterSupportedTypes" />
<util:set id="defaultRuleParameterSupportedTypes" value-type="java.lang.String">
  <value>java.lang.Boolean</value>
  <value>java.lang.Character</value>
  <value>java.lang.String</value>
  <value>java.lang.Byte</value>
  <value>java.lang.Short</value>
  <value>java.lang.Integer</value>
  <value>java.lang.Long</value>
  <value>java.lang.Float</value>
  <value>java.lang.Double</value>
  <value>java.math.BigInteger</value>
  <value>java.math.BigDecimal</value>
  <value>java.util.Date</value>
  <value>java.lang.Enum</value>
  <value>java.util.List</value>
  <value>java.util.Map</value>
</util:set>

Upvotes: 0

Related Questions