<?xml version="1.0" encoding="UTF-8"?>
<!--
    $Author: xiaobo  
    $Date: 2012-11-26 下午1:33:59  
    $Revision: 1.0  
    $Purpose: 数据表关联
-->
<a:screen xmlns:a="http://www.leaf-framework.org/application">
    <a:init-procedure/>
    <a:view package="leaf.ui.std" template="default">
        <div/>
        <script type="text/javascript"><![CDATA[

            function okFun() {
                var dataSet = $('datarelation_ds');
                // var validate = dataSet.validate();
                
                var correlation_ds = $('correlation_ds');
                var correlationRecords = correlation_ds.getSelected();
                if (correlationRecords.length > 0) {
                    var record = dataSet.getAt(0);
                    //添加表
                    var tables_ds = $('psr_report_tables_ds');
            
                    var newRecord = new Leaf.Record({
                        table_name: record.get('table_name_2'),
                        table_description: record.get('table_description_2'),
                        table_alias: record.get('table_alias_2')
                    });
            
                    tables_ds.add(newRecord);
                    //添加条件
                    var conditions_ds = $('psr_report_conditions_ds');
                    var table_join = record.get('table_join');
                    
                    for (var i = 0;i < correlationRecords.length;i++) {
                        var correlationRecord = correlationRecords[i];
                        conditions_ds.add(new Leaf.Record({
                            logic: 'AND',
                            logic_dis: 'AND',
                            field_1_category: 'FIELD',
                            field_1_category_dis: '字段',
                            field_1: correlationRecord.get('field_1'),
                            table_name_1: record.get('table_name_1'),
                            field_type_1: correlationRecord.get('field_type_1'),
                            condition_type: 'EQ',
                            condition_type_dis: '=',
                            field_2_category: 'FIELD',
                            field_2_category_dis: '字段',
                            field_2: correlationRecord.get('field_2'),
                            table_name_2: correlationRecord.get('table_name_2'),
                            field_type_2: correlationRecord.get('field_type_2'),
                            correlation_mark: record.get('correlation_mark'),
                            editor_flag: 'N'
                        }));
                    }
            
                    //关闭页面
                    closeWin();
                }else{
                    Leaf.showMessage('提示','无关联条件!');
                }
            }
            
            //表关联  数据变更
            
            function datarelationUpdateFun(dataSet, record, name, value, oldvalue) {
                if (name == 'table_join') {
                    disCorrelation(record);
                }
                if (name == 'table_name_2') {
                    var dataSet_f = $('psr_base_tables_2_fields_ds');
                    dataSet_f.setQueryParameter('table_name', value);
                    dataSet_f.setQueryParameter('flag', 'Y');
                    var field = record.getField('table_join_dis');
                    field.setReadOnly(true);
                    dataSet_f.query();
            
                    record.set('table_join', '');
                    record.set('table_join_dis', '');
                    record.set('correlation', '');
                }
            }
            
            //关联条件
            
            function disCorrelation(record) {
                var table_join = record.get('table_join');
            
                var dataSet_1 = $('psr_base_tables_1_fields_ds');
                var dataSet_2 = $('psr_base_tables_2_fields_ds');
            
                var records_1 = dataSet_1.getAll();
                var records_2 = dataSet_2.getAll();
            
                // record.set('correlation', correlation);
                var correlation_ds = $('correlation_ds');
                if (records_1.length > 0){
                    correlation_ds.removeAll();
                }
                for (var i = 0;i < records_1.length;i++) {
                    var field_1 = records_1[i].get('field_name');
                    for (var j = 0;j < records_2.length;j++) {
                        var field_2 = records_2[j].get('field_name');
                        if (field_1 == field_2) {
                            var correlation = record.get('table_alias_1') + '.' + field_1 + ' = ' + record.get('table_alias_2') + '.' + field_2;
                            if (table_join == 'LEFT_JOIN') {
                                correlation = correlation + '(+)';
                                field_2 = field_2+ '(+)';
                            }
            
                            var sysdate = new Date();
                            var correlation_mark = sysdate.getTime();
            
                            correlation_ds.add(new Leaf.Record({
                                field_1: record.get('table_alias_1') + '.' + field_1,
                                table_name_1: record.get('table_name_1'),
                                field_type_1: record.get('field_type_1'),
                                field_2: record.get('table_alias_2') + '.' + field_2,
                                table_name_2: record.get('table_name_2'),
                                field_type_2: record.get('field_type_2'),
                                correlation_mark: correlation_mark,
                                correlation: correlation
                            }));
                        }
            
            
                    }
                }
            
            }
            
            function closeWin() {
                $('report_datarelation_win').close();
            }
            
            function loadFun(){
                var field = $('datarelation_ds').getAt(0).getField('table_join_dis');
                field.setReadOnly(false);
            }
        ]]></script>
        <a:dataSets>
            <a:dataSet id="datarelation_ds">
                <a:fields>
                    <a:field name="table_name_1" readOnly="true"/>
                    <a:field name="table_description_1" readOnly="true"/>
                    <a:field name="table_alias_1" readOnly="true"/>
                    <a:field name="table_name_2" autoComplete="true" lovGridHeight="300" lovHeight="440" lovService="psr.PSR1010.psr_base_tables_lov" lovWidth="480" title="基础表">
                        <a:mapping>
                            <a:map from="table_description" to="table_description_2"/>
                            <a:map from="table_name" to="table_name_2"/>
                            <!-- <a:map from="table_alias" to="table_alias_2"/> -->
                        </a:mapping>
                    </a:field>
                    <a:field name="table_alias_2" readOnly="true"/>
                    <a:field name="table_description_2" readOnly="true"/>
                    <a:field name="correlation_mark"/>
                    <a:field name="table_join" defaultValue="DEFAULT"/>
                    <a:field name="table_join_dis" defaultValue="标准" displayField="code_value_name" options="psr_table_join_code_ds" returnField="table_join" valueField="code_value"/>
                </a:fields>
                <a:events>
                    <a:event name="update" handler="datarelationUpdateFun"/>
                </a:events>
            </a:dataSet>
            <a:dataSet id="correlation_ds" selectable="true"/>
            <a:dataSet id="psr_base_tables_1_fields_ds" fetchAll="true" model="psr.PSR1010.psr_base_tables_fields" queryUrl="${/request/@context_path}/autocrud/psr.PSR1010.psr_base_tables_fields/query?table_name=${/parameter/@table_name}"/>
            <a:dataSet id="psr_base_tables_2_fields_ds" fetchAll="true" model="psr.PSR1010.psr_base_tables_fields" queryUrl="${/request/@context_path}/autocrud/psr.PSR1010.psr_base_tables_fields/query?table_name=${/parameter/@table_name}">
                <a:events>
                    <a:event name="load" handler="loadFun"/>
                </a:events>
            </a:dataSet>
        </a:dataSets>
        <a:screenBody>
            <a:hBox labelWidth="60">
                <a:textField name="table_name_1" bindTarget="datarelation_ds" prompt="表名" width="150"/>
                <a:lov name="table_name_2" bindTarget="datarelation_ds" prompt="关联表" width="150"/>
            </a:hBox>
            <a:hBox labelWidth="60">
                <a:textField name="table_description_1" bindTarget="datarelation_ds" prompt="描述" width="150"/>
                <a:textField name="table_description_2" bindTarget="datarelation_ds" prompt="描述" width="150"/>
            </a:hBox>
            <a:hBox labelWidth="60">
                <a:textField name="table_alias_1" bindTarget="datarelation_ds" prompt="别名" width="150"/>
                <a:textField name="table_alias_2" bindTarget="datarelation_ds" prompt="别名" width="150"/>
            </a:hBox>
            <a:hBox labelWidth="60">
                <a:comboBox name="table_join_dis" bindTarget="datarelation_ds" prompt="连接方式" width="150"/>
            </a:hBox>
            <a:hBox>
                <a:label width="20"/>
                <a:grid bindTarget="correlation_ds" height="175" width="400">
                    <a:columns>
                        <a:column name="correlation" prompt="关联条件" width="375"/>
                        <!-- <a:column name="field_1" prompt="字段1"/>
                        <a:column name="table_name_1" prompt="表1"/>
                        <a:column name="field_2" prompt="字段2"/>
                        <a:column name="table_name_2" prompt="表2"/> -->
                    </a:columns>
                </a:grid>
            </a:hBox>
            <!--  <a:hBox labelWidth="60">
                <a:textArea name="correlation" bindTarget="datarelation_ds" prompt="关联关系" width="300"/>
            </a:hBox> -->
            <a:hBox height="50" labelWidth="60">
                <a:button click="okFun" text="确定"/>
                <a:button click="closeWin" text="取消"/>
            </a:hBox>
        </a:screenBody>
        <script type="text/javascript"><![CDATA[

            function getAlias(alias) {
                
                var records = $('psr_report_tables_ds').getAll();
                var length = records.length;
                var alias_number = alias.charCodeAt();
                var b_alias;
                 b_alias = String.fromCharCode(97 + length);
                /* if (alias_number < 90){
                    b_alias = String.fromCharCode(alias_number + length);
                }else{
                    var n = alias_number - 90;
                    b_alias = String.fromCharCode(65 + n);
                    
                } */
                return b_alias;
            }
            
            function init() {
                var index = '${/parameter/@index}';
                var report_datarelation_ds = $('psr_report_tables_ds');
                var record = report_datarelation_ds.getAt(index);
                var datarelation_ds = $('datarelation_ds');
            
                var table_name = record.get('table_name');
                var table_description = record.get('table_description');
                var table_alias = record.get('table_alias');
            
            
                datarelation_ds.removeAll();
            
                var table_alias_2 = getAlias(table_alias);
                var newRecord = new Leaf.Record({
                    table_name_1: table_name,
                    table_description_1: table_description,
                    table_alias_1: table_alias,
                    table_alias_2: table_alias_2
                });
            
                datarelation_ds.add(newRecord);
            
                var dataSet_1 = $('psr_base_tables_1_fields_ds');
                dataSet_1.setQueryParameter('table_name', table_name);
                dataSet_1.setQueryParameter('flag', 'Y');
                dataSet_1.query();
            }
            Leaf.onReady(init);
        ]]></script>
    </a:view>
</a:screen>