private void printRotaToolStripMenuItem_Click(object sender, EventArgs e) { if (SelectedItems.Count() == 0) { return; } RotaPrintMenuFrm frm = new RotaPrintMenuFrm(); if (frm.ShowDialog() != DialogResult.OK) { return; } int[] Weeks; //get an int array of week numbers if (frm.SelectedPrintSelection == RotaPrintMenuFrm.PrintSelection.AllWeeks) { Weeks = Enumerable.Range(1, Settings.Instance.rotaweekcount).ToArray(); // new int[] { 1, 2, 3, 4, 5, 6 }; } else { Weeks = frm.SelectedWeeks; } //get how many pages there will be (amount of weeks * amount of workers) int totalPages = SelectedItems.Count() * Weeks.Length; //if there are gunna be over a hundred give a warning! if (totalPages > 100) { if (MessageBox.Show("You are about to generate rather a large amount of rota pages (" + totalPages.ToString() + ").\r\nThis may take a little time. Press Yes to continue", "Rota Generation", MessageBoxButtons.YesNo) == DialogResult.No) { return; } } //sort the weeks lowest to highest Array.Sort <int>(Weeks, new Comparison <int>( (i1, i2) => i1.CompareTo(i2) )); //create the document Document document = new Document(PageSize.A4.Rotate()); PdfWriter writer; string filename = (SelectedItems.Count() > 1 ? "multiworker" : SelectedItems.ElementAt(0).Name) + "-" + _periodstartdate.ToString("yyyyMMdd") + ".pdf"; try { writer = PdfWriter.GetInstance(document, new FileStream(filename, FileMode.Create)); document.Open(); } catch (Exception ex) { MessageBox.Show("Failed to Open Rota Pdf Document.\r\n\r\n" + ex.Message); return; } //create some font stuff BaseFont bfTimes = BaseFont.CreateFont(BaseFont.COURIER, BaseFont.CP1252, false); iTextSharp.text.Font times = new iTextSharp.text.Font(bfTimes, 8, iTextSharp.text.Font.NORMAL, iTextSharp.text.BaseColor.BLACK); iTextSharp.text.Font times_bold = new iTextSharp.text.Font(bfTimes, 8, iTextSharp.text.Font.BOLD, iTextSharp.text.BaseColor.BLACK); iTextSharp.text.Font times_bold_underline = new iTextSharp.text.Font(bfTimes, 8, iTextSharp.text.Font.BOLD | iTextSharp.text.Font.UNDERLINE, iTextSharp.text.BaseColor.BLACK); //iterate over each worker foreach (Worker worker in SelectedItems) { //iterate over each week foreach (int week in Weeks) { DateTime currentWeek = _periodstartdate.AddDays(7 * (week - 1)); document.Add(new Paragraph(worker.Name, times_bold)); document.Add(new Paragraph("\r\n\r\n")); PdfPTable table = new PdfPTable(8); table.WidthPercentage = 100; PdfPCell cell = new PdfPCell(new Phrase("Week " + week.ToString() + "\r\n(" + currentWeek.ToString("dd/MM/yyyy") + ")\r\n", times)); cell.Padding = 5; cell.Colspan = 8; cell.HorizontalAlignment = 1; //0=left, 1=centre, 2=right table.AddCell(cell); table.AddCell(""); Dictionary <string, string[]> serviceUserText = new Dictionary <string, string[]>(); DateTime startOfWeek = currentWeek; for (int day = 0; day < 7; day++) { string daytxt = ((System.DayOfWeek)((day + 1) % 7)).ToString(); if (worker.isDayOff(startOfWeek.AddDays(day))) { daytxt += " (Day Off)"; } table.AddCell(new Phrase(daytxt, times_bold)); } //iterate over each day of this week for (int day = 0; day < 7; day++) { //get the current day DateTime currentDay = startOfWeek.AddDays(day); //now get all the calls that are on this day for this worker! foreach (Call call in worker.Calls.Where(c => c.time >= currentDay && c.time < currentDay.AddDays(1))) { string[] dayText; string serviceusertxt = call.ServiceUser.Name + "\r\n" + call.ServiceUser.add1 + "\r\n" + call.ServiceUser.postcode; //creeate a day text for a specific service user if (!serviceUserText.TryGetValue(serviceusertxt, out dayText)) { dayText = new string [] { "", "", "", "", "", "", "" }; serviceUserText.Add(serviceusertxt, dayText); } string doubleuptext = ""; if (call.required_workers == 2) { doubleuptext = "[D: "; if (call.Workers.Count() == 1) { doubleuptext += "Unassigned"; } else { Worker otherWorker = call.Workers.Single(w => w != worker); doubleuptext += otherWorker.ShortName; } doubleuptext += "]"; } string calltxt = call.time.ToString("HH:mm") + " (" + call.duration_mins.ToString() + " min)\r\n" + doubleuptext; dayText[day] += calltxt; } } if (serviceUserText.Count == 0) { Phrase phr = new Phrase("No Calls", times); phr.Font.SetStyle(1); //bold it for dramatic effect ;) PdfPCell nocallscell = new PdfPCell(phr); nocallscell.Padding = 5; nocallscell.Colspan = 8; nocallscell.HorizontalAlignment = 1; //0=Left, 1=Centre, 2=Right table.AddCell(nocallscell); } else { foreach (KeyValuePair <string, string[]> entry in serviceUserText) { string serviceusername = entry.Key; string[] dayText = entry.Value; table.AddCell(new Phrase(serviceusername, times)); foreach (string text in dayText) { table.AddCell(new Phrase(text.Trim(), times)); } } } document.Add(table); if (week != Weeks[Weeks.Length - 1]) { document.NewPage(); } } document.NewPage(); } document.Close(); document.Dispose(); System.Diagnostics.Process.Start(@filename); }
public MediaFileBrowserViewModel(MediaFileWatcher mediaFileWatcher, IRegionManager regionManager, IEventAggregator eventAggregator) { MediaFileWatcher = mediaFileWatcher; RegionManager = regionManager; EventAggregator = eventAggregator; MediaFileGridViewModel = new MediaFileGridViewModel(mediaFileWatcher.MediaFileState, EventAggregator); ImageViewModel = new MediaFileBrowserImagePanelViewModel(eventAggregator); ImageViewModel.SelectedScaleMode = MediaViewer.UserControls.ImagePanel.ScaleMode.FIT_HEIGHT_AND_WIDTH; imageMediaStackPanelViewModel = new MediaFileStackPanelViewModel(MediaFileGridViewModel.MediaStateCollectionView, EventAggregator); imageMediaStackPanelViewModel.IsVisible = true; VideoViewModel = new VideoPanel.VideoViewModel(EventAggregator); videoMediaStackPanelViewModel = new MediaFileStackPanelViewModel(MediaFileGridViewModel.MediaStateCollectionView, EventAggregator); videoMediaStackPanelViewModel.IsVisible = true; GeotagFileBrowserViewModel = new GeotagFileBrowserViewModel(MediaFileGridViewModel.MediaStateCollectionView, EventAggregator); GeotagFileBrowserStackPanelViewModel = new MediaFileStackPanelViewModel(MediaFileGridViewModel.MediaStateCollectionView, EventAggregator); GeotagFileBrowserStackPanelViewModel.IsVisible = true; DeleteSelectedItemsCommand = new Command(new Action(deleteSelectedItems)); ImportSelectedItemsCommand = new Command(() => { ImportView import = new ImportView(); import.DataContext = new ImportViewModel(MediaFileWatcher.Instance); import.ShowDialog(); }); ExportSelectedItemsCommand = new Command(() => { ImportView export = new ImportView(); export.DataContext = new ExportViewModel(MediaFileWatcher.Instance); export.ShowDialog(); }); ExpandCommand = new Command <MediaFileItem>((item) => { if (item == null) { if (SelectedItems.Count == 0) { return; } item = SelectedItems.ElementAt(0) as MediaFileItem; } if (item.Metadata is ImageMetadata) { navigateToImageView(item); } else if (item.Metadata is VideoMetadata || item.Metadata is AudioMetadata) { navigateToVideoView(item); } }); ContractCommand = new Command(() => { NavigateBackCommand.Execute(null); }); ContractCommand.IsExecutable = false; NavigateToGeotagFileBrowserCommand = new Command(() => { navigateToGeotagFileBrowser(); }); CreateImageCollageCommand = new Command(() => { if (SelectedItems.Count == 0) { return; } ImageCollageView collage = new ImageCollageView(); collage.ViewModel.Media = SelectedItems; collage.ShowDialog(); }); TranscodeVideoCommand = new Command(() => { if (SelectedItems.Count == 0) { return; } VideoTranscodeView transcode = new VideoTranscodeView(); List <VideoAudioPair> items = new List <VideoAudioPair>(); foreach (MediaItem item in SelectedItems) { items.Add(new VideoAudioPair(item)); } transcode.ViewModel.Items = items; transcode.ViewModel.OutputPath = MediaFileWatcher.Path; transcode.ShowDialog(); }); TranscodeImageCommand = new Command(() => { if (SelectedItems.Count == 0) { return; } ImageTranscodeView transcode = new ImageTranscodeView(); transcode.ViewModel.Items = SelectedItems; transcode.ViewModel.OutputPath = MediaFileWatcher.Path; transcode.ShowDialog(); }); CreateVideoPreviewImagesCommand = new Command(() => { if (SelectedItems.Count == 0) { return; } VideoPreviewImageView preview = new VideoPreviewImageView(); preview.ViewModel.Media = SelectedItems; preview.ShowDialog(); }); CreateTorrentFileCommand = new Command(() => { //if (SelectedItems.Count == 0) return; try { TorrentCreationView torrent = new TorrentCreationView(); torrent.ViewModel.PathRoot = mediaFileWatcher.Path; torrent.ViewModel.Media = new ObservableCollection <MediaFileItem>(SelectedItems); torrent.ShowDialog(); } catch (Exception e) { MessageBox.Show(e.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); } }); NavigateToMediaFileGridCommand = new Command(navigateToMediaFileGrid); NavigateToImageViewCommand = new Command <MediaFileItem>(navigateToImageView); NavigateToVideoViewCommand = new Command <MediaFileItem>(navigateToVideoView); NavigateBackCommand = NavigateToMediaFileGridCommand; SelectedItems = new List <MediaFileItem>(); EventAggregator.GetEvent <MediaSelectionEvent>().Subscribe(mediaFileBrowser_MediaSelectionEvent); }