Exemple #1
0
class PersonLink(models.Model):
    id = UuidField(primary_key=True)
    person = models.OneToOneField(Person)
    relation = models.ForeignKey(Relation)
    responsible = models.BooleanField(default=False)
    def __unicode__(self):
        return u"%s" % self.person.name
Exemple #2
0
class AdmissionReferral(models.Model):
    id = UuidField(primary_key=True)
    referral_choice = models.ForeignKey(ReferralChoice)
    referral_organization = models.ForeignKey(Organization, null=True)
    referral_professional = models.ForeignKey(CareProfessional, null=True)
    signed_bythe_client = models.BooleanField(default=False)
    client = models.ForeignKey(Client)
    date = models.DateTimeField(auto_now_add=True)

    objects = AdmissionManager()
    objects_inrange = AdmissionInRangeManager()

    def __unicode__(self):
        return u'%s' % self.client

    def revision(self):
        return reversion.get_for_object(self).order_by(
            '-revision__date_created').latest(
                'revision__date_created').revision

    def revision_created(self):
        return reversion.get_for_object(self).order_by(
            'revision__date_created').latest('revision__date_created').revision

    def created_revision(self):
        return self.revision_created().date_created

    def _created(self):
        return self.date

    created = property(_created)
Exemple #3
0
class Device(models.Model):
    """
    The class C{Device} is used to represent devices in the context of the GestorPsi project. Using this class,
    the user is able to query the quantity of some kind of device currently available as well as the number of existing
    devices of the underlying type.
    @version: 1.0
    """
    id = UuidField(primary_key=True)
    description = models.CharField(max_length=80)
    organization = models.ForeignKey(Organization, null=True)

    def get_all_device_details(self):
        return DeviceDetails.objects.filter(device__id=self.id)

    def __unicode__(self):
        return u"%s" % (self.description)

    def revision(self):
        return reversion.get_for_object(self).order_by(
            '-revision__date_created').latest(
                'revision__date_created').revision

    class Meta:
        ordering = ['description']
        permissions = (
            ("device_add", "Can add devices"),
            ("device_change", "Can change devices"),
            ("device_list", "Can list devices"),
            ("device_write", "Can write devices"),
        )
Exemple #4
0
class ServiceGroup(models.Model):
    id = UuidField(primary_key=True)
    service = models.ForeignKey(Service, null=False, blank=False)
    members = models.ManyToManyField(Client,
                                     null=True,
                                     blank=True,
                                     through='GroupMembers')
    description = models.CharField(max_length=100)
    comments = models.TextField(blank=True)
    active = models.BooleanField(default=True)

    def __unicode__(self):
        return u'%s' % (self.description)

    class Meta:
        ordering = ['-active', 'service__name', 'description']

    def charged_members(self):
        from gestorpsi.referral.models import ReferralDischarge
        members = []
        for i in self.groupmembers_set.all():
            if not ReferralDischarge.objects.filter(client=i.client,
                                                    referral=i.referral):
                members.append(i)
        return members

    def revision(self):
        return reversion.get_for_object(self).order_by(
            '-revision__date_created').latest(
                'revision__date_created').revision
Exemple #5
0
class Phone(models.Model):
    """
    This class holds information related to phone numbers.
    @author: Sergio Durand
    @version: 1.0
    @see: PhoneType
    """
    id = UuidField(primary_key=True)
    area = models.CharField(max_length=2)
    phoneNumber = models.CharField(max_length=10)
    ext = models.CharField(max_length=4, blank=True)
    phoneType = models.ForeignKey(PhoneType)
    # Generic Relationship
    content_type = models.ForeignKey(ContentType)
    object_id = models.CharField(max_length=36)
    content_object = generic.GenericForeignKey()

    def __cmp__(self, other):
        if (self.area == other.area) and \
           (self.phoneNumber == other.phoneNumber) and \
           (self.ext == other.ext) and \
           (self.phoneType == other.phoneType):
            return 0
        else:
            return 1

    def __unicode__(self):
        return "(%s) %s %s" % (self.area, self.phoneNumber, self.phoneType)
Exemple #6
0
class ReferralDischarge(models.Model):
    id = UuidField(primary_key=True)
    referral = models.ForeignKey(Referral, null=False, blank=False)
    client = models.ForeignKey(Client, null=True, blank=True)
    date = models.DateTimeField(auto_now_add=True)
    was_discussed_with_client = models.BooleanField(
        _('Was Discussed With Client'), default=False)
    #reason = models.CharField(_('Discharge Reason'), max_length=2, blank=True, null=True, choices=REFERRAL_DISCHARGE_TYPE)
    reason = models.ForeignKey('ReferralDischargeReason',
                               verbose_name=_(u'Discharge Reason'),
                               blank=True,
                               null=True)
    details = models.TextField(blank=True)
    status = models.CharField(_('Status'),
                              max_length=2,
                              blank=True,
                              null=True,
                              choices=REFERRAL_DISCHARGE_STATUS)
    description = models.TextField(blank=True)

    def __unicode__(self):
        return u'%s - %s' % (self.client, self.referral.service)

    class Meta:
        ordering = ['-date', 'client']
