Index: openacs-4/packages/invoices/lib/invoice-items-list.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/invoices/lib/invoice-items-list.tcl,v diff -u -r1.1 -r1.2 --- openacs-4/packages/invoices/lib/invoice-items-list.tcl 2 Nov 2005 23:11:04 -0000 1.1 +++ openacs-4/packages/invoices/lib/invoice-items-list.tcl 3 Nov 2005 22:49:12 -0000 1.2 @@ -1,70 +1,211 @@ +set optional_param_list [list elements category_filter_clause] +set optional_unset_list [list iv_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]} { + if {[empty_string_p [set $optional_unset]]} { + unset $optional_unset + } + } +} + +foreach optional_param $optional_param_list { + if {![info exists $optional_param]} { + set $optional_param {} + } +} + +if { [exists_and_not_null date_range] } { + catch { set date_range [lc_time_fmt $date_range %y-%m-%d] } errMsg +} + +if {![info exist filters_p] } { + set filters_p 1 +} + if {![info exists format]} { set format "normal" } -if {![info exists orderby]} { - set orderby "" -} + if {![info exists page_size]} { 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 {organization_id elements} { - if {![info exists $optional_param]} { - set $optional_param {} +if { ![exists_and_not_null return_url] } { + set return_url [ad_return_url] +} + +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 { + 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 {} invoice_title {} \ + rebate {} item_id {} invoice_item_id {} creation_date {}] } -set user_id [ad_conn user_id] +# Create the elements for the list template +set elements [list] -set dotlrn_club_id [lindex [application_data_link::get_linked \ - -from_object_id $organization_id \ - -to_object_type "dotlrn_club"] 0] +# 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 "  ([_ invoices.clear])" + } else { + set label "$cat_name" + } + lappend elements category_$cat_id [list label $label] + lappend row_list category_$cat_id + lappend row_list [list] + } +} -set pm_base_url [apm_package_url_from_id [dotlrn_community::get_package_id_from_package_key \ - -package_key "project-manager" \ - -community_id $dotlrn_club_id]] +lappend elements item_title [list label "[_ invoices.Invoice_Item_title]"] \ + final_amount [list label "[_ invoices.Final_Amount]"] \ + invoice_title [list label "[_ invoices.Invoice_Title]" \ + display_template { + @iv_items.invoice_title@ + } ] \ + rebate [list label "[_ invoices.Rebate]" \ + display_template { + @iv_items.rebate@ % + } + ] \ + item_id [list label "[_ invoices.Item_Id]"] \ + iv_item_id [list label "[_ invoices.Invoice_Item_Id]"] \ + creation_date [list label "[_ invoices.Creation_Date]"] \ + month [list label ""] -set row_list [list] -foreach element $elements { - lappend row_list [list $element {}] + +set filters [list category_id { } \ + filter_package_id { + where_clause { ii.object_package_id = :filter_package_id } + } \ + customer_id { + where_clause { iv.organization_id = :customer_id} + } \ + date_range { + where_clause { to_char(ii.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 { + { "#invoices.Customer#" { { groupby organization_id } { orderby organization_id,desc } } } + { "#invoices.Category#" { { groupby category_id } { orderby category_id,desc } } } + { "#invoices.Month#" { { groupby month } { orderby time_stamp,desc } } } +} + + template::list::create \ - -name invoice_items \ + -name iv_items \ + -key iv_item_id \ -no_data "[_ invoices.None]" \ + -has_checkboxes \ -selected_format $format \ - -elements { } \ - -actions { } \ - -bulk_actions { } \ - -orderby { } \ - -orderby_name orderby \ + -elements $elements \ + -orderby_name iv_items_orderby \ + -orderby { + item_title { + label { [_ invoices.Invoice_Item_title] } + orderby_desc { lower(ii.title) desc } + orderby_asc { lower(ii.title) asc } + } + invoice_title { + label "[_ invoices.Invoice_Title]" + orderby_desc { lower(iv.title) desc } + orderby_asc { lower(iv.title) asc } + } + } \ -html {width 100%} \ -page_size $page_size \ -page_flush_p 0 \ - -page_query_name "invoice_items_paginated" \ - -filters { } \ + -page_query_name "iv_items_paginated" \ + -pass_properties return_url \ + -groupby { + label "[_ invoices.Group_by]:" + type multivar + values $groupby_values + } \ + -filters $filters \ -formats { normal { label "[_ invoices.Table]" layout table row $row_list } - csv { - label "[_ invoices.CSV]" - output csv - page_size 0 - row $row_list - } } -db_multirow -extend { } invoice_items invoice_items { } { +# Elements to extend the multirow +lappend multirow_extend final_amount +db_multirow -extend $multirow_extend iv_items iv_items { } { + set final_amount [expr [expr $price_per_unit * $item_units] - [expr $rebate * $price_per_unit * $item_units]] + if { $categories_p && [exists_and_not_null category_id]} { + set category_$category_id "[_ invoices.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 + } + } }