summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archaeological_files/models.py19
-rw-r--r--archaeological_operations/models.py41
-rw-r--r--archaeological_operations/tests.py25
-rw-r--r--archaeological_operations/views.py7
4 files changed, 64 insertions, 28 deletions
diff --git a/archaeological_files/models.py b/archaeological_files/models.py
index 9709824df..1cfbe35d3 100644
--- a/archaeological_files/models.py
+++ b/archaeological_files/models.py
@@ -33,7 +33,8 @@ from ishtar_common.models import GeneralType, BaseHistorizedItem, \
Dashboard, DashboardFormItem, IshtarUser, ValueGetter, ShortMenuItem, \
OperationType, get_external_id
-from archaeological_operations.models import get_values_town_related
+from archaeological_operations.models import get_values_town_related, \
+ ClosedItem
class FileType(GeneralType):
@@ -68,8 +69,8 @@ if settings.COUNTRY == 'fr':
ordering = ('label',)
-class File(BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem,
- DashboardFormItem):
+class File(ClosedItem, BaseHistorizedItem, OwnPerms, ValueGetter,
+ ShortMenuItem, DashboardFormItem):
TABLE_COLS = ['numeric_reference', 'year', 'internal_reference',
'file_type', 'saisine_type', 'towns', ]
year = models.IntegerField(_(u"Year"),
@@ -396,18 +397,6 @@ class File(BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem,
def town_list(self):
return u", ".join([unicode(tw) for tw in self.towns.all()])
- def closing(self):
- if self.is_active():
- return
- q = self.history
- if not q.count():
- return {'date': None, 'user': None}
- for item in q.all():
- if not item.end_date:
- break
- return {'date': item.history_date,
- 'user': IshtarUser.objects.get(pk=item.history_modifier_id)}
-
def total_surface_ha(self):
if self.total_surface:
return self.total_surface / 10000.0
diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py
index b82854f20..2db101104 100644
--- a/archaeological_operations/models.py
+++ b/archaeological_operations/models.py
@@ -137,8 +137,36 @@ QUALITY = (('ND', _(u"Not documented")),
('R', _(u"Reliable")),)
-class Operation(BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem,
- DashboardFormItem):
+class ClosedItem(object):
+ def closing(self):
+ if self.is_active():
+ return
+ in_history = False
+ date = self.end_date
+ # last action is closing?
+ for idx, item in enumerate(
+ self.history.order_by('-history_date').all()):
+ if not idx:
+ # last action
+ continue
+ if not item.end_date or item.end_date != self.end_date:
+ break
+ in_history = True
+ user = None
+ if in_history:
+ if item.history_modifier_id:
+ q = IshtarUser.objects.filter(pk=item.history_modifier_id)
+ if q.count():
+ user = q.all()[0]
+ elif self.history_modifier_id:
+ q = IshtarUser.objects.filter(pk=self.history_modifier_id)
+ if q.count():
+ user = q.all()[0]
+ return {'date': date, 'user': user}
+
+
+class Operation(ClosedItem, BaseHistorizedItem, OwnPerms, ValueGetter,
+ ShortMenuItem, DashboardFormItem):
QUALITY_DICT = dict(QUALITY)
SHOW_URL = 'show-operation'
TABLE_COLS = ['year_index', 'operation_type', 'remains', 'towns',
@@ -423,15 +451,6 @@ class Operation(BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem,
def is_active(self):
return not bool(self.end_date)
- def closing(self):
- if self.is_active():
- return
- for item in self.history.all():
- if not item.end_date:
- break
- return {'date': item.history_date,
- 'user': IshtarUser.objects.get(pk=item.history_modifier_id)}
-
def save(self, *args, **kwargs):
# put a default year if start_date is defined
if self.start_date and not self.year:
diff --git a/archaeological_operations/tests.py b/archaeological_operations/tests.py
index 2bf3a6691..a8d627dd5 100644
--- a/archaeological_operations/tests.py
+++ b/archaeological_operations/tests.py
@@ -692,6 +692,31 @@ class OperationWizardCreationTest(WizardTest, OperationInitTest, TestCase):
self.operation_number + 1)
+class OperationWizardClosingTest(OperationWizardCreationTest):
+ fixtures = OperationWizardCreationTest.fixtures
+ url_name = 'operation_closing'
+ wizard_name = 'operation_closing_wizard'
+ steps = views.operation_closing_steps
+ form_datas = [[
+ {
+ 'selec-operation_closing': {'pk': None},
+ 'date-operation_closing': {'end_date': '2016-01-01'},
+ }, []]]
+
+ def pre_wizard(self):
+ self.ope = self.get_default_operation()
+ self.form_datas[0][0]['selec-operation_closing']['pk'] = self.ope.pk
+ self.assertTrue(self.ope.is_active())
+ super(OperationWizardClosingTest, self).pre_wizard()
+
+ def post_wizard(self):
+ ope = models.Operation.objects.get(pk=self.ope.pk)
+ self.assertFalse(ope.is_active())
+ self.assertEqual(
+ ope.closing()['date'].strftime('%Y-%d-%m'),
+ self.form_datas[0][0]['date-operation_closing']['end_date'])
+
+
class OperationAdminActWizardCreationTest(WizardTest, OperationInitTest,
TestCase):
fixtures = [settings.ROOT_PATH +
diff --git a/archaeological_operations/views.py b/archaeological_operations/views.py
index 607f06a81..55e2b2692 100644
--- a/archaeological_operations/views.py
+++ b/archaeological_operations/views.py
@@ -345,10 +345,13 @@ def operation_add(request, file_id):
return redirect(reverse('operation_creation',
kwargs={'step': 'general-operation_creation'}))
-operation_closing_wizard = OperationClosingWizard.as_view([
+operation_closing_steps = [
('selec-operation_closing', OperationFormSelection),
('date-operation_closing', ClosingDateFormSelection),
- ('final-operation_closing', FinalOperationClosingForm)],
+ ('final-operation_closing', FinalOperationClosingForm)]
+
+operation_closing_wizard = OperationClosingWizard.as_view(
+ operation_closing_steps,
label=_(u"Operation closing"),
url_name='operation_closing',)