order.py
来自「监控大型网络的软件。能够自动发现拓扑结构」· Python 代码 · 共 796 行 · 第 1/3 页
PY
796 行
fields['active'] = 'false' for i in range(0,amount-oldamount): insertFields(fields,'device') elif amount < oldamount: # Delete devices, first get all deviceids from this order deleteAmount = oldamount-amount sql = "SELECT deviceid FROM device WHERE " +\ "deviceorderid='%s' " % (deviceorderid,) +\ "AND device.active=false" result = executeSQL(sql,fetch=True) deviceidList = [] i = 1 for row in result: deviceidList.append(row[0]) if i == deleteAmount: break i += 1 sql = "DELETE FROM device WHERE " first = True for id in deviceidList: if not first: sql += "OR " sql += "deviceid='%d' " % (id,) first = False executeSQL(sql) # Update deviceorder orderdate = formData[CN_YEAR] + '-' + formData[CN_MONTH] + '-' + \ formData[CN_DAY] fields = {} now = mx.DateTime.now() if amount == 0: # Close the order fields['arrived'] = now.strftime(TIMESTAMP) fields['productid'] = formData[CN_PRODUCT] fields['updatedby'] = req.session['user'].login lastupdated = str(now.year) + '-' + str(now.month) + '-' + \ str(now.day) fields['lastupdated'] = lastupdated fields['orgid'] = formData[CN_ORG] orderdate = formData[CN_YEAR] + '-' + formData[CN_MONTH] + '-' + \ formData[CN_DAY] fields['ordered'] = orderdate if formData.has_key(CN_RETAILER): fields['retailer'] = formData[CN_RETAILER] if formData.has_key(CN_ORDERNUMBER): fields['ordernumber'] = formData[CN_ORDERNUMBER] if formData.has_key(CN_COMMENT): fields['comment'] = formData[CN_COMMENT] updateFields(fields,'deviceorder','deviceorderid',deviceorderid)def registerOrder(req,formData): # Create deviceorder fields = {} fields['productid'] = formData[CN_PRODUCT] fields['username'] = req.session['user'].login fields['orgid'] = formData[CN_ORG] orderdate = formData[CN_YEAR] + '-' + formData[CN_MONTH] + '-' + \ formData[CN_DAY] fields['ordered'] = orderdate if formData.has_key(CN_RETAILER): fields['retailer'] = formData[CN_RETAILER] if formData.has_key(CN_ORDERNUMBER): fields['ordernumber'] = formData[CN_ORDERNUMBER] if formData.has_key(CN_COMMENT): fields['comment'] = formData[CN_COMMENT] sequence = ('deviceorderid','public.deviceorder_deviceorderid_seq') orderid = insertFields(fields,'deviceorder',sequence) # Create devices fields = {} fields['productid'] = formData[CN_PRODUCT] fields['deviceorderid'] = orderid fields['active'] = 'false' for i in range(0,int(formData[CN_AMOUNT])): insertFields(fields,'device')def addOrder(req): form = req.form args = {} args['path'] = [('Home','/'), ('Tools','/toolbox'), ('Device Management',BASEPATH), ('Order management',BASEPATH + 'order/'), ('Add order',None)] args['action'] = BASEPATH + 'order/add' args['error'] = '' # submit button pressed? if form.has_key('cn_submit'): if len(form['cn_prodid']) and len(form['cn_org']): if form.has_key('cn_number'): try: ci_number = int(form['cn_number']) except ValueError: ci_number = 0 if ci_number > 0: ci_prodid = form['cn_prodid'] ci_orgid = form['cn_org'] ci_retailer = form['cn_retailer'] ci_ordernr = form['cn_ordernr'] connection = nav.db.getConnection('devicemanagement', 'manage') database = connection.cursor() firstDevice = True # Create devices for i in range(0,ci_number): sql = "INSERT INTO device (productid) VALUES (%s)" \ % ci_prodid database.execute(sql) # get the new deviceid sql = "SELECT currval('device_deviceid_seq')" database.execute(sql) connection.commit() deviceId = int(database.fetchone()[0]) # The orderid is set to the first deviceid in the order if firstDevice: orderId = deviceId firstDevice = False # create a deviceOrdered event and post it to the eventq de = DeviceEvent(eventtypeId='deviceChanged', alerttype='deviceOrdered', deviceId=deviceId) de.subId = orderId de.state = DeviceEvent.STATE_START # variables username = req.session['user'].login vars = {'username': username, 'orgid': ci_orgid, 'retailer': ci_retailer, 'orderid': ci_ordernr} de.addVars(vars) de.postEvent() redirect(req,BASEPATH + 'order/') else: args['error'] = 'Amount must be positive' else: args['error'] = 'You must enter an amount' else: if not len(form['cn_org']): args['error'] = 'You must select an organisation' if not len(form['cn_prodid']): args['error'] = 'You must select a product' # make list of orgs and products for the selects orgs = nav.db.manage.Org() orgList = [('','Select an organisation')] where = memberoforg(req) for org in orgs.getAllIterator(where): orgList.append((org.orgid,'(' + org.orgid + ') ' + org.descr)) args['orgList'] = orgList products = nav.db.manage.Product() productList = [('','Select a product')] for product in products.getAllIterator(): productList.append((product.productid,product.vendor.vendorid + ' ' + \ product.productno + ' ' + product.descr)) args['productList'] = productList args['returnpath'] = {'url': BASEPATH + 'order/', 'text': 'Return to order overview'} nameSpace = {'page': 'addOrder', 'args': args} template = deviceManagementTemplate(searchList=[nameSpace]) template.path = args['path'] return template.respond()def registerDevices(form,orderid,username,page): if type(form[CN_SERIAL]) in (str, unicode, util.StringField): serialList = [form[CN_SERIAL]] else: serialList = form[CN_SERIAL] if type(form[CN_STATE]) in (str, unicode, util.StringField): stateList = [form[CN_STATE]] else: stateList = form[CN_STATE] sql = "SELECT deviceid FROM device WHERE deviceorderid='%s' " % orderid +\ "AND active='f'" result = executeSQL(sql,fetch=True) if result: deviceidList = [] for row in result: deviceidList.append(row[0]) if len(serialList) > len(deviceidList): page.errors.append('More serials than devices') else: count = 0 for i in range(0,len(serialList)): if len(serialList[i]) and (stateList[i] == CN_ARRIVED): # Update serial fields = {'serial': serialList[i], 'active': 'true'} try: updateFields(fields,'device','deviceid',deviceidList[i]) count += 1 # Send deviceactive event event = DeviceEvent('deviceActive') event.state = DeviceEvent.STATE_START event.deviceid = deviceidList[i] event.addVar('serial',serialList[i]) arrivaldate = form[CN_YEAR] + '-' +\ form[CN_MONTH] + '-' + \ form[CN_DAY] event.addVar('arrivaldate',arrivaldate) event.addVar('source','registered') event.post() # Send devicestate event event = DeviceEvent('deviceState','deviceOnShelf') event.state = DeviceEvent.STATE_START event.deviceid = deviceidList[i] event.addVar('username',username) event.post() except psycopg.IntegrityError: page.errors.append("A device with the serial '%s' " %\ serialList[i] +\ "already exists in the database") if count == 1: page.messages.append('Registered ' + str(count) + ' device') else: page.messages.append('Registered ' + str(count) + ' devices') else: page.errors.append('All devices from this order are already registered')class Order: """ Represents an order """ # orderId equals the deviceid of the first device in the order def __init__(self, orderId, orderTime, arrivedTime, product, productId, amount, orderedByPerson, orderedByOrg, retailer, orderNumber): self.orderId = orderId self.orderTime = orderTime self.arrivedTime = arrivedTime self.product = product self.productId = productId self.amount = amount self.orderedByPerson = orderedByPerson self.orderedByOrg = orderedByOrg self.retailer = retailer self.orderNumber = orderNumber return
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?