protected void InitializeProperties()
        {
            Int64 serviceId = 0;


            if ((MercuryApplication != null) && (!IsPostBack))
            {
                if (Request.QueryString["ServiceId"] != null)
                {
                    serviceId = Int64.Parse(Request.QueryString["ServiceId"]);
                }

                if (serviceId != 0)
                {
                    serviceSingleton = MercuryApplication.MedicalServiceSingletonGet(serviceId);

                    if (serviceSingleton == null)
                    {
                        serviceSingleton = new Mercury.Client.Core.MedicalServices.ServiceSingleton(MercuryApplication);
                    }

                    Page.Title = "Service Singleton - " + serviceSingleton.Name;
                }

                else
                {
                    serviceSingleton = new Mercury.Client.Core.MedicalServices.ServiceSingleton(MercuryApplication);
                }

                InitializeGeneralPage();

                InitializeDefinitionPage();

                InitializeDefinitionGrid();

                Session[SessionCachePrefix + "ServiceSingleton"] = serviceSingleton;

                Session[SessionCachePrefix + "ServiceSingletonUnmodified"] = serviceSingleton.Copy();
            }

            else   // Postback

            {
                serviceSingleton = (Mercury.Client.Core.MedicalServices.ServiceSingleton)Session[SessionCachePrefix + "ServiceSingleton"];
            }

            ApplySecurity();

            return;
        }
        protected void ButtonImport_OnClick(Object sender, EventArgs eventArgs)
        {
            System.Data.DataView sortedNdcView = new DataView(ndcImportTable);

            // sortedNdcView.Sort = "category, ndc_code"; // 2009

            sortedNdcView.Sort = "[Category], [NDC Code]"; // 2011

            Boolean allowOverwrite = false;

            Boolean allowMerge = true;

            Boolean processNdc = false;

            Boolean serviceProcess = true;



            String currentServiceName = String.Empty;

            Client.Core.MedicalServices.ServiceSingleton currentSingleton = null;

            Client.Core.MedicalServices.Definitions.ServiceSingletonDefinition currentSingletonDefinition = null;



            System.Data.DataTable importResultsTable = new DataTable();

            importResultsTable.Columns.Add("ObjectType");

            importResultsTable.Columns.Add("ObjectName");

            importResultsTable.Columns.Add("Success");

            importResultsTable.Columns.Add("Exception");

            importResultsTable.Columns.Add("Id");



            foreach (System.Data.DataRow currentRow in sortedNdcView.ToTable().Rows)
            {
                String categoryName = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(currentRow["category"].ToString());

                categoryName = categoryName.Replace("\"", "");

                String serviceName = "Medication - " + categoryName;

                if (currentServiceName != serviceName)
                {
                    #region New Services based on Change in Medication Name

                    if (currentSingleton != null)
                    {
                        #region If Working on Previous Service, Save before Continuing

                        if (currentSingletonDefinition != null)
                        {
                            if (!String.IsNullOrEmpty(currentSingletonDefinition.NdcCodeCriteria))
                            {
                                currentSingletonDefinition.NdcCodeCriteria = currentSingletonDefinition.NdcCodeCriteria.Replace("}{", ", ");

                                currentSingletonDefinition.NdcCodeCriteria = currentSingletonDefinition.NdcCodeCriteria.Replace("{", "");

                                currentSingletonDefinition.NdcCodeCriteria = currentSingletonDefinition.NdcCodeCriteria.Replace("}", "");

                                currentSingletonDefinition.NdcCodeCriteria.Trim();

                                if (!String.IsNullOrWhiteSpace(currentSingletonDefinition.NdcCodeCriteria))
                                {
                                    currentSingleton.Definitions.Add(currentSingletonDefinition);
                                }
                            }
                        }

                        Mercury.Server.Application.ObjectSaveResponse saveResponse = application.MedicalServiceSave(currentSingleton);

                        importResultsTable.Rows.Add(

                            "Singleton",

                            currentSingleton.Name,

                            saveResponse.Success,

                            (saveResponse.HasException) ? saveResponse.Exception.Message : String.Empty,

                            saveResponse.Id

                            );

                        #endregion
                    }

                    serviceProcess = true;

                    currentServiceName = serviceName;

                    currentSingleton = application.MedicalServiceSingletonGet(application.MedicalServiceGetIdByName(currentServiceName));

                    if (currentSingleton == null)
                    {
                        serviceProcess = true;

                        currentSingleton = new Mercury.Client.Core.MedicalServices.ServiceSingleton(application);

                        currentSingleton.Name = currentServiceName;

                        currentSingleton.Description = currentServiceName;

                        currentSingleton.ServiceType = Mercury.Server.Application.MedicalServiceType.Singleton;

                        currentSingleton.ServiceClassification = Mercury.Server.Application.ServiceClassification.Medication;
                    }

                    else
                    {
                        serviceProcess = allowOverwrite || allowMerge;

                        if (allowOverwrite)
                        {
                            foreach (Client.Core.MedicalServices.Definitions.ServiceSingletonDefinition currentDefinition in currentSingleton.Definitions)
                            {
                                currentDefinition.Enabled = false;
                            }
                        }
                    }

                    currentSingletonDefinition = null;

                    #endregion
                }


                if (currentSingletonDefinition != null)
                {
                    #region Current Definition Exists for Appending, check Length for cutoff

                    if (currentSingletonDefinition.NdcCodeCriteria.Length > 800)
                    {
                        currentSingletonDefinition.NdcCodeCriteria = currentSingletonDefinition.NdcCodeCriteria.Replace("}{", ", ");

                        currentSingletonDefinition.NdcCodeCriteria = currentSingletonDefinition.NdcCodeCriteria.Replace("{", "");

                        currentSingletonDefinition.NdcCodeCriteria = currentSingletonDefinition.NdcCodeCriteria.Replace("}", "");

                        currentSingletonDefinition.NdcCodeCriteria.Trim();

                        if (!String.IsNullOrWhiteSpace(currentSingletonDefinition.NdcCodeCriteria))
                        {
                            currentSingleton.Definitions.Add(currentSingletonDefinition);
                        }

                        currentSingletonDefinition = null;
                    }

                    #endregion
                }


                if (currentSingletonDefinition == null)   // MUST REMAIN AS ITS OWN VALIDATION SINCE A CUTOFF WILL SET CURRENT BACK TO NULL

                {
                    #region No Current Definition to Append To, Create New Definition

                    currentSingletonDefinition = new Client.Core.MedicalServices.Definitions.ServiceSingletonDefinition(MercuryApplication);

                    currentSingletonDefinition.DataSourceType = Mercury.Server.Application.ServiceDataSourceType.Pharmacy;

                    #endregion
                }

                if (serviceProcess)
                {
                    // VALIDATE THAT THE SINGLETON DOES NOT ALREADY CONTAIN THE NDC IN ANOTHER DEFINITION

                    if (!currentSingleton.ContainsNdc(currentRow["NDC Code"].ToString().Trim()))
                    {
                        // 2009: currentSingletonDefinition.NdcCodeCriteria = currentSingletonDefinition.NdcCodeCriteria + "{" + (currentRow["ndc_code"].ToString ().Trim ()) + "}";

                        currentSingletonDefinition.NdcCodeCriteria = currentSingletonDefinition.NdcCodeCriteria + "{" + (currentRow["NDC Code"].ToString().Trim()) + "}";   // 2011
                    }
                }
            }


            if ((currentSingleton != null) && (currentSingletonDefinition != null))
            {
                #region SAVE ANY LEFT OVER SERVICE AND DEFINITION FROM LOOP

                currentSingletonDefinition.NdcCodeCriteria = currentSingletonDefinition.NdcCodeCriteria.Replace("}{", ", ");

                currentSingletonDefinition.NdcCodeCriteria = currentSingletonDefinition.NdcCodeCriteria.Replace("{", "");

                currentSingletonDefinition.NdcCodeCriteria = currentSingletonDefinition.NdcCodeCriteria.Replace("}", "");

                currentSingletonDefinition.NdcCodeCriteria.Trim();

                if (!String.IsNullOrWhiteSpace(currentSingletonDefinition.NdcCodeCriteria))
                {
                    currentSingleton.Definitions.Add(currentSingletonDefinition);
                }


                Mercury.Server.Application.ObjectSaveResponse saveResponse = application.MedicalServiceSave(currentSingleton);

                importResultsTable.Rows.Add(

                    "Singleton",

                    currentSingleton.Name,

                    saveResponse.Success,

                    (saveResponse.HasException) ? saveResponse.Exception.Message : String.Empty,

                    saveResponse.Id

                    );

                #endregion
            }

            System.Data.DataView importResultsView = new DataView(importResultsTable);

            importResultsView.Sort = "ObjectType, ObjectName";

            ImportResultsGrid.DataSource = importResultsView;

            ImportResultsGrid.Rebind();

            ButtonImport.Visible = false;


            return;
        }
        protected Boolean ApplyChanges()
        {
            Boolean success = false;

            Boolean isModified = false;

            Boolean isValid = false;

            Dictionary <String, String> validationResponse;


            if (MercuryApplication == null)
            {
                return(false);
            }


            Mercury.Client.Core.MedicalServices.ServiceSingleton serviceSingletonUnmodified = (Mercury.Client.Core.MedicalServices.ServiceSingleton)Session [SessionCachePrefix + "ServiceSingletonUnmodified"];

            Mercury.Server.Application.ObjectSaveResponse saveResponse;


            serviceSingleton.Name = SingletonName.Text;

            serviceSingleton.Description = SingletonDescription.Text;

            serviceSingleton.ServiceType = Mercury.Server.Application.MedicalServiceType.Singleton;

            serviceSingleton.ServiceClassification = (Mercury.Server.Application.ServiceClassification)Int32.Parse(SingletonClassification.SelectedValue);

            serviceSingleton.Enabled = SingletonEnabled.Checked;

            serviceSingleton.Visible = SingletonVisible.Checked;


            if (SingletonLastPaidDate.SelectedDate.HasValue)
            {
                serviceSingleton.LastPaidDate = SingletonLastPaidDate.SelectedDate.Value;
            }

            else
            {
                serviceSingleton.LastPaidDate = new DateTime(1900, 01, 01);
            }


            if (serviceSingletonUnmodified.Id == 0)
            {
                isModified = true;
            }

            if (!isModified)
            {
                isModified = !serviceSingleton.IsEqual(serviceSingletonUnmodified);
            }


            validationResponse = serviceSingleton.Validate();

            isValid = (validationResponse.Count == 0);


            if ((isModified) && (isValid))
            {
                if (!MercuryApplication.HasEnvironmentPermission(ManagePermission))
                {
                    SaveResponseLabel.Text = "Permission Denied.";

                    return(false);
                }

                saveResponse = MercuryApplication.MedicalServiceSave(serviceSingleton);

                success = saveResponse.Success;

                if (success)
                {
                    serviceSingleton = MercuryApplication.MedicalServiceSingletonGet(saveResponse.Id);

                    Session[SessionCachePrefix + "ServiceSingleton"] = serviceSingleton;

                    Session[SessionCachePrefix + "ServiceSingletonUnmodified"] = serviceSingleton.Copy();

                    SaveResponseLabel.Text = "Save Successful.";

                    InitializeGeneralPage();

                    InitializeDefinitionGrid();
                }

                else
                {
                    SaveResponseLabel.Text = "Unable to Save.";

                    if (MercuryApplication.LastException != null)
                    {
                        SaveResponseLabel.Text = SaveResponseLabel.Text + " [" + MercuryApplication.LastException.Message + "]";
                    }

                    success = false;
                }
            }

            else if (!isModified)
            {
                SaveResponseLabel.Text = "No Changes Detected."; success = true;
            }

            else if (!isValid)
            {
                foreach (String validationKey in validationResponse.Keys)
                {
                    SaveResponseLabel.Text = "Invalid [" + validationKey + "]: " + validationResponse[validationKey];

                    break;
                }

                success = false;
            }

            return(success);
        }