|
|
|
from flask_jwt_extended import current_user
|
|
|
|
from mongoengine import *
|
|
|
|
from werkzeug.security import generate_password_hash
|
|
|
|
|
|
|
|
from internal_lib.EncryptedField import EncryptedStringField
|
|
|
|
from models.EmbededDocuments import Descriptions
|
|
|
|
from models.Group import Group, PaymentGroup
|
|
|
|
from models.Union import Union
|
|
|
|
from restapi import Methods
|
|
|
|
|
|
|
|
|
|
|
|
class UserCustomFields(EmbeddedDocument):
|
|
|
|
name = StringField()
|
|
|
|
value = StringField()
|
|
|
|
value_type = StringField()
|
|
|
|
|
|
|
|
|
|
|
|
class User(Document):
|
|
|
|
meta = {
|
|
|
|
'index_background': True,
|
|
|
|
'index_cls': False,
|
|
|
|
'auto_create_index': True,
|
|
|
|
'can_query': True,
|
|
|
|
'with_sub_docs': True,
|
|
|
|
"quyery": {},
|
|
|
|
'ignore_fields': ['password'],
|
|
|
|
'methods': [Methods.Get, Methods.List, Methods.Create, Methods.Update],
|
|
|
|
"indexes": [
|
|
|
|
('union'),
|
|
|
|
('username', 'union'),
|
|
|
|
('accept_date')
|
|
|
|
],
|
|
|
|
"auto_generated": ['union','deleted','member_no']
|
|
|
|
|
|
|
|
}
|
|
|
|
deleted = BooleanField(default=False)
|
|
|
|
union = ReferenceField(Union)
|
|
|
|
member_no = LongField()
|
|
|
|
username = StringField(required=True)
|
|
|
|
photo = ImageField(thumbnail_size=(85, 120))
|
|
|
|
password = StringField(required=True)
|
|
|
|
name = StringField(required=True)
|
|
|
|
middle_name = StringField()
|
|
|
|
last_name = StringField(required=True)
|
|
|
|
gov_id = EncryptedStringField(required=True)
|
|
|
|
mother_name = EncryptedStringField()
|
|
|
|
father_name = EncryptedStringField()
|
|
|
|
email = EncryptedStringField()
|
|
|
|
place_of_birth = EncryptedStringField()
|
|
|
|
date_of_birth = EncryptedStringField(required=True)
|
|
|
|
telephone = EncryptedStringField(required=True)
|
|
|
|
job = StringField()
|
|
|
|
address = EncryptedStringField()
|
|
|
|
accept_date = DateTimeField()
|
|
|
|
dismissal_date = DateTimeField()
|
|
|
|
descriptions = ListField(EmbeddedDocumentField(Descriptions))
|
|
|
|
gender = StringField(choices=(
|
|
|
|
'Man',
|
|
|
|
'Women',
|
|
|
|
'Agender',
|
|
|
|
'Androgyne',
|
|
|
|
'Androgynous',
|
|
|
|
'Bigender',
|
|
|
|
'Cis',
|
|
|
|
'Cisgender',
|
|
|
|
'Cis Female',
|
|
|
|
'Cis Male',
|
|
|
|
'Cis Man',
|
|
|
|
'Cis Woman',
|
|
|
|
'Cisgender Female',
|
|
|
|
'Cisgender Male',
|
|
|
|
'Cisgender Man',
|
|
|
|
'Cisgender Woman',
|
|
|
|
'Female to Male',
|
|
|
|
'FTM',
|
|
|
|
'Gender Fluid',
|
|
|
|
'Gender Nonconforming',
|
|
|
|
'Gender Questioning',
|
|
|
|
'Gender Variant',
|
|
|
|
'Genderqueer',
|
|
|
|
'Intersex',
|
|
|
|
'Male to Female',
|
|
|
|
'MTF',
|
|
|
|
'Neither',
|
|
|
|
'Neutrois',
|
|
|
|
'Non-binary',
|
|
|
|
'Other',
|
|
|
|
'Pangender',
|
|
|
|
'Trans',
|
|
|
|
'Trans*',
|
|
|
|
'Trans Female',
|
|
|
|
'Trans* Female',
|
|
|
|
'Trans Male',
|
|
|
|
'Trans* Male',
|
|
|
|
'Trans Man',
|
|
|
|
'Trans* Man',
|
|
|
|
'Trans Person',
|
|
|
|
'Trans* Person',
|
|
|
|
'Trans Woman',
|
|
|
|
'Trans* Woman',
|
|
|
|
'Transfeminine',
|
|
|
|
'Transgender',
|
|
|
|
'Transgender Female',
|
|
|
|
'Transgender Male',
|
|
|
|
'Transgender Man',
|
|
|
|
'Transgender Person',
|
|
|
|
'Transgender Woman',
|
|
|
|
'Transmasculine',
|
|
|
|
'Transsexual',
|
|
|
|
'Transsexual Female',
|
|
|
|
'Transsexual Male',
|
|
|
|
'Transsexual Man',
|
|
|
|
'Transsexual Person',
|
|
|
|
'Transsexual Woman',
|
|
|
|
'Two-Spirit'
|
|
|
|
),required=True)
|
|
|
|
custom_fields = ListField(EmbeddedDocumentField(UserCustomFields))
|
|
|
|
user_group = ReferenceField(Group)
|
|
|
|
payment_group = ReferenceField(PaymentGroup)
|
|
|
|
|
|
|
|
def __unicode__(self):
|
|
|
|
try:
|
|
|
|
return ' '.join([self.name, self.middle_name, self.last_name])
|
|
|
|
except:
|
|
|
|
return str(self.id)
|
|
|
|
|
|
|
|
def save(self, *args, **kwargs):
|
|
|
|
if self.union:
|
|
|
|
self.member_no = User.objects.filter(union=self.union).count()
|
|
|
|
|
|
|
|
if self.password.find('pbkdf2:') == -1:
|
|
|
|
self.password = generate_password_hash(self.password)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
super(User, self).save(*args, **kwargs)
|