From 180d8d74c2a67a693047e1a587007c734e4f62fb Mon Sep 17 00:00:00 2001
From: lazhen <17772815105@139.com>
Date: 星期二, 23 七月 2024 14:49:29 +0800
Subject: [PATCH] 日历不可用事件添加查询按钮

---
 _Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_MatrixEditorTable.def               |   24 ++---
 _Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelExport_ButtonHeader_OnClick.def |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelExport_ButtonSearch_OnClick.def |   26 ++++++
 /dev/null                                                                                                        |   22 -----
 _Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelExport.def                     |   14 +++
 _Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_OnCreated.def                        |   10 ++
 _Main/UI/MacroPlannerWebApp/Views/Calendar_unavailable_event_view.vw                                             |    4 
 _Main/BL/Type_LibCal_SubscriberEventTable/StaticMethod_Export.qbl                                                |  101 ++++++++++++++-----------
 _Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelList.def                       |   14 +++
 _Main/BL/Type_LibCal_SubscriberEventTable/StaticMethod_GetDefaultName.qbl                                        |   10 ++
 10 files changed, 141 insertions(+), 88 deletions(-)

diff --git a/_Main/BL/Type_LibCal_SubscriberEventTable/StaticMethod_Export.qbl b/_Main/BL/Type_LibCal_SubscriberEventTable/StaticMethod_Export.qbl
index 77d0846..7cdbcf7 100644
--- a/_Main/BL/Type_LibCal_SubscriberEventTable/StaticMethod_Export.qbl
+++ b/_Main/BL/Type_LibCal_SubscriberEventTable/StaticMethod_Export.qbl
@@ -1,66 +1,79 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Export (
-  LibCal_SubscriberEventTable table
+  LibCal_SubscriberEventColumns columns,
+  LibCal_SubscriberEventRows rows
 ) as BinaryValue
 {
   TextBody:
   [*
     // 鐢勫叞楦� May-30-2024 (created)
     // lihongji Jun-8-2023 (created)
-    returnBinaryData := BinaryData::Construct();
-    tableGroupHandle := TableGroupHandle::Create( "" );
+    xmlDOMI := XMLDOMImplementation::Create();
+    xmlDOM  := xmlDOMI.CreateDocumentFromString( '<?xml version="1.0" encoding="UTF-16"?><table><name>' + LibCal_SubscriberEventTable::GetDefaultName() + '</name></table>' );
     
-    xmlImpl := XMLDOMImplementation::Create();
-    xmlDoc := xmlImpl.CreateDocument();
-    xmlSeri := xmlImpl.CreateSerializer();
+    tableElement := xmlDOM.GetElementByTagName( "table", 0 );
+    
+    //浜х嚎
+    subscribercolumnelement := xmlDOM.CreateElement( "column" );
+    subscribernameelement   := xmlDOM.CreateElement( "name" );
+    subscribertypeelement   := xmlDOM.CreateElement( "type" );
+    subscribernameelement.TextContent( '浜х嚎' );
+    subscribertypeelement.TextContent( "String" );
+    subscribercolumnelement.AppendChild( subscribernameelement );
+    subscribercolumnelement.AppendChild( subscribertypeelement );
+    //浜嬩欢
+    eventcolumnelement := xmlDOM.CreateElement( "column" );
+    eventnameelement   := xmlDOM.CreateElement( "name" );
+    eventtypeelement   := xmlDOM.CreateElement( "type" );
+    eventnameelement.TextContent( '浜嬩欢' );
+    eventtypeelement.TextContent( "String" );
+    eventcolumnelement.AppendChild( eventnameelement );
+    eventcolumnelement.AppendChild( eventtypeelement );
+    
+    tableElement.AppendChild( subscribercolumnelement ); 
+    tableElement.AppendChild( eventcolumnelement ); 
       
-    xmlTable := xmlDoc.CreateElement( "table" );
-    xmlTableName := xmlDoc.CreateElement( "name" );
-    xmlTableName.TextContent( table.Name() );
-    xmlTable.AppendChild( xmlTableName );
+    traverse ( columns, Elements, column ) {
+      columnelement := xmlDOM.CreateElement( "column" );
+      nameelement   := xmlDOM.CreateElement( "name" );
+      typeelement   := xmlDOM.CreateElement( "type" );
+      nameelement.TextContent( column.Name() );
+      typeelement.TextContent( "String" );
+      columnelement.AppendChild( nameelement );
+      columnelement.AppendChild( typeelement );
       
-    traverse ( table, LibCal_SubscriberEventColumn, column ) {
-      xmlColumn := xmlDoc.CreateElement( "column" );
-      xmlColumnName := xmlDoc.CreateElement( "name" );
-      if( column.Index() = 0 ){
-        xmlColumnName.TextContent( '浜х嚎' );
-      }else if(column.Index() = 1 ){
-        xmlColumnName.TextContent( '浜嬩欢' );
-      }else{
-        xmlColumnName.TextContent( column.Name() );
-      }
-      xmlColumn.AppendChild( xmlColumnName );
-      xmlColumnType := xmlDoc.CreateElement( "type" );
-      xmlColumnType.TextContent( "String" );
-      xmlColumn.AppendChild( xmlColumnType );
-      
-      rowTotal := table.LibCal_SubscriberEventRow( relsize );
-      for ( i := 0; i < rowTotal; i++ ) {
-        cell := select( column, LibCal_SubscriberEventCell, cell, cell.LibCal_SubscriberEventRow().RowNr() = i );
-        row := cell.LibCal_SubscriberEventRow();
-        xmlCell := xmlDoc.CreateElement( "cell" );
+      cells := selectsortedset( column, LibCal_SubscriberEventCell, cell, rows.Find( cell.LibCal_SubscriberEventRow() ) > -1, cell.LibCal_SubscriberEventRow().RowNr() );
+    
+      traverse ( cells, Elements, c ) {
         if( column.Index() = 0 ){
-          xmlCell.SetAttribute( "value", row.Subscriber() );
-        }else if(column.Index() = 1 ){
-          xmlCell.SetAttribute( "value", row.Event() );
-        }else{
-          xmlCell.SetAttribute( "value", cell.Value() );
+          row := c.LibCal_SubscriberEventRow();
+          //subscriber
+          subscribercellElement := xmlDOM.CreateElement( "cell" );
+          subscribercellElement.SetAttribute( "value", row.Subscriber() );
+          subscribercolumnelement.AppendChild( subscribercellElement );
+          //event
+          eventcellElement := xmlDOM.CreateElement( "cell" );
+          eventcellElement.SetAttribute( "value", row.Event() );
+          eventcolumnelement.AppendChild( eventcellElement );
         }
-        xmlColumn.AppendChild( xmlCell );
+        cellElement := xmlDOM.CreateElement( "cell" );
+        cellElement.SetAttribute( "value", c.Value() ); 
+        columnelement.AppendChild( cellElement );
       }
-        
-      xmlTable.AppendChild( xmlColumn );
+      tableElement.AppendChild( columnelement );  
     }
       
-    xmlDoc.AppendChild( xmlTable );
-    xmlStr := xmlSeri.WriteToString( xmlDoc );
-    tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlStr ) );
+    xmlString := xmlDOMI.CreateSerializer().WriteToString( xmlDOM )
+    
+    //info( xmlString );
+    
+    tableGroupHandle := TableGroupHandle::Create( LibCal_SubscriberEventTable::GetDefaultName() );
+    tableHandle      := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
     tableGroupHandle.Add( tableHandle );
-    //}
     
-    returnBinaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
+    binaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
     
-    return returnBinaryData.AsBinaryValue();
+    return binaryData.AsBinaryValue();
   *]
 }
