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);
        }
Exemple #2
0
        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);
        }