r5291 - in branches/bmas-staging: data/schema/mysql lib/org/freemedsoftware/api lib/org/freemedsoftware/module ui/gwt/src/org/freemedsoftware/gwt ui/gwt/src/org/freemedsoftware/gwt/client/screen ui/gwt/src/org/freemedsoftware/gwt/client/widget

0 views
Skip to first unread message

subve...@svn.freemedsoftware.org

unread,
Mar 12, 2010, 11:42:08 AM3/12/10
to freemed-d...@googlegroups.com
Author: hamid
Date: 2010-03-12 11:42:07 -0500 (Fri, 12 Mar 2010)
New Revision: 5291

Added:
branches/bmas-staging/data/schema/mysql/scheduler_block_slots.sql
branches/bmas-staging/lib/org/freemedsoftware/module/SchedulerBlockSlots.class.php
Modified:
branches/bmas-staging/lib/org/freemedsoftware/api/Scheduler.class.php
branches/bmas-staging/lib/org/freemedsoftware/api/UserInterface.class.php
branches/bmas-staging/lib/org/freemedsoftware/module/CalendarGroup.class.php
branches/bmas-staging/lib/org/freemedsoftware/module/ProviderGroups.class.php
branches/bmas-staging/ui/gwt/src/org/freemedsoftware/gwt/FreemedInterface.gwt.xml
branches/bmas-staging/ui/gwt/src/org/freemedsoftware/gwt/client/screen/CallInScreen.java
branches/bmas-staging/ui/gwt/src/org/freemedsoftware/gwt/client/screen/MessagingScreen.java
branches/bmas-staging/ui/gwt/src/org/freemedsoftware/gwt/client/screen/UserManagementScreen.java
branches/bmas-staging/ui/gwt/src/org/freemedsoftware/gwt/client/widget/MessageView.java
branches/bmas-staging/ui/gwt/src/org/freemedsoftware/gwt/client/widget/SchedulerWidget.java
Log:
* [FreeMED - Feature #104] (Resolved) Need a "New Message" button?\226?\128?\143
* [FreeMED - Bug #98] (Resolved) User Account - Password reset?\226?\128?\143
* [FreeMED - Bug #76] (Resolved) Scheduler - Block time slot(s)?\226?\128?\143

Added: branches/bmas-staging/data/schema/mysql/scheduler_block_slots.sql
===================================================================
--- branches/bmas-staging/data/schema/mysql/scheduler_block_slots.sql (rev 0)
+++ branches/bmas-staging/data/schema/mysql/scheduler_block_slots.sql 2010-03-12 16:42:07 UTC (rev 5291)
@@ -0,0 +1,55 @@
+# $Id$
+#
+# Authors:
+# Jeff Buchbinder <je...@freemedsoftware.org>
+#
+# FreeMED Electronic Medical Record and Practice Management System
+# Copyright (C) 1999-2010 FreeMED Software Foundation
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+CREATE TABLE IF NOT EXISTS `scheduler_block_slots` (
+ sbshour INT UNSIGNED NOT NULL,
+ sbsminute INT UNSIGNED NOT NULL,
+ sbsduration INT UNSIGNED NOT NULL,
+ sbsprovider INT UNSIGNED NOT NULL,
+ sbsprovidergroup INT UNSIGNED NOT NULL,
+ stamp TIMESTAMP (14) NOT NULL DEFAULT NOW(),
+ user INT UNSIGNED NOT NULL,
+ id SERIAL,
+ #keys
+ PRIMARY KEY(id)
+);
+
+DROP PROCEDURE IF EXISTS scheduler_block_slots_Upgrade;
+DELIMITER //
+CREATE PROCEDURE scheduler_block_slots_Upgrade ( )
+BEGIN
+ DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;
+
+ #----- Remove triggers
+ DROP TRIGGER scheduler_block_slotsDelete;
+ DROP TRIGGER scheduler_block_slotsInsert;
+ DROP TRIGGER scheduler_block_slotsUpdate;
+
+ #----- Upgrades
+ CALL FreeMED_Module_GetVersion( 'scheduler_block_slots', @V );
+
+ CALL FreeMED_Module_UpdateVersion( 'scheduler', 1 );
+END
+//
+DELIMITER ;
+CALL scheduler_block_slots_Upgrade( );
+


Property changes on: branches/bmas-staging/data/schema/mysql/scheduler_block_slots.sql
___________________________________________________________________
Added: svn:keywords
+ Id Author Revision Date
Added: svn:eol-style
+ native

Modified: branches/bmas-staging/lib/org/freemedsoftware/api/Scheduler.class.php
===================================================================
--- branches/bmas-staging/lib/org/freemedsoftware/api/Scheduler.class.php 2010-03-12 09:58:40 UTC (rev 5290)
+++ branches/bmas-staging/lib/org/freemedsoftware/api/Scheduler.class.php 2010-03-12 16:42:07 UTC (rev 5291)
@@ -1061,6 +1061,45 @@
}
} // end method next_available

+ // Method: canBookAppointment
+ //
+ // checks blocked time slots against provider and return a boolean identifying
+ //
+ // Parameters:
+ //
+ // $providerId - provider id of current appointment
+ //
+ // $starthour - start hour of new appointment
+ // $startmin - start hour of new appointment
+ // $duration - duration of new appointment
+ //
+ // Returns:
+ //
+ // true - if slot is available
+ // false - if slot is blocked
+ //
+
+ public function canBookAppointment($providerId,$starthour,$startmin,$duration){
+ freemed::acl_enforce( 'scheduling', 'book' );
+ $schedulerBlockSlots = CreateObject('org.freemedsoftware.module.SchedulerBlockSlots');
+ $blockTimeSlots = $schedulerBlockSlots->GetBlockedTimeSlots($providerId);
+
+ $startTimeStamp = strtotime($starthour.":".$startmin.":00");
+ $startTime = date('H:i:s',$startTimeStamp);
+ $endTime = date('H:i:s', strtotime("+$duration minutes", $startTimeStamp));
+
+ foreach($blockTimeSlots as $slot){
+ $newStartTimeStamp = strtotime($slot['sbshour'].":".$slot['sbsminute'].":00");
+ $newStartTime = date('H:i:s',$newStartTimeStamp);
+ $newDuration = $slot['sbsduration'];
+ $newEndTime = date('H:i:s', strtotime("+$newDuration minutes", $newStartTimeStamp));
+ if(($startTime>=$newStartTime && $startTime<$newEndTime) || ($endTime>=$newStartTime && $endTime<$newEndTime)){
+ return false;
+ }
+ }
+ return true;
+ }
+
// Method: next_time_increment
//
// Increment time slot by 5 minutes.
@@ -1183,6 +1222,7 @@
// Pass the group key back to FreeMED
return $key;
} // end method SetGroupAppointment
+
public function set_group_appointment ( $patients, $data ) { return $this->SetGroupAppointment ( $patients, $data ); }

