Skip to content
4 changes: 3 additions & 1 deletion extscheduler/resources/views/weeklyScheduler.html
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ <h3>My Events</h3>
}
else
{
var schedulerAppLink = LABKEY.ActionURL.buildURL('extscheduler', 'weeklyTest', null, {
// var schedulerAppLink = LABKEY.ActionURL.buildURL('extscheduler', 'weeklyTest', null, {
var schedulerAppLink = LABKEY.ActionURL.buildURL('extscheduler', 'weekly_Radiology', null, {
returnUrl: window.location.pathname + window.location.search
});
Ext4.get('launch-link').update('<a class="launch-button" href="' + schedulerAppLink + '">Launch Scheduler</a>');
Expand Down Expand Up @@ -75,6 +76,7 @@ <h3>My Events</h3>
items: [
{boxLabel: 'All', name: 'timeframe', inputValue: 'All', checked: true},
{boxLabel: 'Previous', name: 'timeframe', inputValue: 'Previous'},

{boxLabel: 'Upcoming', name: 'timeframe', inputValue: 'Upcoming'}
],
listeners: {
Expand Down
165 changes: 165 additions & 0 deletions extscheduler/resources/views/weekly_Radiology.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">

<!-- Ext and ux styles -->
<link href="/ExtScheduler/weekview/resources/css/theme-triton/resources/theme-triton-all.css" rel="stylesheet" type="text/css"/>
<!--<link href="/ExtScheduler/css/theme-triton-all.css" rel="stylesheet" type="text/css"/>-->

<!-- Scheduler styles -->
<link href="/ExtScheduler/weekview/resources/css/sch-all-triton.css?ver=4.2.1" rel="stylesheet" type="text/css" />
<!--<link href="/ExtScheduler/css/sch-all-triton.css" rel="stylesheet" type="text/css" />-->

<!-- Ext JS includes -->
<script src="/ExtScheduler/resources/extJs/ext-all.js" type="text/javascript" nonce="<%=scriptNonce%>"></script>
<!--<script src="/ExtScheduler/js/ext-all-debug.js" type="text/javascript" nonce="<%=scriptNonce%>"></script>-->
<script src="/ExtScheduler/weekview/resources/css/theme-triton/theme-triton.js" crossorigin="anonymous" type="text/javascript" nonce="<%=scriptNonce%>"></script>
<!--<script src="/ExtScheduler/js/theme-triton-debug.js" crossorigin="anonymous" type="text/javascript" nonce="<%=scriptNonce%>"></script>-->

<!-- Scheduler files -->
<script src="/ExtScheduler/resources/extJs/sch-all.js?ver=4.2.1" type="text/javascript" nonce="<%=scriptNonce%>"></script>
<!--<script src="/ExtScheduler/js/sch-all-debug.js" type="text/javascript" nonce="<%=scriptNonce%>"></script>-->

<title>Scheduler Week View</title>
</head>
<body>
<script type="text/javascript" nonce="<%=scriptNonce%>">
Ext.onReady(function ()
{
var initScheduler = function()
{
Ext.application({
name : 'App',
mainView : 'App.view.Viewport',
paths : {
'App': LABKEY.contextPath + '/extscheduler/App'
},
views : [
'EventForm',
'Header',
'InfoPanel',
'NavigationBar',
'ResourceCombo',
'Resources',
'SchedulerRadiology',
'Viewport'
]
});
};


var queryStoreData = function()
{
var resourceStore = null, eventStore = null, userStore = null;

// query to get the resource store data
LABKEY.Query.selectRows({
schemaName: 'extscheduler',
queryName: 'Resources',
columns: 'Id,Name,Color,Room,Bldg',
success: function(data) {
resourceStore = Ext.create('Sch.data.ResourceStore', {
model : 'Sch.model.Resource',
storeId : 'resource', // referenced by this store id in Scheduler.js, ResourceCombo.js, etc.
sorters : {
property : 'Name',
direction : "ASC"
},
data: data.rows
});

// only initialize the scheduler when all stores have loaded
if (eventStore != null && userStore != null) {
initScheduler();
}
}
});

// query to get the event store data
LABKEY.Query.selectRows({
schemaName: 'extscheduler',
queryName: 'Events',
columns: 'Id,ResourceId,Name,StartDate,EndDate,UserId,Alias,Owner,Comments,Quantity',
success: function(data){

// need to convert the date fields from a string to JS Date object
Ext.each(data.rows, function(row){
row.StartDate = new Date(row.StartDate);
row.EndDate = new Date(row.EndDate);
});

eventStore = Ext.create('Sch.data.EventStore', {
model : 'Sch.model.Event',
storeId : 'event', // referenced by this store id in Scheduler.js, etc.
data : data.rows
});

// only initialize the scheduler when all stores have loaded
if (resourceStore != null && userStore != null) {
initScheduler();
}
}
});

// query to get the Ext Scheduler users store data
LABKEY.Ajax.request({
url: LABKEY.ActionURL.buildURL('extscheduler', 'getSchedulerGroupMembers.api'),
method: 'POST',
success: function (response) {
var data = Ext.JSON.decode(response.responseText);

if (!data.success && data.msg)
{
data.rows = [];
Ext.Msg.alert('Error', data.msg);
}
else if (data.success && data.rows.length == 0)
{
Ext.Msg.alert('Error', 'No users found in the configured Scheduler user group. Please contact '
+ 'an administrator to verify that the Scheduler user group is configured correctly.');
}

Ext.define('User', {
extend: 'Ext.data.Model',

fields: [
{name: 'UserId', type: 'int'},
{name: 'LastName', type: 'string'},
{name: 'FirstName', type: 'string'},
{name: 'DisplayName', type: 'string'},
{
name: 'FullName',
convert: function(v, record) {
if (record.get('LastName') == null || record.get('LastName') == '')
return record.get('DisplayName');
else
return record.get('LastName') + ', ' + record.get('FirstName');
}
}
]
});

userStore = Ext.create('Ext.data.Store', {
storeId : 'users', // referenced by this store id in InfoPanel.js
model: 'User',
sorters : {
property : 'FullName',
direction : "ASC"
},
data : data.rows
});

// only initialize the scheduler when all stores have loaded
if (resourceStore != null && eventStore != null) {
initScheduler();
}
}
});
};

queryStoreData();
});
</script>
</body>
</html>
6 changes: 6 additions & 0 deletions extscheduler/resources/views/weekly_Radiology.view.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<view xmlns="http://labkey.org/data/xml/view" template="app" frame="none" title="Scheduler - Week View">
<dependencies>
<dependency path="clientapi_core"/>
<dependency path="extscheduler/css/weeklyview.css"/>
</dependencies>
</view>
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
Ext.define('App.view.SchedulerRadiology', {
extend : 'Sch.panel.SchedulerGrid',
alias : 'widget.schedulerRadiology',
reference : 'schedulerRadiology',
startDate : new Date(),
//endDate : new Date(),
startTime : 6,
endTime : 20,
resourceStore : 'resource',
eventStore : 'event',
style : 'border: 1px solid #d0d0d0;',

readOnly : true, // disables the ability to click in calendar to create event
showTodayLine : true,
calendarViewPreset : 'week',
mode : 'calendar',
eventResizeHandles : 'none',
eventBodyTemplate :'<b>{Name:htmlEncode}</b><br/>{ResourceName:htmlEncode}<br/>{UserDisplayName:htmlEncode}<br/>{Comments:htmlEncode}',
snapToIncrement : true,
allowOverlap : true,
highlightCurrentTime : true,
calendarTimeAxisCfg : {
height : 30
},

tbar: [
{
text : 'Previous',
iconCls: 'x-fa fa-arrow-circle-left',
handler: function (btn) {
var scheduler = btn.up('schedulerRadiology');
scheduler.timeAxis.shift(-7, Sch.util.Date.DAY);
}
},
{
text : 'Today',
handler: function (btn) {
var scheduler = btn.up('schedulerRadiology');
// Clear time here so date adjustment wouldn't result in 2 days span
scheduler.setStart(Sch.util.Date.clearTime(new Date()));
}
},
{
text : 'Next',
iconCls: 'x-fa fa-arrow-circle-right',
iconAlign: 'right',
handler: function (btn) {
var scheduler = btn.up('schedulerRadiology');
scheduler.timeAxis.shift(7, Sch.util.Date.DAY);
}
},
'',
{
text : 'Select Date...',
scope : this,
menu : Ext.create('Ext.menu.DatePicker', {
handler : function (dp, date) {
var scheduler = dp.up('schedulerRadiology');
scheduler.setStart(Sch.util.Date.clearTime(date));
}
})
}, '->',
{
text : 'Create New Event',
iconCls: 'x-fa fa-plus-circle',
hidden: !LABKEY.user.canInsert,
scope: this,
handler: function (btn) {
var scheduler = btn.up('schedulerRadiology');

Ext.create('Ext.window.Window', {
title : 'Create New Event',
autoShow : true,
modal : true,
items : [{
xtype: 'eventform',
editable : true,
scheduler : scheduler
}]
});
}
}
],

eventRenderer : function (event, resource, data) {
data.style = 'border-color:' + resource.get('Color');
event.data['ResourceName'] = resource.get('Name');
var userRecord = Ext.getStore('users').findRecord('UserId', event.get('UserId'));
event.data['UserDisplayName'] = userRecord != null ? userRecord.get('DisplayName') : event.get('UserId');
return event.data;
},

onEventCreated : function (newEventRecord) {
this.getEventSelectionModel().select(newEventRecord);
}
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
//This viewport takes a role of container that contains a scheduler.
//If you need more than one scheduler on the page, you need to wrap viewport items in your own view.
Ext.define('App.view.ViewportRadiology', {
extend : 'Ext.Viewport',
requires : [
'App.view.ViewportController'
],
controller : 'viewport',
viewModel : {},
layout : 'border',
items : [
{
xtype : 'navigationbar',
region : 'north'
},
{
xtype : 'appheader',
region : 'north'
},
{
xtype : 'infopanel',
region : 'east'
},
{
xtype : 'schedulerRadiology',
region : 'center'
}
]
});
2 changes: 2 additions & 0 deletions onprc_ehr/resources/queries/study/clinremarks/.qview.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
<column name="performedby"/>
<column name="category"/>
<column name="taskid" />
<column name="category" />

</columns>
<sorts>
<sort column="date" descending="true"/>
Expand Down