Exemple #7
0
class Ticket(models.Model):
    """
    This class register tickets supports.
    @author: Fabio A Martins
    @version: 1.0
    """
    id = UuidField(primary_key=True)
    user = models.ForeignKey(Person, null=True)
    contact_name = models.CharField(max_length=255)
    contact_email = models.CharField(max_length=255)
    contact_phone = models.CharField(max_length=255)
    ticket_id = models.IntegerField(max_length=8)
    question = models.TextField()
    status = models.IntegerField(max_length=1, choices=STATUS, default=1)
    date = models.DateTimeField(auto_now=True, editable=True)

    class Meta:
        ordering = ['-date']

    def __unicode__(self):
        return "%s %s" % (self.ticket_id, self.question)

    def revision(self):
        return reversion.get_for_object(self).order_by(
            '-revision__date_created').latest(
                'revision__date_created').revision

    def save(self, force_insert=False, force_update=False):
        self.ticket_id = len(Ticket.objects.all()) + 1
        super(Ticket, self).save(force_insert, force_update)
Exemple #8
0
class Document(models.Model):
    id = UuidField(primary_key=True)
    typeDocument = models.ForeignKey(TypeDocument)
    document = models.CharField(max_length=20)
    issuer = models.ForeignKey(Issuer, null=True, blank=True)
    state = models.ForeignKey(State, null=True, blank=True)

    content_type = models.ForeignKey(ContentType)
    object_id = models.CharField(max_length=36)
    content_object = generic.GenericForeignKey()

    def __cmp__(self, other):
        if (self.typeDocument == other.typeDocument) and \
           (self.document == other.document) and \
           (self.issuer == other.issuer) and \
           (self.state == other.state):
            return 0
        else:
            return 1

    def __unicode__(self):
        text = u"%s %s" % (self.typeDocument, self.document)
        if self.issuer != None:
            text += u" %s" % self.issuer
        if self.state != None:
            text += u" %s" % self.state.shortName
        return text
Exemple #9
0
class Sponsor(models.Model):
    """    
    This class represents a sponsor of organizations. 
    This sponsor doesn't need to exist before of organization.       
    @author: Danilo S. Sanches
    @version: 1.0 
    """
    id = UuidField(primary_key=True)
    name = models.CharField(max_length=100)
    companyID = models.CharField(max_length=100, null=True)
    healthRegion = models.CharField(max_length=10, null=True)
    bankBranch = models.CharField(max_length=10, null=True)
    account = models.CharField(max_length=15, null=True)

    taxWithHold = models.OneToOneField(TaxWithHold, null=True)

    phones = generic.GenericRelation(Phone, null=True)
    address = generic.GenericRelation(Address, null=True)
    emails = generic.GenericRelation(Email, null=True)
    sites = generic.GenericRelation(Site, null=True)
    instantMessengers = generic.GenericRelation(InstantMessenger, null=True)

    organization = models.ForeignKey(Organization, null=True)

    def __unicode__(self):
        """
        returns a representation of this sponsor as an unicode  C{string}.
        """
        return self.name

    class Meta:
        ordering = ['name']
Exemple #10
0
	def setUp(self):
		self.person = Person(name="personTest")
		uuidField = UuidField(verbose_name="verbose_name_Test", name="nameTest")
		self.employee = Employee(person=self.person, hiredate="HiredateTest", job="JobTest", active=True)
		
		self.hiredate = "hiredateTest"
		self.job = "jobTest"
		self.active = False
Exemple #11
0
class ProfessionalResponsible(models.Model):
    """    
    This class represents the professional and Subscription of the Organization
    @author: Tiago de Souza Moraes
    @version: 1.0 
    """
    id = UuidField(primary_key=True)
    name = models.CharField(max_length=50,
                            default="",
                            null=True,
                            blank=True,
                            editable=False)
    subscription = models.CharField(max_length=50,
                                    null=True,
                                    blank=True,
                                    default="")
    organization_subscription = models.CharField(max_length=50,
                                                 null=True,
                                                 blank=True,
                                                 default="")
    organization = models.ForeignKey('Organization', null=False, blank=False)
    profession = models.ForeignKey('careprofessional.Profession',
                                   null=True,
                                   blank=False)

    def __empty__(self):
        return ''

    area = property(__empty__)
    addressPrefix = property(__empty__)
    addressLine1 = property(__empty__)
    addressLine2 = property(__empty__)
    addressNumber = property(__empty__)
    neighborhood = property(__empty__)
    zipCode = property(__empty__)
    addressType = property(__empty__)

    class Meta:
        ordering = ['name']

    def __unicode__(self):
        return u"%s" % self.name

    def __str__(self):
        return u"%s" % self.name

    def revision(self):
        return reversion.get_for_object(self).order_by(
            '-revision__date_created').latest(
                'revision__date_created').revision

    def save(self, *args, **kwargs):
        super(ProfessionalResponsible, self).save(*args, **kwargs)