// Method: set_recurring_appointment

Modified: branches/bmas-staging/lib/org/freemedsoftware/api/UserInterface.class.php
===================================================================
--- branches/bmas-staging/lib/org/freemedsoftware/api/UserInterface.class.php 2010-03-12 09:58:40 UTC (rev 5290)
+++ branches/bmas-staging/lib/org/freemedsoftware/api/UserInterface.class.php 2010-03-12 16:42:07 UTC (rev 5291)
@@ -326,7 +326,8 @@
// Protect admin user
if ( $ourdata['id'] + 0 == 1 ) { return false; }
$tempVariables = $this->variables;
- unset($tempVariables[1]);
+ if(!$data['userpassword']) // remove password from variables if no need to change the password
+ unset($tempVariables[1]);
$this->mod_pre( &$ourdata );
$GLOBALS['sql']->load_data( $ourdata );
$result = $GLOBALS['sql']->query($GLOBALS['sql']->update_query (

Modified: branches/bmas-staging/lib/org/freemedsoftware/module/CalendarGroup.class.php
===================================================================
--- branches/bmas-staging/lib/org/freemedsoftware/module/CalendarGroup.class.php 2010-03-12 09:58:40 UTC (rev 5290)
+++ branches/bmas-staging/lib/org/freemedsoftware/module/CalendarGroup.class.php 2010-03-12 16:42:07 UTC (rev 5291)
@@ -54,9 +54,6 @@

protected function add_pre ( &$data ) {
} // end method add_pre
-
- protected function del_pre ( &$data ) {
- } // end method del_pre

// Method: GetAll
//

Modified: branches/bmas-staging/lib/org/freemedsoftware/module/ProviderGroups.class.php
===================================================================
--- branches/bmas-staging/lib/org/freemedsoftware/module/ProviderGroups.class.php 2010-03-12 09:58:40 UTC (rev 5290)
+++ branches/bmas-staging/lib/org/freemedsoftware/module/ProviderGroups.class.php 2010-03-12 16:42:07 UTC (rev 5291)
@@ -87,7 +87,20 @@
$arr= explode(",",$result['provs']);
return $arr;
}
+ // Method: getGroupIds
+ //
+ // Get array of all group ids in which provider exists.
+ //
+ // Returns:
+ //
+ // array of Hashes.
+ public function getGroupIds($providerId)
+ {
+ $q="select id from phygroup where find_in_set(".$GLOBALS['sql']->quote( $providerId ).",phygroupidmap)";
+ return $GLOBALS['sql']->queryAll ($q );;
+ }

+
} // end class ProviderGroups

register_module ("ProviderGroups");

