프로젝트

일반

사용자정보

통계
| 개정판:

hytos / DTI_PID / DTI_PID / DataTransferDialog.py @ e57134bc

이력 | 보기 | 이력해설 | 다운로드 (5.98 KB)

1
# coding: utf-8
2
""" This is Data Transfer dialog module """
3

    
4
import os
5
import sys
6
from PyQt5.QtCore import *
7
from PyQt5.QtGui import *
8
from PyQt5.QtWidgets import *
9

    
10
from AppDocData import AppDocData, MessageType
11

    
12
sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)) + '\\UI')
13
import DataTransfer_UI
14

    
15
class QDataTransferDialog(QDialog):
16
    """ This Data Trasnfer dialog class """
17

    
18
    def __init__(self, parent):
19
        QDialog.__init__(self, parent)
20

    
21
        self.ui = DataTransfer_UI.Ui_DataTransferDialog()
22
        self.ui.setupUi(self)
23
        self.ui.lineEditPassword.setEchoMode(QLineEdit.Password) 
24
        self.ui.pushButtonTestConnection.clicked.connect(self.on_test_connection_clicked)
25

    
26
        self.ui.treeWidgetDrawingList.setHeaderHidden(False)
27
        self.ui.treeWidgetDrawingList.header().setStretchLastSection(False)
28
        self.ui.treeWidgetDrawingList.setHeaderLabels([self.tr('Name'), self.tr('DateTime')])
29
        self.ui.treeWidgetDrawingList.header().setSectionResizeMode(0, QHeaderView.ResizeToContents)
30
        self.ui.treeWidgetDrawingList.header().setSectionResizeMode(1, QHeaderView.ResizeToContents)
31
        self.load_data()
32

    
33
    def load_data(self):
34
        """ load mssql server information and drawing list """
35
        from AppDocData import AppDocData
36

    
37
        configs = AppDocData.instance().getConfigs('Data Transfer')
38
        for config in configs:
39
            if 'Server' == config.key:
40
                self.ui.lineEditServer.setText(config.value)
41
            elif 'User' == config.key:
42
                self.ui.lineEditUser.setText(config.value)
43
            elif 'Password' == config.key:
44
                self.ui.lineEditPassword.setText(config.value)
45

    
46
        self.load_drawing_list()
47

    
48
    def load_drawing_list(self):
49
        """ load drawing list """
50

    
51
        try:
52
            app_doc_data = AppDocData.instance()
53
            drawings = app_doc_data.getDrawings()
54

    
55
            self.ui.treeWidgetDrawingList.clear()
56
            self.ui.treeWidgetDrawingList.root = QTreeWidgetItem(self.ui.treeWidgetDrawingList, [self.tr('P&ID Drawings'), ''])
57
            self.ui.treeWidgetDrawingList.root.setFlags(self.ui.treeWidgetDrawingList.root.flags() | Qt.ItemIsTristate | Qt.ItemIsUserCheckable)
58
            self.ui.treeWidgetDrawingList.root.setCheckState(0, Qt.Unchecked)
59
            for drawing in drawings:
60
                item = QTreeWidgetItem(self.ui.treeWidgetDrawingList.root, [drawing.name, drawing.datetime])
61
                item.setIcon(0, QIcon(':newPrefix/image.png'))
62
                item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
63
                item.setCheckState(0, Qt.Unchecked)
64
                item.setData(0, Qt.UserRole, drawing)
65
            
66
            self.ui.treeWidgetDrawingList.root.setText(0, self.tr('P&ID Drawings')+'({})'.format(self.ui.treeWidgetDrawingList.root.childCount()))
67
            self.ui.treeWidgetDrawingList.expandItem(self.ui.treeWidgetDrawingList.root)
68
            self.ui.treeWidgetDrawingList.setSortingEnabled(True)
69
            self.ui.treeWidgetDrawingList.root.sortChildren(0, Qt.AscendingOrder)
70
            self.ui.treeWidgetDrawingList.resizeColumnToContents(0)
71
        except Exception as ex:
72
            from App import App
73
            message = 'error occurred({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)
74
            App.mainWnd().addMessage.emit(MessageType.Error, message)
75

    
76
    def on_test_connection_clicked(self):
77
        """ test if connection is success or not """
78
        from AppDocData import AppDocData
79
        from AppDatabase import AppDatabase
80

    
81
        server = self.ui.lineEditServer.text()
82
        user = self.ui.lineEditUser.text()
83
        password = self.ui.lineEditPassword.text()
84
        if server and user and password:
85
            app_doc_data = AppDocData.instance()
86
            database = AppDatabase('MSSQL', self.ui.lineEditServer.text(), self.ui.lineEditUser.text(), self.ui.lineEditPassword.text(), db_path=app_doc_data.project.getName())
87
            try:
88
                conn = database.connect()
89
                with conn:
90
                    QMessageBox.information(self, self.tr('Information'), self.tr('Test connection is success'))
91
            except Exception as ex:
92
                mb = QMessageBox()
93
                mb.setIcon(QMessageBox.Critical)
94
                mb.setWindowTitle(self.tr('Error'))
95
                mb.setText('{}'.format(ex))
96
                mb.exec_()
97

    
98
    def accept(self):
99
        """ save sql information to database """
100
        from AppDocData import Config
101
        from AppDatabase import AppDatabase
102

    
103
        try:
104
            app_doc_data = AppDocData.instance()
105

    
106
            configs = []
107
            server = self.ui.lineEditServer.text()
108
            user = self.ui.lineEditUser.text()
109
            password = self.ui.lineEditPassword.text()
110
            configs.append(Config('Data Transfer', 'Server', server))
111
            configs.append(Config('Data Transfer', 'User', user))
112
            configs.append(Config('Data Transfer', 'Password', password))
113
            AppDocData.instance().saveConfigs(configs)
114

    
115
            database = AppDatabase('MSSQL', server, user, password, db_path=app_doc_data.project.getName())
116
            checked = [self.ui.treeWidgetDrawingList.root.child(i) for i in range(self.ui.treeWidgetDrawingList.root.childCount()) \
117
                if self.ui.treeWidgetDrawingList.root.child(i).checkState(0) == Qt.Checked]
118
            self.ui.progressBarDataTransfer.setMaximum(len(checked))
119

    
120
            for item in checked:
121
                drawing = item.data(0, Qt.UserRole)
122
                drawing.transfer(database)
123
                self.ui.progressBarDataTransfer.setValue(self.ui.progressBarDataTransfer.value() + 1)
124
                QApplication.processEvents()
125

    
126
            QDialog.accept(self)
127
        except Exception as ex:
128
            from App import App
129
            message = 'error occurred({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)
130
            App.mainWnd().addMessage.emit(MessageType.Error, message)
클립보드 이미지 추가 (최대 크기: 500 MB)