Index: openacs-4/packages/invoices/lib/offer-items-list.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/invoices/lib/offer-items-list.tcl,v diff -u -r1.1 -r1.2 --- openacs-4/packages/invoices/lib/offer-items-list.tcl 2 Nov 2005 23:06:42 -0000 1.1 +++ openacs-4/packages/invoices/lib/offer-items-list.tcl 3 Nov 2005 21:09:24 -0000 1.2 @@ -1,4 +1,7 @@ -set optional_unset_list [list offer_items_orderby] +set optional_param_list [list elements category_filter_clause] +set optional_unset_list [list offer_items_orderby category_id \ + customer_id filter_package_id date_range \ + project_status_id groupby] foreach optional_unset $optional_unset_list { if {[info exists $optional_unset]} { @@ -8,7 +11,17 @@ } } -if {![info exist filters_p] } { +foreach optional_param $optional_param_list { + if {![info exists $optional_param]} { + set $optional_param {} + } +} + +if { [exists_and_not_null date_range] } { + set date_range [lc_time_fmt $date_range %y-%m-%d] +} + +if {![info exist filters_p] } { set filters_p 1 } @@ -20,47 +33,114 @@ set page_size "25" } -if {![info exists package_id]} { - set package_id [ad_conn package_id] +if {![info exists invoice_package_id]} { + set invoice_package_id [ad_conn package_id] } if {![info exists base_url]} { - set base_url [apm_package_url_from_id $package_id] + set base_url [apm_package_url_from_id $invoice_package_id] } -foreach optional_param { elements } { - if {![info exists $optional_param]} { - set $optional_param {} - } +if { ![exists_and_not_null return_url] } { + set return_url [ad_return_url] } -set user_id [ad_conn user_id] +if { [exists_and_not_null category_id] } { + set category_filter_clause "and com.category_id = $category_id" +} +set categories_p 0 + # Elements to construnct row_lists if { [exists_and_not_null elements] } { set row_list [list] foreach element $elements { - lappend row_list $element - lappend row_list [list] + if { ![string equal $element "categories"] } { + lappend row_list $element + lappend row_list [list] + } else { + set categories_p 1 + } } } else { - set row_list [list item_title {} final_amount {} offer_title {} rebate {} item_id {} offer_item_id {}] + set row_list [list item_title {} final_amount {} offer_title {} rebate {} item_id {} offer_item_id {} creation_date {}] } # Create the elements for the list template set elements [list] -lappend elements item_title [list label "Offer Item Title"] -lappend elements final_amount [list label "Final Ammount"] \ +# We are going to create the elements for each mapped categories +if { $categories_p } { + set categories [db_list_of_lists get_categories { }] + + set mapped_objects [list] + set multirow_extend [list] + + foreach category $categories { + set cat_name [lindex $category 0] + set cat_id [lindex $category 1] + + lappend multirow_extend category_$cat_id + if { [exists_and_not_null category_id] } { + set label "$cat_name" + append label "  (clear)" + } else { + set label "$cat_name" + } + lappend elements category_$cat_id [list label $label] + lappend row_list category_$cat_id + lappend row_list [list] + } +} + +lappend elements item_title [list label "Offer Item Title"] \ + final_amount [list label "Final Ammount"] \ offer_title [list label "Offer Title" \ display_template { @offer_items.offer_title@ } ] \ - rebate [list label "Rebate"] \ - item_id [list label "item_id"] \ - offer_item_id [list label "offer_item_id"] + rebate [list label "Rebate" \ + display_template { + @offer_items.rebate@ % + } + ] \ + item_id [list label "Item Id"] \ + offer_item_id [list label "Offer Item Id"] \ + creation_date [list label "Creation Date"] \ + month [list label ""] +set filters [list category_id { } \ + filter_package_id { + where_clause { oi.object_package_id = :filter_package_id } + } \ + customer_id { + where_clause { o.organization_id = :customer_id} + } \ + date_range { + where_clause { to_char(oi.creation_date,'yy-mm-dd') > :date_range } + }] + +if { [apm_package_installed_p "project-manager"] } { + lappend filters project_status_id { + label "Project Status Id:" + values { [pm::status::project_status_select] } + } +} + +set project_status_p 0 +if { [exists_and_not_null project_status_id] } { + set project_status_p 1 +} + + +set groupby_values { + { "Customer" { { groupby organization_id } { orderby organization_id,desc } } } + { "Category" { { groupby category_id } { orderby cateogory_id,desc } } } + { "Month" { { groupby month } { orderby time_stamp,desc } } } +} + + template::list::create \ -name offer_items \ -key offer_item_id \ @@ -70,7 +150,6 @@ -elements $elements \ -orderby_name offer_items_orderby \ -orderby { - default_value item_id item_title { label {Offer Item Title} orderby_desc { lower(oi.title) desc } @@ -86,7 +165,13 @@ -page_size $page_size \ -page_flush_p 0 \ -page_query_name "offer_items_paginated" \ - -filters { } \ + -pass_properties return_url \ + -groupby { + label "Group By" + type multivar + values $groupby_values + } \ + -filters $filters \ -formats { normal { label "[_ invoices.Table]" @@ -95,6 +180,31 @@ } } -db_multirow -extend { final_amount } offer_items offer_items { } { +# Elements to extend the multirow +lappend multirow_extend final_amount + +db_multirow -extend $multirow_extend offer_items offer_items { } { set final_amount [expr [expr $price_per_unit * $item_units] - [expr $rebate * $price_per_unit * $item_units]] + if { $categories_p } { + set category_$category_id "Mapped" + } + set project_item_id [lindex [application_data_link::get_linked -from_object_id $item_id -to_object_type content_item] 0] + if { $project_status_p } { + if { [exists_and_not_null project_item_id] } { + switch $project_status_id { + "1" { + if { ![pm::project::open_p -project_item_id $project_item_id] } { + continue + } + } + "2" { + if { [pm::project::open_p -project_item_id $project_item_id] } { + continue + } + } + } + } else { + continue + } + } }