Ejemplo n.º 1
0
    def __init__(self, ticket_type_id, allow_manual, parent):
        super(NewTicket, self).__init__(parent)
        config = configparser.ConfigParser()
        settings_path = os.path.abspath(os.path.dirname(__file__))
        config.read(os.path.join(settings_path, 'settings.ini'))

        self.api = parent.api
        self.ticket_type_id = ticket_type_id
        self.ui = Ui_NewTicket()
        self.ui.setupUi(self)
        if ticket_type_id == 1:
            self.setWindowTitle("Nueva Recepción")
        else:
            self.setWindowTitle("Nuevo Despacho")
        self.setModal(True)

        self.driver = None
        self.truck = None

        if not allow_manual:
            self.ui.manualCheckBox.hide()

        self.api.createDriverFinished.connect(self.setDriver)
        self.api.createTruckFinished.connect(self.setTruck)
        self.ui.addDriverButton.clicked.connect(self.addDriver)
        self.ui.addTruckButton.clicked.connect(self.addTruck)
        self.ui.manualCheckBox.stateChanged.connect(self.setManualCapture)
        self.ui.createTicketButton.clicked.connect(self.createTicket)
        self.ui.cancelButton.clicked.connect(self.reject)

        self.st = SerialThread(config.get('Serial', 'PortName'),
                               config.get('Serial', 'Regex'),
                               config.getint('Serial', 'Baudrate'),
                               config.get('Serial', 'Parity'),
                               config.getint('Serial', 'Bytesize'),
                               config.getboolean('Serial', 'Simulate'))
        self.st.dataReady.connect(self.getWeight, QtCore.Qt.QueuedConnection)
        self.st.start()
Ejemplo n.º 2
0
    def __init__(self, ticket_type_id, allow_manual, parent):
        super(NewTicket, self).__init__(parent)
        config = configparser.ConfigParser()
        settings_path = os.path.abspath(os.path.dirname(__file__))
        config.read(os.path.join(settings_path, "settings.ini"))

        self.api = parent.api
        self.ticket_type_id = ticket_type_id
        self.ui = Ui_NewTicket()
        self.ui.setupUi(self)
        if ticket_type_id == 1:
            self.setWindowTitle("Nueva Recepción")
        else:
            self.setWindowTitle("Nuevo Despacho")
        self.setModal(True)

        self.driver = None
        self.truck = None

        if not allow_manual:
            self.ui.manualCheckBox.hide()

        self.api.createDriverFinished.connect(self.setDriver)
        self.api.createTruckFinished.connect(self.setTruck)
        self.ui.addDriverButton.clicked.connect(self.addDriver)
        self.ui.addTruckButton.clicked.connect(self.addTruck)
        self.ui.manualCheckBox.stateChanged.connect(self.setManualCapture)
        self.ui.createTicketButton.clicked.connect(self.createTicket)
        self.ui.cancelButton.clicked.connect(self.reject)

        self.st = SerialThread(
            config.get("Serial", "PortName"),
            config.get("Serial", "Regex"),
            config.getint("Serial", "Baudrate"),
            config.get("Serial", "Parity"),
            config.getint("Serial", "Bytesize"),
            config.getboolean("Serial", "Simulate"),
        )
        self.st.dataReady.connect(self.getWeight, QtCore.Qt.QueuedConnection)
        self.st.start()
Ejemplo n.º 3
0
    def __init__(self, ticket_data, allow_manual, parent):
        super(CloseTicket, self).__init__(parent)
        config = configparser.ConfigParser()
        settings_path = os.path.abspath(os.path.dirname(__file__))
        config.read(os.path.join(settings_path, 'settings.ini'))

        self.tolerance = config.getint('Other', 'Tolerance')
        self.api = parent.api

        self.ticket = ticket_data['ticket']
        self.previous_incoming_weight = self.ticket.incoming_weight
        self.allow_manual = allow_manual
        self.ui = Ui_CloseTicket()
        self.ui.setupUi(self)
        self.setModal(True)

        if hasattr(self.ticket, 'client'):
            self.setClient(self.ticket.client)

        if ticket_data['weight_captured']:
            self.ui.captureWeightButton.setChecked(True)
            self.ui.outgoingWeightSpinBox.setValue(self.ticket.outgoing_weight)

        self.old_driver = self.ticket.driver
        self.old_truck = self.ticket.truck

        self.reception_diff = self.dispatch_diff = self.max_diff = 0.5
        self.diff_ok = False
        self.transactions_diff_ok = False
        self.transactions_diff = 999

        self.api.getSettingsFinished.connect(self.updateSettings)
        self.api.get_settings()

        self.api.getFeaturesFinished.connect(self.updateFeatures)
        self.api.get_features()

        self.api.getDocumentTypesFinished.connect(self.updateDocumentTypes)
        self.api.get_document_types()

        if not self.allow_manual:
            self.ui.manualCheckBox.hide()

        self.ui.addressWidget.hide()
        self.ui.documentTypeWidget.hide()
        self.ui.numberLineEdit.setText(str(self.ticket.number))
        self.ui.driverLineEdit.setText(
            "%s - %s" % (self.ticket.driver.ci, self.ticket.driver.name))
        self.ui.truckLineEdit.setText(
            "%s - %s" %
            (self.ticket.truck.license_plate, self.ticket.truck.carrier.name))
        self.ui.incomingWeightSpinBox.setValue(self.ticket.incoming_weight)
        self.ui.commentPlainTextEdit.setPlainText(self.ticket.comment)

        self.transactionsTableModel = TransactionsTableModel(
            self.ticket.transactions_attributes, ticket_data['lots'], self)
        self.ui.transactionsTableView.setModel(self.transactionsTableModel)

        horizontalHeader = self.ui.transactionsTableView.horizontalHeader()
        horizontalHeader.resizeSection(0, 80)
        horizontalHeader.resizeSection(1, 80)
        horizontalHeader.setResizeMode(2, QtGui.QHeaderView.Stretch)
        horizontalHeader.resizeSection(3, 50)
        horizontalHeader.resizeSection(4, 50)
        horizontalHeader.resizeSection(5, 80)

        if self.ticket.ticket_type_id == 1:
            self.ui.receptionButton.setChecked(True)
        else:
            self.ui.dispatchButton.setChecked(True)

        self.ui.changeDriverButton.clicked.connect(self.changeDriver)
        self.ui.changeTruckButton.clicked.connect(self.changeTruck)
        self.ui.addClientButton.clicked.connect(self.addClient)
        self.ui.manualCheckBox.stateChanged.connect(self.setManualCapture)
        self.ui.outgoingWeightSpinBox.valueChanged.connect(self.weightChanged)
        self.ui.incomingWeightSpinBox.valueChanged.connect(
            self.updateTicketType)
        self.ui.netWeightSpinBox.valueChanged.connect(self.updateDiff)
        self.ui.providerWeightSpinBox.valueChanged.connect(self.updateDiff)
        self.ui.diffSpinBox.valueChanged.connect(self.updateDiffStyle)
        self.ui.receptionButton.clicked.connect(self.updateTicketType)
        self.ui.dispatchButton.clicked.connect(self.updateTicketType)
        self.ui.addTransactionButton.clicked.connect(self.addTransaction)
        self.ui.cancelButton.clicked.connect(self.cancel)
        self.ui.saveButton.clicked.connect(self.saveTicket)
        self.ui.closeTicketButton.clicked.connect(self.closeTicket)
        self.ui.transactionsTableView.clicked.connect(
            self.enableDeleteTransaction)
        self.ui.removeTransactionButton.clicked.connect(self.removeTransaction)
        self.transactionsTableModel.totalChanged.connect(self.updateTotal)
        self.transactionsTableModel.recalculateTotal()
        self.updateTicketType()

        self.st = SerialThread(config.get('Serial', 'PortName'),
                               config.get('Serial', 'Regex'),
                               config.getint('Serial', 'Baudrate'),
                               config.get('Serial', 'Parity'),
                               config.getint('Serial', 'Bytesize'),
                               config.getboolean('Serial', 'Simulate'))
        self.st.dataReady.connect(self.getWeight, QtCore.Qt.QueuedConnection)
        self.st.start()
