summaryrefslogtreecommitdiffstats
path: root/branches/sca-java-0.99/samples/quote-xquery/src/main/resources/META-INF/sca/quote_join_external_references.xq
blob: d6c63560806278b49858ed1d7af6c0a5d9848b8f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
declare namespace quoteJoin="scaservice:java/xquery.quote.ExternalReferencesQuoteJoin";

declare namespace quoteCalculator="scareference:java/xquery.quote.QuoteCalculator";

declare namespace priceQuoteProvider="scareference:java/xquery.quote.PriceQuoteProviderNodeInfo";
declare namespace availQuoteProvider="scareference:java/xquery.quote.AvailQuoteProviderNodeInfo";

declare variable $quoteCalculator external;

declare variable $priceQuoteProvider external;
declare variable $availQuoteProvider external;

declare function quoteJoin:joinPriceAndAvailQuotes($taxRate) {
let $priceQuoteDoc := priceQuoteProvider:providePriceQuote($priceQuoteProvider)
let $availQuoteDoc := availQuoteProvider:provideAvailQuote($availQuoteProvider, 'dummy')
return
<quote>
    <name>{ data($priceQuoteDoc/priceQuote/customerName) }</name>
    <address>{ concat($priceQuoteDoc/priceQuote/shipAddress/@street , ",", $priceQuoteDoc/priceQuote/shipAddress/@city ,",", fn:upper-case($priceQuoteDoc/priceQuote/shipAddress/@state) , ",", $priceQuoteDoc/priceQuote/shipAddress/@zip) }</address>
    {
        for $priceRequest in $priceQuoteDoc/priceQuote/priceRequests/priceRequest,
            $availRequest in $availQuoteDoc/availQuote/availRequest
        where data($priceRequest/widgetId) = data($availRequest/widgetId)
        return
            <quoteResponse>
                <widgetId>{ data($priceRequest/widgetId) }</widgetId>
                <unitPrice>{ data($priceRequest/price) }</unitPrice>
                <requestedQuantity>{ data($availRequest/requestedQuantity) }</requestedQuantity>
                <fillOrder>{ data($availRequest/quantityAvail) }</fillOrder>
                {
                    for $shipDate in $availRequest/shipDate
                    return
                        <shipDate>{ data($shipDate) }</shipDate>
                }
                <taxRate>{ $taxRate }</taxRate>
                <totalCost>{ quoteCalculator:calculateTotalPrice(
                				  $quoteCalculator,
                				  
                				  $taxRate,

                                  $availRequest/requestedQuantity,

                                  $priceRequest/price,

                                  $availRequest/quantityAvail) }</totalCost>
            </quoteResponse>
    }
    </quote>
};