Beispiel #1
0
class ContactEvents(db.Model, ManyToManyBaseModel):

    __tablename__ = "contacts_events"

    event_id = db.Column(db.String(5), db.ForeignKey('events.id'))

    contact_id = db.Column(db.String(5), db.ForeignKey("contacts.id"))
Beispiel #2
0
class Image(db.Model, BaseModel):

    __tablename__ = "images"

    name = db.Column(db.String(255))

    path = db.Column(db.String(255))

    contact_id = db.Column(db.String(5), db.ForeignKey('contacts.id'))

    @property
    def imgurl(self):
        return os.path.join(STATIC_URL_PATH, "uploads", "images", self.path)

    @property
    def fullpath(self):
        return os.path.join(IMAGES_DIR, self.path)

    @property
    def as_image(self):
        return '<a href={imgurl}><img width="100" height="100" src="{imgurl}"></img></a>'.format(
            imgurl=self.imgurl)

    def __str__(self):
        return self.path
Beispiel #3
0
class CompaniesContacts(db.Model, ManyToManyBaseModel):

    __tablename__ = 'companies_contacts'

    company_id = db.Column(db.String(5), db.ForeignKey('companies.id'))

    contact_id = db.Column(db.String(5), db.ForeignKey('contacts.id'))
Beispiel #4
0
class KnowledgeBaseCategory(db.Model, BaseModel):

    __tablename__ = "knowledgebase_categories"

    name = db.Column(db.String(255), nullable=False, index=True)

    description = db.Column(db.Text())

    knowledge_bases = db.relationship("KnowledgeBase", backref="category")
Beispiel #5
0
class Event(db.Model, BaseModel):

    __tablename__ = "events"

    __mapper_args__ = {'polymorphic_identity': 'messages'}

    title = db.Column(
        db.String(255),
        nullable=False,
        index=True
    )

    description = db.Column(
        db.Text(),
        default="",
        index=True
    )
    contact_event_status = db.Column(
        db.Enum(ContactEventStatus),
        default=ContactEventStatus.INVITED,
    )
    contacts = db.relationship(
        "Contact",
        secondary="contacts_events",
        backref="events"
    )

    comments = db.relationship(
        "Comment",
        backref="event",
    )

    messages = db.relationship(
        "Message",
        backref="event",
    )

    links = db.relationship(
        "Link",
        backref="event",
    )

    tasks = db.relationship(
        "Task",
        backref="event",
    )
    event_datetime = db.Column(
        db.TIMESTAMP,
        default=datetime.utcnow,
        onupdate=datetime.utcnow,
        nullable=False,
        index=True
    )

    def __str__(self):
        return self.title
Beispiel #6
0
class UsersOrganizations(db.Model, ManyToManyBaseModel):
    """
    Many To Many Through table
    """
    __tablename__ = 'users_organizations'

    user_id = db.Column(db.String(5), db.ForeignKey('users.id'))

    organization_id = db.Column(db.String(5),
                                db.ForeignKey('organizations.id'))
Beispiel #7
0
class ContactsSprints(db.Model, ManyToManyBaseModel):
    """
        Many To Many Through table
    """

    __tablename__ = 'contacts_sprints'

    contact_id = db.Column(db.String(5), db.ForeignKey('contacts.id'))

    sprint_id = db.Column(db.String(5), db.ForeignKey('sprints.id'))
Beispiel #8
0
class ContactsProjects(db.Model, ManyToManyBaseModel):
    """
        Many To Many Through Table
    """

    __tablename__ = 'contacts_projects'

    contact_id = db.Column(db.String(5), db.ForeignKey('contacts.id'))

    project_id = db.Column(db.String(5), db.ForeignKey('projects.id'))
Beispiel #9
0
class CompanyTags(db.Model, ManyToManyBaseModel):
    __tablename__ = "companies_tags"

    tag_id = db.Column(
        db.String(5),
        db.ForeignKey('tags.id')
    )

    company_id = db.Column(
        db.String(5),
        db.ForeignKey("companies.id")
    )
