Commit cd268764 authored by taoruidan18083's avatar taoruidan18083

I-22569【建机】提前还款客户收入确认逻辑优化

parent c2070064
......@@ -42,7 +42,7 @@
<bm:operation name="update">
<bm:update-sql><![CDATA[
BEGIN
hls_monthend_new_pkg.advance_finance_income(
hls_monthend_new_pkg.finance_income_advance_job(
p_date => to_date(${@calc_end_date},'YYYY-MM-DD'),
p_company_id => ${/session/@company_id},
p_user_id => ${/session/@user_id});
......
<?xml version="1.0" encoding="UTF-8"?>
<!--
$Author: qwm
$Date: 2013-12-28 下午1:31:12
$Revision: 1.0
$Purpose:
$Author: qwm
$Date: 2013-12-28 下午1:31:12
$Revision: 1.0
$Purpose:
-->
<bm:model xmlns:bm="http://www.leaf-framework.org/schema/bm" xmlns:f="leaf.database.features" alias="t1" baseTable="CON_UNEARNED_FINANCE_INCOME">
<bm:fields>
......@@ -54,14 +54,286 @@
<bm:primary-key>
<bm:pk-field name="record_id"/>
</bm:primary-key>
<bm:operations>
<bm:operation name="query">
<bm:query-sql><![CDATA[
select * from(
SELECT (row_number() over(order by t1.contract_id)) AS seq,
t1.RECORD_ID,
t1.COMPANY_ID,
t1.CONTRACT_ID,
t1.INTERNAL_PERIOD_NUM,
t1.CF_ITEM,
t1.SEQ_IN_PERIOD,
t1.UNEARNED_FINANCE_INCOME,
t1.FINANCING_COST,
t1.MAIN_BUSINESS_INCOME,
t1.MAIN_BUSINESS_COST,
t1.UNEARNED_FINANCE_INCOME_BALANC,
t1.FINANCE_INCOME_RECOGNIZED,
t1.WEIGHT_FACTOR,
t1.TOTAL_WEIGHT,
t1.FACTOR_DAYS,
t1.FACTOR_OUTSTANDING_PRINCIPAL,
t1.FACTOR_INTEREST_ACCRUAL_BALANC,
t1.FACTOR_RESERVED1,
t1.FACTOR_RESERVED2,
t1.FACTOR_RESERVED3,
t1.CASHFLOW_ID,
t1.TIMES,
t1.CF_TYPE,
t1.CALC_START_DATE,
t1.CALC_END_DATE,
(select p.project_name
from prj_project p, con_contract c
where c.contract_id = t1.contract_id
and p.project_id = c.project_id) AS project_name,
(select c.finance_amount
from con_contract c
where c.contract_id = t1.contract_id) AS finance_amount,
((CASE
WHEN t1.cf_item = 8 THEN
(SELECT to_char(cf1.due_date, 'yyyy/mm/dd')
FROM con_contract_cashflow cf1
WHERE cf1.contract_id = t1.contract_id
AND cf1.cf_item = t1.cf_item) || '-' ||
(SELECT TO_CHAR(cf.due_date, 'yyyy/mm/dd')
FROM con_contract_cashflow cf
WHERE cf.cashflow_id = t1.cashflow_id)
ELSE
((SELECT to_char(cf1.due_date, 'yyyy/mm/dd')
FROM con_contract_cashflow cf1
WHERE cf1.contract_id = t1.contract_id
AND cf1.cf_item = t1.cf_item
AND cf1.times =
(SELECT cf.times - 1
FROM con_contract_cashflow cf
WHERE cf.cashflow_id = t1.cashflow_id)) ||
nvl2((Select to_char(cf1.due_date, 'yyyy/mm/dd')
From con_contract_cashflow cf1
Where cf1.contract_id = t1.contract_id
And cf1.cf_item = t1.cf_item
And cf1.times =
(Select cf.times - 1
From con_contract_cashflow cf
Where cf.cashflow_id = t1.cashflow_id)),
'-',
'') ||
(SELECT TO_CHAR(cf.due_date - 1, 'yyyy/mm/dd')
FROM con_contract_cashflow cf
WHERE cf.cashflow_id = t1.cashflow_id))
END)) AS period,
(select c.interest
from con_contract_cashflow c
where c.cashflow_id = t1.cashflow_id) AS interest,
round((select c.int_rate
from con_contract c
where c.contract_id = t1.contract_id),
4) AS int_rate_implicit,
(to_char(t1.calc_start_date, 'yyyy/mm/dd') || '-' ||
to_char(t1.calc_end_date, 'yyyy/mm/dd')) AS calc_period,
(t1.calc_end_date - t1.calc_start_date + 1) AS calc_date_count,
(t1.unearned_finance_income *
(select decode(t.tax_type_id,
1,
1,
1 + (select c.tax_type_rate
from fnd_tax_type_codes c
where c.tax_type_id = t.tax_type_id))
from con_contract t
where t.contract_id = t1.contract_id)) AS vat_unearned_finance_income,
ROUND((select sum(t.unearned_finance_income *
(select decode(t.tax_type_id,
1,
1,
1 +
(select c.tax_type_rate
from fnd_tax_type_codes c
where c.tax_type_id = t.tax_type_id))
from con_contract t
where t.contract_id = t1.contract_id))
from con_unearned_finance_income t
where t.contract_id = t1.contract_id
and t.internal_period_num = ${@internal_period_num}),
(select c.PRECISION
from gld_currency c, con_contract ct
where c.currency_code = ct.currency
and ct.contract_id = t1.contract_id)) AS current_month_vat_income,
(select sum(t.unearned_finance_income)
from con_unearned_finance_income t
where t.contract_id = t1.contract_id
and t.internal_period_num = ${@internal_period_num}) AS current_month_income,
(select t.contract_number
from con_contract t
where t.contract_id = t1.contract_id) AS contract_number,
(select t.contract_name
from con_contract t
where t.contract_id = t1.contract_id) AS contract_name,
t1.adjustvat,
t1.adjustvat13
FROM CON_UNEARNED_FINANCE_INCOME t1
WHERE t1.internal_period_num = ${@internal_period_num}
and exists (Select 1
From con_contract cc
Where t1.contract_id = cc.contract_id
And cc.data_class = 'NORMAL'
And t1.cf_item In (1, 8)
And ((t1.cf_item = 1 And
cc.contract_status In
('TERMINATE', 'INCEPT', 'ETING', 'REPURING')) Or
(t1.cf_item = 8 And
cc.contract_status In ('TERMINATE', 'INCEPT'))))
and exists (select 1
from con_contract_cashflow c
where c.cashflow_id = t1.cashflow_id
and c.interest is not null)
AND to_char(t1.calc_end_date, 'yyyy-mm-dd') = ${@calc_end_date}
AND t1.cashflow_id in
(select cw.cashflow_id
from con_contract_cashflow cw
where cw.cf_direction not in ('NONCASH'))
union
SELECT (row_number() over(order by t1.contract_id)) AS seq,
t1.RECORD_ID,
t1.COMPANY_ID,
t1.CONTRACT_ID,
t1.INTERNAL_PERIOD_NUM,
t1.CF_ITEM,
t1.SEQ_IN_PERIOD,
t1.UNEARNED_FINANCE_INCOME,
t1.FINANCING_COST,
t1.MAIN_BUSINESS_INCOME,
t1.MAIN_BUSINESS_COST,
t1.UNEARNED_FINANCE_INCOME_BALANC,
t1.FINANCE_INCOME_RECOGNIZED,
t1.WEIGHT_FACTOR,
t1.TOTAL_WEIGHT,
t1.FACTOR_DAYS,
t1.FACTOR_OUTSTANDING_PRINCIPAL,
t1.FACTOR_INTEREST_ACCRUAL_BALANC,
t1.FACTOR_RESERVED1,
t1.FACTOR_RESERVED2,
t1.FACTOR_RESERVED3,
t1.CASHFLOW_ID,
t1.TIMES,
t1.CF_TYPE,
t1.CALC_START_DATE,
t1.CALC_END_DATE,
(select p.project_name
from prj_project p, con_contract c
where c.contract_id = t1.contract_id
and p.project_id = c.project_id) AS project_name,
(select c.finance_amount
from con_contract c
where c.contract_id = t1.contract_id) AS finance_amount,
((CASE
WHEN t1.cf_item = 8 THEN
(SELECT to_char(cf1.due_date, 'yyyy/mm/dd')
FROM con_contract_cashflow cf1
WHERE cf1.contract_id = t1.contract_id
AND cf1.cf_item = t1.cf_item) || '-' ||
(SELECT TO_CHAR(cf.due_date, 'yyyy/mm/dd')
FROM con_contract_cashflow cf
WHERE cf.cashflow_id = t1.cashflow_id)
ELSE
((SELECT to_char(cf1.due_date, 'yyyy/mm/dd')
FROM con_contract_cashflow cf1
WHERE cf1.contract_id = t1.contract_id
AND cf1.cf_item = t1.cf_item
AND cf1.times =
(SELECT cf.times - 1
FROM con_contract_cashflow cf
WHERE cf.cashflow_id = t1.cashflow_id)) ||
nvl2((Select to_char(cf1.due_date, 'yyyy/mm/dd')
From con_contract_cashflow cf1
Where cf1.contract_id = t1.contract_id
And cf1.cf_item = t1.cf_item
And cf1.times =
(Select cf.times - 1
From con_contract_cashflow cf
Where cf.cashflow_id = t1.cashflow_id)),
'-',
'') ||
(SELECT TO_CHAR(cf.due_date - 1, 'yyyy/mm/dd')
FROM con_contract_cashflow cf
WHERE cf.cashflow_id = t1.cashflow_id))
END)) AS period,
(select c.interest
from con_contract_cashflow c
where c.cashflow_id = t1.cashflow_id) AS interest,
round((select c.int_rate
from con_contract c
where c.contract_id = t1.contract_id),
4) AS int_rate_implicit,
(to_char(t1.calc_start_date, 'yyyy/mm/dd') || '-' ||
to_char(t1.calc_end_date, 'yyyy/mm/dd')) AS calc_period,
(t1.calc_end_date - t1.calc_start_date + 1) AS calc_date_count,
(t1.unearned_finance_income *
(select decode(t.tax_type_id,
1,
1,
1 + (select c.tax_type_rate
from fnd_tax_type_codes c
where c.tax_type_id = t.tax_type_id))
from con_contract t
where t.contract_id = t1.contract_id)) AS vat_unearned_finance_income,
ROUND((select sum(t.unearned_finance_income *
(select decode(t.tax_type_id,
1,
1,
1 +
(select c.tax_type_rate
from fnd_tax_type_codes c
where c.tax_type_id = t.tax_type_id))
from con_contract t
where t.contract_id = t1.contract_id))
from con_unearned_finance_income t
where t.contract_id = t1.contract_id
and t.internal_period_num = ${@internal_period_num}),
(select c.PRECISION
from gld_currency c, con_contract ct
where c.currency_code = ct.currency
and ct.contract_id = t1.contract_id)) AS current_month_vat_income,
(select sum(t.unearned_finance_income)
from con_unearned_finance_income t
where t.contract_id = t1.contract_id
and t.internal_period_num = ${@internal_period_num}) AS current_month_income,
(select t.contract_number
from con_contract t
where t.contract_id = t1.contract_id) AS contract_number,
(select t.contract_name
from con_contract t
where t.contract_id = t1.contract_id) AS contract_name,
t1.adjustvat,
t1.adjustvat13
FROM CON_UNEARNED_FINANCE_INCOME t1
WHERE t1.internal_period_num <> ${@internal_period_num}
and exists (Select 1
From con_contract cc
Where t1.contract_id = cc.contract_id
And cc.data_class = 'NORMAL'
And t1.cf_item In (1, 8)
And cc.contract_status In ('INCEPT'))
and (select sum(nvl(ccc.due_amount, 0) - nvl(ccc.received_amount, 0))
from con_contract_cashflow ccc
where ccc.contract_id = t1.contract_id
and ccc.cf_status = 'RELEASE'
and ccc.cf_direction = 'INFLOW'
and ccc.cf_item in (1, 2, 8, 9)) = 0
and t1.cashflow_id in
(select cw.cashflow_id
from con_contract_cashflow cw
where cw.cf_direction not in ('NONCASH'))) t1 #WHERE_CLAUSE#
]]></bm:query-sql>
</bm:operation>
</bm:operations>
<bm:query-fields>
<bm:query-field field="company_id" queryOperator="="/>
<bm:query-field field="finance_income_recognized" queryExpression="t1.finance_income_recognized=${@finance_income_recognized}"/>
</bm:query-fields>
<bm:data-filters>
<bm:data-filter enforceOperations="query" expression="(t1.internal_period_num = ${@internal_period_num} or (t1.internal_period_num > ${@internal_period_num} and exists(select 1 from con_contract_cashflow ccc where ccc.cashflow_id = t1.cashflow_id and ccc.write_off_flag = 'FULL' and to_char(ccc.full_write_off_date, 'yyyy-mm') = to_char(to_date(${@calc_end_date},'yyyy-mm-dd'),'yyyy-mm') and trunc(ccc.due_date) > trunc(to_date(${@calc_end_date},&apos;yyyy-mm-dd&apos;))))) and exists (Select 1 From con_contract cc Where t1.contract_id = cc.contract_id And cc.data_class = &apos;NORMAL&apos; And t1.cf_item In (1, 8) And ((t1.cf_item = 1 And cc.contract_status In (&apos;TERMINATE&apos;, &apos;INCEPT&apos;, &apos;ETING&apos;, &apos;REPURING&apos;)) Or (t1.cf_item = 8 And cc.contract_status In (&apos;TERMINATE&apos;, &apos;INCEPT&apos;))) ) and exists (select 1 from con_contract_cashflow c where c.cashflow_id = t1.cashflow_id and c.interest is not null)"/>
<bm:data-filter enforceOperations="query" expression="(to_char(t1.calc_end_date,&apos;yyyy-mm-dd&apos;) = ${@calc_end_date} or (to_char(t1.calc_end_date,&apos;yyyy-mm-dd&apos;) > ${@calc_end_date} and exists (select 1 from con_contract_cashflow ccc where ccc.cashflow_id = t1.cashflow_id and ccc.write_off_flag = 'FULL' and to_char(ccc.full_write_off_date, 'yyyy-mm') = to_char(to_date(${@calc_end_date},'yyyy-mm-dd'),'yyyy-mm') and trunc(ccc.due_date) > trunc(to_date(${@calc_end_date},&apos;yyyy-mm-dd&apos;)))))"/>
<!--<bm:data-filters>
<bm:data-filter enforceOperations="query" expression="(t1.internal_period_num = ${@internal_period_num} or (t1.internal_period_num > ${@internal_period_num} and exists(select 1 from con_contract_cashflow ccc where ccc.cashflow_id = t1.cashflow_id and ccc.cf_status='RELEASE' and ccc.write_off_flag = 'FULL' and to_char(ccc.full_write_off_date, 'yyyy-mm') = to_char(to_date(${@calc_end_date},'yyyy-mm-dd'),'yyyy-mm') and trunc(ccc.due_date) > trunc(to_date(${@calc_end_date},&apos;yyyy-mm-dd&apos;))) and (select sum(nvl(ccc.due_amount, 0) - nvl(ccc.received_amount, 0)) from con_contract_cashflow ccc where ccc.contract_id = t1.contract_id and ccc.cf_status = 'RELEASE' and ccc.cf_direction = 'INFLOW' and ccc.cf_item in (1, 2, 8, 9)) = 0 and exists (Select 1 From con_contract cc Where t1.contract_id = cc.contract_id And cc.data_class = 'NORMAL' and cc.contract_status In ('INCEPT')))) and exists (Select 1 From con_contract cc Where t1.contract_id = cc.contract_id And cc.data_class = &apos;NORMAL&apos; And t1.cf_item In (1, 8) And ((t1.cf_item = 1 And cc.contract_status In (&apos;TERMINATE&apos;, &apos;INCEPT&apos;, &apos;ETING&apos;, &apos;REPURING&apos;)) Or (t1.cf_item = 8 And cc.contract_status In (&apos;TERMINATE&apos;, &apos;INCEPT&apos;))) ) and exists (select 1 from con_contract_cashflow c where c.cashflow_id = t1.cashflow_id and c.interest is not null)"/>
<bm:data-filter enforceOperations="query" expression="(to_char(t1.calc_end_date,&apos;yyyy-mm-dd&apos;) = ${@calc_end_date} or (to_char(t1.calc_end_date,&apos;yyyy-mm-dd&apos;) > ${@calc_end_date} and exists (select 1 from con_contract_cashflow ccc where ccc.cashflow_id = t1.cashflow_id and ccc.cf_status='RELEASE' and ccc.write_off_flag = 'FULL' and to_char(ccc.full_write_off_date, 'yyyy-mm') = to_char(to_date(${@calc_end_date},'yyyy-mm-dd'),'yyyy-mm') and trunc(ccc.due_date) > trunc(to_date(${@calc_end_date},&apos;yyyy-mm-dd&apos;)))and (select sum(nvl(ccc.due_amount, 0) - nvl(ccc.received_amount, 0)) from con_contract_cashflow ccc where ccc.contract_id = t1.contract_id and ccc.cf_status = 'RELEASE' and ccc.cf_direction = 'INFLOW' and ccc.cf_item in (1, 2, 8, 9)) = 0 and exists (Select 1 From con_contract cc Where t1.contract_id = cc.contract_id And cc.data_class = 'NORMAL' and cc.contract_status In ('INCEPT'))))"/>
<bm:data-filter enforceOperations="query" expression="t1.cashflow_id in (select cw.cashflow_id from con_contract_cashflow cw where cw.cf_direction not in ('NONCASH'))"/>
<!-- <bm:data-filter enforceOperations="query" expression="t1.contract_id in (select contract_id from con_contract t where nvl(t.fraud_flag,'N') !='Y')"/>-->
</bm:data-filters>
</bm:data-filters>-->
</bm:model>
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