Exemple #12
0
class ReferralReferral(models.Model):
    id = UuidField(primary_key=True)
    referral_choice = models.ForeignKey(ReferralChoice)
    referral_organization = models.ForeignKey(Organization, null=True)
    referral_professional = models.ForeignKey(CareProfessional, null=True)
    client = models.ForeignKey(Client)

    def __unicode__(self):
        return u"%s" % self.referral_choice

    def revision(self):
        return reversion.get_for_object(self).order_by(
            '-revision__date_created').latest(
                'revision__date_created').revision
Exemple #13
0
class Covenant(models.Model):
    id = UuidField(primary_key=True)
    date_join = models.DateField(auto_now_add=True, null=False, editable=False)
    name = models.CharField(_(u'Name'),
                            max_length=250,
                            null=False,
                            blank=False)
    active = models.BooleanField(u'Disponível', default=True)
    category = models.IntegerField(u'Categoria',
                                   choices=CATEGORY,
                                   null=False,
                                   blank=False)
    charge = models.IntegerField(u'Cobrança',
                                 choices=CHARGE,
                                 null=False,
                                 blank=False)
    payment_way = models.ManyToManyField(PaymentWay, null=False, blank=False)
    event_time = models.PositiveIntegerField(
        u'Número de eventos', null=True,
        blank=True)  # if charge=2, show this field
    price = models.DecimalField(u'Valor',
                                max_digits=6,
                                decimal_places=2,
                                null=False,
                                blank=False)
    description = models.TextField(u'Descrição', null=True, blank=True)
    organization = models.ForeignKey(Organization,
                                     editable=False,
                                     null=False,
                                     blank=False)

    def __unicode__(self):
        # return need show as this format, relation m2m.
        if self.event_time:
            return u"%s - %s (%s) - R$%s" % (self.name,
                                             self.get_charge_display(),
                                             self.event_time, self.price)
        else:
            return u"%s - %s - R$%s" % (self.name, self.get_charge_display(),
                                        self.price)

    def save(self, *args, **kwargs):
        if not self.charge == 2:
            self.event_time = None
        super(Covenant, self).save(*args, **kwargs)

    class Meta:
        ordering = ['name']
Exemple #14
0
class Address(models.Model):
    # Brazil Address
    id= UuidField( primary_key= True )
    addressPrefix = models.CharField(max_length=10)
    addressLine1 = models.CharField(max_length=50, blank=True)
    addressLine2 = models.CharField(max_length=50, blank=True)
    addressNumber = models.CharField(max_length=10, blank=True)
    neighborhood = models.CharField(max_length=30, blank=True)
    zipCode = models.CharField(max_length=10, blank=True)
    addressType = models.ForeignKey(AddressType)
    city = models.ForeignKey(City, null=True)
    # Foreign Address
    foreignCountry = models.ForeignKey(Country, null=True)
    foreignState   = models.CharField(max_length=20, blank=True)
    foreignCity    = models.CharField(max_length=50, blank=True)
    # Generic Relationship
    content_type = models.ForeignKey(ContentType)
    object_id = models.CharField(max_length=36)
    content_object = generic.GenericForeignKey()
    
    def __cmp__(self, other):
        if (self.addressPrefix == other.addressPrefix) and \
           (self.addressLine1 == other.addressLine1) and \
           (self.addressLine2 == other.addressLine2) and \
           (self.addressNumber == other.addressNumber) and \
           (self.neighborhood == other.neighborhood) and \
           (self.zipCode == other.zipCode) and \
           (self.addressType == other.addressType) and \
           (self.city == other.city) and \
           (self.foreignCountry == other.foreignCountry) and \
           (self.foreignState == other.foreignState) and \
           (self.foreignCity == other.foreignCity):
            return 0
        else:
            return 1    
    
    def __unicode__(self):
        return u"%s %s %s %s<br />%s %s %s %s %s (%s)" % (\
            self.addressPrefix, self.addressLine1, self.addressNumber, self.addressLine2, \
            self.zipCode, self.neighborhood, self.city, '' if not hasattr(self.city, 'state') else self.city.state.shortName, '' if not hasattr(self.city, 'state') else self.city.state.country, self.addressType\
        )
    
    def __empty__(self):
        return ''
    area = property(__empty__)

    def revision(self):
        return reversion.get_for_object(self).order_by('-revision__date_created').latest('revision__date_created').revision
Exemple #15
0
class ReferralAttach(models.Model):
    id = UuidField(primary_key=True)
    filename = models.CharField(null=True, max_length=255)
    description = models.TextField(null=True)
    date = models.DateTimeField(auto_now_add=True)
    file = models.CharField(max_length=200)
    type = models.CharField(max_length=2,
                            blank=True,
                            null=True,
                            choices=REFERRAL_ATTACH_TYPE)
    referral = models.ForeignKey('Referral')
    only_professionals = models.BooleanField()
    only_psychologists = models.BooleanField()

    def __unicode__(self):
        return u'%s' % (self.file)
Exemple #16
0
class Indication(models.Model):
    id = UuidField(primary_key=True)
    indication_choice = models.ForeignKey(IndicationChoice, null=False)
    referral = models.ForeignKey(Referral)
    referral_organization = models.ForeignKey(Organization, null=True)
    referral_professional = models.ForeignKey(CareProfessional, null=True)

    def __unicode__(self):
        try:
            return u"%s" % self.indication_choice
        except:
            return ''

    def revision(self):
        return reversion.get_for_object(self).order_by(
            '-revision__date_created').latest(
                'revision__date_created').revision
