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
+ }
+ }
}