Added: branches/bmas-staging/lib/org/freemedsoftware/module/SchedulerBlockSlots.class.php
===================================================================
--- branches/bmas-staging/lib/org/freemedsoftware/module/SchedulerBlockSlots.class.php (rev 0)
+++ branches/bmas-staging/lib/org/freemedsoftware/module/SchedulerBlockSlots.class.php 2010-03-12 16:42:07 UTC (rev 5291)
@@ -0,0 +1,103 @@
+<?php
+ // $Id$
+ //
+ // Authors:
+ // Jeff Buchbinder <je...@freemedsoftware.org>
+ //
+ // FreeMED Electronic Medical Record and Practice Management System
+ // Copyright (C) 1999-2010 FreeMED Software Foundation
+ //
+ // This program is free software; you can redistribute it and/or modify
+ // it under the terms of the GNU General Public License as published by
+ // the Free Software Foundation; either version 2 of the License, or
+ // (at your option) any later version.
+ //
+ // This program is distributed in the hope that it will be useful,
+ // but WITHOUT ANY WARRANTY; without even the implied warranty of
+ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ // GNU General Public License for more details.
+ //
+ // You should have received a copy of the GNU General Public License
+ // along with this program; if not, write to the Free Software
+ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+LoadObjectDependency('org.freemedsoftware.core.SupportModule');
+
+class SchedulerBlockSlots extends SupportModule {
+
+ var $MODULE_NAME = "Scheduler Block Slots";
+ var $MODULE_VERSION = "0.1";
+ var $MODULE_FILE = __FILE__;
+ var $MODULE_UID = "d2593fd4-d2c5-408e-b107-2c524ae44a9c";
+ var $MODULE_HIDDEN = true;
+
+ var $PACKAGE_MINIMUM_VERSION = '0.1';
+
+ var $table_name = "scheduler_block_slots";
+
+ var $variables = array (
+ 'sbshour',
+ 'sbsminute',
+ 'sbsduration',
+ 'sbsprovider',
+ 'sbsprovidergroup',
+ 'user'
+ );
+
+ public function __construct ( ) {
+ // __("Call-in Patients")
+
+ // Call parent constructor
+ parent::__construct();
+ } // end constructor Callin
+
+ protected function add_pre ( &$data ) {
+ unset($data['stamp']);
+ $data['user'] = freemed::user_cache()->user_number;
+ } // end method add_pre
+
+ // Method: GetAll
+ //
+ // Get array of all groups records.
+ //
+ // Returns:
+ //
+ // array of Hashes.
+ public function GetAll () {
+ freemed::acl_enforce( 'admin', 'menu' );
+ $q = "select sbs.id, sbs.sbshour as starthour,sbs.sbsminute as startmin,sbs.sbsduration as duration,".
+ "sbs.sbsprovider,sbs.sbsprovidergroup,sbs.stamp as entered_on,u.userdescrip as entered_by,".
+ "concat(p.phylname,' ,',p.phyfname,' ',p.phymname) as provider,pg.phygroupname as provider_group ".
+ "from scheduler_block_slots sbs ".
+ "left join physician p on p.id = sbs.sbsprovider ".
+ "left join phygroup pg on pg.id = sbs.sbsprovidergroup ".
+ "left join user u on u.id = sbs.user";
+ return $GLOBALS['sql']->queryAll( $q );
+ } // end method GetAll
+
+ // Method: GetBlockTimings
+ //
+ // Get array of all group records.
+ //
+ // Returns:
+ //
+ // array of Hashes.
+ public function GetBlockedTimeSlots ($providerid) {
+
+ freemed::acl_enforce( 'scheduling', 'book' );
+
+ $providerGroups = CreateObject('org.freemedsoftware.module.ProviderGroups');
+ $providerGroupsIds = $providerGroups->getGroupIds($providerid);
+
+ $q = "select sbshour,sbsminute,sbsduration from scheduler_block_slots where sbsprovider=".$GLOBALS['sql']->quote( $providerid );
+ foreach($providerGroupsIds as $ids){
+ $q = $q . " or sbsprovidergroup = ".$ids['id'] ;
+ }
+ return $GLOBALS['sql']->queryAll( $q );
+ } // end method GetAll
+
+}
+
+register_module('SchedulerBlockSlots');
+
+?>


Property changes on: branches/bmas-staging/lib/org/freemedsoftware/module/SchedulerBlockSlots.class.php
___________________________________________________________________
Added: svn:keywords
+ Id Author Revision Date
Added: svn:eol-style
+ native

Modified: branches/bmas-staging/ui/gwt/src/org/freemedsoftware/gwt/FreemedInterface.gwt.xml
===================================================================
--- branches/bmas-staging/ui/gwt/src/org/freemedsoftware/gwt/FreemedInterface.gwt.xml 2010-03-12 09:58:40 UTC (rev 5290)
+++ branches/bmas-staging/ui/gwt/src/org/freemedsoftware/gwt/FreemedInterface.gwt.xml 2010-03-12 16:42:07 UTC (rev 5291)
@@ -44,8 +44,11 @@

<entry-point class="org.freemedsoftware.gwt.client.FreemedInterface" />

