def cardDataSave(context, main=None, add=None, filterinfo=None, session=None, elementId=None, xformsdata=None):
    u'''Функция сохранения карточки редактирования содержимого справочника типов разрешений. '''
    permissionsTypes = customPermsTypesCursor(context)
    content = json.loads(xformsdata)["schema"]["type"]
    permissionsTypes.name=content["@name"]
    permissionsTypes.description=content["@description"]

    if add == 'add' and permissionsTypes.canInsert() and permissionsTypes.canModify():
        if not permissionsTypes.tryInsert():
            permissionsTypesOld = customPermsTypesCursor(context)
            permissionsTypesOld.get(content["@name"])
            permissionsTypes.recversion = permissionsTypesOld.recversion
            permissionsTypes.update()
    elif add == 'add' and permissionsTypes.canInsert():
        permissionsTypes.insert()
    elif add == 'edit' and permissionsTypes.canModify():
        permissionsTypesOld = customPermsTypesCursor(context)
        currId = json.loads(session)['sessioncontext']['related']['gridContext']['currentRecordId']        
        permissionsTypesOld.get(currId)
        if permissionsTypesOld.name==permissionsTypes.name:
            permissionsTypes.recversion = permissionsTypesOld.recversion
            permissionsTypes.update()
        elif permissionsTypes.canInsert():
            permissionsTypes.insert()
            permissionsTypesOld.delete()
        else:
            raise CelestaException(u"Недостаточно прав для данной операции!")        
    else:
        raise CelestaException(u"Недостаточно прав для данной операции!")
示例#2
0
def cardDataSave(context,
                 main=None,
                 add=None,
                 filterinfo=None,
                 session=None,
                 elementId=None,
                 xformsdata=None):
    u'''Функция сохранения карточки редактирования содержимого справочника разрешений. '''
    permissions = PermissionsCursor(context)
    content = json.loads(xformsdata)["schema"]
    #    for field in permissions.meta().getColumns():
    #        permissions.__setattr__(field, content[field])
    permissions.roleid = content["roleid"]
    permissions.grainid = content["grainid"]
    permissions.tablename = content["tablename"]
    permissions.r = content["r"] == "true"
    permissions.i = content["i"] == "true"
    permissions.m = content["m"] == "true"
    permissions.d = content["d"] == "true"

    if add == 'add' and permissions.canInsert() and permissions.canModify():
        if not permissions.tryInsert():
            permissionsOld = PermissionsCursor(context)
            permissionsOld.get(content["roleid"], content["grainid"],
                               content["tablename"])
            permissionsOld.r = content["r"] == "true"
            permissionsOld.i = content["i"] == "true"
            permissionsOld.m = content["m"] == "true"
            permissionsOld.d = content["d"] == "true"
            permissionsOld.update()
    elif add == 'add' and permissions.canInsert():
        permissions.insert()
    elif add == 'edit' and permissions.canModify():
        permissionsOld = PermissionsCursor(context)
        currIdEncoded = json.loads(session)['sessioncontext']['related'][
            'gridContext']['currentRecordId']
        currId = json.loads(base64.b64decode(currIdEncoded))
        permissionsOld.get(*currId)
        if permissionsOld.roleid==permissions.roleid and \
                permissionsOld.grainid==permissions.grainid and \
                permissionsOld.tablename==permissions.tablename:
            permissions.recversion = permissionsOld.recversion
            permissions.update()
        elif permissions.canInsert():
            permissions.insert()
            permissionsOld.delete()
        else:
            raise CelestaException(u"Недостаточно прав для данной операции!")

    else:
        raise CelestaException(u"Недостаточно прав для данной операции!")
示例#3
0
def cardDataSave(context, main=None, add=None, filterinfo=None, session=None, elementId=None, xformsdata=None):
    u'''Функция сохранения карточки редактирования содержимого справочника разрешений. '''
    numbersSeries = numbersSeriesCursor(context)    
    content = json.loads(xformsdata)["schema"]["numbersSeries"]
    #raise Exception(permissions.meta().getColumns())
