コード例 #1
0
	def handleResponse(self, flow: http.HTTPFlow) -> None:
		"""Handles responses received from the server or replayed from mitmproxy."""

		if not self.running:
			logger.warning("Attack won't handle response because it isn't running")
			return

		if flow.request.method == "GET" and flow.request.host == self.fuzzed_host:
			logger.info("Received response to GET request from fuzzed host")

			credentials = self.SD.isSuccess(flow)
			if credentials:
				logger.info("Found credentials, attack stopped")
				logger.info("Credentials: " + str(credentials))
				pp_creds = utils.prettyPrintDict(credentials)
				utils.showMessage("Success", str("Correct credentials:\n" + pp_creds))
				self.stop()
				return
			logger.info("Wrong GET response intercepted, extracting token")

			fresh_token = utils.extractCSRF(flow)
			logger.info("Done extracting")
			prepared_request_flow = self.prepareOriginatorReplay(fresh_token)

			self.setNextInput(prepared_request_flow)
			if not self.running:
				logger.info("Attack not running therefore exiting")
				return
			logger.info("Replay GET request with parameters" + str(prepared_request_flow.request.query))
			ctx.master.commands.call("replay.client", [prepared_request_flow])
コード例 #2
0
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        self.ui = Ui_EmployeeWindow()
        self.ui.setupUi(self)
        self.setBaseSize(1150, 515)
        self.setWindowTitle(
            f'Administrador de Licencias - Version {__version__}')
        localTest = True

        if not localTest:
            IP = findIPfromMAC('00-1f-1f-12-a9-73')
            # print(IP)
            if (IP.find('192.168') == -1):
                showMessage(
                    'Fallo en la detección de la IP. Compruebe que la máquina servidor este encendida'
                )
                sys.exit(1)

        try:
            if localTest:
                self.connection = psycopg2.connect(
                    "dbname='holidaysAdministrator' user='******' host='localhost' password='******'"
                )
            else:
                self.connection = psycopg2.connect(
                    "dbname='holidaysAdministrator' user='******' host='%s' password='******' port='5432'"
                    % IP)
        except psycopg2.OperationalError as e:
            showMessage(
                'Fallo en la conexión con la base de datos. Compruebe que la máquina servidor este encendida'
            )
            sys.exit(1)

        self.currentUserID = 1
        return
コード例 #3
0
def main():
    # create the application and the main window
    app = QtWidgets.QApplication(sys.argv)
    # setup stylesheet
    app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())

    if not os.path.isdir(INSTALLATION_FOLDER):
        showMessage(
            'No se puede ejecutar el programa. Ruta de instalación no encontrada'
        )
        sys.exit(app.exec_())
        return

    # check for actualizations


#    updater_exe = os.path.join(INSTALLATION_FOLDER, "ADL Updater.exe")
#    process = subprocess.Popen([updater_exe])
#    process.wait()

    ew = employeeWindow()
    result = ew.login()
    while not result:
        showMessage(
            'Usuario o contraseña inválido. Por favor, intentelo de nuevo')
        result = ew.login()
    if result < 0:
        sys.exit(0)
    ew.show()
    ew.loadData()
    sys.exit(app.exec_())
    return
