· 8 years ago · Dec 26, 2017, 06:42 PM
1# -*- coding: utf-8 -*-
2#from PyQt5.QtWidgets import (QApplication, QComboBox, QDialog,
3 #QDialogButtonBox, QFormLayout, QGridLayout, QGroupBox, QHBoxLayout,
4 #QLabel, QLineEdit, QMenu, QMenuBar, QPushButton, QSpinBox, QTextEdit,
5 #QVBoxLayout, QTableWidget, QStackedWidget, QWidget, QScrollArea)
6from PyQt5 import QtWidgets
7from PyQt5.QtCore import QEvent
8from functools import partial
9import sys
10import socket
11import pickle
12import struct
13import sqlite3
14import time
15
16class Dialog(QtWidgets.QDialog):
17
18 def __init__(self):
19 super(Dialog, self).__init__()
20 self.setWindowTitle("Geobiuro")
21 self.showFullScreen()
22 globals()["wsp"] = None
23 mainLayout = QtWidgets.QVBoxLayout()
24 menu = QtWidgets.QHBoxLayout()
25 self.push1 = QtWidgets.QPushButton("Rb")
26 self.push1.clicked.connect(self.roboty)
27 self.push2 = QtWidgets.QPushButton("Ks")
28 self.push2.clicked.connect(self.faktury)
29 self.push3 = QtWidgets.QPushButton("TD")
30 self.push3.clicked.connect(self.kalendarz)
31 self.push4 = QtWidgets.QPushButton("4")
32 self.push4.clicked.connect(self.szkic)
33 menu.addWidget(self.push1)
34 menu.addWidget(self.push2)
35 menu.addWidget(self.push3)
36 menu.addWidget(self.push4)
37 menu.setContentsMargins(0,0,0,0)
38 mainLayout.addLayout(menu)
39 menu.setContentsMargins(0,0,0,50)
40
41 self.stacked = QtWidgets.QStackedWidget()
42 self.LO_roboty = QtWidgets.QVBoxLayout()
43 self.LO_roboty.setContentsMargins(0,0,0,0)
44
45
46 self.szukajka = QtWidgets.QLineEdit()
47 self.szukajka.setPlaceholderText('Wyszukaj pracÄ™')
48 self.szukajka.editingFinished.connect(self.wypelnij_roboty)
49
50 self.LO_roboty.addWidget(self.szukajka)
51 self.status_roboty = QtWidgets.QComboBox()
52 self.status_roboty.addItem(u'Rozpoczęta')
53 self.status_roboty.addItem(u'W teren')
54 self.status_roboty.addItem(u'Kameralka')
55 self.status_roboty.addItem(u'UrzÄ…d')
56 self.status_roboty.addItem(u'Wstrzymana')
57 self.status_roboty.addItem(u'Zakończona')
58 self.status_roboty.addItem(u'Wydana')
59 self.status_roboty.addItem(u'Anulowana')
60 self.status_roboty.addItem(u'W toku')
61 self.status_roboty.addItem(u'Wszystkie')
62 self.status_roboty.setCurrentIndex(8)
63 self.status_roboty.currentIndexChanged.connect(self.wypelnij_roboty)
64 self.LO_roboty.addWidget(self.status_roboty)
65 mainLayout.addWidget(self.stacked)
66
67
68 self.scroll0 = QtWidgets.QScrollArea()
69 self.scroll0.setWidgetResizable(True)
70 self.stacked.insertWidget(0,self.scroll0)
71 self.strona0 = QtWidgets.QWidget()
72 self.strona0.setLayout(self.LO_roboty)
73 self.scroll0.setWidget(self.strona0)
74 self.scroll1 = QtWidgets.QScrollArea()
75 self.scroll1.setWidgetResizable(True)
76 self.stacked.insertWidget(1,self.scroll1)
77 self.scroll2 = QtWidgets.QScrollArea()
78 self.stacked.insertWidget(2,self.scroll2)
79 self.scroll3 = QtWidgets.QScrollArea()
80 #self.stacked.insertWidget(3,self.scroll3)
81 self.szkic = QtWidgets.QGraphicsView()
82 self.stacked.insertWidget(3,self.szkic)
83 szer = self.szkic.width()
84 wys = self.szkic.height()
85 scene = QtWidgets.QGraphicsScene(0.00,0.00,szer,wys)
86 self.szkic.setScene(scene)
87 scene.installEventFilter(self)
88 self.setLayout(mainLayout)
89 try:
90 self.pobierz_baze()
91 except:
92 pass
93 self.wypelnij_roboty()
94 def roboty(self):
95 self.stacked.setCurrentIndex(0)
96 def faktury(self):
97 self.stacked.setCurrentIndex(1)
98 def kalendarz(self):
99 self.stacked.setCurrentIndex(2)
100 def szkic(self):
101 self.stacked.setCurrentIndex(3)
102 def usun(self):
103 #for i in reversed(range(self.strona0.layout().count())):
104 #item = self.strona0.layout().itemAt(i)
105 #for i in range(liczba):
106 #self.strona2.layout().removeWidget(self.strona2.layout().itemAt(0))
107 #self.strona2.layout().removeWidget(self.push2)
108 liczba = self.strona0.layout().count()
109 for i in reversed(range(liczba)):
110 if i != 0 and i!=1:
111 self.strona0.layout().itemAt(i).widget().close()
112 def pobierz_baze(self):
113 print 'pobierz baze'
114 self.zaserweruj()
115 zap = self.bazadanych_zapytanie("select id, nr_roboty, kerg, nazwa, asortyment, nr_dzialki, mzas, mewid, ulica, postep, netto, brutto, datarozp, notatki, konid, geodetaid, status_fin, licencja, powiazani, id_obr from podstawa")
116 conn = sqlite3.connect("baza.db")
117 nowa = conn.execute('drop table if exists podstawa')
118 nowa = conn.execute("CREATE TABLE podstawa(id integer primary key autoincrement, nr_roboty text, kerg text, nazwa text, asortyment text, nr_dzialki text, mzas text, mewid text, ulica text, postep int, jednostki text, netto real, brutto real, datarozp numeric, datazak numeric, notatki text, id_rok int, rok numeric, konid int, id_obr text, termin numeric, x_poz_2000 real, y_poz_2000 real, rodzajpracy int, powiat text,konregon text, sztuk int, geodetaid int,treschistoria text, status_fin int,licencja text, zablokowana int, powiazani text)")
119 nowa = conn.executemany("insert into podstawa(id, nr_roboty, kerg, nazwa, asortyment, nr_dzialki, mzas, mewid, ulica, postep, netto, brutto, datarozp, notatki, konid, geodetaid, status_fin, licencja, powiazani,id_obr) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",zap)
120 conn.commit()
121 zap = self.bazadanych_zapytanie("select konid, konnazwa, konulica, konmiasto, konkod, konnip, konemail, konimnazw, kontelefon, notatki, konregon from kontrahenci")
122 nowa = conn.execute('drop table if exists kontrahenci')
123 nowa = conn.execute("CREATE TABLE kontrahenci(konid integer primary key autoincrement, konnazwa text, konulica text, konmiasto text,konkod text, konnip text,konemail text,konimnazw text,kontelefon text, notatki text,konregon text)")
124 nowa = conn.executemany("insert into kontrahenci(konid, konnazwa, konulica, konmiasto, konkod, konnip, konemail, konimnazw, kontelefon, notatki, konregon) values(?,?,?,?,?,?,?,?,?,?,?)",zap)
125 conn.commit()
126 def wypelnij_roboty(self):
127 #self.stacked.setCurrentIndex(0)
128 self.usun()
129 postep = self.status_roboty.currentIndex()
130 szuk = self.szukajka.text()
131 conn = sqlite3.connect("baza.db")
132 zap0 = conn.execute("select nr_roboty,nazwa,postep,id from podstawa where nazwa like '%"+szuk+"%' or nr_dzialki like '%"+szuk+"%'").fetchall()
133 print 'postep ' + str(postep)
134 zap = []
135 for i in range(len(zap0)):
136 if postep == 8: #w toku
137 if zap0[i][2] == 0 or zap0[i][2] == 1 or zap0[i][2] == 2 or zap0[i][2] == 3:
138 zap.append(zap0[i])
139 elif postep == 9: #wszystkie
140 zap.append(zap0[i])
141 else:
142 if zap0[i][2] == postep:
143 zap.append(zap0[i])
144 print zap
145 for i in range(len(zap)):
146 self.push2 = QtWidgets.QPushButton(zap[i][0] + ' ' +unicode(zap[i][1])[:25]+'...')
147 self.push2.clicked.connect(partial(self.edytuj_robote,zap[i][3]))
148 self.LO_roboty.addWidget(self.push2)
149
150
151
152
153
154
155
156 def edytuj_robote(self, robotaid):
157 conn = sqlite3.connect("baza.db")
158 zap = conn.execute("select nr_roboty, kerg, nazwa, asortyment, nr_dzialki, mzas, mewid, ulica, postep, netto, brutto, datarozp, notatki, konid, geodetaid, status_fin, licencja, powiazani from podstawa where id = '"+str(robotaid)+"'").fetchall()
159 print zap
160 self.stacked.setCurrentIndex(1)
161 self.LO_edycja = QtWidgets.QGridLayout()
162 self.widget_edycja = QtWidgets.QWidget()
163 label_nrroboty = QtWidgets.QLabel("Nr roboty:")
164 label_kerg = QtWidgets.QLabel("Nr kancelaryjny:")
165 label_nazwa = QtWidgets.QLabel("Nazwa zlecenia:")
166 label_asortyment = QtWidgets.QLabel(u"Cel pracy:")
167 label_nr_dzialki = QtWidgets.QLabel(u"Numery działek:")
168 label_mzas = QtWidgets.QLabel("Mapa zasadnicza:")
169 label_mewid = QtWidgets.QLabel("Mapa ewidencyjna:")
170 label_ulica = QtWidgets.QLabel("Ulica:")
171 label_postep = QtWidgets.QLabel("Status pracy:")
172 label_netto = QtWidgets.QLabel("Cena netto:")
173 label_brutto = QtWidgets.QLabel("Cena brutto:")
174 label_datarozp = QtWidgets.QLabel("Data rozpoczęcia:")
175 label_notatki = QtWidgets.QLabel("Notatki:")
176 label_konid = QtWidgets.QLabel("Kontrahent:")
177 label_licencja = QtWidgets.QLabel("Nr licencji:")
178 nrroboty = QtWidgets.QLabel(zap[0][0])
179 kerg = QtWidgets.QLabel(zap[0][1])
180 nazwa = QtWidgets.QLabel(zap[0][2])
181 asortyment = QtWidgets.QLabel(zap[0][3])
182 nr_dzialki = QtWidgets.QLabel(zap[0][4])
183 mzas = QtWidgets.QLabel(zap[0][5])
184 mewid = QtWidgets.QLabel(zap[0][6])
185 ulica = QtWidgets.QLabel(zap[0][7])
186 postep = QtWidgets.QLabel((self.status(zap[0][8])))
187 netto = QtWidgets.QLabel(str(zap[0][9]))
188 brutto = QtWidgets.QLabel(str(zap[0][10]))
189 datarozp = QtWidgets.QLabel(str(zap[0][11]))
190 notatki = QtWidgets.QLabel(unicode(zap[0][12]))
191 notatki.setWordWrap(True)
192 konid = QtWidgets.QLabel(str(zap[0][13]))
193
194 self.LO_edycja.addWidget(label_nrroboty,0,0)
195 self.LO_edycja.addWidget(nrroboty,0,1)
196 self.LO_edycja.addWidget(label_postep,1,0)
197 self.LO_edycja.addWidget(postep,1,1)
198 self.LO_edycja.addWidget(label_kerg,2,0)
199 self.LO_edycja.addWidget(kerg,2,1)
200 self.LO_edycja.addWidget(label_nazwa,3,0)
201 self.LO_edycja.addWidget(nazwa,3,1)
202 self.LO_edycja.addWidget(label_nr_dzialki,4,0)
203 self.LO_edycja.addWidget(nr_dzialki,4,1)
204 self.LO_edycja.addWidget(label_mzas,5,0)
205 self.LO_edycja.addWidget(mzas,5,1)
206 self.LO_edycja.addWidget(label_mewid,6,0)
207 self.LO_edycja.addWidget(mewid,6,1)
208 self.LO_edycja.addWidget(label_ulica,7,0)
209 self.LO_edycja.addWidget(ulica,7,1)
210 self.LO_edycja.addWidget(label_asortyment,8,0)
211 self.LO_edycja.addWidget(asortyment,8,1)
212 self.LO_edycja.addWidget(label_netto,9,0)
213 self.LO_edycja.addWidget(netto,9,1)
214 self.LO_edycja.addWidget(label_brutto,10,0)
215 self.LO_edycja.addWidget(brutto,10,1)
216 self.LO_edycja.addWidget(label_datarozp,11,0)
217 self.LO_edycja.addWidget(datarozp,11,1)
218 self.LO_edycja.addWidget(label_notatki,12,0)
219 self.LO_edycja.addWidget(notatki,12,1)
220 self.LO_edycja.addWidget(label_konid,13,0)
221 self.LO_edycja.addWidget(konid,13,1)
222 ##self.LO_edycja.addWidget(label_licencja,3,0)
223
224 self.widget_edycja.setLayout(self.LO_edycja)
225 self.scroll1.setWidget(self.widget_edycja)
226
227
228
229
230
231
232
233
234
235
236
237 def status(self,nr):
238 if nr == 0 or nr =='0':
239 status = 'Rozpoczęta'
240 elif nr == 1 or nr =='1':
241 status = 'W teren'
242 elif nr == 2 or nr =='2':
243 status = 'Kameralka'
244 elif nr == 3 or nr =='3':
245 status = 'W urzędzie'
246 elif nr == 4 or nr =='4':
247 status = 'Wstrzymana'
248 elif nr == 5 or nr =='5':
249 status = 'Zakończona'
250 elif nr == 6 or nr =='6':
251 status = 'Wydana'
252 elif nr == 7 or nr =='7':
253 status = 'Anulowana'
254 else:
255 status = ''
256 return status
257 def zaserweruj(self):
258 try:
259 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
260 except socket.error:
261 print 'Failed to create socket'
262 print 'Socket Created'
263 host = '192.168.0.10';
264 port = 50000;
265 try:
266 remote_ip = socket.gethostbyname( host )
267 except socket.gaierror:
268 print 'Hostname could not be resolved. Exiting'
269 sys.exit()
270 s.connect((remote_ip , port))
271 globals()["s_glob"] = s
272 print 'Socket Connected to ' + host + ' on ip ' + remote_ip
273 def bazadanych_zapytanie(self,komenda):
274 #host = '192.168.0.10'
275 #port = 50000
276 #size = 1024
277 #s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
278 #try:
279 #s.connect((host,port))
280 #except Exception as e:
281 #self.ui.label_47.setText(str(e).decode('utf-8'))
282 s = s_glob
283 msg2 = komenda
284 msg3 = (1,'1',komenda)
285 msg = pickle.dumps(msg3)
286 msg = struct.pack('>I', len(msg)) + msg
287 dlugosc = len(msg)
288 if dlugosc>1000:
289 petla = (dlugosc/1000)+1
290 i = 0
291 for i in range(petla):
292 poczatek = (i*1000)
293 koniec = (i*1000)+1000
294 s.send(msg[poczatek:koniec])
295 i=i+1
296 elif dlugosc<1000 and dlugosc != 0:
297 try:
298 s.send(msg)
299 except:
300 self.zaserweruj()
301 s.send(msg)
302
303 #s.send(msg)
304 data = self.recv_msg(s)
305 #self.ui.okno_progress.hide()
306 #s.close()
307 if data:
308 dlugosc_data = len(data)
309 zapytanie = pickle.loads(data)
310 return zapytanie
311 else:
312 return 'pusty'
313 def recv_msg(self, sock):
314 # Read message length and unpack it into an integer
315
316 raw_msglen = self.recvall(sock, 4)
317 if not raw_msglen:
318 return None
319 msglen = struct.unpack('>I', raw_msglen)[0]
320 # Read the returnmessage data
321 return self.recvall(sock, msglen)
322
323 def recvall(self, sock, n):
324 # Helper function to recv n bytes or return None if EOF is hit
325 data = ''
326 while len(data) < n:
327 packet = sock.recv(n - len(data))
328 if not packet:
329 return None
330 data += packet
331
332 return data
333
334 def eventFilter(self, widget, event):
335 if (event.type() == QEvent.GraphicsSceneMousePress and widget is self.szkic.scene()):
336 x = event.scenePos().x()
337 y = event.scenePos().y()
338 if wsp == None:
339 globals()["wsp"] = [x,y]
340 else:
341 x0 = wsp[0]
342 y0 = wsp[1]
343 self.szkic.scene().addLine(x0,y0,x,y)
344 globals()["wsp"] = [x,y]
345 return False
346 return QtWidgets.QDialog.eventFilter(self, widget, event)
347if __name__ == '__main__':
348 app = QtWidgets.QApplication(sys.argv)
349 dialog = Dialog()
350sys.exit(dialog.exec_())