[fixes] minor fix for between operator filter (#3196)
* [fixes] minor fix for between operator filter * [minor] added a test case for between operator filter
This commit is contained in:
parent
7b41d7e5eb
commit
8eeda18692
2 changed files with 54 additions and 2 deletions
|
|
@ -299,9 +299,16 @@ class DatabaseQuery(object):
|
|||
|
||||
if f.operator.lower() == 'between' and \
|
||||
(f.fieldname in ('creation', 'modified') or (df and (df.fieldtype=="Date" or df.fieldtype=="Datetime"))):
|
||||
|
||||
from_date = None
|
||||
to_date = None
|
||||
if f.value and isinstance(f.value, (list, tuple)):
|
||||
if len(f.value) >= 1: from_date = f.value[0]
|
||||
if len(f.value) >= 2: to_date = f.value[1]
|
||||
|
||||
value = "'%s' AND '%s'" % (
|
||||
add_to_date(get_datetime(f.value[0]),days=-1).strftime("%Y-%m-%d %H:%M:%S.%f"),
|
||||
get_datetime(f.value[1]).strftime("%Y-%m-%d %H:%M:%S.%f"))
|
||||
add_to_date(get_datetime(from_date),days=-1).strftime("%Y-%m-%d %H:%M:%S.%f"),
|
||||
get_datetime(to_date).strftime("%Y-%m-%d %H:%M:%S.%f"))
|
||||
fallback = "'0000-00-00 00:00:00'"
|
||||
|
||||
elif df and df.fieldtype=="Date":
|
||||
|
|
|
|||
|
|
@ -38,3 +38,48 @@ class TestReportview(unittest.TestCase):
|
|||
self.assertTrue({"fieldtype":"Table", "fieldname":"fields"} in data)
|
||||
self.assertTrue({"fieldtype":"Select", "fieldname":"document_type"} in data)
|
||||
self.assertFalse({"fieldtype":"Check", "fieldname":"issingle"} in data)
|
||||
|
||||
def test_between_filters(self):
|
||||
""" test case to check between filter for date fields """
|
||||
frappe.db.sql("delete from tabEvent")
|
||||
|
||||
# create events to test the between operator filter
|
||||
todays_event = create_event()
|
||||
event = create_event(starts_on="2016-07-06 12:00:00")
|
||||
|
||||
# if the values are not passed in filters then todays event should be return
|
||||
data = DatabaseQuery("Event").execute(
|
||||
filters={"starts_on": ["between", None]}, fields=["name"])
|
||||
|
||||
self.assertTrue({ "name": todays_event.name } in data)
|
||||
self.assertTrue({ "name": event.name } not in data)
|
||||
|
||||
# if both from and to_date values are passed
|
||||
data = DatabaseQuery("Event").execute(
|
||||
filters={"starts_on": ["between", ["2016-07-05 12:00:00", "2016-07-07 12:00:00"]]},
|
||||
fields=["name"])
|
||||
|
||||
self.assertTrue({ "name": event.name } in data)
|
||||
self.assertTrue({ "name": todays_event.name } not in data)
|
||||
|
||||
# if only one value is passed in the filter
|
||||
data = DatabaseQuery("Event").execute(
|
||||
filters={"starts_on": ["between", ["2016-07-05 12:00:00"]]},
|
||||
fields=["name"])
|
||||
|
||||
self.assertTrue({ "name": todays_event.name } in data)
|
||||
self.assertTrue({ "name": event.name } in data)
|
||||
|
||||
def create_event(subject="_Test Event", starts_on=None):
|
||||
""" create a test event """
|
||||
|
||||
from frappe.utils import get_datetime
|
||||
|
||||
event = frappe.get_doc({
|
||||
"doctype": "Event",
|
||||
"subject": subject,
|
||||
"event_type": "Public",
|
||||
"starts_on": get_datetime(starts_on),
|
||||
}).insert(ignore_permissions=True)
|
||||
|
||||
return event
|
||||
Loading…
Add table
Reference in a new issue