コード例 #4
0
    def agregarFeriados(self):
        dialog = QtWidgets.QDialog()
        dialog.setFixedSize(190, 145)
        mfDialog = Ui_ModificarFeriadosDialog()
        mfDialog.setupUi(dialog)
        mfDialog.fecha_feriado.setDate(datetime.datetime.now())
        Result = dialog.exec_()

        if Result:
            Fecha = mfDialog.fecha_feriado.date()
            Razon = mfDialog.razon_feriado.toPlainText()
            msg = '¿Desea agregar el día ' + str(
                Fecha.toString('dd/MM/yyyy')) + ' como feriado ?'
            Rta = showMessage(
                msg, 4, QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
            if Rta == QtWidgets.QMessageBox.Yes:
                IDCurrentPeriod = getIDCurrentPeriod(self.connection)
                Result = addFeriados(self.connection, IDCurrentPeriod, Fecha,
                                     Razon)
                if Result == 0:
                    QtWidgets.QMessageBox.information(self, 'Exito',
                                                      'Operación realizada')
                    self.showFeriados()
                    self.parent.colourFeriados()
                elif Result == 23505:
                    showMessage('Usted ya seleccionó este día como feriado')
                else:
                    showMessage('No se pudo realizar la operación solicitada')
            else:
                QtWidgets.QMessageBox.information(self, 'Cancelada',
                                                  'Solicitud cancelada')

        return
コード例 #5
0
    def deleteRestriction(self):
        employeeNames = self.ui.restricciones_tableWidget.currentItem().text()
        msg = '¿Desea eliminar la restricción de ' + str(
            employeeNames) + ' de la lista?'
        Ret = showMessage(msg, 4,
                          QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
        if (Ret == QtWidgets.QMessageBox.Yes):
            Names = employeeNames.split(' - ')
            employeeList = '{'
            for iNames in Names:
                iNames = iNames.split(' ')
                ID = getUserID(self.connection, iNames[0], iNames[1])
                employeeList = employeeList + str(ID) + ','
            employeeList = employeeList[0:-1]
            employeeList = employeeList + '}'
            Rows = deleteRestriccionesUsuarios(self.connection, employeeList)
            if Rows != 0:
                QtWidgets.QMessageBox.information(self, 'Exito',
                                                  'Operación realizada')
                self.showRestricciones()
            else:
                showMessage('No se ha podido efectuar la operación')

        return

        return
コード例 #6
0
    def eliminarFeriados(self):
        dialog = QtWidgets.QDialog()
        dialog.setFixedSize(190, 145)
        mfDialog = Ui_ModificarFeriadosDialog()
        mfDialog.setupUi(dialog)
        mfDialog.fecha_feriado.setDate(datetime.datetime.now())
        mfDialog.razon_feriado.setEnabled(False)
        Result = dialog.exec_()

        if Result:
            Fecha = mfDialog.fecha_feriado.date()
            msg = '¿Desea eliminar el día ' + str(
                Fecha.toString('dd/MM/yyyy')) + ' como feriado?'
            Rta = showMessage(
                msg, 4, QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
            if Rta == QtWidgets.QMessageBox.Yes:
                IDCurrentPeriod = getIDCurrentPeriod(self.connection)
                Result = deleteFeriados(self.connection, IDCurrentPeriod,
                                        Fecha)
                if Result == 1:
                    QtWidgets.QMessageBox.information(self, 'Exito',
                                                      'Operación realizada')
                elif Result == 0:
                    showMessage('No existe ningún feriado en esa fecha')
                else:
                    showMessage('No se pudo realizar la operación solicitada')
                self.showFeriados()
                self.parent.colourFeriados()
            else:
                QtWidgets.QMessageBox.information(self, 'Cancelada',
                                                  'Solicitud cancelada')
コード例 #7
0
 def addRestriction(self):
     addrDialog = addRestrictionDialog(self.connection, self.currentUserID)
     Return = addrDialog.exec_()
     if Return:
         cantEmpleados = addrDialog.ui.employee_listWidget.count()
         if cantEmpleados == 0:
             showMessage('No ha seleccionado ningún empleado')
             return
         text = ''
         for iItem in xrange(cantEmpleados):
             item = addrDialog.ui.employee_listWidget.item(iItem)
             text = text + item.text() + ', '
         msg = '¿Desea agregar una restricción con ' + str(
             text) + ' a la lista?'
         Ret = showMessage(
             msg, 4, QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
         if Ret == QtWidgets.QMessageBox.Yes:
             employeeList = '{'
             for iItem in xrange(cantEmpleados):
                 item = addrDialog.ui.employee_listWidget.item(iItem)
                 item = item.text().split(' ')
                 currID = getUserID(self.connection, item[0], item[1])
                 employeeList = employeeList + str(currID) + ','
             employeeList = employeeList[0:-1]
             employeeList = employeeList + '}'
             Ret = addRestriccionesUsuarios(self.connection, employeeList)
             if (Ret == 0):
                 QtWidgets.QMessageBox.information(self, 'Exito',
                                                   'Operación realizada')
                 self.showRestricciones()
             else:
                 showMessage('No se ha podido efectuar la operación')
     else:
         QtWidgets.QMessageBox.information(self, 'Cancelada',
                                           'Restricción cancelada')
コード例 #8
0
 def selectPeriod(self, item):
     newAnio = str(item.text())
     msg = '¿Desea utilizar el periodo ' + newAnio + ' como activo?'
     Rta = showMessage(msg, 4,
                       QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
     if Rta == QtWidgets.QMessageBox.Yes:
         currentPeriod = getIDCurrentPeriod(self.connection)
         # reseteo calendario antes de que se cambie el periodo activo
         self.parent.resetCalendar()
         Anio = getAnioPeriod(self.connection, currentPeriod)
         Ret = activate_deactivatePeriod(self.connection, Anio, False)
         if Ret != 0:
             showMessage('La operación no pudo realizarse')
             return
         Ret = activate_deactivatePeriod(self.connection, newAnio, True)
         if Ret != 0:
             showMessage('La operación no pudo realizarse')
             return
         # cambio de periodo activo (en la ventana)
         self.setActive(Anio)
         # vuelvo a cargar las nuevas variables
         self.parent.showEmployeeStatus()
         self.parent.colourRequestedDays()
         self.parent.colourFeriados()
         QtWidgets.QMessageBox.information(self, 'Exito',
                                           'Operación realizada')
     return
コード例 #9
0
 def aprobeRequest(self):
     if self.ui.tableAdmSolicitudes.currentRow()>=0:
         RequestNumber=str(self.ui.tableAdmSolicitudes.item(self.ui.tableAdmSolicitudes.currentRow(),0).text())
         VecRes = self.verifyRestriccion(RequestNumber)
         if VecRes != []:
             names = ''
             for iVecRes in VecRes:
                 for ijVecRes in iVecRes:
                     User = searchNameForUserByID(self.connection,ijVecRes)
                     names = names + User[0][0] + ' ' + User[0][1] + ', '
                 names = names[:-2] if names != '' else names
                 names = names + ' - '
             names = names[:-3] if names != '' else names
             msg = 'Está por aprobar una solicitud que viola una restricción: %s ¿Desea continuar?'%(names)
             Rta = showMessage(msg, 4, QtWidgets.QMessageBox.Yes|QtWidgets.QMessageBox.No)
             if Rta==QtWidgets.QMessageBox.No:
                 QtWidgets.QMessageBox.critical(self,'Cancelar','Aprobación cancelada')
                 return
         msg = '¿Desea aprobar la solicitud %s?'%RequestNumber
         Rta = showMessage(msg, 4, QtWidgets.QMessageBox.Yes|QtWidgets.QMessageBox.No)
         if Rta==QtWidgets.QMessageBox.Yes:
             Return=updateRequestStatus(RequestNumber,False,self.currentUserID,self.connection)
             if Return==0:
                 QtWidgets.QMessageBox.information(self,'Exito','Aprobación confirmada')
                 self.showRequestsAdm()
         else:
             QtWidgets.QMessageBox.critical(self,'Cancelar','Aprobación cancelada')
     else:
         showMessage('Debe seleccionar una solicitud')
     return
コード例 #10
0
	def handleResponse(self, flow: http.HTTPFlow) -> None:
		"""Handles responses received from the server or replayed from mitmproxy."""

		logger.info("Got response:" + str(flow.response))
		if flow.request.method == "GET" and flow.request.host == self.fuzzed_host:
			logger.info("Received response to GET from fuzzed host")

			credentials = self.SD.isSuccess(flow)
			if credentials:
				logger.info("Found credentials, attack stopped")
				logger.info("Credentials: " + str(credentials))
				pp_creds = utils.prettyPrintDict(credentials)
				utils.showMessage("Success", str("Correct credentials:\n" + pp_creds))
				self.stop()
				return
			logger.info("Wrong GET response intercepted")

			fresh_token = utils.extractCSRF(flow)
			prepared_request_flow = self.prepareOriginatorReplay(fresh_token)

			self.setNextInput(prepared_request_flow)
			if not self.running:
				logger.info("Attack not running therefore exiting")
				return
			self.originator_flow = prepared_request_flow.copy()

			logger.info("Replaying POST request form with parameters: " + str(prepared_request_flow.request.urlencoded_form))
			ctx.master.commands.call("replay.client", [prepared_request_flow])
			
		if flow.request.method == "POST" and flow.request.url == self.fuzzed_url:
			if flow.response.status_code == 302:
				logger.info("Processing 302")
				self.handleRedirect(flow)
			elif flow.response.status_code == 200:
				logger.info("Received response to POST request from fuzzed host")

				credentials = self.SD.isSuccess(flow)
				if credentials:
					logger.info("Found credentials, attack stopped")
					logger.info("Credentials: " + str(credentials))
					pp_creds = utils.prettyPrintDict(credentials)
					utils.showMessage("Success", str("Correct credentials:\n" + pp_creds))
					self.stop()
					return
				logger.info("Response is not successful")

				fresh_token = utils.extractCSRF(flow)
				logger.info("Done extracting")
				prepared_request_flow = self.prepareOriginatorReplay(fresh_token)

				self.setNextInput(prepared_request_flow)
				if not self.running:
					logger.info("Attack not running therefore exiting")
					return
				logger.info("Replay POST request with parameters" + str(prepared_request_flow.request.urlencoded_form))
				ctx.master.commands.call("replay.client", [prepared_request_flow])
コード例 #11
0
    def giveDays(self):
        senderButton = self.sender().objectName()
        dialog = QtWidgets.QDialog()
        dialog.setFixedSize(362, 280)
        admDialog = Ui_AdmDaysDialog()
        admDialog.setupUi(dialog)
        AllUsersIDs = searchAllUsersID(self.connection)

        for UserID in AllUsersIDs:
            Nombre = searchNameForUserByID(self.connection, UserID[0])
            admDialog.employee_comboBox.addItem(Nombre[0][0] + ' ' +
                                                Nombre[0][1])

        result = dialog.exec_()

        if result:
            dias = admDialog.days_doubleSpinBox.value()
            if (dias % .5 != 0):
                showMessage('El número ingresado no es válido')
                return

            empleado = admDialog.employee_comboBox.currentText()
            txt = 'agregar ' if senderButton == 'giveDays_pushButton' else 'descontar '
            msg = '¿Desea ' + str(txt) + str(
                dias) + ' días al empleado ' + str(empleado) + '?'
            Rta = showMessage(
                msg, 4, QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
            if Rta == QtWidgets.QMessageBox.Yes:
                empleado = empleado.split(' ')
                ID_Usuario = getUserID(self.connection, empleado[0],
                                       empleado[1])
                IDCurrentPeriod = getIDCurrentPeriod(self.connection)
                DiasOriginal = searchDaysByUserID(self.connection, ID_Usuario,
                                                  IDCurrentPeriod)
                DiasTotal = DiasOriginal + dias if senderButton == 'giveDays_pushButton' else DiasOriginal - dias
                ID_Usuario = getUserID(self.connection, empleado[0],
                                       empleado[1])
                Result = AddDaysToUser(self.connection, DiasTotal, ID_Usuario,
                                       IDCurrentPeriod)
                if Result == 0:
                    QtWidgets.QMessageBox.information(self, 'Exito',
                                                      'Operación realizada')
                    #                    IDCurrentPeriod=getIDCurrentPeriod(self.connection)
                    Razon = str(admDialog.razon_plainTextEdit.toPlainText()
                                ) if admDialog.razon_plainTextEdit.toPlainText(
                                ) != '' else '-'
                    AltaBaja = 1 if senderButton == 'giveDays_pushButton' else 0
                    IDUsuario = getUserID(self.connection, empleado[0],
                                          empleado[1])
                    AddNotification(self.connection, Razon, str(dias),
                                    AltaBaja, IDUsuario, IDCurrentPeriod,
                                    self.currentUserID)
                    self.showEmployeeStatus()
                else:
                    showMessage('No se pudo realizar la operación solicitada')
        return
コード例 #12
0
 def deletePeriod(self):
     Item = self.ui.period_listWidget.currentItem()
     if not Item:
         showMessage('Debe seleccionar un periodo')
         return
     ItemText = Item.text()
     currentPeriod = getIDCurrentPeriod(self.connection)
     Anio = getAnioPeriod(self.connection, currentPeriod)
     if ItemText == str(Anio):
         showMessage('El periodo a eliminar no puede ser el actual')
         return
     msg = '¿Desea eliminar el periodo ' + str(
         ItemText
     ) + '? Considere que todas las solicitudes y notificaciones serán también eliminadas'
     Rta = showMessage(msg, 4,
                       QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
     if Rta == QtWidgets.QMessageBox.Yes:
         currentPeriod = getIDCurrentPeriod(self.connection)
         Anio = getAnioPeriod(self.connection, currentPeriod)
         if Anio == ItemText:
             showMessage('No puede eliminar el periodo actual')
             return
         rows = deletePeriodByYear(self.connection, ItemText)
         if rows == 1:
             QtWidgets.QMessageBox.information(self, 'Exito',
                                               'Operación realizada')
             self.showPeriods()
         else:
             showMessage('El periodo no pudo ser eliminado')
     return
コード例 #13
0
 def cancelRequest(self):
     if self.ui.tableAdmSolicitudes.currentRow()>=0:
         RequestNumber=str(self.ui.tableAdmSolicitudes.item(self.ui.tableAdmSolicitudes.currentRow(),0).text())
         msg = '¿Desea cancelar la solicitud %s?'%RequestNumber
         Rta = showMessage(msg, 4, QtWidgets.QMessageBox.Yes|QtWidgets.QMessageBox.No)
         if Rta==QtWidgets.QMessageBox.Yes:
             Return=updateRequestStatus(RequestNumber,True,self.currentUserID,self.connection)
             if Return==0:
                 QtWidgets.QMessageBox.information(self,'Exito','Cancelación confirmada')
                 self.showRequestsAdm()
         else:
             QtWidgets.QMessageBox.critical(self,'Cancelar','Cancelación rechazada')
     else:
         showMessage('Debe seleccionar una solicitud')
     return
コード例 #14
0
 def closeEvent(self, ev):
     msg = '¿Está seguro de que desea salir del Administrador de Licencias?'
     Rta = showMessage(msg, 4,
                       QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
     if Rta == QtWidgets.QMessageBox.No:
         ev.ignore()
     return
コード例 #15
0
def preguntaSolicitarCFDI():
    fechaInicio = txtFechaInicio.get()
    fechaFin = txtFechaFin.get()
    directory = txtDir.get()
    if fechaInicio != '' and fechaFin != '' and directory != '':
        res = tkMessageBox.askyesno(
            title='Advertencia',
            message=
            'El procedimiento "Solicitar CFDI" sólo se puede hacer una vez.\n ¿Deseas continuar?'
        )
        if res:
            solicitarCFDI()
    else:
        tool.showMessage(
            'Mensaje',
            'Por favor, verifica que las fechas o el directorio no estén vacíos'
        )
コード例 #16
0
 def searchAndDeleteRequest(self, UserID, conn):
     ReqID = self.ui.spinBox_request.value()
     rows = searchRequestByIDs(ReqID, UserID, conn)
     if len(rows) == 1:
         if rows[0][6] == 'P':
             deleteRequestByID(ReqID, conn)
             QtWidgets.QMessageBox.information(self, 'Exito',
                                               'Solicitud cancelada')
             return 0
         else:
             showMessage(
                 'La solicitud ingresada ya fue aprobada o cancelada. Por favor contacte con el administrador'
             )
             return -1
     else:
         showMessage('La solicitud ingresada no existe')
         return -1
コード例 #17
0
 def addPeriod(self):
     year, end_date, ok = DateDialog.getDateTime()
     if ok:
         msg = '¿Desea crear el periodo ' + str(year) + '?'
         Rta = showMessage(
             msg, 4, QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
         if Rta == QtWidgets.QMessageBox.Yes:
             Res = addPeriod(self.connection, year, end_date)
             if Res == 0:
                 # para cada usuario, insertar sus dias para el respectivo periodo
                 IDs = searchAllUsersID(self.connection)
                 IDPeriod = getIDPeriodByYear(self.connection, year)
                 for ID in IDs:
                     Res = addDaysOnPeriod(self.connection, ID[0], IDPeriod)
                     if Res != 0:
                         showMessage(
                             'Error insertando los días del periódo. Contacte con el administrador inmediatamente.'
                         )
                         return
                 QtWidgets.QMessageBox.information(self, 'Exito',
                                                   'Operación realizada')
                 self.showPeriods()
             elif Res == 23505:
                 showMessage('El periodo ya existe')
             else:
                 showMessage('El periodo no pudo ser creado')
     return
コード例 #18
0
	def setNextInput(self, flow: http.HTTPFlow) -> None:
		"""Set next fuzz input from the list."""

		#logger.info("In setNextInput, flow:" + str(flow.request))
		if not flow.request:
			logger.info("Provided flow does not contain a request")
		parameters = utils.getRequestParams(flow.request)
		logger.info("Parameters loaded:" + str(parameters))
		for param in parameters:
			logger.info("Checking parameter for next input:" + param)
			if param in self.fuzz_inputs:
				if not self.fuzz_inputs[param]:
					logger.warning("Fuzz input list is empty, terminating attack")
					utils.showMessage("Error", "Attack stopped: fuzz inputs depleted")
					self.stop()
					return
				utils.setFlowRequestParameter(flow, param, self.fuzz_inputs[param].pop())
				break
		logger.info("Next input set")
コード例 #19
0
def login():
    #Check user and authorization
    mail = txtUser.get()
    strPwd = txtPwd.get()
    if mail == '' or strPwd == '':
        tool.showMessage('Mensaje', 'Favor de completar los datos de login')
    else:
        query = f"select id,autorizado from usuario where correo='{mail}' and contrasena='{strPwd}' "
        res = None
        res = bd.getQuery(query)
        if res:
            #Case: User exists, check if it is authorized
            auth = None
            auth = res[0][1]
            if auth:
                #Case: User is authorized
                cfdi_excel_window = tk.Toplevel(login_window)
                login_window.withdraw()
                win_cfdi.openWindowCFDI_ExcelVersion(cfdi_excel_window,
                                                     login_window)
            else:
                tool.showMessage(
                    'Mensaje',
                    f'El usuario {mail} está pendiente de autorización')

        else:
            #Case: User doesn't exist
            tool.showMessage(
                'Mensaje',
                f'El usuario {mail} no existe, favor de registrarse')
コード例 #20
0
    def loadData(self):
        if (self.currentUserID < 0):
            showMessage(
                'Ha ocurrido un error. Por favor comuníquese con el administrador'
            )
            sys.exit(1)

        UserTuple = searchUserByID(self.currentUserID, self.connection)
        if (len(UserTuple) > 1):
            showMessage(
                'Ha ocurrido un error. Por favor comuníquese con el administrador'
            )
            sys.exit(1)

        self.currentUserName = UserTuple[0][1]
        self.currentUserMail = UserTuple[0][5]

        self.changeView()

        IDCurrentPeriod = getIDCurrentPeriod(self.connection)
        RestOfDays = self.calculateRemainingDays(IDCurrentPeriod)
        end_date = getEndDatePeriod(self.connection, IDCurrentPeriod)
        current_date = datetime.date.today()
        remaining_days = abs((current_date - end_date).days)
        if RestOfDays > 0 and remaining_days < 20:
            showMessage(
                "Quedan %s días para que finalize el período. Por favor, solicite sus días antes de que éstos expiren"
                % remaining_days, 1)
        return
コード例 #21
0
 def addEmployeeToList(self):
     empleado = self.ui.employee_comboBox.currentText()
     msg = '¿Desea agregar a ' + str(empleado) + ' a la lista?'
     Rta = showMessage(msg, 4,
                       QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
     if Rta == QtWidgets.QMessageBox.Yes:
         if empleado in self.currentEmployeesOnList:
             QtWidgets.QMessageBox.critical(
                 self, 'Error', 'El empleado ya se encuentra en la lista')
         else:
             self.ui.employee_listWidget.addItem(empleado)
             self.currentEmployeesOnList.append(empleado)
     return
コード例 #22
0
def solicitarCFDI():
    global var
    #Dates on txtDates : dd/mm/yyyy
    #lsFolderName saves importantd data along its way to name the folder where the zip and xls will be saved
    #lsFolder elements (by order):[tipo,fechaCompleta,rfc_solicitante,fileName]
    fechaInicio = txtFechaInicio.get()
    fechaFin = txtFechaFin.get()
    directory = txtDir.get()
    tipo = var.get()
    chunksFI = fechaInicio.split('/')
    chunksFF = fechaFin.split('/')
    fecha_inicial = datetime.datetime(int(chunksFI[2]), int(chunksFI[1]),
                                      int(chunksFI[0]))
    fecha_final = datetime.datetime(int(chunksFF[2]), int(chunksFF[1]),
                                    int(chunksFF[0]))
    strFechaInicial = str(fecha_inicial.day) + str(fecha_inicial.month) + str(
        fecha_inicial.year)
    strFechaFin = str(fecha_final.day) + str(fecha_final.month) + str(
        fecha_final.year)
    strFechaCompleta = strFechaInicial + '_' + strFechaFin
    res = tool.solicitaDescarga(fecha_inicial, fecha_final, directory, tipo,
                                strFechaCompleta, VERSION)
    #lsValor[1]-> ID solicitud returned, could be Emisor or Receptor
    tool.showMessage('Mensaje', res[1])
コード例 #23
0
 def resetEmployeePassword(self):
     employee_name = str(self.ui.employee_comboBox.currentText())
     employee = employee_name.split(' ')
     user_id = getUserID(self.connection, employee[0], employee[1])
     msg = '¿Desea resetear la contraseña del usuario ' + employee_name + '?'
     Rta = showMessage(msg, 4,
                       QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
     if Rta == QtWidgets.QMessageBox.Yes:
         ret = changePasswordbyID(user_id, "", self.connection)
         if not ret:
             showMessage('Operación realizada', 1)
         else:
             showMessage('No se pudo realizar la operación solicitada')
     else:
         showMessage('Operación cancelada', 1)
     return
コード例 #24
0
def register_user():
    global txtNombreR, txtAPR, txtAMR, txtCorreoR, txtPwdR, txtEmpresa
    name = txtNombreR.get()
    lastNameFather = txtAPR.get()
    lastNameMother = txtAMR.get()
    mail = txtCorreoR.get()
    pwd = txtPwdR.get()
    company = txtEmpresaR.get()
    if name == '' or lastNameFather == '' or lastNameMother == '' or mail == '' or pwd == '' or company == '':
        tool.showMessage('Mensaje',
                         'Verifica que todos los campos estén llenos')
    else:
        #Check if user exists and if its AUTHORIZED, if it exists then send message saying "User already exists"
        query = f"select id,autorizado from usuario where correo='{mail}' "
        res = None
        res = bd.getQuery(query)
        if not res:
            #Register user
            st = f"insert into usuario (nombre,apellidopaterno,apellidomaterno,empresa,correo,contrasena,fechacompleta,autorizado,softwareversion)"
            st += f"values ('{name}','{lastNameFather}','{lastNameMother}','{company}','{mail}','{pwd}','{datetime.datetime.now().strftime(formatTimeForPostgreSQL)}',False,'{SOFTWARE_VERSION}')"
            resSt = False
            resSt = bd.executeNonQuery(st)
            if resSt:
                tool.showMessage(
                    'Registro exitoso',
                    f'El usuario {mail} ha sido creado exitosamente, en 24 hrs tu cuenta quedará ACTIVADA'
                )
                #Send mail- Asynchronous way to send the mail, if it fails it will show a message
                sendMail = threading.Thread(target=tool.sendMail, args=[mail])
                sendMail.start()
                sendMail.join()
                if not sendMail.is_alive():
                    print(f'The mail for {mail} is sent')

        else:
            #User already exists, now see if it is authorized
            auth = None
            auth = res[0][1]
            msj = None
            if auth:
                msj = f'El usuario {mail} ya está registrado y autorizado, favor de acceder a través de Log in'
            else:
                msj = f'El usuario {mail} ya está registrado pero está pendiente de autorización'

            tool.showMessage('Mensaje', msj)

        login_window.deiconify()
        register_window.destroy()
コード例 #25
0
 def removeEmployee(self):
     employeeStr = str(self.ui.employee_comboBox.currentText())
     employee = employeeStr.split(' ')
     UserID = getUserID(self.connection, employee[0], employee[1])
     msg = '¿Desea eliminar al usuario ' + employeeStr + ' del sistema?'
     Rta = showMessage(msg, 4,
                       QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
     if Rta == QtWidgets.QMessageBox.Yes:
         # reseteo antes de eliminarlo
         self.parent.resetCalendar()
         Ret = deleteEmployee(self.connection, UserID)
         if Ret == 1:
             self.parent.showEmployeeStatus()
             self.parent.colourRequestedDays()
             self.parent.colourFeriados()
             self.fillComboBox()
             showMessage('Operación realizada', 1)
         else:
             showMessage('No se pudo realizar la operación solicitada')
     else:
         showMessage('Operación cancelada', 1)
     return
コード例 #26
0
    def changePassword(self):
        Usuario = str(self.ui.Usuario.text())
        Matches = searchUserByLogin(Usuario, self.connection)
        if not Matches:
            showMessage("Por favor, ingrese un usuario valido")
            return
        cpd = changePasswordDialog(self.connection)
        result = cpd.exec_()
        if result:
            Password = str(cpd.ui.oldPasswordLineEdit.text())
            Matches = searchForUsers(Usuario, Password, self.connection)
            if not Matches:
                showMessage("La contraseña actual no es correcta")
                return
            newPassword = str(cpd.ui.newPasswordLineEdit.text())
            newPassword2 = str(cpd.ui.repeatNewPasswordLineEdit.text())
            if newPassword != newPassword2:
                showMessage("La contraseñas nuevas no coinciden")
                return
            msg = "¿Está seguro de cambiar su contraseña?"
            reply = showMessage(
                msg, 4, QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
            if reply == QtWidgets.QMessageBox.Yes:
                ret = changePassword(Usuario, newPassword, self.connection)
                if not ret:
                    showMessage("Operación exitosa", 1)
                else:
                    showMessage("Operación cancelada", 1)
                    return

        return
コード例 #27
0
 def addEmployee(self):
     dialog = QtWidgets.QDialog()
     dialog.setFixedSize(335, 225)
     addDialog = Ui_AddEmployeeDialog()
     addDialog.setupUi(dialog)
     Res = dialog.exec_()
     if Res:
         nombre = str(addDialog.nombre.text())
         apellido = str(addDialog.apellido.text())
         usuario = str(addDialog.usuario.text())
         password = str(addDialog.password.text())
         email = str(addDialog.email.text())
         rol = str(addDialog.rol.currentText())
         msg = '¿Desea incorporar a ' + nombre + ' ' + apellido + ' al sistema?'
         Rta = showMessage(
             msg, 4, QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
         if (Rta == QtWidgets.QMessageBox.Yes):
             Res = addEmployee(self.connection, nombre, apellido, usuario,
                               password, email)
             if (Res == 0):
                 UserID = getUserID(self.connection, nombre, apellido)
                 Res = createRol(self.connection, UserID, rol)
                 if (Res != 0):
                     showMessage(
                         'Error creando los roles para el nuevo usuario. Contacte al administrador inmediatamente.'
                     )
                     return
                 Periods = getAllPeriods(self.connection)
                 for iPeriod in Periods:
                     # se crean tablas para todos los periodos existentes. Habría que cambiar esto
                     Res = setDaysForNewUser(self.connection, UserID,
                                             iPeriod[0])
                     if (Res != 0):
                         showMessage(
                             'Error creando los dias para el nuevo usuario. Contacte al administrador inmediatamente.'
                         )
                         return
                 self.parent.resetCalendar()
                 self.parent.showEmployeeStatus()
                 self.parent.colourRequestedDays()
                 self.parent.colourFeriados()
                 self.fillComboBox()
                 showMessage('Operación realizada', 1)
             else:
                 showMessage('No se pudo realizar la operación solicitada')
         else:
             showMessage('Operación cancelada', 1)
     return
コード例 #28
0
    def requestDays(self, userID, conn):
        IDCurrentPeriod = getIDCurrentPeriod(conn)
        fechaDesde = self.ui.fechaDesde.date()
        fechaHasta = self.ui.fechaHasta.date() if self.ui.fechaHasta.isEnabled(
        ) else None
        Razon = self.ui.razon.toPlainText(
        ) if self.ui.razon.toPlainText() != '' else None
        MedioDia = self.ui.diaUnicoComboBox.currentIndex(
        ) if self.ui.diaUnico.isChecked() else None
        Tipo = self.ui.tipo.currentIndex()

        Requests = searchRequestsByUserID(userID, IDCurrentPeriod, conn, True)
        for irequest in Requests:
            ReqFechaDesde = datetime.date(irequest[1].year, irequest[1].month,
                                          irequest[1].day)
            ReqFechaHasta = datetime.date(
                irequest[2].year, irequest[2].month,
                irequest[2].day) if irequest[2] is not None else None
            currFechaDesde = datetime.date(fechaDesde.year(),
                                           fechaDesde.month(),
                                           fechaDesde.day())
            currFechaHasta = datetime.date(
                fechaHasta.year(), fechaHasta.month(),
                fechaHasta.day()) if fechaHasta is not None else None
            if ReqFechaHasta:
                if ReqFechaDesde <= currFechaDesde <= ReqFechaHasta:
                    showMessage(
                        'Usted ya ha pedido ese día o alguno de esos días anteriormente. Por favor cancele la solicitud para volver a efectuarla'
                    )
                    return -1
            if currFechaHasta:
                if currFechaDesde <= ReqFechaDesde <= currFechaHasta:
                    showMessage(
                        'Usted ya ha pedido ese día o alguno de esos días anteriormente. Por favor cancele la solicitud para volver a efectuarla'
                    )
                    return -1
            if ReqFechaDesde == currFechaDesde:
                showMessage(
                    'Usted ya ha pedido ese día o alguno de esos días anteriormente. Por favor cancele la solicitud para volver a efectuarla'
                )
                return -1

        msg = '¿Está seguro que desea solicitar los días %s a %s?' % (
            str(fechaDesde.toString('dd/MM/yyyy')),
            str(fechaHasta.toString('dd/MM/yyyy'))
        ) if fechaHasta is not None else '¿Está seguro que desea solicitar el día %s?' % str(
            fechaDesde.toString('dd/MM/yyyy'))
        Rta = showMessage(msg, 4,
                          QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
        if Rta == QtWidgets.QMessageBox.Yes:
            Return = doRequestByID(userID, conn, self.ui.fechaDesde.date(),
                                   Tipo, IDCurrentPeriod, fechaHasta, Razon,
                                   MedioDia)
            if Return == 23505:  #unique violation
                showMessage(
                    'Usted ya ha pedido ese día o alguno de esos días anteriormente. Por favor cancele la solicitud para volver a efectuarla'
                )
            elif Return == 23514:  #check violation
                showMessage('La fecha hasta debe ser mayor a la fecha desde')
            elif Return == 0:  #exito
                QtWidgets.QMessageBox.information(
                    self, 'Exito', 'Solicitud enviada correctamente')
            return Return
        else:
            QtWidgets.QMessageBox.information(self, 'Cancelada',
                                              'Solicitud cancelada')
            return -1
コード例 #29
0
# -*- coding: utf-8 -*-

import utils

import smotreshka

import mainform

if __name__ == '__main__':

    login = utils.getSetting("login")
    password = utils.getSetting("password")
    if (not login) or (not password):
        utils.showMessage("не заданы параметры подключения к сервису")
    else:
        sm = smotreshka.Smotreshka(login, password, utils.DATA_PATH)
        if not sm.check():
            utils.showMessage(
                "не удается подключиться к сервису, проверьте логин и пароль")
        else:
            utils.showMessage("запускаем приложение")
            w = mainform.WMainForm("mainform.xml", utils.ADDON_PATH, "flinty")
            w.smApi = sm
            w.doModal()
            del w