コード例 #1
0
ファイル: product_edit_or_add.py プロジェクト: Ciwara/gcommon
class EditOrAddProductsDialog(QDialog, FWidget):

    def __init__(self, table_p, parent, product=None, *args, **kwargs):
        QDialog.__init__(self, parent, *args, **kwargs)

        self.table_p = table_p
        self.prod = product
        self.parent = parent
        self.filename = "Parcourire ..."
        self.path_filename = None

        if self.prod:
            self.title = u"Modification de l'article {}".format(self.prod.name)
            self.succes_msg = u"L'article <b>%s</b> a été mise à jour" % self.prod.name
            try:
                self.filename = self.prod.file_join.file_name
            except:
                pass
        else:
            self.succes_msg = u"L'article a été bien enregistré"
            self.title = u"Ajout de nouvel article"
            self.prod = Product()

        self.setWindowTitle(self.title)

        # self.code = LineEdit(self.prod.code)
        self.name_field = LineEdit(self.prod.name)
        try:
            self.category_name = Category.select().where(
                Category.name == self.prod.category.name).get().name
        except:
            self.category_name = ""
        self.category_field = LineEdit(self.category_name)

        self.number_parts_box_field = IntLineEdit(
            str(self.prod.number_parts_box))
        self.number_parts_box_field.setValidator(QIntValidator())

        completion_values = [catg.name for catg in Category.all()]
        completer = QCompleter(completion_values, parent=self)
        completer.setCaseSensitivity(Qt.CaseInsensitive)
        completer.setCompletionMode(QCompleter.UnfilteredPopupCompletion)
        self.category_field.setCompleter(completer)

        vbox = QVBoxLayout()
        formbox = QFormLayout()
        formbox.addRow(FLabel(u"Nom"), self.name_field)
        formbox.addRow(FLabel(u"Categorie"), self.category_field)
        # formbox.addRow(
        #     FLabel(u"Quantité (carton)"), self.number_parts_box_field)
        self.butt_parco = QPushButton(
            QIcon.fromTheme('document-open', QIcon('')), self.filename)
        self.butt_parco.clicked.connect(self.import_image)
        butt_cancel = Warning_btt(u"Annuler")
        butt_cancel.clicked.connect(self.cancel)
        # formbox.addRow(FLabel(u"Image"), self.butt_parco)
        butt = Button_save(u"&Enregistrer")
        butt.clicked.connect(self.add_or_edit_prod)
        formbox.addRow(butt_cancel, butt)

        vbox.addLayout(formbox)
        self.setLayout(vbox)

    def import_image(self):
        """ """
        self.path_filename = QFileDialog.getOpenFileName(self, "Open Image", "",
                                                         "Documents ({})".format(Config.DOC_SUPPORT),)
        if self.path_filename:
            self.fileName = str(
                os.path.basename(u"{}".format(self.path_filename)))
            self.butt_parco.setText(self.fileName)

    def cancel(self):
        self.close()

    def is_valide(self):
        flag = True
        if (check_is_empty(self.name_field) or
                check_is_empty(self.category_field)
                # or check_is_empty(self.number_parts_box_field)
                ):
            flag = False
        return flag

    def add_or_edit_prod(self):

        if not self.is_valide():
            print("is not valide")
            return

        name = str(self.name_field.text())
        category = str(self.category_field.text())
        # number_parts_box = str(self.number_parts_box_field.text())

        product = self.prod
        product.name = name
        # product.number_parts_box = number_parts_box
        product.category = Category.get_or_create(category)

        # try:
        #     if self.path_filename:
        #         fileobj = FileJoin(file_name=self.fileName,
        #                            file_slug=self.path_filename)
        #         fileobj.save()
        #         product.file_join = fileobj
        # except IOError:
        #     self.parent.Notify(u"""<h2>Problème d'import du fichier</h2>
        #         Changer le nom du fichier et reesayé si ça ne fonctionne pas contacté le developper""", "error")
        #     return
        # except Exception as e:
        #     print(e)

        try:
            product.save()
            self.cancel()
            self.table_p.refresh_()
            self.parent.Notify(self.succes_msg, "success")
        except peewee.IntegrityError as e:
            field_error(
                self.name_field, u"""Le produit <b>%s</b> existe déjà dans la basse de donnée.""" % product.name)
            return False