示例#1
0
        /// <summary>
        /// Metoda AddHolidayButton_OnClick(object sender, SelectionChangedEventArgs e) powoduje dodanie urlopu dla wybranego pracownika
        /// </summary>
        /// <param name="sender">Argument typu object, ktory przekazuje obiekt</param>
        /// <param name="e">Argument typu RoutedEventArgs, ktory przekazuje wszystkie informacje o zdarzeniu </param>
        private void AddHolidayButton_OnClick(object sender, RoutedEventArgs e)
        {
            var selectedWorker = (Worker)WorkersList.SelectedItem;
            var selectedMonth  = (int)ListOfMonths.SelectedValue;
            var selectedYear   = (int)ListOfYears.SelectedValue;
            var selectedReason = (string)ListOfReasons.SelectedValue;
            var selectedDays   = HolidaysList.SelectedItems.Cast <Day>().ToList();

            using (var connection = new SQLiteConnection(App.databasePath))
            {
                foreach (var selectedDay in selectedDays)
                {
                    if (!selectedDay.IsHoliday)
                    {
                        var holiday = new Holiday
                        {
                            WorkerId = selectedWorker.Id,
                            Date     = new DateTime(selectedYear, selectedMonth, selectedDay.DayNumber),
                            Type     = selectedReason
                        };

                        connection.Insert(holiday);
                    }
                    else if (selectedDay.IsHoliday && selectedDay.Reason != selectedReason)
                    {
                        var holiday = new Holiday
                        {
                            Id       = holidays.Where(c => c.Date.Day == selectedDay.DayNumber).First().Id,
                            WorkerId = selectedWorker.Id,
                            Date     = new DateTime(selectedYear, selectedMonth, selectedDay.DayNumber),
                            Type     = selectedReason
                        };

                        connection.InsertOrReplace(holiday);
                        ;
                    }
                }
            }

            SetCalendar();

            InfoOK info = new InfoOK("Dodano urlop");

            info.ShowDialog();
        }
