1 # -*- coding: utf-8 -*-
2 from django.db import models
3 from django.contrib.auth.models import get_hexdigest
5 from ais.common import Nmea, mmsi_to_strmmsi
7 class User(models.Model):
8 id = models.AutoField(primary_key=True)
9 login = models.CharField(max_length=16, unique=True)
10 password_hash = models.CharField(max_length=75)
11 name = models.CharField(max_length=50)
12 email = models.EmailField()
13 father = models.ForeignKey('User')
14 creation_datetime = models.DateTimeField(auto_now_add=True)
15 phone = models.CharField(max_length=20, blank=True)
20 def __unicode__(self):
23 def set_password(self, raw_password):
26 salt = get_hexdigest(algo, str(random.random()), str(random.random()))[:5]
27 hsh = get_hexdigest(algo, salt, raw_password)
28 self.password_hash = '%s$%s$%s' % (algo, salt, hsh)
30 def check_password(self, raw_password):
31 algo, salt, hsh = self.password_hash.split('$')
32 return hsh == get_hexdigest(algo, salt, raw_password)
34 def get_and_delete_messages(self):
37 def is_admin_by(self, user_id):
38 if self.id == user_id:
40 if self.father_id is None:
42 return self.father.is_admin_by(user_id)
44 class Vessel(models.Model):
45 mmsi = models.IntegerField(primary_key=True)
46 name = models.CharField(max_length=20)
47 imo = models.IntegerField()
48 callsign = models.CharField(max_length=7)
49 type = models.IntegerField()
50 destination = models.CharField(max_length=20)
51 updated = models.DateTimeField()
52 source = models.CharField(max_length=8)
55 def __unicode__(self):
56 return unicode(self.mmsi) # FIXME
57 def get_last_nmea(self):
58 strmmsi = mmsi_to_strmmsi(self.mmsi)
59 return Nmea.new_from_lastinfo(strmmsi)
61 class Fleet(models.Model):
62 name = models.CharField(max_length=50, primary_key=True)
63 vessel = models.ManyToManyField(Vessel, through='FleetVessel')
64 description = models.TextField()
67 def __unicode__(self):
69 def vessel_count(self):
70 return FleetVessel.objects.filter(fleet=self.name).count()
72 return FleetUser.objects.filter(fleet=self.name).count()
74 class FleetUser(models.Model):
75 id = models.AutoField(primary_key=True)
76 fleet = models.ForeignKey(Fleet, db_column='fleet', to_field='name')
77 user = models.ForeignKey(User)
79 db_table = u'fleet_user'
81 class FleetVessel(models.Model):
82 id = models.AutoField(primary_key=True)
83 fleet = models.ForeignKey(Fleet, db_column='fleet', to_field='name')
84 vessel = models.ForeignKey(Vessel, db_column='mmsi', to_field='mmsi')
86 db_table = u'fleet_vessel'
88 ## manual input source
89 #class MiSource(models.Model):
90 # id = models.IntegerField(primary_key=True)
91 # userid = models.IntegerField()
92 # name = models.TextField(unique=True)
94 # db_table = u'mi_source'
96 ## manual input vessel
97 #class MiVessel(models.Model):
98 # mmsi_txt = models.TextField(primary_key=True) # This field type is a guess.
100 # db_table = u'mi_vessel'
104 #class Ppuser(models.Model):
105 # usr = models.TextField(primary_key=True) # This field type is a guess.
106 # lat = models.FloatField()
107 # lon = models.FloatField()
109 # db_table = u'ppuser'
111 #class Plane(models.Model):
112 # flight = models.CharField(max_length=8)
113 # reg = models.CharField(max_length=8)
114 # ads = models.CharField(max_length=8)
115 # type = models.CharField(max_length=4)
116 # usr = models.TextField() # This field type is a guess.
117 # updated = models.DateTimeField()
119 # db_table = u'plane'
123 class News(models.Model):
124 id = models.AutoField(primary_key=True)
125 created = models.DateTimeField()
126 updated = models.DateTimeField()
127 title = models.TextField()
128 txt = models.TextField()