Ejemplo n.º 4
0
class CloseTicket(QtGui.QDialog):
    def __init__(self, ticket_data, allow_manual, parent):
        super(CloseTicket, self).__init__(parent)
        config = configparser.ConfigParser()
        settings_path = os.path.abspath(os.path.dirname(__file__))
        config.read(os.path.join(settings_path, 'settings.ini'))

        self.tolerance = config.getint('Other', 'Tolerance')
        self.api = parent.api

        self.ticket = ticket_data['ticket']
        self.previous_incoming_weight = self.ticket.incoming_weight
        self.allow_manual = allow_manual
        self.ui = Ui_CloseTicket()
        self.ui.setupUi(self)
        self.setModal(True)

        if hasattr(self.ticket, 'client'):
            self.setClient(self.ticket.client)

        if ticket_data['weight_captured']:
            self.ui.captureWeightButton.setChecked(True)
            self.ui.outgoingWeightSpinBox.setValue(self.ticket.outgoing_weight)

        self.old_driver = self.ticket.driver
        self.old_truck = self.ticket.truck

        self.reception_diff = self.dispatch_diff = self.max_diff = 0.5
        self.diff_ok = False
        self.transactions_diff_ok = False
        self.transactions_diff = 999

        self.api.getSettingsFinished.connect(self.updateSettings)
        self.api.get_settings()

        self.api.getFeaturesFinished.connect(self.updateFeatures)
        self.api.get_features()

        self.api.getDocumentTypesFinished.connect(self.updateDocumentTypes)
        self.api.get_document_types()

        if not self.allow_manual:
            self.ui.manualCheckBox.hide()

        self.ui.addressWidget.hide()
        self.ui.documentTypeWidget.hide()
        self.ui.numberLineEdit.setText(str(self.ticket.number))
        self.ui.driverLineEdit.setText(
            "%s - %s" % (self.ticket.driver.ci, self.ticket.driver.name))
        self.ui.truckLineEdit.setText(
            "%s - %s" %
            (self.ticket.truck.license_plate, self.ticket.truck.carrier.name))
        self.ui.incomingWeightSpinBox.setValue(self.ticket.incoming_weight)
        self.ui.commentPlainTextEdit.setPlainText(self.ticket.comment)

        self.transactionsTableModel = TransactionsTableModel(
            self.ticket.transactions_attributes, ticket_data['lots'], self)
        self.ui.transactionsTableView.setModel(self.transactionsTableModel)

        horizontalHeader = self.ui.transactionsTableView.horizontalHeader()
        horizontalHeader.resizeSection(0, 80)
        horizontalHeader.resizeSection(1, 80)
        horizontalHeader.setResizeMode(2, QtGui.QHeaderView.Stretch)
        horizontalHeader.resizeSection(3, 50)
        horizontalHeader.resizeSection(4, 50)
        horizontalHeader.resizeSection(5, 80)

        if self.ticket.ticket_type_id == 1:
            self.ui.receptionButton.setChecked(True)
        else:
            self.ui.dispatchButton.setChecked(True)

        self.ui.changeDriverButton.clicked.connect(self.changeDriver)
        self.ui.changeTruckButton.clicked.connect(self.changeTruck)
        self.ui.addClientButton.clicked.connect(self.addClient)
        self.ui.manualCheckBox.stateChanged.connect(self.setManualCapture)
        self.ui.outgoingWeightSpinBox.valueChanged.connect(self.weightChanged)
        self.ui.incomingWeightSpinBox.valueChanged.connect(
            self.updateTicketType)
        self.ui.netWeightSpinBox.valueChanged.connect(self.updateDiff)
        self.ui.providerWeightSpinBox.valueChanged.connect(self.updateDiff)
        self.ui.diffSpinBox.valueChanged.connect(self.updateDiffStyle)
        self.ui.receptionButton.clicked.connect(self.updateTicketType)
        self.ui.dispatchButton.clicked.connect(self.updateTicketType)
        self.ui.addTransactionButton.clicked.connect(self.addTransaction)
        self.ui.cancelButton.clicked.connect(self.cancel)
        self.ui.saveButton.clicked.connect(self.saveTicket)
        self.ui.closeTicketButton.clicked.connect(self.closeTicket)
        self.ui.transactionsTableView.clicked.connect(
            self.enableDeleteTransaction)
        self.ui.removeTransactionButton.clicked.connect(self.removeTransaction)
        self.transactionsTableModel.totalChanged.connect(self.updateTotal)
        self.transactionsTableModel.recalculateTotal()
        self.updateTicketType()

        self.st = SerialThread(config.get('Serial', 'PortName'),
                               config.get('Serial', 'Regex'),
                               config.getint('Serial', 'Baudrate'),
                               config.get('Serial', 'Parity'),
                               config.getint('Serial', 'Bytesize'),
                               config.getboolean('Serial', 'Simulate'))
        self.st.dataReady.connect(self.getWeight, QtCore.Qt.QueuedConnection)
        self.st.start()

    def cancel(self):
        self.ticket.driver = self.old_driver
        self.reject()

    def updateTotal(self, total):
        self.ui.transactionsTotalSpinBox.setValue(total)
        if self.ui.dispatchButton.isChecked():
            self.ui.providerWeightSpinBox.setValue(
                self.ui.transactionsTotalSpinBox.value())
        self.updateDiff()

    def updateDiff(self):
        net_weight = self.ui.netWeightSpinBox.value()
        total = self.ui.providerWeightSpinBox.value()
        transactions_total = self.ui.transactionsTotalSpinBox.value()
        if total == 0:
            diff = 999
        else:
            diff = (net_weight - total) / total * 100
        if transactions_total == 0:
            self.transactions_diff = 999
        else:
            self.transactions_diff = (
                net_weight - transactions_total) / transactions_total * 100
        self.ui.diffSpinBox.setValue(diff)
        self.updateDiffStyle()

    def updateDiffStyle(self):
        diff = self.ui.diffSpinBox.value()
        if self.ui.receptionButton.isChecked():
            self.max_diff = self.reception_diff
        else:
            self.max_diff = self.dispatch_diff

        if diff >= -1 * self.max_diff and diff <= self.max_diff:
            bkg_color = "0, 0, 0"
            self.diff_ok = True
        else:
            bkg_color = "255, 0, 0"
            self.diff_ok = False

        self.transactions_diff_ok = self.transactions_diff >= -1 * self.max_diff and self.transactions_diff <= self.max_diff
        self.ui.diffSpinBox.setStyleSheet(
            "background-color: rgb(%s);\ncolor: rgb(0, 170, 0);" % bkg_color)

    def updateSettings(self, settings):
        self.reception_diff = settings.ticket_reception_diff
        self.dispatch_diff = settings.ticket_dispatch_diff

    def updateFeatures(self, features):
        self.features = features
        if "multiple_addresses" in features:
            self.ui.addressWidget.show()
        if "document_types" in features:
            self.ui.documentTypeWidget.show()

    def updateDocumentTypes(self, document_types):
        self.documentTypeListModel = DocumentTypeListModel(
            document_types, self)
        self.ui.documentTypeComboBox.setModel(self.documentTypeListModel)

        try:
            row = self.documentTypeListModel.findRowById(
                self.ticket.document_type_id)
            self.ui.documentTypeComboBox.setCurrentIndex(row)
        except AttributeError:
            pass

    def updateTicketType(self):
        self.ticket.incoming_weight = self.ui.incomingWeightSpinBox.value()
        weight = self.ui.outgoingWeightSpinBox.value()
        if self.ui.receptionButton.isChecked():
            self.ui.providerWidget.show()
            gross_weight = self.ticket.incoming_weight
            tare_weight = weight
            self.ui.providerWeightSpinBox.setReadOnly(False)
        else:
            gross_weight = weight
            tare_weight = self.ticket.incoming_weight
            self.ui.providerWeightSpinBox.setReadOnly(True)
            self.ui.providerWeightSpinBox.setValue(
                self.ui.transactionsTotalSpinBox.value())

        net_weight = gross_weight - tare_weight
        self.ui.grossWeightSpinBox.setValue(gross_weight)
        self.ui.tareWeightSpinBox.setValue(tare_weight)
        self.ui.netWeightSpinBox.setValue(net_weight)

    def addTransaction(self):
        # TODO ELIMINAR
        if self.ticket.ticket_type_id == 1:
            transaction_type_id = 4
        else:
            transaction_type_id = 5
        # FIN TODO
        self.api.get_lots()
        self.api.get_product_lots()
        addTransactionDialog = AddTransaction(transaction_type_id, self)
        self.api.getLotsFinished.connect(addTransactionDialog.getLotsFinished)
        self.api.getProductLotsFinished.connect(
            addTransactionDialog.getProductLotsFinished)
        if addTransactionDialog.exec_() == QtGui.QDialog.Accepted:
            transaction = addTransactionDialog.transaction
            lot = addTransactionDialog.lot
            self.transactionsTableModel.addTransaction(transaction, lot)

    def removeTransaction(self):
        row = self.ui.transactionsTableView.currentIndex().row()
        self.transactionsTableModel.removeTransaction(row)
        currentRow = self.ui.transactionsTableView.currentIndex().row()
        if currentRow == -1:
            self.ui.removeTransactionButton.setEnabled(False)

    def enableDeleteTransaction(self, index):
        if index.row() != -1:
            self.ui.removeTransactionButton.setEnabled(True)

    def closeTicket(self):
        outgoing_weight = self.ui.outgoingWeightSpinBox.value()
        weight_captured = self.ui.captureWeightButton.isChecked()
        manualEnabled = self.ui.manualCheckBox.isChecked()
        net_weight = self.ui.netWeightSpinBox.value()
        provider_weight = self.ui.providerWeightSpinBox.value()
        provider_document_number = self.ui.providerDocumentNumberLineEdit.text(
        )
        transactions_total = self.ui.transactionsTotalSpinBox.value()
        diff = self.ui.diffSpinBox.value()

        if self.ui.receptionButton.isChecked():
            self.ticket.ticket_type_id = 1
        elif self.ui.dispatchButton.isChecked():
            self.ticket.ticket_type_id = 2

        errors = []

        if not (self.diff_ok and self.transactions_diff_ok):
            if not self.allow_manual:
                if not self.diff_ok:
                    errors.append(
                        'La diferencia entre el peso neto y peso proveedor es muy grande'
                    )
                if not self.transactions_diff_ok:
                    errors.append(
                        'La diferencia entre el peso neto y el total de transacciones es muy grande'
                    )
            else:
                flags = QtGui.QMessageBox.StandardButton.Yes
                flags |= QtGui.QMessageBox.StandardButton.No
                diff_fields = []
                if not self.diff_ok:
                    diff_fields.append("peso proveedor")
                if not self.transactions_diff_ok:
                    diff_fields.append("transacciones")
                question = "¿Esta seguro de permitir una diferencia mayor a %s %% (%s)?" % (
                    self.max_diff, ", ".join(diff_fields))
                response = QtGui.QMessageBox.question(self, "Advertencia",
                                                      question, flags)
                if response == QtGui.QMessageBox.Yes:
                    pass
                else:
                    if not self.diff_ok:
                        errors.append(
                            'La diferencia entre el peso neto y peso proveedor es muy grande'
                        )
                    if not self.transactions_diff_ok:
                        errors.append(
                            'La diferencia entre el peso neto y el total de transacciones es muy grande'
                        )

        if net_weight < 0:
            errors.append('El peso neto no puede ser negativo')
        if transactions_total == 0:
            errors.append('El total de transacciones no puede ser 0')
        if self.client == None:
            errors.append('El cliente/fábrica no ha sido seleccionado')
        elif "multiple_addresses" in self.features:
            self.ticket.address = self.ui.addressComboBox.currentText()
        else:
            self.ticket.address = self.client.address
        if not weight_captured and not manualEnabled:
            errors.append('El peso de salida no ha sido capturado')
        if provider_document_number == '':
            errors.append('El número de documento no ha sido indicado')

        if not errors:
            if "document_types" in self.features:
                index = self.ui.documentTypeComboBox.currentIndex()
                if index != -1:
                    dt = self.documentTypeListModel.getDocumentType(index)
                    self.ticket.document_type_id = dt.id
            self.ticket.comment = self.ui.commentPlainTextEdit.toPlainText()
            self.ticket.outgoing_weight = outgoing_weight

            self.ticket.provider_weight = provider_weight
            self.ticket.provider_document_number = provider_document_number
            self.ticket.transactions_attributes = self.transactionsTableModel.getTransactions(
            )

            for transaction in self.ticket.transactions_attributes:
                if self.ticket.ticket_type_id == 1:
                    transaction.transaction_type_id = 4
                else:
                    transaction.transaction_type_id = 5
                delattr(transaction, 'content_comment')

            self.ticket.client_id = self.client.id
            self.ticket.driver_id = self.ticket.driver.id
            self.ticket.truck_id = self.ticket.truck.id
            self.ticket.manual_outgoing = manualEnabled
            self.ticket.manual_incoming |= self.previous_incoming_weight != self.ticket.incoming_weight

            self.accept()
        else:
            ErrorMessageBox(errors).exec_()

    def setManualCapture(self):
        if self.ui.manualCheckBox.isChecked():
            self.ui.outgoingWeightSpinBox.setEnabled(True)
            self.ui.incomingWeightSpinBox.setEnabled(True)
            self.ui.captureWeightButton.setEnabled(False)
            self.ui.captureWeightButton.setChecked(False)
        else:
            self.ui.outgoingWeightSpinBox.setEnabled(False)
            self.ui.incomingWeightSpinBox.setEnabled(False)
            self.ui.captureWeightButton.setEnabled(True)

    def getWeight(self, weight):
        if not self.ui.captureWeightButton.isChecked(
        ) and not self.ui.manualCheckBox.isChecked():
            self.ui.outgoingWeightSpinBox.setValue(weight)

    def weightChanged(self, weight):
        if self.ui.dispatchButton.isChecked():
            gross_weight = weight
            tare_weight = self.ticket.incoming_weight
        else:
            gross_weight = self.ticket.incoming_weight
            tare_weight = weight
        net_weight = gross_weight - tare_weight
        self.ui.grossWeightSpinBox.setValue(gross_weight)
        self.ui.tareWeightSpinBox.setValue(tare_weight)
        self.ui.netWeightSpinBox.setValue(net_weight)

    def addClient(self):
        addClientDialog = AddClient(self)
        if addClientDialog.exec_() == QtGui.QDialog.Accepted:
            self.setClient(addClientDialog.client)

    def setClient(self, client):
        try:
            self.client = client
            self.ui.clientLineEdit.setText(self.client.name)
            self.ui.addressComboBox.clear()
            self.ui.addressComboBox.addItem(client.address)
            self.ui.addressComboBox.addItems(client.addresses)

            self.ui.addressComboBox.setCurrentIndex(
                self.ui.addressComboBox.findText(self.ticket.address))
        except AttributeError:
            pass

    def changeDriver(self):
        changeDriverDialog = ChangeDriver(self)
        if changeDriverDialog.exec_() == QtGui.QDialog.Accepted:
            self.setDriver(changeDriverDialog.driver)

    def setDriver(self, driver):
        self.ticket.driver = driver
        self.ui.driverLineEdit.setText(
            "%s - %s" % (self.ticket.driver.ci, self.ticket.driver.name))

    def changeTruck(self):
        changeTruckDialog = ChangeTruck(self)
        if changeTruckDialog.exec_() == QtGui.QDialog.Accepted:
            self.setTruck(changeTruckDialog.truck)

    def setTruck(self, truck):
        self.ticket.truck = truck
        self.ui.truckLineEdit.setText(
            "%s - %s" %
            (self.ticket.truck.license_plate, self.ticket.truck.carrier.name))

    def saveTicket(self):
        self.ticket.ticket_type_id = 1 if self.ui.receptionButton.isChecked(
        ) else 2

        if "multiple_addresses" in self.features:
            self.ticket.address = self.ui.addressComboBox.currentText()
        elif self.client:
            self.ticket.address = self.client.address

        if "document_types" in self.features:
            index = self.ui.documentTypeComboBox.currentIndex()
            if index != -1:
                dt = self.documentTypeListModel.getDocumentType(index)
                self.ticket.document_type_id = dt.id

        self.ticket.comment = self.ui.commentPlainTextEdit.toPlainText()

        self.ticket.outgoing_weight = self.ui.outgoingWeightSpinBox.value()
        self.ticket.provider_weight = self.ui.providerWeightSpinBox.value()
        self.ticket.provider_document_number = self.ui.providerDocumentNumberLineEdit.text(
        )
        self.ticket.transactions_attributes = self.transactionsTableModel.getTransactions(
        )

        self.ticket.client = self.client

        self.ticket.manual_outgoing = self.ui.manualCheckBox.isChecked()
        self.ticket.manual_incoming |= self.previous_incoming_weight != self.ticket.incoming_weight

        ticket_data = {
            'ticket': self.ticket,
            'weight_captured': self.ui.captureWeightButton.isChecked(),
            'lots': self.transactionsTableModel.getLots()
        }

        fileObject = open("%s.ticket" % self.ticket.number, 'wb')
        pickle.dump(ticket_data, fileObject)
        fileObject.close()

        print("Se guardó el ticket %s" % self.ticket.number)

        self.reject()
