summaryrefslogtreecommitdiff
path: root/archaeological_operations
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2016-08-22 18:25:53 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2016-08-22 18:37:29 +0200
commitce71152fcae3a25b9cadfd8a4a561829e3296d3c (patch)
tree5d49cc534771a2ec84d8bd33a01fda83aaee1787 /archaeological_operations
parent8b116164320adbcefab1f5a10a4a401f897ef578 (diff)
downloadIshtar-ce71152fcae3a25b9cadfd8a4a561829e3296d3c.tar.bz2
Ishtar-ce71152fcae3a25b9cadfd8a4a561829e3296d3c.zip
Operations - archaeological files: fix closing info (refs #3175)
Diffstat (limited to 'archaeological_operations')
-rw-r--r--archaeological_operations/models.py41
-rw-r--r--archaeological_operations/tests.py25
-rw-r--r--archaeological_operations/views.py7
3 files changed, 60 insertions, 13 deletions
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',)