c# wpf document viewer pdf : Delete page from pdf document application control utility azure web page winforms visual studio ATGCommProgGuide20-part1936

ATG  C om mer ce P ro g ramm in g   Gui d e 
18 3  
11  -  C o m merce  P rici n g  C al cu lat o rs  
μ
Maintain an audit trail of the changes made to the price using the 
PricingAdjustments
property in the 
AmountInfo
price object. 
Mark items that have been discounted and therefore may not be eligible for additional 
discounts. 
Maintain 
DetailedItemPriceInfo
objects. 
The 
HalfPlusOneDiscountCalculator
leverages all the above functionality from the 
ItemDiscountCalculator
. The only method it overrides is the 
findAdjustedPrice
method, which 
modifies an input 
DetailedItemPriceInfo
to be the right amount. In this case, the class modifies the 
price of the detail to half its current price plus one. 
Using a New Pricing Calculator 
After you have created a new calculator, you must associate it with its corresponding pricing engine. You 
can do this in one of the following ways: 
Add the calculator to an engine’s list of pre- or post-calculators. The configuration 
invokes the calculator on the price of every item that passes through the engine. 
Add the calculator to the 
PricingEngineService CalculatorType
map, along 
with the type of calculation it provides. 
Extending Calculators 
You can extend any of the pricing calculators to add functionality, if that suits your needs more than 
implementing one of the provided interfaces. As an example this section describes the order of calls in 
ItemDiscountCalculator
; other calculators may vary: 
1.
The 
priceItems
method changes the price of input items. It first calls 
findQualifyingItems
to get items whose prices need changing. It then calls 
priceQualifyingItems
to change their price. 
2.
The 
findQualifyingItems
method selects items to be discounted. It bases item 
selection on attributes of the input environment as represented by the method’s 
parameters. 
3.
The 
priceQualifyingItems
method modifies the prices of an input collection of 
items. It also verifies that the items’ audit trail is maintained. 
priceQualifyingItems
calls 
priceQualifyingItem
once for each input item to be priced. 
4.
The 
priceQualifyingItem
method modifies the price of the input item. It also 
verifies that the item’s audit trail is maintained. 
priceQualifyingItem
calls each 
priceDetailedItemPriceInfo
, discounting details until the total number of items 
to discount has been reached. 
5.
The 
priceDetailedItemPriceInfo
method modifies the price of a 
detailedItemPriceInfo
. It maintains the audit trail and marks the details that have 
acted as qualifiers. It calls 
findAdjustedPrice
to find the new price of the details. 
6.
The 
findAdjustedPrice
method produces a number that is the new price of a 
DetailedItemPriceInfo
. It examines the existing price and the input parameters, 
and it returns the new price. 
Delete page from pdf document - application SDK cloud:C# PDF Page Extract Library: copy, paste, cut PDF pages in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Easy to Use C# Code to Extract PDF Pages, Copy Pages from One PDF File and Paste into Others
www.rasteredge.com
Delete page from pdf document - application SDK cloud:VB.NET PDF Page Extract Library: copy, paste, cut PDF pages in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Detailed VB.NET Guide for Extracting Pages from Microsoft PDF Doc
www.rasteredge.com
ATG  C om merce  P ro gra mm in g  G ui d e 
18 4  
11  -  C om merce  P ri cin g   Ca lcu l at ors  
You can override any of these methods to provide new functionality while leveraging the existing code. 
Override 
findQualifyingItems
to change the way the calculator finds the items to 
discount. 
Override 
priceQualifyingItems
to change how a group of 
ItemPriceInfos
are 
adjusted. 
Override 
priceQualifyingItem
to change how an individual 
ItemPriceInfo
is 
adjusted. 
Override 
priceDetailedItemPriceInfo
to change how a 
DetailedItemPriceInfo
within an 
ItemPriceInfo
is adjusted. 
Override 
findAdjustedPrice
to change how the calculator determines new prices. 
application SDK cloud:VB.NET PDF Page Delete Library: remove PDF pages in vb.net, ASP.
VB.NET PDF - How to Delete PDF Document Page in VB.NET. This page is aimed to help you learn how to delete page from your PDF document in VB.NET application.
www.rasteredge.com
application SDK cloud:C# PDF Page Delete Library: remove PDF pages in C#.net, ASP.NET
C#.NET PDF Library - Delete PDF Document Page in C#.NET. Provide C# Users in C#.NET. How to delete a single page from a PDF document.
www.rasteredge.com
ATG  C om mer ce P ro g ramm in g   Gui d e 
18 5  
12  -  Q u ali f ier  C l as s 
12
Qualifier Class 
The 
atg.commerce.pricing.Qualifier
class is a helper class for discount calculators. An instance of 
the 
Qualifier
class is sometimes referred to as a qualifier service, because 
Qualifier
extends 
atg.nucleus.GenericService
This chapter contains the following sections: 
Qualifier Class Overview 
Evaluating Qualifiers Example 
QualifiedItem Class 
Extending the Qualifier Class 
Qualifier Class Overview 
Each pricing engine calls a corresponding helper method in the 
Qualifier
class to determine the 
objects to which it should apply a discount. The 
Qualifier
determines whether anything qualifies for 
the discount and then figures out which pieces should receive the discount. 
The 
Qualifier
determines which things should change and how they should be discounted; it does not 
modify the actual prices. The pricing engine passes the parameters that make up its pricing context to the 
qualifier, and goes through the result set returned by the qualifier, calling the correct calculator to 
discount each element as appropriate. 
ItemPricingEngine
uses the qualifier’s 
findQualifyingItems
method, which 
returns a Collection of 
QualifiedItems
. Each 
QualifiedItem
maps a 
DetailedItemPriceInfo
to the list of Ranges that qualified for the discount. The 
CommerceItem
containing these 
DetailedItemPriceInfos
is also stored. For more 
information, see the QualifiedItem Class
OrderPricingEngine
uses the qualifier’s 
findQualifyingOrder
method, which 
returns a 
MatchingObject
identifying the 
Order
to discount. 
ShippingPricingEngine
uses the qualifier’s 
findQualifyingShipping
method, 
which returns a 
MatchingObject
object identifying the 
ShippingGroup
to discount. 
Each method determines its result set by comparing the PMDL rule of a given promotion to the input 
item or items. 
application SDK cloud:C# PDF Page Insert Library: insert pages into PDF file in C#.net
page processing functions, such as how to merge PDF document files by C# code, how to rotate PDF document page, how to delete PDF page using C# .NET, how to
www.rasteredge.com
application SDK cloud:C# PDF File & Page Process Library SDK for C#.net, ASP.NET, MVC
Page Process. File: Merge, Append PDF Files. File: Split PDF Document. File: Compress PDF. Page: Create Thumbnails. Page: Insert PDF Pages. Page: Delete Existing
www.rasteredge.com
ATG  C om merce  P ro gra mm in g  G ui d e 
18 6  
12  -  Q ual i fi er  C las s  
The 
doFilters()
method evaluates items in the qualifier and target rules. It takes an array of filter 
components, which act to disqualify items from the qualifier or target; see the Qualifier Properties section 
for descriptions of the filters. 
Qualifier Properties 
The 
Qualifier
class contains the following properties: 
PMDLCache
—The cache that maps pricing model 
RepositoryItems
to their parsed 
PMDL bean representations. 
pricingModelProperties
—A list of the names of the properties of a pricing model 
RepositoryItem
The following 
Qualifier
class properties determine the objects that the 
evaluateQualifier
method 
can use to evaluate the qualifier element of a PMDL rule. (For more information, see Replacing the Way a 
PMDL Rule Is Evaluated.) 
filterForQualifierNegativePrices
—Determines whether items with negative 
prices can act as qualifiers. If this property is set to 
true
(the default value), negative 
prices cannot act as qualifiers. 
filterForQualifierZeroPrices
—Determines whether items with zero prices can 
act as qualifiers. If this property is set to 
true
(the default value), zero prices cannot act 
as qualifiers. 
filterForQualifierDiscountedByCurrentDiscountId
—Determines whether 
items discounted by the current discount can act as qualifiers. If this property is set to 
true
(the default value), items discounted by the current discount cannot act as 
qualifiers. 
filterForQualifierDiscountedByAnyDiscountId
—Determines whether items 
discounted by any discount can act as qualifiers. If this property is set to 
true
(the 
default value), it masks the 
filterForQualifierDiscountedByCurrentDiscountId
property. 
The following example demonstrates how the 
filterForQualifierDiscountedByAnyDiscountId
works. In this example, the 
following three promotions are being applied to an order: 
Promotion #1: Buy 1 orange, get 1 apple for $1 
Promotion #2: Buy 1 apple, get 1 banana for $1 
Promotion #3: Buy 1 banana, get 1 plum for $1 
The order in this example is for one orange, one apple, one banana, and one plum. The 
value of the 
filterQualifierDiscountedByAnyDiscountId
changes the way the 
promotions are applied in the following ways: 
If 
filterQualifierDiscountedByAnyDiscountId
is false, then the orange is 
list price, discounting the apple, banana and plum to $1 each. 
If 
filterQualifierDiscountedByAnyDiscountId
is true, then the orange is 
list price, discounting the apple to $1, and the banana is list price (since the 
apple was discounted), discounting the plum to $1. 
application SDK cloud:VB.NET PDF Page Insert Library: insert pages into PDF file in vb.
Easy to Use VB.NET APIs to Add a New Blank Page to PDF Document in VB.NET Program. DLLs for Adding Page into PDF Document in VB.NET Class.
www.rasteredge.com
application SDK cloud:VB.NET PDF File & Page Process Library SDK for vb.net, ASP.NET
document. If you find certain page in your PDF document is unnecessary, you may want to delete this page directly. Moreover, when
www.rasteredge.com
ATG  C om mer ce P ro g ramm in g   Gui d e 
18 7  
12  -  Q u ali f ier  C l as s 
filterForQualifierOnSale
—Indicates whether items that were priced with a sale 
price should be allowed to act as qualifiers. This property is set to False by default. 
The following 
Qualifier
class properties determine the items that the 
evaluateTarget
method can 
use to evaluate the target element of a PMDL rule. (For more information, see Replacing the Way a PMDL 
Rule Is Evaluated.) 
filterForTargetNegativePrices
—Determines whether items with negative 
prices can act as qualifiers. The default value is 
true
filterForTargetZeroPrices
—Determines whether items with zero prices can act 
as qualifiers. The default value is 
true
filterForTargetDiscountedByCurrentDiscountId
—Determines whether items 
that have been discounted by the current discount can receive the discount again. The 
default value is 
true
filterForTargetDiscountedByAnyDiscountId
—Determines whether items that 
have been discounted by any discount can receive the discount again. The default 
value is 
true
filterForTargetActedAsQualifierForAnyDiscount
—Determines whether 
items that have acted as a qualifier for any discount can receive the current discount. 
The default value is 
true
filterForTargetOnSale
—Indicates whether items that were priced with a sale 
price should be allowed to receive the current discount. The default value is 
false
filterForTargetPriceLessThanOrEqualToPromotionPrice
—Determines 
whether items with prices that are already less than the price that would be granted 
by a “fixed price” promotion should receive the promotion. The default value is 
true
Overriding Qualifier Filters 
As described in the Qualifier Properties section, the 
Qualifer
class includes a number of Boolean filters 
that determine how the 
Qualifier
treats items it is evaluating. You may want to use a standard set of 
filters for most situations, but have a few special cases in which you want to override the normal filtering. 
In order to do this, create an additional qualifier service component and configure the filter flags as 
necessary for your special case. Then set the 
qualifierService
property of the promotion repository 
item to the new qualifier component. The 
qualifierService
property is an expert property that is not 
available through ATG Merchandising, but can be set manually or through the ACC. The 
qualifierService
property is null by default; if set, it overrides the pricing engine’s determination of 
which qualifier to apply. 
Some examples of circumstances in which you may want to override filters are: 
You want an item that is the target of an item promotion to be eligible to act as a 
qualifying item for a shipping promotion; set 
filterForQualifierDiscountedByAnyDiscountId
to false. 
You want an item to simultaneously be the qualifier and the target, for instance “Buy 4 
shirts for $20.” The promotion should have the following structure: 
Discount type = fixed price 
application SDK cloud:C# PDF metadata Library: add, remove, update PDF metadata in C#.
C#.NET PDF SDK - Edit PDF Document Metadata in C#.NET. Allow C# Developers to Read, Add, Edit, Update and Delete PDF Metadata in .NET Project.
www.rasteredge.com
application SDK cloud:VB.NET PDF delete text library: delete, remove text from PDF file
187.0F) Dim aChar As PDFTextCharacter = textMgr.SelectChar(page, cursor) ' delete a selected As String = Program.RootPath + "\\" output.pdf" doc.Save
www.rasteredge.com
ATG  C om merce  P ro gra mm in g  G ui d e 
18 8  
12  -  Q ual i fi er  C las s  
Adjuster = $2.50 
Qualifier=‘For next 4 product whose category is shirt’ 
Target=‘up to 4 product whose category is shirt’ 
In addition, set the 
filterForTargetActedAsQualifierForAnyDiscount
property 
to 
false
Default Qualifier Service 
The 
QualifierService
component is a preconfigured instance of the helper class 
atg.commerce.pricing.Qualifier
. The default ATG Commerce discount calculators use this 
component to determine the objects to which they should apply their discounts. 
The following table describes the properties included in 
QualifierService
Property 
Description 
pricingModelProperties 
Specifies a bean that hosts the names of all of the properties of a 
pricing model repository item. 
PMDLCache 
An instance of 
atg.service.cache.Cache
that maps a Pricing 
Model to its parsed Java form. 
In a production environment, caching increases site performance by 
allowing ATG Commerce to evaluate pricing models more quickly. A 
setting of -1 indicates an unlimited cache size. 
In a development environment, however, you may want to disable 
caching for pricing models so that changes you make to PMDL rules 
appear on your development site immediately, without requiring you 
to flush the cache. To disable caching for pricing models, locate the 
maximumCacheEntries
property in the appropriate instance of 
atg.service.cache.Cache
and set the property to 0. 
You can view and modify the 
QualifierService
component in the ATG Control Center. The component 
is located in 
/atg/commerce/pricing/QualifierService
Evaluating Qualifiers Example 
This section describes how qualifiers are evaluated using a “buy 1 get 1 free” example. This example uses 
a promotion of type “Item Discount” where the fixed price is $0.00 and the PMDL rule is: 
Condition: 
When order contains at least 1 (product named Shirt) 
Apply discount to: 
up to 1 (product named Hat) 
ATG  C om mer ce P ro g ramm in g   Gui d e 
18 9  
12  -  Q u ali f ier  C l as s 
The 
discount-structure
in the PMDL would contain the following information: 
<calculator-type="standard" discount-type="fixed-price" 
adjuster="0"> 
If the list price of the shirt is $10.00 and the list price of the hat of $5.00, then first, the 
ItemPricingEngine
iterates through each of the pre-calculators: 
The 
ItemListPriceCalculator
looks up the list price of each item in the order. 
Based on the list prices, the shirt is priced at $10.00 and the hat will be priced at $5.00. 
This will update the 
ItemPriceInfo
for both the 
CommerceItem
objects in the order. 
The 
ItemSalePriceCalculator
looks up the sale price of each item in the order. 
Because neither item is on sale, this has no effect on the price. 
Next, The 
ItemPricingEngine
iterates through each of the promotions. In this example, the “Buy 1 shirt, 
get 1 hat free” promotion is the only promotion. 
The pricing engine calls 
findQualifyingItems()
and uses the returned 
calculator-type
to look up 
the 
ItemDisCountCalculator
The 
findQualifyingItems
method performs the following functions (as well as some standard 
parameter verification and error checking): 
wrapCommerceItems
- creates 
FilteredCommerceItems
for each item 
filterItemsForQualifier
- runs through the list of the qualifier filters. In this 
example, none of the qualifiers apply. 
evaluateQualifier
- Three arguments are passed to 
evaluateQualifier
PricingContext
contains the following information, with specifics for this example 
in parentheses: 
pricingModel
—Current promotion (Buy 1 shirt, get 1 hat free) 
profile
—Current profile object 
locale
—User’s locale 
order
—The order being priced 
orderPriceInfo
—The order’s price (not yet calculated for this order) 
shippingGroup
—The 
ShippingGroup
being priced (null, as what is being 
priced is not a shipping group) 
shippingPriceInfo
—Costs associated with the shipping group being priced 
(null, as what is being priced is not a shipping group) 
FilterQualfiedItems
represents a List of 
FilteredCommerceItem
objects (Shirt 
and Hat) and their corresponding 
ItemPriceInfo
objects ($10 and $5). 
ExtraParametersMap
is not needed in this example, but can be used to pass 
additional parameters as needed. 
In this example, the 
evaluateQualifier
method returns 
Boolean.TRUE
. The reason 
this is a boolean value is because this is a when rule. There are three choices for the 
ATG  C om merce  P ro gra mm in g  G ui d e 
19 0  
12  -  Q ual i fi er  C las s  
condition: always, when, and for. In the case of always and when, 
evaluateQualifier
returns a boolean value. 
Note: If the rule were a for rule, then 
evaluateQualifier
would return the list of 
items that triggered the promotion. If the promotion was “For next 1 (product named 
shirt)” then this method would return a List containing one 
MatchingObject
that 
wrapped the “shirt” 
CommerceItem
and had quantity 1. 
Because the promotion is valid, we must determine which items will receive the 
discount. The first step is to filter the items for the target. (
filterItemsForTarget
). 
Note: Because this promotion involves a when rule, we can immediately evaluate the 
target. If this was a for rule, we would first determine the range within which 
DetailedItemPriceInfo
(s) acted as the qualifier. 
Call 
evaluateTarget
. Assuming none of the target filters applied, the list of 
arguments here will be the same as the list passed to 
evaluteQualifier
. In this 
example, one item should be discounted so this method will return a List with one 
item in it. The item will be a 
MatchingObject
with the following property values: 
matchingObject
property is the hat 
CommerceItem
quantity
property is 1 
discounts
property contains a List of 
DiscountStructure
objects, 
representing the 
discount-structure
element from the PMDL. 
Next, the pricing engine gets the 
calculator-type
from the 
DiscountStructure
object, looks up the 
calculatorTypeCalculators
map to get the calculator component, puts the 
QualifiedItem
objects 
into the extra parameters map, and then calls the calculator. 
Finally, the calculator’s 
findQualifyingItems
method pulls the 
QualifiedItem
objects out of the 
map. The 
getAdjuster
and 
getDiscountType
methods get the 
DiscountStructure
out of the map. 
The calculator now knows which items should receive the discount, so it calls 
priceQualifyingItems
This method goes through each detail of each item that qualifies (there is only one in our case) and 
updates the price. 
QualifiedItem Class 
The 
atg.commerce.pricing.QualifiedItem
class holds information about a 
CommerceItem
that 
qualifies for a discount. Each 
CommerceItem
is paired with a 
DiscountStructure
object, which contains 
discount information to apply. 
Each 
QualifiedItem
contains a single 
DiscountStructure
to be applied to a quantity of a given 
CommerceItem
. If multiple discounts within a single promotion apply to a single 
CommerceItem
, multiple 
QualifiedItem
objects are returned. For example, a single item might qualify for two discounts within a 
single promotion, one for $10 off and a second for an additional $5 off. In that case, two 
QualfiedItem
objects are returned. (Note that this is a highly unusual case; the default behavior is to prevent a single 
item from receiving multiple discounts.) 
ATG  C om mer ce P ro g ramm in g   Gui d e 
19 1  
12  -  Q u ali f ier  C l as s 
Unlike a 
QualifiedItem
, a 
MatchingObject
can contain multiple discount structures. The usual 
purpose of PMDL containing multiple discount structures is to discount one set of items by one discount 
and a different set of items by the second discount. Note that the ATG Merchandising promotions user 
interface does not support assigning multiple discount structures in a single promotion; however, you can 
create custom templates that include this ability. 
QualifiedItems
are returned from the 
Qualifier.findQualifyingItems
method. The 
QualifiedItem
class contains the following properties: 
item
—The 
CommerceItem
that qualified for a discount. 
qualifyingDetailsMap
—A map keyed by the 
DetailedItemPriceInfo
objects 
contained in the 
ItemPriceInfo
object (which, in turn, is contained in the 
CommerceItem)
. The value for each 
DetailedItemPriceInfo
object is a List of 
Range objects, which specifies the objects matched. 
For example, if a commerce item represents two T-shirts and has a single 
DetailedItemPriceInfo
and a promotion applies to one of those T-shirts, the map 
would have one entry. The key would be the 
DetailedItemPriceInfo
and the value 
is a 
List
with a single 
Range
entry. The 
Range
in this case is [0,0]. If both T-shirts 
qualified, the 
Range
would be [0,1]. 
FilteredCommerceItem 
The 
FilteredCommerceItem
object represents a 
CommerceItem
that is currently participating in a rules 
evaluation in the Qualifier. This object holds a reference to the object it is wrapping. 
Item
points to the 
wrapped 
CommerceItem
. All 
CommerceItem
methods except 
quantity
call through to the wrapped 
item. 
atg.commerce.pricing.FilteredCommerceItem
adds four properties that are used to determine if 
and how the wrapped 
CommerceItem
should participate in pricing: 
quantityAsQualifierDetails
—A map of 
DetailedItemPriceInfo
objects to 
Range
objects, which state the units of the details that have acted as a qualifier for 
something. 
detailsRangesValidForTarget
—A map of 
DetailedItemPriceInfo
objects to 
the number of details that are available for discounting based on the exclusion rules 
defined by various properties in the 
Qualifier
priceQuote
—The value of the current 
ItemPriceInfo
usePriceQuote
—A Boolean set to 
true
after the PMDL has been evaluated. When 
true, calls to 
getPriceInfo
return the 
priceQuote
, ensuring that the evaluation 
process uses the most current price information. 
Extending the Qualifier Class 
This section describes the following ways of extending the 
Qualifier
class: 
ATG  C om merce  P ro gra mm in g  G ui d e 
19 2  
12  -  Q ual i fi er  C las s  
Adding New Criteria to the Filter Methods 
Replacing the Way a PMDL Rule Is Evaluated 
Replacing the Way the Qualifier Determines the Result Set 
Accessing FilteredCommerceItems 
Adding New Criteria to the Filter Methods 
The existing 
Qualifier
doFilters()
method evaluates items in the qualifier and target rules. The 
method uses the 
Qualifier
service’s filtering methods to disqualify items before comparing them to a 
promotion’s 
PMDLRule
The filtering process prevents problems with pricing rules. For example, in the promotion “buy one item, 
get one item free,” most retailers exclude the item that acts as a qualifier from receiving the discount. This 
prevents a customer from buying just one item and getting that one item free; the customer must put 
two items in the cart in order to get the discount. 
The following example shows how the 
filterItemsForQualifier
and 
filterOrdersForTarget
methods work. This example uses the rule “for next 1 item that is blue, discount up to 1 item that is 
green.” 
The 
filterItemsForQualifier
method is invoked first. By default, this method uses the following 
criteria to remove items from the environment. This prevents the items from helping to satisfy the 
constraints specified in the “qualifier” portion of the input PMDL rule: 
If an item’s price is zero or negative, the item is removed. 
If an item is on sale, it is removed. 
If an item has already acted as a qualifier, the item is removed. 
If an item has already received the discount currently being evaluated, the item is 
removed. 
After items are filtered out of the environment, the 
evaluateQualifier
method is invoked. 
evaluateQualifier
selects one blue item that acts as a qualifier from the environment. (For more 
information on these methods, refer to the next section, Replacing the Way a PMDL Rule Is Evaluated.) 
If the qualifier is satisfied, the system evaluates the offer, if there is one, to determine which objects 
among all those available should receive the discount that is enabled by the one blue item. ATG 
Commerce currently performs this selection for 
CommerceItems
only. 
Before the target element is evaluated, the 
filterItemsForTarget
method must be invoked. The 
filterItemsForTarget
method uses the following criteria to remove items from the environment 
against which the target is compared: 
If the item price is zero, negative, or less than the promotion price 
If the item is on sale 
If an item already acted as a qualifier 
Documents you may be interested
Documents you may be interested