Returns an array of strmmsi.
"""
result = []
- sqlexec(u"SELECT mmsi FROM fleet_vessel WHERE fleet=%(fleetname)s", {'fleetname': fleetname})
+ sqlexec(u"SELECT mmsi FROM fleet_vessel JOIN fleet ON (fleet_vessel.fleet_id = fleet.id) WHERE fleet.name=%(fleetname)s", {'fleetname': fleetname})
cursor = get_common_cursor()
while True:
row = cursor.fetchone()
UserMessage(user_id = self.id, category_id=category_id, txt=message).save()
def check_sandbox_access(self, source_user=None):
+ SANDBOX_FLEET = 1
try:
- FleetUser.objects.get(fleet = 'sandbox', user = self)
+ FleetUser.objects.get(fleet = SANDBOX_FLEET, user = self)
except FleetUser.DoesNotExist:
fu = FleetUser()
fu.user_id = self.id
- fu.fleet_id = 'sandbox'
+ fu.fleet_id = SANDBOX_FLEET
fu.save()
if source_user:
source_user.info("%s was granted access to 'sandbox' fleet" % self.login)
+
class Vessel(models.Model):
mmsi = models.IntegerField(primary_key=True)
name = models.CharField(max_length=20)
strmmsi = mmsi_to_strmmsi(self.mmsi)
return Nmea.new_from_lastinfo(strmmsi)
+
class Fleet(models.Model):
- name = models.CharField(max_length=50, primary_key=True)
+ id = models.AutoField(primary_key=True)
+ name = models.CharField(max_length=50)
vessel = models.ManyToManyField(Vessel, through='FleetVessel')
description = models.TextField()
class Meta:
def __unicode__(self):
return self.name
def vessel_count(self):
- return FleetVessel.objects.filter(fleet=self.name).count()
+ return FleetVessel.objects.filter(fleet=self.id).count()
def user_count(self):
- return FleetUser.objects.filter(fleet=self.name).count()
+ return FleetUser.objects.filter(fleet=self.id).count()
def job_count(self):
if os.path.exists('/var/lib/ais/cron/fleets/%s.cron' % self.name):
return 1
class FleetUser(models.Model):
id = models.AutoField(primary_key=True)
- fleet = models.ForeignKey(Fleet, db_column='fleet', to_field='name')
+ fleet = models.ForeignKey(Fleet) #, db_column='fleet_id', to_field='id')
user = models.ForeignKey(User)
class Meta:
db_table = u'fleet_user'
class FleetVessel(models.Model):
id = models.AutoField(primary_key=True)
- fleet = models.ForeignKey(Fleet, db_column='fleet', to_field='name')
+ fleet = models.ForeignKey(Fleet, db_column='fleet_id', to_field='id')
vessel = models.ForeignKey(Vessel, db_column='mmsi', to_field='mmsi')
class Meta:
db_table = u'fleet_vessel'
(r'^$', 'ais.djais.views.index'),
(r'^fleet/$', 'ais.djais.views.fleets'),
(r'^fleet/(?P<fleetname>[ a-zA-Z0-9_]+)/$', 'ais.djais.views.fleet'),
+ (r'^fleet/add$', 'ais.djais.views.fleet_edit', { 'fleetname': None}),
(r'^fleet/(?P<fleetname>[ a-zA-Z0-9_]+)/edit$', 'ais.djais.views.fleet_edit'),
(r'^fleet/(?P<fleetname>[ a-zA-Z0-9_]+)/list$', 'ais.djais.views.fleet_vessels'),
(r'^fleet/(?P<fleetname>[ a-zA-Z0-9_]+)/add$', 'ais.djais.views.fleet_vessel_add'),
@http_authenticate(auth, 'ais')
def fleet(request, fleetname):
- fleet = get_object_or_404(Fleet, pk=fleetname)
- if not FleetUser.objects.filter(fleet=fleetname, user=request.user.id).all():
+ fleet = get_object_or_404(Fleet, name=fleetname)
+ if not FleetUser.objects.filter(fleet=fleet.id, user=request.user.id).all():
return HttpResponseForbidden('<h1>Forbidden</h1>')
return render_to_response('fleet.html', {'fleet':fleet}, RequestContext(request))
class FleetEditForm(forms.Form):
+ #name = forms.CharField()
description = forms.CharField(widget=forms.Textarea)
@http_authenticate(auth, 'ais')
def fleet_edit(request, fleetname):
- fleet = get_object_or_404(Fleet, pk=fleetname)
- if not FleetUser.objects.filter(fleet=fleetname, user=request.user.id).all():
+ # TODO fleetname = None => add
+ fleet = get_object_or_404(Fleet, name=fleetname)
+ if not FleetUser.objects.filter(fleet=fleet.id, user=request.user.id).all():
return HttpResponseForbidden('<h1>Forbidden</h1>')
initial = {}
initial['description'] = fleet.description
+ initial['id'] = fleet.name
if request.method == 'POST':
form = FleetEditForm(request.POST, initial=initial)
if form.is_valid():
@http_authenticate(auth, 'ais')
def fleet_vessels(request, fleetname):
- fleet = get_object_or_404(Fleet, pk=fleetname)
- if not FleetUser.objects.filter(fleet=fleetname, user=request.user.id).all():
+ fleet = get_object_or_404(Fleet, name=fleetname)
+ if not FleetUser.objects.filter(fleet=fleet, user=request.user.id).all():
return HttpResponseForbidden('<h1>Forbidden</h1>')
vessels = fleet.vessel.all()
return render_to_response('fleet_vessels.html', {'fleet':fleet, 'vessels': vessels}, RequestContext(request))
@http_authenticate(auth, 'ais')
def fleet_vessel_add(request, fleetname):
- fleet = get_object_or_404(Fleet, pk=fleetname)
- if not FleetUser.objects.filter(fleet=fleetname, user=request.user.id).all():
+ fleet = get_object_or_404(Fleet, name=fleetname)
+ if not FleetUser.objects.filter(fleet=fleet.id, user=request.user.id).all():
return HttpResponseForbidden('<h1>Forbidden</h1>')
strmmsi = request.REQUEST['mmsi']
mmsi = strmmsi_to_mmsi(strmmsi)
@http_authenticate(auth, 'ais')
def fleet_vessel_add2(request, fleetname):
- fleet = get_object_or_404(Fleet, pk=fleetname)
- if not FleetUser.objects.filter(fleet=fleetname, user=request.user.id).all():
+ fleet = get_object_or_404(Fleet, name=fleetname)
+ if not FleetUser.objects.filter(fleet=fleet.id, user=request.user.id).all():
return HttpResponseForbidden('<h1>Forbidden</h1>')
if request.method == 'POST' or request.META['QUERY_STRING']:
form = FleetAddVessel(request.REQUEST)
@http_authenticate(auth, 'ais')
def fleet_users(request, fleetname):
- fleet = get_object_or_404(Fleet, pk=fleetname)
- if not FleetUser.objects.filter(fleet=fleetname, user=request.user.id).all():
+ fleet = get_object_or_404(Fleet, name=fleetname)
+ if not FleetUser.objects.filter(fleet=fleet.id, user=request.user.id).all():
return HttpResponseForbidden('<h1>Forbidden</h1>')
message = u''
fleetusers = fleet.fleetuser_set.all()
otherusers = User.objects.exclude(id__in=[fu.user.id for fu in fleetusers]).order_by('name')
+ #FIXME: don't use message anymore!
return render_to_response('fleet_users.html', {'fleet':fleet, 'fleetusers': fleetusers, 'otherusers': otherusers, 'message': message }, RequestContext(request))
@http_authenticate(auth, 'ais')
def fleet_lastpos(request, fleetname):
- fleet = get_object_or_404(Fleet, pk=fleetname)
- if not FleetUser.objects.filter(fleet=fleetname, user=request.user.id).all():
+ fleet = get_object_or_404(Fleet, name=fleetname)
+ if not FleetUser.objects.filter(fleet=fleet.id, user=request.user.id).all():
return HttpResponseForbidden('<h1>Forbidden</h1>')
fleet_uset = load_fleet_to_uset(fleetname)
# = set([mmsi_to_strmmsi(vessel.mmsi) for vessel in fleet.vessel.all()])
<a href=lastpos class=button>Last positions in Google Earth</a><br>
<a href=list class=button>Vessel list</a> ({{ fleet.vessel_count }} vessel{{ fleet.vessel_count|pluralize }})<br>
<a href=users class=button>User list</a> ({{ fleet.user_count }} user{{ fleet.user_count|pluralize }})<br>
-<a href=edit class=button>Change descrription</a><br>
+<a href=edit class=button>Change description</a><br>
{% endblock %}
CREATE TABLE fleet (
name character varying(50) NOT NULL,
description text DEFAULT ''::text NOT NULL,
- created timestamp without time zone DEFAULT now() NOT NULL
+ created timestamp without time zone DEFAULT now() NOT NULL,
+ id integer NOT NULL
);
+--
+-- Name: fleet_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE fleet_id_seq
+ INCREMENT BY 1
+ NO MAXVALUE
+ NO MINVALUE
+ CACHE 1;
+
+
+--
+-- Name: fleet_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE fleet_id_seq OWNED BY fleet.id;
+
+
--
-- Name: fleet_user; Type: TABLE; Schema: public; Owner: -; Tablespace:
--
CREATE TABLE fleet_user (
id integer NOT NULL,
- fleet character varying(50) NOT NULL,
- user_id integer NOT NULL
+ user_id integer NOT NULL,
+ fleet_id integer NOT NULL
);
CREATE TABLE fleet_vessel (
id integer NOT NULL,
- fleet character varying(50) NOT NULL,
- mmsi integer NOT NULL
+ mmsi integer NOT NULL,
+ fleet_id integer NOT NULL
);
);
+--
+-- Name: id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE fleet ALTER COLUMN id SET DEFAULT nextval('fleet_id_seq'::regclass);
+
+
--
-- Name: id; Type: DEFAULT; Schema: public; Owner: -
--
--
ALTER TABLE ONLY fleet
- ADD CONSTRAINT fleet_pkey PRIMARY KEY (name);
+ ADD CONSTRAINT fleet_pkey PRIMARY KEY (id);
--
--
ALTER TABLE ONLY fleet_user
- ADD CONSTRAINT fleet_user_pkey2 UNIQUE (fleet, user_id);
+ ADD CONSTRAINT fleet_user_pkey2 UNIQUE (user_id, fleet_id);
--
--
ALTER TABLE ONLY fleet_vessel
- ADD CONSTRAINT fleet_vessel_pkey2 UNIQUE (fleet, mmsi);
+ ADD CONSTRAINT fleet_vessel_pkey2 UNIQUE (mmsi, fleet_id);
--
--
--- Name: fleet_user_fleet_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+-- Name: fleet_user_fleet_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY fleet_user
- ADD CONSTRAINT fleet_user_fleet_fkey FOREIGN KEY (fleet) REFERENCES fleet(name) ON UPDATE CASCADE ON DELETE CASCADE;
+ ADD CONSTRAINT fleet_user_fleet_id_fkey FOREIGN KEY (fleet_id) REFERENCES fleet(id) ON UPDATE CASCADE ON DELETE CASCADE;
--
--
--- Name: fleet_vessel_fleet_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+-- Name: fleet_vessel_fleet_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY fleet_vessel
- ADD CONSTRAINT fleet_vessel_fleet_fkey FOREIGN KEY (fleet) REFERENCES fleet(name) ON UPDATE CASCADE ON DELETE CASCADE;
+ ADD CONSTRAINT fleet_vessel_fleet_id_fkey FOREIGN KEY (fleet_id) REFERENCES fleet(id) ON UPDATE CASCADE ON DELETE CASCADE;
--