#    for field in permissions.meta().getColumns():
#        permissions.__setattr__(field, content[field])
    numbersSeries.id = content["@id"]
    numbersSeries.description = content["@description"]

    if add == 'add' and numbersSeries.canInsert() and numbersSeries.canModify():
        if not numbersSeries.tryInsert():
            numbersSeriesOld = numbersSeriesCursor(context)
            numbersSeriesOld.get(content["@id"])
            numbersSeries.recversion = numbersSeriesOld.recversion
            numbersSeries.update()
    elif add == 'add' and numbersSeries.canInsert():
        numbersSeries.insert()
    elif add == 'edit' and numbersSeries.canModify():
        numbersSeriesOld = numbersSeriesCursor(context)
        numberSeriesTemp = numbersSeriesCursor(context)
        currId = json.loads(session)['sessioncontext']['related']['gridContext']['currentRecordId']        
        numbersSeriesOld.get(currId)
        if numbersSeriesOld.id==numbersSeries.id:
            numbersSeries.recversion = numbersSeriesOld.recversion
            numbersSeries.update()
        elif numberSeriesTemp.tryGet(content["@id"]):
            context.error(u'Серия номеров с данным ID уже существует. Данные не сохранены!')
        elif numbersSeries.canInsert():
            linesOfNumbersSeries = linesOfNumbersSeriesCursor(context)
            linesOfNumbersSeriesTemp = linesOfNumbersSeriesCursor(context)
            linesOfNumbersSeries.setRange('seriesId', numbersSeriesOld.id)
            numbersSeries.insert()
            if linesOfNumbersSeriesTemp.canInsert():
                for linesOfNumbersSeries in linesOfNumbersSeries.iterate():
                    linesOfNumbersSeriesTemp.get(linesOfNumbersSeries.seriesId, linesOfNumbersSeries.numberOfLine)
                    linesOfNumbersSeriesTemp.seriesId = numbersSeries.id
                    linesOfNumbersSeriesTemp.insert()
            else:
                raise CelestaException(u"Недостаточно прав для данной операции!")
            linesOfNumbersSeries.deleteAll()                    
            numbersSeriesOld.delete()
            
        else:
            raise CelestaException(u"Недостаточно прав для данной операции!")
        
    else:
        raise CelestaException(u"Недостаточно прав для данной операции!")
示例#4
0
    def _createReader(self, path, value, xmlWriter):
        u'''функция создания ридера для чтения файла настроек, с учетом указанного пути'''
        pathList = list()
        name = r"[a-zA-Z_][a-zA-Z_0-9]+"
        elementPatern = regexp.compile(r"""(%s)(?:\[(?:@(%s)=(?:'([^']+)'|\"([^\"]+)\")|([0-9]+))\])?(?:/@(%s))?""" % (name, name, name), regexp.UNICODE)
        lastEnd = -1
        for a in elementPatern.finditer(unicode(path)):
            if lastEnd + 1 != a.start(0) or (lastEnd > 0 and path[lastEnd]not in ('/', '\\')):
                raise CelestaException('Bad XPath expression')
            pathList.append(NodeProperties(a.groups()))
            lastEnd = a.end(0)

        parser = XMLReaderFactory.createXMLReader()
        handler = WriteSettings(pathList, xmlWriter, value)
        parser.setContentHandler(handler)
        parser.setErrorHandler(handler)
        parser.setFeature("http://xml.org/sax/features/namespace-prefixes", True)
        parser.setProperty("http://xml.org/sax/properties/lexical-handler", handler)

        stream = FileInputStream(self._getUserSettingsFilePath())
        parser.parse(InputSource(stream))
        stream.close()

        if not handler.result:
            stream = FileInputStream(self._getSettingsFilePath())
            parser.parse(InputSource(stream))
            stream.close()

        return handler.result
示例#5
0
def cardDataSave(context,
                 main=None,
                 add=None,
                 filterinfo=None,
                 session=None,
                 elementId=None,
                 xformsdata=None):
    u'''Функция сохранения карточки редактирования содержимого справочника ролей. '''
    subjects = subjectsCursor(context)
    content = json.loads(xformsdata)["schema"]["subject"]
    subjects.name = content["@name"]
    subjects.sid = content["@sid"]

    if add == 'add' and subjects.canInsert() and subjects.canModify():
        if not subjects.tryInsert():
            subjectsOld = subjectsCursor(context)
            subjectsOld.get(content["@sid"])
            subjects.recversion = subjectsOld.recversion
            subjects.update()
    elif add == 'add' and subjects.canInsert():
        subjects.insert()
    elif add == 'edit' and subjects.canModify():
        currId = json.loads(session)['sessioncontext']['related'][
            'gridContext']['currentRecordId']
        subjectsOld = subjectsCursor(context)
        subjectsOld.get(currId)
        subjectsOld.name = content["@name"]
        subjectsOld.sid = content["@sid"]
        subjectsOld.update()
    else:
        raise CelestaException(u"Недостаточно прав для данной операции!")