- <stylesheet src="../resources/stylesheet.css" />
<stylesheet src="../resources/SortableTable.css" />
<stylesheet src="../resources/ScrollTable.css" />

+ <set-property name="user.agent" value="gecko1_8"/>
+
+
+
</module>

Modified: branches/bmas-staging/ui/gwt/src/org/freemedsoftware/gwt/client/screen/CallInScreen.java
===================================================================
--- branches/bmas-staging/ui/gwt/src/org/freemedsoftware/gwt/client/screen/CallInScreen.java 2010-03-12 09:58:40 UTC (rev 5290)
+++ branches/bmas-staging/ui/gwt/src/org/freemedsoftware/gwt/client/screen/CallInScreen.java 2010-03-12 16:42:07 UTC (rev 5291)
@@ -912,7 +912,7 @@
msg += "Please specify date of birth." + "\n";
}

- if (msg != "") {
+ if (!msg.equals("")) {
Window.alert(msg);
return false;
}

Modified: branches/bmas-staging/ui/gwt/src/org/freemedsoftware/gwt/client/screen/MessagingScreen.java
===================================================================
--- branches/bmas-staging/ui/gwt/src/org/freemedsoftware/gwt/client/screen/MessagingScreen.java 2010-03-12 09:58:40 UTC (rev 5290)
+++ branches/bmas-staging/ui/gwt/src/org/freemedsoftware/gwt/client/screen/MessagingScreen.java 2010-03-12 16:42:07 UTC (rev 5291)
@@ -45,7 +45,6 @@
import org.freemedsoftware.gwt.client.widget.CustomTable;
import org.freemedsoftware.gwt.client.widget.MessageView;
import org.freemedsoftware.gwt.client.widget.Popup;
-import org.freemedsoftware.gwt.client.widget.Toaster;
import org.freemedsoftware.gwt.client.widget.CustomTable.TableRowClickHandler;
import org.freemedsoftware.gwt.client.widget.CustomTable.TableWidgetColumnSetInterface;

Modified: branches/bmas-staging/ui/gwt/src/org/freemedsoftware/gwt/client/screen/UserManagementScreen.java
===================================================================
--- branches/bmas-staging/ui/gwt/src/org/freemedsoftware/gwt/client/screen/UserManagementScreen.java 2010-03-12 09:58:40 UTC (rev 5290)
+++ branches/bmas-staging/ui/gwt/src/org/freemedsoftware/gwt/client/screen/UserManagementScreen.java 2010-03-12 16:42:07 UTC (rev 5291)
@@ -39,7 +39,6 @@
import org.freemedsoftware.gwt.client.widget.CustomListBox;
import org.freemedsoftware.gwt.client.widget.CustomTable;
import org.freemedsoftware.gwt.client.widget.SupportModuleWidget;
-import org.freemedsoftware.gwt.client.widget.Toaster;
import org.freemedsoftware.gwt.client.widget.CustomTable.TableRowClickHandler;

import com.google.gwt.core.client.GWT;
@@ -54,11 +53,11 @@
import com.google.gwt.http.client.Response;
import com.google.gwt.http.client.URL;
import com.google.gwt.json.client.JSONParser;
-import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.FlexTable;
+import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PasswordTextBox;
@@ -77,6 +76,8 @@
protected TextBox tbUsername,tbDescription;

protected PasswordTextBox tbPassword,tbPasswordverify;
+
+ protected HTML changePasswordLink;

protected CustomListBox lbUserType;

@@ -144,10 +145,35 @@
final Label passwordverifyLabel = new Label("Password (Verify)");
userAddTable.setWidget(2, 0, passwordverifyLabel);

+ final HorizontalPanel horizontalPanel = new HorizontalPanel();
+ userAddTable.setWidget(2, 1, horizontalPanel);
+
tbPasswordverify = new PasswordTextBox();
- userAddTable.setWidget(2, 1, tbPasswordverify);
+ tbPasswordverify.setWidth("10em");
+ horizontalPanel.add(tbPasswordverify);
+
+ final String changePassString = "<a href='javascript:undefined'> change password </a>";
+ final String donotChangePassString = "<a href='javascript:undefined'>don't change password </a>";
+ changePasswordLink = new HTML(changePassString);
+ changePasswordLink.setVisible(false);
+ changePasswordLink.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent arg0) {
+ if(tbPassword.isEnabled()){
+ tbPassword.setEnabled(false);
+ tbPasswordverify.setEnabled(false);
+ changePasswordLink.setHTML(changePassString);
+ }else{
+ tbPassword.setEnabled(true);
+ tbPasswordverify.setEnabled(true);
+ changePasswordLink.setHTML(donotChangePassString);
+ }
+ }
+ });
+ horizontalPanel.add(changePasswordLink);
+
userAddTable.getFlexCellFormatter().setColSpan(2, 1, 2);
- tbPasswordverify.setWidth("10em");
+