Exemple #17
0
class Notify(models.Model):
    """
        Email notification
    """
    id = UuidField(primary_key=True)
    client_event = models.BooleanField(default=True)  #client
    resume_daily_event = models.BooleanField(default=True)  #professional
    change_event = models.BooleanField(default=True)  #professional

    # Generic Relation
    content_type = models.ForeignKey(ContentType)
    object_id = models.CharField(max_length=36)
    content_object = generic.GenericForeignKey()
    org_id = models.CharField(max_length=36, null=False, blank=False)

    def __unicode__(self):
        return self.id
Exemple #18
0
class ProfessionalProfile(models.Model):
    """
    This class represents the professional profile
    @author: Danilo S. Sanches
    @version: 1.0
    """
    id = UuidField(primary_key=True)
    academicResume = models.OneToOneField(AcademicResume, null=True)
    initialProfessionalActivities = models.CharField(max_length=10, null=True)
    agreement = models.ManyToManyField(Agreement, null=True)
    profession = models.OneToOneField(Profession, null=True)
    services = models.CharField(max_length=100, null=True)
    availableTime = models.CharField(max_length=100, null=True)
    workplace = models.ManyToManyField(Place, null=True)

    def __unicode__(self):
        try:
            p = CareProfessional.objects.get(
                professionalProfile=self).person.name
        except:
            p = _('[no professional related]')
        return u'%s' % p

    def __str__(self):
        try:
            p = CareProfessional.objects.get(
                professionalProfile=self).person.name
        except:
            p = _('[no professional related]')
        return u'%s' % p

    def __area__(self):
        return ''

    area = property(__area__)

    def __addressPrefix__(self):
        return ''

    addressPrefix = property(__addressPrefix__)

    def revision(self):
        return reversion.get_for_object(self).order_by(
            '-revision__date_created').latest(
                'revision__date_created').revision
Exemple #19
0
class TicketIteration(models.Model):
    """
    This class register tickets iterations.
    @author: Fabio A Martins
    @version: 1.0
    """
    id = UuidField(primary_key=True)
    ticket = models.ForeignKey(Ticket)
    operator = models.ForeignKey(Person, null=True, related_name='operator')
    answer = models.TextField(max_length=765, blank=True)
    date = models.DateTimeField(auto_now=True)

    def __unicode__(self):
        return "%s %s" % (self.operator, self.answer)

    def revision(self):
        return reversion.get_for_object(self).order_by(
            '-revision__date_created').latest(
                'revision__date_created').revision
Exemple #20
0
class ReferralAttach(models.Model):
    id = UuidField(primary_key=True)
    filename = models.CharField(null=True, max_length=255)
    description = models.TextField(null=True)
    date = models.DateTimeField(auto_now_add=True)
    file = models.CharField(max_length=200)
    type = models.CharField(max_length=2,
                            blank=True,
                            null=True,
                            choices=REFERRAL_ATTACH_TYPE)
    permission = models.CharField(max_length=2,
                                  default=1,
                                  blank=False,
                                  null=False,
                                  choices=PERMISSION_ATTACH)
    referral = models.ForeignKey('Referral')

    def __unicode__(self):
        return u'%s' % (self.file)
Exemple #21
0
class Covenant(models.Model):
    id = UuidField(primary_key=True)
    date_join = models.DateField(auto_now_add=True, null=False, editable=False)
    name = models.CharField(_(u'Name'),
                            max_length=250,
                            null=False,
                            blank=False)
    active = models.BooleanField(u'Disponível', default=True)
    category = models.IntegerField(u'Categoria',
                                   choices=CATEGORY,
                                   max_length=2,
                                   null=False,
                                   blank=False)
    charge = models.IntegerField(u'Cobrança',
                                 choices=CHARGE,
                                 max_length=2,
                                 null=False,
                                 blank=False)
    event_time = models.PositiveIntegerField(
        u'Número de eventos', null=True,
        blank=True)  # if charge=2, show this field
    payment_way = models.IntegerField(u'Forma de pagamento',
                                      choices=PAYMENT_WAY,
                                      max_length=2,
                                      null=False,
                                      blank=False)
    price = models.DecimalField(u'Valor',
                                max_digits=10,
                                decimal_places=2,
                                null=True,
                                blank=True)
    description = models.TextField(u'Descrição', null=True, blank=True)
    dead_line = models.IntegerField(u'Prazo',
                                    choices=DEADLINE,
                                    max_length=2,
                                    null=False,
                                    blank=False)

    def __unicode__(self):
        return u"%s" % self.name
Exemple #22
0
class AcademicResume(models.Model):
    """
    This class represents careprofessional's academic resume
    @author: Danilo S. Sanches
    @version: 1.0
    """
    id = UuidField(primary_key=True)
    teachingInstitute = models.CharField(max_length=100, null=True)
    institutionType = models.OneToOneField(InstitutionType, null=True)
    course = models.CharField(max_length=100, null=True)
    initialDateGraduation = models.DateField(null=True)
    finalDateGraduation = models.DateField(null=True)
    lattesResume = models.URLField(null=True)
    postGraduate = models.ForeignKey(PostGraduate, null=True)
    initialDatePostGraduate = models.DateField(null=True)
    finalDatePostGraduate = models.DateField(null=True)
    area = models.CharField(max_length=100, null=True)

    def revision(self):
        return reversion.get_for_object(self).order_by(
            '-revision__date_created').latest(
                'revision__date_created').revision