Ejemplo n.º 5
0
    def __init__(self, ticket_data, allow_manual, parent):
        super(CloseTicket, self).__init__(parent)
        config = configparser.ConfigParser()
        settings_path = os.path.abspath(os.path.dirname(__file__))
        config.read(os.path.join(settings_path, "settings.ini"))

        self.tolerance = config.getint("Other", "Tolerance")
        self.api = parent.api

        self.ticket = ticket_data["ticket"]
        self.previous_incoming_weight = self.ticket.incoming_weight
        self.allow_manual = allow_manual
        self.ui = Ui_CloseTicket()
        self.ui.setupUi(self)
        self.setModal(True)

        if hasattr(self.ticket, "client"):
            self.setClient(self.ticket.client)

        if ticket_data["weight_captured"]:
            self.ui.captureWeightButton.setChecked(True)
            self.ui.outgoingWeightSpinBox.setValue(self.ticket.outgoing_weight)

        self.old_driver = self.ticket.driver
        self.old_truck = self.ticket.truck

        self.reception_diff = self.dispatch_diff = self.max_diff = 0.5
        self.diff_ok = False
        self.transactions_diff_ok = False
        self.transactions_diff = 999

        self.api.getSettingsFinished.connect(self.updateSettings)
        self.api.get_settings()

        self.api.getFeaturesFinished.connect(self.updateFeatures)
        self.api.get_features()

        self.api.getDocumentTypesFinished.connect(self.updateDocumentTypes)
        self.api.get_document_types()

        if not self.allow_manual:
            self.ui.manualCheckBox.hide()

        self.ui.addressWidget.hide()
        self.ui.documentTypeWidget.hide()
        self.ui.numberLineEdit.setText(str(self.ticket.number))
        self.ui.driverLineEdit.setText("%s - %s" % (self.ticket.driver.ci, self.ticket.driver.name))
        self.ui.truckLineEdit.setText("%s - %s" % (self.ticket.truck.license_plate, self.ticket.truck.carrier.name))
        self.ui.incomingWeightSpinBox.setValue(self.ticket.incoming_weight)
        self.ui.commentPlainTextEdit.setPlainText(self.ticket.comment)

        self.transactionsTableModel = TransactionsTableModel(
            self.ticket.transactions_attributes, ticket_data["lots"], self
        )
        self.ui.transactionsTableView.setModel(self.transactionsTableModel)

        horizontalHeader = self.ui.transactionsTableView.horizontalHeader()
        horizontalHeader.resizeSection(0, 80)
        horizontalHeader.resizeSection(1, 80)
        horizontalHeader.setResizeMode(2, QtGui.QHeaderView.Stretch)
        horizontalHeader.resizeSection(3, 50)
        horizontalHeader.resizeSection(4, 50)
        horizontalHeader.resizeSection(5, 80)

        if self.ticket.ticket_type_id == 1:
            self.ui.receptionButton.setChecked(True)
        else:
            self.ui.dispatchButton.setChecked(True)

        self.ui.changeDriverButton.clicked.connect(self.changeDriver)
        self.ui.changeTruckButton.clicked.connect(self.changeTruck)
        self.ui.addClientButton.clicked.connect(self.addClient)
        self.ui.manualCheckBox.stateChanged.connect(self.setManualCapture)
        self.ui.outgoingWeightSpinBox.valueChanged.connect(self.weightChanged)
        self.ui.incomingWeightSpinBox.valueChanged.connect(self.updateTicketType)
        self.ui.netWeightSpinBox.valueChanged.connect(self.updateDiff)
        self.ui.providerWeightSpinBox.valueChanged.connect(self.updateDiff)
        self.ui.diffSpinBox.valueChanged.connect(self.updateDiffStyle)
        self.ui.receptionButton.clicked.connect(self.updateTicketType)
        self.ui.dispatchButton.clicked.connect(self.updateTicketType)
        self.ui.addTransactionButton.clicked.connect(self.addTransaction)
        self.ui.cancelButton.clicked.connect(self.cancel)
        self.ui.saveButton.clicked.connect(self.saveTicket)
        self.ui.closeTicketButton.clicked.connect(self.closeTicket)
        self.ui.transactionsTableView.clicked.connect(self.enableDeleteTransaction)
        self.ui.removeTransactionButton.clicked.connect(self.removeTransaction)
        self.transactionsTableModel.totalChanged.connect(self.updateTotal)
        self.transactionsTableModel.recalculateTotal()
        self.updateTicketType()

        self.st = SerialThread(
            config.get("Serial", "PortName"),
            config.get("Serial", "Regex"),
            config.getint("Serial", "Baudrate"),
            config.get("Serial", "Parity"),
            config.getint("Serial", "Bytesize"),
            config.getboolean("Serial", "Simulate"),
        )
        self.st.dataReady.connect(self.getWeight, QtCore.Qt.QueuedConnection)
        self.st.start()
