You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ofbiz.apache.org by Adam Heath <do...@brainfood.com> on 2010/04/06 18:59:50 UTC

shoppingcart serialization, not shoppinglist

Using a shoppinglist to save a cart is very poor form.  You'll not be
able to save shipgroup assignments, postal address per shipgroup,
shipping method, virtual product features, payment settings, promo
codes, tons of stuff.  We need to be able to restore *all* these things.

Saving the cart to an order is a possibility, but that will end up
causing a bunch of ecas(entity and service) to run.  Things like
inventory reservation, posting of payments, etc.

We(Ean and I) have talked, and the way we'd like to see this done, is
to invent a new order type, CART(or something), to go along with
SALES_ORDER and PURCHASE_ORDER.  We are very close to just having to
go and doing this.  Of course, this could cascade to lots of other
code, that explicitly checks the orderTypeId.

In an ideal world, there were be *no* separate serialization step.
The cart would *always* modify the database view of an order.  Always.
 The final step would just then be changing it's type from CART to
SALES_ORDER.  This second phase, however, it more difficult.

Re: shoppingcart serialization, not shoppinglist

Posted by Adam Heath <do...@brainfood.com>.
Adrian Crum wrote:
> Adam Heath wrote:
>> Using a shoppinglist to save a cart is very poor form.  You'll not be
>> able to save shipgroup assignments, postal address per shipgroup,
>> shipping method, virtual product features, payment settings, promo
>> codes, tons of stuff.  We need to be able to restore *all* these things.
> 
> What if the order is finalized after those promos expire or shipping
> rates/methods have changed?

how can the order be finalized?  It hasn't been submitted yet.  We
just want to the cart data into the order entities, as they are fully
expresive with everything nescessary.  Just keep the rest of ofbiz
from processing the order, maybe by using a PENDING status, or maybe
NEWBORN.

>> We(Ean and I) have talked, and the way we'd like to see this done, is
>> to invent a new order type, CART(or something), to go along with
>> SALES_ORDER and PURCHASE_ORDER.
> 
> We use the term "Quote" where I work.
> 
> 


Re: shoppingcart serialization, not shoppinglist

Posted by Adrian Crum <ad...@hlmksw.com>.
Adam Heath wrote:
> Using a shoppinglist to save a cart is very poor form.  You'll not be
> able to save shipgroup assignments, postal address per shipgroup,
> shipping method, virtual product features, payment settings, promo
> codes, tons of stuff.  We need to be able to restore *all* these things.

What if the order is finalized after those promos expire or shipping 
rates/methods have changed?

> We(Ean and I) have talked, and the way we'd like to see this done, is
> to invent a new order type, CART(or something), to go along with
> SALES_ORDER and PURCHASE_ORDER.

We use the term "Quote" where I work.



Re: shoppingcart serialization, not shoppinglist

Posted by Jacques Le Roux <ja...@les7arts.com>.
From: "Adam Heath" <do...@brainfood.com>
> Robert Morley wrote:
>> Introducing a new type "CART" as an OrderType does not feel right to
>> me.  It would seem having an Order of type "SalesOrder" and being able
>> to influence which functionality you wish to execute on that entity via
>> its status (or additional attribute) might be work considering.  We had
>> a very similar problem, we wanted to work with a persisted version of
>> the SalesOrder which was a more long term object from our perspective.
>>
>> What we have done is only apply payments in a single transaction as part
>> of completing the order (obviously not totally desirable) but this
>> avoided payment processing as part of saving / updating the order.  As
>> for inventory reservations, we actually wanted to reserve items as they
>> are added to the order so we left this but then built some logic around
>> releasing and re-reserving when items were updated/removed from the
>> order.  There were a number of gotchas in the set of services you can do
>> with an order -- for example, the service to load an order into a cart
>> for updating is really expecting to "clone" the order ... I believe it
>> nulls out the orderId on the shopping cart for example to cause a new
>> order to be created.
>>
>> Can you consider a product store configuration that would indicate when
>> reservations should occuring based on the state of the order (if this
>> does not already exist).  So when you are cobbling up your order
>> (ORDER_CREATED status) it may not be doing reservations, but when you
>> change it to ORDER_PROCESSING (or some similar state) it will then do
>> the reservations, payment perference processing, etc.
>
> Yeah, we toyed with a different status too.
>
> In essence, everything in an order has to always be modifiable, always
> during browse.  Then, at some special point, the user hits 'place
> order'.  A single boolean-flag change should occur at that point, and
> the order starts entering into the workflow.

This would be very helpful for the POS. It's a long awaited solution

Jacques

>>
>> On Apr 6, 2010, at 12:59 PM, Adam Heath wrote:
>>
>>> Using a shoppinglist to save a cart is very poor form.  You'll not be
>>> able to save shipgroup assignments, postal address per shipgroup,
>>> shipping method, virtual product features, payment settings, promo
>>> codes, tons of stuff.  We need to be able to restore *all* these things.
>>>
>>> Saving the cart to an order is a possibility, but that will end up
>>> causing a bunch of ecas(entity and service) to run.  Things like
>>> inventory reservation, posting of payments, etc.
>>>
>>> We(Ean and I) have talked, and the way we'd like to see this done, is
>>> to invent a new order type, CART(or something), to go along with
>>> SALES_ORDER and PURCHASE_ORDER.  We are very close to just having to
>>> go and doing this.  Of course, this could cascade to lots of other
>>> code, that explicitly checks the orderTypeId.
>>>
>>> In an ideal world, there were be *no* separate serialization step.
>>> The cart would *always* modify the database view of an order.  Always.
>>> The final step would just then be changing it's type from CART to
>>> SALES_ORDER.  This second phase, however, it more difficult.
>>
>> Robert Morley
>> Software Developer
>> Emforium Group Inc.
>> ALL-IN Software™
>> 519-772-6824 ext 220
>> rmorley@emforium.com
>>
>>
> 