Beispiel #10
0
class KnowledgeBase(db.Model, BaseModel):

    __tablename__ = "knowledgebases"

    title = db.Column(db.String(255), nullable=False, index=True)

    category_id = db.Column(db.String(5),
                            db.ForeignKey("knowledgebase_categories.id"))

    author_id = db.Column(db.String(5), db.ForeignKey("users.id"))

    content = db.Column(db.Text(), index=True)

    tasks = db.relationship("Task", backref="knowledge_base")

    comments = db.relationship("Comment", backref="knowledge_base")
Beispiel #11
0
class TaskTracking(db.Model, BaseModel):

    __tablename__ = "tasktrackings"

    # should be markdown.
    remarks = db.Column(
        db.Text()
    )

    time_done = db.Column(
        db.Integer,
        default=0
    )

    def __str__(self):
        return "<TaskTracker %s>" % self.id
Beispiel #12
0
class Address(db.Model, BaseModel):

    __tablename__ = "addresses"

    street_number = db.Column(db.String(255), index=True)

    street_name = db.Column(db.String(255), default="", index=True)

    description = db.Column(db.Text(), default="", index=True)

    city = db.Column(db.Text(), default="", index=True)

    state = db.Column(db.Text(), default="", index=True)

    zip_code = db.Column(db.String(255), index=True)

    country_id = db.Column(db.String(5), db.ForeignKey('countries.id'))

    contact_id = db.Column(db.String(5), db.ForeignKey('contacts.id'))

    company_id = db.Column(db.String(5), db.ForeignKey('companies.id'))

    deal_id = db.Column(db.String(5), db.ForeignKey('deals.id'))

    @property
    def formatted_address(self):
        address = ''
        if self.street_name:
            if self.street_number:
                address += '%s %s, ' % (self.street_number, self.street_name)
            else:
                address += '%s, ' % self.street_name

        if self.state:
            address += '%s, ' % self.state
        if self.city:
            address += '%s, ' % self.city
        if self.country:
            address += str(self.country.name)

        if self.zip_code:
            address += ' (zip code: %s)' % self.zip_code

        return address

    def __str__(self):
        return self.formatted_address
Beispiel #13
0
class Organization(db.Model, BaseModel, RootModel):

    __tablename__ = "organizations"

    name = db.Column(db.String(255), nullable=False, index=True)

    # should be markdown
    description = db.Column(db.Text(), default="", index=True)

    emails = db.relationship(
        'Email',
        backref='organization',
        primaryjoin="Organization.id==Email.organization_id")

    tasks = db.relationship("Task", backref="organization")

    comments = db.relationship("Comment", backref="organization")

    users = db.relationship(
        "User",
        secondary="users_organizations",
        secondaryjoin="User.id==UsersOrganizations.user_id",
        backref="organizations")

    links = db.relationship("Link", backref="organization")

    messages = db.relationship("Message", backref="organization")

    owner_id = db.Column(db.String(5), db.ForeignKey('users.id'))

    parent_id = db.Column(db.String(5), db.ForeignKey("organizations.id"))

    @property
    def notification_emails(self):
        """
        :return: list of all emails to send notifications to
        :rtype: list
        """
        return [e.email for e in self.emails]

    def __str__(self):
        return self.name
Beispiel #14
0
class Sprint(db.Model, BaseModel, RootModel):

    __tablename__ = "sprints"

    name = db.Column(db.String(255), nullable=False, index=True)

    # should be markdown.
    description = db.Column(db.Text(), default="", index=True)

    start_date = db.Column(db.TIMESTAMP, index=True)

    deadline = db.Column(db.TIMESTAMP, index=True)

    contacts = db.relationship("Contact",
                               secondary="contacts_sprints",
                               backref="sprints")

    tasks = db.relationship("Task", backref="sprint")

    comments = db.relationship("Comment", backref="sprint")

    links = db.relationship("Link", backref="sprint")

    messages = db.relationship("Message", backref="sprint")

    owner_id = db.Column(db.String(5), db.ForeignKey('users.id'))

    project_id = db.Column(db.String(5), db.ForeignKey('projects.id'))

    def notify(self, msgobj, attachments=[]):
        emails = []
        for c in self.contacts:
            if c.emails:
                emails.extend(c.emails.split(","))
        if self.owner and self.owner.emails:
            emails.extend(self.owner.emails.split(","))
        sendemail(to=emails,
                  subject=msgobj.title,
                  body=msgobj.content,
                  attachments=attachments)

    @property
    def percentage_done(self):
        pass

    @property
    def hours_open(self):
        pass

    @property
    def hours_open_person_avg(self):
        pass

    @property
    def hours_open_person_max(self):
        pass

    def __str__(self):
        return self.name