示例#6
0
def cardDataSave(context, main=None, add=None, filterinfo=None, session=None, elementId=None, xformsdata=None):
    u'''Функция сохранения карточки редактирования содержимого справочника ролей. '''    
    rolesUsers = UserRolesCursor(context)
    currId = json.loads(session)['sessioncontext']['related']['gridContext']['currentRecordId']    
    rolesUsersOld = UserRolesCursor(context)
    rolesUsers.setRange("roleid", currId)
    rolesUsers.deleteAll()
    
    content = json.loads(xformsdata)["schema"]["users"]
    
    if content != "":    
        content=content["user"] if isinstance(content["user"], list) else [content["user"]]
    
        for user in content:
            rolesUsers.userid=user["@sid"]
            rolesUsers.roleid=currId
            if rolesUsers.canInsert() and rolesUsers.canModify():        
                if not rolesUsers.tryInsert():                
                    rolesUsersOld.get(user["@sid"], currId)
                    rolesUsers.recversion = rolesUsersOld.recversion  
                    rolesUsers.update()
            elif rolesUsers.canInsert():
                rolesUsers.tryInsert()
            elif rolesUsers.canModify():            
                rolesUsersOld.get(user["@sid"], currId)
                rolesUsers.recversion = rolesUsersOld.recversion  
                rolesUsers.update()
            else:
                raise CelestaException(u"Недостаточно прав для данной операции!")
示例#7
0
def shiftNodeToOtherLevelInHierarchy(context,
                                     cursorInstance,
                                     numberField,
                                     sortField,
                                     parentNumber=None,
                                     isOneHierarchy=False):
    u'''Функция перемещает куст на уровень @parentNumber'''
    currentNumber = getattr(cursorInstance, numberField)
    numberList = currentNumber.split('.')
    parentNumberList = []
    # Создаем клон основного курсора и копируем в него фильтры
    cursorInstanceClone = cursorInstance.__class__(context)
    if not isOneHierarchy:
        cursorInstanceClone.copyFiltersFrom(cursorInstance)
    cursorInstanceClone.limit(0, 0)
    # Находим правильное место вставки
    if parentNumber:
        parentNumberList = parentNumber.split('.')
        cursorInstanceClone.setFilter(
            numberField,
            '''('%s.'%%)&(!'%s.'%%'.'%%)''' % (parentNumber, parentNumber))
    else:
        cursorInstanceClone.setFilter(numberField, '''(!%'.'%)''')
    level = len(numberList)
    if numberList == parentNumberList[:level]:
        raise CelestaException(
            u'''Невозможно сделать узел потомком себя и своих потомков''')
    elif numberList[:-1] == parentNumberList:
        return
    parentNumberList.append(unicode(cursorInstanceClone.count() + 1))
    # Перемещаем все узлы текущего куста кроме корня
    cursorInstanceClone.setFilter(numberField, '''('%s.'%%)''' % currentNumber)
    for cursorInstanceClone in cursorInstanceClone.iterate():
        numberListChild = getattr(cursorInstanceClone, numberField).split('.')
        cursorInstanceClone.__setattr__(
            numberField, '.'.join(parentNumberList + numberListChild[level:]))
        cursorInstanceClone.update()
    # Перемещаем корень текущего куста на правильную позицию
    currentSort = getattr(cursorInstance, sortField)
    cursorInstance.__setattr__(numberField, '.'.join(parentNumberList))
    cursorInstance.update()
    # Перемещаем все нижестоящие кусты относительно текущего на одну позицию вверх
    if '.' in currentNumber:
        sqlPattern = '''('%s.'%%)&(!'%s.'%%'.'%%)''' % ('.'.join(
            numberList[:-1]), '.'.join(numberList[:-1]))
    else:
        sqlPattern = '''(!%'.'%)'''
    cursorInstanceClone.setFilter(numberField, sqlPattern)
    cursorInstanceClone.setFilter(sortField, '''>'%s' ''' % currentSort)
    cursorInstanceClone.orderBy(sortField)
    for cursorInstanceClone in cursorInstanceClone.iterate():
        numberListChild = getattr(cursorInstanceClone, numberField).split('.')
        moveNodeInHierarchy(context, cursorInstanceClone, numberField,
                            int(numberListChild[-1]) - 1)
    cursorInstanceClone.close()
