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