Index: openacs-4/packages/dotlrn-ecommerce/www/ecommerce/prerequisite-confirm.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-ecommerce/www/ecommerce/prerequisite-confirm.adp,v
diff -u -r1.3 -r1.4
--- openacs-4/packages/dotlrn-ecommerce/www/ecommerce/prerequisite-confirm.adp	16 Jul 2005 12:51:07 -0000	1.3
+++ openacs-4/packages/dotlrn-ecommerce/www/ecommerce/prerequisite-confirm.adp	25 Jul 2005 18:19:21 -0000	1.4
@@ -16,4 +16,4 @@
   <a href="@shopping_cart_add_url;noquote@" class="button">#dotlrn-ecommerce.Continue#</a> &nbsp;&nbsp;&nbsp;
   </if>
   <a href="@request_url;noquote@" class="button">#dotlrn-ecommerce.lt_Hold_slot_and_wait_fo#</a> &nbsp;&nbsp;&nbsp;
-  <a href="@return_url;noquote@" class="button">#dotlrn-ecommerce.Cancel#</a>
+  <a href="@cancel_url;noquote@" class="button">#dotlrn-ecommerce.Cancel#</a>
Index: openacs-4/packages/dotlrn-ecommerce/www/ecommerce/prerequisite-confirm.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-ecommerce/www/ecommerce/prerequisite-confirm.tcl,v
diff -u -r1.4 -r1.5
--- openacs-4/packages/dotlrn-ecommerce/www/ecommerce/prerequisite-confirm.tcl	16 Jul 2005 12:51:07 -0000	1.4
+++ openacs-4/packages/dotlrn-ecommerce/www/ecommerce/prerequisite-confirm.tcl	25 Jul 2005 18:19:21 -0000	1.5
@@ -14,6 +14,7 @@
     user_id:integer,notnull
     {participant_id:integer 0}
     return_url:notnull
