Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Addin the last 3 models #118

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
160 changes: 108 additions & 52 deletions cmp/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,20 @@ class CustomUser(AbstractUser):
def __str__(self):
return self.email

class Country(models.Model):
# 3
name = models.CharField(max_length=255, unique=True, default='')
alpha2 = models.CharField(max_length=2, unique=True, default='')
alpha3 = models.CharField(max_length=3, unique=True, default='')
country_number = models.CharField(max_length=3, unique=True)
flag = models.CharField(max_length=255, default='')

def __str__(self):
return self.name

def get_absolute_url(self):
return reverse('countries', args=[str(self.id)])

class Rank(models.Model):
# 6
name = models.CharField(max_length=50, unique=True)
Expand All @@ -27,6 +41,15 @@ class Rank(models.Model):
def __str__(self):
return self.name

class Cemetery(models.Model):
# 1
name = models.CharField(max_length=255, unique=True, default='')
country = models.ForeignKey('Country', on_delete=models.CASCADE, related_name='cemeteries')
latitude = models.CharField(max_length=255, unique=False, default='') # latitude
longitude = models.CharField(max_length=255, unique=False, default='') # longitude

def __str__(self):
return self.name

class PowCamp(models.Model):
name = models.CharField(max_length=255, unique=True, default='')
Expand All @@ -47,8 +70,27 @@ class Theatre(models.Model):
def __str__(self):
return self.name

class Company(models.Model):
# 2
name = models.CharField(max_length=255, unique=True, default='')
notes = models.CharField(max_length=255, unique=False, default='')

def __str__(self):
return self.name

class Decoration(models.Model):
# 4
name = models.CharField(max_length=255, unique=True, default='')
notes = models.CharField(max_length=255, unique=False, default='')
country = models.ForeignKey('Country', on_delete=models.CASCADE)
details_link = models.CharField(max_length=255, unique=False, default='')
abbreviation = models.CharField(max_length=255, unique=False, default='')

def __str__(self):
return self.Name


class Soldier(models.Model):
# 10
surname = models.CharField(max_length=255, unique=False, default='')
initials = models.CharField(max_length=255, unique=False, default='')
army_number = models.CharField(max_length=255, unique=False, default='')
Expand All @@ -58,8 +100,50 @@ class Soldier(models.Model):
def __str__(self):
return self.surname


class SoldierDeath(models.Model):
soldier = models.ForeignKey('Soldier', on_delete=models.CASCADE)
#soldier = models.OneToOneField(Soldier, on_delete=models.CASCADE, related_name='soldierdeath')
date = models.DateField(null=True, blank=True)
company = models.ForeignKey(Company, blank=True, null=True, default="UNKNOWN", on_delete=models.CASCADE, related_name='companies')
cemetery = models.ForeignKey(Cemetery, blank=True, null=True, default=110, on_delete=models.CASCADE, related_name='cemeteries')
cwgc_id = models.IntegerField(blank=True, null=True, unique=True, verbose_name="War Graves ID")
def __unicode__(self):
return '%s %s %s' % (self.Soldier, self.Date, self.cemetery)

def cwgc_url(self):
"""Build a URL for a link to CWGC site."""
wg_site = 'http://www.cwgc.org'
if self.cwgc_id:
wg_string = 'find-war-dead/casualty/%s/' % (self.cwgc_id)
wg_url = '%s/%s' % (wg_site, wg_string )
return wg_url
else:
dk = self.Date
wg_string = 'search/SearchResults.aspx?surname=%s&initials=%s&war=0&yearfrom=%s&yearto=%s&force=%s&nationality=&send.x=26&send.y=19"' % (self.Soldier.Surname, self.Soldier.first_initial(), dk.year, dk.year, 'Army')
wg_url = '%s/%s' % (wg_site, wg_string )
return wg_url

