anshik avatar anshik committed 32a5465

added readme, add meetings should be changed

Comments (0)

Files changed (3)

+Сборка проекта под Linux (Ubuntu)
+1.Скачать исходники:
+ Если установлен mercurial: hg clone http://bitbucket.org/anshik/scheduler_meetings
+ Если не установлен, то скачиваем архив со страницы http://bitbucket.org/anshik/scheduler_meetings/src,
+ распаковываем.
+
+2. Скачать файл тестовой базы данных, скопировать его в папку src проекта
+https://bitbucket.org/anshik/scheduler_meetings/downloads/testdb.sqlite
+
+3. Собрать графический интерфейс, запустив скрипт из папки geu_ui.sh
+Скрипт создаёт py файлы из ui
+
+4. Запустить: python main.py
+
+
+
+
+'''
+    Условия: Qt, QML
+
+    Задание: Qt-приложение "планировщик встреч" со следующей функциональностью:
+
+    Без авторизации в расчете на одного пользователя.
+    Создание, удаление, редактирование встреч:
+    (ДА) - Название встречи - текст, поле обязательное для заполнения не короче 3 и не длиннее 200 символов, не может начинаться со знаков препинания.
+    (ДА) - Тип - значение из таблицы-словаря (собеседование, совещание, конференция, пьянка и пр.).
+    (ДА) - Место проведения - текст, поле не обязательное для заполнения, но только кириллические символы и пробел.
+    (ДА) - Время проведения - дата и время с/по (период может быть и несколько дней).
+    (НЕТ)- Встречи с одинаковым типом не могут пересекаться по времени друг с другом, при пересечении встреч с разными типами перед сохранением пользователь должен подтвердить свои намерения.
+    (ДА) - Вывод списка встреч в виде календаря на месяц с возможностью фильтрации по типу.
+    (ДА) - Вывод списка 10 ближайших не начавшихся встреч в виде XML (для удобного автоматизированного получения этих данных на удаленном хосте).
+    Дополнительно:
+    (НЕТ) - создание юнит тестов
+'''
+

src/main_window.py

         super(MainWindowEx, self).__init__()
         self.setupUi(parent)
         self.parent = parent
+        self.parent.connect(self.pb_change, QtCore.SIGNAL('clicked()'), self.change_meeting_clicked)
         self.parent.connect(self.pb_add, QtCore.SIGNAL('clicked()'), self.add_meeting_clicked)
-        self.parent.connect(self.pb_save, QtCore.SIGNAL('clicked()'), self.save_meeting_clicked)
         self.parent.connect(self.pb_delete, QtCore.SIGNAL('clicked()'), self.delete_meeting_clicked)
         self.parent.connect(self.cbx_calendar, QtCore.SIGNAL('stateChanged(int)'), self.cbx_calendar_changed)
         self.parent.connect(self.cb_filter, QtCore.SIGNAL('stateChanged(int)'), self.cb_filter_changed)
         #self.tv_meetings.setModel()
 
 
-    def add_meeting_clicked(self):
+    def change_meeting_clicked(self):
         Dialog = QtGui.QDialog()
         self.meet_index = self.tv_meetings.currentIndex()
         if self.meet_index.isValid():
         test_input = []
 
         for i in xrange(self.model.rowCount()):
-            meeting_date = datetime.strptime(unicode(self.model.record(i).value(5).toString()), "%Y-%m-%d %H:%M:%S")
-            if datetime.today() < meeting_date:
-                record = self.model.record(i)
-                cur_rec = []
-                for j in xrange(1,6):
-                    cur_rec.append((table_fields[j-1], unicode(record.value(j).toString())))
-                test_input.append(('meeting',cur_rec))
+            try:
+                meeting_date = datetime.strptime(unicode(self.model.record(i).value(5).toString()), "%Y-%m-%d %H:%M:%S")
+                if datetime.today() < meeting_date:
+                    record = self.model.record(i)
+                    cur_rec = []
+                    for j in xrange(1,6):
+                        cur_rec.append((table_fields[j-1], unicode(record.value(j).toString())))
+                    test_input.append(('meeting',cur_rec))
+            except:
+                pass
 
         out2 = ('meetings',test_input[:10])
 
         index = self.tv_meetings.currentIndex()
         self.model.removeRow(index.row())
 
