Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / quotaholder_app / models.py @ 903ce7dc

History | View | Annotate | Download (3.7 kB)

1 ea1e5d9f Giorgos Korfiatis
# Copyright 2012, 2013 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 15e727f1 Giorgos Korfiatis
from datetime import datetime
35 b052f360 Giorgos Korfiatis
from snf_django.lib.db.fields import intDecimalField
36 9f1a1bd0 Georgios D. Tsoukalas
37 140513a9 Georgios D. Tsoukalas
from django.db.models import (Model, BigIntegerField, CharField,
38 c11dc0ce Giorgos Korfiatis
                              ForeignKey, AutoField)
39 9f1a1bd0 Georgios D. Tsoukalas
from django.db import transaction
40 222a4f6a Giorgos Korfiatis
from snf_django.lib.db.managers import ForUpdateManager
41 9f1a1bd0 Georgios D. Tsoukalas
42 15e727f1 Giorgos Korfiatis
43 9f1a1bd0 Georgios D. Tsoukalas
class Holding(Model):
44 9f1a1bd0 Georgios D. Tsoukalas
45 15e727f1 Giorgos Korfiatis
    holder = CharField(max_length=4096, db_index=True)
46 15e727f1 Giorgos Korfiatis
    source = CharField(max_length=4096, null=True)
47 15e727f1 Giorgos Korfiatis
    resource = CharField(max_length=4096, null=False)
48 9f1a1bd0 Georgios D. Tsoukalas
49 15e727f1 Giorgos Korfiatis
    limit = intDecimalField()
50 68b991bc Giorgos Korfiatis
    usage_min = intDecimalField(default=0)
51 68b991bc Giorgos Korfiatis
    usage_max = intDecimalField(default=0)
52 9f1a1bd0 Georgios D. Tsoukalas
53 15e727f1 Giorgos Korfiatis
    objects = ForUpdateManager()
54 5d996aea Giorgos Korfiatis
55 9f1a1bd0 Georgios D. Tsoukalas
    class Meta:
56 2864e701 Giorgos Korfiatis
        unique_together = (('holder', 'source', 'resource'),)
57 9f1a1bd0 Georgios D. Tsoukalas
58 9f1a1bd0 Georgios D. Tsoukalas
59 9f1a1bd0 Georgios D. Tsoukalas
def now():
60 fe6c61fb root
    return datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%f')[:24]
61 9f1a1bd0 Georgios D. Tsoukalas
62 9f1a1bd0 Georgios D. Tsoukalas
63 9f1a1bd0 Georgios D. Tsoukalas
class Commission(Model):
64 9f1a1bd0 Georgios D. Tsoukalas
65 15e727f1 Giorgos Korfiatis
    serial = AutoField(primary_key=True)
66 f6e7a826 Giorgos Korfiatis
    name = CharField(max_length=4096, default="")
67 15e727f1 Giorgos Korfiatis
    clientkey = CharField(max_length=4096, null=False)
68 3679f852 Giorgos Korfiatis
    issue_time = CharField(max_length=24)
69 15e727f1 Giorgos Korfiatis
70 15e727f1 Giorgos Korfiatis
    objects = ForUpdateManager()
71 9f1a1bd0 Georgios D. Tsoukalas
72 9f1a1bd0 Georgios D. Tsoukalas
73 9f1a1bd0 Georgios D. Tsoukalas
class Provision(Model):
74 9f1a1bd0 Georgios D. Tsoukalas
75 15e727f1 Giorgos Korfiatis
    serial = ForeignKey(Commission,
76 15e727f1 Giorgos Korfiatis
                        to_field='serial',
77 15e727f1 Giorgos Korfiatis
                        related_name='provisions')
78 15e727f1 Giorgos Korfiatis
    holder = CharField(max_length=4096, db_index=True)
79 15e727f1 Giorgos Korfiatis
    source = CharField(max_length=4096, null=True)
80 15e727f1 Giorgos Korfiatis
    resource = CharField(max_length=4096, null=False)
81 6c0f4562 Giorgos Korfiatis
82 15e727f1 Giorgos Korfiatis
    quantity = intDecimalField()
83 9f1a1bd0 Georgios D. Tsoukalas
84 15e727f1 Giorgos Korfiatis
    objects = ForUpdateManager()
85 9f1a1bd0 Georgios D. Tsoukalas
86 79e3da8a Giorgos Korfiatis
    def todict(self):
87 6c0f4562 Giorgos Korfiatis
        return {'holder':   self.holder,
88 6c0f4562 Giorgos Korfiatis
                'source':   self.source,
89 6c0f4562 Giorgos Korfiatis
                'resource': self.resource,
90 79e3da8a Giorgos Korfiatis
                'quantity': self.quantity,
91 79e3da8a Giorgos Korfiatis
                }
92 79e3da8a Giorgos Korfiatis
93 6c0f4562 Giorgos Korfiatis
    def holding_key(self):
94 6c0f4562 Giorgos Korfiatis
        return (self.holder, self.source, self.resource)
95 6c0f4562 Giorgos Korfiatis
96 79e3da8a Giorgos Korfiatis
97 f590f930 Georgios D. Tsoukalas
class ProvisionLog(Model):
98 f590f930 Georgios D. Tsoukalas
99 15e727f1 Giorgos Korfiatis
    serial = BigIntegerField()
100 f6e7a826 Giorgos Korfiatis
    name = CharField(max_length=4096)
101 15e727f1 Giorgos Korfiatis
    issue_time = CharField(max_length=4096)
102 15e727f1 Giorgos Korfiatis
    log_time = CharField(max_length=4096)
103 15e727f1 Giorgos Korfiatis
    holder = CharField(max_length=4096)
104 15e727f1 Giorgos Korfiatis
    source = CharField(max_length=4096, null=True)
105 15e727f1 Giorgos Korfiatis
    resource = CharField(max_length=4096)
106 15e727f1 Giorgos Korfiatis
    limit = intDecimalField()
107 68b991bc Giorgos Korfiatis
    usage_min = intDecimalField()
108 68b991bc Giorgos Korfiatis
    usage_max = intDecimalField()
109 15e727f1 Giorgos Korfiatis
    delta_quantity = intDecimalField()
110 15e727f1 Giorgos Korfiatis
    reason = CharField(max_length=4096)
111 f590f930 Georgios D. Tsoukalas
112 15e727f1 Giorgos Korfiatis
    objects = ForUpdateManager()