summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2019-02-12 19:27:25 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2019-02-12 19:27:25 +0100
commit0c579d023e4fb91be03c8a5c4f67da152fe373a7 (patch)
tree8986f5149dd2f627c46530e16acc64d285b57eee
parentb8fe730bde4a8c595557a5437d9d9d47c8bbb0e4 (diff)
downloadIshtar-0c579d023e4fb91be03c8a5c4f67da152fe373a7.tar.bz2
Ishtar-0c579d023e4fb91be03c8a5c4f67da152fe373a7.zip
Finds: manage all searches
-rw-r--r--archaeological_finds/forms.py228
-rw-r--r--archaeological_finds/models_finds.py248
-rw-r--r--ishtar_common/static/js/ishtar.js45
-rw-r--r--ishtar_common/static/media/styles.css5
-rw-r--r--ishtar_common/templates/blocks/bs_form_snippet.html10
-rw-r--r--ishtar_common/views.py3
-rw-r--r--ishtar_common/widgets.py6
-rw-r--r--scss/custom.scss20
8 files changed, 512 insertions, 53 deletions
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py
index 3073c5c23..88c25be44 100644
--- a/archaeological_finds/forms.py
+++ b/archaeological_finds/forms.py
@@ -148,7 +148,8 @@ class BaseFindForm(CustomForm, ManageOldType):
'mark', 'description', 'is_complete', 'material_type',
'material_type_quality', 'object_type', 'object_type_quality',
'find_number', 'min_number_of_individuals', 'inscription',
- 'manufacturing_place', 'communicabilitie', 'comment', 'dating_comment',
+ 'decoration', 'manufacturing_place', 'communicabilitie', 'comment',
+ 'dating_comment',
'length', 'width', 'height', 'thickness', 'diameter', 'circumference',
'volume', 'weight', 'clutter_long_side', 'clutter_short_side',
'clutter_height', 'dimensions_comment', 'checked_type', 'check_date'
@@ -833,6 +834,47 @@ DatingFormSet.form_slug = "find-040-dating"
class FindSelect(HistorySelect):
_model = models.Find
+ FORM_FILTERS = [
+ (_(u"Find origin"), [
+ "base_finds__cache_short_id",
+ "base_finds__cache_complete_id",
+ "base_finds__context_record__town",
+ "base_finds__context_record__operation__year",
+ "base_finds__context_record__operation__operation_code",
+ "base_finds__context_record__operation__code_patriarche",
+ "base_finds__context_record__operation__operation_type",
+ "base_finds__context_record__town__areas",
+ "archaeological_sites",
+ "archaeological_sites_context_record",
+ "base_finds__context_record",
+ "ope_relation_types",
+ "cr_relation_types",
+ ]),
+ (_(u"Discovery date"), [
+ "base_finds__discovery_date__before",
+ "base_finds__discovery_date__after",
+ "base_finds__discovery_date_tpq__before",
+ "base_finds__discovery_date_tpq__after",
+ "base_finds__discovery_date_taq__before",
+ "base_finds__discovery_date_taq__after"
+ ]),
+ (_(u"Dimensions"), [
+ "length__higher", "width__higher", "height__higher",
+ "thickness__higher", "diameter__higher", "circumference__higher",
+ "volume__higher", "weight__higher", "clutter_long_side__higher",
+ "clutter_short_side__higher", "clutter_height__higher",
+ "length__lower", "width__lower", "height__lower",
+ "thickness__lower", "diameter__lower", "circumference__lower",
+ "volume__lower", "weight__lower", "clutter_long_side__lower",
+ "clutter_short_side__lower", "clutter_height__lower",
+ "dimensions_comment",
+ ]),
+ (_(u"Preservation"), (
+ "integrities", "remarkabilities", "conservatory_state",
+ "alterations", "alteration_causes", "preservation_to_considers",
+ "treatment_emergency")
+ )
+ ]
form_admin_name = _(u"Find - 001 - Search")
form_slug = "find-001-search"
@@ -840,10 +882,18 @@ class FindSelect(HistorySelect):
label=_(u"Full text search"), widget=widgets.SearchWidget(
'archaeological-finds', 'find'
))
- base_finds__cache_short_id = forms.CharField(label=_(u"Short ID"))
- base_finds__cache_complete_id = forms.CharField(label=_(u"Complete ID"))
label = forms.CharField(label=_(u"Free ID"))
denomination = forms.CharField(label=_(u"Denomination"))
+ previous_id = forms.CharField(label=_(u"Previous ID"))
+ base_finds__excavation_id = forms.CharField(label=_(u"Excavation ID"))
+ seal_number = forms.CharField(label=_(u"Seal number"))
+ museum_id = forms.CharField(label=_(u"Museum ID"))
+ mark = forms.CharField(label=_(u"Mark"))
+
+ base_finds__cache_short_id = forms.CharField(
+ label=_(u"Base find - Short ID"))
+ base_finds__cache_complete_id = forms.CharField(
+ label=_(u"Base find - Complete ID"))
base_finds__context_record__town = get_town_field()
base_finds__context_record__operation__year = forms.IntegerField(
label=_(u"Year"))
@@ -878,26 +928,169 @@ class FindSelect(HistorySelect):
reverse_lazy('autocomplete-contextrecord'),
associated_model=ContextRecord),
validators=[valid_id(ContextRecord)])
- basket = forms.ChoiceField(label=_(u"Basket"), choices=[])
ope_relation_types = forms.ChoiceField(
label=_(u"Search within related operations"), choices=[])
cr_relation_types = forms.ChoiceField(
label=_(u"Search within related context records"), choices=[])
+
+ basket = forms.ChoiceField(label=_(u"Basket"), choices=[])
+
+ description = forms.CharField(label=_(u"Description"))
+ base_finds__discovery_date__after = forms.DateField(
+ label=_(u"Discovery date after"), widget=DatePicker
+ )
+ base_finds__discovery_date__before = forms.DateField(
+ label=_(u"Discovery date before"), widget=DatePicker
+ )
+ base_finds__discovery_date_tpq__after = forms.DateField(
+ label=_(u"Discovery date (exact or TPQ) after"), widget=DatePicker
+ )
+ base_finds__discovery_date_tpq__before = forms.DateField(
+ label=_(u"Discovery date (exact or TPQ) before"), widget=DatePicker
+ )
+ base_finds__discovery_date_taq__after = forms.DateField(
+ label=_(u"Discovery date (TAQ) after"), widget=DatePicker
+ )
+ base_finds__discovery_date_taq__before = forms.DateField(
+ label=_(u"Discovery date (TAQ) before"), widget=DatePicker
+ )
+ base_finds__batch = forms.ChoiceField(label=_(u"Batch/object"), choices=[])
+ is_complete = forms.NullBooleanField(label=_(u"Is complete?"))
+ material_types = forms.IntegerField(
+ label=_(u"Material type"),
+ widget=widgets.JQueryAutoComplete(
+ reverse_lazy('autocomplete-materialtype'),
+ associated_model=models.MaterialType),
+ )
+ material_type_quality = forms.ChoiceField(label=_(u"Material type quality"),
+ choices=[])
+ object_types = forms.IntegerField(
+ label=_(u"Object type"),
+ widget=widgets.JQueryAutoComplete(
+ reverse_lazy('autocomplete-objecttype'),
+ associated_model=models.ObjectType),
+ )
+ object_type_quality = forms.ChoiceField(
+ label=_(u"Object type quality"), choices=[])
+
+ find_number = forms.IntegerField(label=_(u"Find number"))
+ min_number_of_individuals = forms.IntegerField(
+ label=_(u"Minimum number of individuals (MNI)"))
+
+ manufacturing_place = forms.CharField(label=_(u"Manufacturing place"))
+ decoration = forms.CharField(label=_(u"Decoration"))
+ inscription = forms.CharField(label=_(u"Inscription"))
+
+ communicabilities = forms.ChoiceField(label=_(u"Communicability"))
+ comment = forms.CharField(label=_(u"Comment"))
+
datings__period = forms.ChoiceField(label=_(u"Period"), choices=[])
- material_types = forms.ChoiceField(label=_(u"Material type"), choices=[])
- object_types = forms.ChoiceField(label=_(u"Object type"), choices=[])
- preservation_to_considers = forms.ChoiceField(
- choices=[], label=_(u"Preservation type"))
- conservatory_state = forms.ChoiceField(label=_(u"Conservatory state"),
- choices=[])
+ dating_comment = forms.CharField(label=_(u"Comment on dating"))
+
+ length__higher = FloatField(label=_(u"Length - higher than (cm)"),
+ widget=widgets.CentimeterMeterWidget)
+ length__lower = FloatField(label=_(u"Length - lower than (cm)"),
+ widget=widgets.CentimeterMeterWidget)
+ width__lower = FloatField(
+ label=_(u"Width - lower than (cm)"),
+ widget=widgets.CentimeterMeterWidget)
+ width__higher = FloatField(
+ label=_(u"Width - higher than (cm)"),
+ widget=widgets.CentimeterMeterWidget)
+ height__lower = FloatField(
+ label=_(u"Height - lower than (cm)"),
+ widget=widgets.CentimeterMeterWidget)
+ height__higher = FloatField(
+ label=_(u"Height - higher than (cm)"),
+ widget=widgets.CentimeterMeterWidget)
+ thickness__lower = FloatField(
+ label=_(u"Thickness - lower than (cm)"),
+ widget=widgets.CentimeterMeterWidget)
+ thickness__higher = FloatField(
+ label=_(u"Thickness - higher than (cm)"),
+ widget=widgets.CentimeterMeterWidget)
+ diameter__lower = FloatField(
+ label=_(u"Diameter - lower than (cm)"),
+ widget=widgets.CentimeterMeterWidget)
+ diameter__higher = FloatField(
+ label=_(u"Diameter - higher than (cm)"),
+ widget=widgets.CentimeterMeterWidget)
+ circumference__lower = FloatField(
+ label=_(u"Circumference - lower than (cm)"),
+ widget=widgets.CentimeterMeterWidget)
+ circumference__higher = FloatField(
+ label=_(u"Circumference - higher than (cm)"),
+ widget=widgets.CentimeterMeterWidget)
+ volume__lower = FloatField(label=_(u"Volume - lower than (l)"))
+ volume__higher = FloatField(label=_(u"Volume - higher than (l)"))
+ weight__lower = FloatField(
+ label=_(u"Weight - lower than (g)"),
+ widget=widgets.GramKilogramWidget)
+ weight__higher = FloatField(
+ label=_(u"Weight - higher than (g)"),
+ widget=widgets.GramKilogramWidget)
+ clutter_long_side__lower = FloatField(
+ label=_(u"Clutter long side - lower than (cm)"),
+ widget=widgets.CentimeterMeterWidget)
+ clutter_long_side__higher = FloatField(
+ label=_(u"Clutter long side - higher than (cm)"),
+ widget=widgets.CentimeterMeterWidget)
+ clutter_short_side__lower = FloatField(
+ label=_(u"Clutter short side - lower than (cm)"),
+ widget=widgets.CentimeterMeterWidget)
+ clutter_short_side__higher = FloatField(
+ label=_(u"Clutter short side - higher than (cm)"),
+ widget=widgets.CentimeterMeterWidget)
+ clutter_height__lower = FloatField(
+ label=_(u"Clutter height - lower than (cm)"),
+ widget=widgets.CentimeterMeterWidget)
+ clutter_height__higher = FloatField(
+ label=_(u"Clutter height - higher than (cm)"),
+ widget=widgets.CentimeterMeterWidget)
+ dimensions_comment = forms.CharField(
+ label=_(u"Dimensions comment"))
+
+ base_finds__topographic_localisation = forms.CharField(
+ label=_(u"Point of topographic reference"),
+ )
+ checked_type = forms.ChoiceField(label=_("Check"))
+ check_date__after = forms.DateField(
+ label=_(u"Check date after"), widget=DatePicker
+ )
+ check_date__before = forms.DateField(
+ label=_(u"Check date before"), widget=DatePicker
+ )
integrities = forms.ChoiceField(label=_(u"Integrity / interest"),
choices=[])
remarkabilities = forms.ChoiceField(label=_(u"Remarkability"),
choices=[])
- base_finds__find__description = forms.CharField(label=_(u"Description"))
- base_finds__batch = forms.ChoiceField(
- label=_(u"Batch/object"), choices=[])
- checked_type = forms.ChoiceField(label=_("Check"))
+ conservatory_state = forms.ChoiceField(label=_(u"Conservatory state"),
+ choices=[])
+ alterations = forms.ChoiceField(
+ label=_(u"Alteration"), choices=[])
+ alteration_causes = forms.ChoiceField(
+ label=_(u"Alteration cause"), choices=[])
+ preservation_to_considers = forms.ChoiceField(
+ choices=[], label=_(u"Preservation type"))
+ treatment_emergency = forms.ChoiceField(
+ choices=[], label=_(u"Treatment emergency")
+ )
+
+ estimated_value__higher = FloatField(
+ label=_(u"Estimated value - higher than"))
+ estimated_value__lower = FloatField(
+ label=_(u"Estimated value - lower than"))
+ insurance_value__higher = FloatField(
+ label=_(u"Insurance value - higher than"))
+ insurance_value__lower = FloatField(
+ label=_(u"Insurance value - lower than"))
+ appraisal_date__after = forms.DateField(
+ label=_(u"Appraisal date after"), widget=DatePicker)
+ appraisal_date__before = forms.DateField(
+ label=_(u"Appraisal date before"), widget=DatePicker)
+ conservatory_comment = forms.CharField(
+ label=_(u"Conservatory comment"))
+
documents__image__isnull = forms.NullBooleanField(label=_(u"Has an image?"))
loan = forms.NullBooleanField(label=_(u"Loan?"))
treatments_file_end_date = forms.DateField(
@@ -906,10 +1099,8 @@ class FindSelect(HistorySelect):
TYPES = [
FieldType('datings__period', Period),
- FieldType('material_types', models.MaterialType),
FieldType('conservatory_state', models.ConservatoryState),
FieldType('base_finds__batch', models.BatchType),
- FieldType('object_types', models.ObjectType),
FieldType('preservation_to_considers', models.TreatmentType),
FieldType('integrities', models.IntegrityType),
FieldType('remarkabilities', models.RemarkabilityType),
@@ -917,6 +1108,11 @@ class FindSelect(HistorySelect):
FieldType('base_finds__context_record__operation__operation_type',
OperationType),
FieldType('checked_type', models.CheckedType),
+ FieldType('material_type_quality', models.MaterialTypeQualityType),
+ FieldType('object_type_quality', models.ObjectTypeQualityType),
+ FieldType('communicabilities', models.CommunicabilityType),
+ FieldType('alterations', models.AlterationType),
+ FieldType('alteration_causes', models.AlterationCauseType),
]
def __init__(self, *args, **kwargs):
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py
index 81ac94a41..b49c4655e 100644
--- a/archaeological_finds/models_finds.py
+++ b/archaeological_finds/models_finds.py
@@ -798,8 +798,7 @@ class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, OwnPerms,
'base_finds__context_record__archaeological_site__name':
'base_finds__context_record__archaeological_site__name',
'datings__period': 'datings__period__pk',
- 'base_finds__find__description':
- 'base_finds__find__description__icontains',
+ 'description': 'description__icontains',
'base_finds__batch': 'base_finds__batch',
'basket_id': 'basket__pk',
'denomination': 'denomination',
@@ -914,10 +913,10 @@ class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, OwnPerms,
SearchAltName(
pgettext_lazy("key for text search", u"remarkability"),
'remarkabilities__label__iexact'),
- 'base_finds__find__description':
+ 'description':
SearchAltName(
pgettext_lazy("key for text search", u"description"),
- 'base_finds__find__description__iexact'),
+ 'description__iexact'),
'base_finds__batch':
SearchAltName(
pgettext_lazy("key for text search", u"batch"),
@@ -994,6 +993,247 @@ class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, OwnPerms,
pgettext_lazy("key for text search",
u"treatment-end-date-before"),
'treatments__file__end_date__lte'),
+ 'previous_id':
+ SearchAltName(
+ pgettext_lazy("key for text search", u"previous-id"),
+ 'previous_id__iexact'),
+ 'seal_number':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"seal-number"),
+ 'seal_number__iexact'),
+ 'base_finds__excavation_id':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"excavation-id"),
+ 'base_finds__excavation_id__iexact'),
+ 'museum_id':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"museum-id"),
+ 'museum_id__iexact'),
+ 'mark':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"mark"),
+ 'mark__iexact'),
+ 'base_finds__discovery_date__before':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"discovery-date-before"),
+ 'base_finds__discovery_date__lte'),
+ 'base_finds__discovery_date__after':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"discovery-date-after"),
+ 'base_finds__discovery_date__gte'),
+ 'base_finds__discovery_date_tpq__before':
+ SearchAltName(
+ pgettext_lazy(u"key for text search",
+ u"discovery-date-tpq-before"),
+ 'base_finds__discovery_date_tpq__lte'),
+ 'base_finds__discovery_date_tpq__after':
+ SearchAltName(
+ pgettext_lazy(u"key for text search",
+ u"discovery-date-tpq-after"),
+ 'base_finds__discovery_date_tpq__gte'),
+ 'base_finds__discovery_date_taq__before':
+ SearchAltName(
+ pgettext_lazy(u"key for text search",
+ u"discovery-date-taq-before"),
+ 'base_finds__discovery_date_taq__lte'),
+ 'base_finds__discovery_date_taq__after':
+ SearchAltName(
+ pgettext_lazy(u"key for text search",
+ u"discovery-date-taq-after"),
+ 'base_finds__discovery_date_taq__gte'),
+ 'is_complete':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"is-complete"),
+ 'is_complete'),
+ 'material_type_quality':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"material-type-quality"),
+ 'material_type_quality__label__iexact'),
+ 'object_type_quality':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"object-type-quality"),
+ 'object_type_quality__label__iexact'),
+ 'find_number':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"find-number"),
+ 'find_number'),
+ 'min_number_of_individuals':
+ SearchAltName(
+ pgettext_lazy(u"key for text search",
+ u"min-number-of-individuals"),
+ 'min_number_of_individuals'),
+ 'decoration':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"decoration"),
+ 'decoration__iexact'),
+ 'inscription':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"inscription"),
+ 'inscription__iexact'),
+ 'manufacturing_place':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"manufacturing-place"),
+ 'manufacturing_place__iexact'),
+ 'communicabilities':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"communicabilities"),
+ 'communicabilities__label__iexact'),
+ 'comment':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"comment"),
+ 'comment__iexact'),
+ 'dating_comment':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"dating-comment"),
+ 'dating_comment__iexact'),
+ 'length__lower':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"length-lower"),
+ 'length__lte'),
+ 'width__lower':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"width-lower"),
+ 'width__lte'),
+ 'height__lower':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"height-lower"),
+ 'height__lte'),
+ 'thickness__lower':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"thickness-lower"),
+ 'thickness__lte'),
+ 'diameter__lower':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"diameter-lower"),
+ 'diameter__lte'),
+ 'circumference__lower':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"circumference-lower"),
+ 'circumference__lte'),
+ 'volume__lower':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"volume-lower"),
+ 'volume__lte'),
+ 'weight__lower':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"weight-lower"),
+ 'weight__lte'),
+ 'clutter_long_side__lower':
+ SearchAltName(
+ pgettext_lazy(u"key for text search",
+ u"clutter-long-side-lower"),
+ 'clutter_long_side__lte'),
+ 'clutter_short_side__lower':
+ SearchAltName(
+ pgettext_lazy(u"key for text search",
+ u"clutter-short-side-lower"),
+ 'clutter_short_side__lte'),
+ 'clutter_height__lower':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"clutter-height-lower"),
+ 'clutter_height__lte'),
+ 'length__higher':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"length-higher"),
+ 'length__gte'),
+ 'width__higher':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"width-higher"),
+ 'width__gte'),
+ 'height__higher':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"height-higher"),
+ 'height__gte'),
+ 'thickness__higher':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"thickness-higher"),
+ 'thickness__gte'),
+ 'diameter__higher':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"diameter-higher"),
+ 'diameter__gte'),
+ 'circumference__higher':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"circumference-higher"),
+ 'circumference__gte'),
+ 'volume__higher':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"volume-higher"),
+ 'volume__gte'),
+ 'weight__higher':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"weight-higher"),
+ 'weight__gte'),
+ 'clutter_long_side__higher':
+ SearchAltName(
+ pgettext_lazy(u"key for text search",
+ u"clutter-long-side-higher"),
+ 'clutter_long_side__gte'),
+ 'clutter_short_side__higher':
+ SearchAltName(
+ pgettext_lazy(u"key for text search",
+ u"clutter-short-side-higher"),
+ 'clutter_short_side__gte'),
+ 'clutter_height__higher':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"clutter-height-higher"),
+ 'clutter_height__gte'),
+
+ 'dimensions_comment':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"dimensions-comment"),
+ 'dimensions_comment__icontains'),
+ 'base_finds__topographic_localisation':
+ SearchAltName(
+ pgettext_lazy(u"key for text search",
+ u"topographic-localisation"),
+ 'base_finds__topographic_localisation__iexact'),
+ 'check_date__before':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"check-date-before"),
+ 'check_date__lte'),
+ 'check_date__after':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"check-date-after"),
+ 'check_date__gte'),
+ 'alterations':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"alterations"),
+ 'alterations__label__iexact'),
+ 'alteration_causes':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"alteration-causes"),
+ 'alteration_causes__label__iexact'),
+ 'treatment_emergency':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"treatment-emergency"),
+ 'treatment_emergency__label__iexact'),
+ 'estimated_value__higher':
+ SearchAltName(
+ pgettext_lazy(u"key for text search",
+ u"estimated-value-higher"),
+ 'estimated_value__gte'),
+ 'estimated_value__lower':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"estimated-value-lower"),
+ 'estimated_value__lte'),
+ 'insurance_value__higher':
+ SearchAltName(
+ pgettext_lazy(u"key for text search",
+ u"insurance-value-higher"),
+ 'insurance_value__gte'),
+ 'insurance_value__lower':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"insurance-value-lower"),
+ 'insurance_value__lte'),
+ 'appraisal_date__before':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"appraisal-date-before"),
+ 'appraisal_date__lte'),
+ 'appraisal_date__after':
+ SearchAltName(
+ pgettext_lazy(u"key for text search", u"appraisal-date-after"),
+ 'appraisal_date__gte'),
}
DYNAMIC_REQUESTS = {
diff --git a/ishtar_common/static/js/ishtar.js b/ishtar_common/static/js/ishtar.js
index 43ef6ff1a..715ba85d5 100644
--- a/ishtar_common/static/js/ishtar.js
+++ b/ishtar_common/static/js/ishtar.js
@@ -655,29 +655,29 @@ function open_window(url){
}
function save_and_close_window(name_label, name_pk, item_name, item_pk){
- var main_page = opener.document;
- jQuery(main_page).find("#"+name_label).val(item_name);
- jQuery(main_page).find("#"+name_pk).val(item_pk);
- opener.focus();
- self.close();
+ var main_page = opener.document;
+ jQuery(main_page).find("#"+name_label).val(item_name);
+ jQuery(main_page).find("#"+name_pk).val(item_pk);
+ opener.focus();
+ self.close();
}
function save_and_close_window_many(name_label, name_pk, item_name, item_pk){
- var main_page = opener.document;
- var lbl_ = jQuery(main_page).find("#"+name_label);
- var val_ = jQuery(main_page).find("#"+name_pk);
- if (val_.val()){
- var v = lbl_.val();
- v = v.slice(0, v.lastIndexOf(","));
- lbl_.val(v + ", " + item_name + ", ");
- val_.val(val_.val() + ", " + item_pk);
- lbl_.change();
- } else {
- jQuery(main_page).find("#"+name_label).val(item_name);
- jQuery(main_page).find("#"+name_pk).val(item_pk);
- }
- opener.focus();
- self.close();
+ var main_page = opener.document;
+ var lbl_ = jQuery(main_page).find("#" + name_label);
+ var val_ = jQuery(main_page).find("#" + name_pk);
+ if (val_.val()){
+ var v = lbl_.val();
+ v = v.slice(0, v.lastIndexOf(","));
+ lbl_.val(v + ", " + item_name + ", ");
+ val_.val(val_.val() + ", " + item_pk);
+ lbl_.change();
+ } else {
+ jQuery(main_page).find("#" + name_label).val(item_name);
+ jQuery(main_page).find("#" + name_pk).val(item_pk);
+ }
+ opener.focus();
+ self.close();
}
function multiRemoveItem(selItems, name, idx){
@@ -782,6 +782,11 @@ function update_search_field(){
}
} else if ($(this).filter(":text").length){
v = $(this).val();
+ if (v.match( new RegExp(' > ') )){
+ matches = v.split(' > ');
+ v = matches[matches.length - 1];
+ }
+
} else if ($(this).filter('input[type="number"]').length){
v = $(this).val();
}
diff --git a/ishtar_common/static/media/styles.css b/ishtar_common/static/media/styles.css
index b5e8bab48..507948915 100644
--- a/ishtar_common/static/media/styles.css
+++ b/ishtar_common/static/media/styles.css
@@ -30,11 +30,6 @@ html{
display: none;
}
-.search .form-group {
- margin-bottom: 0.2rem;
- font-size: 0.9em;
-}
-
#id_parcel_0, #id_parcel_1, #id_parcel_2{
width: 30%;
display: inline-block;
diff --git a/ishtar_common/templates/blocks/bs_form_snippet.html b/ishtar_common/templates/blocks/bs_form_snippet.html
index caa20b016..f0f729e2c 100644
--- a/ishtar_common/templates/blocks/bs_form_snippet.html
+++ b/ishtar_common/templates/blocks/bs_form_snippet.html
@@ -50,10 +50,8 @@
<span aria-hidden="true">&times;</span>
</button>
<div class="form-group col-12" id="advanced-search-info"></div>
- </div>
- <div class="modal-body body-scroll search-fields">
- <div class="form-row justify-content-md-center">
- <div class="form-row col-md-6">
+ <div class="row col-12 justify-content-center">
+ <div class="form-row col-md-8">
<div class="input-group search-widget">
<span class="input-group-prepend">
<span class="input-group-text" title="{% trans 'Filter...' %}">
@@ -71,8 +69,8 @@
</div>
</div>
</div>
- <hr>
-
+ </div>
+ <div class="modal-body body-scroll search-fields">
{% endif %}
{% if field.name in form.HEADERS %}
{% if forloop.counter0 %}
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index 8b2602dbc..5050f2d0d 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -192,9 +192,12 @@ account_deletion_wizard = wizards.IshtarUserDeletionWizard.as_view(
def get_autocomplete_generic(model, extra=None):
if not extra:
extra = {'available': True}
+
def func(request):
q = request.GET.get('term')
query = Q(**extra)
+ if not q:
+ q = ""
for q in q.split(' '):
if not q:
continue
diff --git a/ishtar_common/widgets.py b/ishtar_common/widgets.py
index aee4eb95d..cb9250b9c 100644
--- a/ishtar_common/widgets.py
+++ b/ishtar_common/widgets.py
@@ -30,7 +30,7 @@ from django.db.models import fields
from django.forms import ClearableFileInput
from django.forms.utils import flatatt
from django.forms.widgets import CheckboxSelectMultiple as \
- CheckboxSelectMultipleBase
+ CheckboxSelectMultipleBase, NumberInput
from django.template import loader
from django.template.defaultfilters import slugify
from django.utils.encoding import smart_unicode
@@ -1115,3 +1115,7 @@ class DataTable(Select2Media, forms.RadioSelect):
t = loader.get_template('blocks/DataTables.html')
rendered += t.render(dct)
return mark_safe(rendered)
+
+
+class RangeInput(NumberInput):
+ input_type = 'range'
diff --git a/scss/custom.scss b/scss/custom.scss
index 4798291ea..b877a1255 100644
--- a/scss/custom.scss
+++ b/scss/custom.scss
@@ -106,6 +106,11 @@ pre {
padding-bottom: 0;
}
+#advanced-search-info .alert{
+ margin-bottom: 0.6rem;
+}
+
+
#modal-advanced-search .modal-header .alert-secondary{
background-color: $white;
}
@@ -114,8 +119,13 @@ pre {
background-color: $gray-200;
}
+.modal-header .input-group-text{
+ background-color: $gray-300;
+ border-color: $gray-400;
+}
+
.modal-body.body-scroll{
- max-height: calc(100vh - 200px);
+ max-height: calc(100vh - 300px);
overflow-y: auto;
}
@@ -576,6 +586,14 @@ ul.compact{
/* search */
+.search .form-group {
+ font-size: 0.9em;
+ margin-bottom: 0;
+}
+.search .search-widget {
+ margin-bottom: 1rem;
+}
+
.search_button{
display: none;
}