Re: shoppingcart serialization, not shoppinglist

Posted by Adam Heath <do...@brainfood.com>.
Robert Morley wrote:
> Introducing a new type "CART" as an OrderType does not feel right to
> me.  It would seem having an Order of type "SalesOrder" and being able
> to influence which functionality you wish to execute on that entity via
> its status (or additional attribute) might be work considering.  We had
> a very similar problem, we wanted to work with a persisted version of
> the SalesOrder which was a more long term object from our perspective.
> 
> What we have done is only apply payments in a single transaction as part
> of completing the order (obviously not totally desirable) but this
> avoided payment processing as part of saving / updating the order.  As
> for inventory reservations, we actually wanted to reserve items as they
> are added to the order so we left this but then built some logic around
> releasing and re-reserving when items were updated/removed from the
> order.  There were a number of gotchas in the set of services you can do
> with an order -- for example, the service to load an order into a cart
> for updating is really expecting to "clone" the order ... I believe it
> nulls out the orderId on the shopping cart for example to cause a new
> order to be created.
> 
> Can you consider a product store configuration that would indicate when
> reservations should occuring based on the state of the order (if this
> does not already exist).  So when you are cobbling up your order
> (ORDER_CREATED status) it may not be doing reservations, but when you
> change it to ORDER_PROCESSING (or some similar state) it will then do
> the reservations, payment perference processing, etc.

Yeah, we toyed with a different status too.

In essence, everything in an order has to always be modifiable, always
during browse.  Then, at some special point, the user hits 'place
order'.  A single boolean-flag change should occur at that point, and
the order starts entering into the workflow.

> 
> On Apr 6, 2010, at 12:59 PM, Adam Heath wrote:
> 
>> Using a shoppinglist to save a cart is very poor form.  You'll not be
>> able to save shipgroup assignments, postal address per shipgroup,
>> shipping method, virtual product features, payment settings, promo
>> codes, tons of stuff.  We need to be able to restore *all* these things.
>>
>> Saving the cart to an order is a possibility, but that will end up
>> causing a bunch of ecas(entity and service) to run.  Things like
>> inventory reservation, posting of payments, etc.
>>
>> We(Ean and I) have talked, and the way we'd like to see this done, is
>> to invent a new order type, CART(or something), to go along with
>> SALES_ORDER and PURCHASE_ORDER.  We are very close to just having to
>> go and doing this.  Of course, this could cascade to lots of other
>> code, that explicitly checks the orderTypeId.
>>
>> In an ideal world, there were be *no* separate serialization step.
>> The cart would *always* modify the database view of an order.  Always.
>> The final step would just then be changing it's type from CART to
>> SALES_ORDER.  This second phase, however, it more difficult.
> 
> Robert Morley
> Software Developer
> Emforium Group Inc.
> ALL-IN Software™
> 519-772-6824 ext 220
> rmorley@emforium.com
> 
> 


Re: shoppingcart serialization, not shoppinglist

Posted by Robert Morley <rm...@emforium.com>.
Introducing a new type "CART" as an OrderType does not feel right to  
me.  It would seem having an Order of type "SalesOrder" and being able  
to influence which functionality you wish to execute on that entity  
via its status (or additional attribute) might be work considering.   
We had a very similar problem, we wanted to work with a persisted  
version of the SalesOrder which was a more long term object from our  
perspective.

What we have done is only apply payments in a single transaction as  
part of completing the order (obviously not totally desirable) but  
this avoided payment processing as part of saving / updating the  
order.  As for inventory reservations, we actually wanted to reserve  
items as they are added to the order so we left this but then built  
some logic around releasing and re-reserving when items were updated/ 
removed from the order.  There were a number of gotchas in the set of  
services you can do with an order -- for example, the service to load  
an order into a cart for updating is really expecting to "clone" the  
order ... I believe it nulls out the orderId on the shopping cart for  
example to cause a new order to be created.

Can you consider a product store configuration that would indicate  
when reservations should occuring based on the state of the order (if  
this does not already exist).  So when you are cobbling up your order  
(ORDER_CREATED status) it may not be doing reservations, but when you  
change it to ORDER_PROCESSING (or some similar state) it will then do  
the reservations, payment perference processing, etc.

On Apr 6, 2010, at 12:59 PM, Adam Heath wrote:

> Using a shoppinglist to save a cart is very poor form.  You'll not be
> able to save shipgroup assignments, postal address per shipgroup,
> shipping method, virtual product features, payment settings, promo
> codes, tons of stuff.  We need to be able to restore *all* these  
> things.
>
> Saving the cart to an order is a possibility, but that will end up
> causing a bunch of ecas(entity and service) to run.  Things like
> inventory reservation, posting of payments, etc.
>
> We(Ean and I) have talked, and the way we'd like to see this done, is
> to invent a new order type, CART(or something), to go along with
> SALES_ORDER and PURCHASE_ORDER.  We are very close to just having to
> go and doing this.  Of course, this could cascade to lots of other
> code, that explicitly checks the orderTypeId.
>
> In an ideal world, there were be *no* separate serialization step.
> The cart would *always* modify the database view of an order.  Always.
> The final step would just then be changing it's type from CART to
> SALES_ORDER.  This second phase, however, it more difficult.

Robert Morley
Software Developer
Emforium Group Inc.
ALL-IN Software™
519-772-6824 ext 220
rmorley@emforium.com