diff --git a/_Main/BL/Type_LibCal_SubscriberEventTable/StaticMethod_GetDefaultName.qbl b/_Main/BL/Type_LibCal_SubscriberEventTable/StaticMethod_GetDefaultName.qbl
new file mode 100644
index 0000000..ab03a51
--- /dev/null
+++ b/_Main/BL/Type_LibCal_SubscriberEventTable/StaticMethod_GetDefaultName.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultName () as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jul-23-2024 (created)
+    return 'Calendar unavailable event';
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_MatrixEditorTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_MatrixEditorTable.def
index 4612e07..67028e6 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_MatrixEditorTable.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_MatrixEditorTable.def
@@ -17,10 +17,10 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'LibCal_SubscriberEventTable'
-            Source: 'dhTable'
+            DataType: 'structured[LibCal_SubscriberEventColumn]'
+            Source: 'dhColumns'
             Taborder: 0
-            Transformation: 'LibCal_SubscriberEventColumn.LibCal_SubscriberEventCell'
+            Transformation: 'Elements.LibCal_SubscriberEventCell'
           ]
         }
       ]
@@ -44,12 +44,10 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'LibCal_SubscriberEventTable'
-            FilterArguments: 'subscribers:dhSubscribers;eventtypes:dhEventTypes'
-            FixedFilter: 'object.FilterBySubscriberAndEventType( subscribers, eventtypes )'
-            Source: 'dhTable'
+            DataType: 'structured[LibCal_SubscriberEventRow]'
+            Source: 'dhRows'
             Taborder: 0
