def _cmd_edit(self, given): given['internal_name'] = rlinput("品名:", given['internal_name']) self._ws['B{}'.format(self.index)] = given['internal_name'] try: self._wb.save(self._product_wb_file) except PermissionError: print("war:文件已经被打开,无法写入")
def select_product(self, products, product_name): """ :param products: 产品列表 :param product_name: 产品名称 :return: if None 表示 break """ for product in products: if product.internal_name == product_name: return product print(f"请选择产品{product_name}的ID,可能是以下中的一个") for product in products: space = " " * (20 - len(product.internal_name)) if len( product.internal_name) < 20 else "" print("\t %s%s\t ID:%s" % (product.internal_name, space, product.id)) while True: pid = rlinput("请选择产品ID:") if pid == "quit": self.wb.save(self.filename) sys.exit() elif pid == "break" or pid == 'b': return # 直接回车就是选择第一个 elif not pid: return products[0] for product in products: if str(product.id) == pid: return product print(f"无效的id: {pid}")
def _input_number(self, msg): value = rlinput(msg) if not is_number_like(value): value = self._input_number(None) return value
def query_product(self, product_name): """ :param product_name: :return: if None 表示 break """ # 光刻胶 if product_name.endswith("CP") \ or product_name.startswith("RDR-") \ or product_name.startswith("RD-") \ or product_name.startswith("RDJ-") \ or product_name.startswith("SIJ-"): return # 开油水 if product_name.startswith("S-") \ or product_name.find('助剂') >= 0 \ or product_name.find('稀释剂') >= 0 \ or product_name.endswith("固化剂"): # tx-1109 固化剂 return # 优化 product_name if product_name.startswith("9GHD"): product_name = "9G" elif product_name.startswith("2GHD"): product_name = "2G" elif product_name.startswith("3GHD"): product_name = "3G" elif product_name.startswith("8G04HD"): product_name = "8G04" elif product_name.startswith("UVS-1000"): product_name = "UVS-1000" product_name = product_name \ .replace("内袋", "") \ .replace("固内", "") \ .replace("胜宏", "") \ .replace("金像", "") \ .replace("川亿", "") \ .replace("外贸", "") \ .strip() while True: products = Product.query.search(product_name).limit(20).all() if products: break print(f"未查到{product_name}的产品记录,请修改一下") product_name = rlinput("品名:", product_name) # product_name = rlinput("品名:") if product_name == 'break' or product_name == 'b': return elif product_name == "quit": self.wb.save(self.filename) sys.exit() if products: return self.select_product(products, product_name)
def _input_kind(self): kind = rlinput( "类别(H-8100/H-9100/A-2000/K-2500/A-2100/A-9060A/A-9000/\n" "UVS-1000/TM-3100/TS-3000/UVM-1800):\n >>>") conf = self.get_conf(kind) if not conf: conf = self.get_conf_by_alias(kind) if not conf: print("无效的类别, 请重新输入") conf = self._input_kind() return conf
def _cmd_add(self, internal_name): market_name = rlinput("销售品名(打在检验报告上的名字,例如‘8G04建业’的销售名为8G 04):\n >>>") conf = self._input_kind() viscosity = self._input_number("粘度值:") viscosity_width = self._input_number("粘度上下幅度:") product_obj = Product(internal_name=internal_name, market_name=market_name, template=conf['slug'], viscosity=int(viscosity), viscosity_width=int(viscosity_width)) db.insert_product(product_obj) db.insert_product_to_xlsx(product_obj, '%s/data/database.xlsx' % self.app_path, 'products') print("已经插入新的条目到products数据表") return product_obj
def query_info(self, given): """ 查询数据库, 追加更多信息 :param: given 是从list.xlsx 中查出的数据 """ products = db.search_product(given['internal_name']) if products.count() == 0: print('\n数据库中无记录, 输入命令以继续.') print(" 添加条目 输入 add") print(" 编辑字段 输入 edit") print(" 跳过此行 输入 break") print(" 退出程序 输入 quit") while True: cmd = rlinput("命令:") if cmd == "add": product_obj = self._cmd_add(given['internal_name']) break elif cmd == "break": return elif cmd == "edit": self._cmd_edit(given) return self.query_info(given) elif cmd == "quit": self.exit() else: # 是否有名称完全匹配的 product_obj = db.get_product_by_internal_name( given['internal_name']) if not product_obj: print("请选择产品ID,可能是以下中的一个") print("如果产品不在下面列出,你还可以输入以下命令:") print(" 添加条目 输入 add") print(" 编辑字段 输入 edit") print(" 跳过此行 输入 break") print(" 退出程序 输入 quit") print('') ids = [] for product in products.all(): ids.append(product.id) space = " " * (20 - len(product.internal_name)) if len( product.internal_name) < 20 else "" print("\t %s%s\t ID:%s\t %s±%sdPa.s" % (product.internal_name, space, product.id, product.viscosity, product.viscosity_width)) while True: pid = rlinput("请选择产品ID:") if pid == "quit": self.exit() if pid == "add": product_obj = self._cmd_add(given['internal_name']) break elif pid == "edit": self._cmd_edit(given) return self.query_info(given) elif pid == "break": return elif not pid: if len(ids) == 1: pid = ids[0] break elif self._validate_id(pid, ids): break if not product_obj and is_number_like(pid): product_obj = db.get_product_by_id(pid) print("\t 你选择了(%s, %s±%sdPa.s)" % (product_obj.internal_name, product_obj.viscosity, product_obj.viscosity_width)) given['market_name'] = product_obj.market_name given['kind'] = product_obj.template given['viscosity'] = product_obj.viscosity given['viscosity_limit'] = "%s±%s" % (product_obj.viscosity, product_obj.viscosity_width) given['qc_date'] = datetime.strftime(datetime.now(), '%Y/%m/%d') given['ftir'] = '{}%'.format(round(random.uniform(99.3, 100), 2)) given['color'] = product_obj.color or '' given['wants_normal'] = True return given