final Label descriptionLabel = new Label("Description");
userAddTable.setWidget(3, 0, descriptionLabel);
@@ -261,7 +287,7 @@
}

hm.put("username", tbUsername.getText());
- if(userId==null)
+ if(tbPassword.isEnabled())
hm.put("userpassword", tbPassword.getText());

hm.put("userdescrip", tbDescription.getText());
@@ -433,6 +459,7 @@
tbPassword.setText("");
tbPasswordverify.setEnabled(true);
tbPasswordverify.setText("");
+ changePasswordLink.setVisible(false);
tbDescription.setText("");
lbUserType.setWidgetValue("null");
lbActualPhysician.clear();
@@ -569,6 +596,7 @@
}
}catch(Exception e){JsonUtil.debug("user real physician not found"+userId);}
addUserButton.setText("Modify User");
+ changePasswordLink.setVisible(true);
tbPassword.setEnabled(false);
tbPasswordverify.setEnabled(false);
deleteUserButton.setVisible(true);

Modified: branches/bmas-staging/ui/gwt/src/org/freemedsoftware/gwt/client/widget/MessageView.java
===================================================================
--- branches/bmas-staging/ui/gwt/src/org/freemedsoftware/gwt/client/widget/MessageView.java 2010-03-12 09:58:40 UTC (rev 5290)
+++ branches/bmas-staging/ui/gwt/src/org/freemedsoftware/gwt/client/widget/MessageView.java 2010-03-12 16:42:07 UTC (rev 5291)
@@ -125,7 +125,7 @@
messagingComposeScreen.setPatient(msgPatientId);
messagingComposeScreen.setBodyText(createMessageBody());
messagingComposeScreen.setParentScreen(getMessagingScreen());
- Util.spawnTab("Messages", messagingComposeScreen);
+ Util.spawnTab("Messages:RE", messagingComposeScreen);
if (onClose != null) {
onClose.execute();
}
@@ -157,18 +157,48 @@
messagingComposeScreen.setBodyText(createMessageBody());
messagingComposeScreen.setPatient(msgPatientId);
messagingComposeScreen.setParentScreen(getMessagingScreen());
- Util.spawnTab("Messages", messagingComposeScreen);
+ Util.spawnTab("Messages:FW", messagingComposeScreen);
if (onClose != null) {
onClose.execute();
}
}
});
horizontalPanel.add(forwardWrapper);
+
+ // New Button
+
+ final Image newMsgButton = new Image(
+ "resources/images/messaging.32x32.png");
+ final Label newMsgLabel = new Label("New");
+ VerticalPanel newMsgVerticalPanel = new VerticalPanel();
+ newMsgVerticalPanel.add(newMsgButton);
+ newMsgVerticalPanel.add(newMsgLabel);
+ newMsgVerticalPanel
+ .setStylePrimaryName("freemed-MessageView-verticalPanelButton");
+ final FocusPanel newMsgWrapper = new FocusPanel();
+ newMsgWrapper.add(newMsgVerticalPanel);
+ newMsgWrapper.setStylePrimaryName("freemed-MessageView-buttonWrapper");
+
+ newMsgWrapper.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent evt) {
+ // TODO: create that
+// Window.alert("Forward");
+ MessagingComposeScreen messagingComposeScreen = new MessagingComposeScreen();
+ messagingComposeScreen.setParentScreen(getMessagingScreen());
+ Util.spawnTab("Compose Message", messagingComposeScreen);
+ if (onClose != null) {
+ onClose.execute();
+ }
+ }
+ });
+ horizontalPanel.add(newMsgWrapper);

+
// Print Button

final Image printButton = new Image(
- "resources/images/messaging.32x32.png");
+ "resources/images/ico.printer.32x32.png");
final Label printLabel = new Label("Print");
VerticalPanel printVerticalPanel = new VerticalPanel();
printVerticalPanel.add(printButton);

Modified: branches/bmas-staging/ui/gwt/src/org/freemedsoftware/gwt/client/widget/SchedulerWidget.java
===================================================================
--- branches/bmas-staging/ui/gwt/src/org/freemedsoftware/gwt/client/widget/SchedulerWidget.java 2010-03-12 09:58:40 UTC (rev 5290)
+++ branches/bmas-staging/ui/gwt/src/org/freemedsoftware/gwt/client/widget/SchedulerWidget.java 2010-03-12 16:42:07 UTC (rev 5291)
@@ -37,6 +37,7 @@

import org.cobogw.gwt.user.client.ui.RoundedPanel;
import org.freemedsoftware.gwt.client.CurrentState;
+import org.freemedsoftware.gwt.client.CustomRequestCallback;
import org.freemedsoftware.gwt.client.JsonUtil;
import org.freemedsoftware.gwt.client.Util;
import org.freemedsoftware.gwt.client.WidgetInterface;
@@ -45,6 +46,7 @@
import org.freemedsoftware.gwt.client.screen.PatientScreen;
import org.freemedsoftware.gwt.client.screen.PatientsGroupScreen;
import org.freemedsoftware.gwt.client.widget.CustomTable.TableRowClickHandler;
+import org.freemedsoftware.gwt.client.widget.CustomTable.TableWidgetColumnSetInterface;

