create view roles_by_canvasser as
  select canvassers.id as canvasser, roles.name
    from roles, rolememberships, canvassers
    where roles.id = rolememberships.role_id
      and canvassers.id = rolememberships.canvasser_id
      and canvassers.authorised = true;

create view teams_by_canvasser as
  select canvassers.id as canvasser, teams.id, teams.name, teams.latitude, teams.longitude
    from teams, teammemberships, canvassers
    where teams.id = teammemberships.team_id
      and canvassers.id = teammemberships.canvasser_id;

create view canvassers_by_team as
  select teams.id as team,
        canvassers.id,
        canvassers.username,
        canvassers.fullname,
        canvassers.email,
        canvassers.phone
    from teams, teammemberships, canvassers
    where teams.id = teammemberships.team_id
      and canvassers.id = teammemberships.canvasser_id
      and canvassers.authorised = true;

create view canvassers_by_introducer as
  select introducers.id as introducer,
        canvassers.id as canvasser,
        canvassers.username,
        canvassers.fullname,
        canvassers.email,
        canvassers.phone,
        canvassers.authorised
    from canvassers, canvassers as introducers
    where introducers.id = canvassers.introduced_by;

create view teams_by_organiser as
  select canvassers.id as organiser,
        teams.id,
        teams.name,
        teams.latitude,
        teams.longitude
    from teams, teamorganiserships, canvassers
    where teams.id = teamorganiserships.team_id
      and canvassers.id = teamorganiserships.canvasser_id
      and canvassers.authorised = true;

create view organisers_by_team as
  select teams.id as team,
        canvassers.id,
        canvassers.username,
        canvassers.fullname,
        canvassers.email,
        canvassers.phone
    from teams, teamorganiserships, canvassers
    where teams.id = teamorganiserships.team_id
      and canvassers.id = teamorganiserships.canvasser_id
      and canvassers.authorised = true;