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)")
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)
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)