Index: openacs-4/packages/invoices/invoices.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/invoices/invoices.info,v
diff -u -N -r1.24 -r1.25
--- openacs-4/packages/invoices/invoices.info 2 May 2006 12:07:11 -0000 1.24
+++ openacs-4/packages/invoices/invoices.info 3 May 2006 05:52:35 -0000 1.25
@@ -7,15 +7,15 @@
f
t
-
+
Timo Hentschel
Invoices package that will collect costs to invoice items in invoices and store data about received payment.
2005-11-15
Cognovis
Collect costs to invoice items and invoices, store payment information.
0
-
+
Index: openacs-4/packages/invoices/lib/invoice-list.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/invoices/lib/invoice-list.tcl,v
diff -u -N -r1.14 -r1.15
--- openacs-4/packages/invoices/lib/invoice-list.tcl 2 May 2006 12:07:11 -0000 1.14
+++ openacs-4/packages/invoices/lib/invoice-list.tcl 3 May 2006 05:52:35 -0000 1.15
@@ -49,7 +49,7 @@
set user_id [ad_conn user_id]
set timestamp_format "YYYY-MM-DD HH24:MI:SS"
-set bulk_actions [list "[_ invoices.iv_invoice_send]" "${base_url}invoices-view" "[_ invoices.iv_invoice_send]" "[_ invoices.iv_invoice_pay]" "${base_url}invoice-pay" "[_ invoices.iv_invoice_pay]"]
+set bulk_actions [list "[_ invoices.iv_invoice_pay]" "${base_url}invoice-pay" "[_ invoices.iv_invoice_pay]"]
set invoice_cancel_p [permission::permission_p -party_id $user_id -object_id $package_id -privilege invoice_cancel]
set return_url [ad_return_url]
@@ -67,7 +67,7 @@
lappend actions "[_ invoices.iv_invoice_url]" $base_url "[_ invoices.iv_invoice_url2]"
if {$invoice_cancel_p} {
- lappend actions "[_ invoices.iv_journal_check]" "${base_url}journal-check" "[_ invoices.iv_journal_check]"
+ lappend actions "[_ invoices.iv_journal_check]" "${base_url}journal-check" "[_ invoices.iv_journal_check]" "[_ invoices.iv_join_invoice]" "${base_url}invoice-join" "[_ invoices.iv_join_invoice]"
}
# If the sum was paid, the total_amount should appear green.
Index: openacs-4/packages/invoices/sql/postgresql/invoices-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/invoices/sql/postgresql/invoices-create.sql,v
diff -u -N -r1.11 -r1.12
--- openacs-4/packages/invoices/sql/postgresql/invoices-create.sql 2 Apr 2006 22:08:02 -0000 1.11
+++ openacs-4/packages/invoices/sql/postgresql/invoices-create.sql 3 May 2006 05:52:35 -0000 1.12
@@ -207,8 +207,13 @@
-- new, sent, cancelled, billed, paid
cancelled_p char(1) default 'f'
constraint iv_invoices_cancelled_p
- check (cancelled_p in ('t','f'))
+ check (cancelled_p in ('t','f')),
-- is this invoice already cancelled?
+ pdf_status varchar(10) default 'new',
+ -- new, created, sent
+ pdf_file_id integer
+ constraint iv_invoices_pdf_file_fk
+ references cr_items
);
create index iv_invoices_parent_idx on iv_invoices(parent_invoice_id);
@@ -327,6 +332,17 @@
not null
);
+create table iv_joined_invoices (
+ file_id integer
+ constraint iv_joined_invoices_pk
+ primary key,
+ creation_date timestamptz
+ constraint iv_joined_invoices_date_nn
+ not null
+);
+
+insert into iv_joined_invoices (file_id, creation_date) values (0, now());
+
create table iv_journal_country_codes (
iso_code char(2)
constraint iv_journal_country_codes_pk
Index: openacs-4/packages/invoices/sql/postgresql/invoices-drop.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/invoices/sql/postgresql/invoices-drop.sql,v
diff -u -N -r1.2 -r1.3
--- openacs-4/packages/invoices/sql/postgresql/invoices-drop.sql 15 Mar 2006 17:05:06 -0000 1.2
+++ openacs-4/packages/invoices/sql/postgresql/invoices-drop.sql 3 May 2006 05:52:35 -0000 1.3
@@ -6,6 +6,7 @@
--
+drop table iv_joined_invoices;
drop table iv_journal_country_codes;
drop table iv_journals;
drop table iv_default_objects;
Index: openacs-4/packages/invoices/tcl/invoice-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/invoices/tcl/invoice-procs.tcl,v
diff -u -N -r1.22 -r1.23
--- openacs-4/packages/invoices/tcl/invoice-procs.tcl 2 May 2006 12:07:11 -0000 1.22
+++ openacs-4/packages/invoices/tcl/invoice-procs.tcl 3 May 2006 05:52:35 -0000 1.23
@@ -64,6 +64,7 @@
[list vat_percent $vat_percent] \
[list vat $vat] \
[list status new] \
+ [list pdf_status new] \
[list cancelled_p f] ] ]
}
@@ -116,6 +117,7 @@
[list vat_percent $vat_percent] \
[list vat $vat] \
[list status new] \
+ [list pdf_status new] \
[list cancelled_p f] ] ]
}
@@ -134,6 +136,19 @@
db_dml update_status {}
}
+ad_proc -public iv::invoice::set_pdf_status {
+ -invoice_id:required
+ {-status "created"}
+ {-file_id ""}
+} {
+ @author Timo Hentschel (timo@timohentschel.de)
+ @creation-date 2006-05-02
+
+ Edit Invoice pdf status
+} {
+ db_dml update_status {}
+}
+
ad_proc -public iv::invoice::data {
-invoice_id:required
-invoice_array:required
Index: openacs-4/packages/invoices/tcl/invoice-procs.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/invoices/tcl/invoice-procs.xql,v
diff -u -N -r1.11 -r1.12
--- openacs-4/packages/invoices/tcl/invoice-procs.xql 2 Apr 2006 22:08:02 -0000 1.11
+++ openacs-4/packages/invoices/tcl/invoice-procs.xql 3 May 2006 05:52:35 -0000 1.12
@@ -13,6 +13,20 @@
+
+
+
+ update iv_invoices
+ set pdf_status = :status,
+ pdf_file_id = :file_id
+ where invoice_id = (select latest_revision
+ from cr_items
+ where item_id = :invoice_id)
+ and pdf_status in ('new', 'created')
+
+
+
+
Index: openacs-4/packages/invoices/tcl/iv-install-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/invoices/tcl/iv-install-procs.tcl,v
diff -u -N -r1.11 -r1.12
--- openacs-4/packages/invoices/tcl/iv-install-procs.tcl 2 Apr 2006 22:08:02 -0000 1.11
+++ openacs-4/packages/invoices/tcl/iv-install-procs.tcl 3 May 2006 05:52:35 -0000 1.12
@@ -88,6 +88,8 @@
content::type::attribute::new -content_type {iv_invoice} -attribute_name {vat} -datatype {number} -pretty_name {[_ invoices.VAT_amount]} -column_spec {numeric(12,2)}
content::type::attribute::new -content_type {iv_invoice} -attribute_name {status} -datatype {string} -pretty_name {[_ invoices.Status]} -column_spec {varchar(10)}
content::type::attribute::new -content_type {iv_invoice} -attribute_name {cancelled_p} -datatype {boolean} -pretty_name {[_ invoices.Cancelled]} -column_spec {char(1)}
+ content::type::attribute::new -content_type {iv_invoice} -attribute_name {pdf_status} -datatype {string} -pretty_name {[_ invoices.PDF_Status]} -column_spec {varchar(10)}
+ content::type::attribute::new -content_type {iv_invoice} -attribute_name {pdf_file_id} -datatype {number} -pretty_name {[_ invoices.PDF_File]} -column_spec {integer}
# Invoice Item
content::type::attribute::new -content_type {iv_invoice_item} -attribute_name {item_nr} -datatype {string} -pretty_name {[_ invoices.Invoice_item_number]} -column_spec {varchar(200)}
@@ -268,6 +270,10 @@
1.0d2 1.0d3 {
content::type::attribute::new -content_type {iv_offer} -attribute_name {reservation} -datatype {text} -pretty_name {[_ invoices.Reservation]} -column_spec {text}
}
+ 1.0d6 1.0d7 {
+ content::type::attribute::new -content_type {iv_invoice} -attribute_name {pdf_status} -datatype {string} -pretty_name {[_ invoices.PDF_Status]} -column_spec {varchar(10)}
+ content::type::attribute::new -content_type {iv_invoice} -attribute_name {pdf_file_id} -datatype {number} -pretty_name {[_ invoices.PDF_File]} -column_spec {integer}
+ }
}
}
Index: openacs-4/packages/invoices/www/invoice-documents.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/invoices/www/invoice-documents.tcl,v
diff -u -N -r1.1 -r1.2
--- openacs-4/packages/invoices/www/invoice-documents.tcl 2 Apr 2006 22:08:02 -0000 1.1
+++ openacs-4/packages/invoices/www/invoice-documents.tcl 3 May 2006 05:52:35 -0000 1.2
@@ -10,6 +10,7 @@
{copy_p 0}
{file_ids ""}
{return_url:optional ""}
+ {display_p 1}
} -properties {
context:onevalue
page_title:onevalue
@@ -65,7 +66,7 @@
set documents [iv::invoice::parse_data -invoice_id $invoice_id -types $document_types -email_text ""]
multirow create documents file_id file_title file_url
-set file_ids {}
+set files {}
set documents [lreplace $documents 0 0]
foreach document_file $documents type $document_types {
switch $type {
@@ -80,13 +81,20 @@
if {![empty_string_p $document_file]} {
set file_size [file size $document_file]
- set file_id [contact::oo::import_oo_pdf -oo_file $document_file -printer_name "pdfconv" -title $file_title -parent_id $invoice_id]
+ util_unlist [contact::oo::import_oo_pdf -oo_file $document_file -printer_name "pdfconv" -title $file_title -parent_id $invoice_id -no_import] file_mime_type file_name
- multirow append documents $file_id $file_title [export_vars -base "/tracking/download/$file_title" {file_id}]
- lappend file_ids $file_id
+ lappend files $file_name
}
}
+set file_id [contact::oo::join_pdf -filenames $files -title $invoice_title -parent_id $invoice_id]
+multirow append documents $file_id $invoice_title [export_vars -base "/tracking/download/$invoice_title" {file_id}]
+
+# delete old files
+foreach one_file $files {
+ ns_unlink $one_file
+}
+
if {[multirow size documents] > 0} {
# an invoice has been generated.
@@ -101,11 +109,10 @@
db_transaction {
# move files to invoice_folder
- foreach one_file $file_ids {
- application_data_link::new -this_object_id $invoice_id -target_object_id $one_file
- db_dml set_publish_status_and_parent {}
- db_dml set_context_id {}
- }
+ application_data_link::new -this_object_id $invoice_id -target_object_id $file_id
+ db_dml set_publish_status_and_parent {}
+ db_dml set_context_id {}
+
if {$status == "new" || [empty_string_p $status]} {
iv::invoice::set_status -invoice_id $invoice_id -status "billed"
}
@@ -116,6 +123,19 @@
set return_url [export_vars -base invoice-list {organization_id}]
}
+if {$display_p} {
+ # mark displayed pdf as sent
+ iv::invoice::set_pdf_status -invoice_id $invoice_id -status "sent"
+} else {
+ # if no display requested, mark pdf-file for joining
+ # and redirect to return_url
+ iv::invoice::set_pdf_status -invoice_id $invoice_id -status "created" -file_id $file_id
+
+ ad_returnredirect $return_url
+ ad_script_abort
+}
+
+
set actions [list "[_ invoices.ok]" $return_url "[_ invoices.ok]"]
template::list::create \
Index: openacs-4/packages/invoices/www/invoice-documents.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/invoices/www/invoice-documents.xql,v
diff -u -N -r1.1 -r1.2
--- openacs-4/packages/invoices/www/invoice-documents.xql 2 Apr 2006 22:08:02 -0000 1.1
+++ openacs-4/packages/invoices/www/invoice-documents.xql 3 May 2006 05:52:35 -0000 1.2
@@ -30,7 +30,7 @@
update cr_items
set publish_status = 'live',
parent_id = :invoice_folder_id
- where item_id = :one_file
+ where item_id = :file_id
@@ -40,7 +40,7 @@
update acs_objects
set context_id = :invoice_folder_id
- where object_id = :one_file
+ where object_id = :file_id
Index: openacs-4/packages/invoices/www/invoice-join.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/invoices/www/invoice-join.tcl,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/invoices/www/invoice-join.tcl 3 May 2006 05:52:35 -0000 1.1
@@ -0,0 +1,48 @@
+ad_page_contract {
+ Joins all invoice-pdfs since last join and returns big pdf.
+
+ @author Timo Hentschel (timo@timohentschel.de)
+ @creation-date 2006-05-02
+} {
+} -properties {
+ context:onevalue
+ page_title:onevalue
+}
+
+set package_id [ad_conn package_id]
+set user_id [auth::require_login]
+
+set page_title "[_ invoices.iv_invoice_join]"
+set context [list [list [export_vars -base invoice-list {organization_id}] "[_ invoices.iv_invoice_2]"] $page_title]
+
+db_1row today {}
+
+set root_dir [cr_fs_path]
+set root_folder_id [content::folder::get_folder_from_package -package_id $package_id]
+set invoice_title [lang::util::localize "#invoices.file_joined_invoice#_${today}.pdf"]
+
+db_transaction {
+ db_1row last_checkout {}
+
+ set tmpdir [ns_tmpnam]
+ ns_mkdir $tmpdir
+ set files {}
+ db_foreach pdfs_to_join {} {
+ ns_cp "${root_dir}$content" "${tmpdir}/[file tail $content].pdf"
+ lappend files "${tmpdir}/[file tail $content].pdf"
+ }
+
+ set file_id [contact::oo::join_pdf -filenames $files -title $invoice_title -parent_id $root_folder_id]
+ db_1row get_file_location {}
+
+ db_dml mark_join_creation {}
+ db_dml mark_invoices_billed {}
+
+ # delete old files
+ foreach one_file $files {
+ ns_unlink $one_file
+ }
+ ns_rmdir $tmpdir
+}
+
+ns_returnfile 200 "application/pdf" "${root_dir}$file_location"
Index: openacs-4/packages/invoices/www/invoice-join.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/invoices/www/invoice-join.xql,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/invoices/www/invoice-join.xql 3 May 2006 05:52:35 -0000 1.1
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+ select max(to_char(creation_date, 'YYYY-MM-DD HH24:MI:SS')) as last_checkout
+ from iv_joined_invoices
+
+
+
+
+
+
+
+ select to_char(now(), 'YYYYMMDD_HH24MI') as today
+
+
+
+
+
+
+
+ select fr.content
+ from iv_invoices i, cr_items ci, cr_items fi, cr_revisions fr, acs_objects fo
+ where ci.latest_revision = i.invoice_id
+ and i.pdf_status = 'created'
+ and fi.item_id = i.pdf_file_id
+ and fr.revision_id = fi.latest_revision
+ and fo.object_id = fr.revision_id
+ and fo.creation_date > to_timestamp(:last_checkout, 'YYYY-MM-DD HH24:MI:SS')
+ order by i.organization_id, i.invoice_nr
+
+
+
+
+
+
+
+ select r.content as file_location
+ from cr_items i, cr_revisions r
+ where i.latest_revision = r.revision_id
+ and i.item_id = :file_id
+
+
+
+
+
+
+
+ insert into iv_joined_invoices (file_id, creation_date)
+ values (:file_id, now())
+
+
+
+
+
+
+
+ update iv_invoices
+ set pdf_status = 'sent'
+ where invoice_id in (select i.invoice_id
+ from iv_invoices i, cr_items ci, cr_items fi, acs_objects fo
+ where ci.latest_revision = i.invoice_id
+ and i.pdf_status = 'created'
+ and fi.item_id = i.pdf_file_id
+ and fo.object_id = fi.latest_revision
+ and fo.creation_date > to_timestamp(:last_checkout, 'YYYY-MM-DD HH24:MI:SS'))
+
+
+
+
+
Index: openacs-4/packages/invoices/www/invoice-send-1.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/invoices/www/invoice-send-1.tcl,v
diff -u -N -r1.4 -r1.5
--- openacs-4/packages/invoices/www/invoice-send-1.tcl 2 Apr 2006 22:08:02 -0000 1.4
+++ openacs-4/packages/invoices/www/invoice-send-1.tcl 3 May 2006 05:52:35 -0000 1.5
@@ -34,7 +34,12 @@
set invoice_copy [ams::value -attribute_name "invoice_copy" -object_id $rec_orga_revision_id]
set boolean_options [list [list "[_ invoices.yes]" 1] [list "[_ invoices.no]" 0]]
+set email_options [list [list "[_ invoices.invoice_email]" t] [list "[_ invoices.invoice_display]" f]]
+if {$pdf_status != "sent"} {
+ lappend email_options [list "[_ invoices.invoice_for_join]" j]
+}
+
ad_form -name invoice_send -action invoice-send-1 -export {return_url} -form {
{invoice_id:key}
}
@@ -48,11 +53,17 @@
ad_form -extend -name invoice_send -form {
{invoice_p:text(radio) {label "[_ invoices.iv_invoice_p]"} {options $boolean_options}}
{copy_p:text(radio) {label "[_ invoices.iv_invoice_copy_p]"} {options $boolean_options}}
- {email_p:text(radio) {label "[_ invoices.iv_invoice_email_p]"} {options $boolean_options}}
+ {email_p:text(radio) {label "[_ invoices.iv_invoice_email_p]"} {options $email_options}}
} -edit_request {
set opening_p 0
set invoice_p 1
- set email_p 0
+
+ if {$pdf_status != "sent"} {
+ set email_p j
+ } else {
+ set email_p f
+ }
+
set copy_p [ad_decode $invoice_copy t 1 0]
if {[empty_string_p $copy_p]} {
set copy_p 0
@@ -63,11 +74,12 @@
set copy_p 1
}
} -after_submit {
- if {$email_p} {
- ad_returnredirect [export_vars -base "invoice-send" {invoice_id opening_p invoice_p copy_p return_url}]
- } else {
- ad_returnredirect [export_vars -base "invoice-documents" {invoice_id opening_p invoice_p copy_p return_url}]
+ switch $email_p {
+ t { ad_returnredirect [export_vars -base "invoice-send" {invoice_id opening_p invoice_p copy_p return_url}] }
+ f { ad_returnredirect [export_vars -base "invoice-documents" {invoice_id opening_p invoice_p copy_p return_url}] }
+ j { ad_returnredirect [export_vars -base "invoice-documents" {invoice_id opening_p invoice_p copy_p {display_p 0} return_url}] }
}
+
ad_script_abort
}
Index: openacs-4/packages/invoices/www/invoice-send-1.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/invoices/www/invoice-send-1.xql,v
diff -u -N -r1.2 -r1.3
--- openacs-4/packages/invoices/www/invoice-send-1.xql 4 Jan 2006 08:06:48 -0000 1.2
+++ openacs-4/packages/invoices/www/invoice-send-1.xql 3 May 2006 05:52:35 -0000 1.3
@@ -5,7 +5,7 @@
select i.invoice_nr, i.organization_id, i.parent_invoice_id, i.invoice_nr,
- i.total_amount, i.recipient_id, i.contact_id
+ i.total_amount, i.recipient_id, i.contact_id, i.pdf_status
from iv_invoices i, cr_items ii
where ii.latest_revision = i.invoice_id
and ii.item_id = :invoice_id