Beispiel #15
0
class Subgroup(db.Model, BaseModel):
    __tablename__ = "subgroups"

    groupname = db.Column(db.Enum(SubgroupName),
                          default=SubgroupName.MEMBER,
                          index=True)

    contacts = db.relationship("Contact",
                               secondary="contacts_subgroups",
                               backref="subgroups")

    def __str__(self):
        return self.groupname.name
Beispiel #16
0
class Project(db.Model, BaseModel, RootModel):

    __tablename__ = "projects"

    name = db.Column(db.String(255), nullable=False, index=True)

    # should be markdown.
    description = db.Column(db.Text(), default="", index=True)

    start_date = db.Column(db.TIMESTAMP, index=True)

    deadline = db.Column(db.TIMESTAMP, index=True)

    comments = db.relationship("Comment", backref="project")

    links = db.relationship("Link", backref="project")

    tasks = db.relationship("Task", backref="project")

    messages = db.relationship("Message", backref="project")

    sprints = db.relationship("Sprint",
                              backref="project",
                              primaryjoin="Project.id==Sprint.project_id")

    # alert_source_id = db.Column(
    #     db.String,
    #     db.ForeignKey("alertsources.id")
    # )

    contacts = db.relationship("Contact",
                               secondary="contacts_projects",
                               backref=db.backref("projects"))

    promoter_id = db.Column(db.String(5), db.ForeignKey('users.id'))

    guardian_id = db.Column(db.String(5), db.ForeignKey('users.id'))

    def notify(self, msgobj, attachments=[]):
        emails = []
        for c in self.contacts:
            emails.extend(c.emails.split(","))
        if self.promoter and self.promoter.emails:
            emails.extend(self.promoter.emails.split(","))
        if self.guardian and self.guardian.emails:
            emails.extend(self.guardian.emails.split(","))
        if emails:
            sendemail(to=emails,
                      subject=msgobj.title,
                      body=msgobj.content,
                      attachments=attachments)

    @property
    def percentage_done(self):
        pass

    def __str__(self):
        return self.name
Beispiel #17
0
class Activity(db.Model, BaseModel):
    __tablename__ = "activities"

    type = db.Column(
        db.Enum(ActivityType),
        index=True,
        unique=True,
    )

    contacts = db.relationship("Contact",
                               secondary="contacts_activities",
                               backref="activities")

    def __str__(self):
        return self.type.name
Beispiel #18
0
class Tag(db.Model, BaseModel):
    """
    Model for any kind of tags
    """

    __tablename__ = "tags"

    tag = db.Column(db.String(), nullable=False, unique=True, index=True)

    companies = db.relationship("Company",
                                secondary="companies_tags",
                                backref="tags")

    def __str__(self):
        return self.tag
Beispiel #19
0
class Company(db.Model, BaseModel, RootModel):

    __tablename__ = "companies"

    name = db.Column(db.String(255), nullable=False, index=True)

    # should be markdown.
    description = db.Column(db.Text(), default="", index=True)

    vatnumber = db.Column(db.String(255), index=True)

    website = db.Column(db.String(255), index=True)

    emails = db.relationship('Email',
                             backref='company',
                             primaryjoin="Company.id==Email.company_id")

    telephones = db.relationship('Phone',
                                 backref='company',
                                 primaryjoin="Company.id==Phone.company_id")

    deals = db.relationship("Deal", backref="company")

    messages = db.relationship("Message", backref="company")

    tasks = db.relationship("Task", backref="company")

    comments = db.relationship("Comment", backref="company")

    contacts = db.relationship(
        "Contact",
        secondary="companies_contacts",
        backref='companies',
    )

    owner_id = db.Column(db.String(5), db.ForeignKey('users.id'))

    ownerbackup_id = db.Column(db.String(5), db.ForeignKey('users.id'))

    links = db.relationship("Link", backref="company")

    addresses = db.relationship("Address", backref="company")

    @property
    def notification_emails(self):
        """
        :return: list of all emails to send notifications to
        :rtype: list
        """
        return [e.email for e in self.emails]

    def __str__(self):
        return self.name
