<?xml version="1.0" encoding="UTF-8"?>
<!--
    $Author: DJ  
    $Date: 2013-7-4 下午5:06:06  
    $Revision: 1.0  
    $Purpose: 
-->
<bm:model xmlns:bm="http://www.leaf-framework.org/schema/bm">
    <bm:fields>
        <bm:field name="record_id"/>
        <bm:field name="cashflow_id"/>
        <bm:field name="product_name" databaseType="VARCHAR2" datatype="java.lang.String" physicalName="PRODUCT_NAME" prompt="ACR.PRODUCT_NAME"/>
        <bm:field name="project_id" databaseType="NUMBER" datatype="java.lang.Long" physicalName="PROJECT_ID"/>
        <bm:field name="project_number" databaseType="VARCHAR2" datatype="java.lang.String" physicalName="PROJECT_NUMBER" prompt="HLS.PROJECT_NUMBER"/>
        <bm:field name="project_name" databaseType="VARCHAR2" datatype="java.lang.String" physicalName="PROJECT_NAME" prompt="HLS.PROJECT_NAME"/>
        <bm:field name="contract_id" databaseType="NUMBER" datatype="java.lang.Long" physicalName="CONTRACT_ID"/>
        <bm:field name="contract_number" databaseType="VARCHAR2" datatype="java.lang.String" physicalName="CONTRACT_NUMBER" prompt="HLS.CONTRACT_NUMBER"/>
        <bm:field name="contract_name" databaseType="VARCHAR2" datatype="java.lang.String" physicalName="CONTRACT_NAME" prompt="HLS.CONTRACT_NAME"/>
        <bm:field name="invoice_kind" databaseType="VARCHAR2" datatype="java.lang.String" physicalName="INVOICE_KIND"/>
        <bm:field name="invoice_kind_desc" databaseType="VARCHAR2" datatype="java.lang.String" physicalName="INVOICE_KIND_DESC" prompt="ACR.INVOICE_TYPE"/>
        <bm:field name="due_amount" databaseType="NUMBER" datatype="java.lang.Double" physicalName="DUE_AMOUNT" prompt="应付金额"/>
        <bm:field name="cf_billing_amount" databaseType="NUMBER" datatype="java.lang.Double" physicalName="CF_BILLING_AMOUNT" prompt="ACR.BILLING_AMOUNT"/>
        <bm:field name="received_amount" databaseType="NUMBER" datatype="java.lang.Double" physicalName="RECEIVED_AMOUNT" prompt="已付金额"/>
        <bm:field name="billing_amount" databaseType="NUMBER" datatype="java.lang.Double" physicalName="BILLING_AMOUNT" prompt="ACR.THIS_BILLING_AMOUNT"/>
        <bm:field name="times" databaseType="NUMBER" datatype="java.lang.Long" physicalName="TIMES" prompt="HLS.PERIOD_NUMBER"/>
        <bm:field name="last_received_date" databaseType="DATE" datatype="java.util.Date" physicalName="LAST_RECEIVED_DATE" prompt="ACR.RECEIVED_DATE"/>
        <bm:field name="cf_item" databaseType="NUMBER" datatype="java.lang.Long" physicalName="CF_ITEM" prompt="HLS.RECEIVE_PROJECT"/>
        <bm:field name="cf_item_desc" databaseType="VARCHAR2" datatype="java.lang.String" physicalName="CF_ITEM_DESC" prompt="应付项目"/>
        <bm:field name="currency" databaseType="VARCHAR2" datatype="java.lang.String" physicalName="CURRENCY" prompt="HLS.CURRENCY"/>
        <bm:field name="currency_desc" databaseType="VARCHAR2" datatype="java.lang.String" physicalName="CURRENCY_DESC" prompt="HLS.CURRENCY"/>
        <bm:field name="exchange_rate" databaseType="NUMBER" datatype="java.lang.Double" physicalName="EXCHANGE_RATE" prompt="HLS.EXCHANGE_RATE"/>
        <bm:field name="exchange_rate_type" databaseType="VARCHAR2" datatype="java.lang.String" physicalName="EXCHANGE_RATE_TYPE" prompt="HLS.EXCHANGE_RATE_TYPE"/>
        <bm:field name="exchange_rate_type_desc" databaseType="VARCHAR2" datatype="java.lang.String" physicalName="EXCHANGE_RATE_TYPE_DESC" prompt="HLS.EXCHANGE_RATE_TYPE_DESC"/>
        <bm:field name="tax_amount" databaseType="NUMBER" datatype="java.lang.Double"/>
        <bm:field name="tax_type_rate" databaseType="NUMBER" datatype="java.lang.Double"/>
    </bm:fields>
    <bm:operations>
        <bm:operation name="query">
            <bm:query-sql><![CDATA[
            	select t.cashflow_id,
				       t.record_id,
				       t.billing_object,
				       (select c.code_value_name
				          from sys_code_values_v c
				         where c.code = 'ACR510_BILL_DETAIL_METHOD'
				           and c.code_value = t.billing_object) as billing_object_desc,
				       t.due_amount,
				       t.billing_amount,
				       round(t.billing_amount/(1+t.tax_type_rate)*t.tax_type_rate) tax_amount,
				       t.cf_billing_amount,
				       t.received_amount,
				       t.contract_id,
				       con.contract_number,
				       con.contract_name,
				       con.project_id,
				       con.project_number,
				       con.project_name,
				       t.invoice_kind,
				       (select v.code_value_name
				          from sys_code_values_v v
				         where v.code = 'ACR510_INVOICE_KIND'
				           and v.code_value = t.invoice_kind) as invoice_kind_desc,
				       t.currency,
				       (select c.currency_name
						  from gld_currency_vl c
						 where c.currency_code = t.currency) as currency_desc,
				       1 as exchange_rate,
				       'MANUAL' as exchange_rate_type,
				       (select v.rate_type_desc
				          from gld_exchange_rate_type_v v
				         where v.rate_type_code = 'MANUAL') as exchange_rate_type_desc,
				       cf.times,
				       cf.last_received_date,
				       t.cf_item,
				       (select i.description
				          from hls_cashflow_item i
				         where i.cf_item = t.cf_item) as cf_item_desc,
				       (select iv.billing_desc
				          from hls_cashflow_item_company_v iv
				         where iv.cf_item = t.cf_item
				           and iv.company_id = con.company_id) as product_name,
				           t.tax_type_rate
				  from acr_invoice_create_tmp      t,
				       con_contract_v              con,
				       con_contract_cashflow_all_v cf
				 where t.session_id = ${/session/@session_id}
				   and t.contract_id = con.contract_id
				   and t.cashflow_id = cf.cashflow_id
				 order by con.contract_id,cf.times,t.cf_item
			]]></bm:query-sql>
        </bm:operation>
        <bm:operation name="update">
            <bm:update-sql><![CDATA[
				begin
				  ACR_INVOICE_PKG.invoiceTmp_update(p_record_id				=> ${@record_id},
						                            p_invoice_kind          => ${@invoice_kind},
						                            p_billing_amount  		=> ${@billing_amount},
						                            p_tax_amount            => ${@tax_amount},
						                            p_product_name          => ${@product_name},
						                            p_user_id			  	=> ${/session/@user_id});
				end;
			]]></bm:update-sql>
        </bm:operation>
        <bm:operation name="execute">
            <bm:update-sql><![CDATA[
				begin
					ACP_INVOICE_PKG.create_invoice(p_session_id           => ${/session/@session_id},
						                           p_company_id           => ${@company_id},
						                           p_invoice_date         => to_date(${@invoice_date},'yyyy-mm-dd'),
						                           p_accounting_date      => to_date(${@accounting_date},'yyyy-mm-dd'),
						                           p_user_id			  => ${/session/@user_id},
						                           p_role_id			  => ${/session/@role_id});
				end;
			]]></bm:update-sql>
        </bm:operation>
    </bm:operations>
</bm:model>
