summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ishtar/furnitures/forms.py194
-rw-r--r--ishtar/furnitures/menus.py11
-rw-r--r--ishtar/furnitures/models.py8
-rw-r--r--ishtar/furnitures/urls.py9
-rw-r--r--ishtar/furnitures/views.py1
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))
+