# coding:utf-8 ''' Created on 30 марта 2016 г. @author: popov_v ''' import json from webservices.functions import getContextByMaster from ru.curs.celesta.showcase.utils import XMLJSONConverter from nci.functions.persons import createAccount, normalizeSnils, changePassword as changePasswordFun from nci._nci_orm import personCursor from common.numbersseries.getNextNo import getNextNoOfSeries from security.functions import id_generator from java.text import SimpleDateFormat from security._security_orm import loginsCursor def register(self, xmlIn): u'''Регистрация нового пользователя. ''' out_data = {'response': ''} input_data = json.loads(XMLJSONConverter.xmlToJson(xmlIn)) if input_data['root']['@mode'] != 'registr': out_data['response'] = {'b': u'Неверный режим!'} else: # создаем ФЛ # данные snils = input_data['root']['snils'] surname = input_data['root']['surname'] name = input_data['root']['name'] patronymic = input_data['root']['patronymic'] email = input_data['root']['email'] phone = input_data['root']['phone'] birth_date = input_data['root']['birth_date'] sex = input_data['root']['sex'] # генерируем пароль _password = id_generator() context = getContextByMaster() person = personCursor(context) logins = loginsCursor(context) # проверяем, есть ли такой пользователь по СНИЛС person.setRange('snils', normalizeSnils(snils)) if person.tryFirst(): # ФЛ найдено # проверяем, есть ли такой аккаунт logins.setFilter('userName', "'%s'|'%s'" % (snils.replace("-", "").replace(" ", ""), email)) if not logins.tryFindSet(): createAccount(context, person.uid, password=_password, roles=['medstaff', 'address']) else: out_data['response'] = {'b': u'Аккаунт уже существует. Для изменения пароля нажмите на ссылку "Забыли пароль?".'} else: # создаем новое ФЛ person.surname = surname person.name = name person.patronymic = patronymic person.snils = snils person.sex = sex person.email = email person.phone = phone #person.phoneExtra = data_dict["phoneExtra"] try: person.birthDate = SimpleDateFormat("yyyy-MM-dd").parse(birth_date) if birth_date else None except: person.birthDate = SimpleDateFormat("dd.MM.yyyy").parse(birth_date) if birth_date else None person.personal_data_agree = True person.fullname = u'%s %s %s' % (person.surname or '', person.name or '', person.patronymic or '') person.uid = getNextNoOfSeries(context, 'persons') person.insert() # создаем аккаунт createAccount(context, person.uid, password=_password, roles=['medstaff', 'address']) context.commit() # ВРЕМЕННО!!!! if not out_data['response']: out_data['response'] = {'b': u'Имя пользователя (логин): %s, Пароль: %s' % (snils.replace("-", "").replace(" ", ""), _password)} return XMLJSONConverter.jsonToXml(json.dumps(out_data)) def changePassword(self, xmlIn): u'''Смена пароля пользователя.''' out_data = {'response': ''} input_data = json.loads(XMLJSONConverter.xmlToJson(xmlIn)) if input_data['root']['@mode'] != 'remind': out_data['response'] = {'b': u'Неверный режим!'} else: # создаем ФЛ # данные snils = input_data['root']['snils'] # генерируем пароль _password = id_generator() context = getContextByMaster() person = personCursor(context) logins = loginsCursor(context) # проверяем, есть ли такой пользователь по СНИЛС person.setRange('snils', normalizeSnils(snils)) if person.tryFirst(): # ФЛ найдено # проверяем, есть ли такой аккаунт logins.setFilter('userName', "'%s'" % (snils.replace("-", "").replace(" ", ""))) if logins.tryFindSet(): changePasswordFun(context, person.uid, _password) else: out_data['response'] = {'b': u'Аккаунт не найден. Для создания аккаунта нажмите на ссылку "Регистрация".'} else: out_data['response'] = {'b': u'Аккаунт не найден. Для создания аккаунта нажмите на ссылку "Регистрация".'} context.commit() # ВРЕМЕННО!!!! if not out_data['response']: out_data['response'] = {'b': u'Имя пользователя (логин): %s, Пароль: %s' % (snils.replace("-", "").replace(" ", ""), _password)} return XMLJSONConverter.jsonToXml(json.dumps(out_data))