Exemple #23
0
class Employee(models.Model):
    id= UuidField(primary_key=True)
    person = models.OneToOneField(Person)
    hiredate = models.DateField(blank=True, null=True)
    job = models.CharField(max_length=30, blank=True)
    active = models.BooleanField(default=True)
    objects = EmployeeManager()
    
    def __unicode__(self):
        return u"%s" % self.person.name

    class Meta:
        ordering = ['person']
        permissions = (
            ("employee_add", "Can add employees"),
            ("employee_change", "Can change employees"),
            ("employee_list", "Can list employees"),
            ("employee_write", "Can write employees"),
        )

    def revision(self):
        return reversion.get_for_object(self).order_by('-revision__date_created').latest('revision__date_created').revision
Exemple #24
0
class ProfessionalIdentification(models.Model):
    """
    This class represents the professional identification that is composed by
    careprofessional's licence board and register number
    @author: Danilo S. Sanches
    @version: 1.0
    """
    id = UuidField(primary_key=True)
    profession = models.ForeignKey(Profession, null=True)
    registerNumber = models.CharField(max_length=50, null=True)

    def __unicode__(self):
        try:
            p = CareProfessional.objects.get(
                professionalIdentification=self).person.name
        except:
            p = _('[no professional related]')
        return u'%s' % p

    def __str__(self):
        try:
            p = CareProfessional.objects.get(
                professionalIdentification=self).person.name
        except:
            p = _('[no professional related]')
        return '%s' % p

    def __empty__(self):
        return ''

    area = property(__empty__)
    addressPrefix = property(__empty__)
    addressLine1 = property(__empty__)
    addressLine2 = property(__empty__)
    addressNumber = property(__empty__)
    neighborhood = property(__empty__)
    zipCode = property(__empty__)
    addressType = property(__empty__)
Exemple #25
0
class DeviceDetails(models.Model):
    """
    Instances of this class holds details about devices. For example, brand, comments, and so forth.
    @version: 1.0
    @see: Device
    """
    id = UuidField(primary_key=True)
    brand = models.CharField(max_length=80)
    model = models.CharField(max_length=80)
    part_number = models.CharField(max_length=45)
    lendable = models.BooleanField(default=True)
    comments = models.CharField(max_length=200)
    durability = models.CharField(max_length=1, choices=DURABILITY_TYPE)
    prof_restriction = models.ForeignKey(Profession, null=True)
    mobility = models.CharField(max_length=1, choices=MOBILITY_TYPE)
    place = models.ForeignKey(Place, null=True)
    room = models.ForeignKey(Room, null=True)
    device = models.ForeignKey(Device)
    active = models.BooleanField(default=True)

    objects = DeviceDetailsManager()

    class Meta:
        ordering = ['brand']
        permissions = (("devicedetails_write", "Can write device details"), )

    def __unicode__(self):
        #      return u"%s - %s - %s" % (self.device.description, self.brand, self.model,)
        return u"%s - %s - %s" % (
            self.model,
            self.brand,
            self.device.description,
        )

    def revision(self):
        return reversion.get_for_object(self).order_by(
            '-revision__date_created').latest(
                'revision__date_created').revision
Exemple #26
0
class InstantMessenger(models.Model):
    id = UuidField(primary_key=True)
    identity = models.CharField(max_length=100, blank=True)
    network = models.ForeignKey(IMNetwork, blank=True)

    # Generic Relation
    content_type = models.ForeignKey(ContentType)
    object_id = models.CharField(max_length=36)
    content_object = generic.GenericForeignKey()

    def __cmp__(self, other):
        if (self.identity == other.identity) and \
           (self.network == other.network):
            return 0
        else:
            return 1

    def __unicode__(self):
        return "%s (%s)" % (self.identity, self.network)

    def revision(self):
        return reversion.get_for_object(self).order_by(
            '-revision__date_created').latest(
                'revision__date_created').revision
Exemple #27
0
class Site(models.Model):
    id = UuidField(primary_key=True)
    description = models.CharField(max_length=100, blank=True)
    site = models.CharField(max_length=100, blank=True)

    # Generic Relation
    content_type = models.ForeignKey(ContentType)
    object_id = models.CharField(max_length=36)
    content_object = generic.GenericForeignKey()

    def __cmp__(self, other):
        if (self.description == other.description) and \
           (self.site == other.site):
            return 0
        else:
            return 1

    def __unicode__(self):
        return self.site

    def revision(self):
        return reversion.get_for_object(self).order_by(
            '-revision__date_created').latest(
                'revision__date_created').revision