示例#8
0
def cardDataSave(context,
                 main=None,
                 add=None,
                 filterinfo=None,
                 session=None,
                 elementId=None,
                 xformsdata=None):
    u'''Функция сохранения карточки редактирования содержимого справочника ролей. '''
    roles = RolesCursor(context)

    #raise Exception(xformsdata)

    content = json.loads(xformsdata)["schema"]["role"]
    roles.id = content["id"]
    if content["description"] == '':
        roles.description = content["id"]
    else:
        roles.description = content["description"]

    if add == 'add' and roles.canInsert() and roles.canModify():
        if not roles.tryInsert():
            rolesOld = RolesCursor(context)
            rolesOld.get(content["id"])
            roles.recversion = rolesOld.recversion
            roles.update()
        rolesReadPermission(roles)
    elif add == 'add' and roles.canInsert():
        roles.insert()
        rolesReadPermission(roles)
    elif add == 'edit' and roles.canModify():
        rolesOld = RolesCursor(context)
        currId = json.loads(session)['sessioncontext']['related'][
            'gridContext']['currentRecordId']
        rolesOld.get(currId)
        if rolesOld.id == roles.id:
            roles.recversion = rolesOld.recversion
            roles.update()
            rolesReadPermission(roles)
        else:
            raise CelestaException(u"Недостаточно прав для данной операции!")
    else:
        raise CelestaException(u"Недостаточно прав для данной операции!")
示例#9
0
def generateSortValue(number, rankList=[3]):
    u'''Функция формирует сортировочное значение из номера иерархии Дьюи.
    @number - номер иерархии Дьюи типа 1.1.1
    @rankList - список отвечающий за количество разрядов на каждом уровне rankList[0] количество по умолчанию
    Данный параметр не обязателен по умолчанию равен [3]
    Пример: generateSortValue('1.2.3.4', [3,1,2,3])='102003004' '''
    if not (isinstance(number, (str, unicode)) and isinstance(rankList, list)):
        raise CelestaException(
            u'Неверный формат аргументов. аргументы должны иметь вид (строка,список)'
        )
    lenRankList = len(rankList)
    #     убираем пустые строки
    numberList = filter(bool, number.split('.'))

    sortVal = []
    for idx, val in enumerate(numberList):
        rank = rankList[idx + 1] if idx + 1 < lenRankList else rankList[0]
        sortVal.append(val.zfill(rank))
    return ''.join(sortVal)
示例#10
0
    def getNextNum(self):
        """Finding next num"""
        if not self.lastUsed:
            return unicode(self.startNum)
        elif self.lastUsed < self.endNum:
            nextNum = unicode(self.lastUsed + self.incr)
            if int(nextNum) > self.endNum:
                raise Exception(
                    'Next number value is greater than max value for series %s'
                    % self.seriesId)
            if self.isFixedLength:
                nextNum = '0' * (len(unicode(self.endNum)) -
                                 len(nextNum)) + nextNum
                """If nextNum == '2' but it should be like '0002' """

        else:
            raise CelestaException(
                'Last used value is greater than max value for series %s' %
                self.seriesId)

        return nextNum