+    def add_meeting_clicked(self):
+        Dialog = QtGui.QDialog()
+#        self.meet_index = self.tv_meetings.currentIndex()
+#        self.model.insertRowIntoTable()
+#        print self.meet_index
+#        if self.meet_index.isValid():
+#
+#            record = self.model.record(self.meet_index.row())
+#            self.meet_index = record.value(0).toInt()
+#        else:
+#            self.meet_index = [0]
+
+#        print "meet_index: ", self.meet_index
+        print self.model.rowCount()
+        #self.model.insertRecord(self.model.rowCount()+1,QtSql.QSqlRecord())
+        ui = AddMeeting(Dialog, self.db, [self.model.rowCount()+3])
+        Dialog.exec_()
+        self.update_model()
+
     def save_meeting_clicked(self):
         self.model.submitAll()
 

src/ui/ui_main_window.ui

    <string>Планировщик встреч (build XXX)</string>
   </property>
   <widget class="QWidget" name="centralwidget">
-   <widget class="QPushButton" name="pb_add">
-    <property name="geometry">
-     <rect>
-      <x>20</x>
-      <y>570</y>
-      <width>171</width>
-      <height>27</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>Изменить встречу</string>
-    </property>
-   </widget>
-   <widget class="QPushButton" name="pb_save">
-    <property name="geometry">
-     <rect>
-      <x>210</x>
-      <y>570</y>
-      <width>171</width>
-      <height>27</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>Сохранить встречу</string>
-    </property>
-   </widget>
-   <widget class="QPushButton" name="pb_delete">
-    <property name="geometry">
-     <rect>
-      <x>390</x>
-      <y>570</y>
-      <width>171</width>
-      <height>27</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>Удалить встречу</string>
-    </property>
-   </widget>
    <widget class="QTabWidget" name="tabWidget">
     <property name="geometry">
      <rect>
-      <x>20</x>
+      <x>10</x>
       <y>10</y>
       <width>1071</width>
-      <height>551</height>
+      <height>631</height>
      </rect>
     </property>
     <property name="currentIndex">
-     <number>1</number>
+     <number>0</number>
     </property>
     <widget class="QWidget" name="tab">
      <attribute name="title">
       <string>Таблица</string>
      </attribute>
+     <widget class="QPushButton" name="pb_change">
+      <property name="geometry">
+       <rect>
+        <x>30</x>
+        <y>560</y>
+        <width>171</width>
+        <height>27</height>
+       </rect>
+      </property>
+      <property name="text">
+       <string>Изменить встречу</string>
+      </property>
+     </widget>
+     <widget class="QPushButton" name="pb_add">
+      <property name="geometry">
+       <rect>
+        <x>220</x>
+        <y>560</y>
+        <width>171</width>
+        <height>27</height>
+       </rect>
+      </property>
+      <property name="text">
+       <string>Добавить встречу</string>
+      </property>
+     </widget>
+     <widget class="QPushButton" name="pb_delete">
+      <property name="geometry">
+       <rect>
+        <x>400</x>
+        <y>560</y>
+        <width>171</width>
+        <height>27</height>
+       </rect>
+      </property>
+      <property name="text">
+       <string>Удалить встречу</string>
+      </property>
+     </widget>
      <widget class="QTableView" name="tv_meetings">
       <property name="geometry">
        <rect>
-        <x>10</x>
+        <x>0</x>
         <y>0</y>
         <width>1071</width>
         <height>531</height>
        </rect>
       </property>
      </widget>
+     <zorder>pb_delete</zorder>
+     <zorder>pb_add</zorder>
+     <zorder>pb_change</zorder>
+     <zorder>pb_change</zorder>
+     <zorder>pb_add</zorder>
+     <zorder>pb_delete</zorder>
+     <zorder>tv_meetings</zorder>
     </widget>
     <widget class="QWidget" name="tab_2">
      <attribute name="title">
    <widget class="QPushButton" name="pb_ten_meetings">
     <property name="geometry">
      <rect>
-      <x>580</x>
-      <y>570</y>
+      <x>60</x>
+      <y>660</y>
       <width>181</width>
       <height>27</height>
      </rect>
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.