def _submit(self): stock = Stock() brand = self.brand_comboBox stock.brand_name(brand.currentText()).brand_id(brand.currentData()) model = self.model_combo_box stock.model_name(model.currentText()).model_id(model.currentData()) first_service = self.first_service_combo_box stock.first_service_id(first_service.currentData()).first_service_name( first_service.currentText()) second_service = self.second_service_combo_box stock.second_service_name( second_service.currentText()).second_service_id( second_service.currentData()) name = brand.currentText() + '-' + model.currentText() stock.name(name) stock.unit(self.unit.text()) stock.create_op(common.config.login_user_info[0]) stock.create_time(get_now()) stock_id = stock_handler.add_stock_info(stock) stock.id(stock_id)
def __init__(self): super(BuyInfoMonitor, self).__init__() self.setupUi(self) self.setWindowTitle('进货监控') self.summary_table_title = ('一级项目ID', '二级项目ID', '一级分类', '二级分类', '进货数量', '进货金额') self.detail_table_title = ("ID", '进货日期', '商品品牌', '商品型号', '进货数量', '单位', '进货单价', '单品小计', '供应商ID', '供应商', '所属项目', '付款金额', '未付金额', '进货类型', '库存ID') self.end_date.setDateTime( QDateTime.fromString(time_utils.get_now(), 'yyyy-MM-dd hh:mm:ss')) self.end_date.setDateTime( QDateTime.fromString(time_utils.get_now(), 'yyyy-MM-dd hh:mm:ss')) self.start_time_str = self.start_date.date().toString('yyyy-MM-dd') self.end_time_str = self.end_date.date().toString('yyyy-MM-dd') self._init_signal_and_slot()
def add_supplier_payment_detail(buy_id, supplier_id, paid, unpaid, payment_method, is_return=False, note=''): payment = Payment() payment.buy_id(buy_id) payment.supplier_id(supplier_id) payment.payment_method(payment_method) payment.paid(paid) payment.unpaid(unpaid) payment.create_op(common.config.login_user_info[0]) payment.create_time(time_utils.get_now()) payment.note(note) if is_return: payment.refund_type(Payment.returned()) else: payment.refund_type(Payment.payoff()) payment_handler.add_payment_detail(payment) if unpaid: supplier_handler.update_supplier_unpaid(supplier_id, unpaid)
def show_detail(self, index: QModelIndex): if index.column() != 14: return self.sale_id = table_utils.get_table_cell(self.write_off_table, index.row(), 0) self.stock_id = table_utils.get_table_current_index_info( self.write_off_table, 9) self.brand_id = table_utils.get_table_current_index_info( self.write_off_table, 7) self.model_id = table_utils.get_table_current_index_info( self.write_off_table, 8) self.buy_date.setDateTime( QDateTime.fromString(time_utils.get_now(), 'yyyy-MM-dd hh:mm:ss')) self.brand.setText( table_utils.get_table_current_index_info(self.write_off_table, 2)) self.model.setText( table_utils.get_table_current_index_info(self.write_off_table, 3)) self.sale_number.setText( table_utils.get_table_current_index_info(self.write_off_table, 4)) balance = int( table_utils.get_table_current_index_info(self.write_off_table, 5)) self.buy_number.setValue(abs(balance)) self.unit.setText( table_utils.get_table_current_index_info(self.write_off_table, 6)) self.service.setText( table_utils.get_table_current_index_info(self.write_off_table, 10) + '-' + table_utils.get_table_current_index_info(self.write_off_table, 12)) self.price.setText('0.0') self.total.setText('0.0') self.paid.setText('0.0') self.unpaid.setText('0.0') self.balance = balance
def add_second_level_service(service_name, father_id): time_now = get_now() sql_text = '''INSERT INTO service(name, createdTime, father, level) VALUES('{}','{}',{},{})''' \ .format(service_name, time_now, father_id, 2) return execute(sql_text)
def add_payment_detail(payment: Payment): sql_text = ''' INSERT INTO PAYMENT_DETAIL( BUY_ID, PAYMENT_METHOD, PAID, UNPAID, CREATE_TIME, CREATE_OP, refund_type, supplier_id, note ) VALUES ( {}, {}, {:.2f}, {:.2f}, '{}', {}, {}, {}, '{}' )''' \ .format(payment.buy_id(), payment.payment_method(), payment.paid(), payment.unpaid(), get_now(), common.config.login_user_info[0], payment.refund_type(), payment.supplier_id(), payment.note()) result = execute(sql_text) return result
def add_buy_info(stock_id, supplier_id, price, number, buy_date, unpaid, paid, total, payment, note, left_number, op=None, buy_type=None, state=0): buy_info = BuyInfo() buy_info.buy_date(buy_date) buy_info.stock_id(stock_id) buy_info.supplier_id(supplier_id) buy_info.unit_price(price) buy_info.payment_method(payment) if buy_type == BuyInfo.calibrated(): buy_info.number(number) buy_info.total(total) else: buy_info.number(abs(number)) buy_info.total(abs(total)) create_time = time_utils.get_now() buy_info.create_time(create_time) if not op: create_op = common.config.login_user_info[0] else: create_op = op buy_info.create_op(create_op) buy_info.paid(abs(paid)) buy_info.unpaid(abs(unpaid)) buy_info.note(note) # 判断是进货还是退货 if not buy_type: if number < 0: buy_info.buy_type(BuyInfo.returned()) left_number = 0 else: buy_info.buy_type(BuyInfo.bought()) else: buy_info.buy_type(buy_type) if state: buy_info.state(state) buy_info.left(left_number) return buy_handler.add_buy_info(buy_info)
def add_stock_detail(stock_id: int, changed_id: int, changed_money: float, change_number: int, change_type: int): stock_detail = StockDetail() stock_detail.changed_id(changed_id) stock_detail.changed_money(abs(changed_money)) stock_detail.changed_number(abs(change_number)) stock_detail.stock_id(stock_id) stock_detail.type(change_type) stock_detail.update_time(time_utils.get_now()).update_op(common.config.login_user_info[0]) stock_detail_handler.add_stock_detail(stock_detail)
def add_model(model_name: str, brand_id): sql_text = '''INSERT INTO model( model_name, brand_id, create_time, create_op) VALUES('{}',{},'{}',{})''' \ .format(model_name, brand_id, get_now(), common.config.login_user_info[0]) result = execute(sql_text) return result
def get_return_visit_info(): now = get_now() time_str = "/".join(now.split(' ')[0].split("-")) time_str = format_time(time_str, True) sql_text = '''SELECT id,username,carId,phone,next_visit_time FROM return_visit WHERE state={} AND next_visit_time <= '{}' ORDER BY create_time DESC ''' \ .format(ReturnVisit.unvisited(), time_str) data = execute(sql_text) return data
def check_device(self): device = Device() device.ip(self.spbill_create_ip) device.create_time(time_utils.get_now()) device.name(self.deviceName) data = device_handler.get_device_info_by_ip(self.spbill_create_ip) if not data: common.config.ui.pad_connect_signal.emit(device) check_result = 2 else: check_result = (data[1] == Device.enable()) return check_result
def add_brand(brand_name: str): sql_text = '''INSERT INTO brand( BRAND_NAME, create_time, create_op ) VALUES( '{}', '{}', {} )''' \ .format(brand_name, get_now(), common.config.login_user_info[0]) result = execute(sql_text) return result
def add_stock_info(model, brand, model_id, brand_id, unit, second_service_id): second_service = service_handler.get_service_by_id(second_service_id) stock_info = Stock() stock_info.model_id(model_id).model_name(model) stock_info.brand_id(brand_id).brand_name(brand) stock_info.first_service_id(second_service['father_id']).first_service_name(second_service['father_name']) stock_info.second_service_id(second_service_id).second_service_name(second_service['name']) stock_info.unit(unit) stock_info.name(brand + '-' + model) stock_info.create_op(config.login_user_info[0]).create_time(time_utils.get_now()) stock_id = stock_handler.add_stock_info(stock_info) stock_info.id(stock_id) return stock_info
def _init_first_line(self): self.line_number = 1 self.buy_date_1.setDateTime(QDateTime.fromString(time_utils.get_now(), 'yyyy-MM-dd hh:mm:ss')) self._add_all_service_item(self.first_service_1) self._add_all_service_item(self.second_service_1) view_utils.get_all_payment(self.payment_1) self.payment_1.addItem('点击新增') for title in self.line_title: name = title + '_' + '1' editor = getattr(self, name) view_utils.set_completer(editor, title) view_utils.set_validator(self.price_1, 'float') view_utils.set_validator(self.paid_1, 'float') self.paid_1.setText('0.0') self.price_1.setText('0.0') self.total_1.setText('0.0') self.unpaid_1.setText('0.0')
def _update(self): name = self.service_name.text() if '-' in name: QtWidgets.QMessageBox.information(self.submit, "提示", "名字输入有误,请勿添加\"-\"符号") elif name == "": QtWidgets.QMessageBox.information(self.submit, "提示", "请输入名称") else: try: db_transaction_util.begin() if self.service_id: if self.name != name: service_handler.update_service(self.service_id, name) stock_handler.update_second_service_name( self.service_id, name) else: self.service_id = service_handler.add_second_level_service( name, father_id=self.father_id) for k, v in self.checkbox_dict.items(): if v.checkState() == Qt.Checked: if k not in self.checked_dict: attr_item = ServiceItem() attr_item.service_id(self.service_id).attribute_id( k).attribute_name(v.text()) attr_item.create_time( time_utils.get_now()).create_op( config.login_user_info[0]) service_handler.add_service_attribute(attr_item) else: if k in self.checked_dict: service_handler.delete_service_attribute( self.service_id, k) db_transaction_util.commit() QtWidgets.QMessageBox.information(self.submit, "提示", "提交成功") self.close() except Exception as db_exception: logger.error(db_exception.__str__()) logger.error('traceback.format_exc():\n{}'.format( traceback.format_exc())) db_transaction_util.rollback() QtWidgets.QMessageBox.information(self.submit, "提示", "服务项目更新失败,请重试")
def do_add(self): attr_name, ok = QInputDialog.getText(self.add, '新增属性', '请输入属性名') if attr_name and ok: exists_info = attribute_handler.get_count_by_name(attr_name) if exists_info: if not exists_info[1]: QMessageBox.information(self.add, '提示', '该属性已经存在,请重新输入') return else: attribute_handler.undo_delete_attribute_logical( exists_info[2]) else: attribute = Attribute() attribute.create_op(common.config.login_user_info[0]) attribute.name(attr_name) attribute.create_time(time_utils.get_now()) attribute_handler.add_attribute(attribute) QMessageBox.information(self.add, '提示', '新增成功') self._init_table()
def _clear_first_line(self): line_number = '1' for title in self.line_title: name = title + '_' + line_number editor = getattr(self, name) if title == 'buy_date': editor.setDateTime(QDateTime.fromString(time_utils.get_now(), 'yyyy-MM-dd hh:mm:ss')) continue if title == 'number': editor.setValue(0) continue if title in ('seq', 'remove', 'payment'): continue if title.endswith('service'): editor.clear() self._add_all_service_item(editor) continue editor.clear() view_utils.set_completer(editor, title)
def _add_payment_detail( self, paid: float, unpaid: float, ): payment = Payment() payment.buy_id(self.buy_id) payment_method = int(self.payment_method.currentData()) payment.payment_method(payment_method) payment.paid(paid) payment.unpaid(unpaid) payment.create_op(common.config.login_user_info[0]) payment.create_time(time_utils.get_now()) payment.refund_type(Payment.payoff()) payment_handler.add_payment_detail(payment)
def _clear_detail(self): self.buy_date.setDateTime( QDateTime.fromString(time_utils.get_now(), 'yyyy-MM-dd hh:mm:ss')) self.brand.clear() self.model.clear() self.sale_number.clear() self.buy_number.setValue( abs( int( table_utils.get_table_current_index_info( self.write_off_table, 5)))) self.unit.clear() self.service.clear() self.price.setText('0.0') self.total.setText('0.0') self.paid.setText('0.0') self.unpaid.setText('0.0') self.sale_id = 0 self.stock_id = 0 self.brand_id = 0 self.model_id = 0 self.balance = 0
def create_user(): execute('''CREATE TABLE Admin (id INTEGER PRIMARY KEY AUTOINCREMENT, userName VARCHAR(20) NOT NULL, pwd VARCHAR (32) NOT NULL , createdTime DATETIME NOT NULL );''') execute(''' CREATE UNIQUE INDEX userName ON Admin (userName); ''') # 写入初始管理员账号admin execute("INSERT INTO Admin (userName,pwd,createdTime) " \ "VALUES ('{}','{}','{}')".format('admin', 'e93a9a6047903bd088bd4ffee28fdee8', time_utils.get_now()))
def export_sale_detail(self, start_time, end_time, remote=False): now = get_now() file_name = now + ".xls" # 获取消费信息 sale_detail_list = [] if remote: # 获取远程信息 code = config.get_local_register_code() keyword = "xiaofei {} {} {}".format(code, start_time, end_time) # python3传递的是bytes,所以要编码 try: sale_detail_list = SocketServer(keyword) except Exception as e: logger.error(e.__str__()) logger.error('traceback.format_exc():\n{}'.format( traceback.format_exc())) else: sale_detail_list = self.database_handler.GetXiaoFeiTable( start_time, end_time, Table=False) # 填入数据 if sale_detail_list: # 插入信息 sale_detail_list.sort(key=lambda obj: obj[2], reverse=True) order_check_id = None merge_list = list() temp_msg = dict() temp = list() # 设置表头 title_list = [ "检索ID", '订单号', u'消费时间', "消费门店", u"车牌号", u"车主姓名", u"联系电话", u"车型", u"操作人员", u"消费项目" ] table_len = len(title_list) header = ['数量', '单价', '小计', '总价', '单位', '备注'] for data in sale_detail_list: try: attribute = json.loads(data[10]) for k, v in attribute.items(): if k not in header: header.append(k) except Exception as e: logger.error(e.__str__()) logger.error('traceback.format_exc():\n{}'.format( traceback.format_exc())) continue title_list = title_list + header all_table_len = len(title_list) wb = xlwt.Workbook() ws = wb.add_sheet('消费列表', cell_overwrite_ok=True) title = set_style('Arial', 250, True, True) default = set_style('SimSun', 180, True, True, True) top = set_style('Times New Roman', 350, True, True) # 前两个参数表示需要合并的行范围,后两个参数表示需要合并的列范围 # 合并单元格作为大标题,水平居中即可 start_time = format_time(start_time)[:10] end_time = format_time(end_time)[:10] ws.write_merge(0, 0, 0, all_table_len - 1, '门店系统:{}至{}'.format(start_time, end_time), top) # 设置标题 for i in range(all_table_len): # 设置单元格宽度 ws.col(i).width = 265 * 20 # 插入标题 ws.write(1, i, title_list[i], title) # 从第二行开始插 row = 2 for data in sale_detail_list: if order_check_id: # 如果记录的订单号与当前数据的订单号不同,则进行录入并修改记录订单号 if order_check_id != data[0]: order_check_id = data[0] # 因为订单号变了所以之前的缓存清空,换成这个订单号的索引 temp = [row] else: # 若已经缓存了2个索引则代表此订单号有>2个商品,所以更新第二个索引保留第一个索引 if len(temp) >= 2: temp[1] = row else: temp.append(row) else: # 若第一次进来,此时订单号是None,进行录入 order_check_id = data[0] temp.append(row) # 插入信息 for j in range(table_len): ws.write(row, j, data[j], default) if j == table_len - 1: # 最后一个的时候遍历填入数据 try: j += 1 attribute = json.loads(data[j]) for k in header: ws.write(row, j, attribute.get(k, ""), default) j += 1 except Exception as e: logger.error(e.__str__()) logger.error('traceback.format_exc():\n{}'.format( traceback.format_exc())) continue row += 1 # 如果已经缓存了2个数字,则代表有重复的订单号,所以此时进行记录并合并 if len(temp) >= 2: temp_msg[temp[0]] = MakeTempMsg(data) merge_list.append(temp) if len(temp) >= 2: merge_list.append(temp) temp_msg[temp[0]] = MakeTempMsg(data) for hb in merge_list: ws.write_merge(hb[0], hb[1], 0, 0, temp_msg[hb[0]].get("checkOrderId"), default) ws.write_merge(hb[0], hb[1], 1, 1, temp_msg[hb[0]].get("orderNo"), default) ws.write_merge(hb[0], hb[1], 2, 2, temp_msg[hb[0]].get("createdTime"), default) ws.write_merge(hb[0], hb[1], 3, 3, temp_msg[hb[0]].get("pcSign"), default) ws.write_merge(hb[0], hb[1], 4, 4, temp_msg[hb[0]].get("carId"), default) ws.write_merge(hb[0], hb[1], 5, 5, temp_msg[hb[0]].get("carUser"), default) ws.write_merge(hb[0], hb[1], 6, 6, temp_msg[hb[0]].get("carPhone"), default) ws.write_merge(hb[0], hb[1], 7, 7, temp_msg[hb[0]].get("carModel"), default) ws.write_merge(hb[0], hb[1], 8, 8, temp_msg[hb[0]].get("workerName"), default) if not os.path.exists(savePath): os.mkdir(savePath) wb.save(savePath + file_name) return file_name else: return False
def insert_sys_user_info(username, password): time_now = get_now() sql_text = "INSERT INTO Admin(username, pwd, createdTime) VALUES ('{}','{}','{}')".format( username, password, time_now) execute(sql_text)
def insert_staff_info(name, sex, id_card_no): time_now = get_now() sql_text = '''INSERT INTO Worker(workerName, sex, idcard, createdTime) VALUES ('{}','{}','{}','{}')''' \ .format(name, sex, id_card_no, time_now) execute(sql_text)
def insert_customer(username, car_id, car_model, phone): sql_text = ''' INSERT INTO User(userName, carId, carModel, carPhone, createdTime) VALUES ('{}', '{}', '{}', '{}', '{}')''' \ .format(username, car_id, car_model, phone, get_now()) return execute(sql_text)
def user(self, keyword, get_data): try: if self.request.method == 'POST': if keyword == "add": try: username = get_data.pop("username") phone = get_data.pop("carPhone") car_model = get_data.pop("carModel") car_id = get_data.pop("carId") except Exception as e: print(e) raise ApiException(ErrorCode.ParameterMiss) customer = Customer() customer.username(username) customer.car_model(car_model) customer.phone(phone) customer.car_id(car_id) customer.create_time(time_utils.get_now()) temp_user = customer_handler.get_customer_by_key( "carId", car_id) if temp_user: try: customer_handler.update_customer_by_car_id( customer) except Exception as update_exception: print(update_exception) raise ApiException(ErrorCode.ParameterError) customer_id = temp_user[0][0] else: try: customer_id = customer_handler.add_customer( customer) except Exception as insert_exception: print(insert_exception) raise ApiException(ErrorCode.UserMore) return set_return_dicts({"userId": customer_id}) else: raise ApiException(ErrorCode.ErrorRequest) elif self.request.method == "GET": if not self.storeId: raise ApiException(ErrorCode.PCError) if keyword == "find": key = get_data.get("key", "") if key not in ["carPhone", "carId"]: raise ApiException(ErrorCode.ParameterError) value = get_data.get("value", "") if self.connect: temp = SocketServer("user {} {} {}".format( self.storeId, key, value)) if not temp: temp = self.find_customer(key, value) else: temp = self.find_customer(key, value) result = [] key_temp = [] if temp == 'restart': raise ApiException(ErrorCode.ReStartPC) else: for data in temp: key = data.get("phone") + data.get( "carId") + data.get("carModel") + data.get( "userName") if key in key_temp: pass else: result.append(data) key_temp.append(key) return set_return_dicts(result) elif keyword == 'order': car_id = get_data.get("carId", "") phone = get_data.get("carPhone", "") if not car_id: raise ApiException(ErrorCode.ParameterMiss) if self.connect: all_order_money = 0.0 result = SocketServer("userorder {} {} {}".format( self.storeId, car_id, phone)) if result: order_number = len(result) for data in result: all_order_money += data.get("totalPrice") else: result, order_number, all_order_money = self.get_order( car_id) else: result, order_number, all_order_money = self.get_order( car_id) if result == 'restart': raise ApiException(ErrorCode.ReStartPC) # result = [] else: print('sort') try: result.sort(key=lambda obj: obj.get('createdTime'), reverse=True) except Exception as sortE: print(sortE) try: for data in result: print(data) msg = data.get("msg") for msg_data in msg: temp = {} attribute = msg_data.get("attribute") for k, v in attribute.items(): if v != "" and v != "-": temp[k] = v msg_data['attribute'] = temp except Exception as forException: print(forException) send_msg = { 'orderMsg': result, 'orderNumber': order_number, 'allOrderMoney': all_order_money } print(send_msg) return set_return_dicts(send_msg) else: raise ApiException(ErrorCode.ErrorRequest) except ApiException as e: return set_return_dicts(forWorker=e.error_result['forWorker'], code=e.error_result['errorCode'], forUser=e.error_result['forUser'])
def _init_ui_info(self): self.calibration_date.setDateTime( QDateTime.fromString(time_utils.get_now(), 'yyyy-MM-dd hh:mm:ss')) self._init_brand() self._init_staff_combo()
def ImportExcel(fileName, self): # 用于正则判断是否是用软件导出的excel文档 pattern = re.compile(r"^门店系统:\d{4}[-/]\d{2}[/-]\d{2}至\d{4}[-/]\d{2}[/-]\d{2}$") # matchs = pattern.match() bk = xlrd.open_workbook(fileName) try: sh = bk.sheet_by_name("消费列表") except: sh = bk.sheet_by_name("Sheet1") nrows = sh.nrows temp = list() titleList = ['检索ID', 'orderNo', 'createdTime', "pcSign", "carId", "carUser", "carPhone", "carModel", "workerName", "project"] userList = ["carId", "carUser", "carPhone", "carModel"] mustlen = len(titleList) check = str(sh.row_values(0)[0]) matchs = pattern.match(check) title = sh.row_values(1) progress_dialog = QProgressDialog(self) progress_dialog.setWindowTitle("导入中") progress_dialog.setWindowModality(Qt.WindowModal) progress_dialog.setMinimumDuration(4) progress_dialog.setWindowTitle(self.tr("请等待")) progress_dialog.setLabelText(self.tr("导入中...")) progress_dialog.setCancelButtonText(self.tr("取消")) progress_dialog.setRange(0, nrows - 3) progress_dialog.show() if True: p = 0 msgList = list() for i in range(2, nrows): # 用正则表达式判断第一行数据内容,从而判断是否用软件导出的EXCEL文档 if matchs: # 若是用软件导出的则 if progress_dialog.wasCanceled(): break progress_dialog.setValue(p) p += 1 try: # if True: saveData = dict() row_data = sh.row_values(i) if i < nrows - 1: temp2 = sh.row_values(i + 1) else: temp2 = None if temp2 != None and temp2[0] == '': # 合并了单元格则合并内容是空,将后面不是空的内容进行缓存,合并的内容会在最后一条信息中显示, # 此时一并进行录入 temp.append(row_data) else: # if row_data[0] != '': if temp: orderCheckId = temp[0][0] else: orderCheckId = row_data[0] checkOrder = get_sale_info_by_one_key("orderCheckId", orderCheckId) # 有此订单的就不保存了 if not checkOrder: if temp: temp.append(row_data) allMsg = temp[0] # 接入信息后录入 for i in range(len(temp)): if i != 0: msg = temp[i] attribute = {} for ki in range(len(title)): allMsg[ki] = str(allMsg[ki]) msg[ki] = str(msg[ki]) if ki < mustlen: tempK = titleList[ki] if tempK in ['orderNo', 'carPhone']: allMsg[ki] = allMsg[ki].replace('.0', "") msg[ki] = msg[ki].replace('.0', "") if titleList[ki] in ["project"]: saveData[tempK] = msg[ki] else: if tempK == "检索ID": tempK = "orderCheckId" saveData[tempK] = allMsg[ki] else: if row_data[ki] == "" or row_data[ki] == "-": continue attribute[title[ki]] = msg[ki] saveData['attribute'] = json.dumps(attribute) saveData['id'] = get_uuid1() dbhelp.add_sale_info(saveData) row_data = allMsg attribute = {} userSave = {} for ki in range(len(title)): row_data[ki] = str(row_data[ki]) if ki < mustlen: if titleList[ki] in ['orderNo', 'carPhone']: row_data[ki] = row_data[ki].replace('.0', "") key = titleList[ki] if key == "检索ID": key = "orderCheckId" saveData[key] = row_data[ki] # 保存用户信息 if key in userList: userSave[key] = row_data[ki] else: if row_data[ki] == "" or row_data[ki] == "-": continue attribute[title[ki]] = row_data[ki] user = check_customer(userSave.get("carPhone"), userSave.get("carId")) if not user: # 没有此用户则添加 key = "userName,carPhone,carModel,carId,createdTime" value = "'{}','{}','{}','{}','{}'".format(userSave.get("carUser"), userSave.get("carPhone"), userSave.get("carModel"), userSave.get("carId"), get_now()) try: # pass dbhelp.InsertData("User", key, value) except: pass saveData['attribute'] = json.dumps(attribute) saveData['id'] = get_uuid1() sale_handler.add_sale_info(saveData) # 清空缓存 temp = list() # if i == nrows - 1: # 此时是最后一组,则要进行录入 # else: # #合并了单元格则合并内容是空,将后面不是空的内容进行缓存,合并的内容会在最后一条信息中显示,此时一并进行录入 # temp.append(row_data) except: continue else: # 若不是用软件导出的EXCEL文档则 # for i in range(2,nrows): # 先整理参数,全部变成列表,列表里面是字典,字典的key就是title try: row_data = sh.row_values(i) tempData = dict() for k in range(len(title)): tempData[title[k]] = row_data[k] msgList.append(tempData) except: continue if not matchs: saveList = defaultdict(list) for msg in msgList: if not msg.get("消费时间") or not msg.get("车牌号"): continue key = msg.get("消费时间") + msg.get("车牌号") saveList[key].append(msg) # 插入信息 must = ["订单号", "接待门店", "车牌号", "车主姓名", "联系电话", "车型", "操作人员", "消费项目", "消费时间"] for k, v in saveList.items(): if progress_dialog.wasCanceled(): break progress_dialog.setValue(p) p += 1 orderCheckId = get_uuid1() # 对同一个订单进行录入 userSave = {} for tempDict in v: orderNo = str(tempDict.pop("订单号")) if tempDict.get("订单号", "") != "" else "-" pcSign = tempDict.pop("接待门店", "") if tempDict.get("接待门店", "") != "" else "-" carId = tempDict.pop("车牌号") if tempDict.get("车牌号") != "" else "-" carUser = tempDict.pop("车主姓名", "") if tempDict.get("车主姓名", "") != "" else "-" carPhone = str(tempDict.pop("联系电话", "-")).replace(".0", "") if tempDict.get("联系电话", "") != "" else "-" carModel = tempDict.pop("车型", "") if tempDict.get("车型", "") != "" else "-" workerName = tempDict.pop("操作人员", "") if tempDict.get("操作人员", "") != "" else "-" project = tempDict.pop("消费项目", "") if tempDict.get("消费项目", "") != "" else "-" createdTime = str(tempDict.pop("消费时间")).replace(".", "-") # 保存用户信息 userSave["carId"] = carId if carId != '-' else "" userSave["carUser"] = carUser if carUser != '-' else "" userSave["carPhone"] = (carPhone if carPhone != '-' else "").replace(".0", "") userSave['carModel'] = carModel if carModel != '-' else "" if orderNo != "-": checkOrder = get_sale_info_by_one_key("orderNo", orderNo) if checkOrder: break saveData = { "orderNo": orderNo.replace(".0", ""), "createdTime": createdTime, "pcSign": pcSign, "carId": carId, "carUser": carUser, "carPhone": carPhone, "carModel": carModel, "workerName": workerName, "project": project, "orderCheckId": orderCheckId, "id": get_uuid1(), } tempAttribute = tempDict attribute = dict() for k, v in tempAttribute.items(): if k not in must: if v == "": # v = '-' continue attribute[k] = str(v) try: gsf = float(attribute.get("工时费")) if attribute.get("工时费") != "" else 0 sl = float(attribute.get("数量")) if attribute.get("数量") != "" else 0 dj = float(attribute.get("单价")) if attribute.get("单价") != "" else 0 attribute["总价"] = gsf + sl * dj except: pass saveData["attribute"] = json.dumps(attribute) dbhelp.add_sale_info(saveData) if userSave.get("carId") and userSave.get("carPhone"): # 当有用户信息的时候判断是否需要自动添加 user = check_customer(userSave.get("carPhone"), userSave.get("carId")) if not user: # 没有此用户则添加 key = "userName,carPhone,carModel,carId,createdTime" value = "'{}','{}','{}','{}','{}'".format(userSave.get("carUser"), userSave.get("carPhone"), userSave.get("carModel"), userSave.get("carId"), get_now()) try: # pass dbhelp.InsertData("User", key, value) except: pass # 最后全部导入 progress_dialog.setValue(nrows - 3) progress_dialog.close()
def _add_new_line(self): if self.buy_info_container.count() >= 11: QMessageBox.information(self.submit, "提示", '添加的行数过多,请提交后再做新增!') return self.line_number += 1 line_number = str(self.line_number) buy_info_name = 'buy_info' + '_' + line_number setattr(self, buy_info_name, QtWidgets.QHBoxLayout()) buy_info = getattr(self, buy_info_name) buy_info.setObjectName(buy_info_name) for index, title in enumerate(self.line_title): editor = static_func.create_instance('PyQt5.QtWidgets.' + self.edit_type[index]) attr_name = title + '_' + line_number editor.setObjectName(attr_name) first_attr_name = title + '_' + '1' first_attr = getattr(self, first_attr_name) editor.setMinimumSize(getattr(first_attr, 'minimumSize')()) editor.setMaximumSize(getattr(first_attr, 'maximumSize')()) editor.setFont(getattr(first_attr, 'font')()) if hasattr(first_attr, 'setClearButtonEnabled') and first_attr.isClearButtonEnabled(): editor.setClearButtonEnabled(True) if title == 'buy_date': editor.setDisplayFormat("yyyy-MM-dd") editor.setDateTime(QDateTime.fromString(time_utils.get_now(), 'yyyy-MM-dd hh:mm:ss')) if title == 'remove': editor.setText('删除') editor.clicked.connect(self.do_remove) editor.setObjectName(attr_name) if title == 'seq': editor.setText(line_number) # 只读 if title in ('total', 'unpaid'): editor.setReadOnly(first_attr.isReadOnly()) editor.setEnabled(first_attr.isEnabled()) editor.setText('0.0') if title in ('paid', 'price'): view_utils.set_validator(editor, 'float') editor.textEdited.connect(self._text_edit) editor.setText('0.0') if title == 'number': editor.valueChanged.connect(self._text_edit) if title in ('first_service', 'second_service'): self._add_all_service_item(editor) editor.activated.connect(self._add_all_service_item) if title == 'first_service': editor.currentIndexChanged.connect(self._first_service_changed) if title == 'payment': view_utils.get_all_payment(editor) editor.addItem('点击新增') editor.activated['int'].connect(self._need_add_payment) view_utils.set_completer(editor, title) setattr(self, attr_name, editor) buy_info.addWidget(editor) self.buy_info_container.addLayout(buy_info)