class Reservation(Document): client = ReferenceField(Client, required=True) book = ReferenceField(Book, required=True) date_reserved = DateField(required=True) date_returned = DateField() total_price = FloatField() def update_price(self): self.total_price = round(self.get_total_price(), 2) self.save() def get_total_price(self): additional_price = self.get_additional_price() return self.book.price + additional_price def get_additional_price(self): max_date = self.date_reserved + timedelta(days=3) today = datetime.now().date() fine = 0 interest_rate = 0 original_price = self.book.price if today <= max_date: return fine days = abs((today - max_date).days) if days < 3: fine = 0.03 interest_rate = 0.002 elif days >= 3 and days <= 4: fine = 0.05 interest_rate = 0.004 else: fine = 0.07 interest_rate = 0.006 return original_price * fine + interest_rate * days * original_price
class PlanSettings(Document): timeframe = StringField() yearbegin = DateField(unique=True) summerbegin = DateField(unique=True) seasonwinterbegin = DateField(unique=True) seasonspringbegin = DateField(unique=True) semestertwobegin = DateField(unique=True)
class ToDoList(Document): """ TodoList model abstraction """ name = StringField(max_length=30) description = StringField(max_length=255) owner = StringField() todos = DictField() access = DictField() created_at = DateField() last_update = DictField() deadline = DateField() notification = DateField() status = StringField() def serialize(self) -> dict: return { "id": str(self.pk), "name": self.name, "description": self.description, "owner": self.owner, "todos": self.todos, "access": self.access, "created_at": str(self.created_at), "lastupdate": { "user": self.last_update["user"], "date": str(self.last_update["date"]), "todo": self.last_update["todo"], }, "deadline": str(self.deadline), "notification": str(self.notification), "status": self.status, }
class ToDo(Document): """ Todo model abstraction """ name = StringField(max_length=30) description = StringField() owner = StringField() todolist = StringField() assignment = StringField() created_at = DateField() last_update = DictField() deadline = DateField() notification = DateField() status = StringField() attachments = DictField() def serialize(self) -> dict: return { "id": str(self.pk), "name": self.name, "description": self.description, "owner": self.owner, "todolist": self.todolist, "assignment": self.assignment, "created_at": str(self.created_at), "lastupdate": { "user": self.last_update["user"], "date": str(self.last_update["date"]), }, "deadline": str(self.deadline), "notification": str(self.notification), "status": self.status, "attachments": self.attachments, }
class Register(Document): name = StringField(required=True) email = StringField(required=True) mobile = StringField(required=True, max_length=12) created_at = DateField( default=datetime.strftime(datetime.today(), "%a %d-%m-%Y %H:%M:%S")) updated_at = DateField(required=False)
class WorkOrder(BaseRecord): # constructor: workOrderName = StringField(max_length=15, required=True, unique=True) dateReceived = DateField(required=True, default=dt.datetime.now()) detail = StringField(defualt='') # multiline requestingContact = StringField(required=True) priority = StringField(required=True) statusCode = StringField( max_length=30, required=True) # choices: Pending Materials, Ready Now, Other requestCode = StringField(max_length=30, required=True) # choices: P-4, P-48, Other dateCompleted = DateField(required=True) inspectForStoreFile = FileField() detailedReceiptFile = FileField() signageMapFile = FileField() partsArrivalDate = DateField() targetStartDate = DateField(required=True) fkWorkOrderStatus = ReferenceField('WorkOrderStatus', required=True, dbref=False) fkStoreNumber = ReferenceField('Store', required=True, dbref=False) meta = {'collection': 'WorkOrder'} def to_file(self): return GridFSProxy(self) def __str__(self): return f'{self.workOrderName} - {self.fkWorkOrderStatus.status}'
class Admin(Document): name = StringField(required=True) email = StringField(required=True) mobile = StringField(required=True, max_length=12) type = StringField(choices=["SUPER", "NORMAL"]) created_at = DateField( default=datetime.strftime(datetime.today(), "%a %d-%m-%Y %H:%M:%S")) updated_at = DateField(required=False)
class Portfolio(Document): business_id = ReferenceField("Business", required=True) name = StringField(required=True) about = StringField(required=True, max_length=125) images = ListField(required=False) created_at = DateField( default=datetime.strftime(datetime.today(), "%a %d-%m-%Y %H:%M:%S")) updated_at = DateField(required=False)
class Login(Document): email = StringField(unique=True, required=True) password = StringField(required=True) type = StringField(choices=["ADMIN", "BUSINESS", "CLIENT"]) active = StringField(required=True) created_at = DateField( default=datetime.strftime(datetime.today(), "%a %d-%m-%Y %H:%M:%S")) updated_at = DateField(required=False)
class PEAC(Request): full_name = 'Permiso Académico' reason_permision = StringField(required=True, default='Con el objetivo de ...', display='Razón del permiso académico') from_date = DateField(required=True, display='Fecha de inicio del permiso', default=datetime.date.today) to_date = DateField(required=True, display='Fecha de fin del permiso', default=datetime.date.today) str_cm = [ 'otorgar permiso académico. Desde la fecha {}, a la fecha {}.', ] regulation_list = ['070|2012|CSU'] # List of regulations def cm(self, docx): paragraph = docx.add_paragraph() paragraph.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY paragraph.paragraph_format.space_after = Pt(0) self.cm_answer(paragraph) paragraph.add_run(' ({}). '.format( self.regulations[self.regulation_list[0]][0])) def cm_answer(self, paragraph): paragraph.add_run(self.str_council_header + ' ') paragraph.add_run( # pylint: disable=no-member self.get_approval_status_display().upper() + ' ').font.bold = True paragraph.add_run(self.str_cm[0].format(self.from_date, self.to_date) + ' ') paragraph.add_run(self.reason_permision + ' ') def pcm(self, docx): self.pcm_analysis(docx) paragraph = docx.add_paragraph() paragraph.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY paragraph.paragraph_format.space_after = Pt(0) paragraph.add_run(self.str_answer + ': ').bold = True self.pcm_answer(paragraph) def pcm_analysis(self, docx): analysis_list = [] analysis_list += self.extra_analysis add_analysis_paragraph(docx, analysis_list) def pcm_answer(self, paragraph): paragraph.add_run(self.str_comittee_header + ' ') paragraph.add_run( # pylint: disable=no-member self.get_advisor_response_display().upper() + ' ').font.bold = True paragraph.add_run(self.str_cm[0].format(self.from_date, self.to_date) + ' ') paragraph.add_run(self.reason_permision + ' ')
class Store(BaseRecord): OPTIONS = ( ('SUN', 'Sunday'), ('MON', 'Monday'), ('TUES', 'Tuesday'), ('WED', 'Wednesday'), ('THURS', 'Thursday'), ('FRI', 'Friday'), ('SAT', 'Saturday') ) # constructor: storeNumber = StringField(max_length=50, required=True) fkCustomer = ReferenceField('Customer', required=True, dbref=False) address = EmbeddedDocumentField(Address, required=True) phoneNumber = StringField(max_length=20, required=True) region = StringField(max_length=50, required=True) division = StringField(max_length=50, required=True) awardedVendor = StringField(max_length=50, required=True, default='PR Skate') overnightCrew = StringField(max_length=25) # choices: Full Time or Part Time overnightAccess = ListField(StringField(max_length=5), choices=( ('SUN', 'Sunday'), ('MON', 'Monday'), ('TUES', 'Tuesday'), ('WED', 'Wednesday'), ('THURS', 'Thursday'), ('FRI', 'Friday'), ('SAT', 'Saturday') )) noiseOrdinance = BooleanField(default=False) timeCutOff = StringField() fkRegionCode = ReferenceField('RegionCode', dbref=False) fkMicroRegionCode = ReferenceField('MicroRegionCode', dbref=False) coordinates = EmbeddedDocumentField(Coordinates) active = BooleanField(default=False) installationDueDates = ListField(DateField()) # Uploaded able inspectionDueDates = ListField(DateField()) # Uploaded able MAYBE NEW TABLES fiscalWeek = IntField(min_value=1, max_value=53) storeManagerName = EmbeddedDocumentField(Name) storeManagerEmail = EmailField() opsManagerName = EmbeddedDocumentField(Name) opsManagerEmail = EmailField() managerName = EmbeddedDocumentField(Name) managerEmail = EmailField() overnightManagerName = EmbeddedDocumentField(Name) overnightManagerEmail = EmailField() meta = {'collection': 'Store'} def __str__(self): return f'{self.storeNumber} - {self.address.city} - {self.address.state}'
class SalesContactBoardservice(Document): __tablename__ = 'sales_contact_boardservice' contact = ReferenceField(SalesContact) entity = StringField() start = DateField() end = DateField() def __str__(self): return """{}-{} from {} to {}""".format(self.contact.name, self.entity, self.start, self.end)
class Base(gj.Document): meta = {'abstract': True} creation_date = DateField() modified_date = DateField(default=pst_now) def save(self, *args, **kwargs): if not self.creation_date: self.creation_date = pst_now self.modified_date = pst_now return super(Base, self).save(*args, **kwargs)
class Event(Document): client_id = StringField(required=True) type = StringField(required=True) coordinate = StringField( required=True) # only show to the accepted business about = StringField(required=True) payment = StringField(required=True) start_date = DateField(required=True) end_date = DateField(required=True) created_at = DateField( default=datetime.strftime(datetime.today(), "%a %d-%m-%Y %H:%M:%S")) updated_at = DateField(required=False)
class Business(Document): name = StringField(required=True) email = StringField(required=True) mobile = StringField(required=True, max_length=12) business_type = StringField(required=True) about = StringField(required=True, max_length=125) portfolio_website = StringField(required=False) fb_fan_page = StringField(required=False) ig_fan_page = StringField(required=False) created_at = DateField( default=datetime.strftime(datetime.today(), "%a %d-%m-%Y %H:%M:%S")) updated_at = DateField(required=False) approved = BooleanField(required=True, default=False)
class User(Document): username = StringField(max_length=50, required=True, unique=True) email = EmailField(required=True, unique=True) birth_date = DateField(max_length=50, default="1970-1-1") password = StringField(max_length=50, required=True) last_record_time = DateField(max_length=50) @staticmethod def insert_user(email, username, birth_date, password): u = User(email=email, username=username, birth_date=birth_date, password=password).save() return u @staticmethod def delete_user(username): users = User.objects(username=username) for user in users: user.delete() @staticmethod def update_user(username, kwargs: Dict): """update user with specifying username""" users = User.objects(username=username) for user in users: for k in kwargs: if k in user: print(f"updating fields: {k}") user[k] = kwargs[k] user.save() @staticmethod def query_user_by_name(username): user = User.objects(username=username).first() return user @staticmethod def query_users_by_id(user_id): user = User.objects(id=user_id).first() return user @property def user_id(self): return str(self.id) def __str__(self): return f"<{self.__class__.__name__}, id:{self.user_id} email: {self.email}, username: {self.username}, birth_date: {self.birth_date}, password: {self.password}>"
class ProjectDeliveryRating(Document): __tablename__ = 'project_rating' delivery = ReferenceField(ProjectDelivery, required=True) timestamp = DateField() rating = FloatField(min_value=0, max_value=100) analyst = ReferenceField(Employee, required=True) note = StringField(max_length=500)
class SalesContact(Document): __tablename__ = 'sales_contact' name = StringField() dob = DateField() gender = StringField() educational_level = StringField() phone_office = StringField() phone_mobile = StringField() email = StringField() facebook = StringField() linkedin = StringField() company = ReferenceField(SalesTargetCompany) title = StringField() address = StringField() city = StringField() state = StringField() country = StringField() zip_code = StringField() def __unicode__(self): return self.name def __repr__(self): return self.name def __str__(self): return self.name
class AppointmentClient(Document): __tablename__ = 'appointment_client' name = StringField(required=True) dob = DateField() gender = ReferenceField(Gender) address1 = StringField() address2 = StringField() city = StringField() state = StringField() country = StringField() phone_number_mobile = StringField() phone_number_office = StringField() phone_number_home = StringField() twitter = StringField() facebook = StringField() instagram = StringField() email = StringField(required=True) def __unicode__(self): return self.name def __repr__(self): return self.name def __str__(self): return self.name
class ElectionEventAttendees(Document): __tablename__ = 'election_event_attendees' event = StringField() name = StringField(required=True) gender = StringField() dob = DateField() city_of_residence = StringField() role = StringField() job = StringField() twitter = StringField() instagram = StringField() facebook = StringField() email = StringField() phone_number = StringField() interests = StringField(max_length=400) concerns = StringField(max_length=400) most_interesting_topics_today = StringField(max_length=200) voting_for = StringField() want_to_volunteer = StringField() event_discovery = StringField() rate_event = StringField() #events_attended = IntField() def __unicode__(self): return self.name def __repr__(self): return self.name def __str__(self): return """{} attended {}""".format(self.name, self.event)
class User(Document): DELIVERY_TYPE = "DELIVERY" CUSTOMER_TYPE = "CUSTOMER" BACK_OFFICE_TYPE = "BACK_OFFICE" FLAT_SUBSCRIPTION = "FLAT" PREMIUM_SUBSCRIPTION = "PREMIUM" name = StringField(required=False) last_name = StringField(required=False) google_id = StringField(required=False) password = StringField(required=False) email = EmailField(required=True, unique=True) profile_image = StringField(required=False) phone = StringField(required=False) type = StringField(required=False, regex="CUSTOMER|DELIVERY|BACK_OFFICE") subscription = StringField(required=False, regex="FLAT|PREMIUM", default="FLAT") recovery_token = StringField(required=False) recovery_token_date = DateTimeField(required=False) reputation = FloatField(default=1) fcmToken = StringField(required=False) messages_sent = IntField(default=0) created = DateField(default=datetime.now().date()) balance = FloatField(default=0) location = EmbeddedDocumentField(Coordinates) available = BooleanField(default=True) deliveries_completed = IntField(default=0) gratitude_points = IntField(default=0)
class ConfigRecord(Document): date = DateField(default=datetime.now()) data = StringField() dev_name = StringField() node_eve_id = StringField() node_type = StringField() lab_name = StringField()
class Patients(Document): meta = {"collection": "pacientes"} folio = IntField(primary_key=True, db_field="folio") name = StringField(required=True, db_field="nombre") age = IntField(required=True, db_field="edad") birth_date = DateField(required=True, db_field="fecha_nacimiento") sex = StringField(required=True, db_field="sexo") blood_type = StringField(required=True, db_field="tipo_sangre") emergency_contact_name = StringField(required=True, db_field="nombre_contacto_emergencia") emergency_contact_num = StringField(required=True, db_field="tel_contacto_emergencia") medical_dx = StringField(required=True, db_field="dx_medico") companion = BooleanField(required=True, db_field="acompañante") shelter = BooleanField(required=True, db_field="shelter") quimio = BooleanField(required=True, db_field="quimio") form_history = EmbeddedDocumentListField(FormHistory, required=False, db_field="versiones_formulario") def __str__(self): return f"Patient({self.name + ' ' + self.paternal_last_name})" def __repr__(self): return self.__str__()
class User(Document): gfname = StringField() glname = StringField() email = EmailField() aeriesid = IntField() gid = StringField(unique=True) # App Admin, Student role = StringField() issenior = BooleanField(default=False) admin = BooleanField(default=False) pronouns = StringField() fname = StringField() lname = StringField() image = FileField() birthdate = DateField() personalemail = EmailField() mobile = StringField() address = StringField() city = StringField() state = StringField() zipcode = IntField() socmedia = StringField() nextyr = StringField() invitelist = ListField() meta = {'ordering': ['+glname', '+gfname']}
class User(EmbeddedDocument): name = StringField(max_length=40,min_length=5) email = EmailField() createdAt = DateField() token = DictField() password = StringField(max_length=64) meta = {'collection': 'users'}
class BusinessPatron(Document): __tablename__ = 'business_patron' name = StringField() dob = DateField() gender = ReferenceField(Gender) address1 = StringField() address2 = StringField() city = StringField() state = StringField() country = StringField() phone_number_mobile = StringField() phone_number_office = StringField() phone_number_home = StringField() twitter = StringField() facebook = StringField() instagram = StringField() email = StringField() def __unicode__(self): return self.name def __repr__(self): return self.name def __str__(self): return self.name
class BCCPerson(Document): __tablename__ = 'bcc_person' name = StringField(required=True) member_number = StringField(required=True, unique=True) gender = ReferenceField(Gender) dob = DateField() highest_ed = ReferenceField(EducationLevel) job_title = StringField() place_of_employment = StringField() referrer = StringField() phone_no = StringField(max_length=10) email = StringField(max_length=30) address_1 = StringField(required=True) address_2 = StringField() city = StringField(required=True) state = StringField() parish = StringField() country = StringField(required=True, default='Barbados') postal_code = StringField() def __unicode__(self): return self.name def __repr__(self): return self.name def __str__(self): return """{}-{} """.format(self.name, self.member_number)
class ScopeOfWork(BaseRecord): GB_Counter = IntField(default=0, min_value=0) GB_CounterBillable = IntField(default=0, min_value=0) SOWPicturePath = ImageField(required=True) wrongLocation = BooleanField(default=False) ConcretePatchNeeded = BooleanField(default=False) fkRightSOWID = ReferenceField('self', default=None, dbref=False) # pop-up to fill out blank form fkStatusID = ReferenceField(ScopeOfWorkStatus, required=True, dbref=False) materialsOrderByInspector = StringField() # multiline completedPicturePath = ImageField(default=None) dateFieldEditedStatus = DateField(default=None) timeFieldEditedStatus = DateTimeField(default=None) approvedBilling = BooleanField(default=False) fkInstallerID = ReferenceField(Employee, default=None, dbref=False) fkRequireMaterials = ReferenceField( OrderMaterial, default=None, dbref=False) # should also update the material list in store location fkLocationInStoreID = ReferenceField(LocationInStore, default=None, dbref=False) fkLocationInStoreChangedID = ReferenceField(LocationInStore, default=None, dbref=False) fkWorkOrderID = ReferenceField(WorkOrder, required=True, dbref=False) fkInitialLaborID = ReferenceField(LaborItem, required=True, dbref=False) fkExtraLaborID = ReferenceField(LaborItem, default=None, dbref=False) fkCorrectLaborID = ReferenceField(LaborItem, default=None, dbref=False) meta = {'collection': 'ScopeOfWork'} def __str__(self): return f'{self.fkInitialLaborID.description} x {self.fkInitialLaborID.quantity} {self.fkStatusID}'
class User(Document): # Values copied from the Google Account or input by code. I recommend NOT editing the values in these fields # because you can't edit them in their origins. Instead, I created copies of the fields that I want to give # the user the ability to edit. # First four fields are the user's first name, last name, email and Google ID # that are copied from Google in the User.py routes file. gfname = StringField() glname = StringField() # Mongoengine has several field types like email field that enable you to varify that what the user put in is actually # that type of data like EmailField() below. email = EmailField() # unique is a parameter that is possible on all fields. it is false by default. If you want to make sure that each # vlaue in a field is unique that you need to set this to True. In this case gid is the users googleID and no two # users can have the same gid. gid = StringField(unique=True) # The role value is enterred by the code in the user.py routes based on if the user's email as an 's_' at the beginning. # The roles are "teacher" or "Student" role = StringField() # In the users.py file there is a python list of email addresses of people designated to be "admins" of this app. # so that user has some special privleges. admin = BooleanField() # The following values are all set in the users.py file. these fields can all be edited by the user in the edit profile function. pronouns = StringField() fname = StringField() lname = StringField() # URLField() holds a URL or a link to a webpage image = URLField() # DateField() holds just a date. There is also a DateTimeField() birthdate = DateField() # This is how you set the default sorting. You can also sort records after you retreive them in the route. meta = {'ordering': ['+lname', '+fname']}
class Transaction(DocumentValidation): coin_token = StringField(required=True, choices=get_coin_tokens(s.SYMBOLS_PER_EXCHANGE)) units = DecimalField(required=True, min_value=0, precision=s.SYMBOL_FLOAT_PRECISION) amount = DecimalField(required=True, min_value=0, precision=s.SYMBOL_FLOAT_PRECISION) unit_price = DecimalField(required=True, min_value=0, precision=s.SYMBOL_FLOAT_PRECISION) user = ReferenceField(User, required=True) added_on = DateField(required=True) in_or_out = StringField(required=True, choices=( "in", "out", )) meta = { "collection": "transaction", "ordering": ["-added_on"], } _pre_save_hooks = (_calculate_unit_price, )