Exemple #28
0
class Organization(models.Model):
    """    
    This class represents the organization model.   
    @author: Danilo S. Sanches
    @version: 1.0 
    """
    id= UuidField(primary_key=True)
    date_created = models.DateTimeField(auto_now_add=True)

    # identity
    name = models.CharField(max_length=100)
    trade_name = models.CharField(max_length=100, blank=True)
    short_name = models.CharField(max_length=100, blank=True, unique=True)
    register_number = models.CharField(max_length=100, blank=True)
    cnes = models.CharField(max_length=100, blank=True)
    state_inscription = models.CharField(max_length=30, blank=True)
    city_inscription = models.CharField(max_length=30, blank=True)
    last_id_record = models.PositiveIntegerField(default=0)
            # subscriptions_professional_institutional = models.CharField(max_length=100, blank=True)
            # professional_responsible = models.CharField(max_length=100, blank=True) 
    
    # profile
    person_type = models.ForeignKey(PersonType, null=True, blank=True)
    unit_type = models.ForeignKey(UnitType, null=True, blank=True)
    environment = models.ForeignKey(AdministrationEnvironment, null=True, blank=True)
    management = models.ForeignKey(Management, null=True, blank=True)
    source = models.ForeignKey(Source, null=True, blank=True)
    dependence = models.ForeignKey(Dependence, null=True, blank=True)
    provided_type = models.ManyToManyField(ProvidedType, null=True, blank=True)
    activity = models.ForeignKey(Activitie, null=True, blank=True)
    public = models.BooleanField(default=True)
    comment = models.CharField(max_length=765, blank=True)
    active = models.BooleanField(u'Ativo. Todas as faturas pagas?', default=True)
    suspension = models.BooleanField(u'Cliente suspendeu serviço. Não gera nova fatura ou notificação.', default=False)
    suspension_reason = models.TextField(u'Motivos da suspensão', blank=True, null=True)
    visible = models.BooleanField(default=True)
    photo = models.CharField(max_length=200, blank=True)          
    phones = generic.GenericRelation(Phone, null=True)
    address = generic.GenericRelation(Address, null=True)
    emails  = generic.GenericRelation(Email, null=True)
    sites = generic.GenericRelation(Site, null=True)
    instantMessengers =generic.GenericRelation(InstantMessenger, null=True) 
    organization = models.ForeignKey('self', related_name="%(class)s_related", null=True, blank=True)
    contact_owner = models.ForeignKey('person.Person', related_name="contact_owner", null=True, blank=True, default=None)
    
    employee_number = models.IntegerField(default=1, null=True, blank=True)
    employee_number.help_text = "Number of employees (field used by the system DON'T change it)." 
    employee_number.verbose_name = "Number of employees"
    #employee_number.editable = False
    
    prefered_plan = models.ForeignKey(Plan, null=True, blank=True)
    prefered_plan.verbose_name = _("Preferred plan")
    prefered_plan.help_text= _("The plan the organization will use next time the system gives a billet.")
    
    # is old, to remove next alteration. Can be used org.invoice_() method to check
    #current_invoice = models.ForeignKey(Invoice, null=True, blank=True, related_name='current_invoice')
    #current_invoice.verbose_name = _("Current invoice")
    #current_invoice.help_text= _("Field used by the system DON'T change it.")
    #current_invoice.editable = False

    payment_type = models.ForeignKey(PaymentType, null=True, blank=True)
    payment_type.verbose_name = _("Tipo de pagamento")
    payment_detail = models.TextField(u'Detalhes do pagamento. Usado pelo ADM gestorPSI.', null=True, blank=True)
    
    default_payment_day = models.PositiveIntegerField(validators=[MaxValueValidator(28), MinValueValidator(1)], default=DEFAULT_PAYMENT_DAY)
    default_payment_day.verbose_name = _("Default payment day")
    default_payment_day.help_text= _("The default day in which the billets have to be paid at the most by this organization.")

    time_slot_schedule = models.CharField(u"Tempo de cada consulta (minutos)", null=False, blank=False, choices=TIME_SLOT_SCHEDULE, max_length=2, default=30)
    restrict_schedule = models.NullBooleanField(null=True, default=False)
    
    objects = OrganizationManager()

    def __unicode__(self):
        return self.name

    def save(self, *args, **kwargs):

        # payment type default, credit card, id=1.
        if not self.id:
            self.payment_type = PaymentType.objects.get(pk=1) 

        if self.id: # save original state from register to verify if it has been changed from latest save
            original_state = Organization.objects.get(pk=self.id)
            if self.date_created is None or not self.date_created:
                try:
                    temp = reversion.models.Version.objects.get_for_object(self).order_by('revision__date_created').latest('revision__date_created').revision
                    temp = temp.date_created
                except:
                    temp = datetime.now()
                self.date_created = temp
        else:
            original_state = None
            self.date_created = datetime.now()
            if Plan.objects.filter(staff_size__gte=self.employee_number, duration=1):
                self.prefered_plan = Plan.objects.filter(staff_size__gte=self.employee_number, duration=1).order_by('staff_size')[0]
                self.payment_type = PaymentType.objects.get(pk=1) # cartao

        # suspension
        if self.suspension == True:
            self.active = False
        else:
            # read only?
            if self.invoice_()[2]: # one not payed overdue invoice
                self.active = False
            else:
                self.active = True
                self.suspension_reason = None # clean old data

        super(Organization, self).save(*args, **kwargs)
        
        if self.id and original_state:
            if original_state.active != self.active and not original_state.organization: # active state has been changed and organization is a real organization
                if not self.active: # organization has been deactivated, lets set all users as read-only mode
                    for person in self.person_set.all():
                        if hasattr(person, 'profile'): # is valid user (maybe) =)
                            for group in person.profile.user.groups.all():
                                new_group = Group.objects.get(name=('%s_ro' % group.name))
                                person.profile.user.groups.add(new_group) # add user to new group (a readonly group)
                                person.profile.user.groups.remove(Group.objects.get(name=group.name)) # remove user from past group
                else: # organization has been activated, lets set all users as NOT read-only mode
                    for person in self.person_set.all():
                        if hasattr(person, 'profile'): # is valid user (maybe) =)
                            for group in person.profile.user.groups.all():
                                new_group = Group.objects.get(name=re.sub('_ro','',group.name))
                                person.profile.user.groups.add(new_group) # add user to new group (a readonly group)
                                person.profile.user.groups.remove(Group.objects.get(name=group.name)) # remove user from past group 

    def professionalresponsible_(self):
        try:
            return ProfessionalResponsible.objects.filter(organization=self)[0]
        except:
            return None
    professionalresponsible = property(professionalresponsible_)

    def revision(self):
        return reversion.get_for_object(self).order_by('-revision__date_created').latest('revision__date_created').revision

    def revision_created(self):
        return reversion.get_for_object(self).order_by('revision__date_created').latest('revision__date_created').revision

    def created(self):
        return self.date_created

    def get_first_phone(self):
        if ( len( self.phones.all() ) != 0 ):
            return self.phones.all()[0]
        else:
            return ''

    def get_first_email(self):
        if ( len( self.emails.all() ) != 0 ):
            return self.emails.all()[0]
        else:
            return ''

    def get_first_address(self):
        text = ""
        if self.address.all().count():
            addr = self.address.all()[0]
            text = "%s %s, %s" % (addr.addressPrefix, addr.addressLine1, addr.addressNumber)
            
            city = first_capitalized(addr.city.name) if hasattr(addr, "city") and addr.city else ""
            state = addr.city.state.shortName if hasattr(addr, "city") and hasattr(addr.city, "state") and addr.city.state else ""
            country = addr.city.state.country.name if hasattr(addr, "city") and hasattr(addr.city, "state") and hasattr(addr.city.state, "country") and addr.city.state.country  else ""
            
            if len(addr.addressLine2): text += " - %s" % addr.addressLine2
            if len(addr.neighborhood): text += " - %s" % addr.neighborhood
            text += "<br />%s - %s - %s" % (city, state, country)
            if len(addr.zipCode): text += " - CEP: %s" % addr.zipCode
        return text

    def clients(self):
        return self.person_set.filter(client__isnull = False, client__active = True)

    def care_professionals(self):
        return self.person_set.filter(careprofessional__isnull = False, careprofessional__active = True)

    def employees(self):
        return self.person_set.filter(employee__isnull = False, employee__active = True)

    def is_real(self):
        return True if not self.organization else False

    def is_local(self):
        return True if self.organization else False

    def administrators_(self):
        return self.person_set.filter(Q(profile__user__groups__name='administrator') | Q(profile__user__groups__name='administrator_ro')).order_by('profile__user__date_joined').distinct()

    def secretary_(self):
        return self.person_set.filter(profile__user__groups__name='secretary').order_by('profile__user__date_joined')

    def services(self):
        return self.service_set.filter(active=True)



    '''
        return number of rooms from org
    '''
    def room_count_(self):
        c = 0 
        for x in self.place_set.all():
            c += x.room_set.all().count()
        return c
    

    '''
        retorna todas as faturas
        array
            0 = proxima
            1 = corrente/atual
            2 = vencida

        filter pago ou não no html
    '''
    def invoice_(self):

        r = [False]*4

        # future
        r[0] = self.invoice_set.filter( start_date__gt=date.today() )

        # current 
        r[1] = self.invoice_set.filter( start_date__lte=date.today(), end_date__gte=date.today() )

        # past
        # 1t all overdue invoices
        r[2] = []
        for x in self.invoice_set.filter( start_date__lt=date.today(), end_date__lt=date.today(), status=0 ).order_by('-date'):
            r[2].append(x)

        # copy r2
        import copy
        r[3] = copy.deepcopy(r[2])
        for x in self.invoice_set.filter( start_date__lt=date.today(), end_date__lt=date.today, status__gt=0).order_by('-date'):
            r[3].append(x)

        return r


    class Meta:
        ordering = ['name']
        permissions = (
            ("organization_add", "Can add organizations"),
            ("organization_change", "Can change organizations"),
            ("organization_list", "Can list organizations"),
            ("organization_write", "Can write organizations"),
        )