Ejemplo n.º 6
0
class CloseTicket(QtGui.QDialog):
    def __init__(self, ticket_data, allow_manual, parent):
        super(CloseTicket, self).__init__(parent)
        config = configparser.ConfigParser()
        settings_path = os.path.abspath(os.path.dirname(__file__))
        config.read(os.path.join(settings_path, "settings.ini"))

        self.tolerance = config.getint("Other", "Tolerance")
        self.api = parent.api

        self.ticket = ticket_data["ticket"]
        self.previous_incoming_weight = self.ticket.incoming_weight
        self.allow_manual = allow_manual
        self.ui = Ui_CloseTicket()
        self.ui.setupUi(self)
        self.setModal(True)

        if hasattr(self.ticket, "client"):
            self.setClient(self.ticket.client)

        if ticket_data["weight_captured"]:
            self.ui.captureWeightButton.setChecked(True)
            self.ui.outgoingWeightSpinBox.setValue(self.ticket.outgoing_weight)

        self.old_driver = self.ticket.driver
        self.old_truck = self.ticket.truck

        self.reception_diff = self.dispatch_diff = self.max_diff = 0.5
        self.diff_ok = False
        self.transactions_diff_ok = False
        self.transactions_diff = 999

        self.api.getSettingsFinished.connect(self.updateSettings)
        self.api.get_settings()

        self.api.getFeaturesFinished.connect(self.updateFeatures)
        self.api.get_features()

        self.api.getDocumentTypesFinished.connect(self.updateDocumentTypes)
        self.api.get_document_types()

        if not self.allow_manual:
            self.ui.manualCheckBox.hide()

        self.ui.addressWidget.hide()
        self.ui.documentTypeWidget.hide()
        self.ui.numberLineEdit.setText(str(self.ticket.number))
        self.ui.driverLineEdit.setText("%s - %s" % (self.ticket.driver.ci, self.ticket.driver.name))
        self.ui.truckLineEdit.setText("%s - %s" % (self.ticket.truck.license_plate, self.ticket.truck.carrier.name))
        self.ui.incomingWeightSpinBox.setValue(self.ticket.incoming_weight)
        self.ui.commentPlainTextEdit.setPlainText(self.ticket.comment)

        self.transactionsTableModel = TransactionsTableModel(
            self.ticket.transactions_attributes, ticket_data["lots"], self
        )
        self.ui.transactionsTableView.setModel(self.transactionsTableModel)

        horizontalHeader = self.ui.transactionsTableView.horizontalHeader()
        horizontalHeader.resizeSection(0, 80)
        horizontalHeader.resizeSection(1, 80)
        horizontalHeader.setResizeMode(2, QtGui.QHeaderView.Stretch)
        horizontalHeader.resizeSection(3, 50)
        horizontalHeader.resizeSection(4, 50)
        horizontalHeader.resizeSection(5, 80)

        if self.ticket.ticket_type_id == 1:
            self.ui.receptionButton.setChecked(True)
        else:
            self.ui.dispatchButton.setChecked(True)

        self.ui.changeDriverButton.clicked.connect(self.changeDriver)
        self.ui.changeTruckButton.clicked.connect(self.changeTruck)
        self.ui.addClientButton.clicked.connect(self.addClient)
        self.ui.manualCheckBox.stateChanged.connect(self.setManualCapture)
        self.ui.outgoingWeightSpinBox.valueChanged.connect(self.weightChanged)
        self.ui.incomingWeightSpinBox.valueChanged.connect(self.updateTicketType)
        self.ui.netWeightSpinBox.valueChanged.connect(self.updateDiff)
        self.ui.providerWeightSpinBox.valueChanged.connect(self.updateDiff)
        self.ui.diffSpinBox.valueChanged.connect(self.updateDiffStyle)
        self.ui.receptionButton.clicked.connect(self.updateTicketType)
        self.ui.dispatchButton.clicked.connect(self.updateTicketType)
        self.ui.addTransactionButton.clicked.connect(self.addTransaction)
        self.ui.cancelButton.clicked.connect(self.cancel)
        self.ui.saveButton.clicked.connect(self.saveTicket)
        self.ui.closeTicketButton.clicked.connect(self.closeTicket)
        self.ui.transactionsTableView.clicked.connect(self.enableDeleteTransaction)
        self.ui.removeTransactionButton.clicked.connect(self.removeTransaction)
        self.transactionsTableModel.totalChanged.connect(self.updateTotal)
        self.transactionsTableModel.recalculateTotal()
        self.updateTicketType()

        self.st = SerialThread(
            config.get("Serial", "PortName"),
            config.get("Serial", "Regex"),
            config.getint("Serial", "Baudrate"),
            config.get("Serial", "Parity"),
            config.getint("Serial", "Bytesize"),
            config.getboolean("Serial", "Simulate"),
        )
        self.st.dataReady.connect(self.getWeight, QtCore.Qt.QueuedConnection)
        self.st.start()

    def cancel(self):
        self.ticket.driver = self.old_driver
        self.reject()

    def updateTotal(self, total):
        self.ui.transactionsTotalSpinBox.setValue(total)
        if self.ui.dispatchButton.isChecked():
            self.ui.providerWeightSpinBox.setValue(self.ui.transactionsTotalSpinBox.value())
        self.updateDiff()

    def updateDiff(self):
        net_weight = self.ui.netWeightSpinBox.value()
        total = self.ui.providerWeightSpinBox.value()
        transactions_total = self.ui.transactionsTotalSpinBox.value()
        if total == 0:
            diff = 999
        else:
            diff = (net_weight - total) / total * 100
        if transactions_total == 0:
            self.transactions_diff = 999
        else:
            self.transactions_diff = (net_weight - transactions_total) / transactions_total * 100
        self.ui.diffSpinBox.setValue(diff)
        self.updateDiffStyle()

    def updateDiffStyle(self):
        diff = self.ui.diffSpinBox.value()
        if self.ui.receptionButton.isChecked():
            self.max_diff = self.reception_diff
        else:
            self.max_diff = self.dispatch_diff

        if diff >= -1 * self.max_diff and diff <= self.max_diff:
            bkg_color = "0, 0, 0"
            self.diff_ok = True
        else:
            bkg_color = "255, 0, 0"
            self.diff_ok = False

        self.transactions_diff_ok = (
            self.transactions_diff >= -1 * self.max_diff and self.transactions_diff <= self.max_diff
        )
        self.ui.diffSpinBox.setStyleSheet("background-color: rgb(%s);\ncolor: rgb(0, 170, 0);" % bkg_color)

    def updateSettings(self, settings):
        self.reception_diff = settings.ticket_reception_diff
        self.dispatch_diff = settings.ticket_dispatch_diff

    def updateFeatures(self, features):
        self.features = features
        if "multiple_addresses" in features:
            self.ui.addressWidget.show()
        if "document_types" in features:
            self.ui.documentTypeWidget.show()

    def updateDocumentTypes(self, document_types):
        self.documentTypeListModel = DocumentTypeListModel(document_types, self)
        self.ui.documentTypeComboBox.setModel(self.documentTypeListModel)

        try:
            row = self.documentTypeListModel.findRowById(self.ticket.document_type_id)
            self.ui.documentTypeComboBox.setCurrentIndex(row)
        except AttributeError:
            pass

    def updateTicketType(self):
        self.ticket.incoming_weight = self.ui.incomingWeightSpinBox.value()
        weight = self.ui.outgoingWeightSpinBox.value()
        if self.ui.receptionButton.isChecked():
            self.ui.providerWidget.show()
            gross_weight = self.ticket.incoming_weight
            tare_weight = weight
            self.ui.providerWeightSpinBox.setReadOnly(False)
        else:
            gross_weight = weight
            tare_weight = self.ticket.incoming_weight
            self.ui.providerWeightSpinBox.setReadOnly(True)
            self.ui.providerWeightSpinBox.setValue(self.ui.transactionsTotalSpinBox.value())

        net_weight = gross_weight - tare_weight
        self.ui.grossWeightSpinBox.setValue(gross_weight)
        self.ui.tareWeightSpinBox.setValue(tare_weight)
        self.ui.netWeightSpinBox.setValue(net_weight)

    def addTransaction(self):
        # TODO ELIMINAR
        if self.ticket.ticket_type_id == 1:
            transaction_type_id = 4
        else:
            transaction_type_id = 5
        # FIN TODO
        self.api.get_lots()
        self.api.get_product_lots()
        addTransactionDialog = AddTransaction(transaction_type_id, self)
        self.api.getLotsFinished.connect(addTransactionDialog.getLotsFinished)
        self.api.getProductLotsFinished.connect(addTransactionDialog.getProductLotsFinished)
        if addTransactionDialog.exec_() == QtGui.QDialog.Accepted:
            transaction = addTransactionDialog.transaction
            lot = addTransactionDialog.lot
            self.transactionsTableModel.addTransaction(transaction, lot)

    def removeTransaction(self):
        row = self.ui.transactionsTableView.currentIndex().row()
        self.transactionsTableModel.removeTransaction(row)
        currentRow = self.ui.transactionsTableView.currentIndex().row()
        if currentRow == -1:
            self.ui.removeTransactionButton.setEnabled(False)

    def enableDeleteTransaction(self, index):
        if index.row() != -1:
            self.ui.removeTransactionButton.setEnabled(True)

    def closeTicket(self):
        outgoing_weight = self.ui.outgoingWeightSpinBox.value()
        weight_captured = self.ui.captureWeightButton.isChecked()
        manualEnabled = self.ui.manualCheckBox.isChecked()
        net_weight = self.ui.netWeightSpinBox.value()
        provider_weight = self.ui.providerWeightSpinBox.value()
        provider_document_number = self.ui.providerDocumentNumberLineEdit.text()
        transactions_total = self.ui.transactionsTotalSpinBox.value()
        diff = self.ui.diffSpinBox.value()

        if self.ui.receptionButton.isChecked():
            self.ticket.ticket_type_id = 1
        elif self.ui.dispatchButton.isChecked():
            self.ticket.ticket_type_id = 2

        errors = []

        if not (self.diff_ok and self.transactions_diff_ok):
            if not self.allow_manual:
                if not self.diff_ok:
                    errors.append("La diferencia entre el peso neto y peso proveedor es muy grande")
                if not self.transactions_diff_ok:
                    errors.append("La diferencia entre el peso neto y el total de transacciones es muy grande")
            else:
                flags = QtGui.QMessageBox.StandardButton.Yes
                flags |= QtGui.QMessageBox.StandardButton.No
                diff_fields = []
                if not self.diff_ok:
                    diff_fields.append("peso proveedor")
                if not self.transactions_diff_ok:
                    diff_fields.append("transacciones")
                question = "¿Esta seguro de permitir una diferencia mayor a %s %% (%s)?" % (
                    self.max_diff,
                    ", ".join(diff_fields),
                )
                response = QtGui.QMessageBox.question(self, "Advertencia", question, flags)
                if response == QtGui.QMessageBox.Yes:
                    pass
                else:
                    if not self.diff_ok:
                        errors.append("La diferencia entre el peso neto y peso proveedor es muy grande")
                    if not self.transactions_diff_ok:
                        errors.append("La diferencia entre el peso neto y el total de transacciones es muy grande")

        if net_weight < 0:
            errors.append("El peso neto no puede ser negativo")
        if transactions_total == 0:
            errors.append("El total de transacciones no puede ser 0")
        if self.client == None:
            errors.append("El cliente/fábrica no ha sido seleccionado")
        elif "multiple_addresses" in self.features:
            self.ticket.address = self.ui.addressComboBox.currentText()
        else:
            self.ticket.address = self.client.address
        if not weight_captured and not manualEnabled:
            errors.append("El peso de salida no ha sido capturado")
        if provider_document_number == "":
            errors.append("El número de documento no ha sido indicado")

        if not errors:
            if "document_types" in self.features:
                index = self.ui.documentTypeComboBox.currentIndex()
                if index != -1:
                    dt = self.documentTypeListModel.getDocumentType(index)
                    self.ticket.document_type_id = dt.id
            self.ticket.comment = self.ui.commentPlainTextEdit.toPlainText()
            self.ticket.outgoing_weight = outgoing_weight

            self.ticket.provider_weight = provider_weight
            self.ticket.provider_document_number = provider_document_number
            self.ticket.transactions_attributes = self.transactionsTableModel.getTransactions()

            for transaction in self.ticket.transactions_attributes:
                if self.ticket.ticket_type_id == 1:
                    transaction.transaction_type_id = 4
                else:
                    transaction.transaction_type_id = 5
                delattr(transaction, "content_comment")

            self.ticket.client_id = self.client.id
            self.ticket.driver_id = self.ticket.driver.id
            self.ticket.truck_id = self.ticket.truck.id
            self.ticket.manual_outgoing = manualEnabled
            self.ticket.manual_incoming |= self.previous_incoming_weight != self.ticket.incoming_weight

            self.accept()
        else:
            ErrorMessageBox(errors).exec_()

    def setManualCapture(self):
        if self.ui.manualCheckBox.isChecked():
            self.ui.outgoingWeightSpinBox.setEnabled(True)
            self.ui.incomingWeightSpinBox.setEnabled(True)
            self.ui.captureWeightButton.setEnabled(False)
            self.ui.captureWeightButton.setChecked(False)
        else:
            self.ui.outgoingWeightSpinBox.setEnabled(False)
            self.ui.incomingWeightSpinBox.setEnabled(False)
            self.ui.captureWeightButton.setEnabled(True)

    def getWeight(self, weight):
        if not self.ui.captureWeightButton.isChecked() and not self.ui.manualCheckBox.isChecked():
            self.ui.outgoingWeightSpinBox.setValue(weight)

    def weightChanged(self, weight):
        if self.ui.dispatchButton.isChecked():
            gross_weight = weight
            tare_weight = self.ticket.incoming_weight
        else:
            gross_weight = self.ticket.incoming_weight
            tare_weight = weight
        net_weight = gross_weight - tare_weight
        self.ui.grossWeightSpinBox.setValue(gross_weight)
        self.ui.tareWeightSpinBox.setValue(tare_weight)
        self.ui.netWeightSpinBox.setValue(net_weight)

    def addClient(self):
        addClientDialog = AddClient(self)
        if addClientDialog.exec_() == QtGui.QDialog.Accepted:
            self.setClient(addClientDialog.client)

    def setClient(self, client):
        try:
            self.client = client
            self.ui.clientLineEdit.setText(self.client.name)
            self.ui.addressComboBox.clear()
            self.ui.addressComboBox.addItem(client.address)
            self.ui.addressComboBox.addItems(client.addresses)

            self.ui.addressComboBox.setCurrentIndex(self.ui.addressComboBox.findText(self.ticket.address))
        except AttributeError:
            pass

    def changeDriver(self):
        changeDriverDialog = ChangeDriver(self)
        if changeDriverDialog.exec_() == QtGui.QDialog.Accepted:
            self.setDriver(changeDriverDialog.driver)

    def setDriver(self, driver):
        self.ticket.driver = driver
        self.ui.driverLineEdit.setText("%s - %s" % (self.ticket.driver.ci, self.ticket.driver.name))

    def changeTruck(self):
        changeTruckDialog = ChangeTruck(self)
        if changeTruckDialog.exec_() == QtGui.QDialog.Accepted:
            self.setTruck(changeTruckDialog.truck)

    def setTruck(self, truck):
        self.ticket.truck = truck
        self.ui.truckLineEdit.setText("%s - %s" % (self.ticket.truck.license_plate, self.ticket.truck.carrier.name))

    def saveTicket(self):
        self.ticket.ticket_type_id = 1 if self.ui.receptionButton.isChecked() else 2

        if "multiple_addresses" in self.features:
            self.ticket.address = self.ui.addressComboBox.currentText()
        elif self.client:
            self.ticket.address = self.client.address

        if "document_types" in self.features:
            index = self.ui.documentTypeComboBox.currentIndex()
            if index != -1:
                dt = self.documentTypeListModel.getDocumentType(index)
                self.ticket.document_type_id = dt.id

        self.ticket.comment = self.ui.commentPlainTextEdit.toPlainText()

        self.ticket.outgoing_weight = self.ui.outgoingWeightSpinBox.value()
        self.ticket.provider_weight = self.ui.providerWeightSpinBox.value()
        self.ticket.provider_document_number = self.ui.providerDocumentNumberLineEdit.text()
        self.ticket.transactions_attributes = self.transactionsTableModel.getTransactions()

        self.ticket.client = self.client

        self.ticket.manual_outgoing = self.ui.manualCheckBox.isChecked()
        self.ticket.manual_incoming |= self.previous_incoming_weight != self.ticket.incoming_weight

        ticket_data = {
            "ticket": self.ticket,
            "weight_captured": self.ui.captureWeightButton.isChecked(),
            "lots": self.transactionsTableModel.getLots(),
        }

        fileObject = open("%s.ticket" % self.ticket.number, "wb")
        pickle.dump(ticket_data, fileObject)
        fileObject.close()

        print("Se guardó el ticket %s" % self.ticket.number)

        self.reject()
