###############################################################################
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
###############################################################################

operator.equality.PPC_EQ=is
operator.equality.PPC_NEQ=is not
operator.equality.PPC_LT=invalid
operator.equality.PPC_LTE=invalid
operator.equality.PPC_GT=invalid
operator.equality.PPC_GTE=invalid

operator.quantity.PPC_EQ=exactly
operator.quantity.PPC_NEQ=anything except
operator.quantity.PPC_LT=less than
operator.quantity.PPC_LTE=less than
operator.quantity.PPC_GT=more than
operator.quantity.PPC_GTE=more than


condition.PPIP_ORDER_TOTAL=spend ${quantityOperator} $${condValue}
condition.PPIP_PRODUCT_TOTAL=buy ${quantityOperator} $${condValue} of qualifying products
condition.PPIP_PRODUCT_AMOUNT=for each $${condValue} or more of qualifying products
condition.PPIP_PRODUCT_QUANT=buy ${condValue} of qualifying products
condition.PPIP_NEW_ACCT=if your account is ${quantityOperator} ${condValue} days old
condition.PPIP_PARTY_ID=if your account ID ${equalityOperator} ${condValue}
condition.PPIP_PARTY_GRP_MEM=if your account ${equalityOperator} part of the group with ID ${condValue}
condition.PPIP_PARTY_GRP_MEM=if your account ${equalityOperator} in the classification with ID ${condValue}
condition.PPIP_ROLE_TYPE=if your account ${equalityOperator} in the role with ID ${condValue}

action.PROMO_GWP=get a free ${productName} [${productId}]
action.PROMO_FREE_SHIPPING=get free shipping of type ${productId} on carrier ${partyId}
action.PROMO_PROD_DISC=get ${quantity} at ${amount}% discount
action.PROMO_PROD_AMDISC=get ${quantity} at $${amount} off
action.PROMO_PROD_PRICE=get ${quantity} for $${amount}
action.PROMO_ORDER_PERCENT=get ${amount}% off your order
action.PROMO_ORDER_AMOUNT=get $${amount} off your order
