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 + -
显示快捷键?