[calendar] added filters, fixes in datetime
This commit is contained in:
parent
224bf33f3d
commit
f1c7f5966b
8 changed files with 119 additions and 65 deletions
|
|
@ -867,6 +867,8 @@ def get_all(doctype, *args, **kwargs):
|
|||
frappe.get_all("ToDo", fields=["*"], filters = {"description": ("like", "test%")})
|
||||
"""
|
||||
kwargs["ignore_permissions"] = True
|
||||
if not "limit_page_length" in kwargs:
|
||||
kwargs["limit_page_length"] = 0
|
||||
return get_list(doctype, *args, **kwargs)
|
||||
|
||||
def add_version(doc):
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import frappe, json
|
|||
import frappe.defaults
|
||||
import frappe.share
|
||||
import frappe.permissions
|
||||
from frappe.utils import flt, cint
|
||||
from frappe.utils import flt, cint, getdate, get_datetime, get_time
|
||||
from frappe import _
|
||||
|
||||
class DatabaseQuery(object):
|
||||
|
|
@ -217,9 +217,22 @@ class DatabaseQuery(object):
|
|||
tname=tname, fname=f[1], operator=f[2], value=f[3]))
|
||||
else:
|
||||
df = frappe.get_meta(f[0]).get("fields", {"fieldname": f[1]})
|
||||
df = df[0] if df else None
|
||||
|
||||
if f[2] == "like" or (isinstance(f[3], basestring) and
|
||||
(not df or df[0].fieldtype not in ["Float", "Int", "Currency", "Percent", "Check"])):
|
||||
if df and df.fieldtype=="Date":
|
||||
value, default_val = '"{0}"'.format(frappe.db.escape(getdate(f[3]).strftime("%Y-%m-%d"))), \
|
||||
"'0000-00-00'"
|
||||
|
||||
elif df and df.fieldtype=="Datetime":
|
||||
value, default_val = '"{0}"'.format(frappe.db.escape(get_datetime(f[3]).strftime("%Y-%m-%d %H:%M:%S.%f"))), \
|
||||
"'0000-00-00 00:00:00'"
|
||||
|
||||
elif df and df.fieldtype=="Time":
|
||||
value, default_val = '"{0}"'.format(frappe.db.escape(get_time(f[3]).strftime("%H:%M:%S.%f"))), \
|
||||
"'00:00:00'"
|
||||
|
||||
elif f[2] == "like" or (isinstance(f[3], basestring) and
|
||||
(not df or df.fieldtype not in ["Float", "Int", "Currency", "Percent", "Check"])):
|
||||
if f[2] == "like":
|
||||
# because "like" uses backslash (\) for escaping
|
||||
f[3] = f[3].replace("\\", "\\\\")
|
||||
|
|
|
|||
|
|
@ -176,6 +176,7 @@
|
|||
"public/js/frappe/list/list_item_row_head.html",
|
||||
"public/js/frappe/list/list_item_subject.html",
|
||||
"public/js/frappe/list/listview.js",
|
||||
"public/js/frappe/views/calendar_base.js",
|
||||
"public/js/frappe/views/calendar.js",
|
||||
"public/js/frappe/views/ganttview.js"
|
||||
],
|
||||
|
|
|
|||
|
|
@ -246,6 +246,11 @@ frappe.ui.form.ControlInput = frappe.ui.form.Control.extend({
|
|||
bind_change_event: function() {
|
||||
var me = this;
|
||||
this.$input && this.$input.on("change", this.change || function(e) {
|
||||
if(me.df.change) {
|
||||
// onchange event specified in df
|
||||
me.df.change.apply(this, e);
|
||||
return;
|
||||
}
|
||||
if(me.doctype && me.docname && me.get_value) {
|
||||
me.parse_validate_and_set_in_model(me.get_value());
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ frappe.views.CalendarFactory = frappe.views.Factory.extend({
|
|||
});
|
||||
|
||||
|
||||
frappe.views.Calendar = Class.extend({
|
||||
frappe.views.Calendar = frappe.views.CalendarBase.extend({
|
||||
init: function(options) {
|
||||
$.extend(this, options);
|
||||
this.make_page();
|
||||
|
|
@ -31,7 +31,13 @@ frappe.views.Calendar = Class.extend({
|
|||
this.make();
|
||||
},
|
||||
make_page: function() {
|
||||
var me = this;
|
||||
this.parent = frappe.make_page();
|
||||
|
||||
$(this.parent).on("show", function() {
|
||||
me.set_filters_from_route_options();
|
||||
});
|
||||
|
||||
this.page = this.parent.page;
|
||||
var module = locals.DocType[this.doctype].module;
|
||||
this.page.set_title(__("Calendar") + " - " + __(this.doctype));
|
||||
|
|
@ -40,6 +46,17 @@ frappe.views.Calendar = Class.extend({
|
|||
frappe.add_breadcrumbs(module, this.doctype)
|
||||
}
|
||||
|
||||
this.add_filters();
|
||||
|
||||
this.page.add_field({fieldtype:"Date", label:"Date",
|
||||
fieldname:"selected",
|
||||
"default": frappe.datetime.month_start(),
|
||||
input_css: {"z-index": 1},
|
||||
change: function() {
|
||||
me.$cal.fullCalendar("gotoDate", $(this).val());
|
||||
}
|
||||
});
|
||||
|
||||
this.page.set_primary_action(__("New"), function() {
|
||||
var doc = frappe.model.get_new_doc(me.doctype);
|
||||
frappe.set_route("Form", me.doctype, doc.name);
|
||||
|
|
@ -50,6 +67,7 @@ frappe.views.Calendar = Class.extend({
|
|||
me.$cal.fullCalendar("refetchEvents");
|
||||
})
|
||||
},
|
||||
|
||||
make: function() {
|
||||
var me = this;
|
||||
this.$wrapper = this.page.main;
|
||||
|
|
@ -61,7 +79,6 @@ frappe.views.Calendar = Class.extend({
|
|||
// .appendTo(this.$wrapper);
|
||||
|
||||
this.$cal.fullCalendar(this.cal_options);
|
||||
|
||||
this.set_css();
|
||||
},
|
||||
set_css: function() {
|
||||
|
|
@ -179,11 +196,16 @@ frappe.views.Calendar = Class.extend({
|
|||
}
|
||||
},
|
||||
get_args: function(start, end) {
|
||||
return {
|
||||
var args = {
|
||||
doctype: this.doctype,
|
||||
start: frappe.datetime.get_datetime_as_string(start),
|
||||
end: frappe.datetime.get_datetime_as_string(end)
|
||||
}
|
||||
end: frappe.datetime.get_datetime_as_string(end),
|
||||
filters: this.get_filters()
|
||||
};
|
||||
return args;
|
||||
},
|
||||
refresh: function() {
|
||||
this.$cal.fullCalendar('refetchEvents');
|
||||
},
|
||||
prepare_events: function(events) {
|
||||
var me = this;
|
||||
|
|
|
|||
50
frappe/public/js/frappe/views/calendar_base.js
Normal file
50
frappe/public/js/frappe/views/calendar_base.js
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
|
||||
// MIT License. See license.txt
|
||||
|
||||
frappe.views.CalendarBase = Class.extend({
|
||||
add_filters: function() {
|
||||
var me = this;
|
||||
if(this.filters) {
|
||||
$.each(this.filters, function(i, df) {
|
||||
df.change = function() {
|
||||
me.refresh();
|
||||
};
|
||||
me.page.add_field(df);
|
||||
});
|
||||
}
|
||||
},
|
||||
set_filter: function(doctype, value) {
|
||||
var me = this;
|
||||
if(this.filters) {
|
||||
$.each(this.filters, function(i, df) {
|
||||
if(df.options===value)
|
||||
me.page.fields_dict[df.fieldname].set_input(value);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
},
|
||||
get_filters: function() {
|
||||
var filter_vals = {},
|
||||
me = this;
|
||||
if(this.filters) {
|
||||
$.each(this.filters, function(i, df) {
|
||||
filter_vals[df.fieldname || df.label] =
|
||||
me.page.fields_dict[df.fieldname || df.label].get_parsed_value();
|
||||
});
|
||||
}
|
||||
return filter_vals;
|
||||
},
|
||||
set_filters_from_route_options: function() {
|
||||
var me = this;
|
||||
if(frappe.route_options) {
|
||||
$.each(frappe.route_options, function(k, value) {
|
||||
if(me.page.fields_dict[k]) {
|
||||
me.page.fields_dict[k].set_input(value);
|
||||
};
|
||||
})
|
||||
frappe.route_options = null;
|
||||
me.refresh();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
})
|
||||
|
|
@ -27,7 +27,7 @@ frappe.views.GanttFactory = frappe.views.Factory.extend({
|
|||
}
|
||||
});
|
||||
|
||||
frappe.views.Gantt = Class.extend({
|
||||
frappe.views.Gantt = frappe.views.CalendarBase.extend({
|
||||
init: function(opts) {
|
||||
$.extend(this, opts);
|
||||
this.make_page();
|
||||
|
|
@ -52,12 +52,7 @@ frappe.views.Gantt = Class.extend({
|
|||
this.page.add_field({fieldtype:"Date", label:"To",
|
||||
fieldname:"end", "default": frappe.datetime.month_end(), input_css: {"z-index": 3}});
|
||||
|
||||
if(this.filters) {
|
||||
$.each(this.filters, function(i, df) {
|
||||
me.page.add_field(df);
|
||||
});
|
||||
}
|
||||
|
||||
this.add_filters();
|
||||
this.wrapper = $("<div></div>").appendTo(this.page.main);
|
||||
|
||||
},
|
||||
|
|
@ -97,27 +92,6 @@ frappe.views.Gantt = Class.extend({
|
|||
})
|
||||
|
||||
},
|
||||
set_filter: function(doctype, value) {
|
||||
var me = this;
|
||||
if(this.filters) {
|
||||
$.each(this.filters, function(i, df) {
|
||||
if(df.options===value)
|
||||
me.page.fields_dict[df.fieldname].set_input(value);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
},
|
||||
get_filters: function() {
|
||||
var filter_vals = {},
|
||||
me = this;
|
||||
if(this.filters) {
|
||||
$.each(this.filters, function(i, df) {
|
||||
filter_vals[df.fieldname || df.label] =
|
||||
me.page.fields_dict[df.fieldname || df.label].get_parsed_value();
|
||||
});
|
||||
}
|
||||
return filter_vals;
|
||||
},
|
||||
get_source: function(r) {
|
||||
var source = [],
|
||||
me = this;
|
||||
|
|
@ -158,18 +132,5 @@ frappe.views.Gantt = Class.extend({
|
|||
}
|
||||
});
|
||||
return source
|
||||
},
|
||||
set_filters_from_route_options: function() {
|
||||
var me = this;
|
||||
if(frappe.route_options) {
|
||||
$.each(frappe.route_options, function(k, value) {
|
||||
if(me.page.fields_dict[k]) {
|
||||
me.page.fields_dict[k].set_input(value);
|
||||
};
|
||||
})
|
||||
frappe.route_options = null;
|
||||
me.refresh();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -28,6 +28,22 @@ def getdate(string_date):
|
|||
|
||||
return datetime.datetime.strptime(string_date, "%Y-%m-%d").date()
|
||||
|
||||
def get_datetime(datetime_str):
|
||||
if isinstance(datetime_str, datetime.datetime):
|
||||
return datetime_str
|
||||
|
||||
elif isinstance(datetime_str, datetime.date):
|
||||
return datetime.datetime.combine(datetime_str, datetime.time())
|
||||
|
||||
try:
|
||||
return datetime.datetime.strptime(datetime_str, DATETIME_FORMAT)
|
||||
|
||||
except ValueError:
|
||||
if datetime_str=='0000-00-00 00:00:00.000000':
|
||||
return None
|
||||
|
||||
return datetime.datetime.strptime(datetime_str, '%Y-%m-%d %H:%M:%S')
|
||||
|
||||
def add_to_date(date, years=0, months=0, days=0):
|
||||
"""Adds `days` to the given date"""
|
||||
|
||||
|
|
@ -134,22 +150,6 @@ def get_last_day(dt):
|
|||
"""
|
||||
return get_first_day(dt, 0, 1) + datetime.timedelta(-1)
|
||||
|
||||
def get_datetime(datetime_str):
|
||||
try:
|
||||
return datetime.datetime.strptime(datetime_str, DATETIME_FORMAT)
|
||||
|
||||
except TypeError:
|
||||
if isinstance(datetime_str, datetime.datetime):
|
||||
return datetime_str.replace(tzinfo=None)
|
||||
else:
|
||||
raise
|
||||
|
||||
except ValueError:
|
||||
if datetime_str=='0000-00-00 00:00:00.000000':
|
||||
return None
|
||||
|
||||
return datetime.datetime.strptime(datetime_str, '%Y-%m-%d %H:%M:%S')
|
||||
|
||||
|
||||
def get_time(time_str):
|
||||
if isinstance(time_str, datetime.datetime):
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue