summaryrefslogtreecommitdiffstats
path: root/core/models_survex.py
blob: ba43d93d5723a1ace3ebd1e64b30be5320bd8dec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
from django.db import models
from django.conf import settings
import os


###########################################################
# These will allow browsing and editing of the survex data
###########################################################


# Needs to add: 
#   SurvexFile
#   Equates
#   reloading

#
# Single SurvexBlock 
# 
class SurvexBlock(models.Model):
    name = models.CharField(max_length=100, blank=True, null=True)
    parent = models.ForeignKey('SurvexBlock', blank=True, null=True)
    text = models.TextField()
    
    # non-useful representation of incomplete data
    start_year = models.IntegerField(blank=True, null=True)
    start_month = models.IntegerField(blank=True, null=True)
    start_day = models.IntegerField(blank=True, null=True)
    end_year = models.IntegerField(blank=True, null=True)
    end_month = models.IntegerField(blank=True, null=True)
    end_day = models.IntegerField(blank=True, null=True)
    
    date    = models.DateField(blank=True, null=True)
    survexpath  = models.CharField(max_length=100)
    
    # superfluous
    person  = models.ManyToManyField('Person', through='PersonRole', blank=True, null=True)
   
    # code for where in the survex data files this block sits
    begin_file = models.CharField(max_length=200)
    begin_char = models.IntegerField()
    end_file = models.CharField(max_length=200, blank=True, null=True)
    end_char = models.IntegerField(blank=True, null=True)
    
    class Meta:
        ordering = ('date', 'survexpath')

    def __unicode__(self):
        return self.name and unicode(self.name) or 'no name'
    
    def filewithoutsvx(self):
        return self.begin_file[:-4]
    
    def filecontents(self):
        f = os.path.join(settings.SURVEX_DATA, self.begin_file)
        fin = open(f, "rb")
        res = fin.read().decode("latin1")
        fin.close()
        return res
        
    def GetPersonroles(self):
        res = [ ]
        for personrole in self.personrole_set.order_by('personexpedition'):
            if res and res[-1]['person'] == personrole.personexpedition.person:
                res[-1]['roles'] += ", " + str(personrole.role)
            else:
                res.append({'person':personrole.personexpedition.person, 'expeditionyear':personrole.personexpedition.expedition.year, 'roles':str(personrole.role)})
        return res


#
# Replace this with a choice string in PersonRole
#
class Role(models.Model):
    name = models.CharField(max_length=50)
    def __unicode__(self):
        return unicode(self.name)


#
# member of a SurvexBlock
#
class PersonRole(models.Model):
    survex_block        = models.ForeignKey('SurvexBlock')
    role                = models.ForeignKey('Role')  # to go
    
    ROLE_CHOICES = (
        ('insts','Instruments'),
        ('dog','Other'),
        ('notes','Notes'),
        ('pics','Pictures'),
        ('tape','Tape measure'),
        )
    nrole = models.CharField(choices=ROLE_CHOICES, max_length=200, blank=True, null=True)

    # increasing levels of precision
    person              = models.ForeignKey('Person')
    personexpedition    = models.ForeignKey('PersonExpedition')
    persontrip          = models.ForeignKey('PersonTrip', blank=True, null=True)  
    
    def __unicode__(self):
        return unicode(self.person) + " - " + unicode(self.survex_block) + " - " + unicode(self.role)