class Sesh_Site(models.Model): """ Model for each PV SESH installed site """ site_name = models.CharField(max_length=100, unique = True) organisation = models.ForeignKey(Sesh_Organisation, null=True, blank=True) comission_date = models.DateTimeField('date comissioned') location_city = models.CharField(max_length = 100) location_country = models.CharField(max_length = 100) time_zone = models.CharField(max_length = 100, default='Africa/Kigali') position = GeopositionField() installed_kw = models.FloatField(default=None, blank=True) system_voltage = models.IntegerField(default=None, blank=True) number_of_panels = models.IntegerField(default=None, blank=True) #enphase_ID = models.CharField( max_length = 100) #TODO need to figure a way to show this in admin to automatically populate #enphase_site_id = models.IntegerField() import_data = models.BooleanField(default=False) battery_bank_capacity = models.IntegerField() has_genset = models.BooleanField(default=False) has_grid = models.BooleanField(default=False) has_pv = models.BooleanField(default=False) has_batteries =models.BooleanField(default=False) vrm_account = models.ForeignKey(VRM_Account,default=None,blank=True,null=True) vrm_site_id = models.CharField(max_length=20,default="",blank=True, null=True) status_card = models.OneToOneField(Status_Card,default=None,blank=True,null=True, on_delete=models.SET_NULL) site_measurements = models.OneToOneField(Site_Measurements, default=None,blank=True,null=True, on_delete=models.SET_NULL) def __str__(self): return self.site_name def save(self, *args, **kwargs): # If site is being created if self.pk is None: self.status_card = Status_Card.objects.create() self.site_measurements = Site_Measurements.objects.create() super(Sesh_Site, self).save(*args, **kwargs) Sensor_Node.objects.create(site=self) else: super(Sesh_Site, self).save(*args, **kwargs) def delete(self, *args, **kwargs): # Delete the site and its associated status card status_card = self.status_card site_measurements = self.site_measurements site_measurements.delete() status_card.delete() super(Sesh_Site, self).delete(*args, **kwargs) #Row based permissioning using django guardian not every user should be able to see all sites class Meta: verbose_name = 'Sesh Site' verbose_name_plural = 'Sesh Sites' permissions = ( ('view_Sesh_Site', 'View Sesh Site'), )
class Workday(models.Model): """ A workday represents a succesful session of work, delimited by 'start' and 'finish' timestamps. """ user = models.ForeignKey(auth.models.User) user_agent = models.CharField(max_length=512, null=True, blank=True) start = models.DateTimeField() finish = models.DateTimeField(blank=True, null=True) user_notes = models.CharField(null=True, blank=True, max_length=256) staff_notes = models.CharField(null=True, blank=True, max_length=256) edited = models.BooleanField(default=False) location = GeopositionField(blank=True, null=True) # model manager objects = WorkdayManager() class Meta: ordering = ['-start'] @property def hours_worked(self): if self.finish: diff = self.finish - self.start return diff.total_seconds() / 60 / 60 else: return None def clean(self): """ Self validation method """ if self.finish is not None and self.start > self.finish: raise ValidationError( "Workday start time can't be greater than finish time") try: latest = Workday.objects.user( self.user.username).exclude(id=self.id).latest('start') if latest.start < self.start and not latest.finish: raise ValidationError( "Latest workday hasn't finished yet for given user") except Workday.DoesNotExist: pass overlapping = Workday.objects.user(self.user.username).exclude( id=self.id).filter(start__range=(self.start, self.finish)) overlapping2 = Workday.objects.user(self.user.username).exclude( id=self.id).filter(finish__range=(self.start, self.finish)) if overlapping.exists() or overlapping2.exists(): raise ValidationError( "Specified user has already worked in the given datetime range" ) def __unicode__(self): return "%s: %s - %s" % (self.user.username, self.start, self.finish)
class UserProfile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) title = models.CharField(max_length=100) des = models.TextField(max_length=200) phone = PhoneNumberField() position = GeopositionField(null=True) def __str__(self): return self.title
class Checkpoint(models.Model): name = models.CharField(max_length=500) location = GeopositionField() photograph = models.ImageField() information = models.TextField() isValid = models.BooleanField() def __str__(self): return self.name
class Travel(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) location = models.CharField(max_length=100) destination = models.CharField(max_length=100) position = GeopositionField()
class Zone(models.Model): name = models.CharField(max_length = 50 ) position = GeopositionField() def __str__(self): return self.name def __unicode__(self): return str(self.name)
class Location(models.Model): location = GeopositionField() zip_code = models.CharField(max_length=5) def longitude(self): return self.location.longitude def latitude(self): return self.location.latitude
class PointOfInterest(models.Model): name = models.CharField(max_length=100) # address = models.CharField(max_length=255) # city = models.CharField(max_length=50) # zipcode = models.CharField(max_length=10) position = GeopositionField(blank=True) class Meta: verbose_name_plural = 'points of interest'
class Reply(models.Model): description = models.CharField(max_length=30) inquiry = models.OneToOneField(Inquiry, primary_key=True) #code = models.ForeignKey(Child, related_name='pin') position = GeopositionField(blank=True) time = models.DateTimeField(auto_now_add=True) def __str__(self): return self.inquiry.child.name
class MedicalPractice(models.Model): name = models.CharField(max_length=254, default='') description = models.TextField() address = models.TextField(max_length=254, default='') location = models.CharField(max_length=100) position = GeopositionField(blank=True) def __str__(self): return self.name
class Spot(models.Model): name = models.CharField(max_length=32) position = GeopositionField() objects = models.GeoManager() def __unicode__(self): return '%s' % (self.name)
class Customer(models.Model): name = models.CharField(max_length=100) position = GeopositionField() class Meta: verbose_name_plural = 'Customer' def __str__(self): return self.name
class gps(models.Model): position = GeopositionField() frameStamp = models.DateTimeField(default=now) address = models.CharField(max_length=1500) video = models.ForeignKey(Video, on_delete=models.CASCADE) def __str__(self): return str(self.position) + " : " + str(self.frameStamp) + " : " + str( self.address)
class Poi(models.Model): name = models.CharField(max_length=100) position = GeopositionField() def __str__(self): return self.name class Meta: verbose_name_plural = "Points of interest"
class InfoSite(AuditableModel): direccion = models.CharField( 'Dirección', max_length=120, help_text='Agregar // para generar el salto de línea') email = models.EmailField('Email') telefono = models.CharField('Teléfono', max_length=60) email_form = models.EmailField('Formulario de Contacto', blank=True) site = models.CharField( "URL del sitio", max_length=60, blank=True, help_text='Ingrese la url actual del sitio sin el slash final') facebook = models.URLField('Facebook', blank=True) twitter = models.URLField('Twitter', blank=True) linkedin = models.URLField('Linkedin', blank=True) skype = models.CharField('Skype', blank=True, max_length=160) intranet = models.URLField('Intranet', blank=True) ga = models.CharField( 'Google Analytics', max_length=24, blank=True, help_text='''Opcional: Inserte el código que google analitycs le proporciona con el formato: UA-XXXXX-X''') coordenadas = GeopositionField() paquetes = FileBrowseField("PDF de paquetes", max_length=200, directory='paquetes/', extensions=['.doc', '.pdf'], blank=True) foto_contactanos = FileBrowseField('Foto de contáctanos', max_length=200, directory='contactanos/', extensions=['.jpg', '.png', '.gif'], help_text=u'Tamaño recomendado:366x210', blank=True) def __unicode__(self): return u'Información del Sitio' def direccion_local(self): texto = self.direccion.replace('//', '') return texto class Meta: verbose_name_plural = u'Información del Sitio' def save(self, *args, **kwargs): site = Site.objects.get(id=settings.SITE_ID) site.domain = urlparse(self.site).netloc site.name = settings.PROJECT_NAME site.save() super(InfoSite, self).save(*args, **kwargs)
class Coordinate(models.Model): address = models.CharField(_('Адрес'), max_length=255) position = GeopositionField(_('Координаты')) def __str__(self): return self.address class Meta: verbose_name = _("Координат") verbose_name_plural = _("Координаты")
class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) name = models.CharField(max_length=50, blank=True) location = GeopositionField(blank=True) class Meta: db_table = 'user_profile' def __str__(self): return self.name if self.name else self.user.username
class PointOfInterest(models.Model): name = models.CharField(max_length=100) address = models.CharField(max_length=255,blank=True,null=True) city = models.CharField(max_length=50,blank=True,null=True) zipcode = models.CharField(max_length=10,blank=True,null=True) position = GeopositionField(blank=True) class Meta: verbose_name_plural = '兴趣点' app_label = string_with_title('blog', u"兴趣点坐标")
class Pound(models.Model): title = models.CharField(max_length=50) fishes = models.ManyToManyField(Fish) position = GeopositionField() def __str__(self): return self.title class Meta: ordering = ('title', )
class Inquiry(models.Model): parent = models.ForeignKey(Parent) child = models.ForeignKey(Child) description = models.CharField(max_length=50) time = models.DateTimeField(auto_now_add=True) replystamp = models.DurationField(blank=True, null=True) relative_location = GeopositionField() def __str__(self): return self.child.name
class Bazar(TitleSlugDescriptionModel, TimeStampedModel): location = GeopositionField(blank=True) def __str__(self): return "%s" % (self.title) @staticmethod def getBazarListByProduct(product_id, date_from, date_to): sql = "SELECT max(p.id) id,p.category_id,b.title,MIN(p.unit_price) price FROM `bazar_product` p join bazar_entry e on (e.id=p.entry_id) join bazar_bazar b on(p.bazar_id=b.id) where p.category_id=%s and e.added_at between %s and %s group by p.bazar_id order by price limit 10" return Bazar.objects.raw(sql, [product_id, date_from, date_to])
class Domicilio(models.Model): codigo = models.AutoField(primary_key=True) comercio = models.ForeignKey(Comercio, null=True) calle = models.CharField(max_length=50) numero = models.IntegerField() localidad = models.ForeignKey(Localidad) position = GeopositionField() def __str__(self): return 'calle {} nro {}'.format(self.calle, self.numero)
class Centre(models.Model): name = models.CharField(max_length=30, unique=True) description = models.TextField(max_length=500, null=True, blank=True) location = GeopositionField() def __str__(self): return self.name def get_absolute_url(self): return reverse('centre:centre-detail', kwargs={'pk': self.pk})
class Article(models.Model): title = models.CharField(max_length=100) pickup = GeopositionField() dropat = GeopositionField() description = models.TextField('Description') date = models.DateTimeField(auto_now_add=True) worth = models.IntegerField('worth($)', default=0) image = models.ImageField(default='default.png', blank=True) author = models.ForeignKey(User, default=None, null=True) phone = models.IntegerField(default=0) def __str__(self): return self.title def snippet(self): return self.description[:70] + '...' def get_absolute_url(self): return reverse("articles:detail", kwargs={"id": self.id})
class Post(models.Model): image_url = models.CharField(max_length=400) thumbnail_url = models.CharField(max_length=400) position = GeopositionField() user = models.ForeignKey(User, related_name='posts') timestamp = models.DateTimeField(auto_now_add=True) venue = models.ForeignKey(Venue) def __unicode__(self): return str(self.user) + "'s post at " + str(self.venue)
class Location(models.Model): name = models.CharField(max_length=50, unique=True) position = GeopositionField() description = models.TextField(null=True, blank=True) def __str__(self): return self.name def get_absolute_url(self): return reverse("academics:timetable-item", kwargs={"slug": self.slug})
class Coordenadas_corridas(models.Model): class Meta: verbose_name_plural = 'Coordenadas de Corridas' id = models.AutoField(primary_key=True) corrida = models.ForeignKey(Corridas, on_delete=models.CASCADE) coordenadas = GeopositionField() def __str__(self): return str(self.coordenadas)
class Activity(DateModel): user = models.ForeignKey(verbose_name=_('User'), to=User) # Base city = models.ForeignKey(verbose_name=_('City'), to=City, related_name="activity_city") kind = models.ForeignKey(verbose_name=_('Kind'), to=Kind) address = models.TextField(verbose_name=_('Address'), null=True, blank=True) coordinate = GeopositionField(verbose_name=_('Coordinate'), null=True, blank=True) name = models.CharField(verbose_name=_('Name'), max_length=50) # Time starting_date = models.DateField(verbose_name=_('Starting Date')) end_date = models.DateField(verbose_name=_('End Date'), null=True, blank=True) starting_time = models.TimeField(verbose_name=_('Starting Time')) end_time = models.TimeField(verbose_name=_('End Time'), null=True, blank=True) # Wage Status wage_status = models.CharField(max_length=10, verbose_name=_('Wage Status'), choices=BOOL_CHOICES) # Image image = models.ImageField(verbose_name=_('Image'), null=True, blank=True, upload_to=set_activity_image_upload_path) # Statement statement = models.TextField(verbose_name=_('Statement'), max_length=1000) class Meta: verbose_name = _(u'Activity') verbose_name_plural = _(u'Activitys') def __str__(self): return self.name def save(self, *args, **kwargs): if self.pk is None: saved_image = self.image self.image = None super(Activity, self).save(*args, **kwargs) self.image = saved_image return super(Activity, self).save(*args, **kwargs)
class InitiativePlace(models.Model): street_number = models.CharField(_('Street Number'), max_length=255, blank=True, null=True) street = models.CharField(_('Street'), max_length=255, blank=True, null=True) postal_code = models.CharField(_('Postal Code'), max_length=255, blank=True, null=True) locality = models.CharField(_('Locality'), max_length=255, blank=True, null=True) province = models.CharField(_('Province'), max_length=255, blank=True, null=True) country = models.ForeignKey('geo.Country') formatted_address = models.CharField(_('Address'), max_length=255, blank=True, null=True) position = GeopositionField()
class Messages(models.Model): msgid = models.IntegerField(primary_key=True) textbody = models.TextField(blank=True) posted_by = models.IntegerField(blank=True) loccord = GeopositionField(blank=True) threadid = models.IntegerField(blank=True) title = models.TextField(blank=True) class Meta: managed = False db_table = 'messages'