From 0d6690da8177b3dab9a714dbb9ec3e3344631e9a Mon Sep 17 00:00:00 2001
From: lazhen <17772815105@139.com>
Date: 星期三, 12 六月 2024 11:23:25 +0800
Subject: [PATCH] 批量创建的事件逻辑修正

---
 _Main/BL/Type_LibCal_Event/StaticMethod_CreateUpdateFromUI.qbl |   62 +++++++++++++++++++++++++++++--
 1 files changed, 58 insertions(+), 4 deletions(-)

diff --git a/_Main/BL/Type_LibCal_Event/StaticMethod_CreateUpdateFromUI.qbl b/_Main/BL/Type_LibCal_Event/StaticMethod_CreateUpdateFromUI.qbl
index 812c8aa..76e31f8 100644
--- a/_Main/BL/Type_LibCal_Event/StaticMethod_CreateUpdateFromUI.qbl
+++ b/_Main/BL/Type_LibCal_Event/StaticMethod_CreateUpdateFromUI.qbl
@@ -33,21 +33,75 @@
   Date periodStartDate_i,
   Number nrOfOccurrences_i,
   Date periodEndDate_i,
-  LibCal_Calendars subscribers_i
+  LibCal_Calendars subscribers_i,
+  Boolean ismultiple
 ) as LibCal_Event
 {
   Description: 'Create and/or update an Event and its LeadingParticipation, based on information from the UI.'
   TextBody:
   [*
-    event := LibCal_Event::CreateUpdateFromUI( owner_i, participation_i, subject_i, description_i, type_i, capacity_i, category_i, isDefault_i, 
+    //浜嬩欢鍒涘缓浜屽紑鏂规硶
+    //info( startDate_i, startTimeOfDay_i, endDate_i, endTimeOfDay_i, isAllDay_i, recurrenceInterval_i, patternType_i
+    //      , patternDaily_IsEveryWeekday_i, periodType_i, periodStartDate_i, nrOfOccurrences_i, periodEndDate_i );
+    //鏌ヨ鏄惁宸叉湁鍚屽悕浜嬩欢
+    event := selectobject( owner_i, Event, event, event.Subject() = subject_i 
+                     and event.StartTimeOfDay() = startTimeOfDay_i 
+                     and event.EndTimeOfDay() = endTimeOfDay_i 
+                     and event.EventType() = eventtype_i );
+    //鍙湁閫氳繃鎵归噺鍒涘缓鐣岄潰涓斿凡鏈夊悓鍚嶄簨浠惰繘鍏ヤ笅闈㈡搷浣�
+    if( ismultiple and not isnull( event ) ){
+      startdate := startDate_i;
+      enddate   := startDate_i;
+      dates := construct( Dates );
+      dates.Add( startDate_i );
+      //鑾峰彇鏃т簨浠剁殑寮�濮嬩簨浠跺拰缁撴潫浜嬩欢锛屼互鍙婃墍鏈夋椂闂寸偣
+      traverse( event, Participation.ExplicitTimeInterval, eti ){
+        if( startdate > eti.Start().Date() ){
+          startdate := eti.Start().Date();
+        }
+        if( enddate < eti.Start().Date() ) {
+          enddate := eti.Start().Date();
+        }
+        if( not exists( dates, Elements, e, e = eti.Start().Date() ) ){
+          dates.Add( eti.Start().Date() );
+        }
+      }
+      //淇敼鏃т簨浠剁殑闂撮殧
+      nrOfOccurrences_i := enddate - startdate + 1;
+      startDate_i := startdate;
+      endDate_i   := startdate;
+      periodStartDate_i := startdate;
+      periodEndDate_i := enddate;
+    //  info( startDate_i, startTimeOfDay_i, endDate_i, endTimeOfDay_i, isAllDay_i, recurrenceInterval_i, patternType_i
+    //      , patternDaily_IsEveryWeekday_i, periodType_i, periodStartDate_i, nrOfOccurrences_i, periodEndDate_i );
+      event := LibCal_Event::CreateUpdateFromUI( owner_i, event.LeadingParticipation(), subject_i, description_i, type_i, capacity_i, category_i, isDefault_i, 
                                       startDate_i, startTimeOfDay_i, endDate_i, endTimeOfDay_i, isAllDay_i, 
                                       isRecurring_i, recurrenceInterval_i,
                                       patternType_i, patternDaily_IsEveryWeekday_i, patternWeekly_Weekdays_i, 
                                       patternMonthly_IsDay_i, patternMonthly_Day_i, patternMonthly_WeekOfMonth_i, patternMonthly_DayOfWeek_i,
                                       patternYearly_IsDate_i, patternYearly_Month_i, patternYearly_Day_i, patternYearly_WeekOfMonth_i, patternYearly_DayOfWeek_i,
                                       periodType_i, periodStartDate_i, nrOfOccurrences_i, periodEndDate_i, subscribers_i );
-    
-    event.EventType( relset, eventtype_i );
+      //鍒犳帀涓嶉渶瑕佺殑鏃堕棿鐐�
+      timeIntervals := construct( LibCal_ExplicitTimeIntervals );
+      traverse( event, Participation.ExplicitTimeInterval, eti ){
+    //    info( '------------------------------', eti.Start(), eti.End(), exists( dates, Elements, e, e = eti.Start().Date() ), '------------------', dates.Find( eti.Start().Date() ) );
+        if( dates.Find( eti.Start().Date() ) < 0 ){
+          timeIntervals.Add( eti );
+        }
+      }
+      LibCal_ExplicitTimeInterval::Delete( timeIntervals, true );
+    } else {
+      event := LibCal_Event::CreateUpdateFromUI( owner_i, participation_i, subject_i, description_i, type_i, capacity_i, category_i, isDefault_i, 
+                                      startDate_i, startTimeOfDay_i, endDate_i, endTimeOfDay_i, isAllDay_i, 
+                                      isRecurring_i, recurrenceInterval_i,
+                                      patternType_i, patternDaily_IsEveryWeekday_i, patternWeekly_Weekdays_i, 
+                                      patternMonthly_IsDay_i, patternMonthly_Day_i, patternMonthly_WeekOfMonth_i, patternMonthly_DayOfWeek_i,
+                                      patternYearly_IsDate_i, patternYearly_Month_i, patternYearly_Day_i, patternYearly_WeekOfMonth_i, patternYearly_DayOfWeek_i,
+                                      periodType_i, periodStartDate_i, nrOfOccurrences_i, periodEndDate_i, subscribers_i );
+    }
+    if( not isnull( event ) ){
+      event.EventType( relset, eventtype_i );
+    }
     
     return event;
   *]

--
Gitblit v1.9.3