import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Document;
@@ -1062,43 +1064,75 @@
+ (CurrentState.BREAK_HOUR + 1) + ":00) !");
return;
}
-
- if (data == null) {
- data = new EventData();
+ List paramsList = new ArrayList();
+ paramsList.add(provider.getStoredValue());
+ Calendar calstart = new GregorianCalendar();
+ calstart.setTime(start.getValue(new Date()));
+ paramsList.add(calstart.get(Calendar.HOUR_OF_DAY));
+ paramsList.add(calstart.get(Calendar.MINUTE));
+
+ Calendar calend = new GregorianCalendar();
+ calstart.setTime(end.getValue(new Date()));
+
+ Integer dur = (calend.get(Calendar.HOUR) - calstart.get(Calendar.HOUR));
+ if (dur < 0) {
+ dur = dur + 24;
}
- if (wholeDay.getValue()) {
- data.setStartTime(date.getValue());
- } else {
- data.setStartTime(start.getValue(date.getValue()));
- data.setEndTime(end.getValue(date.getValue()));
- }
- data.setDescription(text.getText());
- data.setProviderName(provider.getText());
- data.setProviderId(provider.getValue());
- if (patient != null) {
- data.setPatientName(patient.getText());
- JsonUtil.debug("patient name = " + patient.getText());
- data.setPatientId(patient.getValue());
- } else {
- data.setPatientName(supportWidget.getText());
- JsonUtil.debug("resource name = "
- + supportWidget.getText());
- data.setPatientId(supportWidget.getValue());
- }
-
- if (Util.isNumber(selectTemplate.getWidgetValue()))
- data.setAppointmentTemplateId(Integer
- .parseInt(selectTemplate.getWidgetValue()));
-
- data.setData(((data.getPatientId() != null && data
- .getPatientId() > 0) ? data.getPatientName() + ": "
- : "")
- + data.getDescription());
- final DateEvent newEvent = new DateEvent(this, data);
-
- newEvent.setCommand(command);
- listener.handleDateEvent(newEvent);
- hide();
+ dur = (dur * 60)
+ + (calend.get(Calendar.MINUTE) - calstart.get(Calendar.MINUTE));
+ paramsList.add(dur);
+ Util.callApiMethod("Scheduler", "canBookAppointment", paramsList, new CustomRequestCallback() {
+
+ @Override
+ public void onError() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void jsonifiedData(Object result) {
+ if(result!=null && ((Boolean)result).booleanValue()){
+ if (data == null) {
+ data = new EventData();
+ }
+ if (wholeDay.getValue()) {
+ data.setStartTime(date.getValue());
+ } else {
+ data.setStartTime(start.getValue(date.getValue()));
+ data.setEndTime(end.getValue(date.getValue()));
+ }
+ data.setDescription(text.getText());
+ data.setProviderName(provider.getText());
+ data.setProviderId(provider.getValue());
+ if (patient != null) {
+ data.setPatientName(patient.getText());
+ JsonUtil.debug("patient name = " + patient.getText());
+ data.setPatientId(patient.getValue());
+ } else {
+ data.setPatientName(supportWidget.getText());
+ JsonUtil.debug("resource name = "
+ + supportWidget.getText());
+ data.setPatientId(supportWidget.getValue());
+ }
+
+ if (Util.isNumber(selectTemplate.getWidgetValue()))
+ data.setAppointmentTemplateId(Integer
+ .parseInt(selectTemplate.getWidgetValue()));
+
+ data.setData(((data.getPatientId() != null && data
+ .getPatientId() > 0) ? data.getPatientName() + ": "
+ : "")
+ + data.getDescription());
+ final DateEvent newEvent = new DateEvent(getStringEventDataDialog(), data);
+
+ newEvent.setCommand(command);
+ listener.handleDateEvent(newEvent);
+ hide();
+ }else if(result!=null)
+ Util.showErrorMsg("Schedular", "This time slot is blocked by given provider!");
+ }
+
+ }, "Boolean");
} else {
if (sender == cancel) {
hide();
@@ -1117,6 +1151,10 @@
}
}