-            Transformation: 'LibCal_SubscriberEventRow'
+            Transformation: 'Elements'
           ]
         }
       ]
@@ -72,13 +70,11 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'LibCal_SubscriberEventTable'
+            DataType: 'structured[LibCal_SubscriberEventColumn]'
             Description: 'object.FilterByDatePeriod( Date::MinDate(), Date::MaxDate() )'
-            FilterArguments: 'period:dhDate'
-            FixedFilter: 'object.FilterByDatePeriod( period.Start(), period.End() )'
-            Source: 'dhTable'
+            Source: 'dhColumns'
             Taborder: 0
-            Transformation: 'LibCal_SubscriberEventColumn'
+            Transformation: 'Elements'
           ]
         }
       ]
@@ -110,6 +106,6 @@
     Columns: 'MatrixEditorTableColumns'
     ContextMenu: 'matrixeditorContextMenuTable'
     Rows: 'MatrixEditorTableRows'
-    Taborder: 1
+    Taborder: 2
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelExport.def b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelExport.def
index 15a8928..4178267 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelExport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelExport.def
@@ -12,7 +12,7 @@
       Properties:
       [
         Image: 'EXPORT1'
-        Taborder: 0
+        Taborder: 1
       ]
     }
     Component ButtonInitialize
@@ -22,7 +22,17 @@
       Properties:
       [
         Image: 'ARROW_CIRCLE'
-        Taborder: 1
+        Taborder: 2
+      ]
+    }
+    Component ButtonSearch
+    {
+      #keys: '[415136.0.922435407]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Search'
+        Taborder: 0
       ]
     }
   ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelList.def b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelList.def