Beispiel #20
0
class Country(db.Model, BaseModel):

    __tablename__ = "countries"

    name = db.Column(db.Enum(CountriesEnum),
                     default=CountriesEnum.BE,
                     unique=True,
                     index=True)

    contacts = db.relationship("Contact",
                               secondary="contacts_countries",
                               backref="countries")

    addresses = db.relationship("Address", backref="country")

    passports = db.relationship("Passport", backref="country")

    def __str__(self):
        return self.name.value
Beispiel #21
0
class Passport(db.Model, BaseModel):

    __tablename__ = "passports"

    passport_fullname = db.Column(db.String(255), nullable=False, index=True)

    passport_number = db.Column(db.Text(), index=True, nullable=False)

    issuance_date = db.Column(db.Date(),
                              default=datetime.date(1990, 1, 1),
                              nullable=False)
    expiration_date = db.Column(db.Date(),
                                default=datetime.date(2020, 1, 1),
                                nullable=False)
    country_id = db.Column(db.String(5), db.ForeignKey('countries.id'))

    contact_id = db.Column(db.String(5), db.ForeignKey('contacts.id'))

    def __str__(self):
        return "Passport {}".format(self.passport_fullname)
Beispiel #22
0
class Contact(db.Model, BaseModel, RootModel):

    __tablename__ = "contacts"

    firstname = db.Column(db.String(255), nullable=False, index=True)

    lastname = db.Column(db.String(255), default="", index=True)
    description = db.Column(db.Text())

    images = db.relationship("Image", backref="contact")

    bio = db.Column(db.Text(), default="")

    belief_statement = db.Column(db.Text(), default="")
    gender = db.Column(db.Enum(Gender), default=Gender.MALE, index=True)
    date_of_birth = db.Column(db.Date(),
                              default=datetime.date(1990, 1, 1),
                              nullable=True)

    message_channels = db.Column(db.String(255), default='')

    deals = db.relationship("Deal",
                            backref="contact",
                            primaryjoin="Contact.id==Deal.contact_id")

    comments = db.relationship("Comment", backref="contact")

    tasks = db.relationship("Task", backref="contact")

    messages = db.relationship("Message", backref="contact")

    links = db.relationship("Link", backref="contact")

    owner_id = db.Column(db.String(5), db.ForeignKey('users.id'))

    ownerbackup_id = db.Column(db.String(5), db.ForeignKey('users.id'))

    parent_id = db.Column(db.String(5), db.ForeignKey('users.id'))

    # Comma  separated emails
    emails = db.Column(db.Text(), index=True)

    # Comma separated phones
    telephones = db.Column(db.Text(), index=True)

    tf_app = db.Column(db.Boolean())

    tf_web = db.Column(db.Boolean())

    referral_code = db.Column(db.String(255), )

    addresses = db.relationship("Address", backref="contact")

    passports = db.relationship("Passport", backref="contact")

    def notify(self, msgobj=None, attachments=[]):
        emails = []
        if self.emails:
            emails.extend(self.emails.split(","))
            if self.owner and self.owner.emails:
                emails.extend(self.owner.emails.split(","))
            sendemail(to=emails,
                      subject=msgobj.title,
                      body=msgobj.content,
                      attachments=attachments)

    @property
    def address(self):
        return "{} {} {}".format(
            self.street_number or '',
            '%s,' % self.street_name if self.street_name else '',
            self.country).strip()

    def __str__(self):
        return "{} {}".format(self.firstname, self.lastname or '').strip()
Beispiel #23
0
class ContactCountry(db.Model, ManyToManyBaseModel):
    __tablename__ = "contacts_countries"

    country_id = db.Column(db.String(5), db.ForeignKey('countries.id'))

    contact_id = db.Column(db.String(5), db.ForeignKey("contacts.id"))
