@@ -6,10 +6,21 @@ import { WeekendExportType } from './index.types';
66import { displaySnackNotification } from '@services/states/app' ;
77import { getMessageByCode } from '@services/i18n/translation' ;
88import { schedulesState } from '@states/schedules' ;
9- import { WeekendMeetingDataType } from '@definition/schedules' ;
10- import { schedulesWeekendData } from '@services/app/schedules' ;
9+ import {
10+ OutgoingSpeakersScheduleType ,
11+ SchedWeekType ,
12+ WeekendMeetingDataType ,
13+ } from '@definition/schedules' ;
14+ import {
15+ groupOutgoingSpeakersByDate ,
16+ scheduleOutgoingSpeakers ,
17+ schedulesWeekendData ,
18+ } from '@services/app/schedules' ;
1119import { JWLangLocaleState , userDataViewState } from '@states/settings' ;
12- import { TemplateWeekendMeeting } from '@views/index' ;
20+ import {
21+ TemplateOutgoingSpeakersSchedule ,
22+ TemplateWeekendMeeting ,
23+ } from '@views/index' ;
1324import { headerForScheduleState } from '@states/field_service_groups' ;
1425import { Week } from '@definition/week_type' ;
1526import { WEEK_TYPE_NO_MEETING } from '@constants/index' ;
@@ -20,6 +31,15 @@ const useWeekendExport = (onClose: WeekendExportType['onClose']) => {
2031 const congName = useAtomValue ( headerForScheduleState ) ;
2132 const sourceLang = useAtomValue ( JWLangLocaleState ) ;
2233
34+ const [
35+ exportWeekendMeetingScheduleIsChecked ,
36+ setWeekendMeetingScheduleIsChecked ,
37+ ] = useState ( true ) ;
38+ const [
39+ exportOutgoingSpeakersScheduleIsChecked ,
40+ setOutgoingSpeakersScheduleIsChecked ,
41+ ] = useState ( true ) ;
42+
2343 const [ startWeek , setStartWeek ] = useState ( '' ) ;
2444 const [ endWeek , setEndWeek ] = useState ( '' ) ;
2545 const [ isProcessing , setIsProcessing ] = useState ( false ) ;
@@ -28,7 +48,56 @@ const useWeekendExport = (onClose: WeekendExportType['onClose']) => {
2848
2949 const handleSetEndWeek = ( value : string ) => setEndWeek ( value ) ;
3050
31- const handleExportSchedule = async ( ) => {
51+ const exportWeekendMeetingSchedule = async ( weeksList : SchedWeekType [ ] ) => {
52+ const meetingData : WeekendMeetingDataType [ ] = [ ] ;
53+
54+ for ( const schedule of weeksList ) {
55+ const data = schedulesWeekendData ( schedule , dataView ) ;
56+ meetingData . push ( data ) ;
57+ }
58+
59+ const firstWeek = meetingData . at ( 0 ) . weekOf . replaceAll ( '/' , '' ) ;
60+ const lastWeek = meetingData . at ( - 1 ) . weekOf . replaceAll ( '/' , '' ) ;
61+
62+ const blob = await pdf (
63+ < TemplateWeekendMeeting
64+ data = { meetingData }
65+ cong_name = { congName }
66+ lang = { sourceLang }
67+ />
68+ ) . toBlob ( ) ;
69+
70+ const filename = `WM_${ firstWeek } -${ lastWeek } .pdf` ;
71+
72+ saveAs ( blob , filename ) ;
73+ } ;
74+
75+ const exportOutgoingSpeakersSchedule = async ( weeksList : SchedWeekType [ ] ) => {
76+ const allItems : OutgoingSpeakersScheduleType = [ ] ;
77+
78+ for ( const schedule of weeksList ) {
79+ const data = scheduleOutgoingSpeakers ( schedule ) ;
80+ allItems . push ( ...data ) ;
81+ }
82+
83+ const groupedSchedules = groupOutgoingSpeakersByDate ( allItems ) ;
84+
85+ const firstWeek = weeksList [ 0 ] . weekOf . replaceAll ( '/' , '' ) ;
86+ const lastWeek = weeksList . at ( - 1 ) . weekOf . replaceAll ( '/' , '' ) ;
87+
88+ const blob = await pdf (
89+ < TemplateOutgoingSpeakersSchedule
90+ data = { groupedSchedules }
91+ congregation = { congName }
92+ lang = { sourceLang }
93+ />
94+ ) . toBlob ( ) ;
95+
96+ const filename = `OS_${ firstWeek } -${ lastWeek } .pdf` ;
97+ saveAs ( blob , filename ) ;
98+ } ;
99+
100+ const handleExportSchedules = async ( ) => {
32101 if ( startWeek . length === 0 || endWeek . length === 0 ) return ;
33102
34103 try {
@@ -54,27 +123,13 @@ const useWeekendExport = (onClose: WeekendExportType['onClose']) => {
54123 return isValid ;
55124 } ) ;
56125
57- const meetingData : WeekendMeetingDataType [ ] = [ ] ;
58-
59- for ( const schedule of weeksList ) {
60- const data = schedulesWeekendData ( schedule , dataView ) ;
61- meetingData . push ( data ) ;
126+ if ( exportWeekendMeetingScheduleIsChecked ) {
127+ await exportWeekendMeetingSchedule ( weeksList ) ;
62128 }
63129
64- const firstWeek = meetingData . at ( 0 ) . weekOf . replaceAll ( '/' , '' ) ;
65- const lastWeek = meetingData . at ( - 1 ) . weekOf . replaceAll ( '/' , '' ) ;
66-
67- const blob = await pdf (
68- < TemplateWeekendMeeting
69- data = { meetingData }
70- cong_name = { congName }
71- lang = { sourceLang }
72- />
73- ) . toBlob ( ) ;
74-
75- const filename = `WM_${ firstWeek } -${ lastWeek } .pdf` ;
76-
77- saveAs ( blob , filename ) ;
130+ if ( exportOutgoingSpeakersScheduleIsChecked ) {
131+ await exportOutgoingSpeakersSchedule ( weeksList ) ;
132+ }
78133
79134 setIsProcessing ( false ) ;
80135 onClose ?.( ) ;
@@ -92,11 +147,21 @@ const useWeekendExport = (onClose: WeekendExportType['onClose']) => {
92147 }
93148 } ;
94149
150+ const toggleExportWeekendMeetingSchedule = ( ) =>
151+ setWeekendMeetingScheduleIsChecked ( ( prev ) => ! prev ) ;
152+
153+ const toggleExportOutgoingSpeakersSchedule = ( ) =>
154+ setOutgoingSpeakersScheduleIsChecked ( ( prev ) => ! prev ) ;
155+
95156 return {
96157 isProcessing,
97158 handleSetStartWeek,
98159 handleSetEndWeek,
99- handleExportSchedule,
160+ handleExportSchedules,
161+ toggleExportWeekendMeetingSchedule,
162+ toggleExportOutgoingSpeakersSchedule,
163+ exportOutgoingSpeakersScheduleIsChecked,
164+ exportWeekendMeetingScheduleIsChecked,
100165 } ;
101166} ;
102167
0 commit comments