Exemple #29
0
class Room(models.Model):
    """
    This class represents a room, it also holds information on the furniture
    that belongs to the underlying room and its dimension.
    @version: 1.0
    """
    id = UuidField(primary_key=True)
    description = models.CharField(max_length=80, blank=True)
    dimension = models.CharField(max_length=10, blank=True)
    place = models.ForeignKey(Place)
    room_type = models.ForeignKey(RoomType, related_name='room_type')
    furniture = models.TextField()
    active = models.BooleanField(default=True)
    comments = models.TextField(blank=True)
    responsible = models.ForeignKey('careprofessional.CareProfessional',
                                    null=True,
                                    blank=True)

    objects = RoomManager()

    class Meta:
        ordering = ['description']

    def __unicode__(self):
        return "%s" % self.description

    def __str__(self):
        return "%s" % self.description

    def __empty__(self):
        return ''

    area = property(__empty__)
    addressPrefix = property(__empty__)
    addressLine1 = property(__empty__)
    addressPrefix = property(__empty__)
    addressLine1 = property(__empty__)
    addressLine2 = property(__empty__)
    addressNumber = property(__empty__)
    neighborhood = property(__empty__)
    zipCode = property(__empty__)
    addressType = property(__empty__)

    def revision(self):
        return reversion.get_for_object(self).order_by(
            '-revision__date_created').latest(
                'revision__date_created').revision

    def is_busy(self, start_time, end_time):
        ''' check if room is busy in schedule for selected range '''
        ''' filter 1: start time not in occurrence range '''
        ''' filter 2: end time not in occurrence range '''
        ''' filter 2: end time not in occurrence range '''
        ''' filter 3: occurrence range are not between asked values '''

        from gestorpsi.schedule.models import ScheduleOccurrence
        queryset = ScheduleOccurrence.objects.filter(room=self).exclude(
            occurrenceconfirmation__presence=4).exclude(
                occurrenceconfirmation__presence=5)

        return True if \
            queryset.filter(start_time__lte=start_time,
                            end_time__gt=start_time) or \
            queryset.filter(start_time__lt=end_time,
                            end_time__gte=end_time) or \
            queryset.filter(start_time__gte=start_time,
                            end_time__lte=end_time) \
            else False

    def occurrences(self):
        o = []
        for i in self.scheduleoccurrence_set.filter(
                start_time__gte=datetime.now()).exclude(
                    occurrenceconfirmation__presence=4).exclude(
                        occurrenceconfirmation__presence=5):
            o.append(i)
        return o