Beispiel #24
0
class ContactSubgroup(db.Model, ManyToManyBaseModel):
    __tablename__ = "contacts_subgroups"

    subgroup_id = db.Column(db.String(5), db.ForeignKey('subgroups.id'))

    contact_id = db.Column(db.String(5), db.ForeignKey("contacts.id"))
Beispiel #25
0
class Message(db.Model, BaseModel):

    __tablename__ = "messages"

    title = db.Column(
        db.String(255),
        nullable=False,
        index=True
    )

    content = db.Column(
        db.Text(),
        nullable=False,
        index=True
    )

    channel = db.Column(
        db.String(255)
    )

    time_sent = db.Column(
        db.TIMESTAMP
    )

    message_author_id = db.Column(
        db.String,
        db.ForeignKey("users.id")
    )
    author = db.relationship(
        "User",
        backref="createdMessages",
        uselist=False,
        foreign_keys=[message_author_id]
    )

    company_id = db.Column(
        db.String,
        db.ForeignKey("companies.id")
    )

    contact_id = db.Column(
        db.String,
        db.ForeignKey("contacts.id")
    )

    user_id = db.Column(
        db.String,
        db.ForeignKey("users.id")
    )

    deal_id = db.Column(
        db.String,
        db.ForeignKey("deals.id")
    )

    task_id = db.Column(
        db.String,
        db.ForeignKey("tasks.id")
    )

    organization_id = db.Column(
        db.String,
        db.ForeignKey("organizations.id")
    )

    project_id = db.Column(
        db.String,
        db.ForeignKey("projects.id")
    )

    sprint_id = db.Column(
        db.String,
        db.ForeignKey("sprints.id")
    )

    event_id = db.Column(
        db.String,
        db.ForeignKey("events.id")
    )

    links = db.relationship(
        "Link",
        backref="message"
    )

    state = db.Column(
        db.Enum(MessageState),
        default=MessageState.TOSEND,
        index=True
    )

    parent_id = db.Column(
        db.String(5),
        db.ForeignKey('messages.id')
    )

    author_original_type = db.Column(
        db.Unicode(255)
    )

    author_original_id = db.Column(
        db.Integer,
    )

    author_original = generic_relationship(
        author_original_type,
        author_original_id
    )

    author_last_id = db.Column(
        db.Integer,
    )

    author_last = generic_relationship(
        author_original_type,
        author_original_id
    )

    @property
    def parent(self):
        if self.parent_id:
            return self.__class__.query.filter_by(id=self.parent_id).first()

    replies = db.relationship(
        "Message",
        uselist=True,

    )

    # ',' separated string of emails
    # Is used to force sending emails to certain destination
    # If not set, `notification_emails` is used instead to calculate
    # ALl email addresses
    forced_destinations = db.Column(
        db.String,
    )

    @property
    def notification_emails(self):
        """
        :return: list of all emails to send notifications to
        :rtype: list
        """
        if self.forced_destinations:
            return [d.strip() for d in self.forced_destinations.split(',') if d]

        obj = None

        if self.user:
            obj = self.user
        elif self.contact:
            obj = self.contact
        elif self.company:
            obj = self.company
        elif self.organization:
            obj = self.organization
        elif self.deal: # contact emails or company emails
            obj = self.deal
        elif self.task: # assignee + one of these if found (contact, users, deal, company, organization, event, sprint)
            obj = self.task
        elif self.project: # promoter + guardian + contacts + one of (tasks, sprints)
            obj = self.project
        elif self.event: # All contacts emails + All tasks emails
            obj = self.event
        elif self.sprint: # contacts + owner + tasks
            obj = self.sprint

        if not obj:
            return []

        return list(set(obj.notification_emails))

    def __str__(self):
        return self.title