示例#11
0
def cardDataSave(context,
                 main=None,
                 add=None,
                 filterinfo=None,
                 session=None,
                 elementId=None,
                 xformsdata=None):
    u'''Функция сохранения карточки редактирования содержимого справочника ролей. '''
    rolesUsers = UserrolesCursor(context)
    logins = loginsCursor(context)
    currId = json.loads(
        session)['sessioncontext']['related']['gridContext']['currentRecordId']
    settings = Settings()
    if settings.isUseAuthServer() and settings.loginIsSubject():
        currId = json.loads(currId)[0]
    logins.get(currId)
    rolesUsers.setRange("userid", logins.subjectId)
    rolesUsers.deleteAll()
    if json.loads(xformsdata)["schema"]["roles"] <> '':
        content = json.loads(xformsdata)["schema"]["roles"]["role"]
        content = content if isinstance(content, list) else [content]
        rolesUsersOld = UserrolesCursor(context)
        for role in content:
            rolesUsers.roleid = role["@id"]
            rolesUsers.userid = logins.subjectId
            if rolesUsers.canInsert() and rolesUsers.canModify():
                if not rolesUsers.tryInsert():
                    rolesUsersOld.get(logins.subjectId, role["@id"])
                    rolesUsers.recversion = rolesUsersOld.recversion
                    rolesUsers.update()
            elif rolesUsers.canInsert():
                rolesUsers.tryInsert()
            elif rolesUsers.canModify():
                rolesUsersOld.get(logins.subjectId, role["@id"])
                rolesUsers.recversion = rolesUsersOld.recversion
                rolesUsers.update()
            else:
                raise CelestaException(
                    u"Недостаточно прав для данной операции!")
示例#12
0
def getNextNoOfSeries(context,
                      seriesId,
                      linesOfNumbersSeries=None,
                      updateNum=True):
    lonsFlag = False
    if linesOfNumbersSeries is None:
        linesOfNumbersSeries = linesOfNumbersSeriesCursor(context)
        lonsFlag = True
    linesOfNumbersSeries.setRange('seriesId', seriesId)
    linesOfNumbersSeries.setRange('isOpened', True)
    linesOfNumbersSeries.setRange('startingDate',
                                  datetime.strptime('1900-01-01', '%Y-%m-%d'),
                                  datetime.today())
    if linesOfNumbersSeries.count() > 1:
        raise Exception(
            "There is more than one opened line in the series '%s'" % seriesId)

    if linesOfNumbersSeries.tryFindSet():
        seriesObject = GettingNextNumberOfSeries(
            seriesId, linesOfNumbersSeries.lastUsedNumber,
            linesOfNumbersSeries.startingNumber,
            linesOfNumbersSeries.endingNumber,
            linesOfNumbersSeries.incrimentByNumber,
            linesOfNumbersSeries.isFixedLength)
        nextNum = seriesObject.getNextNum()
        linesOfNumbersSeries.lastUsedNumber = int(nextNum)
        linesOfNumbersSeries.lastUsedDate = datetime.today()
        if updateNum:
            linesOfNumbersSeries.update()
        prefix = linesOfNumbersSeries.prefix
        postfix = linesOfNumbersSeries.postfix
        if lonsFlag:
            linesOfNumbersSeries.close()
        return '%s%s%s' % (prefix, nextNum, postfix)
    else:
        CelestaException(
            "There are no available opened lines in the series '%s'!" %
            seriesId)
示例#13
0
    def startElement(self, namespaceURI, lname, qname, attrs):

        if self.parentTag == 'field':
            if self.flag == 0:
                self.stringWriter = StringWriter()
                self.xmlWriter = XMLOutputFactory.newInstance(
                ).createXMLStreamWriter(self.stringWriter, "UTF-8")
            self.flag += 1
            self.xmlWriter.writeStartElement(qname)
            for i in range(0, attrs.getLength()):
                self.xmlWriter.writeAttribute(attrs.getQName(i),
                                              attrs.getValue(i))
        elif qname == 'table' and self.flag == 0:
            if self.parentTag is not None:
                raise CelestaException(u"Неверный формат файла")

            self.parentTag = qname
            if not attrs.getValue('name'):
                raise CelestaException(
                    u"Атрибут 'name' отсутствует в теге 'table'")
            elif attrs.getValue('name') != self.tableInstance.meta().getName():
                raise CelestaException(
                    u"Имя таблицы %s не соответствует значению атрибута 'name'"
                    % self.tableInstance.meta().getName())
        elif qname == 'row' and self.flag == 0:
            if self.parentTag != 'table':
                raise CelestaException(u"Неверный формат файла")
            self.parentTag = qname
        elif qname == 'field' and self.flag == 0:
            if self.parentTag != 'row':
                raise CelestaException(u"Неверный формат файла")
            self.currentEncoding = attrs.getValue('encoding') or u"utf8"
            self.currentCell = attrs.getValue('name')
            self.parentTag = qname
            self.currentString = u''
        else:
            raise CelestaException(u"Неверный формат файла")