def grave_photo(self):
photo_dir = '/sites/corpsofmilitarypolice.org/www/media/grave_images'
id_photo_dir = '/sites/corpsofmilitarypolice.org/www/media/grave_images/soldier_id'
"""Determine whether or not a photograph exists
for a soldier with a particular army number"""
army_number = self.Soldier.Army_number
modded_an = re.sub('\/','_',army_number,1)
photo_name = modded_an + ".jpg"
id_photo_name = str(self.Soldier.id) + ".jpg"
photo_file = '%s/%s' % (photo_dir, photo_name)
id_photo_file = '%s/%s' % (id_photo_dir, id_photo_name)
if os.path.isfile(photo_file):
return photo_name
elif os.path.isfile(id_photo_file):
return 'soldier_id/%s' % id_photo_name
else:
return None


class SoldierImprisonment(models.Model):
# 9
soldier = models.ForeignKey('Soldier', on_delete=models.CASCADE)
legacy_company = models.CharField(max_length=255, unique=False, default='')
pow_number = models.CharField(max_length=255, unique=False, default='')
Expand All @@ -72,54 +156,26 @@ class SoldierImprisonment(models.Model):


class SoldierDecoration(models.Model):
# 8
name = models.CharField(max_length=255, unique=True, default='')
notes = models.CharField(max_length=255, unique=False, default='')
country_id = models.ForeignKey('Country', on_delete=models.CASCADE)
details_link = models.CharField(max_length=255, unique=False, default='')
abbreviation = models.CharField(max_length=255, unique=False, default='')

class Company(models.Model):
# 2
name = models.CharField(max_length=255, unique=True, default='')
notes = models.CharField(max_length=255, unique=False, default='')

soldier = models.ForeignKey(Soldier, null=False, blank=False, on_delete=models.CASCADE)
company = models.ForeignKey(Company, blank=True, null=True, on_delete=models.CASCADE )
decoration = models.ForeignKey(Decoration, blank=True, null=True, on_delete=models.CASCADE)
gazette_issue = models.CharField(max_length=50, blank=True)
gazette_page = models.CharField(max_length=50, blank=True)
gazette_date = models.DateField(null=True, blank=True)
theatre = models.ForeignKey(Theatre, blank=True, null=True, help_text="Theatre of Operations e.g. Normandy, B.E.F. France & Flanders. NOT Country names", on_delete=models.CASCADE)
country = models.ForeignKey(Country, blank=True, null=True, on_delete=models.CASCADE)
citation = models.TextField(max_length=50000, blank=True)
notes = models.TextField(max_length=50000, blank=True)
def __str__(self):
return self.name


class Cemetery(models.Model):
# 1
name = models.CharField(max_length=255, unique=True, default='')
country = models.ForeignKey('Country', on_delete=models.CASCADE, related_name='cemeteries')
latitude = models.CharField(max_length=255, unique=False, default='') # latitude
longitude = models.CharField(max_length=255, unique=False, default='') # longitude

def __str__(self):
return self.name


class Decoration(models.Model):
# 4
name = models.CharField(max_length=255, unique=True, default='')
notes = models.CharField(max_length=255, unique=False, default='')
country = models.ForeignKey('Country', on_delete=models.CASCADE)
details_link = models.CharField(max_length=255, unique=False, default='')
abbreviation = models.CharField(max_length=255, unique=False, default='')

def __str__(self):
return self.Name

class Country(models.Model):
# 3
name = models.CharField(max_length=255, unique=True, default='')
alpha2 = models.CharField(max_length=2, unique=True, default='')
alpha3 = models.CharField(max_length=3, unique=True, default='')
country_number = models.CharField(max_length=3, unique=True)
flag = models.CharField(max_length=255, default='')

def __str__(self):
return self.name

def get_absolute_url(self):
return reverse('countries', args=[str(self.id)])
return self.decoration

