/// <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(); }
/// <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(); } }