diff options
-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)) + |