def generate_gazette_url(self):
"""Build a URL for the London Gazette website. This will not handle Edinburgh gazette"""
gz_site = 'http://www.thegazette.co.uk'
# "${gz_url}/SearchResults.aspx?GeoType=${gz_type}&st=${sc_type}&sb=issue&issue=${gz_issue}&gpn=${gz_page}&"
gz_type = 'london'
sc_type = 'adv'
#gz_string = "SearchResults.aspx?GeoType=${gz_type}&st=${sc_type}&sb=issue&issue=${gz_issue}&gpn=${gz_page}&"
gz_string = "%s/London/issue/%s/supplement/%s" % (gz_site, self.GztIssue, self.GztPage )
gazette_url = gz_string
return gazette_url
3 changes: 3 additions & 0 deletions insertall.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,8 @@ python manage.py runscript insert-all-pow-camps
python manage.py runscript insert-all-ranks
python manage.py runscript insert-all-decorations
python manage.py runscript insert-all-companies
python manage.py runscript insert-all-theatres
python manage.py runscript insert-all-soldiers
python manage.py runscript insert-all-soldier-imprisonments
# python manage.py runscript insert-all-soldier-decorations
# python manage.py runscript insert-all-soldier-deaths
5 changes: 5 additions & 0 deletions scripts/delete-all-soldier-deaths.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from cmp.models import SoldierDecoration

def run():
Decorations = SoldierDecoration.objects.all()
Decorations.delete()
5 changes: 5 additions & 0 deletions scripts/delete-all-soldier-decorations.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from cmp.models import SoldierDecoration

def run():
Decorations = SoldierDecoration.objects.all()
Decorations.delete()
5 changes: 5 additions & 0 deletions scripts/delete-all-theatres.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from cmp.models import Theatre

def run():
Theatres = Theatre.objects.all()
Theatres.delete()
37 changes: 37 additions & 0 deletions scripts/insert-all-soldier-decorations.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@

def run():

import sys
import urllib3
import csv
from cmp.models import SoldierDecoration

print()
title = sys.argv[2]
print(f"""\033[4;33m{title}\033[0m""")
print("-" * len(title))

ref_data_url = "https://raw.githubusercontent.com/gm3dmo/old-cmp/main/data/soldier-decoration.csv"
http = urllib3.PoolManager()
r = http.request('GET', ref_data_url)
print(r.status)
# load the response into a csv dictionary reader
reader = csv.DictReader(r.data.decode('ISO-8859-1').splitlines())
# breakpoint()
print(reader)
# id,soldier_id,company_id,decoration_id,gazetteIssue,gazettePage,gazetteDate,citation,notes,country_id
for row in reader:
print(f"""SoldierDecoration: {row['id']} {row['soldier_id']} """)
try:
SoldierDecoration.objects.create(
id = row['id'],
name = row['name'],
notes = row['notes'],
country_id = row['country_id'],
details_link = row['details_link'],
abbreviation = row['abbreviation']
)
except Exception as e:
print("Error with: " + row['id'])

raise e
35 changes: 35 additions & 0 deletions scripts/insert-all-theatres.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@

def run():

import sys
import urllib3
import csv
from cmp.models import Theatre

print()
title = sys.argv[2]
print(f"""\033[4;33m{title}\033[0m""")
print("-" * len(title))

ref_data_url = "https://raw.githubusercontent.com/gm3dmo/old-cmp/main/data/theatre.csv"
http = urllib3.PoolManager()
r = http.request('GET', ref_data_url)
print(r.status)
# load the response into a csv dictionary reader
reader = csv.DictReader(r.data.decode('utf-8').splitlines())

# add a country model for each row in the csv file
for row in reader:
print(row['Name'])
try:
Theatre.objects.create(
id=row['id'],
name=row['Name']
)
except Exception as e:
print("Error with: " + row['Name'])
raise e

for theatre in Theatre.objects.all():
print(f"""{theatre.id} {theatre.name}""")

Loading