示例#14
0
def cardDataSave(context,
                 main=None,
                 add=None,
                 filterinfo=None,
                 session=None,
                 elementId=None,
                 xformsdata=None):
    u'''Функция сохранения карточки редактирования содержимого справочника разрешений. '''
    linesOfNumbersSeries = linesOfNumbersSeriesCursor(context)
    content = json.loads(xformsdata)["schema"]["numberSeries"]
    #raise Exception(xformsdata)
    sdf = SimpleDateFormat("yyyy-MM-dd")
    linesOfNumbersSeries.seriesId = content["@seriesId"]
    linesOfNumbersSeries.numberOfLine = int(content["@numberOfLine"])
    if content["@startingDate"] == '':
        linesOfNumbersSeries.startingDate = sdf.parse(
            datetime.datetime.fromtimestamp(time.time()).strftime("%Y-%m-%d"))
    else:
        linesOfNumbersSeries.startingDate = sdf.parse(content["@startingDate"])
    linesOfNumbersSeries.startingNumber = content["@startingNumber"]
    linesOfNumbersSeries.endingNumber = content["@endingNumber"]
    linesOfNumbersSeries.incrimentByNumber = content["@incrimentByNumber"]
    linesOfNumbersSeries.isOpened = content["@isOpened"] == "true"
    if content["@lastUsedDate"] <> '':
        linesOfNumbersSeries.lastUsedDate = sdf.parse(content["@lastUsedDate"])
    linesOfNumbersSeries.prefix = content["@prefix"]
    linesOfNumbersSeries.postfix = content["@postfix"]
    linesOfNumbersSeries.isFixedLength = content["@isFixedLength"] == "true"
    if add == 'add' and linesOfNumbersSeries.canInsert(
    ) and linesOfNumbersSeries.canModify():
        if content["@lastUsedNumber"] == '':
            linesOfNumbersSeries.lastUsedNumber = int(
                content["@startingNumber"])
        else:
            linesOfNumbersSeries.lastUsedNumber = int(
                content["@lastUsedNumber"])
        if not linesOfNumbersSeries.tryInsert():
            linesOfNumbersSeriesOld = linesOfNumbersSeriesCursor(context)
            linesOfNumbersSeriesOld.get(content["@seriesId"],
                                        int(content["@numberOfLine"]))
            linesOfNumbersSeries.recversion = linesOfNumbersSeriesOld.recversion
            linesOfNumbersSeries.update()
    elif add == 'add' and linesOfNumbersSeries.canInsert():
        if content["@lastUsedNumber"] == '':
            linesOfNumbersSeries.lastUsedNumber = int(
                content["@startingNumber"])
        else:
            linesOfNumbersSeries.lastUsedNumber = int(
                content["@lastUsedNumber"])
        linesOfNumbersSeries.insert()
    elif add == 'edit' and linesOfNumbersSeries.canModify():
        linesOfNumbersSeriesOld = linesOfNumbersSeriesCursor(context)
        linesOfNumberSeriesTest = linesOfNumbersSeriesCursor(context)
        gridContext = json.loads(
            session)['sessioncontext']['related']['gridContext']
        gridContext = gridContext if isinstance(gridContext,
                                                list) else [gridContext]
        currentId = {}
        for gc in gridContext:
            if "currentRecordId" in gc.keys():
                currentId[gc["@id"]] = gc["currentRecordId"]
        linesOfNumbersSeriesOld.get(currentId["numbersSeriesGrid"],
                                    int(currentId["linesNumbersSeriesGrid"]))
        if content["@lastUsedNumber"] == '':
            linesOfNumbersSeries.lastUsedNumber = linesOfNumbersSeriesOld.lastUsedNumber
        else:
            linesOfNumbersSeries.lastUsedNumber = int(
                content["@lastUsedNumber"])
        if linesOfNumbersSeriesOld.numberOfLine == linesOfNumbersSeries.numberOfLine:
            #linesOfNumbersSeriesOld.seriesId==linesOfNumbersSeries.seriesId and \
            linesOfNumbersSeries.recversion = linesOfNumbersSeriesOld.recversion
            linesOfNumbersSeries.update()
        elif linesOfNumberSeriesTest.tryGet(
                linesOfNumbersSeries.seriesId,
                int(linesOfNumbersSeries.numberOfLine)):
            context.error(u'Серия с данным номером уже существует.')
        elif linesOfNumbersSeries.canInsert():
            linesOfNumbersSeriesOld.delete()
            linesOfNumbersSeries.insert()
        else:
            raise CelestaException(u"Недостаточно прав для данной операции!")

    else:
        raise CelestaException(u"Недостаточно прав для данной операции!")
