Class: ExportLecturerTimetableDialog

Inherits:
Qt::Dialog
  • Object
show all
Defined in:
lib/tmis/interface/forms/export_lecturer_timetable.rb

Overview

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Instance Method Summary collapse

Constructor Details

#initialize(initial_date, parent = nil) ⇒ ExportLecturerTimetableDialog

Returns a new instance of ExportLecturerTimetableDialog.



22
23
24
25
26
27
28
29
30
31
32
33
# 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

Instance Method Details

#export(dates) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# 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 [email protected]? && 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) ⇒ Object



139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# 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     '[email protected]'
      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_pressedObject



55
56
57
# 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_acceptedObject



59
60
61
62
63
64
65
66
67
68
# 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_rejectedObject



162
163
164
# File 'lib/tmis/interface/forms/export_lecturer_timetable.rb', line 162

def on_exportButtonBox_rejected
  close
end

#on_saveCheckBox_stateChangedObject



35
36
37
# 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) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
# 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_pressedObject



51
52
53
# 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) ⇒ Object



166
167
168
169
170
# 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