# https://docs.python.org/3/faq/programming.html#why-do-lambdas-defined-in-a-loop-with-different-values-all-return-the-same-result
# https://stackoverflow.com/questions/53751106/create-lambda-functions-in-a-loop-for-pyqt5-signals?noredirect=1
from PyQt5.QtWidgets import (
QDialog, QVBoxLayout,
QHBoxLayout, QLabel,
QPushButton, QGroupBox,
QComboBox, QLineEdit,
QMessageBox
)
from src.database.dbsearch import DbSearch
from src.database.dbmission import DbMission
def core_mandater(mainWindow: object, dial: object, proId: int) -> None:
""""""
dbmission: object = DbMission(mainWindow)
dbsearch: object = DbSearch(mainWindow)
proJobs: list = dbsearch.get_pro_job_by_proid(proId)
dial: object = QDialog(dial)
labInpMandate: object = QLabel("Sujet de la mission:")
inpMandate: object = QLineEdit(maxLength=128)
layInpMandate: object = QHBoxLayout()
layInpMandate.addWidget(labInpMandate)
layInpMandate.addStretch()
layInpMandate.addWidget(inpMandate)
labCmbMandate: object = QLabel("Profession concernée:")
cmbMandate: object = QComboBox()
layCmbMandate: object = QHBoxLayout()
for i in proJobs:
cmbMandate.addItem(f"{i[2]}", i[0])
layCmbMandate.addWidget(labCmbMandate)
layCmbMandate.addStretch()
layCmbMandate.addWidget(cmbMandate)
btnMandate = QPushButton("Mandater")
btnMandate.clicked.connect(
lambda: [
dbmission.register_mission(
inpMandate.text(),
mainWindow.userId,
proId,
cmbMandate.currentData()
),
QMessageBox.information(
dial,
"Mandater une mission",
"Votre mission à bien été mandatée"
),
dial.close()
]
)
layBtnMandate: object = QHBoxLayout()
layBtnMandate.addStretch()
layBtnMandate.addWidget(btnMandate)
layBtnMandate.addStretch()
layGrp: object = QVBoxLayout()
layGrp.addLayout(layInpMandate)
layGrp.addLayout(layCmbMandate)
layGrp.addLayout(layBtnMandate)
grpMandate: object = QGroupBox()
grpMandate.setLayout(layGrp)
layMain: object = QVBoxLayout()
layMain.addWidget(grpMandate)
dial.setLayout(layMain)
dial.show()
def core_more_infos(mainWindow: object, dial: object, proId: int) -> None:
""""""
dial: object = QDialog(dial)
search: object = DbSearch(mainWindow)
resRecherche: list = search.get_user_info_by_userid(proId)[0][1:]
labelsText: list = [
"Nom",
"Prénom",
"Diplôme",
"Capacités",
"Description",
"Téléphone",
"Adresse",
"Code postale",
"Ville",
]
layProInfo = QVBoxLayout()
for i in range(len(resRecherche)):
line: object = QHBoxLayout()
line.addWidget(QLabel(f"{labelsText[i]}: {resRecherche[i]}"))
layProInfo.addLayout(line)
if mainWindow.userStatus == "Client":
layBtnMandate: object = QHBoxLayout()
btnMandate: object = QPushButton("Mandater")
btnMandate.clicked.connect(
lambda:
core_mandater(mainWindow, dial, proId)
)
layBtnMandate.addStretch()
layBtnMandate.addWidget(btnMandate)
layBtnMandate.addStretch()
layProInfo.addLayout(layBtnMandate)
grpProInfo: object = QGroupBox()
grpProInfo.setLayout(layProInfo)
layMain: object = QVBoxLayout()
layMain.addWidget(grpProInfo)
dial.setLayout(layMain)
dial.show()
def window_main(mainWindow: object, results: list) -> None:
""""""
dial: object = QDialog(parent=mainWindow)
dial.setWindowTitle("Recherche")
layoutsResult: list = []
for i in results:
layoutLine = QHBoxLayout()
color = results.index(i) % 2
if color:
colored = QLabel(i["text"])
colored.setStyleSheet("background-color: rgb(230,200,200); border-radius: 3px")
layoutLine.addWidget(colored)
else:
layoutLine.addWidget(QLabel(i["text"]))
btnInfos = QPushButton("Infos")
btnInfos.clicked.connect(
lambda checked, proId=i["id"]:
core_more_infos(mainWindow, dial, proId)
)
layoutLine.addStretch()
layoutLine.addWidget(btnInfos)
layoutsResult.append(layoutLine)
layoutMain = QVBoxLayout()
for layout in layoutsResult:
layoutMain.addLayout(layout)
dial.setLayout(layoutMain)
dial.show()