Beispiel #26
0
class Contact(db.Model, BaseModel, RootModel):

    __tablename__ = "contacts"

    firstname = db.Column(db.String(255), nullable=False, index=True)

    lastname = db.Column(db.String(255), default="", index=True)
    description = db.Column(db.Text())

    images = db.relationship("Image", backref="contact")

    bio = db.Column(db.Text(), default="")

    belief_statement = db.Column(db.Text(), default="")
    gender = db.Column(db.Enum(Gender), default=Gender.MALE, index=True)
    date_of_birth = db.Column(db.Date(),
                              default=datetime.date(1990, 1, 1),
                              nullable=True)

    message_channels = db.Column(db.String(255), default='')

    deals = db.relationship("Deal",
                            backref="contact",
                            primaryjoin="Contact.id==Deal.contact_id")

    comments = db.relationship("Comment", backref="contact")

    tasks = db.relationship("Task", backref="contact")

    messages = db.relationship("Message", backref="contact")

    links = db.relationship("Link", backref="contact")

    owner_id = db.Column(db.String(5), db.ForeignKey('users.id'))

    ownerbackup_id = db.Column(db.String(5), db.ForeignKey('users.id'))

    parent_id = db.Column(db.String(5), db.ForeignKey('users.id'))

    emails = db.relationship('Email',
                             backref='contact',
                             primaryjoin="Contact.id==Email.contact_id")

    telephones = db.relationship('Phone',
                                 backref='contact',
                                 primaryjoin="Contact.id==Phone.contact_id")

    tf_app = db.Column(db.Boolean())

    tf_web = db.Column(db.Boolean())

    referral_code = db.Column(db.String(255), )

    addresses = db.relationship("Address", backref="contact")

    passports = db.relationship("Passport", backref="contact")

    @property
    def notification_emails(self):
        """
        :return: list of all emails to send notifications to
        :rtype: list
        """
        return [e.email for e in self.emails]

    @property
    def address(self):
        return "{} {} {}".format(
            self.street_number or '',
            '%s,' % self.street_name if self.street_name else '',
            self.country).strip()

    def __str__(self):
        return "{} {}".format(self.firstname, self.lastname or '').strip()
Beispiel #27
0
class ContactActivity(db.Model, ManyToManyBaseModel):
    __tablename__ = "contacts_activities"

    activity_id = db.Column(db.String(5), db.ForeignKey('activities.id'))

    contact_id = db.Column(db.String(5), db.ForeignKey("contacts.id"))
Beispiel #28
0
class User(db.Model, BaseModel, RootModel):

    __tablename__ = "users"

    username = db.Column(db.String(255),
                         unique=True,
                         nullable=True,
                         index=True)

    firstname = db.Column(db.String(255), index=True)

    lastname = db.Column(db.String(255), index=True)

    # should be markdown.
    description = db.Column(db.Text(), default="")

    message_channels = db.Column(db.String(255), default='')

    # Comma  separated emails
    emails = db.Column(db.Text(), index=True)

    # Comma separated phones
    telephones = db.Column(db.Text(), index=True)

    # Tasks Linked to this user (may be someone is doing it for him) like
    # create account
    tasks = db.relationship("Task",
                            backref="user",
                            primaryjoin="User.id==Task.user_id")

    ownsTasks = db.relationship("Task",
                                backref="assignee",
                                primaryjoin="User.id==Task.assignee_id")

    comments = db.relationship("Comment",
                               backref="user",
                               primaryjoin="User.id==Comment.user_id")

    messages = db.relationship("Message",
                               backref="user",
                               primaryjoin="User.id==Message.user_id")

    links = db.relationship("Link",
                            backref="user",
                            primaryjoin="User.id==Link.user_id")

    ownsContacts = db.relationship("Contact",
                                   backref="owner",
                                   primaryjoin="User.id==Contact.owner_id")

    ownsAsBackupContacts = db.relationship(
        "Contact",
        backref="ownerbackup",
        primaryjoin="User.id==Contact.ownerbackup_id")

    ownsCompanies = db.relationship("Company",
                                    backref="owner",
                                    primaryjoin="User.id==Company.owner_id")

    ownsAsBackupCompanies = db.relationship(
        "Company",
        backref="ownerbackup",
        primaryjoin="User.id==Company.ownerbackup_id")

    ownsOrganizations = db.relationship(
        "Organization",
        backref="owner",
        primaryjoin="User.id==Organization.owner_id")

    ownsSprints = db.relationship("Sprint",
                                  backref="owner",
                                  primaryjoin="User.id==Sprint.owner_id")

    # ownsAlerts = db.relationship(
    #     "Alert",
    #     backref="owner",
    #     primaryjoin="User.id==Alert.owner_id"
    # )

    promoterProjects = db.relationship(
        "Project",
        backref="promoter",
        primaryjoin="User.id==Project.promoter_id")

    guardianProjects = db.relationship(
        "Project",
        backref="guardian",
        primaryjoin="User.id==Project.guardian_id")

    knowledge_bases = db.relationship(
        "KnowledgeBase",
        backref="author",
        primaryjoin="User.id==KnowledgeBase.author_id")

    def notify(self, msgobj=None, attachments=[]):
        if self.emails:
            emails = self.emails.split(",")
            if emails:
                sendemail(to=emails,
                          subject=msgobj.title,
                          body=msgobj.content,
                          attachments=attachments)

    def __str__(self):
        return self.username or '%s %s'.strip() % (self.firstname
                                                   or '', self.lastname or '')

    __repr__ = __str__
