diff options
19 files changed, 2224 insertions, 550 deletions
diff --git a/archaeological_files/forms.py b/archaeological_files/forms.py index 4364829b2..d2e31d80c 100644 --- a/archaeological_files/forms.py +++ b/archaeological_files/forms.py @@ -42,7 +42,7 @@ from ishtar_common.forms import FinalForm, FormSet, ClosingDateFormSelection, \  from ishtar_common.forms_common import get_town_field, get_person_field  from archaeological_operations.forms import AdministrativeActOpeForm, \      AdministrativeActOpeFormSelection, FinalAdministrativeActDeleteForm, \ -    ParcelField +    ParcelField, SLICING  from ishtar_common import widgets  GENERAL_CONTRACTOR, created = PersonType.objects.get_or_create( @@ -122,29 +122,36 @@ class FileFormSelection(forms.Form):              raise forms.ValidationError(_(u"You should select a file."))          return cleaned_data -SLICING = (('year',_(u"years")), ("month",_(u"months")))  DATE_SOURCE = (('creation',_(u"Creation date")),                 ("reception",_(u"Reception date")))  class DashboardForm(forms.Form):      slicing = forms.ChoiceField(label=_("Slicing"), choices=SLICING,                                required=False) +    department_detail = forms.BooleanField(label=_("Department detail"), +                              required=False)      date_source = forms.ChoiceField(label=_("Date get from"),                              choices=DATE_SOURCE, required=False)      file_type = forms.ChoiceField(label=_("File type"), choices=[],                                    required=False)      saisine_type = forms.ChoiceField(label=_("Saisine type"), choices=[],                                    required=False) -    after = forms.DateField(label=_(u"Creation date after"), +    after = forms.DateField(label=_(u"Date after"),                              widget=widgets.JQueryDate, required=False) -    before = forms.DateField(label=_(u"Creation date before"), +    before = forms.DateField(label=_(u"Date before"),                              widget=widgets.JQueryDate, required=False)      def __init__(self, *args, **kwargs): +        if 'prefix' not in kwargs: +            kwargs['prefix'] = 'files'          super(DashboardForm, self).__init__(*args, **kwargs)          self.fields['saisine_type'].choices = models.SaisineType.get_types()          self.fields['file_type'].choices = models.FileType.get_types() +    def get_show_detail(self): +        return hasattr(self, 'cleaned_data') and \ +           self.cleaned_data.get('department_detail') +      def get_date_source(self):          date_source = 'creation'          if hasattr(self, 'cleaned_data') and \ diff --git a/archaeological_files/locale/fr/LC_MESSAGES/django.po b/archaeological_files/locale/fr/LC_MESSAGES/django.po index f2951cc68..fd733daa3 100644 --- a/archaeological_files/locale/fr/LC_MESSAGES/django.po +++ b/archaeological_files/locale/fr/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid ""  msgstr ""  "Project-Id-Version: alpha\n"  "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-10-15 01:32+0200\n" +"POT-Creation-Date: 2014-10-21 00:45+0200\n"  "PO-Revision-Date: 2010-12-09\n"  "Last-Translator: Étienne Loks <etienne.loks at peacefrogs net>\n"  "Language-Team: \n" @@ -18,29 +18,29 @@ msgstr ""  "Content-Transfer-Encoding: 8bit\n"  "Plural-Forms: nplurals=2; plural=n>1;\n" -#: forms.py:55 forms.py:169 forms.py:209 forms.py:320 forms.py:360 -#: models.py:67 templates/ishtar/sheet_file.html:98 +#: forms.py:55 forms.py:188 forms.py:228 forms.py:339 forms.py:379 +#: models.py:68 templates/ishtar/sheet_file.html:98  #: templates/ishtar/sheet_file.html:126  msgid "Year"  msgstr "Année" -#: forms.py:56 forms.py:173 forms.py:211 forms.py:359 models.py:69 +#: forms.py:56 forms.py:192 forms.py:230 forms.py:378 models.py:70  msgid "Numeric reference"  msgstr "Référence numérique" -#: forms.py:58 forms.py:175 forms.py:362 +#: forms.py:58 forms.py:194 forms.py:381  msgid "Other reference"  msgstr "Autre référence" -#: forms.py:60 forms.py:342 +#: forms.py:60 forms.py:361  msgid "File name"  msgstr "Nom du dossier" -#: forms.py:61 forms.py:130 forms.py:180 models.py:74 +#: forms.py:61 forms.py:135 forms.py:199 models.py:75  msgid "File type"  msgstr "Type de dossier" -#: forms.py:62 forms.py:132 forms.py:248 +#: forms.py:62 forms.py:137 forms.py:267  msgid "Saisine type"  msgstr "Type de saisine" @@ -52,23 +52,23 @@ msgstr "Parcelle (section/numéro)"  msgid "Is active?"  msgstr "Est actif ?" -#: forms.py:66 forms.py:222 forms.py:345 models.py:81 +#: forms.py:66 forms.py:241 forms.py:364 models.py:82  msgid "General contractor"  msgstr "Aménageur" -#: forms.py:73 forms.py:352 +#: forms.py:73 forms.py:371  msgid "Organization of general contractor"  msgstr "Organisation de l'aménageur" -#: forms.py:80 forms.py:364 templates/ishtar/sheet_file.html:102 +#: forms.py:80 forms.py:383 templates/ishtar/sheet_file.html:102  msgid "In charge"  msgstr "Responsable" -#: forms.py:87 forms.py:373 +#: forms.py:87 forms.py:392  msgid "Created by"  msgstr "Créé par" -#: forms.py:94 forms.py:241 forms.py:371 models.py:90 +#: forms.py:94 forms.py:260 forms.py:390 models.py:91  msgid "Permit reference"  msgstr "Référence du permis" @@ -80,141 +80,141 @@ msgstr "Recherche de dossiers archéologiques"  msgid "You should select a file."  msgstr "Vous devez sélectionner un dossier archéologique." -#: forms.py:125 -msgid "years" -msgstr "années" +#: forms.py:125 forms.py:197 models.py:96 +msgid "Creation date" +msgstr "Date de création" -#: forms.py:125 -msgid "months" -msgstr "mois" +#: forms.py:126 forms.py:269 models.py:98 +msgid "Reception date" +msgstr "Date de réception" -#: forms.py:128 +#: forms.py:129  msgid "Slicing"  msgstr "Découpage" -#: forms.py:134 -msgid "Creation date after" -msgstr "Date de création après" +#: forms.py:131 +msgid "Department detail" +msgstr "Détail par département" -#: forms.py:136 -msgid "Creation date before" -msgstr "Date de création avant" +#: forms.py:133 +msgid "Date get from" +msgstr "Date utilisée" -#: forms.py:159 templates/ishtar/sheet_file.html:24 +#: forms.py:139 +msgid "Date after" +msgstr "Date après" + +#: forms.py:141 +msgid "Date before" +msgstr "Date avant" + +#: forms.py:178 templates/ishtar/sheet_file.html:24  msgid "General"  msgstr "Général" -#: forms.py:163 models.py:76 +#: forms.py:182 models.py:77  msgid "Person in charge"  msgstr "Responsable" -#: forms.py:177 models.py:73 +#: forms.py:196 models.py:74  msgid "Name"  msgstr "Nom" -#: forms.py:178 models.py:95 -msgid "Creation date" -msgstr "Date de création" - -#: forms.py:181 models.py:99 +#: forms.py:200 models.py:100  msgid "Related file"  msgstr "Dossier en relation avec" -#: forms.py:185 forms.py:291 models.py:115 templates/ishtar/sheet_file.html:85 +#: forms.py:204 forms.py:310 models.py:116 templates/ishtar/sheet_file.html:85  msgid "Comment"  msgstr "Commentaire" -#: forms.py:189 models.py:106 +#: forms.py:208 models.py:107  msgid "Total surface (m²)"  msgstr "Surface totale des terrains (m²)" -#: forms.py:192 models.py:110 +#: forms.py:211 models.py:111  msgid "Main address"  msgstr "Adresse des terrains" -#: forms.py:193 models.py:111 +#: forms.py:212 models.py:112  msgid "Main address - complement"  msgstr "Adresse des terrains - complément" -#: forms.py:204 +#: forms.py:223  #, python-format  msgid "<br/>(last recorded: %s)"  msgstr "<br/>(dernier enregistrement : %s)" -#: forms.py:217 +#: forms.py:236  msgid "Preventive informations"  msgstr "Information archéologie préventive" -#: forms.py:231 models.py:86 +#: forms.py:250 models.py:87  msgid "Responsible for town planning service"  msgstr "Responsable au service instructeur" -#: forms.py:239 models.py:52 models.py:88 +#: forms.py:258 models.py:52 models.py:89  msgid "Permit type"  msgstr "Type de permis" -#: forms.py:244 models.py:109 +#: forms.py:263 models.py:110  msgid "Total developed surface (m²)"  msgstr "Surface totale aménagée (m²)" -#: forms.py:250 models.py:97 -msgid "Reception date" -msgstr "Date de réception" - -#: forms.py:261 templates/ishtar/sheet_file.html:75 +#: forms.py:280 templates/ishtar/sheet_file.html:75  #: templates/ishtar/dashboards/dashboard_file.html:42  msgid "Research archaeology"  msgstr "Archéologie programmée" -#: forms.py:269 models.py:118 templates/ishtar/sheet_file.html:76 +#: forms.py:288 models.py:119 templates/ishtar/sheet_file.html:76  msgid "Departments"  msgstr "Départements" -#: forms.py:279 models.py:130 +#: forms.py:298 models.py:131  msgid "Scientist in charge"  msgstr "Responsable scientifique" -#: forms.py:281 models.py:123 templates/ishtar/sheet_file.html:78 +#: forms.py:300 models.py:124 templates/ishtar/sheet_file.html:78  msgid "Requested operation type"  msgstr "Type d'opération demandée" -#: forms.py:283 +#: forms.py:302  msgid "Lead organization"  msgstr "Organisation porteuse du projet" -#: forms.py:300 models.py:134 templates/ishtar/sheet_file.html:83 +#: forms.py:319 models.py:135 templates/ishtar/sheet_file.html:83  msgid "Classified area"  msgstr "Au sein d'un site classé" -#: forms.py:302 models.py:136 templates/ishtar/sheet_file.html:84 +#: forms.py:321 models.py:137 templates/ishtar/sheet_file.html:84  msgid "Protected area"  msgstr "Au sein d'un secteur sauvegardé" -#: forms.py:313 +#: forms.py:332  msgid "Would you like to close this archaeological file?"  msgstr "Voulez vous clore ce dossier archéologique ?" -#: forms.py:317 +#: forms.py:336  msgid "Would you like to delete this archaelogical file ?"  msgstr "Voulez vous supprimer ce dossier archéologique ?" -#: forms.py:321 +#: forms.py:340  msgid "Index"  msgstr "Index" -#: forms.py:325 forms.py:337 forms.py:402 +#: forms.py:344 forms.py:356 forms.py:421  msgid "Act type"  msgstr "Type d'acte" -#: forms.py:338 +#: forms.py:357  msgid "Signature date after"  msgstr "Date de signature après" -#: forms.py:340 +#: forms.py:359  msgid "Signature date before"  msgstr "Date de signature avant" -#: ishtar_menu.py:30 models.py:150 templates/ishtar/sheet_file.html:6 +#: ishtar_menu.py:30 models.py:151 templates/ishtar/sheet_file.html:6  msgid "Archaeological file"  msgstr "Dossier" @@ -258,7 +258,7 @@ msgstr "Tableau de bord"  msgid "General informations"  msgstr "Informations générales" -#: ishtar_menu.py:73 models.py:151 +#: ishtar_menu.py:73 models.py:152  #: templates/ishtar/dashboards/dashboard_file.html:8  msgid "Archaeological files"  msgstr "Dossiers archéologiques" @@ -279,75 +279,75 @@ msgstr "Types de permis"  msgid "Delay (in days)"  msgstr "Delai (en jours)" -#: models.py:71 +#: models.py:72  msgid "Internal reference"  msgstr "Référence interne" -#: models.py:92 +#: models.py:93  msgid "Closing date"  msgstr "Date de clotûre" -#: models.py:93 +#: models.py:94  msgid "Towns"  msgstr "Communes" -#: models.py:104 +#: models.py:105  msgid "Ref. number"  msgstr "Réf. numérique" -#: models.py:113 +#: models.py:114  msgid "Main address - postal code"  msgstr "Adresse des terrains - code postal" -#: models.py:125 templates/ishtar/sheet_file.html:79 +#: models.py:126 templates/ishtar/sheet_file.html:79  msgid "Organization"  msgstr "Organisation" -#: models.py:131 +#: models.py:132  msgid "Research archaeology comment"  msgstr "Commentaire archéologie programmée" -#: models.py:145 +#: models.py:146  msgid "Cached name"  msgstr "Nom en cache" -#: models.py:153 +#: models.py:154  msgid "Can view all Archaelogical file"  msgstr "Peut voir tous les dossier archéologique" -#: models.py:154 +#: models.py:155  msgid "Can view own Archaelogical file"  msgstr "Peut voir son propre Dossier" -#: models.py:155 +#: models.py:156  msgid "Can add own Archaelogical file"  msgstr "Peut ajouter son propre Dossier" -#: models.py:156 +#: models.py:157  msgid "Can change own Archaelogical file"  msgstr "Peut changer son propre Dossier" -#: models.py:157 +#: models.py:158  msgid "Can delete own Archaelogical file"  msgstr "Peut supprimer son propre Dossier" -#: models.py:158 +#: models.py:159  msgid "Can close File"  msgstr "Peut fermer un dossier" -#: models.py:164 +#: models.py:165  msgid "FILE"  msgstr "DOSSIER" -#: models.py:312 +#: models.py:278  msgid "Intercommunal"  msgstr "Intercommunal" -#: models.py:376 +#: models.py:342  msgid "File"  msgstr "Dossier" -#: models.py:377 +#: models.py:343  msgid "Department"  msgstr "Département" @@ -679,6 +679,15 @@ msgstr "Principales communes en nombre"  msgid "Main towns by surface (ha)"  msgstr "Principales communes en surface (ha)" +#~ msgid "years" +#~ msgstr "années" + +#~ msgid "months" +#~ msgstr "mois" + +#~ msgid "Creation date before" +#~ msgstr "Date de création avant" +  #~ msgid "Town"  #~ msgstr "Commune" diff --git a/archaeological_files/models.py b/archaeological_files/models.py index 70570e145..4483e6401 100644 --- a/archaeological_files/models.py +++ b/archaeological_files/models.py @@ -30,7 +30,7 @@ from ishtar_common.utils import cached_label_changed, get_cache  from ishtar_common.models import GeneralType, BaseHistorizedItem, \      HistoricalRecords, OwnPerms, Person, Organization, Department, Town, \ -    Dashboard, IshtarUser, ValueGetter, ShortMenuItem +    Dashboard, DashboardFormItem, IshtarUser, ValueGetter, ShortMenuItem  class FileType(GeneralType):      class Meta: @@ -61,7 +61,8 @@ if settings.COUNTRY == 'fr':              verbose_name_plural = u"Types Saisine"              ordering = ('label',) -class File(BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem): +class File(BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem, +           DashboardFormItem):      TABLE_COLS = ['numeric_reference', 'year', 'internal_reference',                    'file_type', 'saisine_type', 'towns', ]      year = models.IntegerField(_(u"Year"), @@ -229,44 +230,6 @@ class File(BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem):          owns = super(File, cls).get_owns(user)          return sorted(owns.all(), key=lambda x:x.cached_label) -    @classmethod -    def get_periods(cls, slice='year', fltr={}, date_source='creation'): -        date_var = date_source + '_date' -        q = cls.objects.filter(**{date_var+'__isnull':False}) -        if fltr: -            q = q.filter(**fltr) -        if slice == 'year': -            return [res[date_var].year for res in list(q.values(date_var -                                ).annotate(Count("id")).order_by())] -        elif slice == 'month': -            return [(res[date_var].year, res[date_var].month) -                               for res in list(q.values(date_var -                                ).annotate(Count("id")).order_by())] -        return [] - -    @classmethod -    def get_by_year(cls, year, fltr={}, date_source='creation'): -        date_var = date_source + '_date' -        q = cls.objects.filter(**{date_var+'__isnull':False}) -        if fltr: -            q = q.filter(**fltr) -        return q.filter(**{date_var+'__year':year}) - -    @classmethod -    def get_by_month(cls, year, month, fltr={}, date_source='creation'): -        date_var = date_source + '_date' -        q = cls.objects.filter(**{date_var+'__isnull':False}) -        if fltr: -            q = q.filter(**fltr) -        return q.filter(**{date_var+'__year':year, date_var+'__month':month}) - -    @classmethod -    def get_total_number(cls, fltr={}): -        q = cls.objects -        if fltr: -            q = q.filter(**fltr) -        return q.count() -      def get_values(self, prefix=''):          values = super(File, self).get_values(prefix=prefix)          values['adminact_associated_file_towns_count'] = unicode( diff --git a/archaeological_finds/models.py b/archaeological_finds/models.py index 8c93a733d..a7e19e0ed 100644 --- a/archaeological_finds/models.py +++ b/archaeological_finds/models.py @@ -344,7 +344,8 @@ class TreatmentType(GeneralType):          ordering = ('label',)  class Treatment(BaseHistorizedItem, OwnPerms): -    container = models.ForeignKey(Container, verbose_name=_(u"Container"), +    if WAREHOUSE_AVAILABLE: +       container = models.ForeignKey(Container, verbose_name=_(u"Container"),                                    blank=True, null=True)      description = models.TextField(_(u"Description"), blank=True, null=True)      treatment_type = models.ForeignKey(TreatmentType, diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py index d31d5c542..bb743372d 100644 --- a/archaeological_operations/forms.py +++ b/archaeological_operations/forms.py @@ -35,7 +35,11 @@ from django.utils.safestring import mark_safe  from ishtar_common.models import valid_id, PersonType, Person, Town, \                               DocumentTemplate, Organization, OrganizationType -from archaeological_files.models import File + +FILES_AVAILABLE = 'archaeological_files' in settings.INSTALLED_APPS + +if FILES_AVAILABLE: +    from archaeological_files.models import File  import models  from widgets import ParcelWidget, SelectParcelWidget @@ -292,14 +296,90 @@ class OperationCodeInput(forms.TextInput):                                 'url':reverse_lazy('get_available_operation_code')}          return mark_safe(rendered + js) -class OperationFormFileChoice(forms.Form): -    form_label = _(u"Associated file") -    associated_models = {'associated_file':File,} -    currents = {'associated_file':File} -    associated_file = forms.IntegerField(label=_(u"Archaelogical file"), -         widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-file'), -                                           associated_model=File), -         validators=[valid_id(File)], required=False) +if FILES_AVAILABLE: +    class OperationFormFileChoice(forms.Form): +        form_label = _(u"Associated file") +        associated_models = {'associated_file':File,} +        currents = {'associated_file':File} +        associated_file = forms.IntegerField(label=_(u"Archaelogical file"), +             widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-file'), +                                               associated_model=File), +             validators=[valid_id(File)], required=False) + +SLICING = (("month",_(u"months")), ('year',_(u"years")),) + +DATE_SOURCE = (('creation',_(u"Creation date")), +               ("start",_(u"Start of field work"))) + +PREVENTIVE_RESARCH = (('all', _('All')), +                      ('preventive', _(u"Preventive")), +                      ('research', _(u"Research")),) + +class DashboardForm(forms.Form): +    slicing = forms.ChoiceField(label=_("Slicing"), choices=SLICING, +                              required=False) +    department_detail = forms.BooleanField(label=_("Department detail"), +                              required=False) +    date_source = forms.ChoiceField(label=_("Date get from"), +                            choices=DATE_SOURCE, required=False) +    preventive_research = forms.ChoiceField(label=_("Preventive/Research"), +                                    choices=PREVENTIVE_RESARCH, required=False) +    operation_type = forms.ChoiceField(label=_("Operation type"), choices=[], +                                       required=False) +    operator = forms.ChoiceField(label=_("Operator"), choices=[], +                                 required=False) +    after = forms.DateField(label=_(u"Date after"), +                            widget=widgets.JQueryDate, required=False) +    before = forms.DateField(label=_(u"Date before"), +                            widget=widgets.JQueryDate, required=False) +    with_report = forms.BooleanField(label=_("With reports"), required=False) +    with_finds = forms.BooleanField(label=_("With finds"), required=False) + +    def __init__(self, *args, **kwargs): +        if 'prefix' not in kwargs: +            kwargs['prefix'] = 'operations' +        super(DashboardForm, self).__init__(*args, **kwargs) +        self.fields['operation_type'].choices = models.OperationType.get_types() +        self.fields['operator'].choices = [('', '--')] +        self.fields['operator'].choices += [(orga.pk, orga.name) +            for orga in Organization.objects.filter(operator__isnull=False)\ +                                            .order_by('name').distinct().all()] + +    def get_show_detail(self): +        return hasattr(self, 'cleaned_data') and \ +           self.cleaned_data.get('department_detail') + +    def get_date_source(self): +        date_source = 'creation' +        if hasattr(self, 'cleaned_data') and \ +           self.cleaned_data.get('date_source'): +            date_source = self.cleaned_data['date_source'] +        return date_source + +    def get_filter(self): +        if not hasattr(self, 'cleaned_data') or not self.cleaned_data: +            return {} +        date_source = self.get_date_source() +        fltr = {} +        if self.cleaned_data.get('preventive_research'): +            preventive_research = self.cleaned_data['preventive_research'] +            if preventive_research == 'preventive': +                fltr['file_type__preventive'] = True +            elif preventive_research == 'preventive': +                fltr['file_type__preventive'] = False +        if self.cleaned_data.get('operation_type'): +            fltr['operation_type_id'] = self.cleaned_data['operation_type'] +        if self.cleaned_data.get('operator'): +            fltr['operator_id'] = self.cleaned_data['operator'] +        if self.cleaned_data.get('after'): +            fltr[date_source+'_date__gte'] = self.cleaned_data['after'] +        if self.cleaned_data.get('before'): +            fltr[date_source+'_date__lte'] = self.cleaned_data['before'] +        if self.cleaned_data.get('with_report'): +            fltr['report_delivery_date__isnull'] = False +        if self.cleaned_data.get('with_finds'): +            fltr['context_record__base_finds__isnull'] = False +        return fltr  class OperationFormGeneral(forms.Form):      form_label = _(u"General") @@ -419,9 +499,10 @@ class OperationFormGeneral(forms.Form):          return self.cleaned_data  class OperationFormModifGeneral(OperationFormGeneral): -    currents = {'associated_file':File}      operation_code = forms.IntegerField(label=_(u"Operation code")) -    associated_file = forms.IntegerField(label=_(u"Archaelogical file"), +    if FILES_AVAILABLE: +        currents = {'associated_file':File} +        associated_file = forms.IntegerField(label=_(u"Archaelogical file"),           widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-file'),                                             associated_model=File),           validators=[valid_id(File)], required=False) @@ -435,7 +516,8 @@ class OperationFormModifGeneral(OperationFormGeneral):  OperationFormModifGeneral.associated_models = \                                  OperationFormGeneral.associated_models.copy() -OperationFormModifGeneral.associated_models['associated_file'] = File +if FILES_AVAILABLE: +    OperationFormModifGeneral.associated_models['associated_file'] = File  class OperationFormPreventive(forms.Form): diff --git a/archaeological_operations/locale/fr/LC_MESSAGES/django.po b/archaeological_operations/locale/fr/LC_MESSAGES/django.po index 4ed867e8c..18bb27bc0 100644 --- a/archaeological_operations/locale/fr/LC_MESSAGES/django.po +++ b/archaeological_operations/locale/fr/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid ""  msgstr ""  "Project-Id-Version: alpha\n"  "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-03-27 22:43+0100\n" +"POT-Creation-Date: 2014-10-21 00:45+0200\n"  "PO-Revision-Date: 2010-12-09\n"  "Last-Translator: Étienne Loks <etienne.loks at peacefrogs net>\n"  "Language-Team: \n" @@ -18,12 +18,13 @@ msgstr ""  "Content-Transfer-Encoding: 8bit\n"  "Plural-Forms: nplurals=2; plural=n>1;\n" -#: forms.py:63 forms.py:186 forms.py:445 forms.py:466 forms.py:470 -#: models.py:568 templates/ishtar/sheet_operation.html:89 +#: forms.py:67 forms.py:190 forms.py:573 forms.py:594 forms.py:598 +#: models.py:654 templates/ishtar/blocks/window_tables/parcels.html:8  msgid "Parcels"  msgstr "Parcelles" -#: forms.py:66 forms.py:106 forms.py:423 models.py:562 +#: forms.py:70 forms.py:110 forms.py:551 models.py:648 +#: templates/ishtar/blocks/window_tables/parcels.html:5  #: templates/ishtar/dashboards/dashboard_operation.html:302  #: templates/ishtar/dashboards/dashboard_operation.html:315  #: templates/ishtar/dashboards/dashboard_operation.html:482 @@ -31,161 +32,232 @@ msgstr "Parcelles"  msgid "Town"  msgstr "Commune" -#: forms.py:68 forms.py:189 forms.py:324 forms.py:612 models.py:121 -#: models.py:494 models.py:560 templates/ishtar/sheet_operation.html:87 +#: forms.py:72 forms.py:199 forms.py:427 forms.py:740 models.py:162 +#: models.py:507 models.py:646 +#: templates/ishtar/blocks/window_tables/parcels.html:6  msgid "Year"  msgstr "Année" -#: forms.py:71 models.py:563 templates/ishtar/sheet_operation.html:88 +#: forms.py:75 models.py:649 +#: templates/ishtar/blocks/window_tables/parcels.html:7  msgid "Section"  msgstr "Section" -#: forms.py:73 models.py:564 +#: forms.py:77 models.py:650  msgid "Parcel number"  msgstr "Numéro de parcelle" -#: forms.py:101 +#: forms.py:105  msgid "Town section and parcel number fields are required."  msgstr "La commune, la section et le numéro de parcelle sont obligatoire." -#: forms.py:108 +#: forms.py:112  msgid "Full text input"  msgstr "Saisie libre" -#: forms.py:110 +#: forms.py:114  msgid "example: \"2013: XD:1 to 13,24,33 to 39, YD:24\" or \"AB:24,AC:42\""  msgstr "exemple : \"2013: XD:1 à 13,24,33 à 39, YD:24\" ou \"AB:24,AC:42\"" -#: forms.py:180 +#: forms.py:184  msgid "There are identical parcels."  msgstr "Il y a des parcelles identiques." -#: forms.py:190 +#: forms.py:200  msgid "Numeric reference"  msgstr "Identifiant numérique" -#: forms.py:191 +#: forms.py:201  msgid "Name (full text search)"  msgstr "Nom (recherche texte intégral)" -#: forms.py:196 forms.py:312 forms.py:590 models.py:42 models.py:129 +#: forms.py:206 forms.py:327 forms.py:415 forms.py:718 models.py:43 +#: models.py:170  msgid "Operation type"  msgstr "Type d'opération" -#: forms.py:203 models.py:437 +#: forms.py:212 models.py:494  msgid "Scientist in charge"  msgstr "Responsable scientifique" -#: forms.py:208 forms.py:302 models.py:119 +#: forms.py:217 forms.py:408 models.py:159  msgid "In charge"  msgstr "Responsable" -#: forms.py:209 models.py:131 +#: forms.py:218 forms.py:329 forms.py:402 models.py:157 +msgid "Operator" +msgstr "Opérateur" + +#: forms.py:223 models.py:172  msgid "Remains"  msgstr "Vestiges" -#: forms.py:210 forms.py:495 forms.py:514 models.py:135 -#: templates/ishtar/sheet_operation.html:146 +#: forms.py:224 forms.py:623 forms.py:642 models.py:176 +#: templates/ishtar/sheet_operation.html:128  msgid "Periods"  msgstr "Périodes" -#: forms.py:211 +#: forms.py:225  msgid "Started before"  msgstr "Commencé avant" -#: forms.py:213 +#: forms.py:227  msgid "Started after"  msgstr "Commencé après" -#: forms.py:215 +#: forms.py:229  msgid "Ended before"  msgstr "Terminé avant" -#: forms.py:217 +#: forms.py:231  msgid "Ended after"  msgstr "Terminé après" -#: forms.py:219 +#: forms.py:233  msgid "Parcel (section/number)"  msgstr "Parcelle (section/numéro)" -#: forms.py:220 +#: forms.py:234  msgid "Is open?"  msgstr "Est ouvert ?" -#: forms.py:239 forms.py:584 views.py:171 +#: forms.py:236 forms.py:748 +msgid "Created by" +msgstr "Créé par" + +#: forms.py:260 forms.py:712 views.py:181  msgid "Operation search"  msgstr "Recherche d'opérations" -#: forms.py:251 forms.py:586 +#: forms.py:272 forms.py:714  msgid "You should select an operation."  msgstr "Vous devez sélectionner une opération." -#: forms.py:279 forms.py:645 templates/ishtar/sheet_administrativeact.html:11 +#: forms.py:301 +msgid "Associated file" +msgstr "Dossier associé" + +#: forms.py:304 forms.py:505 models.py:504 wizards.py:73 +msgid "Archaelogical file" +msgstr "Dossier" + +#: forms.py:309 +msgid "months" +msgstr "mois" + +#: forms.py:309 +msgid "years" +msgstr "années" + +#: forms.py:311 models.py:144 +msgid "Creation date" +msgstr "Date de création" + +#: forms.py:312 +msgid "Start of field work" +msgstr "Début du travail de terrain" + +#: forms.py:314 +msgid "All" +msgstr "Tous" + +#: forms.py:315 models.py:70 +msgid "Preventive" +msgstr "Préventif" + +#: forms.py:316 models.py:71 +msgid "Research" +msgstr "Programmée" + +#: forms.py:319 +msgid "Slicing" +msgstr "Découpage" + +#: forms.py:321 +msgid "Department detail" +msgstr "Détail par département" + +#: forms.py:323 +msgid "Date get from" +msgstr "Date obtenue depuis" + +#: forms.py:325 +msgid "Preventive/Research" +msgstr "Préventif/Programmé" + +#: forms.py:331 +msgid "Date after" +msgstr "Date après" + +#: forms.py:333 +msgid "Date before" +msgstr "Date avant" + +#: forms.py:335 +msgid "With reports" +msgstr "Avec un rapport" + +#: forms.py:336 +msgid "With finds" +msgstr "Avec du matériel" + +#: forms.py:385 forms.py:780 templates/ishtar/sheet_administrativeact.html:11  #: templates/ishtar/sheet_operation.html:28  msgid "General"  msgstr "Général" -#: forms.py:290 +#: forms.py:394  msgid "Head scientist"  msgstr "Responsable scientifique" -#: forms.py:297 models.py:117 -msgid "Operator" -msgstr "Opérateur" - -#: forms.py:308 models.py:408 models.py:446 wizards.py:86 -msgid "Archaelogical file" -msgstr "Dossier" - -#: forms.py:314 models.py:64 models.py:107 models.py:614 +#: forms.py:417 models.py:96 models.py:143 models.py:728  msgid "Start date"  msgstr "Date de début" -#: forms.py:316 models.py:108 +#: forms.py:419 models.py:146  msgid "Excavation end date"  msgstr "Date de fin de chantier" -#: forms.py:318 models.py:111 +#: forms.py:421 models.py:149  msgid "Report delivery date"  msgstr "Date de livraison du rapport" -#: forms.py:321 +#: forms.py:424  msgid "Total surface (m²)"  msgstr "Surface totale des terrains (m²)" -#: forms.py:328 models.py:122 models.py:297 +#: forms.py:431 forms.py:502 models.py:163 models.py:343  msgid "Operation code"  msgstr "Code de l'opération" -#: forms.py:331 models.py:170 +#: forms.py:434 models.py:213  msgid "Generic name"  msgstr "Nom générique" -#: forms.py:333 models.py:168 +#: forms.py:436 models.py:211  msgid "Operator reference"  msgstr "Référence de l'opérateur" -#: forms.py:337 +#: forms.py:440  msgid "Associated archaeological sites"  msgstr "Sites archéologiques associés" -#: forms.py:357 models.py:172 +#: forms.py:459 models.py:215  msgid "Comment"  msgstr "Commentaire" -#: forms.py:370 +#: forms.py:476  msgid ""  "If you want to set an excavation end date you have to provide a start date."  msgstr ""  "Avant de renseigner la date de fin de chantier, il est nécessaire de "  "renseigner une date de début." -#: forms.py:373 +#: forms.py:479  msgid "The excavation end date cannot be before the start date."  msgstr "La date de fin de chantier ne peut être avant la date de début." -#: forms.py:387 +#: forms.py:493  #, python-format  msgid ""  "Operation code already exist for year: %(year)d - use a value bigger than " @@ -194,110 +266,110 @@ msgstr ""  "Ce code d'opération existe déjà pour l'année %(year)d - utilisez une valeur "  "plus grande que %(last_val)d" -#: forms.py:391 +#: forms.py:497  msgid "Bad operation code"  msgstr "Mauvais code d'opération" -#: forms.py:396 +#: forms.py:524  msgid "Preventive informations - excavation"  msgstr "Information archéologie préventive - fouille" -#: forms.py:397 models.py:133 +#: forms.py:525 models.py:174  #: templates/ishtar/dashboards/dashboard_operation.html:495  msgid "Cost (€)"  msgstr "Cout (€)" -#: forms.py:398 models.py:136 +#: forms.py:526 models.py:177  msgid "Scheduled man-days"  msgstr "Jours-hommes prévus" -#: forms.py:400 models.py:138 +#: forms.py:528 models.py:179  msgid "Optional man-days"  msgstr "Jours-hommes optionnels" -#: forms.py:402 models.py:140 +#: forms.py:530 models.py:181  msgid "Effective man-days"  msgstr "Jours-hommes effectifs" -#: forms.py:411 +#: forms.py:539  msgid "Preventive informations - diagnostic"  msgstr "Information archéologie préventive - diagnostic" -#: forms.py:414 models.py:153 +#: forms.py:542 models.py:194  msgid "Prescription on zoning"  msgstr "Prescription sur zonage" -#: forms.py:416 models.py:156 +#: forms.py:544 models.py:197  msgid "Prescription on large area"  msgstr "Prescription sur une vaste surface" -#: forms.py:418 models.py:159 +#: forms.py:546 models.py:200  msgid "Prescription on geoarchaeological context"  msgstr "Prescription sur un contexte géoarchéologique" -#: forms.py:421 forms.py:442 models.py:132 models.py:503 +#: forms.py:549 forms.py:570 models.py:173 models.py:558  msgid "Towns"  msgstr "Communes" -#: forms.py:447 models.py:567 models.py:613 -#: templates/ishtar/sheet_operation.html:118 -#: templates/ishtar/sheet_operation.html:150 +#: forms.py:575 models.py:653 models.py:727 +#: templates/ishtar/sheet_operation.html:100 +#: templates/ishtar/sheet_operation.html:132  msgid "Parcel"  msgstr "Parcelle" -#: forms.py:473 forms.py:492 models.py:59 +#: forms.py:601 forms.py:620 models.py:91  msgid "Remain types"  msgstr "Types de vestige" -#: forms.py:476 models.py:58 +#: forms.py:604 models.py:90  msgid "Remain type"  msgstr "Type de vestige" -#: forms.py:488 +#: forms.py:616  msgid "There are identical remain types"  msgstr "Il y a des types de vestige identiques." -#: forms.py:498 +#: forms.py:626  msgid "Period"  msgstr "Période" -#: forms.py:510 +#: forms.py:638  msgid "There are identical periods"  msgstr "Il y a des périodes identiques." -#: forms.py:517 models.py:78 +#: forms.py:645 models.py:110  msgid "Reference"  msgstr "Référence" -#: forms.py:518 models.py:79 +#: forms.py:646 models.py:111  msgid "Name"  msgstr "Nom" -#: forms.py:524 +#: forms.py:652  msgid "This reference already exists."  msgstr "Cette référence existe déjà." -#: forms.py:533 +#: forms.py:661  msgid "Associated archaelogical sites"  msgstr "Entités archéologiques associées" -#: forms.py:539 ishtar_menu.py:29 +#: forms.py:667 ishtar_menu.py:29  msgid "Search"  msgstr "Recherche" -#: forms.py:543 +#: forms.py:671  msgid "Would you like to close this operation?"  msgstr "Voulez vous clore cette opération ?" -#: forms.py:547 +#: forms.py:675  msgid "Would you like to delete this operation?"  msgstr "Voulez vous supprimer cette opération ?" -#: forms.py:555 forms.py:613 models.py:399 models.py:432 +#: forms.py:683 forms.py:741 models.py:448 models.py:487  msgid "Index"  msgstr "Index" -#: forms.py:578 +#: forms.py:706  #, python-format  msgid ""  "Index already exist for operation: %(operation)s - use a value bigger than " @@ -306,69 +378,70 @@ msgstr ""  "Cet index existe déjà pour l'opération : %(operation)s, utilisez une valeur "  "plus grande que %(last_val)d" -#: forms.py:589 +#: forms.py:717  msgid "Operation's town"  msgstr "Commune de l'opération" -#: forms.py:592 +#: forms.py:720  msgid "Operation's year"  msgstr "Année de l'opération" -#: forms.py:603 +#: forms.py:731  msgid "Documentation search"  msgstr "Recherche de document" -#: forms.py:605 +#: forms.py:733  msgid "You should select a document."  msgstr "Vous devez sélectionner un document." -#: forms.py:617 forms.py:648 models.py:419 models.py:429 +#: forms.py:745 forms.py:783 models.py:468 models.py:482  msgid "Act type"  msgstr "Type d'acte" -#: forms.py:628 +#: forms.py:763  msgid "Administrative act search"  msgstr "Recherche d'actes administratifs" -#: forms.py:640 forms.py:732 +#: forms.py:775 forms.py:868  msgid "You should select an administrative act."  msgstr "Vous devez sélectionner un acte administratif." -#: forms.py:649 models.py:439 -msgid "Signatory" -msgstr "Signataire" - -#: forms.py:653 models.py:449 +#: forms.py:788 models.py:508  msgid "Object"  msgstr "Objet" -#: forms.py:655 models.py:447 +#: forms.py:790 models.py:505  msgid "Signature date"  msgstr "Date de signature" -#: forms.py:670 +#: forms.py:805  msgid "Would you like to delete this administrative act?"  msgstr "Voulez vous supprimer cet acte administratif ?" -#: forms.py:674 +#: forms.py:809  msgid "Template"  msgstr "Patron" -#: forms.py:699 +#: forms.py:834  msgid "Doc generation"  msgstr "Generation de document" -#: forms.py:701 +#: forms.py:836  msgid "Generate the associated doc?"  msgstr "Générer le document associé ?" -#: forms.py:719 ishtar_menu.py:94 views.py:308 +#: forms.py:846 +msgid "Indexed?" +msgstr "Indexé ?" + +#: forms.py:855 ishtar_menu.py:94 views.py:323  msgctxt "admin act register"  msgid "Register"  msgstr "Registre" -#: ishtar_menu.py:27 models.py:180 models.py:374 models.py:397 models.py:409 -#: models.py:441 models.py:559 templates/ishtar/sheet_operation.html:6 +#: ishtar_menu.py:27 models.py:223 models.py:423 models.py:446 models.py:458 +#: models.py:499 models.py:645 wizards.py:291 wizards.py:301 +#: templates/ishtar/sheet_operation.html:6  msgid "Operation"  msgstr "Opération" @@ -388,7 +461,7 @@ msgstr "Clotûre"  msgid "Deletion"  msgstr "Suppression" -#: ishtar_menu.py:49 models.py:457 +#: ishtar_menu.py:49 models.py:518  #: templates/ishtar/sheet_administrativeact.html:6  msgid "Administrative act"  msgstr "Acte administratif" @@ -417,304 +490,308 @@ msgstr "Tableau de bord"  msgid "General informations"  msgstr "Informations générales" -#: ishtar_menu.py:105 models.py:181 +#: ishtar_menu.py:105 models.py:224  #: templates/ishtar/dashboards/dashboard_operation.html:9  msgid "Operations"  msgstr "Opérations" -#: models.py:40 +#: models.py:40 models.py:95 +msgid "Order" +msgstr "Ordre" + +#: models.py:41  msgid "Is preventive"  msgstr "Préventif" -#: models.py:43 +#: models.py:44  msgid "Operation types"  msgstr "Types d'opération" -#: models.py:63 -msgid "Order" -msgstr "Ordre" - -#: models.py:65 models.py:615 +#: models.py:97 models.py:729  msgid "End date"  msgstr "Date de fin" -#: models.py:66 +#: models.py:98  msgid "Parent period"  msgstr "Période parente" -#: models.py:70 +#: models.py:102  msgid "Type Period"  msgstr "Type de période" -#: models.py:71 +#: models.py:103  msgid "Types Period"  msgstr "Types de période" -#: models.py:82 +#: models.py:114  msgid "Archaeological site"  msgstr "Entité archéologique" -#: models.py:83 models.py:176 +#: models.py:115 models.py:219  msgid "Archaeological sites"  msgstr "Entités archéologiques" -#: models.py:86 +#: models.py:118  msgid "Can view all Archaeological site"  msgstr "Peut voir toutes les entités archéologiques" -#: models.py:88 +#: models.py:120  msgid "Can view own Archaeological site"  msgstr "Peut voir ses propres entités archéologiques" -#: models.py:90 +#: models.py:122  msgid "Can add own Archaeological site"  msgstr "Peut ajouter ses propres entités archéologique" -#: models.py:92 +#: models.py:124  msgid "Can change own Archaeological site"  msgstr "Peut changer ses propres entités archéologiques" -#: models.py:94 +#: models.py:126  msgid "Can delete own Archaeological site"  msgstr "Peut supprimer ses propres entités archéologiques" -#: models.py:110 +#: models.py:148  msgid "Closing date"  msgstr "Date de clotûre" -#: models.py:114 +#: models.py:152  msgid "In charge scientist"  msgstr "Responsable scientifique" -#: models.py:126 models.py:556 +#: models.py:167 models.py:642  msgid "File"  msgstr "Dossier" -#: models.py:130 +#: models.py:171  msgid "Surface (m²)"  msgstr "Area (m²)" -#: models.py:173 +#: models.py:216  msgid "Cached name"  msgstr "Nom en cache" -#: models.py:183 +#: models.py:226  msgid "Can view all Operation"  msgstr "Peut voir toutes les Opérations" -#: models.py:184 +#: models.py:227  msgid "Can view own Operation"  msgstr "Peut voir sa propre Opération" -#: models.py:185 +#: models.py:228  msgid "Can add own Operation"  msgstr "Peut ajouter sa propre Opération" -#: models.py:186 +#: models.py:229  msgid "Can change own Operation"  msgstr "Peut changer sa propre Opération" -#: models.py:187 +#: models.py:230  msgid "Can delete own Operation"  msgstr "Peut supprimer sa propre Opération" -#: models.py:188 +#: models.py:231  msgid "Can close Operation"  msgstr "Peut ferme une Opération" -#: models.py:208 +#: models.py:260  msgid "OPE"  msgstr "OPE" -#: models.py:245 +#: models.py:301  msgid "Intercommunal"  msgstr "Intercommunal" -#: models.py:269 +#: models.py:328 models.py:457  msgid "Archaeological file"  msgstr "Dossier" -#: models.py:312 +#: models.py:358  msgid "This operation code already exists for this year"  msgstr "Cet code d'opération existe déjà pour cette année." -#: models.py:375 templates/ishtar/dashboards/dashboard_operation.html:273 +#: models.py:424 templates/ishtar/dashboards/dashboard_operation.html:273  #: templates/ishtar/dashboards/dashboard_operation.html:286  #: templates/ishtar/dashboards/dashboard_operation.html:453  #: templates/ishtar/dashboards/dashboard_operation.html:466  msgid "Department"  msgstr "Département" -#: models.py:383 +#: models.py:432  msgid "Operation documentation"  msgstr "Documentation d'une opération" -#: models.py:384 +#: models.py:433  msgid "Operation documentations"  msgstr "Documentations des opérations" -#: models.py:387 +#: models.py:436  msgid "Can view all Operation source"  msgstr "Peut voir toutes les sources des opérations" -#: models.py:389 +#: models.py:438  msgid "Can view own Operation source"  msgstr "Peut voir sa propre source d'opération" -#: models.py:391 +#: models.py:440  msgid "Can add own Operation source"  msgstr "Peut ajouter sa propre source d'opération" -#: models.py:393 +#: models.py:442  msgid "Can change own Operation source"  msgstr "Peut changer sa propre source d'opération" -#: models.py:395 +#: models.py:444  msgid "Can delete own Operation source"  msgstr "Peut supprimer sa propre source d'opération" -#: models.py:411 +#: models.py:460  msgid "Intended to"  msgstr "Destiné à" -#: models.py:413 +#: models.py:462  msgid "Code"  msgstr "Code" -#: models.py:415 +#: models.py:464  msgid "Associated template"  msgstr "Patron associé" -#: models.py:417 +#: models.py:466  msgid "Indexed"  msgstr "Indexé" -#: models.py:420 +#: models.py:469  msgid "Act types"  msgstr "Types d'acte" -#: models.py:431 +#: models.py:485  msgid "Person in charge of the operation"  msgstr "Responsable d'opération" -#: models.py:434 +#: models.py:489  msgid "Archaeological preventive operator"  msgstr "Opérateur d'archéologie préventive" -#: models.py:458 +#: models.py:496 +msgid "Signatory" +msgstr "Signataire" + +#: models.py:519  msgid "Administrative acts"  msgstr "Actes administratifs" -#: models.py:461 +#: models.py:522  msgid "Can view all Administrative act"  msgstr "Peut voir tout les Actes administratifs" -#: models.py:463 +#: models.py:524  msgid "Can view own Administrative act"  msgstr "Peut voir son propre Acte administratif" -#: models.py:465 +#: models.py:526  msgid "Can add own Administrative act"  msgstr "Peut ajouter son propre Acte administratif" -#: models.py:467 +#: models.py:528  msgid "Can change own Administrative act"  msgstr "Peut changer son propre Acte administratif" -#: models.py:469 +#: models.py:530  msgid "Can delete own Administrative act"  msgstr "Peut supprimer son propre Acte administratif" -#: models.py:477 +#: models.py:539  #: templates/ishtar/blocks/window_tables/administrativacts.html:5  msgid "Ref."  msgstr "Réf." -#: models.py:549 +#: models.py:605  msgid "This index already exists for this year"  msgstr "Cet index existe déjà pour cette année." -#: models.py:612 +#: models.py:725  msgid "Owner"  msgstr "Propriétaire" -#: models.py:618 +#: models.py:732  msgid "Parcel owner"  msgstr "Propriétaire de parcelle" -#: models.py:619 +#: models.py:733  msgid "Parcel owners"  msgstr "Propriétaires de parcelle" -#: models.py:643 +#: models.py:757  msgid "Recorded"  msgstr "Enregistré" -#: models.py:644 +#: models.py:758  msgid "Effective"  msgstr "Effectif" -#: models.py:645 +#: models.py:759  msgid "Active"  msgstr "Actif" -#: models.py:646 +#: models.py:760  msgid "Field completed"  msgstr "Terrain achevé" -#: models.py:647 +#: models.py:761  msgid "Associated report"  msgstr "Rapport associé" -#: models.py:648 +#: models.py:762  msgid "Closed"  msgstr "Fermé" -#: models.py:649 +#: models.py:763  msgid "Documented and closed"  msgstr "Documenté et clôt" -#: views.py:185 +#: views.py:200  msgid "New operation"  msgstr "Nouvelle opération" -#: views.py:216 +#: views.py:231  msgid "Operation modification"  msgstr "Modification d'une opération" -#: views.py:246 +#: views.py:261  msgid "Operation closing"  msgstr "Clotûre de l'opération" -#: views.py:252 +#: views.py:267  msgid "Operation deletion"  msgstr "Suppression d'une opération" -#: views.py:260 +#: views.py:275  msgid "Operation: source creation"  msgstr "Operation : nouvelle documentation associée" -#: views.py:268 +#: views.py:283  msgid "Operation: source modification"  msgstr "Operation : modification d'une documentation associée" -#: views.py:274 +#: views.py:289  msgid "Operation: source deletion"  msgstr "Operation : suppression d'une documentation associée" -#: views.py:283 +#: views.py:298  msgid "Operation: new administrative act"  msgstr "Operation : nouvel acte administratif" -#: views.py:293 +#: views.py:308  msgid "Operation: administrative act modification"  msgstr "Operation : modification d'un acte administratif" -#: views.py:302 +#: views.py:317  msgid "Operation: administrative act deletion"  msgstr "Operation : suppression d'un acte administratif" -#: wizards.py:168 +#: wizards.py:165  msgid ""  "Warning: No Archaelogical File is provided. If you have forget it return to "  "the first step." @@ -924,108 +1001,100 @@ msgstr "Code postal :"  msgid "Associated parcels"  msgstr "Parcelles associées" -#: templates/ishtar/sheet_operation.html:86 -msgid "Commune" -msgstr "Commune" - -#: templates/ishtar/sheet_operation.html:101 -msgid "No parcel associated to this operation" -msgstr "Pas de parcelle associée à cette opération" - -#: templates/ishtar/sheet_operation.html:105 +#: templates/ishtar/sheet_operation.html:87  msgid "Administrativ acts"  msgstr "Actes administratifs" -#: templates/ishtar/sheet_operation.html:108 +#: templates/ishtar/sheet_operation.html:90  msgid "Document from this operation"  msgstr "Documents de cette opération" -#: templates/ishtar/sheet_operation.html:112 +#: templates/ishtar/sheet_operation.html:94  msgid "Context records"  msgstr "Unité d'Enregistrement" -#: templates/ishtar/sheet_operation.html:114 +#: templates/ishtar/sheet_operation.html:96  msgid "ID"  msgstr "Identifiant" -#: templates/ishtar/sheet_operation.html:115 +#: templates/ishtar/sheet_operation.html:97  #: templates/ishtar/blocks/window_tables/administrativacts.html:6  #: templates/ishtar/dashboards/dashboard_operation.html:82  msgid "Type"  msgstr "Type" -#: templates/ishtar/sheet_operation.html:116 +#: templates/ishtar/sheet_operation.html:98  msgid "Chronology"  msgstr "Chronologie" -#: templates/ishtar/sheet_operation.html:117 -#: templates/ishtar/sheet_operation.html:147 +#: templates/ishtar/sheet_operation.html:99 +#: templates/ishtar/sheet_operation.html:129  msgid "Description"  msgstr "Description" -#: templates/ishtar/sheet_operation.html:128 -#: templates/ishtar/sheet_operation.html:171 +#: templates/ishtar/sheet_operation.html:110 +#: templates/ishtar/sheet_operation.html:153  msgid "Details"  msgstr "Détails" -#: templates/ishtar/sheet_operation.html:131 +#: templates/ishtar/sheet_operation.html:113  msgid "No context record associated to this operation"  msgstr "Pas d'Unité d'Enregistrement associée à cette opération" -#: templates/ishtar/sheet_operation.html:135 +#: templates/ishtar/sheet_operation.html:117  msgid "Documents from associated context records"  msgstr "Documents d'Unité d'Enregistrement associés" -#: templates/ishtar/sheet_operation.html:140 +#: templates/ishtar/sheet_operation.html:122  msgid "Finds"  msgstr "Mobilier" -#: templates/ishtar/sheet_operation.html:142 +#: templates/ishtar/sheet_operation.html:124  msgid "Complete Id"  msgstr "Id complet" -#: templates/ishtar/sheet_operation.html:143 +#: templates/ishtar/sheet_operation.html:125  msgid "Short Id"  msgstr "Id court" -#: templates/ishtar/sheet_operation.html:144 +#: templates/ishtar/sheet_operation.html:126  msgid "Material type"  msgstr "Type de matériau" -#: templates/ishtar/sheet_operation.html:145 +#: templates/ishtar/sheet_operation.html:127  msgctxt "short"  msgid "Context record"  msgstr "UE" -#: templates/ishtar/sheet_operation.html:148 +#: templates/ishtar/sheet_operation.html:130  msgid "Weight"  msgstr "Poids" -#: templates/ishtar/sheet_operation.html:149 +#: templates/ishtar/sheet_operation.html:131  msgid "Numbers"  msgstr "Nombre" -#: templates/ishtar/sheet_operation.html:151 +#: templates/ishtar/sheet_operation.html:133  msgid "Container ref."  msgstr "Réf. du contenant" -#: templates/ishtar/sheet_operation.html:152 +#: templates/ishtar/sheet_operation.html:134  msgid "Warehouse"  msgstr "Dépôt" -#: templates/ishtar/sheet_operation.html:175 +#: templates/ishtar/sheet_operation.html:157  msgid "No find associated to context record"  msgstr "Pas de mobilier associé à cette Unité d'Enregistrement" -#: templates/ishtar/sheet_operation.html:178 +#: templates/ishtar/sheet_operation.html:160  msgid "No find associated to parcel"  msgstr "Pas de mobilier associé à cette parcelle" -#: templates/ishtar/sheet_operation.html:178 +#: templates/ishtar/sheet_operation.html:160  msgid "(no context record)"  msgstr "(pas d'Unité d'Enregistrement)" -#: templates/ishtar/sheet_operation.html:183 +#: templates/ishtar/sheet_operation.html:165  msgid "Documents from associated finds"  msgstr "Documents concernant le mobilier associé" @@ -1037,6 +1106,10 @@ msgstr "Date"  msgid "No administrative act associated"  msgstr "Aucun acte administratif associé" +#: templates/ishtar/blocks/window_tables/parcels.html:20 +msgid "No parcel" +msgstr "Pas de parcelle" +  #: templates/ishtar/dashboards/dashboard_operation.html:11  msgid "Global informations"  msgstr "Informations générales" @@ -1268,6 +1341,16 @@ msgstr "Coût FNAP"  msgid "Main towns by cost"  msgstr "Principales communes par coût" +#: templates/ishtar/wizard/wizard_adminact_deletion.html:6 +msgid "This act is indexed!" +msgstr "Cet acte est indexé !" + +#~ msgid "Commune" +#~ msgstr "Commune" + +#~ msgid "No parcel associated to this operation" +#~ msgstr "Pas de parcelle associée à cette opération" +  #~ msgid "Person in charge of the scientific part"  #~ msgstr "Responsable scientifique" diff --git a/archaeological_operations/migrations/0027_auto__add_field_historicaloperation_creation_date__add_field_operation.py b/archaeological_operations/migrations/0027_auto__add_field_historicaloperation_creation_date__add_field_operation.py new file mode 100644 index 000000000..2a21c1569 --- /dev/null +++ b/archaeological_operations/migrations/0027_auto__add_field_historicaloperation_creation_date__add_field_operation.py @@ -0,0 +1,462 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + +    def forwards(self, orm): +        # Adding field 'HistoricalOperation.creation_date' +        db.add_column('archaeological_operations_historicaloperation', 'creation_date', +                      self.gf('django.db.models.fields.DateField')(default=datetime.date.today, null=True, blank=True), +                      keep_default=False) + +        # Adding field 'Operation.creation_date' +        db.add_column('archaeological_operations_operation', 'creation_date', +                      self.gf('django.db.models.fields.DateField')(default=datetime.date.today, null=True, blank=True), +                      keep_default=False) + + +    def backwards(self, orm): +        # Deleting field 'HistoricalOperation.creation_date' +        db.delete_column('archaeological_operations_historicaloperation', 'creation_date') + +        # Deleting field 'Operation.creation_date' +        db.delete_column('archaeological_operations_operation', 'creation_date') + + +    models = { +        'archaeological_files.file': { +            'Meta': {'ordering': "('cached_label',)", 'object_name': 'File'}, +            'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'cached_label': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), +            'cira_advised': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'classified_area': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'creation_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today'}), +            'departments': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['ishtar_common.Department']", 'null': 'True', 'blank': 'True'}), +            'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'file_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_files.FileType']"}), +            'general_contractor': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'general_contractor'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}), +            'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['auth.User']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'in_charge': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'file_responsability'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'internal_reference': ('django.db.models.fields.CharField', [], {'max_length': '60', 'null': 'True', 'blank': 'True'}), +            'mh_listing': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'mh_register': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), +            'numeric_reference': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'organization': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'files'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}), +            'permit_reference': ('django.db.models.fields.CharField', [], {'max_length': '60', 'null': 'True', 'blank': 'True'}), +            'permit_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_files.PermitType']", 'null': 'True', 'blank': 'True'}), +            'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), +            'protected_area': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'reception_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'reference_number': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'related_file': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_files.File']", 'null': 'True', 'blank': 'True'}), +            'requested_operation_type': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['archaeological_operations.OperationType']"}), +            'research_comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'responsible_town_planning_service': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'responsible_town_planning_service'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'saisine_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_files.SaisineType']", 'null': 'True', 'blank': 'True'}), +            'scientist': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'scientist'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'total_developed_surface': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'total_surface': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'towns': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'file'", 'symmetrical': 'False', 'to': "orm['ishtar_common.Town']"}), +            'year': ('django.db.models.fields.IntegerField', [], {'default': '2014'}) +        }, +        'archaeological_files.filetype': { +            'Meta': {'ordering': "('label',)", 'object_name': 'FileType'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'archaeological_files.permittype': { +            'Meta': {'ordering': "('label',)", 'object_name': 'PermitType'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'archaeological_files.saisinetype': { +            'Meta': {'ordering': "('label',)", 'object_name': 'SaisineType'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'delay': ('django.db.models.fields.IntegerField', [], {}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'archaeological_operations.acttype': { +            'Meta': {'ordering': "('label',)", 'object_name': 'ActType'}, +            'associated_template': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'acttypes'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.DocumentTemplate']"}), +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'indexed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'intented_to': ('django.db.models.fields.CharField', [], {'max_length': '1'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'archaeological_operations.administrativeact': { +            'Meta': {'ordering': "('year', 'index', 'act_type')", 'object_name': 'AdministrativeAct'}, +            'act_object': ('django.db.models.fields.TextField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}), +            'act_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_operations.ActType']"}), +            'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'administrative_act'", 'null': 'True', 'to': "orm['archaeological_files.File']"}), +            'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}), +            'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['auth.User']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'in_charge': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'adminact_operation_in_charge'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'index': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'operation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'administrative_act'", 'null': 'True', 'to': "orm['archaeological_operations.Operation']"}), +            'operator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'adminact_operator'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}), +            'ref_sra': ('django.db.models.fields.CharField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}), +            'scientist': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'adminact_scientist'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'signatory': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'signatory'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'signature_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'year': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) +        }, +        'archaeological_operations.archaeologicalsite': { +            'Meta': {'object_name': 'ArchaeologicalSite'}, +            'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}), +            'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['auth.User']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), +            'reference': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '20'}) +        }, +        'archaeological_operations.historicaladministrativeact': { +            'Meta': {'ordering': "('-history_date', '-history_id')", 'object_name': 'HistoricalAdministrativeAct'}, +            'act_object': ('django.db.models.fields.TextField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}), +            'act_type_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'associated_file_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'history_creator_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'history_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), +            'history_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'history_modifier_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'history_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}), +            'history_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}), +            'id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'blank': 'True'}), +            'in_charge_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'index': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'operation_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'operator_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'ref_sra': ('django.db.models.fields.CharField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}), +            'scientist_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'signatory_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'signature_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'year': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) +        }, +        'archaeological_operations.historicaloperation': { +            'Meta': {'ordering': "('-history_date', '-history_id')", 'object_name': 'HistoricalOperation'}, +            'associated_file_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'cached_label': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), +            'cira_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'cira_rapporteur_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'code_dracar': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), +            'code_patriarche': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'common_name': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': 'True', 'blank': 'True'}), +            'cost': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'creation_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today', 'null': 'True', 'blank': 'True'}), +            'eas_number': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}), +            'effective_man_days': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'excavation_end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'fnap_cost': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'fnap_financing': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), +            'geoarchaeological_context_prescription': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'history_creator_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'history_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), +            'history_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'history_modifier_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'history_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}), +            'history_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}), +            'id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'blank': 'True'}), +            'in_charge_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'large_area_prescription': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'negative_result': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'operation_code': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'operation_type_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'operator_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'operator_reference': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}), +            'optional_man_days': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'report_delivery_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'scheduled_man_days': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'scientist_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'surface': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'year': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'zoning_prescription': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}) +        }, +        'archaeological_operations.operation': { +            'Meta': {'ordering': "('cached_label',)", 'object_name': 'Operation'}, +            'archaeological_sites': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['archaeological_operations.ArchaeologicalSite']", 'symmetrical': 'False'}), +            'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'operations'", 'null': 'True', 'to': "orm['archaeological_files.File']"}), +            'cached_label': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), +            'cira_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'cira_rapporteur': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'cira_rapporteur'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'code_dracar': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), +            'code_patriarche': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'common_name': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': 'True', 'blank': 'True'}), +            'cost': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'creation_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today', 'null': 'True', 'blank': 'True'}), +            'eas_number': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}), +            'effective_man_days': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'excavation_end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'fnap_cost': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'fnap_financing': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), +            'geoarchaeological_context_prescription': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}), +            'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['auth.User']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'in_charge': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'operation_responsability'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'large_area_prescription': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'negative_result': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'operation_code': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'operation_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['archaeological_operations.OperationType']"}), +            'operator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'operator'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}), +            'operator_reference': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}), +            'optional_man_days': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'periods': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['archaeological_operations.Period']", 'symmetrical': 'False'}), +            'remains': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['archaeological_operations.RemainType']", 'symmetrical': 'False'}), +            'report_delivery_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'scheduled_man_days': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'scientist': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'operation_scientist_responsability'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'surface': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'towns': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['ishtar_common.Town']", 'symmetrical': 'False'}), +            'year': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'zoning_prescription': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}) +        }, +        'archaeological_operations.operationbydepartment': { +            'Meta': {'object_name': 'OperationByDepartment', 'db_table': "'operation_department'", 'managed': 'False'}, +            'department': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Department']", 'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'operation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_operations.Operation']"}) +        }, +        'archaeological_operations.operationsource': { +            'Meta': {'object_name': 'OperationSource'}, +            'associated_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), +            'authors': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'operationsource_related'", 'symmetrical': 'False', 'to': "orm['ishtar_common.Author']"}), +            'creation_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'index': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'internal_reference': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}), +            'operation': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'source'", 'to': "orm['archaeological_operations.Operation']"}), +            'receipt_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'reference': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}), +            'source_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.SourceType']"}), +            'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}) +        }, +        'archaeological_operations.operationtype': { +            'Meta': {'ordering': "['-preventive', 'order', 'label']", 'object_name': 'OperationType'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}), +            'preventive': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'archaeological_operations.parcel': { +            'Meta': {'ordering': "('year', 'section', 'parcel_number')", 'object_name': 'Parcel'}, +            'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'parcels'", 'null': 'True', 'to': "orm['archaeological_files.File']"}), +            'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}), +            'history_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), +            'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['auth.User']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'operation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'parcels'", 'null': 'True', 'to': "orm['archaeological_operations.Operation']"}), +            'parcel_number': ('django.db.models.fields.CharField', [], {'max_length': '6'}), +            'section': ('django.db.models.fields.CharField', [], {'max_length': '4'}), +            'town': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'parcels'", 'to': "orm['ishtar_common.Town']"}), +            'year': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) +        }, +        'archaeological_operations.parcelowner': { +            'Meta': {'object_name': 'ParcelOwner'}, +            'end_date': ('django.db.models.fields.DateField', [], {}), +            'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}), +            'history_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), +            'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['auth.User']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'parcel_owner'", 'to': "orm['ishtar_common.Person']"}), +            'parcel': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_operations.Parcel']"}), +            'start_date': ('django.db.models.fields.DateField', [], {}) +        }, +        'archaeological_operations.period': { +            'Meta': {'ordering': "('order',)", 'object_name': 'Period'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'end_date': ('django.db.models.fields.IntegerField', [], {}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'order': ('django.db.models.fields.IntegerField', [], {}), +            'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_operations.Period']", 'null': 'True', 'blank': 'True'}), +            'start_date': ('django.db.models.fields.IntegerField', [], {}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'archaeological_operations.remaintype': { +            'Meta': {'ordering': "('label',)", 'object_name': 'RemainType'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'auth.group': { +            'Meta': {'object_name': 'Group'}, +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), +            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) +        }, +        'auth.permission': { +            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, +            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) +        }, +        'auth.user': { +            'Meta': {'object_name': 'User'}, +            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), +            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), +            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), +            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), +            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), +            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), +            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), +            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), +            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'contenttypes.contenttype': { +            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, +            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) +        }, +        'ishtar_common.arrondissement': { +            'Meta': {'object_name': 'Arrondissement'}, +            'department': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Department']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '30'}) +        }, +        'ishtar_common.author': { +            'Meta': {'object_name': 'Author'}, +            'author_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.AuthorType']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'person': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'author'", 'to': "orm['ishtar_common.Person']"}) +        }, +        'ishtar_common.authortype': { +            'Meta': {'object_name': 'AuthorType'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'ishtar_common.canton': { +            'Meta': {'object_name': 'Canton'}, +            'arrondissement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Arrondissement']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '30'}) +        }, +        'ishtar_common.department': { +            'Meta': {'ordering': "['number']", 'object_name': 'Department'}, +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}), +            'number': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3'}) +        }, +        'ishtar_common.documenttemplate': { +            'Meta': {'ordering': "['associated_object_name']", 'object_name': 'DocumentTemplate'}, +            'associated_object_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'template': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}) +        }, +        'ishtar_common.organization': { +            'Meta': {'object_name': 'Organization'}, +            'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}), +            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}), +            'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}), +            'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['auth.User']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '300'}), +            'organization_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.OrganizationType']"}), +            'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), +            'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), +            'town': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}) +        }, +        'ishtar_common.organizationtype': { +            'Meta': {'ordering': "('label',)", 'object_name': 'OrganizationType'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'ishtar_common.person': { +            'Meta': {'object_name': 'Person'}, +            'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'attached_to': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'members'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}), +            'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}), +            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}), +            'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}), +            'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['auth.User']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '30'}), +            'person_types': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['ishtar_common.PersonType']", 'symmetrical': 'False'}), +            'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), +            'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), +            'surname': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}), +            'title': ('django.db.models.fields.CharField', [], {'max_length': '2'}), +            'town': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}) +        }, +        'ishtar_common.persontype': { +            'Meta': {'ordering': "('label',)", 'object_name': 'PersonType'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'ishtar_common.sourcetype': { +            'Meta': {'object_name': 'SourceType'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'ishtar_common.town': { +            'Meta': {'ordering': "['numero_insee']", 'object_name': 'Town'}, +            'canton': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Canton']", 'null': 'True', 'blank': 'True'}), +            'center': ('django.contrib.gis.db.models.fields.PointField', [], {'srid': '27572', 'null': 'True', 'blank': 'True'}), +            'departement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Department']", 'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'numero_insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '6'}), +            'surface': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) +        } +    } + +    complete_apps = ['archaeological_operations']
\ No newline at end of file diff --git a/archaeological_operations/migrations/0028_init_creation_date.py b/archaeological_operations/migrations/0028_init_creation_date.py new file mode 100644 index 000000000..0136fb217 --- /dev/null +++ b/archaeological_operations/migrations/0028_init_creation_date.py @@ -0,0 +1,457 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import DataMigration +from django.db import models + +class Migration(DataMigration): + +    def forwards(self, orm): +        for item in orm['archaeological_operations.Operation'].objects.all(): +            q = orm['archaeological_operations.HistoricalOperation'].objects.filter( +                    id=item.id, history_date__isnull=False +                    ).order_by('history_date', 'history_id') +            if not q.count(): +                return +            hist_item = q.all()[0] +            item.creation_date = hist_item.history_date +            item.skip_history_when_saving = True +            item.save() + +    def backwards(self, orm): +        pass + +    models = { +        'archaeological_files.file': { +            'Meta': {'ordering': "('cached_label',)", 'object_name': 'File'}, +            'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'cached_label': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), +            'cira_advised': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'classified_area': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'creation_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today'}), +            'departments': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['ishtar_common.Department']", 'null': 'True', 'blank': 'True'}), +            'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'file_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_files.FileType']"}), +            'general_contractor': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'general_contractor'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}), +            'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['auth.User']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'in_charge': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'file_responsability'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'internal_reference': ('django.db.models.fields.CharField', [], {'max_length': '60', 'null': 'True', 'blank': 'True'}), +            'mh_listing': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'mh_register': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), +            'numeric_reference': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'organization': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'files'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}), +            'permit_reference': ('django.db.models.fields.CharField', [], {'max_length': '60', 'null': 'True', 'blank': 'True'}), +            'permit_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_files.PermitType']", 'null': 'True', 'blank': 'True'}), +            'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), +            'protected_area': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'reception_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'reference_number': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'related_file': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_files.File']", 'null': 'True', 'blank': 'True'}), +            'requested_operation_type': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['archaeological_operations.OperationType']"}), +            'research_comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'responsible_town_planning_service': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'responsible_town_planning_service'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'saisine_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_files.SaisineType']", 'null': 'True', 'blank': 'True'}), +            'scientist': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'scientist'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'total_developed_surface': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'total_surface': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'towns': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'file'", 'symmetrical': 'False', 'to': "orm['ishtar_common.Town']"}), +            'year': ('django.db.models.fields.IntegerField', [], {'default': '2014'}) +        }, +        'archaeological_files.filetype': { +            'Meta': {'ordering': "('label',)", 'object_name': 'FileType'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'archaeological_files.permittype': { +            'Meta': {'ordering': "('label',)", 'object_name': 'PermitType'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'archaeological_files.saisinetype': { +            'Meta': {'ordering': "('label',)", 'object_name': 'SaisineType'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'delay': ('django.db.models.fields.IntegerField', [], {}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'archaeological_operations.acttype': { +            'Meta': {'ordering': "('label',)", 'object_name': 'ActType'}, +            'associated_template': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'acttypes'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.DocumentTemplate']"}), +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'indexed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'intented_to': ('django.db.models.fields.CharField', [], {'max_length': '1'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'archaeological_operations.administrativeact': { +            'Meta': {'ordering': "('year', 'index', 'act_type')", 'object_name': 'AdministrativeAct'}, +            'act_object': ('django.db.models.fields.TextField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}), +            'act_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_operations.ActType']"}), +            'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'administrative_act'", 'null': 'True', 'to': "orm['archaeological_files.File']"}), +            'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}), +            'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['auth.User']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'in_charge': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'adminact_operation_in_charge'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'index': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'operation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'administrative_act'", 'null': 'True', 'to': "orm['archaeological_operations.Operation']"}), +            'operator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'adminact_operator'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}), +            'ref_sra': ('django.db.models.fields.CharField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}), +            'scientist': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'adminact_scientist'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'signatory': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'signatory'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'signature_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'year': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) +        }, +        'archaeological_operations.archaeologicalsite': { +            'Meta': {'object_name': 'ArchaeologicalSite'}, +            'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}), +            'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['auth.User']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), +            'reference': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '20'}) +        }, +        'archaeological_operations.historicaladministrativeact': { +            'Meta': {'ordering': "('-history_date', '-history_id')", 'object_name': 'HistoricalAdministrativeAct'}, +            'act_object': ('django.db.models.fields.TextField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}), +            'act_type_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'associated_file_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'history_creator_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'history_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), +            'history_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'history_modifier_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'history_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}), +            'history_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}), +            'id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'blank': 'True'}), +            'in_charge_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'index': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'operation_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'operator_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'ref_sra': ('django.db.models.fields.CharField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}), +            'scientist_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'signatory_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'signature_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'year': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) +        }, +        'archaeological_operations.historicaloperation': { +            'Meta': {'ordering': "('-history_date', '-history_id')", 'object_name': 'HistoricalOperation'}, +            'associated_file_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'cached_label': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), +            'cira_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'cira_rapporteur_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'code_dracar': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), +            'code_patriarche': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'common_name': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': 'True', 'blank': 'True'}), +            'cost': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'creation_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today', 'null': 'True', 'blank': 'True'}), +            'eas_number': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}), +            'effective_man_days': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'excavation_end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'fnap_cost': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'fnap_financing': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), +            'geoarchaeological_context_prescription': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'history_creator_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'history_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), +            'history_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'history_modifier_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'history_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}), +            'history_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}), +            'id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'blank': 'True'}), +            'in_charge_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'large_area_prescription': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'negative_result': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'operation_code': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'operation_type_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'operator_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'operator_reference': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}), +            'optional_man_days': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'report_delivery_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'scheduled_man_days': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'scientist_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'surface': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'year': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'zoning_prescription': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}) +        }, +        'archaeological_operations.operation': { +            'Meta': {'ordering': "('cached_label',)", 'object_name': 'Operation'}, +            'archaeological_sites': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['archaeological_operations.ArchaeologicalSite']", 'symmetrical': 'False'}), +            'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'operations'", 'null': 'True', 'to': "orm['archaeological_files.File']"}), +            'cached_label': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), +            'cira_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'cira_rapporteur': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'cira_rapporteur'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'code_dracar': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), +            'code_patriarche': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'common_name': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': 'True', 'blank': 'True'}), +            'cost': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'creation_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today', 'null': 'True', 'blank': 'True'}), +            'eas_number': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}), +            'effective_man_days': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'excavation_end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'fnap_cost': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'fnap_financing': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), +            'geoarchaeological_context_prescription': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}), +            'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['auth.User']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'in_charge': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'operation_responsability'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'large_area_prescription': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'negative_result': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'operation_code': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'operation_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['archaeological_operations.OperationType']"}), +            'operator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'operator'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}), +            'operator_reference': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}), +            'optional_man_days': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'periods': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['archaeological_operations.Period']", 'symmetrical': 'False'}), +            'remains': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['archaeological_operations.RemainType']", 'symmetrical': 'False'}), +            'report_delivery_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'scheduled_man_days': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'scientist': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'operation_scientist_responsability'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'surface': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'towns': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['ishtar_common.Town']", 'symmetrical': 'False'}), +            'year': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'zoning_prescription': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}) +        }, +        'archaeological_operations.operationbydepartment': { +            'Meta': {'object_name': 'OperationByDepartment', 'db_table': "'operation_department'", 'managed': 'False'}, +            'department': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Department']", 'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'operation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_operations.Operation']"}) +        }, +        'archaeological_operations.operationsource': { +            'Meta': {'object_name': 'OperationSource'}, +            'associated_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), +            'authors': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'operationsource_related'", 'symmetrical': 'False', 'to': "orm['ishtar_common.Author']"}), +            'creation_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'index': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'internal_reference': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}), +            'operation': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'source'", 'to': "orm['archaeological_operations.Operation']"}), +            'receipt_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'reference': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}), +            'source_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.SourceType']"}), +            'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}) +        }, +        'archaeological_operations.operationtype': { +            'Meta': {'ordering': "['-preventive', 'order', 'label']", 'object_name': 'OperationType'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}), +            'preventive': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'archaeological_operations.parcel': { +            'Meta': {'ordering': "('year', 'section', 'parcel_number')", 'object_name': 'Parcel'}, +            'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'parcels'", 'null': 'True', 'to': "orm['archaeological_files.File']"}), +            'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}), +            'history_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), +            'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['auth.User']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'operation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'parcels'", 'null': 'True', 'to': "orm['archaeological_operations.Operation']"}), +            'parcel_number': ('django.db.models.fields.CharField', [], {'max_length': '6'}), +            'section': ('django.db.models.fields.CharField', [], {'max_length': '4'}), +            'town': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'parcels'", 'to': "orm['ishtar_common.Town']"}), +            'year': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) +        }, +        'archaeological_operations.parcelowner': { +            'Meta': {'object_name': 'ParcelOwner'}, +            'end_date': ('django.db.models.fields.DateField', [], {}), +            'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}), +            'history_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), +            'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['auth.User']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'parcel_owner'", 'to': "orm['ishtar_common.Person']"}), +            'parcel': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_operations.Parcel']"}), +            'start_date': ('django.db.models.fields.DateField', [], {}) +        }, +        'archaeological_operations.period': { +            'Meta': {'ordering': "('order',)", 'object_name': 'Period'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'end_date': ('django.db.models.fields.IntegerField', [], {}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'order': ('django.db.models.fields.IntegerField', [], {}), +            'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_operations.Period']", 'null': 'True', 'blank': 'True'}), +            'start_date': ('django.db.models.fields.IntegerField', [], {}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'archaeological_operations.remaintype': { +            'Meta': {'ordering': "('label',)", 'object_name': 'RemainType'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'auth.group': { +            'Meta': {'object_name': 'Group'}, +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), +            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) +        }, +        'auth.permission': { +            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, +            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) +        }, +        'auth.user': { +            'Meta': {'object_name': 'User'}, +            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), +            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), +            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), +            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), +            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), +            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), +            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), +            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), +            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'contenttypes.contenttype': { +            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, +            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) +        }, +        'ishtar_common.arrondissement': { +            'Meta': {'object_name': 'Arrondissement'}, +            'department': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Department']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '30'}) +        }, +        'ishtar_common.author': { +            'Meta': {'object_name': 'Author'}, +            'author_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.AuthorType']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'person': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'author'", 'to': "orm['ishtar_common.Person']"}) +        }, +        'ishtar_common.authortype': { +            'Meta': {'object_name': 'AuthorType'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'ishtar_common.canton': { +            'Meta': {'object_name': 'Canton'}, +            'arrondissement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Arrondissement']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '30'}) +        }, +        'ishtar_common.department': { +            'Meta': {'ordering': "['number']", 'object_name': 'Department'}, +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}), +            'number': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3'}) +        }, +        'ishtar_common.documenttemplate': { +            'Meta': {'ordering': "['associated_object_name']", 'object_name': 'DocumentTemplate'}, +            'associated_object_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'template': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}) +        }, +        'ishtar_common.organization': { +            'Meta': {'object_name': 'Organization'}, +            'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}), +            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}), +            'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}), +            'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['auth.User']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '300'}), +            'organization_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.OrganizationType']"}), +            'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), +            'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), +            'town': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}) +        }, +        'ishtar_common.organizationtype': { +            'Meta': {'ordering': "('label',)", 'object_name': 'OrganizationType'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'ishtar_common.person': { +            'Meta': {'object_name': 'Person'}, +            'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'attached_to': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'members'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}), +            'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}), +            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}), +            'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}), +            'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['auth.User']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '30'}), +            'person_types': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['ishtar_common.PersonType']", 'symmetrical': 'False'}), +            'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), +            'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), +            'surname': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}), +            'title': ('django.db.models.fields.CharField', [], {'max_length': '2'}), +            'town': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}) +        }, +        'ishtar_common.persontype': { +            'Meta': {'ordering': "('label',)", 'object_name': 'PersonType'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'ishtar_common.sourcetype': { +            'Meta': {'object_name': 'SourceType'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'ishtar_common.town': { +            'Meta': {'ordering': "['numero_insee']", 'object_name': 'Town'}, +            'canton': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Canton']", 'null': 'True', 'blank': 'True'}), +            'center': ('django.contrib.gis.db.models.fields.PointField', [], {'srid': '27572', 'null': 'True', 'blank': 'True'}), +            'departement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Department']", 'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'numero_insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '6'}), +            'surface': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) +        } +    } + +    complete_apps = ['archaeological_operations'] +    symmetrical = True diff --git a/archaeological_operations/migrations/0029_auto__chg_field_historicaloperation_creation_date__chg_field_operation.py b/archaeological_operations/migrations/0029_auto__chg_field_historicaloperation_creation_date__chg_field_operation.py new file mode 100644 index 000000000..d5b36444a --- /dev/null +++ b/archaeological_operations/migrations/0029_auto__chg_field_historicaloperation_creation_date__chg_field_operation.py @@ -0,0 +1,458 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + +    def forwards(self, orm): + +        # Changing field 'HistoricalOperation.creation_date' +        db.alter_column('archaeological_operations_historicaloperation', 'creation_date', self.gf('django.db.models.fields.DateField')()) + +        # Changing field 'Operation.creation_date' +        db.alter_column('archaeological_operations_operation', 'creation_date', self.gf('django.db.models.fields.DateField')()) + +    def backwards(self, orm): + +        # Changing field 'HistoricalOperation.creation_date' +        db.alter_column('archaeological_operations_historicaloperation', 'creation_date', self.gf('django.db.models.fields.DateField')(null=True)) + +        # Changing field 'Operation.creation_date' +        db.alter_column('archaeological_operations_operation', 'creation_date', self.gf('django.db.models.fields.DateField')(null=True)) + +    models = { +        'archaeological_files.file': { +            'Meta': {'ordering': "('cached_label',)", 'object_name': 'File'}, +            'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'cached_label': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), +            'cira_advised': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'classified_area': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'creation_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today'}), +            'departments': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['ishtar_common.Department']", 'null': 'True', 'blank': 'True'}), +            'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'file_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_files.FileType']"}), +            'general_contractor': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'general_contractor'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}), +            'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['auth.User']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'in_charge': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'file_responsability'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'internal_reference': ('django.db.models.fields.CharField', [], {'max_length': '60', 'null': 'True', 'blank': 'True'}), +            'mh_listing': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'mh_register': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), +            'numeric_reference': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'organization': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'files'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}), +            'permit_reference': ('django.db.models.fields.CharField', [], {'max_length': '60', 'null': 'True', 'blank': 'True'}), +            'permit_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_files.PermitType']", 'null': 'True', 'blank': 'True'}), +            'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), +            'protected_area': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'reception_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'reference_number': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'related_file': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_files.File']", 'null': 'True', 'blank': 'True'}), +            'requested_operation_type': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['archaeological_operations.OperationType']"}), +            'research_comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'responsible_town_planning_service': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'responsible_town_planning_service'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'saisine_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_files.SaisineType']", 'null': 'True', 'blank': 'True'}), +            'scientist': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'scientist'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'total_developed_surface': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'total_surface': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'towns': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'file'", 'symmetrical': 'False', 'to': "orm['ishtar_common.Town']"}), +            'year': ('django.db.models.fields.IntegerField', [], {'default': '2014'}) +        }, +        'archaeological_files.filetype': { +            'Meta': {'ordering': "('label',)", 'object_name': 'FileType'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'archaeological_files.permittype': { +            'Meta': {'ordering': "('label',)", 'object_name': 'PermitType'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'archaeological_files.saisinetype': { +            'Meta': {'ordering': "('label',)", 'object_name': 'SaisineType'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'delay': ('django.db.models.fields.IntegerField', [], {}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'archaeological_operations.acttype': { +            'Meta': {'ordering': "('label',)", 'object_name': 'ActType'}, +            'associated_template': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'acttypes'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.DocumentTemplate']"}), +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'indexed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'intented_to': ('django.db.models.fields.CharField', [], {'max_length': '1'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'archaeological_operations.administrativeact': { +            'Meta': {'ordering': "('year', 'index', 'act_type')", 'object_name': 'AdministrativeAct'}, +            'act_object': ('django.db.models.fields.TextField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}), +            'act_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_operations.ActType']"}), +            'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'administrative_act'", 'null': 'True', 'to': "orm['archaeological_files.File']"}), +            'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}), +            'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['auth.User']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'in_charge': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'adminact_operation_in_charge'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'index': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'operation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'administrative_act'", 'null': 'True', 'to': "orm['archaeological_operations.Operation']"}), +            'operator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'adminact_operator'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}), +            'ref_sra': ('django.db.models.fields.CharField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}), +            'scientist': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'adminact_scientist'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'signatory': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'signatory'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'signature_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'year': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) +        }, +        'archaeological_operations.archaeologicalsite': { +            'Meta': {'object_name': 'ArchaeologicalSite'}, +            'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}), +            'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['auth.User']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), +            'reference': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '20'}) +        }, +        'archaeological_operations.historicaladministrativeact': { +            'Meta': {'ordering': "('-history_date', '-history_id')", 'object_name': 'HistoricalAdministrativeAct'}, +            'act_object': ('django.db.models.fields.TextField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}), +            'act_type_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'associated_file_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'history_creator_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'history_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), +            'history_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'history_modifier_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'history_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}), +            'history_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}), +            'id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'blank': 'True'}), +            'in_charge_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'index': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'operation_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'operator_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'ref_sra': ('django.db.models.fields.CharField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}), +            'scientist_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'signatory_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'signature_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'year': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) +        }, +        'archaeological_operations.historicaloperation': { +            'Meta': {'ordering': "('-history_date', '-history_id')", 'object_name': 'HistoricalOperation'}, +            'associated_file_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'cached_label': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), +            'cira_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'cira_rapporteur_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'code_dracar': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), +            'code_patriarche': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'common_name': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': 'True', 'blank': 'True'}), +            'cost': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'creation_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today'}), +            'eas_number': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}), +            'effective_man_days': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'excavation_end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'fnap_cost': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'fnap_financing': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), +            'geoarchaeological_context_prescription': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'history_creator_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'history_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), +            'history_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'history_modifier_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'history_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}), +            'history_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}), +            'id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'blank': 'True'}), +            'in_charge_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'large_area_prescription': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'negative_result': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'operation_code': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'operation_type_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'operator_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'operator_reference': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}), +            'optional_man_days': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'report_delivery_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'scheduled_man_days': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'scientist_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), +            'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'surface': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'year': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'zoning_prescription': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}) +        }, +        'archaeological_operations.operation': { +            'Meta': {'ordering': "('cached_label',)", 'object_name': 'Operation'}, +            'archaeological_sites': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['archaeological_operations.ArchaeologicalSite']", 'symmetrical': 'False'}), +            'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'operations'", 'null': 'True', 'to': "orm['archaeological_files.File']"}), +            'cached_label': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), +            'cira_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'cira_rapporteur': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'cira_rapporteur'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'code_dracar': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), +            'code_patriarche': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'common_name': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': 'True', 'blank': 'True'}), +            'cost': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'creation_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today'}), +            'eas_number': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}), +            'effective_man_days': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'excavation_end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'fnap_cost': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'fnap_financing': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), +            'geoarchaeological_context_prescription': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}), +            'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['auth.User']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'in_charge': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'operation_responsability'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'large_area_prescription': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'negative_result': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'operation_code': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'operation_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['archaeological_operations.OperationType']"}), +            'operator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'operator'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}), +            'operator_reference': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}), +            'optional_man_days': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'periods': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['archaeological_operations.Period']", 'symmetrical': 'False'}), +            'remains': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['archaeological_operations.RemainType']", 'symmetrical': 'False'}), +            'report_delivery_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'scheduled_man_days': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'scientist': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'operation_scientist_responsability'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}), +            'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'surface': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'towns': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['ishtar_common.Town']", 'symmetrical': 'False'}), +            'year': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'zoning_prescription': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}) +        }, +        'archaeological_operations.operationbydepartment': { +            'Meta': {'object_name': 'OperationByDepartment', 'db_table': "'operation_department'", 'managed': 'False'}, +            'department': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Department']", 'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'operation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_operations.Operation']"}) +        }, +        'archaeological_operations.operationsource': { +            'Meta': {'object_name': 'OperationSource'}, +            'associated_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), +            'authors': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'operationsource_related'", 'symmetrical': 'False', 'to': "orm['ishtar_common.Author']"}), +            'creation_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'index': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'internal_reference': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}), +            'operation': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'source'", 'to': "orm['archaeological_operations.Operation']"}), +            'receipt_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'reference': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}), +            'source_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.SourceType']"}), +            'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}) +        }, +        'archaeological_operations.operationtype': { +            'Meta': {'ordering': "['-preventive', 'order', 'label']", 'object_name': 'OperationType'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}), +            'preventive': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'archaeological_operations.parcel': { +            'Meta': {'ordering': "('year', 'section', 'parcel_number')", 'object_name': 'Parcel'}, +            'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'parcels'", 'null': 'True', 'to': "orm['archaeological_files.File']"}), +            'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}), +            'history_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), +            'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['auth.User']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'operation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'parcels'", 'null': 'True', 'to': "orm['archaeological_operations.Operation']"}), +            'parcel_number': ('django.db.models.fields.CharField', [], {'max_length': '6'}), +            'section': ('django.db.models.fields.CharField', [], {'max_length': '4'}), +            'town': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'parcels'", 'to': "orm['ishtar_common.Town']"}), +            'year': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) +        }, +        'archaeological_operations.parcelowner': { +            'Meta': {'object_name': 'ParcelOwner'}, +            'end_date': ('django.db.models.fields.DateField', [], {}), +            'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}), +            'history_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), +            'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['auth.User']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'parcel_owner'", 'to': "orm['ishtar_common.Person']"}), +            'parcel': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_operations.Parcel']"}), +            'start_date': ('django.db.models.fields.DateField', [], {}) +        }, +        'archaeological_operations.period': { +            'Meta': {'ordering': "('order',)", 'object_name': 'Period'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'end_date': ('django.db.models.fields.IntegerField', [], {}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'order': ('django.db.models.fields.IntegerField', [], {}), +            'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_operations.Period']", 'null': 'True', 'blank': 'True'}), +            'start_date': ('django.db.models.fields.IntegerField', [], {}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'archaeological_operations.remaintype': { +            'Meta': {'ordering': "('label',)", 'object_name': 'RemainType'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'auth.group': { +            'Meta': {'object_name': 'Group'}, +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), +            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) +        }, +        'auth.permission': { +            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, +            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) +        }, +        'auth.user': { +            'Meta': {'object_name': 'User'}, +            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), +            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), +            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), +            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), +            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), +            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), +            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), +            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), +            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'contenttypes.contenttype': { +            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, +            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) +        }, +        'ishtar_common.arrondissement': { +            'Meta': {'object_name': 'Arrondissement'}, +            'department': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Department']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '30'}) +        }, +        'ishtar_common.author': { +            'Meta': {'object_name': 'Author'}, +            'author_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.AuthorType']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'person': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'author'", 'to': "orm['ishtar_common.Person']"}) +        }, +        'ishtar_common.authortype': { +            'Meta': {'object_name': 'AuthorType'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'ishtar_common.canton': { +            'Meta': {'object_name': 'Canton'}, +            'arrondissement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Arrondissement']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '30'}) +        }, +        'ishtar_common.department': { +            'Meta': {'ordering': "['number']", 'object_name': 'Department'}, +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}), +            'number': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3'}) +        }, +        'ishtar_common.documenttemplate': { +            'Meta': {'ordering': "['associated_object_name']", 'object_name': 'DocumentTemplate'}, +            'associated_object_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'template': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}) +        }, +        'ishtar_common.organization': { +            'Meta': {'object_name': 'Organization'}, +            'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}), +            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}), +            'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}), +            'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['auth.User']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '300'}), +            'organization_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.OrganizationType']"}), +            'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), +            'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), +            'town': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}) +        }, +        'ishtar_common.organizationtype': { +            'Meta': {'ordering': "('label',)", 'object_name': 'OrganizationType'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'ishtar_common.person': { +            'Meta': {'object_name': 'Person'}, +            'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'attached_to': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'members'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}), +            'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}), +            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}), +            'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}), +            'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['auth.User']"}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '30'}), +            'person_types': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['ishtar_common.PersonType']", 'symmetrical': 'False'}), +            'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), +            'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), +            'surname': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}), +            'title': ('django.db.models.fields.CharField', [], {'max_length': '2'}), +            'town': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}) +        }, +        'ishtar_common.persontype': { +            'Meta': {'ordering': "('label',)", 'object_name': 'PersonType'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'ishtar_common.sourcetype': { +            'Meta': {'object_name': 'SourceType'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) +        }, +        'ishtar_common.town': { +            'Meta': {'ordering': "['numero_insee']", 'object_name': 'Town'}, +            'canton': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Canton']", 'null': 'True', 'blank': 'True'}), +            'center': ('django.contrib.gis.db.models.fields.PointField', [], {'srid': '27572', 'null': 'True', 'blank': 'True'}), +            'departement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Department']", 'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), +            'numero_insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '6'}), +            'surface': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) +        } +    } + +    complete_apps = ['archaeological_operations']
\ No newline at end of file diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py index 9f81a0e1c..a4a225ff0 100644 --- a/archaeological_operations/models.py +++ b/archaeological_operations/models.py @@ -33,7 +33,7 @@ from ishtar_common.utils import cached_label_changed  from ishtar_common.models import GeneralType, BaseHistorizedItem, \       HistoricalRecords, LightHistorizedItem, OwnPerms, Department, Source,\       Person, Organization, Town, Dashboard, IshtarUser, ValueGetter, \ -     DocumentTemplate, ShortMenuItem +     DocumentTemplate, ShortMenuItem, DashboardFormItem  FILES_AVAILABLE = 'archaeological_files' in settings.INSTALLED_APPS  class OperationType(GeneralType): @@ -132,12 +132,15 @@ class ArchaeologicalSite(BaseHistorizedItem):              name += u" %s %s" % (settings.JOINT, self.name)          return name -class Operation(BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem): +class Operation(BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem, +                DashboardFormItem):      TABLE_COLS = ['year_index', 'operation_type', 'remains', 'towns',                    'start_date', 'excavation_end_date']      if FILES_AVAILABLE:          TABLE_COLS.insert(4, 'associated_file_short_label')      start_date = models.DateField(_(u"Start date"), null=True, blank=True) +    creation_date = models.DateField(_(u"Creation date"), +                                     default=datetime.date.today)      excavation_end_date = models.DateField(_(u"Excavation end date"), null=True,                                             blank=True)      end_date = models.DateField(_(u"Closing date"), null=True, blank=True) @@ -335,34 +338,6 @@ class Operation(BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem):                              Max('operation_code'))["operation_code__max"]          return (max_val + 1) if max_val else 1 -    @classmethod -    def get_periods(cls, slice='year', fltr={}): -        q = cls.objects -        if fltr: -            q = q.filter(**fltr) -        if slice == 'year': -            max_year = datetime.date.today().year + 1 -            return [res['year'] for res in list( -                            q.exclude( year__isnull=True -                              ).exclude(year__gt=max_year -                              ).values('year' -                              ).annotate(Count("id")).order_by())] -        return [] - -    @classmethod -    def get_by_year(cls, year, fltr={}): -        q = cls.objects -        if fltr: -            q = q.filter(**fltr) -        return q.filter(year=year) - -    @classmethod -    def get_total_number(cls, fltr={}): -        q = cls.objects -        if fltr: -            q = q.filter(**fltr) -        return q.count() -      year_index_lbl = _(u"Operation code")      @property      def year_index(self): diff --git a/archaeological_operations/views.py b/archaeological_operations/views.py index 6e623db88..5e6385de7 100644 --- a/archaeological_operations/views.py +++ b/archaeological_operations/views.py @@ -181,8 +181,7 @@ operation_search_wizard = SearchWizard.as_view([      label=_(u"Operation search"),      url_name='operation_search',) -operation_creation_wizard = OperationWizard.as_view([ -    ('filechoice-operation_creation', OperationFormFileChoice), +wizard_steps = [      ('general-operation_creation', OperationFormGeneral),      ('preventive-operation_creation', OperationFormPreventive),      ('preventivediag-operation_creation', OperationFormPreventiveDiag), @@ -192,7 +191,12 @@ operation_creation_wizard = OperationWizard.as_view([      ('parcels-operation_creation', SelectedParcelFormSet),      ('remains-operation_creation', RemainFormset),      ('periods-operation_creation', PeriodFormset), -    ('final-operation_creation', FinalForm)], +    ('final-operation_creation', FinalForm)] +if FILES_AVAILABLE: +    wizard_steps.insert(0, ('filechoice-operation_creation', +                            OperationFormFileChoice)) + +operation_creation_wizard = OperationWizard.as_view(wizard_steps,      label=_(u"New operation"),      condition_dict={          'preventive-operation_creation':\ diff --git a/ishtar_common/locale/fr/LC_MESSAGES/django.po b/ishtar_common/locale/fr/LC_MESSAGES/django.po index 5291ab4ff..923126974 100644 --- a/ishtar_common/locale/fr/LC_MESSAGES/django.po +++ b/ishtar_common/locale/fr/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid ""  msgstr ""  "Project-Id-Version: alpha\n"  "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-10-15 01:16+0200\n" +"POT-Creation-Date: 2014-10-21 00:43+0200\n"  "PO-Revision-Date: 2010-12-09\n"  "Last-Translator: Étienne Loks <etienne.loks at peacefrogs net>\n"  "Language-Team: \n" @@ -54,8 +54,7 @@ msgstr "Confirmation"  #: forms.py:80  msgid "Are you sure you want to delete?" -msgstr "" -"Êtes vous sûr de vouloir supprimer ?" +msgstr "Êtes vous sûr de vouloir supprimer ?"  #: forms.py:88  msgid "There are identical items." @@ -73,12 +72,12 @@ msgstr "Vous devez sélectionner un élément."  msgid "Add a new item"  msgstr "Ajouter un nouvel élément" -#: forms.py:164 models.py:672 +#: forms.py:164 models.py:739  msgid "Template"  msgstr "Patron"  #: forms_common.py:42 forms_common.py:104 forms_common.py:185 -#: forms_common.py:190 models.py:721 models.py:976 +#: forms_common.py:190 models.py:788 models.py:1043  #: templates/ishtar/sheet_organization.html:17  #: templates/ishtar/sheet_person.html:20 templates/ishtar/sheet_person.html:30  msgid "Town" @@ -102,68 +101,68 @@ msgstr ""  "<p class='example'>Par exemple tapez « saint denis 93 » pour obtenir la "  "commune Saint-Denis dans le département français de Seine-Saint-Denis.</p>" -#: forms_common.py:56 forms_common.py:354 ishtar_menu.py:30 models.py:794 -#: models.py:861 models.py:901 templates/ishtar/sheet_person.html:6 +#: forms_common.py:56 forms_common.py:354 ishtar_menu.py:30 models.py:861 +#: models.py:928 models.py:968 templates/ishtar/sheet_person.html:6  msgid "Person"  msgstr "Individu" -#: forms_common.py:92 forms_common.py:152 ishtar_menu.py:42 models.py:746 +#: forms_common.py:92 forms_common.py:152 ishtar_menu.py:42 models.py:813  #: templates/ishtar/sheet_organization.html:6  msgid "Organization"  msgstr "Organisation"  #: forms_common.py:94 forms_common.py:130 forms_common.py:148 -#: forms_common.py:177 models.py:671 models.py:741 models.py:787 models.py:962 -#: templates/ishtar/sheet_organization.html:12 +#: forms_common.py:177 models.py:738 models.py:808 models.py:854 +#: models.py:1029 templates/ishtar/sheet_organization.html:12  #: templates/ishtar/sheet_organization.html:25  #: templates/ishtar/sheet_person.html:12 templates/ishtar/sheet_person.html:26  msgid "Name"  msgstr "Nom" -#: forms_common.py:96 models.py:735 +#: forms_common.py:96 models.py:802  msgid "Organization type"  msgstr "Type d'organisation" -#: forms_common.py:98 forms_common.py:179 models.py:716 +#: forms_common.py:98 forms_common.py:179 models.py:783  #: templates/ishtar/sheet_organization.html:14  #: templates/ishtar/sheet_person.html:17 templates/ishtar/sheet_person.html:27  msgid "Address"  msgstr "Adresse" -#: forms_common.py:100 forms_common.py:181 models.py:717 +#: forms_common.py:100 forms_common.py:181 models.py:784  #: templates/ishtar/sheet_organization.html:15  #: templates/ishtar/sheet_person.html:18 templates/ishtar/sheet_person.html:28  msgid "Address complement"  msgstr "Complément d'adresse" -#: forms_common.py:102 forms_common.py:183 models.py:719 +#: forms_common.py:102 forms_common.py:183 models.py:786  #: templates/ishtar/sheet_organization.html:16  #: templates/ishtar/sheet_person.html:19 templates/ishtar/sheet_person.html:29  msgid "Postal code"  msgstr "Code postal" -#: forms_common.py:105 forms_common.py:186 models.py:722 +#: forms_common.py:105 forms_common.py:186 models.py:789  msgid "Country"  msgstr "Pays"  #: forms_common.py:107 forms_common.py:150 forms_common.py:188 -#: forms_common.py:240 models.py:727 templates/ishtar/sheet_person.html:15 +#: forms_common.py:240 models.py:794 templates/ishtar/sheet_person.html:15  msgid "Email"  msgstr "Courriel" -#: forms_common.py:108 forms_common.py:189 models.py:724 +#: forms_common.py:108 forms_common.py:189 models.py:791  #: templates/ishtar/sheet_organization.html:18  #: templates/ishtar/sheet_person.html:21 templates/ishtar/sheet_person.html:31  msgid "Phone"  msgstr "Téléphone" -#: forms_common.py:109 models.py:725 +#: forms_common.py:109 models.py:792  #: templates/ishtar/sheet_organization.html:19  #: templates/ishtar/sheet_person.html:22 templates/ishtar/sheet_person.html:32  msgid "Mobile phone"  msgstr "Téléphone portable" -#: forms_common.py:131 forms_common.py:151 models.py:743 models.py:925 +#: forms_common.py:131 forms_common.py:151 models.py:810 models.py:992  #: templates/sheet_ope.html:85 templates/sheet_ope.html.py:105  #: templates/sheet_ope.html:126 templates/ishtar/sheet_organization.html:27  #: templates/ishtar/sheet_person.html:42 templates/ishtar/sheet_person.html:95 @@ -175,7 +174,7 @@ msgstr "Type"  msgid "Organization search"  msgstr "Recherche d'organisations" -#: forms_common.py:149 forms_common.py:175 models.py:785 +#: forms_common.py:149 forms_common.py:175 models.py:852  #: templates/ishtar/sheet_organization.html:26  #: templates/ishtar/sheet_person.html:13  msgid "Surname" @@ -189,7 +188,7 @@ msgstr "Recherche d'individus"  msgid "Identity"  msgstr "Identité" -#: forms_common.py:174 forms_common.py:311 models.py:784 models.py:924 +#: forms_common.py:174 forms_common.py:311 models.py:851 models.py:991  #: templates/sheet_ope.html:104 templates/ishtar/sheet_person.html:94  #: templates/ishtar/blocks/window_tables/documents.html:5  msgid "Title" @@ -199,7 +198,7 @@ msgstr "Titre"  msgid "Current organization"  msgstr "Organisation actuelle" -#: forms_common.py:199 forms_common.py:222 forms_common.py:225 models.py:771 +#: forms_common.py:199 forms_common.py:222 forms_common.py:225 models.py:838  msgid "Person type"  msgstr "Type d'individu" @@ -231,7 +230,7 @@ msgstr "Ce nom d'utilisateur existe déjà."  msgid "Send the new password by email?"  msgstr "Envoyer le nouveau mot de passe par courriel ?" -#: forms_common.py:291 forms_common.py:303 models.py:977 +#: forms_common.py:291 forms_common.py:303 models.py:1044  #: templates/ishtar/sheet_person.html:72  msgid "Towns"  msgstr "Communes" @@ -244,23 +243,23 @@ msgstr "Il y a des communes identiques."  msgid "Documentation informations"  msgstr "Information sur le document" -#: forms_common.py:313 forms_common.py:332 models.py:920 +#: forms_common.py:313 forms_common.py:332 models.py:987  msgid "Source type"  msgstr "Type de source" -#: forms_common.py:315 models.py:929 +#: forms_common.py:315 models.py:996  msgid "Numerical ressource (web address)"  msgstr "Ressource numérique (adresse web)" -#: forms_common.py:316 models.py:931 +#: forms_common.py:316 models.py:998  msgid "Receipt date"  msgstr "Date de réception" -#: forms_common.py:318 models.py:933 +#: forms_common.py:318 models.py:1000  msgid "Creation date"  msgstr "Date de création" -#: forms_common.py:329 forms_common.py:348 forms_common.py:379 models.py:906 +#: forms_common.py:329 forms_common.py:348 forms_common.py:379 models.py:973  #: templates/ishtar/wizard/wizard_person_deletion.html:124  msgid "Author"  msgstr "Auteur" @@ -269,7 +268,7 @@ msgstr "Auteur"  msgid "Would you like to delete this documentation?"  msgstr "Voulez vous supprimer ce document ?" -#: forms_common.py:355 models.py:897 models.py:903 +#: forms_common.py:355 models.py:964 models.py:970  msgid "Author type"  msgstr "Type d'auteur" @@ -281,7 +280,7 @@ msgstr "Sélection d'auteur"  msgid "There are identical authors."  msgstr "Il y a des auteurs identiques." -#: forms_common.py:389 models.py:907 models.py:926 +#: forms_common.py:389 models.py:974 models.py:993  #: templates/sheet_ope.html:106  #: templates/ishtar/blocks/window_tables/documents.html:7  msgid "Authors" @@ -303,7 +302,7 @@ msgstr "Modification"  msgid "Delete"  msgstr "Supprimer" -#: ishtar_menu.py:57 views.py:119 +#: ishtar_menu.py:57 views.py:121  msgid "Account management"  msgstr "Gestion des comptes" @@ -319,7 +318,7 @@ msgstr "Un élément sélectionné n'est pas valide."  msgid "This item already exist."  msgstr "Cet élément existe déjà." -#: models.py:202 models.py:548 models.py:704 +#: models.py:202 models.py:548 models.py:771  msgid "Label"  msgstr "Libellé" @@ -331,7 +330,7 @@ msgstr "Identifiant textuel"  msgid "Comment"  msgstr "Commentaire" -#: models.py:206 models.py:675 +#: models.py:206 models.py:742  msgid "Available"  msgstr "Disponible" @@ -359,161 +358,154 @@ msgstr "Ordre"  msgid "Wizard step"  msgstr "Étape de l'assistant" -#: models.py:596 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83 -#: templates/ishtar/sheet_person.html:39 templates/ishtar/sheet_person.html:68 -#: templates/ishtar/sheet_person.html:93 -#: templates/ishtar/dashboards/dashboard_main_detail.html:94 -msgid "Year" -msgstr "Année" +#: models.py:643 models.py:674 +msgid "Total" +msgstr "Total" -#: models.py:599 models.py:608 models.py:705 -#: templates/ishtar/dashboards/dashboard_main_detail.html:105 +#: models.py:650 models.py:772 +#: templates/ishtar/dashboards/dashboard_main_detail.html:135  #: templates/ishtar/dashboards/dashboard_main_detail_users.html:26  msgid "Number"  msgstr "Nombre" -#: models.py:607 templates/ishtar/dashboards/dashboard_main_detail.html:100 -msgid "Month" -msgstr "Mois" - -#: models.py:670 +#: models.py:737  msgid "Administrative Act"  msgstr "Acte administratif" -#: models.py:673 +#: models.py:740  msgid "Associated object"  msgstr "Objet associé" -#: models.py:678 +#: models.py:745  msgid "Document template"  msgstr "Patron de document" -#: models.py:679 +#: models.py:746  msgid "Document templates"  msgstr "Patrons de documents" -#: models.py:708 +#: models.py:775  msgid "Department"  msgstr "Département" -#: models.py:709 +#: models.py:776  msgid "Departments"  msgstr "Départements" -#: models.py:736 +#: models.py:803  msgid "Organization types"  msgstr "Types d'organisation" -#: models.py:747 +#: models.py:814  msgid "Organizations"  msgstr "Organisations" -#: models.py:749 +#: models.py:816  msgid "Can view all Organization"  msgstr "Peut voir toutes les Organisations" -#: models.py:750 +#: models.py:817  msgid "Can view own Organization"  msgstr "Peut voir sa propre Organisation" -#: models.py:751 +#: models.py:818  msgid "Can add own Organization"  msgstr "Peut ajouter sa propre Organisation" -#: models.py:752 +#: models.py:819  msgid "Can change own Organization"  msgstr "Peut changer sa propre Organisation" -#: models.py:753 +#: models.py:820  msgid "Can delete own Organization"  msgstr "Peut supprimer sa propre Organisation" -#: models.py:768 +#: models.py:835  msgid "Groups"  msgstr "Groupes" -#: models.py:772 +#: models.py:839  msgid "Person types"  msgstr "Types d'individu" -#: models.py:777 +#: models.py:844  msgid "Mr"  msgstr "M." -#: models.py:778 +#: models.py:845  msgid "Miss"  msgstr "Mlle" -#: models.py:779 +#: models.py:846  msgid "Mrs"  msgstr "Mme" -#: models.py:780 +#: models.py:847  msgid "Doctor"  msgstr "Dr." -#: models.py:788 models.py:823 +#: models.py:855 models.py:890  msgid "Types"  msgstr "Types" -#: models.py:791 +#: models.py:858  msgid "Is attached to"  msgstr "Est rattaché à" -#: models.py:795 +#: models.py:862  msgid "Persons"  msgstr "Individus" -#: models.py:797 +#: models.py:864  msgid "Can view all Person"  msgstr "Peut voir toutes les Personnes" -#: models.py:798 +#: models.py:865  msgid "Can view own Person"  msgstr "Peut voir sa propre Personne" -#: models.py:799 +#: models.py:866  msgid "Can add own Person"  msgstr "Peut ajouter sa propre Personne" -#: models.py:800 +#: models.py:867  msgid "Can change own Person"  msgstr "Peut changer sa propre Personne" -#: models.py:801 +#: models.py:868  msgid "Can delete own Person"  msgstr "Peut supprimer sa propre Personne" -#: models.py:865 +#: models.py:932  msgid "Ishtar user"  msgstr "Utilisateur d'Ishtar" -#: models.py:866 +#: models.py:933  msgid "Ishtar users"  msgstr "Utilisateurs d'Ishtar" -#: models.py:898 +#: models.py:965  msgid "Author types"  msgstr "Types d'auteur" -#: models.py:921 +#: models.py:988  msgid "Source types"  msgstr "Types de source" -#: models.py:934 templates/ishtar/sheet_person.html:40 +#: models.py:1001 templates/ishtar/sheet_person.html:40  #: templates/ishtar/sheet_person.html:67  msgid "Ref."  msgstr "Réf." -#: models.py:936 +#: models.py:1003  msgid "Internal reference"  msgstr "Référence interne" -#: models.py:963 +#: models.py:1030  msgid "Surface (m²)"  msgstr "Area (m²)" -#: models.py:964 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107 +#: models.py:1031 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107  msgid "Localisation"  msgstr "Localisation" @@ -521,78 +513,78 @@ msgstr "Localisation"  msgid " (...)"  msgstr " (...)" -#: views.py:79 +#: views.py:81  msgid "New person"  msgstr "Nouvelle personne" -#: views.py:87 +#: views.py:89  msgid "Person modification"  msgstr "Modification d'une personne" -#: views.py:93 +#: views.py:95  msgid "Person deletion"  msgstr "Suppresion de personne" -#: views.py:99 +#: views.py:101  msgid "New organization"  msgstr "Nouvelle organisation" -#: views.py:106 +#: views.py:108  msgid "Organization modification"  msgstr "Modification d'une organisation" -#: views.py:112 +#: views.py:114  msgid "Organization deletion"  msgstr "Suppresion d'une organisation" -#: views.py:209 +#: views.py:211  msgid "True"  msgstr "Oui" -#: views.py:211 +#: views.py:213  msgid "False"  msgstr "Non" -#: views.py:434 templates/base.html:75 +#: views.py:436 templates/base.html:75  #: templates/ishtar/sheet_organization.html:35  #: templates/ishtar/sheet_person.html:57 templates/ishtar/sheet_person.html:83  msgid "Details"  msgstr "Détails" -#: views.py:644 views.py:691 +#: views.py:646 views.py:693  msgid "Operation not permitted."  msgstr "Opération non permise" -#: views.py:646 +#: views.py:648  #, python-format  msgid "New %s"  msgstr "Nouveau %s" -#: views.py:708 views.py:746 +#: views.py:710 views.py:766  msgid "Archaeological files"  msgstr "Dossiers archéologiques" -#: views.py:709 views.py:750 +#: views.py:711 views.py:770  msgid "Operations"  msgstr "Opérations" -#: views.py:711 views.py:755 +#: views.py:713 views.py:775  msgid "Context records"  msgstr "Unité d'Enregistrement" -#: views.py:713 views.py:760 +#: views.py:715 views.py:780  msgid "Finds"  msgstr "Mobilier" -#: widgets.py:322 +#: widgets.py:326  msgid "No results"  msgstr "Pas de résultats" -#: widgets.py:323 +#: widgets.py:327  msgid "Loading..."  msgstr "Chargement..." -#: widgets.py:324 +#: widgets.py:328  msgid "Remove"  msgstr "Enlever" @@ -848,6 +840,13 @@ msgstr "Parcelles associées"  msgid "Commune"  msgstr "Commune" +#: templates/sheet_ope.html:61 templates/sheet_ope.html.py:83 +#: templates/ishtar/sheet_person.html:39 templates/ishtar/sheet_person.html:68 +#: templates/ishtar/sheet_person.html:93 +#: templates/ishtar/dashboards/dashboard_main_detail.html:120 +msgid "Year" +msgstr "Année" +  #: templates/sheet_ope.html:62  msgid "Section"  msgstr "Section" @@ -1038,7 +1037,7 @@ msgstr "Pas de document associé à cette personne"  msgid "Related to"  msgstr "Associé à" -#: templates/ishtar/dashboards/dashboard_main.html:23 +#: templates/ishtar/dashboards/dashboard_main.html:26  msgid "Users"  msgstr "Utilisateurs" @@ -1046,72 +1045,88 @@ msgstr "Utilisateurs"  msgid "Numbers"  msgstr "Nombre" -#: templates/ishtar/dashboards/dashboard_main_detail.html:6 +#: templates/ishtar/dashboards/dashboard_main_detail.html:12 +msgid "Change" +msgstr "Modifier" + +#: templates/ishtar/dashboards/dashboard_main_detail.html:16  msgid "Total:"  msgstr "Total :" -#: templates/ishtar/dashboards/dashboard_main_detail.html:15 -msgid "Change" -msgstr "Modifier" +#: templates/ishtar/dashboards/dashboard_main_detail.html:19 +msgid "Draw rectangle on the graph to zoom. Double-click to reinitialize." +msgstr "Dessiner un rectangle sur le graphique pour zoomer. Double-cliquer pour réinitialiser." -#: templates/ishtar/dashboards/dashboard_main_detail.html:31 +#: templates/ishtar/dashboards/dashboard_main_detail.html:21 +msgid "Display as an image" +msgstr "Afficher comme une image" + +#: templates/ishtar/dashboards/dashboard_main_detail.html:24 +msgid "Right-click on this image to save it." +msgstr "Click droit sur l'image pour l'enregistrer." + +#: templates/ishtar/dashboards/dashboard_main_detail.html:39  msgid "By years"  msgstr "Par années" -#: templates/ishtar/dashboards/dashboard_main_detail.html:33 -#: templates/ishtar/dashboards/dashboard_main_detail.html:43 +#: templates/ishtar/dashboards/dashboard_main_detail.html:41 +#: templates/ishtar/dashboards/dashboard_main_detail.html:51  msgid "Average:"  msgstr "Moyenne :" -#: templates/ishtar/dashboards/dashboard_main_detail.html:34 -#: templates/ishtar/dashboards/dashboard_main_detail.html:44 +#: templates/ishtar/dashboards/dashboard_main_detail.html:42 +#: templates/ishtar/dashboards/dashboard_main_detail.html:52  msgid "Variance:"  msgstr "Variance :" -#: templates/ishtar/dashboards/dashboard_main_detail.html:35 -#: templates/ishtar/dashboards/dashboard_main_detail.html:45 +#: templates/ishtar/dashboards/dashboard_main_detail.html:43 +#: templates/ishtar/dashboards/dashboard_main_detail.html:53  msgid "Standard deviation:"  msgstr "Écart-type :" -#: templates/ishtar/dashboards/dashboard_main_detail.html:36 -#: templates/ishtar/dashboards/dashboard_main_detail.html:46 +#: templates/ishtar/dashboards/dashboard_main_detail.html:44 +#: templates/ishtar/dashboards/dashboard_main_detail.html:54  msgid "Median:"  msgstr "Médiane :" -#: templates/ishtar/dashboards/dashboard_main_detail.html:37 -#: templates/ishtar/dashboards/dashboard_main_detail.html:47 +#: templates/ishtar/dashboards/dashboard_main_detail.html:45 +#: templates/ishtar/dashboards/dashboard_main_detail.html:55  msgid "Mode:"  msgstr "Mode :" -#: templates/ishtar/dashboards/dashboard_main_detail.html:41 +#: templates/ishtar/dashboards/dashboard_main_detail.html:49  msgid "By operations"  msgstr "Par opérations" -#: templates/ishtar/dashboards/dashboard_main_detail.html:50 +#: templates/ishtar/dashboards/dashboard_main_detail.html:58  msgid "Created last"  msgstr "Derniers créés" -#: templates/ishtar/dashboards/dashboard_main_detail.html:53 +#: templates/ishtar/dashboards/dashboard_main_detail.html:61  msgid "Created"  msgstr "Créé" -#: templates/ishtar/dashboards/dashboard_main_detail.html:57 -#: templates/ishtar/dashboards/dashboard_main_detail.html:68 +#: templates/ishtar/dashboards/dashboard_main_detail.html:65 +#: templates/ishtar/dashboards/dashboard_main_detail.html:76  msgid "Show"  msgstr "Voir" -#: templates/ishtar/dashboards/dashboard_main_detail.html:61 +#: templates/ishtar/dashboards/dashboard_main_detail.html:69  msgid "Recent changes"  msgstr "Derniers changés" -#: templates/ishtar/dashboards/dashboard_main_detail.html:64 +#: templates/ishtar/dashboards/dashboard_main_detail.html:72  msgid "Modified"  msgstr "Modifier" -#: templates/ishtar/dashboards/dashboard_main_detail.html:116 +#: templates/ishtar/dashboards/dashboard_main_detail.html:108  msgid "No data for theses criteria."  msgstr "Pas de données pour ces critères." +#: templates/ishtar/dashboards/dashboard_main_detail.html:126 +msgid "Month" +msgstr "Mois" +  #: templates/ishtar/dashboards/dashboard_main_detail_users.html:26  msgid "User type"  msgstr "Type d'utilisateur" @@ -1294,7 +1309,7 @@ msgstr "La création du compte a échouée"  #: templates/registration/activation_complete.html:7  msgid "You may now login with your username and password." -msgstr +msgstr ""  "Vous pouvez maintenant vous identifier avec votre identifiant et votre mot "  "de passe" diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 98f4addb7..3df557806 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -25,6 +25,7 @@ import datetime  from PIL import Image  import os  import tempfile +import copy  from django.conf import settings  from django.core.exceptions import ObjectDoesNotExist, ValidationError @@ -560,11 +561,53 @@ class UserDashboard:          self.types = types.annotate(number=Count('pk'))\                            .order_by('person__person_types') +class DashboardFormItem(object): +    @classmethod +    def get_periods(cls, slice='month', fltr={}, date_source='creation'): +        date_var = date_source + '_date' +        q = cls.objects.filter(**{date_var+'__isnull':False}) +        if fltr: +            q = q.filter(**fltr) +        if slice == 'year': +            return [res[date_var].year for res in list(q.values(date_var +                                ).annotate(Count("id")).order_by())] +        elif slice == 'month': +            return [(res[date_var].year, res[date_var].month) +                               for res in list(q.values(date_var +                                ).annotate(Count("id")).order_by())] +        return [] + +    @classmethod +    def get_by_year(cls, year, fltr={}, date_source='creation'): +        date_var = date_source + '_date' +        q = cls.objects.filter(**{date_var+'__isnull':False}) +        if fltr: +            q = q.filter(**fltr) +        return q.filter(**{date_var+'__year':year}).distinct('pk') + +    @classmethod +    def get_by_month(cls, year, month, fltr={}, date_source='creation'): +        date_var = date_source + '_date' +        q = cls.objects.filter(**{date_var+'__isnull':False}) +        if fltr: +            q = q.filter(**fltr) +        q = q.filter(**{date_var+'__year':year, date_var+'__month':month}) +        return q.distinct('pk') + +    @classmethod +    def get_total_number(cls, fltr={}): +        q = cls.objects +        if fltr: +            q = q.filter(**fltr) +        return q.distinct('pk').count() +  class Dashboard: -    def __init__(self, model, slice='year', date_source=None, fltr={}): +    def __init__(self, model, slice='year', date_source=None, show_detail=None, +                 fltr={}):          # don't provide date_source if it is not relevant          self.model = model          self.total_number = model.get_total_number(fltr) +        self.show_detail = show_detail          history_model = self.model.history.model          # last edited - created          self.recents, self.lasts = [], [] @@ -587,31 +630,50 @@ class Dashboard:                  obj.history_date = idx['hd']                  last_lst.append(obj)          # years -        base_kwargs = {'fltr':fltr} +        base_kwargs = {'fltr':fltr.copy()}          if date_source:              base_kwargs['date_source'] = date_source -        periods_kwargs = base_kwargs.copy() +        periods_kwargs = copy.deepcopy(base_kwargs)          periods_kwargs['slice'] = slice          self.periods = model.get_periods(**periods_kwargs)          self.periods = list(set(self.periods))          self.periods.sort()          if not self.total_number or not self.periods:              return +        kwargs_num = copy.deepcopy(base_kwargs) +        self.serie_labels = [_(u"Total")]          # numbers          if slice == 'year': -            self.values = [('year', _(u"Year"), reversed(self.periods))] -            self.numbers = [model.get_by_year(year, **base_kwargs).count() +            self.values = [('year', "", +                           list(reversed(self.periods)))] +            self.numbers = [model.get_by_year(year, **kwargs_num).count()                              for year in self.periods] -            self.values += [('number', _(u"Number"), reversed(self.numbers))] +            self.values += [('number', _(u"Number"), +                            list(reversed(self.numbers)))]          if slice == 'month': -            self.numbers = [model.get_by_month(*period, **base_kwargs).count() -                            for period in self.periods] -            periods = reversed(self.periods) -            self.periods = ["%d-%s-01" % (period[0], ('0'+str(period[1])) -                    if len(str(period[1])) == 1 else period[1]) -                            for period in periods] -            self.values = [('month', _(u"Month"), self.periods)] -            self.values += [('number', _(u"Number"), reversed(self.numbers))] +            periods = list(reversed(self.periods)) +            self.periods = ["%d-%s-01" % (p[0], ('0'+str(p[1])) +                    if len(str(p[1])) == 1 else p[1]) +                            for p in periods] +            self.values = [('month', "", self.periods)] +            if show_detail: +                for dpt in settings.ISHTAR_DPTS: +                    self.serie_labels.append(unicode(dpt)) +                    idx = 'number_' + unicode(dpt) +                    kwargs_num['fltr']["towns__numero_insee__startswith"] = \ +                                                                 unicode(dpt) +                    numbers = [model.get_by_month(*p.split('-')[:2], +                                                  **kwargs_num).count() +                                for p in self.periods] +                    self.values += [(idx, dpt, list(numbers))] +                # put "Total" at the end +                self.serie_labels.append(self.serie_labels.pop(0)) +            kwargs_num = base_kwargs.copy() +            self.numbers = [model.get_by_month(*p.split('-')[:2], +                                               **kwargs_num).count() +                            for p in self.periods] +            self.values += [('number', _(u"Total"), +                            list(self.numbers))]          # calculate          self.average = self.get_average()          self.variance = self.get_variance() diff --git a/ishtar_common/static/media/style.css b/ishtar_common/static/media/style.css index 341308926..3c2c429b1 100644 --- a/ishtar_common/static/media/style.css +++ b/ishtar_common/static/media/style.css @@ -560,6 +560,7 @@ table.confirm tr.spacer td:last-child{  .ui-tabs .ui-tabs-nav li.ui-tabs-active a{      background-color:#fff; +    color:#666;  }  .sheet{ @@ -669,6 +670,13 @@ table.confirm tr.spacer td:last-child{      padding:0.5em 1em;  } +.chart-img{ +    display:none; +} + +.chart-img-form{ +    margin-top:1em; +}  #window table th, .dashboard table.resume th{      background-color:#922; @@ -783,8 +791,7 @@ table.confirm tr.spacer td:last-child{      margin:0.3em;  } -p.alert{ -    color:#D14; +p.info-box, p.alert{      display:block;      font-style:italic;      width:670px; @@ -794,6 +801,11 @@ p.alert{      -moz-border-radius:8px;      -webkit-border-radius:8px;      border-radius:8px; +    font-size: 0.9em; +} + +p.alert{ +    color:#D14;      background-image:url(images/red_flag.png);      background-repeat:no-repeat;      background-position:left center; diff --git a/ishtar_common/templates/ishtar/dashboards/dashboard_main.html b/ishtar_common/templates/ishtar/dashboards/dashboard_main.html index 8822875b5..868f8a5c3 100644 --- a/ishtar_common/templates/ishtar/dashboards/dashboard_main.html +++ b/ishtar_common/templates/ishtar/dashboards/dashboard_main.html @@ -6,9 +6,12 @@  <script language="javascript" type="text/javascript" src="{{STATIC_URL}}js/jqplot/jquery.jqplot.min.js"></script>  <script language="javascript" type="text/javascript" src="{{STATIC_URL}}js/jqplot/plugins/jqplot.canvasTextRenderer.min.js"></script>  <script language="javascript" type="text/javascript" src="{{STATIC_URL}}js/jqplot/plugins/jqplot.canvasAxisLabelRenderer.min.js"></script> +<script language="javascript" type="text/javascript" src="{{STATIC_URL}}js/jqplot/plugins/jqplot.canvasAxisTickRenderer.min.js"></script>  <script language="javascript" type="text/javascript" src="{{STATIC_URL}}js/jqplot/plugins/jqplot.highlighter.min.js"></script>  <script language="javascript" type="text/javascript" src="{{STATIC_URL}}js/jqplot/plugins/jqplot.pieRenderer.min.js"></script>  <script language="javascript" type="text/javascript" src="{{STATIC_URL}}js/jqplot/plugins/jqplot.dateAxisRenderer.min.js"></script> +<script language="javascript" type="text/javascript" src="{{STATIC_URL}}js/jqplot/plugins/jqplot.cursor.min.js"></script> +<script language="javascript" type="text/javascript" src="{{STATIC_URL}}js/jqplot/plugins/jqplot.cursor.min.js"></script>  <link rel="stylesheet" href="{{STATIC_URL}}js/jqplot/jquery.jqplot.min.css" />  {% endblock %}  {% block content %} diff --git a/ishtar_common/templates/ishtar/dashboards/dashboard_main_detail.html b/ishtar_common/templates/ishtar/dashboards/dashboard_main_detail.html index 610457ae3..87ce5c528 100644 --- a/ishtar_common/templates/ishtar/dashboards/dashboard_main_detail.html +++ b/ishtar_common/templates/ishtar/dashboards/dashboard_main_detail.html @@ -1,11 +1,8 @@ -{% load i18n %} +{% load i18n date_formating %}  {% load url from future %}  <div class='dashboard' id="{{unique_id}}-tab">    <div>      <h4>{% trans "Numbers" %}</h4> -    <p><strong>{% trans "Total:" %}</strong> {{dashboard.total_number}}</p> -    <div class='table'> -    <div id="chart_{{unique_id}}" style="height:400px; width:700px;"></div>      {% if form %}      <div class='form'>      <form method='post' action="{% url 'dashboard-main-detail' item_name %}" id='{{unique_id}}_form'> @@ -16,15 +13,27 @@      </form>      </div>      {% endif %} -    {% comment %} -    <table> +    <p><strong>{% trans "Total:" %}</strong> {{dashboard.total_number}}</p> +    <div class='table'> +    <div id="chart_{{unique_id}}" style="height:400px; width:700px;"></div> +    <p class='info-box'>{% trans 'Draw rectangle on the graph to zoom. Double-click to reinitialize.' %}</p> +    <div class='form chart-img-form'> +      <button id="chart_img_display_{{unique_id}}" class='submit'>{% trans "Display as an image" %}</button> +      <div id="chart_img_{{unique_id}}" class='chart-img'> +        <div id="img_{{unique_id}}"></div> +        <p class='info-box'>{% trans 'Right-click on this image to save it.' %}</p> +      </div> +    </div> +    </div> +    <div class='table'> +    <table class='resume'>      {% for idx, lbl, values in dashboard.values %}        <tr class='idx {% if forloop.counter0|divisibleby:"2" %}even{%else%}odd{%endif%}'>        <th>{{lbl}}</th> -      {% for value in values %}<td>{{value}}</td>{% endfor%} +      {% for value in values reversed %}{% if forloop.parentloop.counter0 %}<td>{% else %}<th>{%endif%}{{value|date_formating }}{% if forloop.parentloop.counter0 %}</td>{% else %}</th>{%endif%}{% endfor%}        </tr>      {% endfor%} -    </table>{% endcomment %} +    </table>      </div>      {% if dashboard.periods %}      <h4>{% trans "By years" %}</h4> @@ -71,23 +80,41 @@    </div>  <script language="javascript" type="text/javascript">  $(document).ready(function(){ -var values_{{unique_id}} = []; +{% for idx, lbl, values in dashboard.values %} {% if forloop.counter0 > 0 %} var values_{{forloop.counter0}}_{{unique_id}} = []; {% for idx, lbl, values in dashboard.values %} {% for value in values %} {% if forloop.parentloop.counter0 == 0 %} values_{{forloop.parentloop.parentloop.counter0}}_{{unique_id}}.push([{{VALUE_QUOTE|safe}}{{value}}{{VALUE_QUOTE|safe}}, 0]); {% elif forloop.parentloop.parentloop.counter0 == forloop.parentloop.counter0 %} values_{{forloop.parentloop.parentloop.counter0}}_{{unique_id}}[{{forloop.counter0}}][1] = {{value}}; {% endif %} {% endfor%} {% endfor%} {% endif %} {% endfor %} -{% for idx, lbl, values in dashboard.values %} {% for value in values %}{% ifequal forloop.parentloop.counter0 0 %} -values_{{unique_id}}.push([{{VALUE_QUOTE|safe}}{{value}}{{VALUE_QUOTE|safe}}, 0]); -{% else %}values_{{unique_id}}[{{forloop.counter0}}][1] = {{value}};{% endifequal %}{% endfor%}{% endfor%} +{% comment %} +# less compact version +{% for idx, lbl, values in dashboard.values %} +  {% if forloop.counter0 > 0 %} +    {% for idx, lbl, values in dashboard.values %} +      {% for value in values %} +        {% if forloop.parentloop.counter0 == 0 %} +          values_{{forloop.parentloop.counter0}}_{{unique_id}}.push([{{VALUE_QUOTE|safe}}{{value}}{{VALUE_QUOTE|safe}}, 0]); +        {% elif forloop.parentloop.counter0 == forloop.counter0 %} +           values_{{forloop.counter0}}_{{unique_id}}[{{forloop.counter0}}][1] = {{value}}; +        {% endif %} +      {% endfor%} +    {% endfor%} +  {% endif %} +{% endfor %} +{% endcomment %} + + +if (typeof values_1_{{unique_id}} === 'undefined' +    || values_1_{{unique_id}}.length == 0){ -if (values_{{unique_id}}.length > 0){ +$('#chart_img_{{unique_id}}').hide(); +$('#chart_{{unique_id}}').html("<p class='alert'>{% trans 'No data for theses criteria.' %}</p>"); +} else {  var showmarker = false; -if (values_{{unique_id}}.length < 25){ +if (values_1_{{unique_id}}.length < 25){      var showmarker = true;  }  var plot_{{unique_id}} = $.jqplot('chart_{{unique_id}}', -    [values_{{unique_id}}], { -      series:[{showMarker:showmarker}], +    [{% for idx, lbl, values in dashboard.values %}{% if forloop.counter0 > 0 %} {% if forloop.counter0 > 1 %}, {% endif%} values_{{forloop.counter0}}_{{unique_id}} {% endif %} {% endfor%}], {        axes:{ {%ifequal slicing 'year'%}          xaxis:{            label:'{% trans "Year" %}', @@ -98,7 +125,11 @@ var plot_{{unique_id}} = $.jqplot('chart_{{unique_id}}',          xaxis:{            label:'{% trans "Month" %}',            renderer:$.jqplot.DateAxisRenderer, -          tickOptions:{formatString:'%b %Y'}, +          tickRenderer:$.jqplot.CanvasAxisTickRenderer, +          tickOptions:{ +            formatString:'%b %Y', +            angle:-25 +          }          },{%endifequal%}          yaxis:{            label:'{% trans "Number"%}', @@ -108,11 +139,28 @@ var plot_{{unique_id}} = $.jqplot('chart_{{unique_id}}',        highlighter: {          show: true,          sizeAdjust: 7.5 -      } +      }, +      series:[{% for label in dashboard.serie_labels %} +        {%if forloop.counter0%}, {% endif %}{label:"{{label}}", showmarker:showmarker}{% endfor %} +      ], +      cursor:{ +        show: true, +        zoom:true, +        showTooltip:false +      }, +      legend: { show:true, location: 'nw' } +  }); + +  $('#chart_img_display_{{unique_id}}').click(function(){ +    $('#chart_img_{{unique_id}}').hide(); +    $('#img_{{unique_id}}').html( +      $('<img/>').attr( +             'src', $('#chart_{{unique_id}}').jqplotToImageStr({}) +      ) +    ); +    $('#chart_img_{{unique_id}}').show('slow');    }); -} else { -$('#chart_{{unique_id}}').html("<p class='alert'>{% trans 'No data for theses criteria.' %}</p");  }  $('#search_{{unique_id}}').click(function (){ @@ -124,9 +172,9 @@ $('#search_{{unique_id}}').click(function (){      return false;  }); -{% ifequal item_name 'files' %} -load_jquerydate_after(); -load_jquerydate_before(); -{% endifequal %} +{% if item_name == 'files' or item_name == "operations"%} +load_jquerydate_{{item_name}}_after(); +load_jquerydate_{{item_name}}_before(); +{% endif %}  });  </script> diff --git a/ishtar_common/templatetags/date_formating.py b/ishtar_common/templatetags/date_formating.py new file mode 100644 index 000000000..eb81cf52c --- /dev/null +++ b/ishtar_common/templatetags/date_formating.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from datetime import datetime + +from django.template import Library +from django.utils.translation import ugettext as _ + +register = Library() + +@register.filter +def date_formating(value): +    try: +        d = datetime.strptime(unicode(value), '%Y-%m-%d') +        return _(d.strftime("%B")).capitalize() + u" %d" % d.year +    except ValueError: +        # could be passed to non date value: on error return value +        return value + diff --git a/ishtar_common/views.py b/ishtar_common/views.py index d20b8b2af..889bd3893 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -50,6 +50,8 @@ if settings.XHTML2ODT_PATH:  from menus import menu +from archaeological_operations.forms import DashboardForm as DashboardFormOpe +  from ishtar_common.forms import FinalForm, FinalDeleteForm  from ishtar_common import forms_common as forms  from ishtar_common import wizards @@ -720,6 +722,8 @@ if 'archaeological_files' in settings.INSTALLED_APPS:      from archaeological_files.forms import DashboardForm as DashboardFormFile      DASHBOARD_FORMS['files'] = DashboardFormFile +DASHBOARD_FORMS['operations'] = DashboardFormOpe +  def dashboard_main_detail(request, item_name):      """      Specific tab of the main dashboard @@ -730,7 +734,11 @@ def dashboard_main_detail(request, item_name):                      'ishtar/dashboards/dashboard_main_detail_users.html',                              dct, context_instance=RequestContext(request))      form = None -    slicing, date_source, fltr  = 'year', None, {} +    slicing, date_source, fltr, show_detail  = 'year', None, {}, False +    if (item_name == 'files' and \ +      'archaeological_files' in settings.INSTALLED_APPS) \ +      or item_name == 'operations': +        slicing = 'month'      if item_name in DASHBOARD_FORMS:          if request.method == 'POST':              form = DASHBOARD_FORMS[item_name](request.POST) @@ -739,22 +747,28 @@ def dashboard_main_detail(request, item_name):                  fltr = form.get_filter()                  if hasattr(form, 'get_date_source'):                      date_source = form.get_date_source() +                if hasattr(form, 'get_show_detail'): +                    show_detail = form.get_show_detail()          else:              form = DASHBOARD_FORMS[item_name]()      lbl, dashboard = None, None -    if item_name == 'files' and \ -      'archaeological_files' in settings.INSTALLED_APPS: -        from archaeological_files.models import File -        dashboard_kwargs = {'slice':slicing, 'fltr':fltr,} +    if (item_name == 'files' and \ +      'archaeological_files' in settings.INSTALLED_APPS) \ +      or item_name == 'operations': +        dashboard_kwargs = {'slice':slicing, 'fltr':fltr, +                            'show_detail':show_detail}          # date_source is only relevant when the form has set one          if date_source:              dashboard_kwargs['date_source'] = date_source +    if item_name == 'files' and \ +      'archaeological_files' in settings.INSTALLED_APPS: +        from archaeological_files.models import File          lbl, dashboard = (_(u"Archaeological files"),                            models.Dashboard(File, **dashboard_kwargs))      if item_name == 'operations':          from archaeological_operations.models import Operation -        lbl, dashboard = (_(u"Operations"), models.Dashboard(Operation, -                                                    slice=slicing, fltr=fltr)) +        lbl, dashboard = (_(u"Operations"), +                          models.Dashboard(Operation, **dashboard_kwargs))      if item_name == 'contextrecords' and \        'archaeological_context_records' in settings.INSTALLED_APPS:          from archaeological_context_records.models import ContextRecord diff --git a/requirements.txt b/requirements.txt index f2997ef25..478800dc5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,7 +5,7 @@ django==1.4  south>=0.7.3,<0.7.99  pillow  pisa==3.0.33 -reportlab +reportlab==2.5  dbf  python-memcached  | 