示例#15
0
def cardDataSave(context,
                 main=None,
                 add=None,
                 filterinfo=None,
                 session=None,
                 elementId=None,
                 xformsdata=None):
    u'''Функция сохранения карточки редактирования содержимого справочника ролей. '''
    settings = Settings()

    logins = loginsCursor(context)
    subject = subjectsCursor(context)
    content = json.loads(xformsdata)["schema"]["user"]
    if not settings.isUseAuthServer():
        # пользователи берутся из logins
        if add == 'edit' and content["@password"] == '':
            # если пароль при редактировании не заполнен, сохраняем в курсоре старый пароль из базы
            loginsOld = loginsCursor(context)
            currId = json.loads(session)['sessioncontext']['related'][
                'gridContext']['currentRecordId']
            loginsOld.get(currId)
            logins.password = loginsOld.password
        else:
            # иначе зашифровываем пароль из карточки
            pass_hash = hashlib.sha1()  # Объект типа hash
            pass_hash.update(content["@password"]
                             )  # Записываем в него текущий пароль из карточки
            logins.password = pass_hash.hexdigest(
            )  # Выполняем hash функцию, записываем результат в курсор.
        logins.userName = content["@userName"]

        if content[
                "@subjectId"] == "":  # если subjectId из карточки пуст, записываем в базу null
            logins.subjectId = None
        else:
            logins.subjectId = content["@subjectId"]

        if settings.loginIsSubject():
            # если loginIsSubject, cохраняем сначала subject, потом login
            subject.sid = content["@subjectId"]
            subject.name = content["@userName"]

            if content[
                    "@employeeId"] == '':  # если employeeId из карточки пуст (сотрудник не выбран), записываем в базу null
                subject.employeeId = None
            else:
                subject.employeeId = content["@employeeId"]

            # сохранение subject
            if add == 'add' and subject.canInsert() and subject.canModify():
                if not subject.tryInsert():
                    subjectOld = subjectsCursor(context)
                    subjectOld.get(content["@subjectId"])
                    subject.recversion = subjectOld.recversion
                    subject.update()
            elif add == 'add' and logins.canInsert():
                subject.insert()
            elif add == 'edit' and subject.canModify():
                subjectOld = subjectsCursor(context)
                subjectOld.get(content["@subjectId"])
                subject.recversion = subjectOld.recversion
                subject.update()
            else:
                raise CelestaException(
                    u"Недостаточно прав для данной операции!")

        # сохранение login
        if add == 'add' and logins.canInsert() and logins.canModify():
            if not logins.tryInsert():
                logins.update()
        elif add == 'add' and logins.canInsert():
            logins.insert()
        elif add == 'edit' and logins.canModify():
            loginsOld = loginsCursor(context)
            loginsOld.get(content["@userName"])
            logins.recversion = loginsOld.recversion
            logins.update()
        else:
            raise CelestaException(u"Недостаточно прав для данной операции!")
    else:
        # пользователи берутся из mellophone
        if logins.tryGet(content["@userName"]):
            # если запись с данным userName уже есть в таблице logins (Подробнее см. ниже)
            if settings.loginIsSubject():
                # если логины и субъекты тождественны
                if not subject.tryGet(logins.subjectId):
                    subject.sid = content["@sid"]
                if content["@employeeId"] == '':
                    subject.employeeId = None
                else:
                    subject.employeeId = content["@employeeId"]
                subject.name = content["@userName"]
                logins.subjectId = subject.sid

                # сохранение subject. Запись в logins уже есть
                if subject.canInsert() and subject.canModify():
                    if not subject.tryInsert():
                        subjectOld = subjectsCursor(context)
                        subjectOld.get(content["@subjectId"])
                        subject.recversion = subjectOld.recversion
                        subject.update()
                elif subject.canModify():
                    subjectOld = subjectsCursor(context)
                    subjectOld.get(content["@subjectId"])
                    subject.recversion = subjectOld.recversion
                    subject.update()
                else:
                    raise CelestaException(
                        u"Недостаточно прав для данной операции!")
            else:
                # Если субъекты тождественны сотрудникам, записываем subjectId в logins.subjectId
                # то есть, просто привязываем logins к subjects
                if content["@subjectId"] == "":
                    logins.subjectId = None
                else:
                    logins.subjectId = content["@subjectId"]

            # обновление logins
            if logins.canModify():
                logins.update()
            else:
                raise CelestaException(
                    u"Недостаточно прав для данной операции!")
        else:
            # пользователя нет в logins
            if settings.loginIsSubject():
                # если loginIsSubject, cохраняем сначала subject, потом login
                if content["@employeeId"] == '':
                    logins.subjectId = None
                else:
                    subject.employeeId = content["@employeeId"]
                    subject.sid = content["@sid"]
                    subject.name = content["@userName"]
                    logins.subjectId = subject.sid
                    if subject.canInsert() and subject.canModify():
                        if not subject.tryInsert():
                            subjectOld = subjectsCursor(context)
                            subjectOld.get(content["@subjectId"])
                            subject.recversion = subjectOld.recversion
                            subject.update()
                    elif subject.canInsert():
                        subject.insert()
                    else:
                        raise CelestaException(
                            u"Недостаточно прав для данной операции!")
            else:
                if content["@subjectId"] == "":
                    logins.subjectId = None
                else:
                    logins.subjectId = content["@subjectId"]
            # В случае, когда пользователи берутся из mellophone, и к пользователю делается привязка,
            # (<employees> к logins-subjects или <employees>-subjects к logins)
            # делается запись в logins
            logins.userName = content["@userName"]
            logins.password = ""
            if logins.canInsert():
                logins.insert()
            else:
                raise CelestaException(
                    u"Недостаточно прав для данной операции!")