index 3a1f26f..23f141e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelList.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelList.def
@@ -6,14 +6,24 @@
   Children:
   [
     #child: MatrixEditorTable
-    Component dhTable
+    Component dhColumns
     {
       #keys: '[415136.0.672310139]'
       BaseType: 'WebDataHolder'
-      Databinding: 'LibCal_SubscriberEventTable'
+      Databinding: 'structured[LibCal_SubscriberEventColumn]*'
       Properties:
       [
         Description: '琛�'
+        Taborder: 1
+      ]
+    }
+    Component dhRows
+    {
+      #keys: '[415136.0.922436014]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[LibCal_SubscriberEventRow]*'
+      Properties:
+      [
         Taborder: 0
       ]
     }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_OnCreated.def
index 04b4ca1..0d64dac 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_OnCreated.def
@@ -11,6 +11,16 @@
     [*
       
       this.InitializeSubscribers();
+      
+      columns     := construct( LibCal_SubscriberEventColumns );
+      rows        := construct( LibCal_SubscriberEventRows );
+      
+      traverse( dhCalendar.Data(), LibCal_SubscriberEventTable, table, table.ID() = RadioButtonGroupUseForPlanning.BoundValue() ){
+        columns  := selectset( table, LibCal_SubscriberEventColumn, column, true );
+        rows     := selectset( table, LibCal_SubscriberEventRow, row, true );
+      }
+      dhColumns.Data( &columns );
+      dhRows.Data( &rows );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelExport_ButtonHeader_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelExport_ButtonHeader_OnClick.def
index 73a9922..63682a2 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelExport_ButtonHeader_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelExport_ButtonHeader_OnClick.def
@@ -9,9 +9,9 @@
   {
     Body:
     [*
-      binaryValue := LibCal_SubscriberEventTable::Export( dhTable.Data() );
+      binaryValue := LibCal_SubscriberEventTable::Export( dhColumns.Data(), dhRows.Data() );
       
-      Application.Download( "Unavailable events.xlsx", binaryValue.AsBinaryData() );
+      Application.Download( LibCal_SubscriberEventTable::GetDefaultName() + ".xlsx", binaryValue.AsBinaryData() );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelExport_ButtonSearch_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelExport_ButtonSearch_OnClick.def
new file mode 100644
index 0000000..43d167d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelExport_ButtonSearch_OnClick.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: PanelExport/ButtonSearch
+Response OnClick () id:Response_PanelExport_ButtonSearch_OnClick
+{
+  #keys: '[415136.0.922435443]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      columns     := construct( LibCal_SubscriberEventColumns );
+      rows        := construct( LibCal_SubscriberEventRows );
+      subscribers := dhSubscribers.Data();
+      eventtypes  := dhEventTypes.Data();
+      date        := dhDate.Data();
+      traverse( dhCalendar.Data(), LibCal_SubscriberEventTable, table, table.ID() = RadioButtonGroupUseForPlanning.BoundValue() ){
+        columns  := selectset( table, LibCal_SubscriberEventColumn, column, column.FilterByDatePeriod( date.Start(), date.End() ) );
+        rows     := selectset( table, LibCal_SubscriberEventRow, row, row.FilterBySubscriberAndEventType( subscribers, eventtypes ) );
+      }
+      dhColumns.Data( &columns );
+      dhRows.Data( &rows );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelPeriods_RadioButtonGroupUseForPlanning_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelPeriods_RadioButtonGroupUseForPlanning_OnChanged.def
deleted file mode 100644
index 29c6ed7..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelPeriods_RadioButtonGroupUseForPlanning_OnChanged.def
+++ /dev/null
@@ -1,22 +0,0 @@
-Quintiq file version 2.0
-#parent: PanelPeriods/RadioButtonGroupUseForPlanning
-Response OnChanged () id:Response_PanelPeriods_RadioButtonGroupUseForPlanning_OnChanged
-{
-  #keys: '[415136.0.672310167]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebRadioButtonGroup_OnChanged'
-  QuillAction
-  {
-    Body:
-    [*
-      owner_i := dhCalendar.Data();
-      if( owner_i.LibCal_SubscriberEventTable( relsize ) < 1 ){
-        LibCal_SubscriberEventTable::InitializeTable( dhPotentialSubscribers.Data(), dhCalendar.Data() );
-      }
-      table := selectobject( owner_i, LibCal_SubscriberEventTable, table, table.ID() = this.BoundValue() );
-      
-      dhTable.Data( table );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/Calendar_unavailable_event_view.vw b/_Main/UI/MacroPlannerWebApp/Views/Calendar_unavailable_event_view.vw
index 4b625b8..6ec090a 100644
--- a/_Main/UI/MacroPlannerWebApp/Views/Calendar_unavailable_event_view.vw
+++ b/_Main/UI/MacroPlannerWebApp/Views/Calendar_unavailable_event_view.vw
@@ -107,10 +107,10 @@
           FormCalendarUnavailableEvent_MatrixEditorTable
           {
             gridColor: '#c4c4c4'
-            totalHeaderWidth: 37
+            totalHeaderWidth: 231
             attributeHeaderWidthRatio: 0.6
             nameHeaderWidthRatio: 0.4
-            columnWidth: 238
+            columnWidth: 74
             horizontalGrid: true
             verticalGrid: true
             backendState

--
Gitblit v1.9.3