+ protected StringEventDataDialog getStringEventDataDialog(){
+ return this;
+ }
+
protected void toggleButton() {
if (text.getText().length() > 1
&& (patient != null && patient.getValue() > 0 || supportWidget != null
@@ -1895,9 +1933,10 @@

public class BlockTimeSlotPopup extends DialogBox{

+ private Integer blockTimeId = null;
private TabPanel tabPanel;
- private TimeBox startTime;
- private TimeBox endTime;
+ private CustomTimeBox startTime;
+ private CustomTimeBox endTime;
private ProviderWidget provider;
private SupportModuleWidget providerGroup;
private Button submit;
@@ -1905,6 +1944,8 @@
private Button delete;
private Button cancel;

+ private CustomTable customTable = null;
+
public BlockTimeSlotPopup() {
super();
this.setStylePrimaryName(SchedulerCss.EVENT_DIALOG);
@@ -1921,14 +1962,14 @@

final Label startTimeLabel = new Label("Start Time");
flexTable.setWidget(row, 0, startTimeLabel);
- startTime = new TimeBox();
+ startTime = new CustomTimeBox();
flexTable.setWidget(row, 1, startTime);

row++;

final Label endTimeLabel = new Label("End Time");
flexTable.setWidget(row, 0, endTimeLabel);
- endTime = new TimeBox();
+ endTime = new CustomTimeBox();
flexTable.setWidget(row, 1, endTime);

row++;
@@ -1942,18 +1983,88 @@

final Label groupLabel = new Label("Group");
flexTable.setWidget(row, 0, groupLabel);
- provider = new ProviderWidget();
- flexTable.setWidget(row, 1, provider);
+ providerGroup = new SupportModuleWidget("ProviderGroups");
+ flexTable.setWidget(row, 1, providerGroup);

row++;

final HorizontalPanel buttonPanel = new HorizontalPanel();
flexTable.setWidget(row, 1, buttonPanel);

- submit = new Button("submit");
+ submit = new Button("add");
+ submit.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent arg0) {
+ if(validateForm()){
+ List params = new ArrayList();
+ params.add(populateData());
+ String method = "Add";
+ if(blockTimeId!=null)
+ method = "Mod";
+ Util.callModuleMethod("SchedulerBlockSlots", method, params,new CustomRequestCallback() {
+ @Override
+ public void onError() {
+ if(blockTimeId!=null)
+ Util.showErrorMsg("schedularWidget", "Failed To Add Time Slot.");
+ else
+ Util.showErrorMsg("schedularWidget", "Failed To Modify Time Slot.");
+ }
+ @Override
+ public void jsonifiedData(Object data) {
+ if(data!=null && !(data instanceof Boolean && !((Boolean)data).booleanValue())){
+ if(blockTimeId==null)
+ Util.showInfoMsg("schedularWidget", "Time Slot Added.");
+ else
+ Util.showInfoMsg("schedularWidget", "Time Slot Modified.");
+ clearForm();
+ tabPanel.selectTab(1);
+ retrieveBlockTimeSlots();
+ }
+ else{
+ if(blockTimeId==null)
+ Util.showErrorMsg("schedularWidget", "Failed To Add Time Slot.");
+ else
+ Util.showErrorMsg("schedularWidget", "Failed To Modify Time Slot.");
+ }
+ }
+ }, "Integer");
+ }
+ }
+ });
buttonPanel.add(submit);
clear = new Button("clear");
+ clear.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent arg0) {
+ clearForm();
+ }
+ });
buttonPanel.add(clear);
+ delete = new Button("delete");
+ delete.setVisible(false);
+ delete.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent arg0) {
+ Util.callModuleMethod("SchedulerBlockSlots", "Del", blockTimeId,new CustomRequestCallback() {
+ @Override
+ public void onError() {
+ Util.showErrorMsg("schedularWidget", "Failed To Delete Time Slot.");
+ }
+ @Override
+ public void jsonifiedData(Object data) {
+ if(data!=null && ((Boolean)data).booleanValue()){
+ Util.showInfoMsg("schedularWidget", "Time Slot Deleted.");
+ clearForm();
+ tabPanel.selectTab(1);
+ retrieveBlockTimeSlots();
+ }
+ else
+ Util.showErrorMsg("schedularWidget", "Failed To Delete Time Slot.");
+ }
+ }, "Boolean");
+ }
+ });
+ buttonPanel.add(delete);
cancel = new Button("cancel");
buttonPanel.add(cancel);
cancel.addClickHandler(new ClickHandler() {
@@ -1966,28 +2077,139 @@
tabPanel.add(entryVPanel, "Entry");

final VerticalPanel listVPanel = new VerticalPanel();
- final CustomTable customTable = new CustomTable();
+ customTable = new CustomTable();
listVPanel.add(customTable);

- customTable.addColumn("Start Time", "");
- customTable.addColumn("End Time", "");
- customTable.addColumn("Provider", "");
- customTable.addColumn("Group", "");
-
+ customTable.addColumn("Start Time", "starttime");
+ customTable.addColumn("End Time", "endtime");
+ customTable.addColumn("Provider", "provider");
+ customTable.addColumn("Group", "provider_group");
+ customTable.addColumn("User", "entered_by");
+
customTable.setTableRowClickHandler(new TableRowClickHandler() {
@Override
public void handleRowClick(HashMap<String, String> data, int col) {
+ blockTimeId = Integer.parseInt(data.get("id"));
+ Calendar calStart = new GregorianCalendar();
+ calStart.setTime(new Date());
+ calStart.set(Calendar.HOUR_OF_DAY, Integer.parseInt(data.get("starthour")));
+ calStart.set(Calendar.MINUTE, Integer.parseInt(data.get("startmin")));
+ startTime.setDate(calStart.getTime());
+ calStart.add(Calendar.MINUTE, Integer.parseInt(data.get("duration")));
+ endTime.setDate(calStart.getTime());
+ if(data.get("sbsprovider")!=null)
+ provider.setValue(Integer.parseInt(data.get("sbsprovider")));
+ if(data.get("sbsprovidergroup")!=null)
+ providerGroup.setValue(Integer.parseInt(data.get("sbsprovidergroup")));
+ delete.setVisible(true);
+ submit.setText("modify");
+ tabPanel.selectTab(0);
}
});
+ customTable.setTableWidgetColumnSetInterface(new TableWidgetColumnSetInterface() {
+ public Widget setColumn(String columnName,
+ HashMap<String, String> data) {
+ if(columnName.equals("starttime")){
+ String starthour = data.get("starthour");
+ String startmin = data.get("startmin");
+ starthour = starthour.length()>1? starthour : "0"+starthour;
+ startmin = startmin.length()>1? startmin : "0"+startmin;
+ return new Label(starthour+":"+startmin);
+ }else if(columnName.equals("endtime")){
+ Calendar calendar = new GregorianCalendar();
+ calendar.setTime(new Date());
+ calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(data.get("starthour")));
+ calendar.set(Calendar.MINUTE, Integer.parseInt(data.get("startmin")));
+ calendar.add(Calendar.MINUTE, Integer.parseInt(data.get("duration")));
+
+ String endhour = calendar.get(Calendar.HOUR_OF_DAY)+"";
+ String endmin = calendar.get(Calendar.MINUTE)+"";
+ endhour = endhour.length()>1? endhour : "0"+endhour;
+ endmin = endmin.length()>1? endmin : "0"+endmin;
+
+ return new Label(endhour+":"+endmin);
+ }
+ return null;
+ }
+ });

tabPanel.add(listVPanel, "List");
tabPanel.selectTab(0);

setWidget(tabPanel);
+ retrieveBlockTimeSlots();
}
public BlockTimeSlotPopup geTimeSlotPopup(){
return this;
}
+ public void retrieveBlockTimeSlots(){
+ Util.callModuleMethod("SchedulerBlockSlots", "GetAll", (List)null,new CustomRequestCallback() {
+ @Override
+ public void onError() {
+ }
+ @Override
+ public void jsonifiedData(Object data) {
+ customTable.loadData((HashMap<String, String>[])data);
+ }
+ }, "HashMap<String,String>[]");
+ }
+ public boolean validateForm(){
+ String msg = new String("");
+ if (startTime.getValue()==null) {
+ msg += "Please specify start time." + "\n";
+ }
+ if (endTime.getValue()==null) {
+ msg += "Please specify end time." + "\n";
+ }
+
+ if (provider.getStoredValue().equals("0") && providerGroup.getStoredValue().equals("0")) {
+ msg += "Please specify atleast provider or group." + "\n";
+ }
+
+ if (!msg.equals("")) {
+ Window.alert(msg);
+ return false;
+ }
+
+ return true;
+ }
+
+ public void clearForm(){
+ provider.clear();
+ providerGroup.clear();
+ delete.setVisible(false);
+ submit.setText("add");
+ blockTimeId = null;
+ }
+
+ public HashMap<String, String> populateData(){
+ HashMap<String, String> data = new HashMap<String, String>();
+
+ if(blockTimeId!=null)
+ data.put("id", blockTimeId.toString());
+
+ Calendar calstart = new GregorianCalendar();
+ calstart.setTime(startTime.getValue(new Date()));
+ data.put("sbshour", calstart.get(Calendar.HOUR_OF_DAY)+"");
+ data.put("sbsmin", calstart.get(Calendar.MINUTE)+"");
+
+ Calendar calend = new GregorianCalendar();
+ calstart.setTime(endTime.getValue(new Date()));
+
+ Integer dur = (calend.get(Calendar.HOUR) - calstart.get(Calendar.HOUR));
+ if (dur < 0) {
+ dur = dur + 24;
+ }
+ dur = (dur * 60)
+ + (calend.get(Calendar.MINUTE) - calstart.get(Calendar.MINUTE));
+
+ data.put("sbsduration", Integer.toString(dur));
+
+ data.put("sbsprovider", provider.getStoredValue());
+ data.put("sbsprovidergroup", providerGroup.getStoredValue());
+ Window.alert(data.toString());
+ return data;
+ }
}

private Label label = new Label("");

Reply all
Reply to author
Forward
0 new messages