Exemple #30
0
class Place(models.Model):
    """
    This class represents a place.
    @version: 1.0
    """
    id = UuidField(primary_key=True)
    label = models.CharField(max_length=80)
    active = models.BooleanField(default=True)
    address = generic.GenericRelation(Address)
    phones = generic.GenericRelation(Phone)
    place_type = models.ForeignKey(PlaceType)
    organization = models.ForeignKey(Organization, null=True, blank=True)
    comments = models.TextField(blank=True, null=True)

    hour_start = models.CharField(u'Primeiro horário',
                                  max_length=10,
                                  default='07,00',
                                  choices=HOURS)
    hour_end = models.CharField(u'Último horário',
                                max_length=10,
                                default='19,00',
                                choices=HOURS)

    objects = PlaceManager()

    def __unicode__(self):
        return "%s" % self.label

    def __str__(self):
        return "%s" % self.label

    def __empty__(self):
        return ''

    area = property(__empty__)
    addressPrefix = property(__empty__)
    addressLine1 = property(__empty__)
    addressLine2 = property(__empty__)
    addressNumber = property(__empty__)
    neighborhood = property(__empty__)
    zipCode = property(__empty__)
    addressType = property(__empty__)

    def get_first_phone(self):
        if (len(self.phones.all()) != 0):
            return self.phones.all()[0]
        else:
            return ''

    def occurrences(self):
        occurrences = []
        for room in self.room_set.filter(active=True):
            for i in room.scheduleoccurrence_set.filter(
                    start_time__gte=datetime.now()).exclude(
                        occurrenceconfirmation__presence=4).exclude(
                            occurrenceconfirmation__presence=5):
                occurrences.append(i)
        return occurrences

    class Meta:
        ordering = ['label']
        permissions = (
            ("place_add", "Can add places"),
            ("place_change", "Can change places"),
            ("place_list", "Can list places"),
            ("place_write", "Can write places"),
        )

    def revision(self):
        return reversion.get_for_object(self).order_by(
            '-revision__date_created').latest(
                'revision__date_created').revision

    # Tiago de Souza Moraes, 26/11/2013
    # retorna a quantidade de horas que a sala estará aberta para atendimento
    # return array = [hour_start], [min_start], [hours_works]
    def hours_work(self):
        r = [None] * 3

        # hour
        r[0] = (int(self.hour_start.split(',')[0]))
        # min
        r[1] = (int(self.hour_start.split(',')[1]))

        # quantas horarios disponivel na agenda
        m = 0
        # meia hora existe?
        if int(self.hour_start.split(',')[1]) > int(
                self.hour_end.split(',')[1]):
            m = float(-.5)

        if int(self.hour_start.split(',')[1]) < int(
                self.hour_end.split(',')[1]):
            m = float(.5)

        x = (float(self.hour_end.split(',')[0]) -
             float(self.hour_start.split(',')[0])) + m

        r[2] = x
        return r