summaryrefslogtreecommitdiffstats
path: root/core/models_survex.py
blob: 43617f5c5cb97066a904a1e2ca9427b23aec385d (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
104
105
106
107
108
109
110
111
112
113
114
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: 
#   Equates
#   reloading

class SurvexDirectory(models.Model):
    path = models.CharField(max_length=200)
    cave = models.ForeignKey('Cave', blank=True, null=True)
    primarysurvexfile = models.ForeignKey('SurvexFile', related_name='primarysurvexfile', blank=True, null=True)
    # could also include files in directory but not referenced
    
    class Meta:
        ordering = ('id',)
    
class SurvexFile(models.Model):
    path = models.CharField(max_length=200)
    survexdirectory = models.ForeignKey("SurvexDirectory", blank=True, null=True)
    cave = models.ForeignKey('Cave', blank=True, null=True)
    
    class Meta:
        ordering = ('id',)
    
    def exists(self):
        fname = os.path.join(settings.SURVEX_DATA, self.path + ".svx")
        return os.path.isfile(fname)
    
    def OpenFile(self):
        fname = os.path.join(settings.SURVEX_DATA, self.path + ".svx")
        return open(fname)
    
    def SetDirectory(self):
        dirpath = os.path.split(self.path)[0]
        survexdirectorylist = SurvexDirectory.objects.filter(cave=self.cave, path=dirpath)
        if survexdirectorylist:
            self.survexdirectory = survexdirectorylist[0]
        else:
            survexdirectory = SurvexDirectory(path=dirpath, cave=self.cave, primarysurvexfile=self)
            survexdirectory.save()
            self.survexdirectory = survexdirectory
        self.save()

#
# Single SurvexBlock 
# 
class SurvexBlock(models.Model):
    name = models.CharField(max_length=100)
    parent = models.ForeignKey('SurvexBlock', blank=True, null=True)
    text = models.TextField()
    cave = models.ForeignKey('Cave', blank=True, null=True)
    
    date    = models.DateField(blank=True, null=True)
    expedition = models.ForeignKey('Expedition', blank=True, null=True)
        
    survexfile  = models.ForeignKey("SurvexFile", blank=True, null=True)
    begin_char = models.IntegerField()  # code for where in the survex data files this block sits
    survexpath = models.CharField(max_length=200)   # the path for the survex stations
    refscandir = models.CharField(max_length=100)
    
    class Meta:
        ordering = ('id',)

    def __unicode__(self):
        return self.name and unicode(self.name) or 'no name'
    
    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

class SurvexTitle(models.Model):
    survexblock = models.ForeignKey('SurvexBlock')
    title = models.CharField(max_length=200)
    cave = models.ForeignKey('Cave', blank=True, null=True)

#
# member of a SurvexBlock
#
class PersonRole(models.Model):
    survex_block        = models.ForeignKey('SurvexBlock')
    
    ROLE_CHOICES = (
        ('insts','Instruments'),
        ('dog','Other'),
        ('notes','Notes'),
        ('pics','Pictures'),
        ('tape','Tape measure'),
        ('useless','Useless'),
        ('helper','Helper'),
        ('disto','Disto'),
        ('consultant','Consultant'),
        )
    nrole = models.CharField(choices=ROLE_CHOICES, max_length=200, blank=True, null=True)

    # increasing levels of precision
    personname          = models.CharField(max_length=100)
    person              = models.ForeignKey('Person', blank=True, null=True)
    personexpedition    = models.ForeignKey('PersonExpedition', blank=True, null=True)
    persontrip          = models.ForeignKey('PersonTrip', blank=True, null=True)  

    def __unicode__(self):
        return unicode(self.person) + " - " + unicode(self.survex_block) + " - " + unicode(self.nrole)