+    cancel_url:notnull
 } -properties {
 } -validate {
 } -errors {
Index: openacs-4/packages/dotlrn-ecommerce/www/ecommerce/shopping-cart-add.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-ecommerce/www/ecommerce/shopping-cart-add.tcl,v
diff -u -r1.7 -r1.8
--- openacs-4/packages/dotlrn-ecommerce/www/ecommerce/shopping-cart-add.tcl	25 Jul 2005 13:25:36 -0000	1.7
+++ openacs-4/packages/dotlrn-ecommerce/www/ecommerce/shopping-cart-add.tcl	25 Jul 2005 18:19:21 -0000	1.8
@@ -68,106 +68,103 @@
 
 	if { $member_state != "approved" &&
 	     $member_state != "waitinglist approved" &&
-	     $member_state != "payment received" } {
+	     $member_state != "payment received" &&
+	     ($override_p == 0 || $admin_p == 0)
+	 } {
 
 	    # FIRST check if the section is full
 	    # and if prerequisites are met
 	    
 	    # Is section full?
-	    if { $member_state != "waitinglist approved" } {
-		set available_slots [dotlrn_ecommerce::section::available_slots $section_id]
-		ns_log notice "DEBUG:: $available_slots available slots, override $override_p, admin $admin_p"
+	    set available_slots [dotlrn_ecommerce::section::available_slots $section_id]
 
-		if { $available_slots == 0 && ( $override_p != 1 || $admin_p == 0 ) } {
-		    # No more slots left, ask user if he wants to go to
-		    # waiting list
-		    
-		    if { $admin_p && $user_id != [ad_conn user_id] } {
-			set return_url [export_vars -base ../admin/process-purchase-course { user_id }]
-		    } else {
-			set return_url [apm_package_url_from_key dotlrn-ecommerce]application-confirm
-		    }
-		    ad_returnredirect [export_vars -base waiting-list-confirm { product_id user_id participant_id return_url }]
-		    ad_script_abort
+	    if { $available_slots == 0 } {
+		# No more slots left, ask user if he wants to go to
+		# waiting list
+		
+		if { $admin_p && $user_id != [ad_conn user_id] } {
+		    set cancel_url [set return_url [export_vars -base ../admin/process-purchase-course { user_id }]]
+		} else {
+		    set return_url [apm_package_url_from_key dotlrn-ecommerce]application-confirm
+		    set cancel_url ..
 		}
+		ad_returnredirect [export_vars -base waiting-list-confirm { product_id user_id participant_id return_url cancel_url }]
+		ad_script_abort
 	    }
 
 	    # Are prerequisites met?
-	    if { $member_state != "request approved" } {
-		ns_log notice "DEBUG:: checking prerequisites"
-		set prereq_not_met 0
-		db_foreach prereqs {
-		    select m.tree_id, m.user_field, s.community_id
-		    from dotlrn_ecommerce_prereqs p,
-		    dotlrn_ecommerce_prereq_map m,
-		    dotlrn_ecommerce_section s
-		    where p.tree_id = m.tree_id
-		    and p.section_id = s.section_id
-		    and s.section_id = :section_id
-		} {
-		    set section_prereqs [db_list section_prereqs {
-			select category_id
-			from category_object_map_tree
-			where tree_id = :tree_id
-			and object_id = :community_id
-		    }]
+	    ns_log notice "DEBUG:: checking prerequisites"
+	    set prereq_not_met 0
+	    db_foreach prereqs {
+		select m.tree_id, m.user_field, s.community_id
+		from dotlrn_ecommerce_prereqs p,
+		dotlrn_ecommerce_prereq_map m,
+		dotlrn_ecommerce_section s
+		where p.tree_id = m.tree_id
+		and p.section_id = s.section_id
+		and s.section_id = :section_id
+	    } {
+		set section_prereqs [db_list section_prereqs {
+		    select category_id
+		    from category_object_map_tree
+		    where tree_id = :tree_id
+		    and object_id = :community_id
+		}]
 
-		    set user_prereqs [db_list participant_prereqs {
-			select category_id
-			from category_object_map_tree
-			where tree_id = :tree_id
-			and object_id = :participant_id
-		    }]
+		set user_prereqs [db_list participant_prereqs {
+		    select category_id
+		    from category_object_map_tree
+		    where tree_id = :tree_id
+		    and object_id = :participant_id
+		}]
 
-		    # Check if prereq is met
-		    if { [llength $user_prereqs] > 0 } {
-			foreach user_prereq $user_prereqs {
-			    if { [llength $section_prereqs] > 0 && [lsearch $section_prereqs $user_prereq] == -1 } {
-				# Prereq not met
-				incr prereq_not_met
-			    }
+		# Check if prereq is met
+		if { [llength $user_prereqs] > 0 } {
+		    foreach user_prereq $user_prereqs {
+			if { [llength $section_prereqs] > 0 && [lsearch $section_prereqs $user_prereq] == -1 } {
+			    # Prereq not met
+			    incr prereq_not_met
 			}
-		    } else {
-			incr prereq_not_met
 		    }
+		} else {
+		    incr prereq_not_met
 		}
+	    }
 
-		if { $prereq_not_met > 0 } {
-		    ns_log notice "DEBUG:: prerequisites not met"
-		    if { $admin_p && $user_id != [ad_conn user_id] } {
-			set return_url [export_vars -base ../admin/process-purchase-course { user_id }]
-		    } else {
-			set return_url [apm_package_url_from_key dotlrn-ecommerce]application-confirm
-		    }
-		    ad_returnredirect [export_vars -base prerequisite-confirm { product_id user_id participant_id return_url }]
-		    ad_script_abort
+	    if { $prereq_not_met > 0 } {
+		ns_log notice "DEBUG:: prerequisites not met"
+		if { $admin_p && $user_id != [ad_conn user_id] } {
+		    set cancel_url [set return_url [export_vars -base ../admin/process-purchase-course { user_id }]]
+		} else {
+		    set return_url [apm_package_url_from_key dotlrn-ecommerce]application-confirm
+		    set cancel_url ..
 		}
+		ad_returnredirect [export_vars -base prerequisite-confirm { product_id user_id participant_id return_url cancel_url }]
+		ad_script_abort
 	    }
 
 	    # Check application assessment
-	    if { $member_state != "payment received" } {
-		if { [db_0or1row get_assessment {
-		    select c.assessment_id
+	    if { [db_0or1row get_assessment {
+		select c.assessment_id
 
-		    from dotlrn_ecommerce_section s,
-		    dotlrn_catalogi c,
-		    cr_items i
+		from dotlrn_ecommerce_section s,
+		dotlrn_catalogi c,
+		cr_items i
 
-		    where s.course_id = c.item_id
-		    and c.item_id = i.item_id
-		    and i.live_revision = c.course_id
-		    and s.product_id = :product_id
+		where s.course_id = c.item_id
+		and c.item_id = i.item_id
+		and i.live_revision = c.course_id
+		and s.product_id = :product_id
 
-		    limit 1
-		}] } {
-		    if { ! [empty_string_p $assessment_id] && $assessment_id != -1 } {
-			set return_url [ad_conn package_url]application-confirm
-			ad_returnredirect [export_vars -base application-request { participant_id community_id {next_url $return_url} { type payment } }]
-			ad_script_abort
-			
-		    }
+		limit 1
+	    }] } {
+		if { ! [empty_string_p $assessment_id] && $assessment_id != -1 } {
+		    set return_url [ad_conn package_url]application-confirm
+		    ad_returnredirect [export_vars -base application-request { participant_id community_id {next_url $return_url} { type payment } }]
+		    ad_script_abort
+		    
 		}
-	    }	    
+	    }
 	}
     }
 
Index: openacs-4/packages/dotlrn-ecommerce/www/ecommerce/waiting-list-confirm.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-ecommerce/www/ecommerce/waiting-list-confirm.adp,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/dotlrn-ecommerce/www/ecommerce/waiting-list-confirm.adp	16 Jul 2005 12:51:07 -0000	1.1
+++ openacs-4/packages/dotlrn-ecommerce/www/ecommerce/waiting-list-confirm.adp	25 Jul 2005 18:19:21 -0000	1.2
@@ -20,4 +20,4 @@
     <a href="@shopping_cart_add_url;noquote@" class="button">#dotlrn-ecommerce.Continue#</a> &nbsp;&nbsp;&nbsp;
   </if>
   <a href="@request_url;noquote@" class="button">#dotlrn-ecommerce.lt_Go_on_the_waiting_lis#</a> &nbsp;&nbsp;&nbsp;
-  <a href="@return_url;noquote@" class="button">#dotlrn-ecommerce.Cancel#</a>
+  <a href="@cancel_url;noquote@" class="button">#dotlrn-ecommerce.Cancel#</a>
Index: openacs-4/packages/dotlrn-ecommerce/www/ecommerce/waiting-list-confirm.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-ecommerce/www/ecommerce/waiting-list-confirm.tcl,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/dotlrn-ecommerce/www/ecommerce/waiting-list-confirm.tcl	16 Jul 2005 12:51:07 -0000	1.1
+++ openacs-4/packages/dotlrn-ecommerce/www/ecommerce/waiting-list-confirm.tcl	25 Jul 2005 18:19:21 -0000	1.2
@@ -14,6 +14,7 @@
     user_id:integer,notnull
     {participant_id:integer 0}
     return_url:notnull
+    cancel_url:notnull
 } -properties {
 } -validate {
 } -errors {