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
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)
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"), )
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
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)
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']
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)
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
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']
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
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)
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
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']
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
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)
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
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
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
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
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)
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
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
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
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__)
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
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
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
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"), )
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
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