Thanks for the quick response Wolfgang. Appreciate it.
I have a question about this line in the rule you specified below
not Category( $sup == name, cart == $cart )
What should this name be ? How will this be determined at runtime ?
Also would you mind how these rules work . I tried to implement it but could not
make much progress.
On the other hand i tried with a slightly different approach. My use-case is the
Customer will have
an actual cart and a suggested cart when they are made available in the working
memory. Here's the rule : -
rule "Test 1"
when
Customer ($actual_cart : actual_cart, $reference_cart : reference_cart)
$item : CartItem () from $actual_cart
$category_limit : Category (category == $item.category, $limit : categoryLimit)
from $reference_cart
// This will accumulate as many times as the category exists in the actual_cart
$total : Double()
from accumulate ( CartItem (category == $item.category, $value :
actual_value) from $actual_cart,
sum ($value)
)
//if there's no row in the reference_Cart for specified category then $limit
should be set to zero.
eval ($total > $limit)
then
//record the category where the excess items has been purchased
end
There are some obvious issues with the approach that i have outlined above.
Wonder if there's some way to get around them.
Regards,
Manav
----- Original Message ----
From: Wolfgang Laun <wolfgang.laun(a)gmail.com>
To: Manav <manav7574(a)yahoo.com>; Rules Users List
<rules-users(a)lists.jboss.org>
Sent: Sat, January 8, 2011 3:09:12 PM
Subject: Re: [rules-users] Grouping and Aggregation in Drools
A Category combines a name, a reference to the cart, a sum of article
values and a percentage.
Any change in the cart triggers an update of all associated Category
facts. The rules are quite simple. The update of the cart (not shown
here) must be run with higher salience.
rule "first super"
$cart. Cart( $tot: total )
$art: Article( $cart: cart, $val: value, $sup. super, $sub: sub )
not Category( $sup == name, cart == $cart )
then
insert( new Category( $sup, $car, $val, $val/$tot ) );
end
rule "next super"
$cart. Cart( $tot: total )
$art: Article( $cart: cart, $val: value, $sup. super, $sub: sub )
$cat: Category( $sup == name, cart == $cart )
then
Double newVal =$cat.getValue() + $val;
modify( $cat ){
setValue( newVal ),
setPercent( newVal / tot )
}
end
Almost identical rules handle sub-categories.
For removal from the cart, you can use the same rule if the article
value is negative.
Make sure to avoid division by 0 if the last item is removed from the cart.
The reference cart is similar in structure, and the comparison rule is
generic for all categories.
-W
On 08/01/2011, Manav <manav7574(a)yahoo.com> wrote:
Hi,
I have a slightly tricky problem on my hand that i am trying to solve using
rules.
I am using version 5.1 of Drools.Appreciate if there are any suggestions /
pointers .
I have a customer who will have a shopping cart with various products. For
example
the shopping cart will be a list of products that belong to a certain
sub-category and
super category like
product-id= 'Noodles', sub-category='PackagedFood',
super-category='FMCG-Food',
%value of total=3%
product-id= 'Cookies',
sub-category='PackagedFood',super-category='FMCG-Food',
%value of total=6%
product-id= 'Pizza',
sub-category='ReadyToEat',super-category='FMCG-Food',
%value of total=5%
product-id= 'Burgers',
sub-category='ReadyToEat',super-category='FMCG-Food',
%value of total=7%
product-id= 'Shampoo',
sub-category='Toiletaries',super-category='FMCG-NonFood',
%value of total=4%
product-id= 'Conditioner',
sub-category='Toiletaries',super-category='FMCG-NonFood', %value of
total=8%
The customer will also have a suggested cart that serves as a reference at
the
sub-category and supercategory level. The reference will tell what level of
his
total purchase he can spend on the sub-category and super-category. The
reference will look something like
super-category='FMCG-Food', %value-suggested=20%
super-category='FMCG-NonFood', %value-suggested=15%
sub-category='PackagedFood',%value-suggested=10%
sub-category='ReadyToEat',%value-suggested=10%
sub-category='Toiletaries',%value-suggested=6%
Looking at this example the customer is going overboard in the FMCG-Food
super
category as the suggested
limit is 20% and the actual grouped at the supsercategory is 21% . Also he
is
crossing the limit at the
sub-category level for ReadyToEat (suggested is 10% vs actual is 12%) and
Toiletaries (suggested is 6% vs actual 12%)
My problem is how do i group the actual data at various supercategory
level,
sum the %value and then compare it with the suggested in the when clause.
If they cross the limit i will then have some action taken in the then
clause.
Similarly i will have to do the same at the sub-category level as well.
Regards,
Manav
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users