Ejemplo n.º 7
0
class NewTicket(QtGui.QDialog):
    def __init__(self, ticket_type_id, allow_manual, parent):
        super(NewTicket, self).__init__(parent)
        config = configparser.ConfigParser()
        settings_path = os.path.abspath(os.path.dirname(__file__))
        config.read(os.path.join(settings_path, "settings.ini"))

        self.api = parent.api
        self.ticket_type_id = ticket_type_id
        self.ui = Ui_NewTicket()
        self.ui.setupUi(self)
        if ticket_type_id == 1:
            self.setWindowTitle("Nueva Recepción")
        else:
            self.setWindowTitle("Nuevo Despacho")
        self.setModal(True)

        self.driver = None
        self.truck = None

        if not allow_manual:
            self.ui.manualCheckBox.hide()

        self.api.createDriverFinished.connect(self.setDriver)
        self.api.createTruckFinished.connect(self.setTruck)
        self.ui.addDriverButton.clicked.connect(self.addDriver)
        self.ui.addTruckButton.clicked.connect(self.addTruck)
        self.ui.manualCheckBox.stateChanged.connect(self.setManualCapture)
        self.ui.createTicketButton.clicked.connect(self.createTicket)
        self.ui.cancelButton.clicked.connect(self.reject)

        self.st = SerialThread(
            config.get("Serial", "PortName"),
            config.get("Serial", "Regex"),
            config.getint("Serial", "Baudrate"),
            config.get("Serial", "Parity"),
            config.getint("Serial", "Bytesize"),
            config.getboolean("Serial", "Simulate"),
        )
        self.st.dataReady.connect(self.getWeight, QtCore.Qt.QueuedConnection)
        self.st.start()

    def createTicket(self):
        weightCaptured = self.ui.captureWeightButton.isChecked()
        manualEnabled = self.ui.manualCheckBox.isChecked()

        errors = []
        if self.driver == None:
            errors.append("El chofer no ha sido seleccionado")
        if self.truck == None:
            errors.append("El camión no ha sido seleccionado")
        if not manualEnabled and not weightCaptured:
            errors.append("El peso de entrada no ha sido capturado")

        if not errors:
            incoming_weight = self.ui.incomingWeightSpinBox.value()
            comment = self.ui.commentPlainTextEdit.toPlainText()
            self.ticket = Ticket(self.ticket_type_id, self.driver.id, self.truck.id, incoming_weight, comment)
            self.ticket.manual_incoming = manualEnabled
            self.accept()
        else:
            ErrorMessageBox(errors).exec_()

    def addDriver(self):
        addDriverDialog = AddDriver(self)
        if addDriverDialog.exec_() == QtGui.QDialog.Accepted:
            self.setDriver(addDriverDialog.driver)

    def setDriver(self, driver):
        self.driver = driver
        self.ui.driverLineEdit.setText("%s - %s" % (self.driver.name, self.driver.ci))

    def addTruck(self):
        addTruckDialog = AddTruck(self)
        if addTruckDialog.exec_() == QtGui.QDialog.Accepted:
            self.setTruck(addTruckDialog.truck)

    def setTruck(self, truck):
        self.truck = truck
        self.ui.truckLineEdit.setText("%s - %s" % (self.truck.license_plate, self.truck.carrier.name))

    def setManualCapture(self):
        if self.ui.manualCheckBox.isChecked():
            self.ui.incomingWeightSpinBox.setEnabled(True)
            self.ui.captureWeightButton.setEnabled(False)
            self.ui.captureWeightButton.setChecked(False)
        else:
            self.ui.incomingWeightSpinBox.setEnabled(False)
            self.ui.captureWeightButton.setEnabled(True)

    def getWeight(self, weight):
        if not self.ui.captureWeightButton.isChecked() and not self.ui.manualCheckBox.isChecked():
            self.ui.incomingWeightSpinBox.setValue(weight)

    def getTrucksFinished(self, trucks):
        self.trucksListModel = TrucksListModel(trucks, self)
        self.ui.trucksComboBox.setModel(self.trucksListModel)
        self.ui.trucksComboBox.setCurrentIndex(-1)
