Ejemplo n.º 1
0
    def on_name_textEdited(self, p_str):
        if p_str:
            filter_content = Q()
            for item in self.key:
                try:
                    kwargs = {item: p_str}
                    if filter_content != Q:
                        filter_content = filter_content | Q(**kwargs)
                    else:
                        filter_content = Q(**kwargs)
                except Exception as e:
                    SaveExcept(e, "查询字典内容出错", self.key, self.module_name,
                               self.valuetuple)
            res = self.module_name.objects.filter(filter_content).values_list(
                *self.valuetuple)
            if res:
                self.namelist.clear()
                self.namelist.setVisible(True)
                self.namelist.setStyleSheet(
                    "background-color: rgb(255, 255, 125)")
                for k, item in enumerate(res):
                    user = QtWidgets.QTreeWidgetItem(self.namelist)
                    for key in range(len(item)):
                        user.setText(key, str(item[key]))
                    if k == 0:
                        self.namelist.setCurrentItem(user, 1)

                # 隐藏第一列的id
                self.namelist.hideColumn(0)
                for i in range(1, 8):
                    self.namelist.resizeColumnToContents(i)
                    if self.namelist.columnWidth(i) > 150:
                        self.namelist.setColumnWidth(i, 150)
                # self.it = QtWidgets.QTreeWidgetItemIterator(self.namelist)
            else:
                self.namelist.clear()
                self.namelist.setVisible(False)
                self.namelist.setStyleSheet(
                    "background-color: rgb(255, 255, 255)")
        else:
            self.namelist.clear()
            self.namelist.setVisible(False)
            self.namelist.setStyleSheet("background-color: rgb(255, 255, 255)")
Ejemplo n.º 2
0
    def delete_producingplan(autoid=None, flat=0, *args):
        try:
            autoid_list = list(args)
            if autoid is not None:
                autoid_list.append(autoid)
            if flat == 0:
                return Producingplan.objects.filter(
                    autoid__in=autoid_list).delete()
            elif flat == 1:
                cursor = connection.cursor()
                for item in args:
                    with transaction.atomic():
                        cursor.execute("select deletproducingplan(%s)" % item)
                        raw = cursor.fetchone()
                        if raw[0] != 1:
                            return 0
                return 1

            else:
                pass
        except Exception as e:
            SaveExcept(e, "删除生产记录时出错", *args, flat=flat)
Ejemplo n.º 3
0
    def on_treeWidget_drawstuff_droped(self, event, pos):
        try:
            data = event.mimeData().data(
                'application/x-qabstractitemmodeldatalist')
            data_items = decode_data(data)
            p_str = data_items[0][0]
            srid = int(p_str)
            # 如果该批次物料已经有领料记录则不做任何操作
            if self.has_drawstuff(p_str):
                return
            stuff = dict()
            for item in self.stuff_repository:
                if srid == item['autoid']:
                    stuff = item
                    break
            if stuff is None:
                raise KeyError
            stuffkind = stuff['stuffkind']
            it_formula = self.get_treeitem(self.treeWidget_formula)

            while 1:
                try:
                    treeitem = next(it_formula)
                    if treeitem.text(2) == stuffkind:
                        planamount_expression = treeitem.text(4)
                        pracamount_expression = treeitem.text(5)
                        drawamount_expression = treeitem.text(6)
                        precision = int(treeitem.text(7))
                        loss = treeitem.text(8)
                        try:
                            presamount = Decimal(
                                rnd(eval(planamount_expression, evalenv(self)),
                                    precision))
                        except SyntaxError:
                            if stuffkind + ' 计划量' not in self.errormsg:
                                self.errormsg.append(stuffkind + ' 计划量')
                            presamount = 0
                        # 没有领够料,继续拖新的物料批次
                        if treeitem.text(9) == '0':
                            # 获取出该物料其他批次的实际领取量
                            it_drawstuff = self.get_treeitem(
                                self.treeWidget_drawstuff)
                            try:
                                new_presamount = presamount
                                while 1:
                                    drawitem = next(it_drawstuff)
                                    if drawitem.text(1) != stuffkind:
                                        continue
                                    # 转化为计划量 = 领取量 * 计划量 / 实际量
                                    has_drawamount = rnd(
                                        Decimal(drawitem.text(9)) *
                                        Decimal(drawitem.text(20)) /
                                        Decimal(drawitem.text(21)),
                                        int(drawitem.text(22)))
                                    new_presamount -= has_drawamount
                            except StopIteration:
                                pass
                            # 计算本批的领取量
                            res = self.reckon_drawamount(
                                p_str, new_presamount, precision,
                                pracamount_expression, drawamount_expression,
                                loss, False)
                        # 已经领够料,还继续拖新的物料批次
                        elif treeitem.text(9) == '1':
                            res = self.reckon_drawamount(
                                p_str, presamount, precision,
                                pracamount_expression, drawamount_expression,
                                loss, False)
                        if len(res):
                            res[0]['oripresamount'] = presamount
                            self.treeWidget_drawstuff_add_item(res)
                        self.is_drawamount_enough()
                        break
                except StopIteration:
                    break
        except ValueError:
            SaveExcept(ValueError, "拖动库存信息时出错,传入的不是srid", p_str,
                       self.stuff_repository)
        except KeyError:
            SaveExcept(ValueError, "拖动库存信息时出错,没有找到对应的库存记录,", p_str,
                       self.stuff_repository)