class ExportLecturerTimetableDialog
include Contracts ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Public Class Methods
new(initial_date, parent = nil)
click to toggle source
Calls superclass method
# File lib/tmis/interface/forms/export_lecturer_timetable.rb, line 22 def initialize(initial_date, parent = nil) super parent @ui = Ui::ExportLecturerTimetableDialog.new @ui.setup_ui self @ui.dayDateEdit.setDate(Qt::Date.fromString(initial_date.to_s, Qt::ISODate)) @ui.progressBar.visible = false Lecturer.all.each do |l| item = Qt::ListWidgetItem.new(l.to_s, @ui.lecturersListWidget) item.setData(Qt::UserRole, Qt::Variant.new(l.id)) item.checkState = Qt::Unchecked end end
Public Instance Methods
export(dates)
click to toggle source
# File lib/tmis/interface/forms/export_lecturer_timetable.rb, line 70 def export(dates) # TODO распараллелить # TODO progressBar в процентах @ui.progressBar.visible = true @ui.progressBar.setRange(0, @ui.lecturersListWidget.count) if @ui.saveCheckBox.checkState == Qt::Checked and @ui.mailCheckBox.checkState == Qt::Checked #if !@ui.folderPathLineEdit.text.empty? && Dir.exist?(File.expand_path(@ui.folderPathLineEdit.text.force_encoding('UTF-8'))) @ui.lecturersListWidget.count.times do |i| @ui.progressBar.setValue(i) Qt::Application::processEvents if @ui.lecturersListWidget.item(i).checkState == Qt::Checked id = @ui.lecturersListWidget.item(i).data(Qt::UserRole) lecturer = Lecturer.where(id: id.to_i).first path = @ui.folderPathLineEdit.text.force_encoding('UTF-8') if File.writable? path filename = File.join(path, "#{lecturer.surname}_timetable.xls") if File.exist? filename File.delete filename spreadsheet = SpreadsheetCreater.create filename else spreadsheet = SpreadsheetCreater.create filename end TimetableExporter2.new(spreadsheet, LecturerTimetableExportStratagy2.new(dates, lecturer)).export.save mail(lecturer, filename) end end end #else # show_message 'Директория не существует выберите другую.' #end elsif @ui.saveCheckBox.checkState == Qt::Checked @ui.lecturersListWidget.count.times do |i| @ui.progressBar.setValue(i) Qt::Application::processEvents if @ui.lecturersListWidget.item(i).checkState == Qt::Checked id = @ui.lecturersListWidget.item(i).data(Qt::UserRole) lecturer = Lecturer.where(id: id.to_i).first path = @ui.folderPathLineEdit.text.force_encoding('UTF-8') if File.writable? path filename = File.join(path, "#{lecturer.surname}_timetable.xls") if File.exist? filename File.delete filename spreadsheet = SpreadsheetCreater.create filename else spreadsheet = SpreadsheetCreater.create filename end TimetableExporter2.new(spreadsheet, LecturerTimetableExportStratagy2.new(dates, lecturer)).export.save mail(lecturer, filename) end end end elsif @ui.mailCheckBox.checkState == Qt::Checked @ui.lecturersListWidget.count.times do |i| @ui.progressBar.setValue(i) Qt::Application::processEvents if @ui.lecturersListWidget.item(i).checkState == Qt::Checked id = @ui.lecturersListWidget.item(i).data(Qt::UserRole) lecturer = Lecturer.where(id: id.to_i).first filename = Dir.mktmpdir('tmis') + "/#{lecturer.surname}_timetable.xls" spreadsheet = SpreadsheetCreater.create filename TimetableExporter2.new(spreadsheet, LecturerTimetableExportStratagy2.new(dates, lecturer)).export.save mail(lecturer, filename) end end end # thread.join @ui.progressBar.visible = false end
mail(lecturer, filename)
click to toggle source
# File lib/tmis/interface/forms/export_lecturer_timetable.rb, line 139 def mail(lecturer, filename) lecturer.emails.select(&:email_valid?).each do |email| text = "Здравствуйте, #{lecturer.to_s}! Ваши пары на этой неделе:\n\n" grouped = lecturer.studies.group(:date, :number).group_by(&:date) grouped.each do |date, studies| text += "Дата: #{date}\n\n" studies.each do |s| text += "\t Номер: #{s.number}, группа: #{s.groupable.to_s}, предмет #{s.subject.title}, кабинет: #{s.cabinet.title}\n" end end text += "\nИтого пар: #{lecturer.studies.count}\n" # lecturer.emails.map do Mailer.new(Settings[:mailer, :email], Settings[:mailer, :password]) do from 'tmis@kp11.ru' to email.email subject 'Расписание' body text add_file filename end.send! #add_file :filename => 'timetable.xls', :content => File.read(filename, "r:UTF-8") end end
on_deselectAllPushButton_pressed()
click to toggle source
# File lib/tmis/interface/forms/export_lecturer_timetable.rb, line 55 def on_deselectAllPushButton_pressed @ui.lecturersListWidget.count.times{|i| @ui.lecturersListWidget.item(i).setCheckState(Qt::Unchecked) } end
on_exportButtonBox_accepted()
click to toggle source
# File lib/tmis/interface/forms/export_lecturer_timetable.rb, line 59 def on_exportButtonBox_accepted if @ui.modeComboBox.currentIndex == 0 date = Date.parse(@ui.dayDateEdit.date.toString(Qt::ISODate)).monday export(date..date + 5) close elsif @ui.modeComboBox.currentIndex == 1 export([Date.parse(@ui.dayDateEdit.date.toString(Qt::ISODate))]) close end end
on_exportButtonBox_rejected()
click to toggle source
# File lib/tmis/interface/forms/export_lecturer_timetable.rb, line 162 def on_exportButtonBox_rejected close end
on_saveCheckBox_stateChanged()
click to toggle source
# File lib/tmis/interface/forms/export_lecturer_timetable.rb, line 35 def on_saveCheckBox_stateChanged checkbox_actions(sender, chk, unchk) end
on_saveCheckBox_toggled(checked)
click to toggle source
# File lib/tmis/interface/forms/export_lecturer_timetable.rb, line 39 def on_saveCheckBox_toggled(checked) if checked if (path = Qt::FileDialog::getExistingDirectory(self, 'Open Directory', Dir.home, Qt::FileDialog::ShowDirsOnly | Qt::FileDialog::DontResolveSymlinks)) @ui.folderPathLineEdit.text = path # force_encoding doesn't help because Qt changes the encoding to ASCII anyway else @ui.folderPathLineEdit.text = Dir.home end else @ui.folderPathLineEdit.text = '' end end
on_selectAllPushButton_pressed()
click to toggle source
# File lib/tmis/interface/forms/export_lecturer_timetable.rb, line 51 def on_selectAllPushButton_pressed @ui.lecturersListWidget.count.times{|i| @ui.lecturersListWidget.item(i).setCheckState(Qt::Checked) } end
show_message(text)
click to toggle source
# File lib/tmis/interface/forms/export_lecturer_timetable.rb, line 166 def show_message(text) box = Qt::MessageBox.new box.setText text box.exec end