示例#2
0
        /// <summary>
        /// Metoda PdfButton_OnClick(object sender, RoutedEventArgs e) podczas wywolania generuje liste obecnosci dla wybranych pracownikow w postaci plikow PDF
        /// </summary>
        /// <param name="sender">Argument typu object, ktory przekazuje obiekt</param>
        /// <param name="e">Argument typu RoutedEventArgs, ktory przekazuje wszystkie informacje o zdarzeniu </param>
        private void PdfButton_OnClick(object sender, RoutedEventArgs e)
        {
            string fieldShift = "shift_"; // name form for accesing fields in pdf form
            string fieldStart = "start_"; // startShift form for accesing fields in pdf form
            string fieldStop  = "stop_";  // stopShift form for accesing fields in pdf form

            int selectedMonth = (int)ListOfMonths.SelectedValue;
            int selectedYear  = (int)ListOfYears.SelectedValue;

            string strPath  = System.AppDomain.CurrentDomain.BaseDirectory;
            string docPath  = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            string src      = $@"{strPath}pdfForm.pdf";
            string destMerg = $@"{docPath}\pdfOutput\ListaScalona_{new DateTime(2000, selectedMonth, 1).ToString("MMMMMMMMMMM", CultureInfo.CurrentCulture)}.pdf";

            string deletePath = $@"{docPath}\pdfOutput\temp";

            DirectoryInfo di = Directory.CreateDirectory($@"{docPath}\pdfOutput\");

            if (this.selectedWorkers != null)
            {
                PdfDocument mergedPdf = new PdfDocument(new PdfWriter(destMerg));
                PdfMerger   merger    = new PdfMerger(mergedPdf);

                foreach (var worker in selectedWorkers)
                {
                    var    workerName = worker.Name;
                    string monthName;

                    List <Schedule> schedules;
                    List <Shift>    shifts;
                    List <Holiday>  holidays;

                    if (ListOfMonths.SelectedValue != null)
                    {
                        monthName = new DateTime(2000, selectedMonth, 1).ToString("MMMMMMMMMMM", CultureInfo.CurrentCulture);
                    }
                    else
                    {
                        InfoOK info = new InfoOK("Nie wybrano pracowników!");
                        info.ShowDialog();
                        return;
                    }

                    using (SQLiteConnection connection = new SQLiteConnection(App.databasePath))
                    {
                        connection.CreateTable <Schedule>(); //read all schedules in selected month/year for specific worker
                        schedules = new List <Schedule>
                                        (connection.Table <Schedule>().ToList().Where(c => (c.Date.Month == selectedMonth) && (c.Date.Year == selectedYear) && (c.WorkerId == worker.Id)));

                        connection.CreateTable <Holiday>(); //read all holidays in selected month/year for specific worker
                        holidays = new List <Holiday>
                                       (connection.Table <Holiday>().ToList().Where(c => (c.Date.Month == selectedMonth) && (c.Date.Year == selectedYear) && (c.WorkerId == worker.Id)));

                        connection.CreateTable <Shift>();
                        shifts = new List <Shift> //shifts list
                                     (connection.Table <Shift>().ToList().OrderBy(c => c.Id).ToList());
                    }
                    Directory.CreateDirectory($@"{ docPath}\pdfOutput\temp");
                    string dest = $@"{docPath}\pdfOutput\temp\{workerName.Replace(" ", "")}.pdf"; // outputPath + generate the workerName pdf

                    PdfDocument pdf  = new PdfDocument(new PdfReader(src), new PdfWriter(dest));
                    PdfAcroForm form = PdfAcroForm.GetAcroForm(pdf, true);

                    IDictionary <String, PdfFormField> fields = form.GetFormFields();
                    PdfFormField toSet;
                    fields.TryGetValue("name", out toSet);
                    toSet.SetValue($"{workerName}");

                    fields.TryGetValue("month", out toSet);
                    toSet.SetValue($"{monthName}");

                    for (int day = 1; day <= DateTime.DaysInMonth(selectedYear, selectedMonth); day++)
                    {
                        Schedule daySchedule;

                        if (holidays.Where(c => c.Date.Day == day).Count() >= 1)
                        {
                            fields.TryGetValue(fieldShift + day.ToString(), out toSet);
                            if (holidays.Where(c => c.Date.Day == day).First().Type == "Chorobowe")
                            {
                                toSet.SetValue($"N1");
                            }
                            else
                            {
                                toSet.SetValue($"N2");
                            }
                            continue;
                        }

                        if (schedules.Where(c => c.Date.Day == day).Count() == 0)
                        {
                            continue;
                        }

                        daySchedule = schedules.Where(c => c.Date.Day == day).First();

                        if (daySchedule != null)
                        {
                            Shift selectedShift = shifts.Where(c => (c.ShiftName == daySchedule.ShiftName)).ToList().First();

                            fields.TryGetValue(fieldShift + day.ToString(), out toSet);
                            toSet.SetValue($"{daySchedule.ShiftName}");

                            fields.TryGetValue(fieldStart + day.ToString(), out toSet);
                            toSet.SetValue($"{selectedShift.TimeFrom.ToString("H:mm")}");

                            fields.TryGetValue(fieldStop + day.ToString(), out toSet);
                            toSet.SetValue($"{selectedShift.TimeTo.ToString("H:mm")}");
                        }
                    }


                    pdf.Close();

                    PdfDocument pdfForMerge = new PdfDocument(new PdfReader(dest));
                    merger.Merge(pdfForMerge, 1, pdfForMerge.GetNumberOfPages());
                    pdfForMerge.Close();
                }
                mergedPdf.Close();
                Directory.Delete(deletePath, true);
                InfoOK success = new InfoOK("Utworzono pliki PDF");
                success.ShowDialog();
            }
            else
            {
                InfoOK info = new InfoOK("Nie wybrano pracowników!");
                info.ShowDialog();
            }
        }