示例#16
0
 def endElement(self, uri, lname, qname):
     if qname == 'table' and self.flag == 0:
         self.parentTag = None
     elif qname == 'row' and self.flag == 0:
         # обновляем или вставляем записи
         self.funcAction(self.tableInstance)
         self.tableInstance.clear()
         self.parentTag = 'table'
     elif qname == 'field' and self.flag == 0:
         # Вставка данных в поле таблицы, отдельно рассмотрен случай если данные в формате XML
         if hasattr(self, 'stringWriter') and self.stringWriter:
             self.xmlWriter.close()
             # Вставка данных в поле типа blob
             if self.tableInstance.meta().columns[
                     self.currentCell].getCelestaType() == 'BLOB':
                 getattr(self.tableInstance, "calc%s" % self.currentCell)()
                 blobField = self.tableInstance.__dict__[
                     self.currentCell].getOutStream()
                 blobField.write(self.stringWriter.strip())
             else:
                 self.tableInstance.__setattr__(
                     self.currentCell, self.stringWriter.toString())
             self.stringWriter.flush()
             self.stringWriter = None
             self.xmlWriter = None
         else:
             # проверка на None
             if self.currentString.strip() != 'None':
                 self.currentString = self.currentString.strip()
                 # Вставка данных в поле типа blob
                 if self.tableInstance.meta().columns[
                         self.currentCell].getCelestaType() == 'BLOB':
                     getattr(self.tableInstance,
                             "calc%s" % self.currentCell)()
                     blobField = self.tableInstance.__dict__[
                         self.currentCell].getOutStream()
                     if self.currentEncoding == u"utf8":
                         blobField.write(self.currentString)
                     elif self.currentEncoding == u"base64":
                         blobField.write(
                             base64.b64decode(self.currentString))
                     else:
                         raise CelestaException(u"Неверная кодировка")
                 elif self.tableInstance.meta().columns[
                         self.currentCell].getCelestaType() == 'DATETIME':
                     sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")
                     self.tableInstance.__setattr__(
                         self.currentCell, sdf.parse(self.currentString))
                 elif self.tableInstance.meta().columns[
                         self.currentCell].getCelestaType() == 'BIT':
                     self.tableInstance.__setattr__(
                         self.currentCell,
                         self.currentString.lower() == "true")
                 else:
                     if self.currentCell == 'prefix':
                         pass
                     self.tableInstance.__setattr__(self.currentCell,
                                                    self.currentString)
         self.parentTag = 'row'
         self.currentCell = None
         self.currentString = None
     elif self.parentTag == 'field':
         self.xmlWriter.writeEndElement()
         self.flag -= 1