Start using automake/autoconf for configuring, building, and installing Evergreen
[Evergreen.git] / Open-ILS / admin / ils_admin / setup / ils_data / models.py
index dac4f05..ea19cec 100644 (file)
@@ -2,6 +2,7 @@ from django.db import models
 from django.db.models import signals
 from django.dispatch import dispatcher
 import datetime
+from gettext import gettext as _
 
 INTERVAL_HELP_TEXT = _('examples: "1 hour", "14 days", "3 months", "DD:HH:MM:SS.ms"')
 CHAR_MAXLEN=200 # just provide a sane default
@@ -221,7 +222,7 @@ class HoursOfOperation(models.Model):
     -------------------------------------------------------------- """
 
 class CircModifier(models.Model):
-    code = models.CharField(maxlength=CHAR_MAXLEN)
+    code = models.CharField(maxlength=CHAR_MAXLEN, blank=False, primary_key=True)
     name = models.CharField(maxlength=CHAR_MAXLEN)
     description = models.CharField(maxlength=CHAR_MAXLEN);
     sip2_media_type = models.CharField(maxlength=CHAR_MAXLEN);
@@ -238,7 +239,7 @@ class CircModifier(models.Model):
 
 
 class VideoRecordingFormat(models.Model):
-    code = models.CharField(maxlength=CHAR_MAXLEN)
+    code = models.CharField(maxlength=CHAR_MAXLEN, blank=False, primary_key=True)
     value = models.CharField(maxlength=CHAR_MAXLEN, help_text=INTERVAL_HELP_TEXT);
     class Admin:
         search_fields = ['value','code']
@@ -267,32 +268,48 @@ class RuleCircDuration(models.Model):
         return self.name
 
 class CircMatrixMatchpoint(models.Model):
-    active = models.BooleanField()
-    org_unit_id = models.ForeignKey(OrgUnit, db_column='org_unit')
-    grp_id = models.ForeignKey(GrpTree, db_column='grp')
-    circ_modifier_id = models.ForeignKey(CircModifier, db_column='circ_modifier')
-    marc_type_id = models.ForeignKey('ItemTypeMap', db_column='marc_type')
-    marc_form_id = models.ForeignKey('ItemFormMap', db_column='marc_form')
-    marc_vr_format_id = models.ForeignKey('VideoRecordingFormat', db_column='marc_vr_format')
-    ref_flag = models.BooleanField()
-    usr_age_lower_bound = models.CharField(maxlength=CHAR_MAXLEN, help_text=INTERVAL_HELP_TEXT);
-    usr_age_upper_bound = models.CharField(maxlength=CHAR_MAXLEN, help_text=INTERVAL_HELP_TEXT);
+    active = models.BooleanField(blank=False, default=True)
+    org_unit_id = models.ForeignKey(OrgUnit, db_column='org_unit', blank=False)
+    grp_id = models.ForeignKey(GrpTree, db_column='grp', blank=False, verbose_name=_("User Group"))
+    circ_modifier_id = models.ForeignKey(CircModifier, db_column='circ_modifier', null=True,blank=True)
+    marc_type_id = models.ForeignKey('ItemTypeMap', db_column='marc_type', null=True,blank=True)
+    marc_form_id = models.ForeignKey('ItemFormMap', db_column='marc_form', null=True,blank=True)
+    marc_vr_format_id = models.ForeignKey('VideoRecordingFormat', db_column='marc_vr_format', null=True,blank=True)
+    ref_flag = models.BooleanField(null=True)
+    usr_age_lower_bound = models.CharField(maxlength=CHAR_MAXLEN, help_text=INTERVAL_HELP_TEXT, null=True, blank=True)
+    usr_age_upper_bound = models.CharField(maxlength=CHAR_MAXLEN, help_text=INTERVAL_HELP_TEXT, null=True, blank=True)
+
+    def save(self):
+        ''' Override to force None-ness on the interval fields '''
+        if self.usr_age_lower_bound == "":
+            self.usr_age_lower_bound = None
+        if self.usr_age_upper_bound == "":
+            self.usr_age_upper_bound = None
+        return models.Model.save(self)
+
     class Admin:
-        list_display = ('org_unit_id','grp_id','circ_modifier_id','marc_type_id','marc_form_id','marc_vr_format_id','ref_flag','usr_age_lower_bound','usr_age_upper_bound')
+        search_fields = ['grp_id','org_unit_id','circ_modifier_id','marc_type_id','marc_form_id',
+            'marc_vr_format_id','usr_age_lower_bound','usr_age_upper_bound']
+
+        list_display = ('grp_id','org_unit_id','circ_modifier_id','marc_type_id','marc_form_id',
+            'marc_vr_format_id','ref_flag','usr_age_lower_bound','usr_age_upper_bound')
+
         list_filter = ['grp_id','org_unit_id','circ_modifier_id','marc_type_id','marc_form_id','marc_vr_format_id']
     class Meta:
         db_table = 'circ_matrix_matchpoint'
-        ordering = ['name']
+        ordering = ['id']
         verbose_name = _('Circulation Matrix Matchpoint')
     def __str__(self):
-        return _("OrgUnit: %s, Group: %s, Circ Modifier: %s") % (self.org_unit_id, self.grp_id, self.circ_modifier_id)
-
-class CircMatrixTest(models.Model)
-    matchpoint_id =  models.ForeignKey(CircMatrixMatchpoint, db_column='matchpoint')
-    max_items_out = models.IntegerField()
-    max_overdue = models.IntegerField()
-    max_fines = FloatField(max_digits=8, decimal_places=2)
-    script_test = models.CharField(maxlength=CHAR_MAXLEN);
+        return _("OrgUnit: %(orgid)s, Group: %(grpid)s, Circ Modifier: %(modid)s") % {
+            'orgid':self.org_unit_id, 'grpid':self.grp_id, 'modid':self.circ_modifier_id}
+
+class CircMatrixTest(models.Model):
+    matchpoint_id =  models.ForeignKey(CircMatrixMatchpoint, db_column='matchpoint', blank=False, primary_key=True, 
+        edit_inline=models.TABULAR, core=True, num_in_admin=1)
+    max_items_out = models.IntegerField(null=True, blank=True)
+    max_overdue = models.IntegerField(null=True, blank=True)
+    max_fines = models.FloatField(max_digits=8, decimal_places=2, null=True, blank=True)
+    script_test = models.CharField(maxlength=CHAR_MAXLEN, null=True, blank=True)
     class Admin:
         list_display = ('matchpoint_id','max_items_out','max_overdue','max_fines','script_test')
     class Meta:
@@ -300,36 +317,39 @@ class CircMatrixTest(models.Model)
         ordering = ['matchpoint_id']
         verbose_name = _('Circ Matrix Test')
     def __str__(self):
-        return self.matchpoint_id + _(", Max Items Out: %s, Max Overdue: %s, Max Fines: %s") % (self.max_items_out, self.max_overdue, self.max_fines)
+        return _("%(mid)s, Max Items Out: %(iout)s, Max Overdue: %(odue)s, Max Fines: %(fines)s") % {
+            'mid': self.matchpoint_id, 'iout' : self.max_items_out, 'odue':self.max_overdue, 'fines':self.max_fines}
 
-class CircMatrixCircModTest(models.Model)
-    matchpoint_id =  models.ForeignKey(CircMatrixMatchpoint, db_column='matchpoint')
-    items_out = models.IntegerField()
-    circ_mod_id = models.ForeignKey(CircModifier, db_column='circ_mod')
+class CircMatrixCircModTest(models.Model):
+    matchpoint_id =  models.ForeignKey(CircMatrixMatchpoint, db_column='matchpoint', blank=False, edit_inline=True,core=True, num_in_admin=1)
+    items_out = models.IntegerField(blank=False)
+    circ_mod_id = models.ForeignKey(CircModifier, db_column='circ_mod', blank=False)
     class Admin:
         search_fields = ['circ_mod_id']
         list_display = ('matchpoint_id','circ_mod_id','items_out')
     class Meta:
         db_table = 'circ_matrix_circ_mod_test'
-        ordering = ['name']
+        ordering = ['matchpoint_id']
         verbose_name = _('Circ Matrix Items Out Cirulation Modifier Subtest')
     def __str__(self):
-        return self.matchpoint_id + _(", Restrict: ") + self.circ_mod_id
-
-class CircMatrixRuleSet(models.Model)
-    matchpoint_id =  models.ForeignKey(CircMatrixMatchpoint, db_column='matchpoint')
-    duration_rule_id = models.ForeignKey(RuleCircDuration, db_column='duration_rule')
-    recurring_fine_rule_id = models.ForeignKey(RuleRecurringFine, db_column='recurring_fine_rule')
-    max_fine_rule_id = models.ForeignKey(RuleMaxFine, db_column='max_fine_rule')
+        return _("%(mid)s, Restriction: %(mod)s") % {'mid': self.matchpoint_id,'mod':self.circ_mod_id}
+
+class CircMatrixRuleSet(models.Model):
+    matchpoint_id =  models.ForeignKey(CircMatrixMatchpoint, db_column='matchpoint', 
+        blank=False, primary_key=True, edit_inline=True,core=True, num_in_admin=1)
+    duration_rule_id = models.ForeignKey(RuleCircDuration, db_column='duration_rule', blank=False)
+    recurring_fine_rule_id = models.ForeignKey('RuleRecurringFine', db_column='recurring_fine_rule', blank=False)
+    max_fine_rule_id = models.ForeignKey('RuleMaxFine', db_column='max_fine_rule', blank=False)
     class Admin:
         search_fields = ['matchoint_id']
         list_display = ('matchpoint_id','duration_rule_id','recurring_fine_rule_id','max_fine_rule_id')
     class Meta:
-        db_table = 'circ_matrix_circ_mod_test'
-        ordering = ['name']
-        verbose_name = _('Circ Matrix Items Out Cirulation Modifier Subtest')
+        db_table = 'circ_matrix_ruleset'
+        ordering = ['matchpoint_id']
+        verbose_name = _('Circ Matrix Rule Set')
     def __str__(self):
-        return self.matchpoint_id + _(", Restrict: ") + self.circ_mod_id
+        return _("Duration: %(dur)s, Recurring Fine: %(rfine)s, Max Fine: %(mfine)s") % {
+            'dur':self.duration_rule_id, 'rfine':self.recurring_fine_rule_id, 'mfine':self.max_fine_rule_id}
 
 class RuleMaxFine(models.Model):
     name = models.CharField(maxlength=CHAR_MAXLEN)