diff options
| author | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-01-18 08:01:35 +0100 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-01-18 08:01:35 +0100 | 
| commit | 719b312b643ba25de557641976f2bbea6900700a (patch) | |
| tree | 8ea0e9e0422008774054b770296bc7bb95cb0186 | |
| parent | d495ba7ab764049912147129fb70240ef0f1c00d (diff) | |
| download | Ishtar-719b312b643ba25de557641976f2bbea6900700a.tar.bz2 Ishtar-719b312b643ba25de557641976f2bbea6900700a.zip | |
Manage administrative acts (refs #16)
| -rw-r--r-- | ishtar/furnitures/forms.py | 194 | ||||
| -rw-r--r-- | ishtar/furnitures/menus.py | 11 | ||||
| -rw-r--r-- | ishtar/furnitures/models.py | 8 | ||||
| -rw-r--r-- | ishtar/furnitures/urls.py | 9 | ||||
| -rw-r--r-- | ishtar/furnitures/views.py | 1 | 
5 files changed, 187 insertions, 36 deletions
| diff --git a/ishtar/furnitures/forms.py b/ishtar/furnitures/forms.py index caab07e8c..02fa838f0 100644 --- a/ishtar/furnitures/forms.py +++ b/ishtar/furnitures/forms.py @@ -699,7 +699,8 @@ class FileFormAddress(forms.Form):                             validators=[validators.MinValueValidator(0),                                         validators.MaxValueValidator(999999999)])      address = forms.CharField(label=_(u"Main address"), widget=forms.Textarea) -    address_complement = forms.CharField(label=_(u"Main address - complement")) +    address_complement = forms.CharField(label=_(u"Main address - complement"), +                                         required=False)      postal_code = forms.CharField(label=_(u"Main address - postal code"),                                    max_length=10) @@ -844,6 +845,138 @@ file_modification_wizard = FileWizard([                              },                            url_name='file_modification',) +class FileClosingWizard(Wizard): +    model = models.File +    fields = ['year', 'numeric_reference', 'internal_reference', +              'file_type', 'in_charge', 'general_contractor', 'creation_date', +              'reception_date', 'total_surface', 'total_developed_surface', +              'address', 'address_complement', 'postal_code', 'comment'] +    if settings.COUNTRY == 'fr': +        fields += ['saisine_type', 'reference_number'] +    fields += ['towns'] + +    def get_formated_datas(self, forms): +        datas = super(FileClosingWizard, self).get_formated_datas(forms) +        self.current_obj = None +        for form in forms: +            if not hasattr(form, "cleaned_data"): +                continue +            for key in form.cleaned_data: +                if key == 'pk': +                    model = form.associated_models['pk'] +                    self.current_obj = model.objects.get(pk=form.cleaned_data['pk']) +        if not self.current_obj: +            return datas +        res = {} +        for field in self.model._meta.fields + self.model._meta.many_to_many: +            if field.name not in self.fields: +                continue +            value = getattr(self.current_obj, field.name) +            if not value: +                continue +            if hasattr(value, 'all'): +                value = ", ".join([unicode(item) for item in value.all()]) +                if not value: +                    continue +            else: +                value = unicode(value) +            res[field.name] = (field.verbose_name, value, '') +        for field in self.fields: +            if field in res: +                datas[0][1].append(res[field]) +        return datas + +class FileDeletionWizard(FileClosingWizard): +    def get_formated_datas(self, forms): +        datas = super(FileDeletionWizard, self).get_formated_datas(forms) +        datas.append((_("Associated operations"), [])) +        for operation in models.Operation.objects.filter( +                                        associated_file=self.current_obj).all(): +            if operation.end_date: +                datas[-1][1].append(('', unicode(operation))) +        return datas + +    def done(self, request, storage, form_list, **kwargs): +        obj = self.get_current_object(request, storage) +        for operation in models.Operation.objects.filter( +                                                   associated_file=obj).all(): +            operation.delete() +        obj.delete() +        return render_to_response('wizard_done.html', {}, +                                  context_instance=RequestContext(request)) + + +class FinalOperationDeleteForm(FinalForm): +    confirm_msg = " " +    confirm_end_msg = _(u"Would you like to delete this archaelogical file ?") + +file_deletion_wizard = FileDeletionWizard([ +                     ('selec-file_deletion', FileFormSelection), +                     ('final-file_deletion', FinalOperationDeleteForm)], +                      url_name='file_deletion',) +""" +file_closing_wizard = FileWizard([ +                     ('selec-file_closing', FileFormSelection), +                     ('date-operation_closing', OperationDateFormSelection), +                     ('final-operation_closing', FinalOperationClosingForm)], +                      url_name='operation_closing',) +""" + +class FileAdministrativeActWizard(FileWizard): +    def done(self, request, storage, form_list, **kwargs): +        ''' +        Save the administrative act +        ''' +        dct = {} +        for form in form_list: +            if not form.is_valid(): +                return self.render(request, storage, form) +            associated_models = hasattr(form, 'associated_models') and \ +                                form.associated_models or {} +            if type(form.cleaned_data) == dict: +                for key in form.cleaned_data: +                    if key == 'pk': +                        continue +                    value = form.cleaned_data[key] +                    if key in associated_models and value: +                        value = associated_models[key].objects.get(pk=value) +                    dct[key] = value +        associated_file = self.get_current_object(request, storage) +        if not associated_file: +            return self.render(request, storage, form) +        dct['associated_file'] = associated_file +        dct['history_modifier'] = request.user +        if 'pk_admact': +            pass +            #admact = models.AdministrativeAct.objects() +        else: +            admact = models.AdministrativeAct.objects(**dct) +            admact.save() +        res = render_to_response('wizard_done.html', {}, +                                  context_instance=RequestContext(request)) +        return res + +class AdministrativeActForm(forms.Form): +    form_label = _("Administrative act") +    act_type = forms.ChoiceField(label=_("Act type"), +                                  choices=models.ActType.get_types()) +    signatory = forms.IntegerField(label=_("Signatory"), +         widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-person'), +                                           associated_model=models.Person), +         validators=[models.valid_id(models.Person)]) +    act_object = forms.CharField(label=_(u"Object"), max_length=200, +                                 widget=forms.Textarea) +    signature_date = forms.DateField(label=_(u"Signature date"), +                                     widget=widgets.JQueryDate) +    if settings.COUNTRY == 'fr': +        ref_sra = forms.CharField(label=u"Référence SRA", max_length=15) + +file_administrativeact_wizard = FileAdministrativeActWizard([ +       ('selec-file_administrativeact', FileFormSelection), +       ('administrativeact-file_administrativeact', AdministrativeActForm), +       ('final-file_administrativeact', FinalForm)], +       url_name='file_administrativeact',) +  class OperationWizard(Wizard):      model = models.Operation @@ -1024,42 +1157,11 @@ class OperationDateFormSelection(forms.Form):      end_date = forms.DateField(label=_(u"Closing date"),                                 widget=widgets.JQueryDate) -class OperationClosingWizard(Wizard): +class OperationClosingWizard(FileClosingWizard):      model = models.Operation      fields = ['year', 'operation_code', 'operation_type', 'associated_file',             'in_charge', 'start_date', 'end_date', 'comment', 'towns', 'remains'] -    def get_formated_datas(self, forms): -        datas = super(OperationClosingWizard, self).get_formated_datas(forms) -        current_obj = None -        for form in forms: -            if not hasattr(form, "cleaned_data"): -                continue -            for key in form.cleaned_data: -                if key == 'pk': -                    model = form.associated_models['pk'] -                    current_obj = model.objects.get(pk=form.cleaned_data['pk']) -        if not current_obj: -            return datas -        res = {} -        for field in self.model._meta.fields + self.model._meta.many_to_many: -            if field.name not in self.fields: -                continue -            value = getattr(current_obj, field.name) -            if not value: -                continue -            if hasattr(value, 'all'): -                value = ", ".join([unicode(item) for item in value.all()]) -                if not value: -                    continue -            else: -                value = unicode(value) -            res[field.name] = (field.verbose_name, value, '') -        for field in self.fields: -            if field in res: -                datas[0][1].append(res[field]) -        return datas -  class FinalOperationClosingForm(FinalForm):      confirm_msg = " "      confirm_end_msg = _(u"Would you like to close this operation?") @@ -1069,3 +1171,29 @@ operation_closing_wizard = OperationClosingWizard([                       ('date-operation_closing', OperationDateFormSelection),                       ('final-operation_closing', FinalOperationClosingForm)],                        url_name='operation_closing',) + +class OperationDeletionWizard(OperationClosingWizard): +    def done(self, request, storage, form_list, **kwargs): +        obj = self.get_current_object(request, storage) +        obj.delete() +        return render_to_response('wizard_done.html', {}, +                                  context_instance=RequestContext(request)) + + +class OperationDeletionForm(FinalForm): +    confirm_msg = " " +    confirm_end_msg = _(u"Would you like to delete this operation?") + +operation_deletion_wizard = OperationDeletionWizard([ +                     ('selec-operation_deletion', OperationFormSelection), +                     ('final-operation_deletion', OperationDeletionForm)], +                      url_name='operation_deletion',) + +class OperationAdministrativeActWizard(FileAdministrativeActWizard): +    model = models.Operation + +operation_administrativeact_wizard = OperationAdministrativeActWizard([ +       ('selec-operation_administrativeact', OperationFormSelection), +       ('administrativeact-operation_administrativeact', AdministrativeActForm), +       ('final-operation_administrativeact', FinalForm)], +       url_name='operation_administrativeact',) diff --git a/ishtar/furnitures/menus.py b/ishtar/furnitures/menus.py index 0bd484806..fa65a735b 100644 --- a/ishtar/furnitures/menus.py +++ b/ishtar/furnitures/menus.py @@ -84,6 +84,10 @@ class Menu:                  MenuItem('file_deletion', _(u"File deletion"),                      model=models.File,                      access_controls=['delete_file', 'delete_own_file']), +                MenuItem('file_administrativeact', +                         _(u"Add an administrative act"), +                  model=models.Operation, +                  access_controls=['change_file', 'change_own_file']),              ]),          SectionItem('operation_management', _(u"Operation management"),              childs=[ @@ -96,6 +100,13 @@ class Menu:                  MenuItem('operation_closing', _(u"Operation closing"),                    model=models.Operation,                    access_controls=['change_operation', 'change_own_operation']), +                MenuItem('operation_deletion', _(u"Operation deletion"), +                  model=models.Operation, +                  access_controls=['change_operation', 'change_own_operation']), +                MenuItem('operation_administrativeact', +                         _(u"Add an administrative act"), +                  model=models.Operation, +                  access_controls=['change_operation', 'change_own_operation']),              ]),          ]          self.items = {} diff --git a/ishtar/furnitures/models.py b/ishtar/furnitures/models.py index f0e58bb9f..bc299e132 100644 --- a/ishtar/furnitures/models.py +++ b/ishtar/furnitures/models.py @@ -275,7 +275,7 @@ class File(BaseHistorizedItem, OwnPerms):                                    verbose_name=_(u"Person in charge"))      general_contractor = models.ForeignKey(Person, related_name='+',                 verbose_name=_(u"General contractor"), blank=True, null=True) -    is_active = models.BooleanField(_(u"Is active?")) +    is_active = models.BooleanField(_(u"Is active?"), default=True)      towns = models.ManyToManyField("Town")      creation_date = models.DateField(_(u"Creation date"),                                       default=datetime.datetime.now) @@ -319,7 +319,7 @@ class File(BaseHistorizedItem, OwnPerms):      @classmethod      def get_query_owns(cls, user): -        return Q(history_modifier=user) +        return Q(history_modifier=user) & Q(is_active=True)  class OperationType(GeneralType):      class Meta: @@ -333,7 +333,7 @@ class RemainType(GeneralType):  class Operation(BaseHistorizedItem, OwnPerms):      start_date = models.DateField(_(u"Start date"), null=True, blank=True) -    end_date = models.DateField(_(u"End date"), null=True, blank=True) +    end_date = models.DateField(_(u"Closing date"), null=True, blank=True)      in_charge = models.ForeignKey('Person', related_name='+',                                    verbose_name=_(u"In charge"))      year = models.IntegerField(_(u"Year")) @@ -593,6 +593,8 @@ related_name='+', verbose_name=_(u"Person in charge of the scientific part"))                      related_name='+', verbose_name=_(u"Signatory"))      operation = models.ForeignKey(Operation, blank=True, null=True,                      related_name='+', verbose_name=_(u"Operation")) +    associated_file = models.ForeignKey(File, blank=True, null=True, +                    related_name='+', verbose_name=_(u"Archaelogical file"))      signature_date = models.DateField(_(u"Signature date"))      act_object = models.CharField(_(u"Object"), max_length=200)      if settings.COUNTRY == 'fr': diff --git a/ishtar/furnitures/urls.py b/ishtar/furnitures/urls.py index 112e37a09..edbed6c0d 100644 --- a/ishtar/furnitures/urls.py +++ b/ishtar/furnitures/urls.py @@ -36,12 +36,21 @@ urlpatterns = patterns('',             ishtar_forms.file_creation_wizard, name='file_creation'),           url(BASE_URL + r'file_modification/(?P<step>.+)$',             ishtar_forms.file_modification_wizard, name='file_modification'), +         url(BASE_URL + r'file_deletion/(?P<step>.+)$', +           ishtar_forms.file_deletion_wizard, name='file_deletion'), +         url(BASE_URL + r'file_administrativeact/(?P<step>.+)$', +     ishtar_forms.file_administrativeact_wizard, name='file_administrativeact'),           url(BASE_URL + r'operation_creation/(?P<step>.+)$',             ishtar_forms.operation_creation_wizard, name='operation_creation'),           url(BASE_URL + r'operation_modification/(?P<step>.+)$',       ishtar_forms.operation_modification_wizard, name='operation_modification'),           url(BASE_URL + r'operation_closing/(?P<step>.+)$',       ishtar_forms.operation_closing_wizard, name='operation_closing'), +         url(BASE_URL + r'operation_deletion/(?P<step>.+)$', +     ishtar_forms.operation_deletion_wizard, name='operation_deletion'), +         url(BASE_URL + r'operation_administrativeact/(?P<step>.+)$', +     ishtar_forms.operation_administrativeact_wizard, +               name='operation_administrativeact'),           )  for section in menu.childs:      for menu_item in section.childs: diff --git a/ishtar/furnitures/views.py b/ishtar/furnitures/views.py index 5570dd2dd..f5bc8b5e4 100644 --- a/ishtar/furnitures/views.py +++ b/ishtar/furnitures/views.py @@ -174,3 +174,4 @@ def action(request, action_slug, obj_id=None, *args, **kwargs):                                                              **kwargs)      return render_to_response('index.html', dct,                                context_instance=RequestContext(request)) + | 
