wiki:SchedulingGUI

VISTA Scheduling GUI Home Page

Scheduling Main Screen Welcome to the VISTA Scheduling GUI homepage. I am Sam Habiel; I am the current maintainer for the Scheduling GUI. I can be reached at sam dot habiel at gmail dot com. The original package was written for Indian Health Service by Horace Whitt, and I ported it to VISTA and made a lot of enhancements. There were many contributions since then.

What is the Scheduling GUI?

Historically, VISTA has always used the PIMS Scheduling module on the VT-100 emulated terminal. The Scheduling GUI is intended to be a replacement and complement for PIMS Scheduling. You can run the Scheduling GUI without any interaction with PIMS; or you can have it interacting with PIMS so that appointments will have various cascading effects on other packages using the PIMS triggered protocols and PIMS APIs. Most people use it with PIMS so that it can integrate well with CPRS.

User Manual

User Manual is under construction. You can find it at here.

I want it I want it I want it!

You can follow the instructions here to install it: source:Scheduling/tag/1.7/README.txt

License

The project is licensed by myself under LGPL latest version, whatever it is. http://www.gnu.org/licenses/lgpl-2.1.html. Appointment Slip

Feature List

  • Obviously, make and cancel appointments (Future appointments and Walk-ins)
  • Check-in and undo check-in's.
  • No-show and undo No-shows.
  • Make slots (i.e. how many patients will a provider see)
  • Set Overbook permissions to Clerks
  • Print Schedule List for Providers
  • Print Appointment List for Patients
  • Print Appointment Reminder Letters
  • Auto-Rebook appointments (along with Rebook letters)
  • Search for appointments in the future (you can limit to specific slot type or day)
  • Integration with the Radiology Package to make Radiology Appointments (v 1.6)
  • Dynamic view of Schedules:
    • Can open multiple schedules for a Clinic Group
    • Can view a single schedule in 1, 5 or 7 day view
    • Can change the time scale as long as it isn't less the minimum appointment length
  • Bi-directional communication with PIMS Scheduling Module.
  • Appointment Clipboard Functionality
  • Drag and drop for appointments
  • Full UTF-8 support if the Mumps Database supports it.
  • L18N for Arabic

What is the Scheduling GUI written in?

The client is in C# using the .Net 4.0 libraries on MS Windows. The Windowing library used is WinForms? 2.0. The database side uses Plain Jane remote procedures over a custom broker developed by Indian Health Service called BMX that provides ADO.net support to Fileman. Currently, most remote procedures are very heavy Mumps.

Show me some code!

This is the C# code that inits the Scheduling GUI.

#if DEBUG
        //To write to the console
        [DllImport("kernel32.dll")]
        static extern bool AttachConsole(int dwProcessId);
        private const int ATTACH_PARENT_PROCESS = -1;
#endif
        /// <summary>
        /// Main Entry Point
        /// </summary>
        /// <param name="args">We accept the following Arguments:
        /// /s or -s = Server ip address or name
        /// /p or -p = port number (must be numeric)
        /// /a or -a = Access Code
        /// /v or -v = Verify Code
        /// /e or -e = Encoding (name of encoding as known to windows, such as windows-1256)
        /// /culture or -culture = Culture Name for UI Culture if you wish to override the Windows Culture
        /// </param>
        /// <remarks>
        /// Encoding decision is complex. This is the order of priority:
        /// - If the M DB runs in UTF-8, that's what we are going to use.
        /// - If that's not so, /e sets the default encoding. If /e is a non-existent encoding, move to next step.
        /// - If /e is not supplied or is not recognized, the default encoding is the Windows default Encoding for the user.
        /// </remarks>
        [STAThread()]
        static void Main(string[] args)
        {
            //Application wide error handler for unhandled errors (later I figure out that's only for WinForm ex'es)
            Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException);
            Application.ThreadException += new ThreadExceptionEventHandler(App_ThreadException);

            // Add the event handler for handling non-UI thread exceptions to the event. 
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(App_DomainException);

#if DEBUG
            // Print console messages to console if launched from console
            // Note: Imported From kernel32.dll
            AttachConsole(ATTACH_PARENT_PROCESS);
#endif

#if TRACE
            DateTime startLoadTime = DateTime.Now;
#endif

            //Store a class instance of manager. Actual constructor does nothing.
            _current = new CGDocumentManager();

            //Get command line options; store in private class wide variables
            var opset = new OptionSet() {
                { "s=", s => _current.m_Server = s },
                { "p=", p => _current.m_Port = int.Parse(p) },
                { "a=", a => _current.m_AccessCode = a },
                { "v=", v => _current.m_VerifyCode = v },
                { "e=", e => _current.m_Encoding = e},
                { "culture=", culture => _current.m_CultureName = culture }
            };

            opset.Parse(args);
            
            //Init app
            bool isEverythingOkay = _current.InitializeApp();

            //if an error occurred, break out.
            if (!isEverythingOkay) return;

            //Create the first empty document
            //A document holds the resources, appointments, and availabilites
            //SAM: Good place for break point
            CGDocument doc = new CGDocument();
            doc.DocManager = _current;

            //Create new View
            //A view is a specific arrangement of appointments and availabilites that constitute a document
            CGView view = new CGView();
            view.InitializeDocView(doc, _current, doc.StartDate, _current.WindowText);

            //Handle BMX Event
            Application.DoEvents();

            //test
            //doc.ThrowException();
            //test

#if TRACE
            DateTime EndLoadTime = DateTime.Now;
            TimeSpan LoadTime = EndLoadTime - startLoadTime;
            Debug.Write("Load Time for GUI is " + LoadTime.Seconds + " s & " + LoadTime.Milliseconds + " ms\n");
#endif
            
            view.Show();
            view.Activate();
            
            Application.Run();
        }
Last modified 6 years ago Last modified on Oct 17, 2012, 4:47:53 AM

Attachments (2)

Download all attachments as: .zip