Commit c74ed1f0 authored by Frank Bergmann's avatar Frank Bergmann

- renames the actual conversion file

parent 303ccf66
......@@ -24,6 +24,26 @@ ad_page_contract {
set user_id [ad_maybe_redirect_for_registration]
set today [db_string today "select to_char(now(), 'YYYY-MM-DD')"]
set invoice_url "/intranet-invoices/view?invoice_id=$invoice_id"
# rounding precision can be between 2 (USD,EUR, ...)
# and -5 (Old Turkish Lira, ...).
set rounding_precision 2
set required_field "<font color=red size=+1><B>*</B></font>"
set rounding_factor [expr exp(log(10) * $rounding_precision)]
set rf $rounding_factor
# Locale
set locale "en_US"
# set locale [lang::user::locale]
set cur_format [im_l10n_sql_currency_format]
set vat_format $cur_format
set tax_format $cur_format
# ---------------------------------------------------------------
# Get information about the financial document ("invoice")
......@@ -32,7 +52,7 @@ set today [db_string today "select to_char(now(), 'YYYY-MM-DD')"]
if {![db_0or1row project_info "
select c.*,
i.*,
o.creation_date as issue_date,
to_char(o.creation_date, 'YYYY-MM-DD') as issue_date_pretty,
cust.company_name as customer_name,
ocust.address_line1 as customer_address_line1,
......@@ -56,7 +76,6 @@ if {![db_0or1row project_info "
prov_contact.work_phone as provider_contact_work_phone,
paymeth.category_description as payment_method_desc
from
im_costs c,
im_invoices i
......@@ -83,7 +102,28 @@ if {![db_0or1row project_info "
return
}
set invoice_url "/intranet-invoices/view?invoice_id=$invoice_id"
# Calculate grand total based on the same inner SQL
db_1row calc_grand_total ""
set subtotal_pretty [lc_numeric [im_numeric_add_trailing_zeros [expr $subtotal+0] $rounding_precision] "" $locale]
set vat_amount_pretty [lc_numeric [im_numeric_add_trailing_zeros [expr $vat_amount+0] $rounding_precision] "" $locale]
set tax_amount_pretty [lc_numeric [im_numeric_add_trailing_zeros [expr $tax_amount+0] $rounding_precision] "" $locale]
set grand_total_pretty [lc_numeric [im_numeric_add_trailing_zeros [expr $grand_total+0] $rounding_precision] "" $locale]
set total_due_pretty [lc_numeric [im_numeric_add_trailing_zeros [expr $total_due+0] $rounding_precision] "" $locale]
set discount_perc_pretty $discount_perc
set surcharge_perc_pretty $surcharge_perc
# Get the right outer tag name, depending on the document type
set document_type "error"
switch $cost_type_id {
3700 { set document_type "Invoice" }
3702 { set document_type "Quote" }
3704 { set document_type "Invoice" }
3706 { set document_type "Order" }
3724 { set document_type "DelNote" }
}
# ---------------------------------------------------------------
......@@ -98,7 +138,7 @@ set view_index 0
# ---------------------------------------------------------------
# Main Document Node
set doc [dom createDocument invoice]
set doc [dom createDocument $document_type]
set main_node [$doc documentElement]
$main_node setAttribute xmlns:cbc "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-1.0"
......@@ -110,15 +150,15 @@ $main_node setAttribute xsi:schemaLocation "urn:oasis:names:specification:ubl:sc
$main_node appendXML "<ID>$cost_id</ID>"
$main_node appendXML "<cbc:IssueDate>$issue_date</cbc:IssueDate>"
$main_node appendXML "<TaxPointDate>$issue_date</TaxPointDate>"
$main_node appendXML "<ID>$cost_name</ID>"
$main_node appendXML "<cbc:IssueDate>$issue_date_pretty</cbc:IssueDate>"
$main_node appendXML "<TaxPointDate>$issue_date_pretty</TaxPointDate>"
$main_node appendXML "
<cac:OrderReference>
<cac:BuyersID>$customer_id</cac:BuyersID>
<cac:SellersID>$provider_id</cac:SellersID>
<cbc:IssueDate>$issue_date</cbc:IssueDate>
<cbc:IssueDate>$issue_date_pretty</cbc:IssueDate>
</cac:OrderReference>"
$main_node appendXML "
......@@ -168,6 +208,77 @@ $main_node appendXML "
</cac:PaymentTerms>
"
ns_return 200 text/xxx [$doc asXML -indent 2 -escapeNonASCII]
$main_node appendXML "
<cac:TaxTotal>
<cbc:TotalTaxAmount amountCurrencyCodeListVersionID=\"0.3\" amountCurrencyID=\"$currency\">$vat_amount_pretty</cbc:TotalTaxAmount>
<cac:TaxSubTotal>
<cbc:TaxableAmount amountCurrencyCodeListVersionID=\"0.3\" amountCurrencyID=\"$currency\">$amount</cbc:TaxableAmount>
<cbc:TaxAmount amountCurrencyCodeListVersionID=\"0.3\" amountCurrencyID=\"$currency\">$vat_amount_pretty</cbc:TaxAmount>
<cac:TaxCategory>
<cac:ID>STD</cac:ID>
<cbc:Percent>$vat</cbc:Percent>
<cac:TaxScheme>
<cac:TaxTypeCode>VAT</cac:TaxTypeCode>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubTotal>
</cac:TaxTotal>
"
$main_node appendXML "
<cac:LegalTotal>
<cbc:LineExtensionTotalAmount amountCurrencyCodeListVersionID=\"0.3\"
amountCurrencyID=\"$currency\">$subtotal_pretty</cbc:LineExtensionTotalAmount>
<cbc:TaxExclusiveTotalAmount amountCurrencyCodeListVersionID=\"0.3\"
amountCurrencyID=\"$currency\">$subtotal_pretty</cbc:TaxExclusiveTotalAmount>
<cbc:TaxInclusiveTotalAmount amountCurrencyCodeListVersionID=\"0.3\"
amountCurrencyID=\"$currency\">$grand_total_pretty</cbc:TaxInclusiveTotalAmount>
</cac:LegalTotal>
"
set ctr 1
db_foreach invoice_items {} {
set amount_pretty [lc_numeric [im_numeric_add_trailing_zeros [expr $amount+0] $rounding_precision] "" $locale]
set item_units_pretty [lc_numeric [expr $item_units+0] "" $locale]
set price_per_unit_pretty [lc_numeric [im_numeric_add_trailing_zeros [expr $price_per_unit+0] $rounding_precision] "" $locale]
$main_node appendXML "
<cac:${document_type}Line>
<cac:ID>$ctr</cac:ID>
<cbc:InvoicedQuantity quantityUnitCode=\"$item_uom\">$item_units_pretty</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount amountCurrencyCodeListVersionID=\"0.3\"
amountCurrencyID=\"$currency\">[string trim $amount_pretty]</cbc:LineExtensionAmount>
<cac:OrderLineReference>
<cac:BuyersLineID>$ctr</cac:BuyersLineID>
</cac:OrderLineReference>
<cac:Item>
<cbc:Description>$item_name</cbc:Description>
<cac:BuyersItemIdentification>
<cac:ID>$ctr</cac:ID>
</cac:BuyersItemIdentification>
<cac:SellersItemIdentification>
<cac:ID>32145-12</cac:ID>
</cac:SellersItemIdentification>
<cac:BasePrice>
<cbc:PriceAmount amountCurrencyCodeListVersionID=\"0.3\"
amountCurrencyID=\"$currency\">$price_per_unit_pretty</cbc:PriceAmount>
</cac:BasePrice>
</cac:Item>
</cac:${document_type}Line>
"
incr ctr
}
ns_return 200 text/xxx [$doc asXML -indent 2]
# ns_return 200 text/xxx [$doc asXML -indent 2 -escapeNonASCII]
<?xml version="1.0"?>
<!DOCTYPE queryset PUBLIC "-//OpenACS//DTD XQL 1.0//EN" "/usr/share/emacs/DTDs/xql.dtd">
<!-- packages/intranet-invoices/www/view-postgresql.xql -->
<!-- @author Juanjo Ruiz (juanjoruizx@yahoo.es) -->
<!-- @creation-date 2004-10-08 -->
<!-- @arch-tag ffe2b337-c79b-4b45-bfcb-41a371866d36 -->
<!-- @cvs-id $Id$ -->
<queryset>
<rdbms>
<type>postgresql</type>
<version>7.2</version>
</rdbms>
<fullquery name = "invoice_items">
<querytext>
select
i.*,
p.*,
im_category_from_id(i.item_type_id) as item_type,
im_category_from_id(i.item_uom_id) as item_uom,
p.project_nr as project_short_name,
round(i.price_per_unit * i.item_units * :rf) / :rf as amount,
to_char(round(i.price_per_unit * i.item_units * :rf) / :rf, :cur_format) as amount_formatted
from
im_invoice_items i
LEFT JOIN im_projects p on i.project_id=p.project_id
where
i.invoice_id=:invoice_id
order by
i.sort_order,
i.item_type_id;
</querytext>
</fullquery>
<fullquery name = "calc_grand_total">
<querytext>
select i.*,
round(i.grand_total * :vat / 100 * :rf) / :rf as vat_amount,
round(i.grand_total * :tax / 100 * :rf) / :rf as tax_amount,
i.grand_total
+ round(i.grand_total * :vat / 100 * :rf) / :rf
+ round(i.grand_total * :tax / 100 * :rf) / :rf
as total_due
from
(select
max(i.currency) as currency,
sum(i.amount) as subtotal,
round(sum(i.amount) * :surcharge_perc::numeric) / 100.0 as surcharge_amount,
round(sum(i.amount) * :discount_perc::numeric) / 100.0 as discount_amount,
sum(i.amount)
+ round(sum(i.amount) * :surcharge_perc::numeric) / 100.0
+ round(sum(i.amount) * :discount_perc::numeric) / 100.0
as grand_total
from
(select ii.*,
round(ii.price_per_unit * ii.item_units * :rf) / :rf as amount
from im_invoice_items ii,
im_invoices i
where i.invoice_id = ii.invoice_id
and i.invoice_id = :invoice_id
) i
) i
order by sort_order
</querytext>
</fullquery>
</queryset>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment