Statistics
| Branch: | Tag: | Revision:

root / snf-quotaholder-app / quotaholder_django / quotaholder_app / models.py @ c11dc0ce

History | View | Annotate | Download (7.8 kB)

1 3e5941c1 Giorgos Korfiatis
# Copyright 2012 GRNET S.A. All rights reserved.
2 3e5941c1 Giorgos Korfiatis
#
3 3e5941c1 Giorgos Korfiatis
# Redistribution and use in source and binary forms, with or
4 3e5941c1 Giorgos Korfiatis
# without modification, are permitted provided that the following
5 3e5941c1 Giorgos Korfiatis
# conditions are met:
6 3e5941c1 Giorgos Korfiatis
#
7 3e5941c1 Giorgos Korfiatis
#   1. Redistributions of source code must retain the above
8 3e5941c1 Giorgos Korfiatis
#      copyright notice, this list of conditions and the following
9 3e5941c1 Giorgos Korfiatis
#      disclaimer.
10 3e5941c1 Giorgos Korfiatis
#
11 3e5941c1 Giorgos Korfiatis
#   2. Redistributions in binary form must reproduce the above
12 3e5941c1 Giorgos Korfiatis
#      copyright notice, this list of conditions and the following
13 3e5941c1 Giorgos Korfiatis
#      disclaimer in the documentation and/or other materials
14 3e5941c1 Giorgos Korfiatis
#      provided with the distribution.
15 3e5941c1 Giorgos Korfiatis
#
16 3e5941c1 Giorgos Korfiatis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 3e5941c1 Giorgos Korfiatis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 3e5941c1 Giorgos Korfiatis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 3e5941c1 Giorgos Korfiatis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 3e5941c1 Giorgos Korfiatis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 3e5941c1 Giorgos Korfiatis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 3e5941c1 Giorgos Korfiatis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 3e5941c1 Giorgos Korfiatis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 3e5941c1 Giorgos Korfiatis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 3e5941c1 Giorgos Korfiatis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 3e5941c1 Giorgos Korfiatis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 3e5941c1 Giorgos Korfiatis
# POSSIBILITY OF SUCH DAMAGE.
28 3e5941c1 Giorgos Korfiatis
#
29 3e5941c1 Giorgos Korfiatis
# The views and conclusions contained in the software and
30 3e5941c1 Giorgos Korfiatis
# documentation are those of the authors and should not be
31 3e5941c1 Giorgos Korfiatis
# interpreted as representing official policies, either expressed
32 3e5941c1 Giorgos Korfiatis
# or implied, of GRNET S.A.
33 3e5941c1 Giorgos Korfiatis
34 9f1a1bd0 Georgios D. Tsoukalas
35 f54beeea Giorgos Korfiatis
from synnefo.lib.commissioning import CorruptedError
36 c11dc0ce Giorgos Korfiatis
from synnefo.lib.db.intdecimalfield import intDecimalField
37 9f1a1bd0 Georgios D. Tsoukalas
38 140513a9 Georgios D. Tsoukalas
from django.db.models import (Model, BigIntegerField, CharField,
39 c11dc0ce Giorgos Korfiatis
                              ForeignKey, AutoField)
40 9f1a1bd0 Georgios D. Tsoukalas
from django.db import transaction
41 5d996aea Giorgos Korfiatis
from .managers import ForUpdateManager
42 9f1a1bd0 Georgios D. Tsoukalas
43 9f1a1bd0 Georgios D. Tsoukalas
class Holder(Model):
44 9f1a1bd0 Georgios D. Tsoukalas
45 841d0de0 Georgios D. Tsoukalas
    attribute   =   CharField(max_length=4096, primary_key=True)
46 9f1a1bd0 Georgios D. Tsoukalas
    intval      =   BigIntegerField()
47 841d0de0 Georgios D. Tsoukalas
    strval      =   CharField(max_length=4096)
48 9f1a1bd0 Georgios D. Tsoukalas
49 5d996aea Giorgos Korfiatis
    objects     =   ForUpdateManager()
50 9f1a1bd0 Georgios D. Tsoukalas
51 9f1a1bd0 Georgios D. Tsoukalas
class Entity(Model):
52 9f1a1bd0 Georgios D. Tsoukalas
53 841d0de0 Georgios D. Tsoukalas
    entity      =   CharField(max_length=4096, primary_key=True)
54 9f1a1bd0 Georgios D. Tsoukalas
    owner       =   ForeignKey('self', to_field='entity',
55 9f1a1bd0 Georgios D. Tsoukalas
                               related_name='entities')
56 841d0de0 Georgios D. Tsoukalas
    key         =   CharField(max_length=4096, null=False)
57 9f1a1bd0 Georgios D. Tsoukalas
58 5d996aea Giorgos Korfiatis
    objects     =   ForUpdateManager()
59 9f1a1bd0 Georgios D. Tsoukalas
60 9f1a1bd0 Georgios D. Tsoukalas
class Policy(Model):
61 9f1a1bd0 Georgios D. Tsoukalas
62 841d0de0 Georgios D. Tsoukalas
    policy          =   CharField(max_length=4096, primary_key=True)
63 39462ae0 Giorgos Korfiatis
    quantity        =   intDecimalField()
64 39462ae0 Giorgos Korfiatis
    capacity        =   intDecimalField()
65 39462ae0 Giorgos Korfiatis
    import_limit    =   intDecimalField()
66 39462ae0 Giorgos Korfiatis
    export_limit    =   intDecimalField()
67 9f1a1bd0 Georgios D. Tsoukalas
68 5d996aea Giorgos Korfiatis
    objects     =   ForUpdateManager()
69 9f1a1bd0 Georgios D. Tsoukalas
70 9f1a1bd0 Georgios D. Tsoukalas
class Holding(Model):
71 9f1a1bd0 Georgios D. Tsoukalas
72 9f1a1bd0 Georgios D. Tsoukalas
    entity      =   ForeignKey(Entity, to_field='entity')
73 841d0de0 Georgios D. Tsoukalas
    resource    =   CharField(max_length=4096, null=False)
74 9f1a1bd0 Georgios D. Tsoukalas
75 9f1a1bd0 Georgios D. Tsoukalas
    policy      =   ForeignKey(Policy, to_field='policy')
76 9f1a1bd0 Georgios D. Tsoukalas
    flags       =   BigIntegerField(null=False, default=0)
77 9f1a1bd0 Georgios D. Tsoukalas
78 39462ae0 Giorgos Korfiatis
    imported    =   intDecimalField(default=0)
79 39462ae0 Giorgos Korfiatis
    importing   =   intDecimalField(default=0)
80 39462ae0 Giorgos Korfiatis
    exported    =   intDecimalField(default=0)
81 39462ae0 Giorgos Korfiatis
    exporting   =   intDecimalField(default=0)
82 39462ae0 Giorgos Korfiatis
    returned    =   intDecimalField(default=0)
83 39462ae0 Giorgos Korfiatis
    returning   =   intDecimalField(default=0)
84 39462ae0 Giorgos Korfiatis
    released    =   intDecimalField(default=0)
85 39462ae0 Giorgos Korfiatis
    releasing   =   intDecimalField(default=0)
86 9f1a1bd0 Georgios D. Tsoukalas
87 5d996aea Giorgos Korfiatis
    objects     =   ForUpdateManager()
88 5d996aea Giorgos Korfiatis
89 9f1a1bd0 Georgios D. Tsoukalas
    class Meta:
90 9f1a1bd0 Georgios D. Tsoukalas
        unique_together = (('entity', 'resource'),)
91 9f1a1bd0 Georgios D. Tsoukalas
92 9f1a1bd0 Georgios D. Tsoukalas
93 9f1a1bd0 Georgios D. Tsoukalas
from datetime import datetime
94 9f1a1bd0 Georgios D. Tsoukalas
95 9f1a1bd0 Georgios D. Tsoukalas
def now():
96 fe6c61fb root
    return datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%f')[:24]
97 9f1a1bd0 Georgios D. Tsoukalas
98 9f1a1bd0 Georgios D. Tsoukalas
99 9f1a1bd0 Georgios D. Tsoukalas
class Commission(Model):
100 9f1a1bd0 Georgios D. Tsoukalas
101 140513a9 Georgios D. Tsoukalas
    serial      =   AutoField(primary_key=True)
102 9f1a1bd0 Georgios D. Tsoukalas
    entity      =   ForeignKey(Entity, to_field='entity')
103 841d0de0 Georgios D. Tsoukalas
    name        =   CharField(max_length=4096, null=True)
104 841d0de0 Georgios D. Tsoukalas
    clientkey   =   CharField(max_length=4096, null=False)
105 9f1a1bd0 Georgios D. Tsoukalas
    issue_time  =   CharField(max_length=24, default=now)
106 9f1a1bd0 Georgios D. Tsoukalas
107 5d996aea Giorgos Korfiatis
    objects     =   ForUpdateManager()
108 9f1a1bd0 Georgios D. Tsoukalas
109 9f1a1bd0 Georgios D. Tsoukalas
class Provision(Model):
110 9f1a1bd0 Georgios D. Tsoukalas
111 9f1a1bd0 Georgios D. Tsoukalas
    serial      =   ForeignKey( Commission,
112 9f1a1bd0 Georgios D. Tsoukalas
                                to_field='serial',
113 9f1a1bd0 Georgios D. Tsoukalas
                                related_name='provisions'   )
114 9f1a1bd0 Georgios D. Tsoukalas
115 9f1a1bd0 Georgios D. Tsoukalas
    entity      =   ForeignKey(Entity, to_field='entity')
116 841d0de0 Georgios D. Tsoukalas
    resource    =   CharField(max_length=4096, null=False)
117 39462ae0 Giorgos Korfiatis
    quantity    =   intDecimalField()
118 9f1a1bd0 Georgios D. Tsoukalas
119 5d996aea Giorgos Korfiatis
    objects     =   ForUpdateManager()
120 9f1a1bd0 Georgios D. Tsoukalas
121 f590f930 Georgios D. Tsoukalas
class ProvisionLog(Model):
122 f590f930 Georgios D. Tsoukalas
123 4dbc21cf Christos Stavrakakis
    serial              =   BigIntegerField()
124 841d0de0 Georgios D. Tsoukalas
    source              =   CharField(max_length=4096)
125 841d0de0 Georgios D. Tsoukalas
    target              =   CharField(max_length=4096)
126 841d0de0 Georgios D. Tsoukalas
    name                =   CharField(max_length=4096)
127 841d0de0 Georgios D. Tsoukalas
    issue_time          =   CharField(max_length=4096)
128 841d0de0 Georgios D. Tsoukalas
    log_time            =   CharField(max_length=4096)
129 841d0de0 Georgios D. Tsoukalas
    resource            =   CharField(max_length=4096)
130 39462ae0 Giorgos Korfiatis
    source_quantity     =   intDecimalField()
131 39462ae0 Giorgos Korfiatis
    source_capacity     =   intDecimalField()
132 39462ae0 Giorgos Korfiatis
    source_import_limit =   intDecimalField()
133 39462ae0 Giorgos Korfiatis
    source_export_limit =   intDecimalField()
134 39462ae0 Giorgos Korfiatis
    source_imported     =   intDecimalField()
135 39462ae0 Giorgos Korfiatis
    source_exported     =   intDecimalField()
136 39462ae0 Giorgos Korfiatis
    source_returned     =   intDecimalField()
137 39462ae0 Giorgos Korfiatis
    source_released     =   intDecimalField()
138 39462ae0 Giorgos Korfiatis
    target_quantity     =   intDecimalField()
139 39462ae0 Giorgos Korfiatis
    target_capacity     =   intDecimalField()
140 39462ae0 Giorgos Korfiatis
    target_import_limit =   intDecimalField()
141 39462ae0 Giorgos Korfiatis
    target_export_limit =   intDecimalField()
142 39462ae0 Giorgos Korfiatis
    target_imported     =   intDecimalField()
143 39462ae0 Giorgos Korfiatis
    target_exported     =   intDecimalField()
144 39462ae0 Giorgos Korfiatis
    target_returned     =   intDecimalField()
145 39462ae0 Giorgos Korfiatis
    target_released     =   intDecimalField()
146 39462ae0 Giorgos Korfiatis
    delta_quantity      =   intDecimalField()
147 841d0de0 Georgios D. Tsoukalas
    reason              =   CharField(max_length=4096)
148 f590f930 Georgios D. Tsoukalas
149 5d996aea Giorgos Korfiatis
    objects     =   ForUpdateManager()
150 d6662f65 root
151 d6662f65 root
    def source_allocated_through(self):
152 d6662f65 root
        return self.source_imported - self.source_released
153 d6662f65 root
154 d6662f65 root
    def source_allocated(self):
155 d6662f65 root
        return (+ self.source_allocated_through()
156 d6662f65 root
                - self.source_exported
157 d6662f65 root
                + self.source_returned)
158 d6662f65 root
159 d6662f65 root
    def source_inbound_through(self):
160 d6662f65 root
        return self.source_imported
161 d6662f65 root
162 d6662f65 root
    def source_inbound(self):
163 d6662f65 root
        return self.source_inbound_through() + self.source_returned
164 d6662f65 root
165 d6662f65 root
    def source_outbound_through(self):
166 d6662f65 root
        return self.source_released
167 d6662f65 root
168 d6662f65 root
    def source_outbound(self):
169 d6662f65 root
        return self.source_outbound_through() + self.source_exported
170 d6662f65 root
171 d6662f65 root
    def target_allocated_through(self):
172 d6662f65 root
        return self.target_imported - self.target_released
173 d6662f65 root
174 d6662f65 root
    def target_allocated(self):
175 d6662f65 root
        return (+ self.target_allocated_through()
176 d6662f65 root
                - self.target_exported
177 d6662f65 root
                + self.target_returned)
178 d6662f65 root
179 d6662f65 root
    def target_inbound_through(self):
180 d6662f65 root
        return self.target_imported
181 d6662f65 root
182 d6662f65 root
    def target_inbound(self):
183 d6662f65 root
        return self.target_inbound_through() + self.target_returned
184 d6662f65 root
185 d6662f65 root
    def target_outbound_through(self):
186 d6662f65 root
        return self.target_released
187 d6662f65 root
188 d6662f65 root
    def target_outbound(self):
189 d6662f65 root
        return self.target_outbound_through() + self.target_exported
190 d6662f65 root
191 789d202d Giorgos Korfiatis
class CallSerial(Model):
192 789d202d Giorgos Korfiatis
193 789d202d Giorgos Korfiatis
    serial      =   BigIntegerField(null=False)
194 789d202d Giorgos Korfiatis
    clientkey   =   CharField(max_length=4096, null=False)
195 2fd11a01 Giorgos Korfiatis
196 789d202d Giorgos Korfiatis
    objects     =   ForUpdateManager()
197 789d202d Giorgos Korfiatis
198 789d202d Giorgos Korfiatis
    class Meta:
199 789d202d Giorgos Korfiatis
        unique_together = (('serial', 'clientkey'),)
200 789d202d Giorgos Korfiatis
201 789d202d Giorgos Korfiatis
202 5d996aea Giorgos Korfiatis
def _access(*args, **kwargs):
203 5d996aea Giorgos Korfiatis
    method = args[0]
204 5d996aea Giorgos Korfiatis
    model = args[1]
205 5d996aea Giorgos Korfiatis
    args = args[2:]
206 5d996aea Giorgos Korfiatis
    o = model.objects
207 5d996aea Giorgos Korfiatis
    try:
208 5d996aea Giorgos Korfiatis
        if kwargs['for_update']:
209 5d996aea Giorgos Korfiatis
            del kwargs['for_update']
210 5d996aea Giorgos Korfiatis
            o = o.select_for_update()
211 5d996aea Giorgos Korfiatis
    except KeyError:
212 5d996aea Giorgos Korfiatis
        pass
213 5d996aea Giorgos Korfiatis
    f = getattr(o, method)
214 5d996aea Giorgos Korfiatis
    return f(*args, **kwargs)
215 5d996aea Giorgos Korfiatis
216 5d996aea Giorgos Korfiatis
def _get(*args, **kwargs):
217 5d996aea Giorgos Korfiatis
    return _access('get', *args, **kwargs)
218 5d996aea Giorgos Korfiatis
219 5d996aea Giorgos Korfiatis
def _filter(*args, **kwargs):
220 5d996aea Giorgos Korfiatis
    return _access('filter', *args, **kwargs)
221 5d996aea Giorgos Korfiatis
222 5d996aea Giorgos Korfiatis
def db_get_holding(*args, **kwargs):
223 5d996aea Giorgos Korfiatis
    return _get(Holding, *args, **kwargs)
224 5d996aea Giorgos Korfiatis
225 5d996aea Giorgos Korfiatis
def db_get_entity(*args, **kwargs):
226 5d996aea Giorgos Korfiatis
    return _get(Entity, *args, **kwargs)
227 5d996aea Giorgos Korfiatis
228 5d996aea Giorgos Korfiatis
def db_get_policy(*args, **kwargs):
229 5d996aea Giorgos Korfiatis
    return _get(Policy, *args, **kwargs)
230 5d996aea Giorgos Korfiatis
231 5d996aea Giorgos Korfiatis
def db_get_commission(*args, **kwargs):
232 5d996aea Giorgos Korfiatis
    return _get(Commission, *args, **kwargs)
233 5d996aea Giorgos Korfiatis
234 789d202d Giorgos Korfiatis
def db_get_callserial(*args, **kwargs):
235 789d202d Giorgos Korfiatis
    return _get(CallSerial, *args, **kwargs)
236 789d202d Giorgos Korfiatis
237 5d996aea Giorgos Korfiatis
def db_filter_provision(*args, **kwargs):
238 5d996aea Giorgos Korfiatis
    return _filter(Provision, *args, **kwargs)