def __init__(self): self.SC = StuffController() self.SLC = SaleController() self.SP = SupplyerController() self.WM = WarehouseModel() self.WC = WorkshopController() self.PC = ProductController()
def __init__(self, autoid=None, snid=None, parent=None): super(EditSaleProdMudule, self).__init__(parent) self.setupUi(self) if '53' not in user.powers: self.close() if user.powers['53'] == 0: self.close() self.power = '{:03b}'.format(user.powers['53']) if self.power[1] == '0': self.pushButton_accept.setVisible(False) self.pushButton_cancel.setVisible(False) self.autoid = autoid self.snid = snid self.SC = SaleController() self.PC = ProductController() self.ori_detail = dict() self.new_detail = dict() row = ('autoid', 'prodid', 'prodname', 'spec', 'package') key = ('prodid', 'prodname', 'commonname', 'inputcode') row_name = ("id", "产品编号", "产品名称", "含量规格", "包装规格") self.lineEdit_product.setup('Productdictionary', row, key, row_name, None, 620, 190) self.set_validator() if self.autoid is not None: self.get_detail()
def __init__(self, autoid=None, parent=None): super(EditSaleOrderMudule, self).__init__(parent) self.setupUi(self) if '53' not in user.powers: self.close() if user.powers['53'] == 0: self.close() self.power = '{:03b}'.format(user.powers['53']) if self.power[1] == '0': self.pushButton_accept.setVisible(False) self.pushButton_cancel.setVisible(False) self.autoid=autoid self.SC = SaleController() self.ori_detail = dict() self.new_detail = dict() row = ('autoid', 'clientid', 'clientname', 'address') key = ('clientid', 'clientname', 'inputcode') row_name = ("id", "客户编号", "客户名称", "客户地址") self.lineEdit_client.setup('Client', row, key, row_name, None, 550, 290) if self.autoid is None: self.set_paperno() self.dateEdit_saledate.setDate(user.now_date) self.dateEdit_deliverydate.setDate(user.now_date) else: self.get_detail() self.set_conveyance_list() self.set_paymethod_list()
class SaleOrderModule(QDialog, Ui_Dialog): def __init__(self, autoid, parent=None): super(SaleOrderModule, self).__init__(parent) self.setupUi(self) self.SC = SaleController() self.WC = WarehouseController() self.WSC = WorkshopController() self.autoid = autoid self.get_order_list() self.get_product_list() def get_order_list(self): key_dict = {'autoid': self.autoid} order_list = self.SC.get_salenotes(False, *VALUES_TUPLE_ORDER, **key_dict) if not len(order_list): return order = order_list[0] self.label_paperno.setText(order['paperno']) self.label_client.setText(order['clientid'] + ' ' + order['clientname']) self.label_linkman.setText(order['linkman']) self.label_telno.setText(order['telno']) self.label_saler.setText(order['salerid'] + ' ' + order['salername']) self.label_saledate.setText(str(order['saledate'])) self.label_deliveryplace.setText(order['deliveryplace']) self.label_deliverydate.setText(str(order['deliverydate'])) self.label_consignment.setText(order['consignmentid'] + ' ' + order['consignmentname']) self.label_remark.setText(order['remark']) def get_product_list(self): self.treeWidget_prodlist.clear() self.treeWidget_prodlist.hideColumn(0) key_dict = {'snid': self.autoid} prod_list = self.SC.get_salenotegoods(False, *VALUES_TUPLE_PROD, **key_dict) if not len(prod_list): return for item in prod_list: qtreeitem = QTreeWidgetItem(self.treeWidget_prodlist) qtreeitem.setText(0, str(item['autoid'])) qtreeitem.setText(1, item['prodid'] + ' ' + item['prodname']) qtreeitem.setText(2, item['spec']) qtreeitem.setText(3, item['package']) qtreeitem.setText(4, to_str(item['saleamount'])) qtreeitem.setText(5, item['spunit']) prodid = item['prodid'] key_dict_rep = {'prodid': prodid, 'stockamount__gt': 0} product_rep_list = self.WC.get_productrepository( False, *VALUES_TUPLE_REP, **key_dict_rep).annotate(amount=Sum('stockamount')) if len(product_rep_list): qtreeitem.setText(6, to_str(product_rep_list[0]['amount'])) else: qtreeitem.setText(6, '0') for i in range(1, 7): self.treeWidget_prodlist.resizeColumnToContents(i)
def __init__(self, autoid, parent=None): super(SaleOrderModule, self).__init__(parent) self.setupUi(self) self.SC = SaleController() self.WC = WarehouseController() self.WSC = WorkshopController() self.autoid = autoid self.get_order_list() self.get_product_list()
def __init__(self, parent=None): super(SaleOrderListModule, self).__init__(parent) self.setupUi(self) if '53' not in user.powers: self.close() if user.powers['53'] == 0: self.close() self.power = '{:03b}'.format(user.powers['53']) self.SC = SaleController() self.WC = WarehouseController() self.WSC = WorkshopController() self.groupBox.setVisible(False) self.snid = 0 self.get_order_list()
def __init__(self, parent=None): super(QrcodeoutputModule, self).__init__(parent) self.setupUi(self) if '59' not in user.powers: self.close() if user.powers['59'] == 0: self.close() self.power = '{:03b}'.format(user.powers['59']) self.WC = WarehouseController() self.PC = ProductController() self.SC = SystemController() self.SLC = SaleController() self.orderlist = dict() # 获取二维码信息 self.get_order_list()
def __init__(self, parent=None): super(ClientListModule, self).__init__(parent) self.setupUi(self) if '54' not in user.powers: self.close() if user.powers['54'] == 0: self.close() self.power = '{:03b}'.format(user.powers['54']) self.SC = SaleController() self.IC = ImageController() self.kind_list = [] self.curremt_kind = 0 self.treeWidget_kind.hideColumn(1) self.treeWidget_detail.hideColumn(0) self.get_kind_list() self.get_client_list()
def __init__(self, autoid=None, parent=None): super(EditClientDetailModule, self).__init__(parent) self.setupUi(self) if '54' not in user.powers: self.close() if user.powers['54'] == 0: self.close() self.power = '{:03b}'.format(user.powers['54']) if self.power[1] == '0': self.pushButton_accept.setVisible(False) self.pushButton_cancel.setVisible(False) self.autoid = autoid self.ori_detail = dict() self.new_detail = dict() self.current_img = object self.current_page = object self.province_list = [] self.city_list = [] self.county_list = [] self.province_id = '' self.city_id = '' self.county_id = '' self.qyname = '' self.SC = SaleController() self.IC = ImageController() self.treeWidget_imagenamelist.hideColumn(0) self.treeWidget_imagenamelist.hideColumn(1) # 自动缩放 self.label_image.setScaledContents(True) return_row = ('parentid', 'autoid', 'kindname') condition_key = {'autoid', 'kindname', 'inputcode'} treeheader_name = ['parentid', '编号', '名称'] condition = {'kind': 4} self.lineEdit_tstkind.setup('Treestructure', return_row, condition_key, treeheader_name, condition, treewidth=300) self.get_detail() self.get_province() if len(self.ori_detail): self.get_city(self.ori_detail['province']) self.get_county(self.ori_detail['city'])
class QrcodeoutputModule(QWidget, Ui_Form): """ 二维码出库文件模块,可以查看到所有订单的二维码记录。 提供了右键下载二维码。 """ def __init__(self, parent=None): super(QrcodeoutputModule, self).__init__(parent) self.setupUi(self) if '59' not in user.powers: self.close() if user.powers['59'] == 0: self.close() self.power = '{:03b}'.format(user.powers['59']) self.WC = WarehouseController() self.PC = ProductController() self.SC = SystemController() self.SLC = SaleController() self.orderlist = dict() # 获取二维码信息 self.get_order_list() def get_order_list(self): self.treeWidget_orderlist.clear() self.treeWidget_orderlist.hideColumn(0) key_dict = dict() index = self.tabWidget.currentIndex() if index in (0, 1): key_dict['status'] = index + 1 else: key_dict['status__gte'] = 1 self.orderlist = self.WC.get_productputoutpaper( False, *VALUES_LIST, **key_dict) if not len(self.orderlist): return for item in self.orderlist: qtreeitem = QTreeWidgetItem(self.treeWidget_orderlist) qtreeitem.setText(0, str(item['autoid'])) qtreeitem.setText(1, str(item['putoutdate'])) qtreeitem.setText(2, item['pokind']) qtreeitem.setText(3, item['clientid'] + ' ' + item['clientname']) qtreeitem.setText(4, item['auditorid'] + ' ' + item['auditorname']) qtreeitem.setText(5, str(item['remark'])) for i in range(1, 6): self.treeWidget_orderlist.resizeColumnToContents(i) @pyqtSlot(QPoint) def on_treeWidget_orderlist_customContextMenuRequested(self, pos): if self.power[1] == '0': return qtreeitem = self.treeWidget_orderlist.selectedItems() if not len(qtreeitem): return select_id = int(qtreeitem[0].text(0)) menu = QMenu() button1 = menu.addAction("生成出库数据文件") # button2 = menu.addAction("导入入库二维码数据") # button3 = menu.addAction("覆盖入库二维码数据") g_pos = self.treeWidget_orderlist.mapToGlobal(pos) action = menu.exec(g_pos) if action == button1: clipboard = QApplication.clipboard() dir = clipboard.property("qrcodeoutputurl") filename = "出库数据" + str(user.now_date).replace("-", "") + ".xml" if not dir: dir = "C:\\" file_route, ext = QFileDialog.getSaveFileName( self, "请选择出库文件输出路径", dir + filename, "*.xml;;All Files(*)") if not file_route: return selected_dir = re.findall(r'^(.+/|.+\\)', file_route)[0] clipboard.setProperty("qrcodeoutputurl", selected_dir) self.makeqrcodeoutputfile(select_id, file_route) self.WC.update_productputoutpaper(select_id, status=2) self.get_order_list() @pyqtSlot(int) def on_tabWidget_currentChanged(self, index): getattr(self, 'tab_' + str(index)).setLayout(self.gridLayout_2) self.get_order_list() def makeqrcodeoutputfile(self, id, file_route): for item in self.orderlist: if item['autoid'] == id: proddetail = item break clientid = proddetail['clientid'] key_dict_client = {'clientid': clientid} clients_detail = self.SLC.get_client(False, *VALUES_LIST_CLIENT, **key_dict_client) if len(clients_detail) != 1: return client = clients_detail[0] key_dict = {'ppopid': id} res = self.WC.get_ppopqrcode(False, *VALUES_LIST_QRCODE, **key_dict) if not len(res): return # 把二维码按比例分组 q_list, ppid_list, batchno_list = self.sort_qrcode( res.order_by('batchno')) xml = QXmlStreamWriter() qfile = QFile(file_route) if qfile.open(QIODevice.WriteOnly): xml.setDevice(qfile) else: return xml.setAutoFormatting(True) xml.writeStartDocument() # 添加头文件信息 self.addxmlheader(xml, client['kind']) self.addxmlproddetail(xml, proddetail) temp_ppid = '' for i in range(0, len(ppid_list)): if temp_ppid != ppid_list[i]: if temp_ppid != '': # 把上一个Batch结束了 xml.writeEndElement() temp_ppid = ppid_list[i] xml.writeStartElement("Batch") xml.writeAttribute('batchNo', batchno_list[i]) xml.writeAttribute('operator', proddetail['auditorname']) xml.writeAttribute('oprDate', str(proddetail['putoutdate'])) xml.writeAttribute(' toUnit', client['clientname']) xml.writeAttribute('toProvince', client['province']) xml.writeAttribute('toCity', client['city']) xml.writeAttribute('toCounty', client['county']) xml.writeAttribute('toUnitcode', client['unitcode']) xml.writeStartElement("Data") xml.writeAttribute('code', q_list[i]) xml.writeEndElement() xml.writeEndElement() xml.writeEndElement() xml.writeEndDocument() def sort_qrcode(self, qrcode_list): q_list = [] ppid_list = [] batchno_list = [] try: for item in qrcode_list: q_list.append(item['qr0']) ppid_list.append(item['ppid']) batchno_list.append(item['batchno']) except KeyError: pass return q_list, ppid_list, batchno_list def addxmlheader(self, xml, toUnitType): company = "智普飞扬" mancode = "19060310" key_dict_sys = {'varname__in': ("company", "mancode")} res = self.SC.get_syssetting(False, *VALUES_LIST_SYS, **key_dict_sys) if len(res): for item in res: if item['varname'] == "company": company = item['varvalue'] elif item['varname'] == "mancode": mancode = item['varvalue'] xml.writeStartElement("DataList") xml.writeAttribute("corpName", company) xml.writeAttribute("toUnitType", str(toUnitType)) xml.writeAttribute("manCode", mancode) xml.writeAttribute("dataType", "wareHouseOut") xml.writeAttribute("version", "1.1") xml.writeAttribute("xmlns: xsi", "http://www.w3.org/2001/XMLSchema-instance") xml.writeAttribute("xsi: noNamespaceSchemaLocation", "兽药产品出库数据1.1.xsd") def addxmlproddetail(self, xml, proddetail): xml.writeStartElement("Product")
class EditSaleProdMudule(QDialog, Ui_Dialog): def __init__(self, autoid=None, snid=None, parent=None): super(EditSaleProdMudule, self).__init__(parent) self.setupUi(self) if '53' not in user.powers: self.close() if user.powers['53'] == 0: self.close() self.power = '{:03b}'.format(user.powers['53']) if self.power[1] == '0': self.pushButton_accept.setVisible(False) self.pushButton_cancel.setVisible(False) self.autoid = autoid self.snid = snid self.SC = SaleController() self.PC = ProductController() self.ori_detail = dict() self.new_detail = dict() row = ('autoid', 'prodid', 'prodname', 'spec', 'package') key = ('prodid', 'prodname', 'commonname', 'inputcode') row_name = ("id", "产品编号", "产品名称", "含量规格", "包装规格") self.lineEdit_product.setup('Productdictionary', row, key, row_name, None, 620, 190) self.set_validator() if self.autoid is not None: self.get_detail() def get_detail(self): key_dict = {'autoid': self.autoid} detail_list = self.SC.get_salenotegoods(False, *VALUES_TUPLE_PROD, **key_dict) if not len(detail_list): return self.ori_detail = detail_list[0] self.lineEdit_product.setText(self.ori_detail['prodid'] + ' ' + self.ori_detail['prodname']) self.label_spec.setText(self.ori_detail['spec']) self.label_package.setText(self.ori_detail['package']) self.lineEdit_amount.setText(to_str(self.ori_detail['saleamount'])) self.label_unit.setText(self.ori_detail['spunit']) def set_validator(self): doubleValitor = QDoubleValidator() doubleValitor.setBottom(0) self.lineEdit_amount.setValidator(doubleValitor) @pyqtSlot(str) def on_lineEdit_product_textChanged(self, p_str): if len(p_str.split(' ')) != 2 and p_str != '': return id, name = p_str.split(' ') if p_str != '' else ('', '') key_dict = {'prodid': id, 'prodname': name} res = self.PC.get_product_or_stuff_dictionary(0, False, *VALUES_TUPLE_PRODDICT, **key_dict) if len(res): prod_detail = res[0] self.label_spec.setText(prod_detail['spec']) self.label_package.setText(prod_detail['package']) self.label_unit.setText(prod_detail['spunit']) try: if id != self.ori_detail['prodid'] or name != self.ori_detail[ 'prodname']: self.new_detail['prodid'] = id self.new_detail['prodname'] = name self.new_detail['spec'] = prod_detail['spec'] self.new_detail['package'] = prod_detail['package'] self.new_detail['spunit'] = prod_detail['spunit'] else: try: del self.new_detail['prodid'] del self.new_detail['prodname'] del self.new_detail['spec'] del self.new_detail['package'] del self.new_detail['spunit'] except KeyError: pass except KeyError: self.new_detail['prodid'] = id self.new_detail['prodname'] = name self.new_detail['spec'] = prod_detail['spec'] self.new_detail['package'] = prod_detail['package'] self.new_detail['spunit'] = prod_detail['spunit'] @pyqtSlot(str) def on_lineEdit_amount_textChanged(self, p_str): try: p_num = decimal.Decimal(p_str) if p_num != self.ori_detail['saleamount']: self.new_detail['saleamount'] = p_num else: try: del self.new_detail['saleamount'] except KeyError: pass except KeyError: self.new_detail['saleamount'] = p_num except decimal.InvalidOperation: pass @pyqtSlot() def on_pushButton_accept_clicked(self): if not len(self.new_detail): return saleamount = self.lineEdit_amount.text() if saleamount in ('0', ''): msg = MessageBox(self, text="销售数量不能为空") msg.show() return if self.autoid is None and self.snid is not None: self.new_detail['snid'] = self.snid self.SC.update_salenotegoods(self.autoid, **self.new_detail) self.accept() @pyqtSlot() def on_pushButton_cancel_clicked(self): self.close()
class ClientListModule(QWidget, Ui_Form): def __init__(self, parent=None): super(ClientListModule, self).__init__(parent) self.setupUi(self) if '54' not in user.powers: self.close() if user.powers['54'] == 0: self.close() self.power = '{:03b}'.format(user.powers['54']) self.SC = SaleController() self.IC = ImageController() self.kind_list = [] self.curremt_kind = 0 self.treeWidget_kind.hideColumn(1) self.treeWidget_detail.hideColumn(0) self.get_kind_list() self.get_client_list() def get_kind_list(self): self.treeWidget_kind.clear() key_dict = {'kind': 4} self.kind_list = self.SC.get_data(4, False, *VALUES_TUPLE_KIND, **key_dict) # if not len(self.kind_list): # return self.set_kind_list(self.kind_list) # self.treeWidget_kind.resizeColumnToContents(0) self.treeWidget_kind.expandAll() def set_kind_list(self, items): qtreeitem_all = QTreeWidgetItem(self.treeWidget_kind) qtreeitem_all.setText(0, "全部") qtreeitem_all.setText(1, "0") for item in items: res = self.treeWidget_kind.findItems(str(item['autoid']), Qt.MatchRecursive, 1) if len(res): continue if item['parentid'] != 0: parent_item = self.find_kind_item(item['parentid']) qtreeitem = QTreeWidgetItem(parent_item) else: qtreeitem = QTreeWidgetItem(qtreeitem_all) qtreeitem.setText(0, item['kindname']) qtreeitem.setText(1, str(item['autoid'])) def find_kind_item(self, parentid, i=0): res = self.treeWidget_kind.findItems(str(parentid), Qt.MatchRecursive, 1) if len(res): return res[0] else: parent = self.treeWidget_kind.topLevelItem(0) try: if i > 10: # 手动设置最大循环深度位10 raise RecursionError for item in self.kind_list: if item['autoid'] == parentid: parent_id = item['parentid'] if parent_id == 0: parent = QTreeWidgetItem( self.treeWidget_kind.topLevelItem(0)) parent.setText(0, item['kindname']) parent.setText(1, str(item['autoid'])) break else: i += 1 parent = self.find_kind_item(parent_id, i) break return parent except RecursionError: return parent def get_client_list(self): self.treeWidget_detail.clear() key_dict = dict() if self.curremt_kind != 0: key_dict['tstkind'] = self.curremt_kind res = self.SC.get_data(0, False, *VALUES_TUPLE_SP, **key_dict) if not len(res): return for item in res: qtreeitem = QTreeWidgetItem(self.treeWidget_detail) qtreeitem.setText(0, str(item['autoid'])) qtreeitem.setText(1, item['clientid']) qtreeitem.setText(2, item['clientname']) qtreeitem.setText(3, item['address']) qtreeitem.setText(4, item['charger']) qtreeitem.setText(5, item['telno']) qtreeitem.setText(6, item['taxno']) for i in range(1, 7): self.treeWidget_detail.resizeColumnToContents(i) @pyqtSlot(QTreeWidgetItem, int) def on_treeWidget_kind_itemClicked(self, qtreeitem, p_int): self.curremt_kind = int(qtreeitem.text(1)) self.get_client_list() @pyqtSlot(QTreeWidgetItem, int) def on_treeWidget_detail_itemDoubleClicked(self, qtreeitem, p_int): # if self.power[1] == '0': # return id = int(qtreeitem.text(0)) detail = EditClientDetailModule(id, self) detail.accepted.connect(self.get_client_list) detail.show() @pyqtSlot(QPoint) def on_treeWidget_kind_customContextMenuRequested(self, pos): if self.power[1] == '0': return sender_widget = self.sender() current_item = sender_widget.currentItem() menu = QMenu() button1 = menu.addAction("增加分类") button2 = menu.addAction("修改分类") button3 = menu.addAction("删除分类") global_pos = sender_widget.mapToGlobal(pos) action = menu.exec(global_pos) if action == button1: if current_item is None: parent_item = self.treeWidget_kind.topLevelItem(0) else: parent_item = current_item parent_id = int(parent_item.text(1)) kwargs = { 'kind': 4, 'kindname': "新建分类", 'parentid': parent_id, 'inputcode': Inputcode.make_inputcode("新建分类") } kind_object = self.SC.update_data(4, **kwargs) qtreeitem = QTreeWidgetItem(parent_item) qtreeitem.setText(0, "新建分类") qtreeitem.setText(1, str(kind_object.autoid)) self.treeWidget_kind.openPersistentEditor(qtreeitem, 0) self.treeWidget_kind.setCurrentItem(qtreeitem) elif action == button2: if current_item is None: return self.treeWidget_kind.setCurrentItem(None) self.treeWidget_kind.openPersistentEditor(current_item, 0) self.treeWidget_kind.setCurrentItem(current_item, 0) elif action == button3: if current_item is None: return id = int(current_item.text(1)) condition = {'autoid': id} self.SC.delete_data(4, condition) self.get_kind_list() @pyqtSlot(QTreeWidgetItem, int) def on_treeWidget_kind_itemChanged(self, qtreeitem, p_int): if self.treeWidget_kind.isPersistentEditorOpen(qtreeitem, p_int): self.treeWidget_kind.closePersistentEditor(qtreeitem, p_int) id = int(qtreeitem.text(1)) new_kindname = qtreeitem.text(0) condition = {'autoid': id} kwargs = {'kindname': new_kindname} self.SC.update_data(4, condition, **kwargs) @pyqtSlot(QTreeWidgetItem, QTreeWidgetItem) def on_treeWidget_kind_currentItemChanged(self, qtreeitem, qtreeitem_1): if self.treeWidget_kind.isPersistentEditorOpen(qtreeitem_1, 0): self.treeWidget_kind.closePersistentEditor(qtreeitem_1, 0) id = int(qtreeitem_1.text(1)) new_kindname = qtreeitem_1.text(0) condition = {'autoid': id} kwargs = {'kindname': new_kindname} self.SC.update_data(4, condition, **kwargs) @pyqtSlot(QTreeWidgetItem, int) def on_treeWidget_kind_itemDoubleClicked(self, qtreeitem, p_int): self.treeWidget_kind.openPersistentEditor(qtreeitem, p_int) @pyqtSlot(QPoint) def on_treeWidget_detail_customContextMenuRequested(self, pos): if self.power[1] == '0': return sender_widget = self.sender() current_item = sender_widget.currentItem() menu = QMenu() button1 = menu.addAction("增加记录") button2 = menu.addAction("修改记录") button3 = menu.addAction("删除记录") global_pos = sender_widget.mapToGlobal(pos) action = menu.exec(global_pos) if action == button1: detail = EditClientDetailModule(parent=self) detail.accepted.connect(self.get_client_list) detail.show() elif action == button2: if current_item is None: return id = int(current_item.text(0)) detail = EditClientDetailModule(id, self) detail.accepted.connect(self.get_client_list) detail.show() elif action == button3: if current_item is None: return id = int(current_item.text(0)) condition = {'autoid': id} condition_3 = {'scid': id, 'kind': 1} self.SC.delete_data(0, condition) img_id_list = self.IC.get_data(0, True, *VALUES_TUPLE_IM, **condition_3) condition_4 = {'autoid__in': img_id_list} self.IC.delete_data(1, condition_4) self.IC.delete_data(0, condition_3) self.get_client_list()
class WarehouseController(object): def __init__(self): self.SC = StuffController() self.SLC = SaleController() self.SP = SupplyerController() self.WM = WarehouseModel() self.WC = WorkshopController() self.PC = ProductController() def get_stuffdrawpaper(self, *args, **kwargs): return self.SC.get_stuffdrawpaper(*args, **kwargs) """if len(res): ppid_list = list() for item in res: ppid_list.append(item.ppid) value_tuple = ( 'autoid', 'prodid', 'prodname', 'spec', 'package', 'batchno') prod_info_tuple = self.WM.get_producingplan(*value_tuple, autoid__in=set( ppid_list)) for item in res: for it in prod_info_tuple: if item.ppid == it[0]: item.prod = it[1] + ' ' + it[2] item.spec = it[3] item.package = it[4] item.batchno = it[5] return res else: return []""" def get_stuffrepository(self, display_flag=False, *args, **kwargs): return self.WM.get_stuffrepository(display_flag, *args, **kwargs) """res = self.WM.get_stuffrepository(flag, *args, **kwargs) supid_list = [] if len(res): for item in res: supid_list.append(item['supid']) supplyers = self.SP.get_supply(('supid', 'supname'), supid__in=set(supid_list)) for item in res: item['supname'] = '' for supplyer in supplyers: if item['supid'] == supplyer[0]: item['supname'] = supplyer[1] break return res """ def update_stuffrepository(self, autoid=None, *args, **kwargs): return WarehouseModel.update_stuffrepository(autoid, *args, **kwargs) def update_stuffrepository_amount(self, ppid, *args, **kwargs): return WarehouseModel.update_stuffrepository_amount( ppid, *args, **kwargs) def get_productputoutpaper(self, display_flag=False, *args, **kwargs): return WarehouseModel.get_productputoutpaper(display_flag, *args, **kwargs) def update_productputoutpaper(self, autoid=None, *args, **kwargs): return WarehouseModel.update_productputoutpaper( autoid, *args, **kwargs) def delete_productputoutpaper(self, autoid=None, *args, **kwargs): return WarehouseModel.delete_productputoutpaper( autoid, *args, **kwargs) def get_prodwithdrawnote(self, display_flag=False, *args, **kwargs): return WarehouseModel.get_prodwithdrawnote(display_flag, *args, **kwargs) def update_prodwithdrawnote(self, autoid, *args, **kwargs): return WarehouseModel.update_prodwithdrawnote(autoid, *args, **kwargs) def delete_prodwithdrawnote(self, autoid, *args, **kwargs): return WarehouseModel.delete_prodwithdrawnote(autoid, *args, **kwargs) def get_ppopqrcode(self, display_flag=False, *args, **kwargs): return WarehouseModel.get_ppopqrcode(display_flag, *args, **kwargs) def update_ppopqrcode(self, autoid, *args, **kwargs): return WarehouseModel.update_ppopqrcode(autoid, *args, **kwargs) def delete_ppopqrcode(self, autoid, *args, **kwargs): return WarehouseModel.delete_ppopqrcode(autoid, *args, **kwargs) def get_pwqrcode(self, display_flag=False, *args, **kwargs): return WarehouseModel.get_pwqrcode(display_flag, *args, **kwargs) def update_pwqrcode(self, autoid, *args, **kwargs): return WarehouseModel.update_pwqrcode(autoid, *args, **kwargs) def delete_pwqrcode(self, autoid, *args, **kwargs): return WarehouseModel.delete_pwqrcode(autoid, *args, **kwargs) def get_stuffcheckin(self, display_flag=False, *args, **kwargs): return WarehouseModel.get_stuffcheckin(display_flag, *args, **kwargs) def update_stuffcheckin(self, autoid, *args, **kwargs): return WarehouseModel.update_stuffcheckin(autoid, *args, **kwargs) def new_stuffcheckin(self, ppid, *args, **kwargs): detail = dict() key_dict = {'ppid': ppid} stuff_query = self.SP.get_purchstuff(False, *VALUES_TUPLE_PPLIST, **key_dict) if not len(stuff_query): return stuff_list = list(stuff_query) with transaction.atomic(): p1 = transaction.savepoint() res = WarehouseModel.update_stuffcheckin(None, *args, **kwargs) for item in stuff_list: if item['amount'] - item['arrivedamount'] <= 0: continue detail['paperno'] = res.paperno detail['papertype'] = 0 detail['makedate'] = user.now_date detail['expireddate'] = user.now_date + datetime.timedelta( days=item['expireddays']) detail['checkindate'] = user.now_date detail['amount'] = item['amount'] - item['arrivedamount'] detail['piamount'] = item['amount'] - item['arrivedamount'] detail['supid'] = kwargs['supid'] detail['supname'] = kwargs['supname'] del item['amount'] del item['arrivedamount'] del item['expireddays'] detail.update(item) WarehouseModel.update_stuffcheckinlist(None, **detail) def delete_stuffcheckin(self, autoid, *args, **kwargs): return WarehouseModel.delete_stuffcheckin(autoid, *args, **kwargs) def get_stuffcheckinlist(self, display_flag=False, *args, **kwargs): return WarehouseModel.get_stuffcheckinlist(display_flag, *args, **kwargs) def update_stuffcheckinlist(self, autoid, *args, **kwargs): return WarehouseModel.update_stuffcheckinlist(autoid, *args, **kwargs) def delete_stuffcheckinlist(self, autoid, *args, **kwargs): return WarehouseModel.delete_stuffcheckinlist(autoid, *args, **kwargs) def get_productrepository(self, display_flag=False, *args, **kwargs): return WarehouseModel.get_productrepository(display_flag, *args, **kwargs) def update_productrepository(self, autoid, *args, **kwargs): return WarehouseModel.update_productrepository(autoid, *args, **kwargs) def delete_productrepository(self, autoid, *args, **kwargs): return WarehouseModel.delete_productrepository(autoid, *args, **kwargs) def find_prodqrcode(self, qrcode): """ 产品二维码中是否找到输入的二维码(qrcode) 返回4个参数 第一个参数 0: 找到二维码且(全部)未使用 1: 找到二维码但(全部)已被使用 2: 找到二维码但(部分)已被使用 3: 找不到二维码 第二个参数 二维码级别 第三个参数 二维码对应的数量 第四个参数 二维码所在的ppid,选择结果集中的第一个ppid 第五个二维码 二维码所在的batchno,选择结果集的第一个batchno """ key_dict_0 = {'qrcode0': qrcode} key_dict_1 = {'qrcode1': qrcode} key_dict_2 = {'qrcode2': qrcode} key_dict_3 = {'qrcode3': qrcode} res = None i = 0 for i in range(0, 4): res = self.WC.get_prodqrcode(False, *VALUES_TUPLE_PRODQRCODE, **locals()['key_dict_' + str(i)]) if len(res): break if not len(res): return 3, i, 0, 0, '' res_dist = res.distinct() sum = len(res) amount = self.sum_to_amount(sum, i, res_dist[0]['ppid']) if len(res_dist) == 2: return 2, i, amount, res_dist[0]['ppid'], res_dist[0]['batchno'] elif len(res_dist) == 1: item = res_dist[0] if item['used'] == 0: return 0, i, amount, item['ppid'], item['batchno'] else: return 1, i, amount, item['ppid'], item['batchno'] else: return False def sum_to_amount(self, sum, i, ppid): """把二维码次数转位数量 :parameter sum:二维码的数量 i:第几级二维码 ppid: 对应的批生产记录 :return amount: 转换后的数量 首先要获取ppid对应记录的扫码比例 如果是0则 则amount=sum,否则amount=sum*没有扫码的级别数量 """ key_dict_pp = {'autoid': ppid} res = self.PC.get_producingplan(False, *VALUES_TUPLE_PP, **key_dict_pp) if not len(res): return 1 qrtype = res[0]['qrtype'] amount_list = (res[0]['bpamount'], res[0]['mpamount'], res[0]['spamount']) if qrtype == 1: return sum for key, value in enumerate('{:04b}'.format(qrtype)[::-1]): if value == '1': break elif value == '0': sum *= amount_list[2 - key] return sum def add_ppopqrocde(self, flag, qrcode, detail): with transaction.atomic(): p1 = transaction.savepoint() WarehouseModel.update_ppopqrcode(**detail) key_dict = {globals()['QRCODE_KIND'][flag]: qrcode} values = {'used': 1} self.WC.update_prodqrcode(key_dict, **values) def drop_ppopqrocde(self, flag, qrcode, autoid=None, **kwargs): with transaction.atomic(): p1 = transaction.savepoint() WarehouseModel.delete_ppopqrcode(autoid, **kwargs) key_dict = {globals()['QRCODE_KIND'][flag]: qrcode} values = {'used': 0} self.WC.update_prodqrcode(key_dict, **values) def apply_productputoutpaper(self, autoid, snid=None, *args, **kwargs): with transaction.atomic(): p1 = transaction.savepoint() WarehouseModel.update_productputoutpaper(autoid, *args, **kwargs) if snid is not None: key_dict_sn = { 'status': 3, 'deliverid': user.user_id, 'delivername': user.user_name } self.SLC.update_salenotes(snid, **key_dict_sn) key_dict = {'ppopid': autoid} qrcode_list = WarehouseModel.get_ppopqrcode( False, *VALUES_TUPLE_PPOPRCODE, **key_dict).order_by('ppid') no_enough_list = [] # 大中小包装得数量 for item in qrcode_list: kind = item['kind'] amount = item['amount'] ppid = item['ppid'] if kind == 0: key_dict_rep = {'pisource': 0, 'ppid': ppid} rep_list = WarehouseModel.get_productrepository( **key_dict_rep) for rep_item in rep_list: if rep_item.stockamount - amount >= 0: rep_item.stockamount -= amount amount = 0 rep_item.save() break else: amount -= rep_item.stockamount rep_item.stockamount = 0 rep_item.save() if amount > 0: no_enough_list.append((0, ppid)) elif kind == 1: key_dict_rep = {'pisource': 1, 'ppid': ppid} # 优先比较零头的数量 rep_list = WarehouseModel.get_productrepository( **key_dict_rep) for rep_item in rep_list: if rep_item.stockamount - amount >= 0: rep_item.stockamount -= amount amount = 0 rep_item.save() break else: amount -= rep_item.stockamount rep_item.stockamount = 0 rep_item.save() if amount > 0: key_dict_rep = {'pisource': 2, 'hxid': ppid} # 优先比较零头的数量 rep_list = WarehouseModel.get_productrepository( **key_dict_rep) for rep_item in rep_list: # 剩余数量和合箱剩余数量都是足够 if rep_item.stockamount - amount >= 0 and \ rep_item.hxstockamount - amount >= 0: rep_item.stockamount -= amount rep_item.hxstockamount -= amount amount = 0 rep_item.save() break else: amount -= rep_item.hxstockamount rep_item.hxstockamount = 0 rep_item.save() if amount > 0: no_enough_list.append((1, ppid)) elif kind == 2: key_dict_rep = {'pisource': 2, 'ppid': ppid} rep_list = WarehouseModel.get_productrepository( **key_dict_rep) for rep_item in rep_list: # 剩余总数-合箱数量=本批的数量 if rep_item.stockamount - rep_item.hxstockamount - \ amount >= 0: rep_item.stockamount -= amount amount = 0 rep_item.save() break else: amount -= (rep_item.stockamount - \ rep_item.hxstockamount) rep_item.stockamount = rep_item.hxstockamount rep_item.save() if amount > 0: no_enough_list.append((2, ppid)) if len(no_enough_list): transaction.savepoint_rollback(p1) return "no enough", no_enough_list else: return 'OK' def stuffreturn(self, autoid=0, backamount_list=[], *args, **kwargs): key_dict = {'autoid': 0} with transaction.atomic(): p1 = transaction.savepoint() self.SC.update_stuffdrawpaper(autoid, *args, **kwargs) for item in backamount_list: id = item[0] backamount = item[1] key_dict['autoid'] = id sr_list = WarehouseModel.get_stuffrepository(False, **key_dict) if not len(sr_list): continue sr_item = sr_list[0] sr_item.amount += backamount sr_item.save() def get_data(self, table_num: int, display_flag=False, *args, **kwargs): table_str = TABLE_SET[table_num][0] err_msg = "查询" + TABLE_SET[table_num][1] return WarehouseModel.get_data(table_str, err_msg, display_flag, *args, **kwargs) def update_data(self, table_num: int, condition={}, *args, **kwargs): table_str = TABLE_SET[table_num][0] err_msg = "更新" + TABLE_SET[table_num][1] return WarehouseModel.update_data(table_str, err_msg, condition, *args, **kwargs) def delete_data(self, table_num: int, condition={}, *args, **kwargs): table_str = TABLE_SET[table_num][0] err_msg = "删除" + TABLE_SET[table_num][1] return WarehouseModel.delete_data(table_str, err_msg, condition, *args, **kwargs)
class SaleOrderListModule(QWidget, Ui_Form): def __init__(self, parent=None): super(SaleOrderListModule, self).__init__(parent) self.setupUi(self) if '53' not in user.powers: self.close() if user.powers['53'] == 0: self.close() self.power = '{:03b}'.format(user.powers['53']) self.SC = SaleController() self.WC = WarehouseController() self.WSC = WorkshopController() self.groupBox.setVisible(False) self.snid = 0 self.get_order_list() def get_order_list(self): self.treeWidget_orderlist.clear() self.treeWidget_orderlist.hideColumn(0) index = self.tabWidget.currentIndex() key_dict = {'status': index} order_list = self.SC.get_salenotes(False, *VALUES_TUPLE_ORDER, **key_dict) if not len(order_list): return for item in order_list: qtreeitem = QTreeWidgetItem(self.treeWidget_orderlist) qtreeitem.setText(0, str(item['autoid'])) qtreeitem.setText(1, item['paperno']) qtreeitem.setText(2, item['clientid'] + ' ' + item['clientname']) qtreeitem.setText(3, item['linkman']) qtreeitem.setText(4, item['telno']) qtreeitem.setText(5, str(item['saledate'])) qtreeitem.setText(6, str(item['deliverydate'])) qtreeitem.setText(7, item['deliveryplace']) qtreeitem.setText(8, item['salerid'] + ' ' + item['salername']) qtreeitem.setText(9, item['conveyance']) qtreeitem.setText(10, item['paymethod']) qtreeitem.setText( 11, item['consignmentid'] + ' ' + item['consignmentname']) qtreeitem.setText(12, item['deliverid'] + ' ' + item['delivername']) qtreeitem.setText(13, item['remark']) for i in range(1, 14): self.treeWidget_orderlist.resizeColumnToContents(i) def get_product_list(self): self.treeWidget_prodlist.clear() self.treeWidget_prodlist.hideColumn(0) key_dict = {'snid': self.snid} prod_list = self.SC.get_salenotegoods(False, *VALUES_TUPLE_PROD, **key_dict) if not len(prod_list): return for item in prod_list: qtreeitem = QTreeWidgetItem(self.treeWidget_prodlist) qtreeitem.setText(0, str(item['autoid'])) qtreeitem.setText(1, item['prodid'] + ' ' + item['prodname']) qtreeitem.setText(2, item['spec']) qtreeitem.setText(3, item['package']) qtreeitem.setText(4, to_str(item['saleamount'])) qtreeitem.setText(5, item['spunit']) prodid = item['prodid'] key_dict_rep = {'prodid': prodid, 'stockamount__gt': 0} product_rep_list = self.WC.get_productrepository( False, *VALUES_TUPLE_REP, **key_dict_rep).annotate(amount=Sum('stockamount')) if len(product_rep_list): qtreeitem.setText(6, to_str(product_rep_list[0]['amount'])) else: qtreeitem.setText(6, '0') for i in range(1, 7): self.treeWidget_prodlist.resizeColumnToContents(i) @pyqtSlot(int) def on_tabWidget_currentChanged(self, p_int): tab = getattr(self, 'tab_' + str(p_int)) tab.setLayout(self.gridLayout_2) self.groupBox.setVisible(False) self.get_order_list() @pyqtSlot(QTreeWidgetItem, int) def on_treeWidget_orderlist_itemClicked(self, qtreeitem, p_int): self.groupBox.setVisible(True) self.snid = int(qtreeitem.text(0)) self.get_product_list() @pyqtSlot(QPoint) def on_treeWidget_orderlist_customContextMenuRequested(self, pos): if self.power[1] == '0': return id = 0 index = self.tabWidget.currentIndex() # 返回调用者的对象 sender_widget = self.sender() current_item = sender_widget.currentItem() if current_item is not None: id = int(current_item.text(0)) menu = QMenu() if index == 0: button1 = menu.addAction("新增销售单") button2 = menu.addAction("修改销售单") button3 = menu.addAction("删除销售单") button4 = menu.addAction("提交审核") elif index == 1: button5 = menu.addAction("审核签名") button6 = menu.addAction("取消提交") elif index == 2: button7 = menu.addAction("取消发货") global_pos = sender_widget.mapToGlobal(pos) action = menu.exec(global_pos) if index == 0: if action == button1: detail = EditSaleOrderMudule(parent=self) detail.accepted.connect(self.get_order_list) detail.show() elif action == button2: if id is None: return detail = EditSaleOrderMudule(id, self) detail.accepted.connect(self.get_order_list) detail.show() elif action == button3: if id is None: return key_dict_output = {'snid': id} res = self.WC.get_productputoutpaper(True, *VALUES_TUPLE_OUTPUT, **key_dict_output) if len(res): key_dict_qrcode = {'ppopid': res[0]} qrcodelist = self.WC.get_ppopqrcode( True, *VALUES_TUPLE_OUTPUTDATE, **key_dict_qrcode) if len(qrcodelist): msg = MessageBox(self, text="已有出库记录,无法取消发货!") msg.show() key_dict = {'snid': id} self.SC.delete_salenotes(id) self.SC.delete_salenotegoods(**key_dict) self.WC.delete_productputoutpaper(**key_dict) self.get_order_list() elif action == button4: if id is None: return key_dict = {'status': 1} self.SC.update_salenotes(id, **key_dict) self.get_order_list() elif index == 1: if action == button5: if id is None: return key_dict = { 'consignmentid': user.user_id, 'consignmentname': user.user_name, 'status': 2 } self.SC.update_salenotes(id, **key_dict) key_dict_output = {'snid': id} res = self.WC.get_productputoutpaper(False, *VALUES_TUPLE_OUTPUT, **key_dict_output) if not len(res): output_detail = { 'snid': id, 'snpaperno': current_item.text(1), 'pokind': "销售出库", 'clientid': current_item.text(2).split(' ')[0], 'clientname': current_item.text(2).split(' ')[1], 'remark': current_item.text(13) } res = self.WC.update_productputoutpaper(**output_detail) self.get_order_list() elif action == button6: if id is None: return key_dict = { 'consignmentid': '', 'consignmentname': '', 'status': 0 } self.SC.update_salenotes(id, **key_dict) self.get_order_list() elif index == 2: if action == button7: if id is None: return key_dict = { 'consignmentid': '', 'consignmentname': '', 'status': 1 } self.SC.update_salenotes(id, **key_dict) self.get_order_list() @pyqtSlot(QPoint) def on_treeWidget_prodlist_customContextMenuRequested(self, pos): if self.power[1] == '0': return id = 0 index = self.tabWidget.currentIndex() if index != 0: return # 返回调用者的对象 sender_widget = self.sender() current_item = sender_widget.currentItem() if current_item is not None: id = int(current_item.text(0)) menu = QMenu() button1 = menu.addAction("增加") button2 = menu.addAction("修改") button3 = menu.addAction("删除") global_pos = sender_widget.mapToGlobal(pos) action = menu.exec(global_pos) if action == button1: detail = EditSaleProdMudule(snid=self.snid, parent=self) detail.accepted.connect(self.get_product_list) detail.show() elif action == button2: if not id: return detail = EditSaleProdMudule(autoid=id, parent=self) detail.accepted.connect(self.get_product_list) detail.show() elif action == button3: if not id: return key_dict_prod = {'autoid': id} lab_list = self.SC.delete_salenotegoods(**key_dict_prod) self.get_product_list() @pyqtSlot(QTreeWidgetItem, int) def on_treeWidget_orderlist_itemDoubleClicked(self, qtreeitem, p_int): index = self.tabWidget.currentIndex() if index != 0: return id = int(qtreeitem.text(0)) detail = EditSaleOrderMudule(autoid=id, parent=self) detail.accepted.connect(self.get_order_list) detail.show() @pyqtSlot(QTreeWidgetItem, int) def on_treeWidget_prodlist_itemDoubleClicked(self, qtreeitem, p_int): index = self.tabWidget.currentIndex() if index != 0: return id = int(qtreeitem.text(0)) detail = EditSaleProdMudule(autoid=id, parent=self) detail.accepted.connect(self.get_product_list) detail.show()
class EditClientDetailModule(QDialog, Ui_Dialog): def __init__(self, autoid=None, parent=None): super(EditClientDetailModule, self).__init__(parent) self.setupUi(self) if '54' not in user.powers: self.close() if user.powers['54'] == 0: self.close() self.power = '{:03b}'.format(user.powers['54']) if self.power[1] == '0': self.pushButton_accept.setVisible(False) self.pushButton_cancel.setVisible(False) self.autoid = autoid self.ori_detail = dict() self.new_detail = dict() self.current_img = object self.current_page = object self.province_list = [] self.city_list = [] self.county_list = [] self.province_id = '' self.city_id = '' self.county_id = '' self.qyname = '' self.SC = SaleController() self.IC = ImageController() self.treeWidget_imagenamelist.hideColumn(0) self.treeWidget_imagenamelist.hideColumn(1) # 自动缩放 self.label_image.setScaledContents(True) return_row = ('parentid', 'autoid', 'kindname') condition_key = {'autoid', 'kindname', 'inputcode'} treeheader_name = ['parentid', '编号', '名称'] condition = {'kind': 4} self.lineEdit_tstkind.setup('Treestructure', return_row, condition_key, treeheader_name, condition, treewidth=300) self.get_detail() self.get_province() if len(self.ori_detail): self.get_city(self.ori_detail['province']) self.get_county(self.ori_detail['city']) def get_detail(self): if self.autoid is None: return key_dict = {'autoid': self.autoid} res = self.SC.get_data(0, False, *VALUE_TUPLE_SUP, **key_dict) if not len(res): return self.ori_detail = res[0] self.lineEdit_clientid.setText(self.ori_detail['clientid']) self.lineEdit_clientname.setText(self.ori_detail['clientname']) self.lineEdit_inputcode.setText(self.ori_detail['inputcode']) self.lineEdit_tstkind.setText( str(self.ori_detail['tstkind']) + ' ' + self.ori_detail['tstname']) self.lineEdit_address.setText(self.ori_detail['address']) self.lineEdit_postzip.setText(self.ori_detail['postzip']) self.lineEdit_charger.setText(self.ori_detail['charger']) self.lineEdit_telno.setText(self.ori_detail['telno']) self.lineEdit_chargertitle.setText(self.ori_detail['chargertitle']) self.lineEdit_email.setText(self.ori_detail['email']) self.lineEdit_bankname.setText(self.ori_detail['bankname']) self.lineEdit_bankaccount.setText(self.ori_detail['bankaccount']) self.lineEdit_taxno.setText(self.ori_detail['taxno']) self.plainTextEdit_remark.setPlainText(self.ori_detail['remark']) self.comboBox_kind.setCurrentIndex(self.ori_detail['kind']) self.lineEdit_unitcode.setText(self.ori_detail['unitcode']) def get_province(self): condition = {'itemtype': 1} self.province_list = self.SC.get_data(5, False, *VALUE_TUPLE_RI, **condition) self.comboBox_province.addItems( self.province_list.values_list('itemname', flat=True)) if not len(self.ori_detail) or self.ori_detail['province'] == '': return self.comboBox_province.setCurrentText(self.ori_detail['province']) def get_city(self, province_name=''): self.comboBox_city.clear() condition = {'itemtype': 1, 'itemname': province_name} res = self.SC.get_data(5, True, *VALUE_TUPLE_II, **condition) if not len(res): return condition_city = {'itemtype': 2, 'parentitemid': res[0]} self.city_list = self.SC.get_data(5, False, *VALUE_TUPLE_RI, **condition_city) self.comboBox_city.addItems( self.city_list.values_list('itemname', flat=True)) if not len(self.ori_detail) or self.ori_detail['city'] == '': return if self.comboBox_city.findText(self.ori_detail['city'], Qt.MatchExactly): self.comboBox_city.setCurrentText(self.ori_detail['city']) def get_county(self, county_name=''): self.comboBox_county.clear() condition = {'itemtype': 2, 'itemname': county_name} res = self.SC.get_data(5, True, *VALUE_TUPLE_II, **condition) if not len(res): return condition_city = {'itemtype': 3, 'parentitemid': res[0]} self.county_list = self.SC.get_data(5, False, *VALUE_TUPLE_RI, **condition_city) self.comboBox_county.addItems( self.county_list.values_list('itemname', flat=True)) if not len(self.ori_detail) or self.ori_detail['county'] == '': return if self.comboBox_county.findText(self.ori_detail['county'], Qt.MatchExactly): self.comboBox_county.setCurrentText(self.ori_detail['county']) def get_image(self): self.treeWidget_imagenamelist.clear() if self.autoid is None: return key_dict = {'scid': self.autoid, 'kind': 0} res = self.IC.get_data(0, False, *VALUE_TUPLE_IMRELA, **key_dict) for item in res: qtreeitem = QTreeWidgetItem(self.treeWidget_imagenamelist) qtreeitem.setText(0, str(item['autoid'])) qtreeitem.setText(1, str(item['imageid'])) qtreeitem.setText(2, item['title']) qtreeitem.setText(3, item['creatorid'] + item['creatorname']) qtreeitem.setText(4, str(item['createdate'])) @pyqtSlot(QTreeWidgetItem, int) def on_treeWidget_imagenamelist_itemDoubleClicked(self, qtreeitem, p_int): img_id = int(qtreeitem.text(1)) key_dict = {'autoid': img_id} res = self.IC.get_data(1, False, *VALUE_TUPLE_IM, **key_dict) if not len(res): return ext = res[0]['ext'] image = res[0]['img'] if ext.lower() == 'pdf': self.comboBox_jumpto.setVisible(True) self.pushButton_prepage.setVisible(True) self.pushButton_nextpage.setVisible(True) self.current_img = fitz.Document(stream=image, filetype='pdf') page_count = self.current_img.pageCount page_list = [] self.comboBox_jumpto.clear() for i in range(1, page_count + 1): page_list.append('第' + str(i) + '页') self.comboBox_jumpto.addItems(page_list) self.current_page = self.current_img.loadPage(0) else: self.comboBox_jumpto.setVisible(False) self.pushButton_prepage.setVisible(False) self.pushButton_nextpage.setVisible(False) img = QImage.fromData(image) self.current_img = QPixmap.fromImage(img) self.label_image.setPixmap(self.current_img) # 默认放大为3被,同时自动调用on_horizontalSlider_zoom_valueChanged self.horizontalSlider_zoom.setValue(30) @pyqtSlot(int) def on_horizontalSlider_zoom_valueChanged(self, p_int): try: self.label_zoom.setText(str(p_int * 10) + '%') # 把当前页面转为QPixmap,并缩放为p_int/10 cover = render_pdf_page(self.current_page, p_int / 10, p_int / 10) self.label_image.setPixmap(cover) except (ValueError, AttributeError): size = self.current_img.size() new_pixmap = self.current_img.scaled(size.width() * p_int / 10, size.height() * p_int / 10) self.label_image.setPixmap(new_pixmap) @pyqtSlot(int) def on_comboBox_jumpto_currentIndexChanged(self, p_int): try: self.current_page = self.current_img.loadPage(p_int) self.on_horizontalSlider_zoom_valueChanged( self.horizontalSlider_zoom.value()) except (AttributeError, ValueError): pass @pyqtSlot() def on_pushButton_prepage_clicked(self): index = self.comboBox_jumpto.currentIndex() if index - 1 >= 0: try: self.current_page = self.current_img.loadPage(index - 1) self.comboBox_jumpto.setCurrentIndex(index - 1) except (AttributeError, ValueError): pass @pyqtSlot() def on_pushButton_nextpage_clicked(self): index = self.comboBox_jumpto.currentIndex() if index + 1 < self.comboBox_jumpto.count(): try: self.current_page = self.current_img.loadPage(index + 1) self.comboBox_jumpto.setCurrentIndex(index + 1) except (AttributeError, ValueError): pass @pyqtSlot(QPoint) def on_treeWidget_imagenamelist_customContextMenuRequested(self, pos): if self.power[1] == '0': return # 返回调用者的对象 sender_widget = self.sender() menu = QMenu() button1 = menu.addAction("新增图片") button2 = menu.addAction("修改图片") button3 = menu.addAction("删除图片") global_pos = sender_widget.mapToGlobal(pos) action = menu.exec(global_pos) res = "rollback" # 增加 if action == button1: img_names, img_type = QFileDialog.getOpenFileNames( self, "打开图片", os.path.expanduser("~") + "\Desktop", "*.jpg;;*.png;;*.bmp;;*.gif;;*.pdf;;All Files(*)") for item in img_names: imagename_no_ext = item.split("/")[-1] image_ext = item.split(".")[1] if image_ext.lower() not in ("jpg", "png", "bmp", "gif", "pdf"): continue fp = open(item, 'rb') with fp: image_byte = fp.read() fp.close() imagedetail = {'img': image_byte, 'ext': image_ext} reladetail = { 'kind': 1, 'scid': self.autoid, 'title': imagename_no_ext, 'creatorid': user.user_id, 'creatorname': user.user_name, 'createdate': user.now_date } res = self.IC.update_images(reladetail, imagedetail) # 修改 elif action == button2: rela_id = self.treeWidget_imagenamelist.currentItem().text(0) img_id = self.treeWidget_imagenamelist.currentItem().text(1) img_name, img_type = QFileDialog.getOpenFileName( self, "打开图片", os.path.expanduser("~") + "\Desktop", "*.jpg;;*.png;;*.bmp;;*.gif;;*.pdf;;All Files(*)") imagename_no_ext = img_name.split("/")[-1] image_ext = img_name.split(".")[1] if image_ext.lower() in ("jpg", "png", "bmp", "gif", "pdf"): fp = open(img_name, 'rb') with fp: image_byte = fp.read() fp.close() imagedetail = {'img': image_byte, 'ext': image_ext} reladetail = { 'title': imagename_no_ext, 'creatorid': user.user_id, 'creatorname': user.user_name, 'createdate': user.now_date } res = self.IC.update_images(reladetail, imagedetail, rela_id, img_id) # 删除 elif action == button3: select_item = sender_widget.selectedItems() rela_id = [] img_id = [] for item in select_item: rela_id.append(item.text(0)) img_id.append(item.text(1)) res = self.IC.delete_images(rela_id, img_id) if res == "accept": self.get_image() @pyqtSlot(str) def on_lineEdit_clientid_textChanged(self, p_str): try: if p_str != self.ori_detail['clientid']: self.new_detail['clientid'] = p_str else: try: del self.new_detail['clientid'] except KeyError: pass except KeyError: self.new_detail['clientid'] = p_str @pyqtSlot(bool, str) def on_pushButton_warrantor_signChanged(self, p_bool, p_str): id, name = p_str.split(' ') if p_bool else ('', '') try: if id != self.ori_detail['warrantorid'] or name != \ self.ori_detail[ 'warrantorname']: self.new_detail['warrantorid'] = id self.new_detail['warrantorname'] = name else: try: del self.new_detail['warrantorid'] del self.new_detail['warrantorname'] except KeyError: pass except KeyError: self.new_detail['warrantorid'] = id self.new_detail['warrantorname'] = name @pyqtSlot(str) def on_lineEdit_clientname_textChanged(self, p_str): self.qyname = p_str self.lineEdit_inputcode.setText(Inputcode.make_inputcode(p_str)) try: if p_str != self.ori_detail['clientname']: self.new_detail['clientname'] = p_str else: try: del self.new_detail['clientname'] except KeyError: pass except KeyError: self.new_detail['clientname'] = p_str @pyqtSlot(int) def on_comboBox_kind_currentIndexChanged(self, p_int): try: if p_int != self.ori_detail['kind']: self.new_detail['kind'] = p_int else: try: del self.new_detail['kind'] except KeyError: pass except KeyError: self.new_detail['kind'] = p_int @pyqtSlot(str) def on_comboBox_province_currentTextChanged(self, p_str): for item in self.province_list: if item['itemname'] == p_str: self.province_id = item['itemid'] break try: if p_str != self.ori_detail['province']: self.get_city(p_str) self.new_detail['province'] = p_str else: try: del self.new_detail['province'] except KeyError: pass except KeyError: self.new_detail['province'] = p_str @pyqtSlot(str) def on_comboBox_city_currentTextChanged(self, p_str): for item in self.city_list: if item['itemname'] == p_str: self.city_id = item['itemid'] break try: if p_str != self.ori_detail['city']: self.new_detail['city'] = p_str self.get_county(p_str) else: try: del self.new_detail['city'] except KeyError: pass except KeyError: self.new_detail['city'] = p_str @pyqtSlot(str) def on_comboBox_county_currentTextChanged(self, p_str): for item in self.county_list: if item['itemname'] == p_str: self.county_id = item['itemid'] break try: if p_str != self.ori_detail['county']: self.new_detail['county'] = p_str else: try: del self.new_detail['county'] except KeyError: pass except KeyError: self.new_detail['county'] = p_str @pyqtSlot(str) def on_lineEdit_unitcode_textChanged(self, p_str): try: if p_str != self.ori_detail['unitcode']: self.new_detail['unitcode'] = p_str else: try: del self.new_detail['unitcode'] except KeyError: pass except KeyError: self.new_detail['unitcode'] = p_str @pyqtSlot(str) def on_lineEdit_tstkind_textChanged(self, p_str): if len(p_str.split(' ')) != 2 and p_str != '': return id, name = p_str.split(' ') if p_str != '' else ('', '') try: if id != self.ori_detail['tstkind'] or name != \ self.ori_detail['tstname']: self.new_detail['tstkind'] = id self.new_detail['tstname'] = name else: try: del self.new_detail['tstkind'] del self.new_detail['tstname'] except KeyError: pass except KeyError: self.new_detail['tstkind'] = id self.new_detail['tstname'] = name @pyqtSlot(str) def on_lineEdit_inputcode_textChanged(self, p_str): try: if p_str != self.ori_detail['inputcode']: self.new_detail['inputcode'] = p_str else: try: del self.new_detail['inputcode'] except KeyError: pass except KeyError: self.new_detail['inputcode'] = p_str @pyqtSlot(str) def on_lineEdit_address_textChanged(self, p_str): try: if p_str != self.ori_detail['address']: self.new_detail['address'] = p_str else: try: del self.new_detail['address'] except KeyError: pass except KeyError: self.new_detail['address'] = p_str @pyqtSlot(str) def on_lineEdit_postzip_textChanged(self, p_str): try: if p_str != self.ori_detail['postzip']: self.new_detail['postzip'] = p_str else: try: del self.new_detail['postzip'] except KeyError: pass except KeyError: self.new_detail['postzip'] = p_str @pyqtSlot(str) def on_lineEdit_charger_textChanged(self, p_str): try: if p_str != self.ori_detail['charger']: self.new_detail['charger'] = p_str else: try: del self.new_detail['charger'] except KeyError: pass except KeyError: self.new_detail['charger'] = p_str @pyqtSlot(str) def on_lineEdit_telno_textChanged(self, p_str): try: if p_str != self.ori_detail['telno']: self.new_detail['telno'] = p_str else: try: del self.new_detail['telno'] except KeyError: pass except KeyError: self.new_detail['telno'] = p_str @pyqtSlot(str) def on_lineEdit_chargertitle_textChanged(self, p_str): try: if p_str != self.ori_detail['chargertitle']: self.new_detail['chargertitle'] = p_str else: try: del self.new_detail['chargertitle'] except KeyError: pass except KeyError: self.new_detail['chargertitle'] = p_str @pyqtSlot(str) def on_lineEdit_email_textChanged(self, p_str): try: if p_str != self.ori_detail['email']: self.new_detail['email'] = p_str else: try: del self.new_detail['email'] except KeyError: pass except KeyError: self.new_detail['email'] = p_str @pyqtSlot(str) def on_lineEdit_bankname_textChanged(self, p_str): try: if p_str != self.ori_detail['bankname']: self.new_detail['bankname'] = p_str else: try: del self.new_detail['bankname'] except KeyError: pass except KeyError: self.new_detail['bankname'] = p_str @pyqtSlot(str) def on_lineEdit_bankaccount_textChanged(self, p_str): try: if p_str != self.ori_detail['bankaccount']: self.new_detail['bankaccount'] = p_str else: try: del self.new_detail['bankaccount'] except KeyError: pass except KeyError: self.new_detail['bankaccount'] = p_str @pyqtSlot(str) def on_lineEdit_taxno_textChanged(self, p_str): try: if p_str != self.ori_detail['taxno']: self.new_detail['taxno'] = p_str else: try: del self.new_detail['taxno'] except KeyError: pass except KeyError: self.new_detail['taxno'] = p_str @pyqtSlot() def on_plainTextEdit_remark_textChanged(self): p_str = self.plainTextEdit_remark.toPlainText() try: if p_str != self.ori_detail['remark']: self.new_detail['remark'] = p_str else: try: del self.new_detail['remark'] except KeyError: pass except KeyError: self.new_detail['remark'] = p_str @pyqtSlot() def on_pushButton_get_unitcode_clicked(self): detail = SelectClientCodeModule(self.province_id, self.city_id, self.county_id, self.qyname, self) detail.selected.connect(self.set_clientname_and_unitcode) detail.show() def set_clientname_and_unitcode(self, p_str_1, p_str_2): self.lineEdit_clientname.setText(p_str_1) self.lineEdit_unitcode.setText(p_str_2) @pyqtSlot() def on_pushButton_accept_clicked(self): if not len(self.new_detail): return condition = dict() if self.autoid is not None: condition['autoid'] = self.autoid self.SC.update_data(0, condition, **self.new_detail) self.accept() @pyqtSlot() def on_pushButton_cancel_clicked(self): self.close() @pyqtSlot(int) def on_tabWidget_currentChanged(self, p_int): if p_int == 0: self.get_detail() elif p_int == 1: self.get_image() else: pass
class ProductPutOutPaperListModule(QWidget, Ui_Form): def __init__(self, parent=None): super(ProductPutOutPaperListModule, self).__init__(parent) self.setupUi(self) if '35' not in user.powers: self.close() if user.powers['35'] == 0: self.close() self.power = '{:03b}'.format(user.powers['35']) self.SC = SaleController() self.WC = WarehouseController() self.WSC = WorkshopController() self.groupBox.setVisible(False) self.ppopid = 0 self.prod_list = {} self.get_order_list() def get_order_list(self): self.treeWidget_orderlist.clear() # self.treeWidget_orderlist.hideColumn(0) # self.treeWidget_orderlist.hideColumn(1) index = self.tabWidget.currentIndex() key_dict = {'status': index} order_list = self.WC.get_productputoutpaper(False, *VALUES_TUPLE_ORDER, **key_dict) if not len(order_list): return for item in order_list: qtreeitem = QTreeWidgetItem(self.treeWidget_orderlist) qtreeitem.setText(0, str(item['autoid'])) qtreeitem.setText(1, str(item['snid'])) qtreeitem.setText(2, item['snpaperno']) qtreeitem.setText(3, item['pokind']) qtreeitem.setText( 4, str(item['putoutdate']) if type(item['putoutdate']) is datetime.date else '') qtreeitem.setText(5, item['clientid'] + ' ' + item['clientname']) qtreeitem.setText(6, item['auditorid'] + ' ' + item['auditorname']) qtreeitem.setText(7, str(item['remark'])) for i in range(2, 8): self.treeWidget_orderlist.resizeColumnToContents(i) def get_qrcode_list(self): self.treeWidget_itemlist.clear() self.treeWidget_itemlist.hideColumn(0) key_dict = {'ppopid': self.ppopid} self.prod_list = self.WC.get_ppopqrcode(False, **key_dict).extra( select={ 'prodid': 'prodid', 'prodname': 'prodname', 'spec': 'spec', 'package': 'package', 'lpunit': 'lpunit', 'bpunit': 'bpunit', 'mpunit': 'mpunit', 'spunit': 'spunit' }, tables=['producingplan'], where=['ppid=producingplan.autoid']).values(*VALUES_TUPLE_PROD) if not len(self.prod_list): return for item in self.prod_list: package_unit = [ item['spunit'], item['mpunit'], item['bpunit'], item['lpunit'] ] qtreeitem = QTreeWidgetItem(self.treeWidget_itemlist) qtreeitem.setText(0, str(item['autoid'])) qtreeitem.setText(1, KIND[item['kind']]) qtreeitem.setText(2, item['prodid'] + ' ' + item['prodname']) qtreeitem.setText(3, item['batchno']) qtreeitem.setText(4, str(item['amount']) + item['spunit']) qtreeitem.setText(5, item['spec']) qtreeitem.setText(6, item['package']) qtreeitem.setText(7, item['qr0']) qtreeitem.setText(8, package_unit[item['flag']] + '码') for i in range(1, 9): self.treeWidget_itemlist.resizeColumnToContents(i) @pyqtSlot(int) def on_tabWidget_currentChanged(self, p_int): tab = getattr(self, 'tab_' + str(p_int)) tab.setLayout(self.gridLayout_2) self.groupBox.setVisible(False) self.get_order_list() @pyqtSlot(QTreeWidgetItem, int) def on_treeWidget_orderlist_itemClicked(self, qtreeitem, p_int): self.groupBox.setVisible(True) self.ppopid = int(qtreeitem.text(0)) self.get_qrcode_list() @pyqtSlot(QPoint) def on_treeWidget_orderlist_customContextMenuRequested(self, pos): if self.power[1] == '0': return id = 0 snid = 0 index = self.tabWidget.currentIndex() if index != 0: return # 返回调用者的对象 sender_widget = self.sender() current_item = sender_widget.currentItem() if current_item is not None: id = int(current_item.text(0)) snid = int(current_item.text(1)) menu = QMenu() button1 = menu.addAction("新增出库单") button2 = menu.addAction("修改出库单") button3 = menu.addAction("删除出库单") menu.addSeparator() button4 = menu.addAction("提交出库") menu.addSeparator() button5 = menu.addAction("查看销售订单") global_pos = sender_widget.mapToGlobal(pos) action = menu.exec(global_pos) if action == button1: detail = EditProductPutOutPaperModule(parent=self) detail.accepted.connect(self.get_order_list) detail.show() elif action == button2: if id is None: return detail = EditProductPutOutPaperModule(id, self) detail.accepted.connect(self.get_order_list) detail.show() elif action == button3: if id is None: return key_dict_output = {'ppopid': id} res = self.WC.get_ppopqrcode(True, *VALUES_TUPLE_OUTPUT, **key_dict_output) if len(res): msg = MessageBox(self, text="已有出库记录,无法删除出库单!") msg.show() return key_dict = {'autoid': id} self.WC.delete_productputoutpaper(**key_dict) self.get_order_list() elif action == button4: if id is None: return key_dict = { 'status': 1, 'auditorid': user.user_id, 'auditorname': user.user_name, 'putoutdate': user.now_date } res = self.WC.apply_productputoutpaper(id, snid, **key_dict) if res == "OK": if snid != 0: key_dict_salenote = { 'status': 3, 'deliverid': user.user_id, 'delivername': user.user_name } self.SC.update_salenotes(snid, **key_dict_salenote) self.get_order_list() else: REP_KIND = ("整箱", "零头", "合箱") if not len(self.prod_list): self.ppopid = id self.get_qrcode_list() informative = '' prodname = '' batchno = '' for item in res[1]: for it in self.prod_list: if it['ppid'] == item[1]: prodname = it['prodname'] batchno = it['batchno'] kind = REP_KIND[item[0]] informative += prodname + '(' + kind + '),批号:' + batchno + '\n' msg = MessageBox(self, text="以下产品库存不足", informative=informative) msg.exec() return elif action == button5: if snid == 0: msg = MessageBox(self, text="没有找到关联的销售订单") msg.show() return detail = SaleOrderModule(snid, self) detail.show() @pyqtSlot(QPoint) def on_treeWidget_itemlist_customContextMenuRequested(self, pos): if self.power[1] == '0': return id = 0 flag = 0 qrcode = '' index = self.tabWidget.currentIndex() if index != 0: return # 返回调用者的对象 sender_widget = self.sender() current_item = sender_widget.currentItem() if current_item is not None: id = int(current_item.text(0)) flag = KIND.index(current_item.text(1)) qrcode = current_item.text(8) menu = QMenu() button1 = menu.addAction("增加") button2 = menu.addAction("删除") global_pos = sender_widget.mapToGlobal(pos) action = menu.exec(global_pos) if action == button1: detail = ScanPpopQrcodeMudule(self.ppopid, self) detail.qrcodeAdded.connect(self.get_qrcode_list) detail.show() elif action == button2: if not id: return self.WC.drop_ppopqrocde(flag, qrcode, id) self.get_qrcode_list() @pyqtSlot(QTreeWidgetItem, int) def on_treeWidget_orderlist_itemDoubleClicked(self, qtreeitem, p_int): index = self.tabWidget.currentIndex() if index != 0: return id = int(qtreeitem.text(0)) detail = EditProductPutOutPaperModule(autoid=id, parent=self) detail.accepted.connect(self.get_order_list) detail.show()
class EditSaleOrderMudule(QDialog, Ui_Dialog): def __init__(self, autoid=None, parent=None): super(EditSaleOrderMudule, self).__init__(parent) self.setupUi(self) if '53' not in user.powers: self.close() if user.powers['53'] == 0: self.close() self.power = '{:03b}'.format(user.powers['53']) if self.power[1] == '0': self.pushButton_accept.setVisible(False) self.pushButton_cancel.setVisible(False) self.autoid=autoid self.SC = SaleController() self.ori_detail = dict() self.new_detail = dict() row = ('autoid', 'clientid', 'clientname', 'address') key = ('clientid', 'clientname', 'inputcode') row_name = ("id", "客户编号", "客户名称", "客户地址") self.lineEdit_client.setup('Client', row, key, row_name, None, 550, 290) if self.autoid is None: self.set_paperno() self.dateEdit_saledate.setDate(user.now_date) self.dateEdit_deliverydate.setDate(user.now_date) else: self.get_detail() self.set_conveyance_list() self.set_paymethod_list() def get_detail(self): key_dict = {'autoid': self.autoid} detail_list = self.SC.get_salenotes( False, *VALUES_TUPLE_ORDER, **key_dict ) if not len(detail_list): return self.ori_detail = detail_list[0] self.lineEdit_paperno.setText(self.ori_detail['paperno']) self.lineEdit_client.setText( self.ori_detail['clientid'] + ' ' + self.ori_detail['clientname'] ) self.lineEdit_deliveryplace.setText(self.ori_detail['deliveryplace']) self.lineEdit_linkman.setText(self.ori_detail['linkman']) self.lineEdit_telno.setText(self.ori_detail['telno']) self.dateEdit_saledate.setDate(self.ori_detail['saledate']) self.dateEdit_deliverydate.setDate(self.ori_detail['deliverydate']) self.lineEdit_remark.setText(self.ori_detail['remark']) def set_paperno(self): res = self.SC.get_salenotes(True, *VALUES_TUPLE_PAPERNO) if not len(res): return '' max_paperno = res.order_by('-paperno')[0] num = re.findall('\d+', max_paperno)[-1] new_num = str(int(num) + 1) i = len(new_num) while i < len(num): new_num = '0' + new_num i += 1 max_paperno = max_paperno.replace(num, new_num) self.lineEdit_paperno.setText(max_paperno) def set_conveyance_list(self): items = self.SC.get_salenotes(True, *VALUES_TUPLE_CONVEYANCE)\ .distinct() if len(items): self.comboBox_conveyance.addItems(items) if len(self.ori_detail): self.comboBox_conveyance.setCurrentText( self.ori_detail['conveyance'] ) else: self.comboBox_conveyance.setCurrentText('') def set_paymethod_list(self): items = self.SC.get_salenotes(True, *VALUES_TUPLE_PAYMETHOD)\ .distinct() if len(items): self.comboBox_paymethod.addItems(items) if len(self.ori_detail): self.comboBox_paymethod.setCurrentText( self.ori_detail['paymethod'] ) else: self.comboBox_paymethod.setCurrentText('') @pyqtSlot(str) def on_lineEdit_client_textChanged(self, p_str): if len(p_str.split(' ')) != 2 and p_str != '': return id, name = p_str.split(' ') if p_str != '' else ('', '') key_dict = {'clientid': id, 'clientname': name} res = self.SC.get_client(False, *VALUES_TUPLE_CLIENT, **key_dict) if len(res): client_detail = res[0] self.lineEdit_deliveryplace.setText(client_detail['address']) self.lineEdit_linkman.setText(client_detail['linkman']) self.lineEdit_telno.setText(client_detail['telno']) # self.new_detail['deliveryplace'] = client_detail['address'] # self.new_detail['linkman'] = client_detail['linkman'] # self.new_detail['telno'] = client_detail['telno'] self.new_detail['salerid'] = client_detail['salerid'] self.new_detail['salername'] = client_detail['salername'] try: if id != self.ori_detail['clientid'] or name != self.ori_detail[ 'clientname']: self.new_detail['clientid'] = id self.new_detail['clientname'] = name else: try: del self.new_detail['clientid'] del self.new_detail['clientname'] except KeyError: pass except KeyError: self.new_detail['clientid'] = id self.new_detail['clientname'] = name @pyqtSlot(QDate) def on_dateEdit_saledate_dateChanged(self, q_date): try: if type(self.ori_detail['saledate']) is str: self.new_detail['saledate'] = q_date.toPyDate() return if q_date != QDate(self.ori_detail['saledate']): self.new_detail['saledate'] = q_date.toPyDate() else: try: del self.new_detail['saledate'] except KeyError: pass except KeyError: self.new_detail['saledate'] = q_date.toPyDate() @pyqtSlot(QDate) def on_dateEdit_deliverydate_dateChanged(self, q_date): try: if type(self.ori_detail['deliverydate']) is str: self.new_detail['deliverydate'] = q_date.toPyDate() return if q_date != QDate(self.ori_detail['bpdate']): self.new_detail['deliverydate'] = q_date.toPyDate() else: try: del self.new_detail['bpdate'] except KeyError: pass except KeyError: self.new_detail['deliverydate'] = q_date.toPyDate() @pyqtSlot(str) def on_lineEdit_paperno_textChanged(self, p_str): try: if p_str != self.ori_detail['paperno']: self.new_detail['paperno'] = p_str else: try: del self.new_detail['paperno'] except KeyError: pass except KeyError: self.new_detail['paperno'] = p_str @pyqtSlot(str) def on_lineEdit_deliveryplace_textChanged(self, p_str): try: if p_str != self.ori_detail['deliveryplace']: self.new_detail['deliveryplace'] = p_str else: try: del self.new_detail['deliveryplace'] except KeyError: pass except KeyError: self.new_detail['deliveryplace'] = p_str @pyqtSlot(str) def on_lineEdit_linkman_textChanged(self, p_str): try: if p_str != self.ori_detail['linkman']: self.new_detail['linkman'] = p_str else: try: del self.new_detail['linkman'] except KeyError: pass except KeyError: self.new_detail['linkman'] = p_str @pyqtSlot(str) def on_lineEdit_telno_textChanged(self, p_str): try: if p_str != self.ori_detail['telno']: self.new_detail['telno'] = p_str else: try: del self.new_detail['telno'] except KeyError: pass except KeyError: self.new_detail['telno'] = p_str @pyqtSlot(str) def on_comboBox_conveyance_currentTextChanged(self, p_str): try: if p_str != self.ori_detail['conveyance']: self.new_detail['conveyance'] = p_str else: try: del self.new_detail['conveyance'] except KeyError: pass except KeyError: self.new_detail['conveyance'] = p_str @pyqtSlot(str) def on_comboBox_paymethod_currentTextChanged(self, p_str): try: if p_str != self.ori_detail['paymethod']: self.new_detail['paymethod'] = p_str else: try: del self.new_detail['paymethod'] except KeyError: pass except KeyError: self.new_detail['paymethod'] = p_str @pyqtSlot(str) def on_lineEdit_remark_textChanged(self, p_str): try: if p_str != self.ori_detail['remark']: self.new_detail['remark'] = p_str else: try: del self.new_detail['remark'] except KeyError: pass except KeyError: self.new_detail['remark'] = p_str @pyqtSlot() def on_pushButton_accept_clicked(self): if not len(self.new_detail): return if 'paperno' in self.new_detail: key_dict = {'paperno': self.new_detail['paperno']} res = self.SC.get_salenotes(True, *VALUES_TUPLE_PAPERNO, **key_dict) if len(res): msg = MessageBox( self, text="单号重复,请修改后重新提交", informative="已经存在单号为" + self.new_detail['paperno'] + "的记录了!" ) msg.show() self.lineEdit_paperno.setFocus() return self.new_detail['creatorid'] = user.user_id self.new_detail['creatorname'] = user.user_name self.SC.update_salenotes(self.autoid, **self.new_detail) self.accept() @pyqtSlot() def on_pushButton_cancel_clicked(self): self.close()