Beispiel #29
0
class Message(db.Model, BaseModel):

    __tablename__ = "messages"

    title = db.Column(db.String(255), nullable=False, index=True)

    content = db.Column(db.Text(), index=True)

    channel = db.Column(db.String(255))

    time_tosend = db.Column(db.TIMESTAMP)

    time_sent = db.Column(db.TIMESTAMP)
    message_author_id = db.Column(db.String, db.ForeignKey("users.id"))
    author = db.relationship("User",
                             backref="createdMessages",
                             uselist=False,
                             foreign_keys=[message_author_id])

    company_id = db.Column(db.String, db.ForeignKey("companies.id"))

    contact_id = db.Column(db.String, db.ForeignKey("contacts.id"))

    user_id = db.Column(db.String, db.ForeignKey("users.id"))

    deal_id = db.Column(db.String, db.ForeignKey("deals.id"))

    task_id = db.Column(db.String, db.ForeignKey("tasks.id"))

    organization_id = db.Column(db.String, db.ForeignKey("organizations.id"))

    project_id = db.Column(db.String, db.ForeignKey("projects.id"))

    sprint_id = db.Column(db.String, db.ForeignKey("sprints.id"))

    event_id = db.Column(db.String, db.ForeignKey("events.id"))

    links = db.relationship("Link", backref="message")
    state = db.Column(db.Enum(MessageState),
                      default=MessageState.TOSEND,
                      index=True)

    def __str__(self):
        return self.title

    @property
    def destination(self):
        emails = []
        if self.user:
            emails.extend(self.user.emails.split(','))

        if self.contact:
            emails.extend(self.contact.emails.split(','))

        if self.company:
            emails.extend(self.company.emails.split(','))

        if self.organization:
            emails.extend(self.organization.emails.split(','))

        return emails

    @property
    def destination_emails(self):

        emails = self.destination
        if emails:
            return ",".join([x.email for x in self.destination])
        return "Not destination yet."
Beispiel #30
0
class Link(db.Model, BaseModel):

    __tablename__ = "links"

    url = db.Column(
        db.String(255),
        nullable=False,
        index=True
    )

    labels = db.Column(
        db.Text(),
        index=True
    )

    contact_id = db.Column(
        db.String,
        db.ForeignKey("contacts.id")
    )

    user_id = db.Column(
        db.String,
        db.ForeignKey("users.id")
    )

    deal_id = db.Column(
        db.String,
        db.ForeignKey("deals.id")
    )

    task_id = db.Column(
        db.String,
        db.ForeignKey("tasks.id")
    )

    organization_id = db.Column(
        db.String,
        db.ForeignKey("organizations.id")
    )

    project_id = db.Column(
        db.String,
        db.ForeignKey("projects.id")
    )

    sprint_id = db.Column(
        db.String,
        db.ForeignKey("sprints.id")
    )

    company_id = db.Column(
        db.String,
        db.ForeignKey("companies.id")
    )
    event_id = db.Column(
        db.String,
        db.ForeignKey("events.id")
    )
    message_id = db.Column(
        db.String(),
        db.ForeignKey("messages.id")
    )

    # alert_id = db.Column(
    #     db.String,
    #     db.ForeignKey("alerts.id")
    # )
    #
    # alert_source_id = db.Column(
    #     db.String,
    #     db.ForeignKey("alertsources.id")
    # )

    comments = db.relationship(
        "Comment",
        backref="link"
    )

    def __str__(self):
        return self.url