Ejemplo n.º 8
0
class NewTicket(QtGui.QDialog):
    def __init__(self, ticket_type_id, allow_manual, parent):
        super(NewTicket, self).__init__(parent)
        config = configparser.ConfigParser()
        settings_path = os.path.abspath(os.path.dirname(__file__))
        config.read(os.path.join(settings_path, 'settings.ini'))

        self.api = parent.api
        self.ticket_type_id = ticket_type_id
        self.ui = Ui_NewTicket()
        self.ui.setupUi(self)
        if ticket_type_id == 1:
            self.setWindowTitle("Nueva Recepción")
        else:
            self.setWindowTitle("Nuevo Despacho")
        self.setModal(True)

        self.driver = None
        self.truck = None

        if not allow_manual:
            self.ui.manualCheckBox.hide()

        self.api.createDriverFinished.connect(self.setDriver)
        self.api.createTruckFinished.connect(self.setTruck)
        self.ui.addDriverButton.clicked.connect(self.addDriver)
        self.ui.addTruckButton.clicked.connect(self.addTruck)
        self.ui.manualCheckBox.stateChanged.connect(self.setManualCapture)
        self.ui.createTicketButton.clicked.connect(self.createTicket)
        self.ui.cancelButton.clicked.connect(self.reject)

        self.st = SerialThread(config.get('Serial', 'PortName'),
                               config.get('Serial', 'Regex'),
                               config.getint('Serial', 'Baudrate'),
                               config.get('Serial', 'Parity'),
                               config.getint('Serial', 'Bytesize'),
                               config.getboolean('Serial', 'Simulate'))
        self.st.dataReady.connect(self.getWeight, QtCore.Qt.QueuedConnection)
        self.st.start()

    def createTicket(self):
        weightCaptured = self.ui.captureWeightButton.isChecked()
        manualEnabled = self.ui.manualCheckBox.isChecked()

        errors = []
        if self.driver == None:
            errors.append("El chofer no ha sido seleccionado")
        if self.truck == None:
            errors.append("El camión no ha sido seleccionado")
        if not manualEnabled and not weightCaptured:
            errors.append("El peso de entrada no ha sido capturado")

        if not errors:
            incoming_weight = self.ui.incomingWeightSpinBox.value()
            comment = self.ui.commentPlainTextEdit.toPlainText()
            self.ticket = Ticket(self.ticket_type_id, self.driver.id,
                                 self.truck.id, incoming_weight, comment)
            self.ticket.manual_incoming = manualEnabled
            self.accept()
        else:
            ErrorMessageBox(errors).exec_()

    def addDriver(self):
        addDriverDialog = AddDriver(self)
        if addDriverDialog.exec_() == QtGui.QDialog.Accepted:
            self.setDriver(addDriverDialog.driver)

    def setDriver(self, driver):
        self.driver = driver
        self.ui.driverLineEdit.setText("%s - %s" %
                                       (self.driver.name, self.driver.ci))

    def addTruck(self):
        addTruckDialog = AddTruck(self)
        if addTruckDialog.exec_() == QtGui.QDialog.Accepted:
            self.setTruck(addTruckDialog.truck)

    def setTruck(self, truck):
        self.truck = truck
        self.ui.truckLineEdit.setText(
            "%s - %s" % (self.truck.license_plate, self.truck.carrier.name))

    def setManualCapture(self):
        if self.ui.manualCheckBox.isChecked():
            self.ui.incomingWeightSpinBox.setEnabled(True)
            self.ui.captureWeightButton.setEnabled(False)
            self.ui.captureWeightButton.setChecked(False)
        else:
            self.ui.incomingWeightSpinBox.setEnabled(False)
            self.ui.captureWeightButton.setEnabled(True)

    def getWeight(self, weight):
        if not self.ui.captureWeightButton.isChecked(
        ) and not self.ui.manualCheckBox.isChecked():
            self.ui.incomingWeightSpinBox.setValue(weight)

    def getTrucksFinished(self, trucks):
        self.trucksListModel = TrucksListModel(trucks, self)
        self.ui.trucksComboBox.setModel(self.trucksListModel)
        self.ui.trucksComboBox.setCurrentIndex(-1)