예제 #1
0
        ///<summary>Inserts one LetterMerge into the database.  Provides option to use the existing priKey.</summary>
        public static long Insert(LetterMerge letterMerge, bool useExistingPK)
        {
            if (!useExistingPK && PrefC.RandomKeys)
            {
                letterMerge.LetterMergeNum = ReplicationServers.GetKey("lettermerge", "LetterMergeNum");
            }
            string command = "INSERT INTO lettermerge (";

            if (useExistingPK || PrefC.RandomKeys)
            {
                command += "LetterMergeNum,";
            }
            command += "Description,TemplateName,DataFileName,Category) VALUES(";
            if (useExistingPK || PrefC.RandomKeys)
            {
                command += POut.Long(letterMerge.LetterMergeNum) + ",";
            }
            command +=
                "'" + POut.String(letterMerge.Description) + "',"
                + "'" + POut.String(letterMerge.TemplateName) + "',"
                + "'" + POut.String(letterMerge.DataFileName) + "',"
                + POut.Long(letterMerge.Category) + ")";
            if (useExistingPK || PrefC.RandomKeys)
            {
                Db.NonQ(command);
            }
            else
            {
                letterMerge.LetterMergeNum = Db.NonQ(command, true);
            }
            return(letterMerge.LetterMergeNum);
        }
예제 #2
0
        ///<summary></summary>
        public static void Delete(LetterMerge merge)
        {
            string command = "DELETE FROM lettermerge "
                             + "WHERE LetterMergeNum = " + POut.PInt(merge.LetterMergeNum);

            General.NonQ(command);
        }
예제 #3
0
        private void SaveToImageFolder(string fileSourcePath, LetterMerge letterCur)
        {
            if (letterCur.ImageFolder == 0)           //This shouldn't happen
            {
                return;
            }
            string rawBase64 = "";

            if (PrefC.AtoZfolderUsed == DataStorageType.InDatabase)
            {
                rawBase64 = Convert.ToBase64String(File.ReadAllBytes(fileSourcePath));
            }
            Document docSave = new Document();

            docSave.DocNum = Documents.Insert(docSave);
            string fileName     = Lans.g(this, "LetterMerge") + "_" + letterCur.Description + docSave.DocNum;
            string fileDestPath = FileAtoZ.CombinePaths(ImageStore.GetPatientFolder(PatCur, ImageStore.GetPreferredAtoZpath()), fileName + ".doc");

            docSave.ImgType     = ImageType.Document;
            docSave.DateCreated = DateTime.Now;
            docSave.PatNum      = PatCur.PatNum;
            docSave.DocCategory = letterCur.ImageFolder;
            docSave.Description = fileName;          //no extension.
            docSave.RawBase64   = rawBase64;         //blank if using AtoZfolder
            docSave.FileName    = fileName + ".doc"; //file extension used for both DB images and AtoZ images
            FileAtoZ.Copy(fileSourcePath, fileDestPath, FileAtoZSourceDestination.LocalToAtoZ);
            Documents.Update(docSave);
        }
예제 #4
0
 ///<summary>Inserts one LetterMerge into the database.  Returns the new priKey.</summary>
 public static long Insert(LetterMerge letterMerge)
 {
     if (DataConnection.DBtype == DatabaseType.Oracle)
     {
         letterMerge.LetterMergeNum = DbHelper.GetNextOracleKey("lettermerge", "LetterMergeNum");
         int loopcount = 0;
         while (loopcount < 100)
         {
             try {
                 return(Insert(letterMerge, true));
             }
             catch (Oracle.DataAccess.Client.OracleException ex) {
                 if (ex.Number == 1 && ex.Message.ToLower().Contains("unique constraint") && ex.Message.ToLower().Contains("violated"))
                 {
                     letterMerge.LetterMergeNum++;
                     loopcount++;
                 }
                 else
                 {
                     throw ex;
                 }
             }
         }
         throw new ApplicationException("Insert failed.  Could not generate primary key.");
     }
     else
     {
         return(Insert(letterMerge, false));
     }
 }
예제 #5
0
 ///<summary>Inserts one LetterMerge into the database.  Returns the new priKey.</summary>
 internal static long Insert(LetterMerge letterMerge)
 {
     if(DataConnection.DBtype==DatabaseType.Oracle) {
         letterMerge.LetterMergeNum=DbHelper.GetNextOracleKey("lettermerge","LetterMergeNum");
         int loopcount=0;
         while(loopcount<100){
             try {
                 return Insert(letterMerge,true);
             }
             catch(Oracle.DataAccess.Client.OracleException ex){
                 if(ex.Number==1 && ex.Message.ToLower().Contains("unique constraint") && ex.Message.ToLower().Contains("violated")){
                     letterMerge.LetterMergeNum++;
                     loopcount++;
                 }
                 else{
                     throw ex;
                 }
             }
         }
         throw new ApplicationException("Insert failed.  Could not generate primary key.");
     }
     else {
         return Insert(letterMerge,false);
     }
 }
예제 #6
0
        ///<summary>Inserts one LetterMerge into the database.  Provides option to use the existing priKey.  Doesn't use the cache.</summary>
        public static long InsertNoCache(LetterMerge letterMerge, bool useExistingPK)
        {
            bool   isRandomKeys = Prefs.GetBoolNoCache(PrefName.RandomPrimaryKeys);
            string command      = "INSERT INTO lettermerge (";

            if (!useExistingPK && isRandomKeys)
            {
                letterMerge.LetterMergeNum = ReplicationServers.GetKeyNoCache("lettermerge", "LetterMergeNum");
            }
            if (isRandomKeys || useExistingPK)
            {
                command += "LetterMergeNum,";
            }
            command += "Description,TemplateName,DataFileName,Category,ImageFolder) VALUES(";
            if (isRandomKeys || useExistingPK)
            {
                command += POut.Long(letterMerge.LetterMergeNum) + ",";
            }
            command +=
                "'" + POut.String(letterMerge.Description) + "',"
                + "'" + POut.String(letterMerge.TemplateName) + "',"
                + "'" + POut.String(letterMerge.DataFileName) + "',"
                + POut.Long(letterMerge.Category) + ","
                + POut.Long(letterMerge.ImageFolder) + ")";
            if (useExistingPK || isRandomKeys)
            {
                Db.NonQ(command);
            }
            else
            {
                letterMerge.LetterMergeNum = Db.NonQ(command, true, "LetterMergeNum", "letterMerge");
            }
            return(letterMerge.LetterMergeNum);
        }
예제 #7
0
        private Document SaveToImageFolder(string fileSourcePath, LetterMerge letterCur)
        {
            if (letterCur.ImageFolder == 0)           //This shouldn't happen
            {
                return(new Document());
            }
            string rawBase64 = "";

            if (PrefC.AtoZfolderUsed == DataStorageType.InDatabase)
            {
                rawBase64 = Convert.ToBase64String(File.ReadAllBytes(fileSourcePath));
            }
            Document docSave = new Document();

            docSave.DocNum      = Documents.Insert(docSave);
            docSave.ImgType     = ImageType.Document;
            docSave.DateCreated = DateTime.Now;
            docSave.PatNum      = PatCur.PatNum;
            docSave.DocCategory = letterCur.ImageFolder;
            docSave.Description = letterCur.Description + docSave.DocNum; //no extension.
            docSave.RawBase64   = rawBase64;                              //blank if using AtoZfolder
            docSave.FileName    = ODFileUtils.CleanFileName(letterCur.Description) + GetFileExtensionForWordDoc(fileSourcePath);
            string fileDestPath = ImageStore.GetFilePath(docSave, ImageStore.GetPatientFolder(PatCur, ImageStore.GetPreferredAtoZpath()));

            FileAtoZ.Copy(fileSourcePath, fileDestPath, FileAtoZSourceDestination.LocalToAtoZ);
            Documents.Update(docSave);
            return(docSave);
        }
예제 #8
0
 ///<summary>Inserts one LetterMerge into the database.  Provides option to use the existing priKey.</summary>
 internal static long Insert(LetterMerge letterMerge,bool useExistingPK)
 {
     if(!useExistingPK && PrefC.RandomKeys) {
         letterMerge.LetterMergeNum=ReplicationServers.GetKey("lettermerge","LetterMergeNum");
     }
     string command="INSERT INTO lettermerge (";
     if(useExistingPK || PrefC.RandomKeys) {
         command+="LetterMergeNum,";
     }
     command+="Description,TemplateName,DataFileName,Category) VALUES(";
     if(useExistingPK || PrefC.RandomKeys) {
         command+=POut.Long(letterMerge.LetterMergeNum)+",";
     }
     command+=
          "'"+POut.String(letterMerge.Description)+"',"
         +"'"+POut.String(letterMerge.TemplateName)+"',"
         +"'"+POut.String(letterMerge.DataFileName)+"',"
         +    POut.Long  (letterMerge.Category)+")";
     if(useExistingPK || PrefC.RandomKeys) {
         Db.NonQ(command);
     }
     else {
         letterMerge.LetterMergeNum=Db.NonQ(command,true);
     }
     return letterMerge.LetterMergeNum;
 }
예제 #9
0
        ///<summary>Inserts this lettermerge into database.</summary>
        public static void Insert(LetterMerge merge)
        {
            if (PrefB.RandomKeys)
            {
                merge.LetterMergeNum = MiscData.GetKey("lettermerge", "LetterMergeNum");
            }
            string command = "INSERT INTO lettermerge (";

            if (PrefB.RandomKeys)
            {
                command += "LetterMergeNum,";
            }
            command += "Description,TemplateName,DataFileName,"
                       + "Category) VALUES(";
            if (PrefB.RandomKeys)
            {
                command += "'" + POut.PInt(merge.LetterMergeNum) + "', ";
            }
            command +=
                "'" + POut.PString(merge.Description) + "', "
                + "'" + POut.PString(merge.TemplateName) + "', "
                + "'" + POut.PString(merge.DataFileName) + "', "
                + "'" + POut.PInt(merge.Category) + "')";
            //MessageBox.Show(string command);
            if (PrefB.RandomKeys)
            {
                General.NonQ(command);
            }
            else
            {
                merge.LetterMergeNum = General.NonQ(command, true);
            }
        }
예제 #10
0
        ///<summary>Shows and error message and returns false if there is a problem creating the data file; Otherwise true.</summary>
        private bool CreateDataFile(string fileName, LetterMerge letter)
        {
            DataTable table;

            try {
                table = LetterMergesQueries.GetLetterMergeInfo(PatCur, letter);
            }
            catch (Exception ex) {
                string message = Lan.g(this, "There was a error getting letter merge info:");
                MessageBox.Show(message + "\r\n" + ex.Message);
                return(false);
            }
            table = FormQuery.MakeReadable(table, null, false);
            try{
                using (StreamWriter sw = new StreamWriter(fileName, false)){
                    string line = "";
                    for (int i = 0; i < letter.Fields.Count; i++)
                    {
                        if (letter.Fields[i].StartsWith("referral."))
                        {
                            line += "Ref" + letter.Fields[i].Substring(9);
                        }
                        else
                        {
                            line += letter.Fields[i];
                        }
                        if (i < letter.Fields.Count - 1)
                        {
                            line += "\t";
                        }
                    }
                    sw.WriteLine(line);
                    string cell;
                    for (int i = 0; i < table.Rows.Count; i++)
                    {
                        line = "";
                        for (int j = 0; j < table.Columns.Count; j++)
                        {
                            cell  = table.Rows[i][j].ToString();
                            cell  = cell.Replace("\r", "");
                            cell  = cell.Replace("\n", "");
                            cell  = cell.Replace("\t", "");
                            cell  = cell.Replace("\"", "");
                            line += cell;
                            if (j < table.Columns.Count - 1)
                            {
                                line += "\t";
                            }
                        }
                        sw.WriteLine(line);
                    }
                }
            }
            catch {
                MsgBox.Show(this, "File in use by another program.  Close and try again.");
                return(false);
            }
            return(true);
        }
예제 #11
0
        //private ArrayList ALpatSelect;

        ///<summary></summary>
        public FormLetterMergeEdit(LetterMerge letterMergeCur)
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();
            LetterMergeCur = letterMergeCur;
            Lan.F(this);
        }
예제 #12
0
        private void butViewData_Click(object sender, EventArgs e)
        {
            if (!CreateData())
            {
                return;
            }
            LetterMerge letterCur = ListForCat[listLetters.SelectedIndex];
            string      dataFile  = PrefC.GetString(PrefName.LetterMergePath) + letterCur.DataFileName;

            Process.Start(dataFile);
        }
예제 #13
0
        ///<summary></summary>
        public static void Update(LetterMerge merge)
        {
            string command = "UPDATE lettermerge SET "
                             + "Description = '" + POut.PString(merge.Description) + "' "
                             + ",TemplateName = '" + POut.PString(merge.TemplateName) + "' "
                             + ",DataFileName = '" + POut.PString(merge.DataFileName) + "' "
                             + ",Category = '" + POut.PInt(merge.Category) + "' "
                             + "WHERE LetterMergeNum = '" + POut.PInt(merge.LetterMergeNum) + "'";

            General.NonQ(command);
        }
예제 #14
0
        ///<summary>Updates one LetterMerge in the database.</summary>
        public static void Update(LetterMerge letterMerge)
        {
            string command = "UPDATE lettermerge SET "
                             + "Description   = '" + POut.String(letterMerge.Description) + "', "
                             + "TemplateName  = '" + POut.String(letterMerge.TemplateName) + "', "
                             + "DataFileName  = '" + POut.String(letterMerge.DataFileName) + "', "
                             + "Category      =  " + POut.Long(letterMerge.Category) + " "
                             + "WHERE LetterMergeNum = " + POut.Long(letterMerge.LetterMergeNum);

            Db.NonQ(command);
        }
예제 #15
0
        ///<summary>Updates one LetterMerge in the database.  Uses an old object to compare to, and only alters changed fields.  This prevents collisions and concurrency problems in heavily used tables.  Returns true if an update occurred.</summary>
        public static bool Update(LetterMerge letterMerge, LetterMerge oldLetterMerge)
        {
            string command = "";

            if (letterMerge.Description != oldLetterMerge.Description)
            {
                if (command != "")
                {
                    command += ",";
                }
                command += "Description = '" + POut.String(letterMerge.Description) + "'";
            }
            if (letterMerge.TemplateName != oldLetterMerge.TemplateName)
            {
                if (command != "")
                {
                    command += ",";
                }
                command += "TemplateName = '" + POut.String(letterMerge.TemplateName) + "'";
            }
            if (letterMerge.DataFileName != oldLetterMerge.DataFileName)
            {
                if (command != "")
                {
                    command += ",";
                }
                command += "DataFileName = '" + POut.String(letterMerge.DataFileName) + "'";
            }
            if (letterMerge.Category != oldLetterMerge.Category)
            {
                if (command != "")
                {
                    command += ",";
                }
                command += "Category = " + POut.Long(letterMerge.Category) + "";
            }
            if (letterMerge.ImageFolder != oldLetterMerge.ImageFolder)
            {
                if (command != "")
                {
                    command += ",";
                }
                command += "ImageFolder = " + POut.Long(letterMerge.ImageFolder) + "";
            }
            if (command == "")
            {
                return(false);
            }
            command = "UPDATE lettermerge SET " + command
                      + " WHERE LetterMergeNum = " + POut.Long(letterMerge.LetterMergeNum);
            Db.NonQ(command);
            return(true);
        }
예제 #16
0
        private void SelectImageCat()
        {
            long defNumLetter = 0;

            if (listLetters.Items.Count > 0 && listLetters.SelectedIndex >= 0)
            {
                LetterMerge letterMergeSelected = ListForCat[listLetters.SelectedIndex];
                if (letterMergeSelected != null)
                {
                    defNumLetter = letterMergeSelected.ImageFolder;
                }
            }
            comboImageCategory.SetSelectedDefNum(defNumLetter);
        }
예제 #17
0
		///<summary>Converts a DataTable to a list of objects.</summary>
		public static List<LetterMerge> TableToList(DataTable table){
			List<LetterMerge> retVal=new List<LetterMerge>();
			LetterMerge letterMerge;
			for(int i=0;i<table.Rows.Count;i++) {
				letterMerge=new LetterMerge();
				letterMerge.LetterMergeNum= PIn.Long  (table.Rows[i]["LetterMergeNum"].ToString());
				letterMerge.Description   = PIn.String(table.Rows[i]["Description"].ToString());
				letterMerge.TemplateName  = PIn.String(table.Rows[i]["TemplateName"].ToString());
				letterMerge.DataFileName  = PIn.String(table.Rows[i]["DataFileName"].ToString());
				letterMerge.Category      = PIn.Long  (table.Rows[i]["Category"].ToString());
				retVal.Add(letterMerge);
			}
			return retVal;
		}
예제 #18
0
        private void butEditTemplate_Click(object sender, System.EventArgs e)
        {
#if !DISABLE_MICROSOFT_OFFICE
            if (listLetters.SelectedIndex == -1)
            {
                MsgBox.Show(this, "Please select a letter first.");
                return;
            }
            LetterMerge letterCur    = ListForCat[listLetters.SelectedIndex];
            string      templateFile = ODFileUtils.CombinePaths(PrefC.GetString(PrefName.LetterMergePath), letterCur.TemplateName);
            string      dataFile     = ODFileUtils.CombinePaths(PrefC.GetString(PrefName.LetterMergePath), letterCur.DataFileName);
            if (!File.Exists(templateFile))
            {
                MessageBox.Show(Lan.g(this, "Template file does not exist:") + "  " + templateFile);
                return;
            }
            if (!CreateDataFile(dataFile, letterCur))
            {
                return;
            }
            //Create an instance of Word.
            Word.Application WrdApp;
            try {
                WrdApp = LetterMerges.WordApp;
            }
            catch {
                MsgBox.Show(this, "Error.  Is MS Word installed?");
                return;
            }
            //Open a document.
            Object oName = templateFile;
            wrdDoc = WrdApp.Documents.Open(ref oName, ref oMissing, ref oMissing, ref oMissing,
                                           ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                                           ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
            wrdDoc.Select();
            //Attach the data file.
            wrdDoc.MailMerge.OpenDataSource(dataFile, ref oMissing, ref oMissing, ref oMissing,
                                            ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                                            ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
            //At this point, Word remains open with just one new document.
            if (WrdApp.WindowState == Word.WdWindowState.wdWindowStateMinimize)
            {
                WrdApp.WindowState = Word.WdWindowState.wdWindowStateMaximize;
            }
            wrdDoc = null;
#else
            MessageBox.Show(this, "This version of Open Dental does not support Microsoft Word.");
#endif
        }
예제 #19
0
 ///<summary>Inserts one LetterMerge into the database.  Returns the new priKey.  Doesn't use the cache.</summary>
 public static long InsertNoCache(LetterMerge letterMerge)
 {
     if (DataConnection.DBtype == DatabaseType.MySql)
     {
         return(InsertNoCache(letterMerge, false));
     }
     else
     {
         if (DataConnection.DBtype == DatabaseType.Oracle)
         {
             letterMerge.LetterMergeNum = DbHelper.GetNextOracleKey("lettermerge", "LetterMergeNum");                  //Cacheless method
         }
         return(InsertNoCache(letterMerge, true));
     }
 }
예제 #20
0
        private void butAdd_Click(object sender, System.EventArgs e)
        {
            if (listCategories.SelectedIndex == -1)
            {
                MsgBox.Show(this, "Please select a category first.");
                return;
            }
            LetterMerge letter = new LetterMerge();

            letter.Category = _listLetterMergeCatDefs[listCategories.SelectedIndex].DefNum;
            FormLetterMergeEdit FormL = new FormLetterMergeEdit(letter);

            FormL.IsNew = true;
            FormL.ShowDialog();
            FillLetters();
            changed = true;
        }
예제 #21
0
        ///<summary>Converts a DataTable to a list of objects.</summary>
        public static List <LetterMerge> TableToList(DataTable table)
        {
            List <LetterMerge> retVal = new List <LetterMerge>();
            LetterMerge        letterMerge;

            for (int i = 0; i < table.Rows.Count; i++)
            {
                letterMerge = new LetterMerge();
                letterMerge.LetterMergeNum = PIn.Long(table.Rows[i]["LetterMergeNum"].ToString());
                letterMerge.Description    = PIn.String(table.Rows[i]["Description"].ToString());
                letterMerge.TemplateName   = PIn.String(table.Rows[i]["TemplateName"].ToString());
                letterMerge.DataFileName   = PIn.String(table.Rows[i]["DataFileName"].ToString());
                letterMerge.Category       = PIn.Long(table.Rows[i]["Category"].ToString());
                retVal.Add(letterMerge);
            }
            return(retVal);
        }
예제 #22
0
        ///<summary>Converts a DataTable to a list of objects.</summary>
        public static List <LetterMerge> TableToList(DataTable table)
        {
            List <LetterMerge> retVal = new List <LetterMerge>();
            LetterMerge        letterMerge;

            foreach (DataRow row in table.Rows)
            {
                letterMerge = new LetterMerge();
                letterMerge.LetterMergeNum = PIn.Long(row["LetterMergeNum"].ToString());
                letterMerge.Description    = PIn.String(row["Description"].ToString());
                letterMerge.TemplateName   = PIn.String(row["TemplateName"].ToString());
                letterMerge.DataFileName   = PIn.String(row["DataFileName"].ToString());
                letterMerge.Category       = PIn.Long(row["Category"].ToString());
                letterMerge.ImageFolder    = PIn.Long(row["ImageFolder"].ToString());
                retVal.Add(letterMerge);
            }
            return(retVal);
        }
예제 #23
0
        private void listLetters_DoubleClick(object sender, System.EventArgs e)
        {
            if (listLetters.SelectedIndex == -1)
            {
                return;
            }
            int                 selectedRow = listLetters.SelectedIndex;
            LetterMerge         letter      = ListForCat[listLetters.SelectedIndex];
            FormLetterMergeEdit FormL       = new FormLetterMergeEdit(letter);

            FormL.ShowDialog();
            FillLetters();
            if (listLetters.Items.Count > selectedRow)
            {
                listLetters.SetSelected(selectedRow, true);
            }
            changed = true;
        }
예제 #24
0
        ///<summary>Must have run LetterMergeFields first.</summary>
        public static void Refresh()
        {
            string command =
                "SELECT * FROM lettermerge ORDER BY Description";
            DataTable table = General.GetTable(command);

            List = new LetterMerge[table.Rows.Count];
            for (int i = 0; i < table.Rows.Count; i++)
            {
                List[i] = new LetterMerge();
                List[i].LetterMergeNum = PIn.PInt(table.Rows[i][0].ToString());
                List[i].Description    = PIn.PString(table.Rows[i][1].ToString());
                List[i].TemplateName   = PIn.PString(table.Rows[i][2].ToString());
                List[i].DataFileName   = PIn.PString(table.Rows[i][3].ToString());
                List[i].Category       = PIn.PInt(table.Rows[i][4].ToString());
                List[i].Fields         = LetterMergeFields.GetForLetter(List[i].LetterMergeNum);
            }
        }
예제 #25
0
        ///<summary>Supply the index of the cat within DefB.Short.</summary>
        public static LetterMerge[] GetListForCat(int catIndex)
        {
            ArrayList AL = new ArrayList();

            for (int i = 0; i < List.Length; i++)
            {
                if (List[i].Category == DefB.Short[(int)DefCat.LetterMergeCats][catIndex].DefNum)
                {
                    AL.Add(List[i]);
                }
            }
            LetterMerge[] retVal = new LetterMerge[AL.Count];
            for (int i = 0; i < AL.Count; i++)
            {
                retVal[i] = (LetterMerge)AL[i];
            }
            return(retVal);
        }
예제 #26
0
        ///<summary>Updates one LetterMerge in the database.  Uses an old object to compare to, and only alters changed fields.  This prevents collisions and concurrency problems in heavily used tables.</summary>
        internal static void Update(LetterMerge letterMerge, LetterMerge oldLetterMerge)
        {
            string command = "";

            if (letterMerge.Description != oldLetterMerge.Description)
            {
                if (command != "")
                {
                    command += ",";
                }
                command += "Description = '" + POut.String(letterMerge.Description) + "'";
            }
            if (letterMerge.TemplateName != oldLetterMerge.TemplateName)
            {
                if (command != "")
                {
                    command += ",";
                }
                command += "TemplateName = '" + POut.String(letterMerge.TemplateName) + "'";
            }
            if (letterMerge.DataFileName != oldLetterMerge.DataFileName)
            {
                if (command != "")
                {
                    command += ",";
                }
                command += "DataFileName = '" + POut.String(letterMerge.DataFileName) + "'";
            }
            if (letterMerge.Category != oldLetterMerge.Category)
            {
                if (command != "")
                {
                    command += ",";
                }
                command += "Category = " + POut.Long(letterMerge.Category) + "";
            }
            if (command == "")
            {
                return;
            }
            command = "UPDATE lettermerge SET " + command
                      + " WHERE LetterMergeNum = " + POut.Long(letterMerge.LetterMergeNum);
            Db.NonQ(command);
        }
예제 #27
0
        private void SelectImageCat()
        {
            long defNumLetter = 0;

            if (listLetters.Items.Count > 0 && listLetters.SelectedIndex >= 0)
            {
                LetterMerge letterMergeSelected = ListForCat[listLetters.SelectedIndex];
                if (letterMergeSelected != null)
                {
                    defNumLetter = letterMergeSelected.ImageFolder;
                }
            }
            if (defNumLetter != 0)
            {
                comboImageCategory.SetSelectedItem <Def>(x => x.DefNum == defNumLetter, Defs.GetName(DefCat.ImageCats, defNumLetter) + " " + Lan.g(this, "(hidden)"));
            }
            else
            {
                comboImageCategory.SelectedIndex = 0;
            }
        }
예제 #28
0
        private void butEditTemplate_Click(object sender, System.EventArgs e)
        {
            if (listLetters.SelectedIndex == -1)
            {
                MsgBox.Show(this, "Please select a letter first.");
                return;
            }
            LetterMerge letterCur    = ListForCat[listLetters.SelectedIndex];
            string      templateFile = PrefB.GetString("LetterMergePath") + letterCur.TemplateName;
            string      dataFile     = PrefB.GetString("LetterMergePath") + letterCur.DataFileName;

            if (!File.Exists(templateFile))
            {
                MessageBox.Show(Lan.g(this, "Template file does not exist:") + "  " + templateFile);
                return;
            }
            if (!CreateDataFile(dataFile, letterCur))
            {
                return;
            }
            //Create an instance of Word.
            Word.Application WrdApp = LetterMerges.WordApp;
            //Open a document.
            Object oName = templateFile;

            wrdDoc = WrdApp.Documents.Open(ref oName, ref oMissing, ref oMissing, ref oMissing,
                                           ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                                           ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
            wrdDoc.Select();
            //Attach the data file.
            wrdDoc.MailMerge.OpenDataSource(dataFile, ref oMissing, ref oMissing, ref oMissing,
                                            ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                                            ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
            //At this point, Word remains open with just one new document.
            if (WrdApp.WindowState == Word.WdWindowState.wdWindowStateMinimize)
            {
                WrdApp.WindowState = Word.WdWindowState.wdWindowStateMaximize;
            }
            wrdDoc = null;
        }
예제 #29
0
        private bool CreateData()
        {
            if (listLetters.SelectedIndex == -1)
            {
                MsgBox.Show(this, "Please select a letter first.");
                return(false);
            }
            LetterMerge letterCur = ListForCat[listLetters.SelectedIndex];
            string      dataFile  = PrefC.GetString(PrefName.LetterMergePath) + letterCur.DataFileName;

            if (!Directory.Exists(PrefC.GetString(PrefName.LetterMergePath)))
            {
                MsgBox.Show(this, "Letter merge path not valid.");
                return(false);
            }
            Cursor = Cursors.WaitCursor;
            if (!CreateDataFile(dataFile, letterCur))
            {
                Cursor = Cursors.Default;
                return(false);
            }
            Cursor = Cursors.Default;
            return(true);
        }
예제 #30
0
        private void butCreateData_Click(object sender, System.EventArgs e)
        {
            if (listLetters.SelectedIndex == -1)
            {
                MsgBox.Show(this, "Please select a letter first.");
                return;
            }
            LetterMerge letterCur = ListForCat[listLetters.SelectedIndex];
            string      dataFile  = PrefB.GetString("LetterMergePath") + letterCur.DataFileName;

            if (!Directory.Exists(PrefB.GetString("LetterMergePath")))
            {
                MsgBox.Show(this, "Letter merge path not valid.");
                return;
            }
            Cursor = Cursors.WaitCursor;
            if (!CreateDataFile(dataFile, letterCur))
            {
                Cursor = Cursors.Default;
                return;
            }
            Cursor = Cursors.Default;
            MsgBox.Show(this, "done");
        }
예제 #31
0
 ///<summary>Returns true if Update(LetterMerge,LetterMerge) would make changes to the database.
 ///Does not make any changes to the database and can be called before remoting role is checked.</summary>
 public static bool UpdateComparison(LetterMerge letterMerge, LetterMerge oldLetterMerge)
 {
     if (letterMerge.Description != oldLetterMerge.Description)
     {
         return(true);
     }
     if (letterMerge.TemplateName != oldLetterMerge.TemplateName)
     {
         return(true);
     }
     if (letterMerge.DataFileName != oldLetterMerge.DataFileName)
     {
         return(true);
     }
     if (letterMerge.Category != oldLetterMerge.Category)
     {
         return(true);
     }
     if (letterMerge.ImageFolder != oldLetterMerge.ImageFolder)
     {
         return(true);
     }
     return(false);
 }
예제 #32
0
        private void butPreview_Click(object sender, System.EventArgs e)
        {
#if !DISABLE_MICROSOFT_OFFICE
            if (listLetters.SelectedIndex == -1)
            {
                MsgBox.Show(this, "Please select a letter first.");
                return;
            }
            LetterMerge letterCur = ListForCat[listLetters.SelectedIndex];
            letterCur.ImageFolder = comboImageCategory.SelectedTag <Def>().DefNum;
            string templateFile = ODFileUtils.CombinePaths(PrefC.GetString(PrefName.LetterMergePath), letterCur.TemplateName);
            string dataFile     = ODFileUtils.CombinePaths(PrefC.GetString(PrefName.LetterMergePath), letterCur.DataFileName);
            if (!File.Exists(templateFile))
            {
                MsgBox.Show(this, "Template file does not exist.");
                return;
            }
            if (!CreateDataFile(dataFile, letterCur))
            {
                return;
            }
            Word.MailMerge wrdMailMerge;
            //Create an instance of Word.
            Word.Application WrdApp;
            try{
                WrdApp = LetterMerges.WordApp;
            }
            catch {
                MsgBox.Show(this, "Error. Is Word installed?");
                return;
            }
            string errorMessage = "";
            //Open a document.
            try {
                Object oName = templateFile;
                wrdDoc = WrdApp.Documents.Open(ref oName, ref oMissing, ref oMissing,
                                               ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                                               ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
                wrdDoc.Select();
            }
            catch (Exception ex) {
                errorMessage = Lan.g(this, "Error opening document:") + "\r\n" + ex.Message;
                MessageBox.Show(errorMessage);
                return;
            }
            //Attach the data file.
            try {
                wrdMailMerge = wrdDoc.MailMerge;
                wrdDoc.MailMerge.OpenDataSource(dataFile, ref oMissing, ref oMissing, ref oMissing,
                                                ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                                                ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
                wrdMailMerge.Destination = Word.WdMailMergeDestination.wdSendToNewDocument;
                wrdMailMerge.Execute(ref oFalse);
            }
            catch (Exception ex) {
                errorMessage = Lan.g(this, "Error attaching data file:") + "\r\n" + ex.Message;
                MessageBox.Show(errorMessage);
                return;
            }
            if (letterCur.ImageFolder != 0)           //if image folder exist for this letter, save to AtoZ folder
            //Open document from the atoz folder.
            {
                try {
                    WrdApp.Activate();
                    string tempFilePath = ODFileUtils.CreateRandomFile(Path.GetTempPath(), GetFileExtensionForWordDoc(templateFile));
                    Object oFileName    = tempFilePath;
                    WrdApp.ActiveDocument.SaveAs(oFileName);                    //save the document to temp location
                    Document doc       = SaveToImageFolder(tempFilePath, letterCur);
                    string   patFolder = ImageStore.GetPatientFolder(PatCur, ImageStore.GetPreferredAtoZpath());
                    string   fileName  = ImageStore.GetFilePath(doc, patFolder);
                    if (!FileAtoZ.Exists(fileName))
                    {
                        throw new ApplicationException(Lans.g("LetterMerge", "Error opening document" + " " + doc.FileName));
                    }
                    FileAtoZ.StartProcess(fileName);
                    WrdApp.ActiveDocument.Close();                    //Necessary since we created an extra document
                    try {
                        File.Delete(tempFilePath);                    //Clean up the temp file
                    }
                    catch (Exception ex) {
                        ex.DoNothing();
                    }
                }
                catch (Exception ex) {
                    FriendlyException.Show(Lan.g(this, "Error saving file to the Image module:") + "\r\n" + ex.Message, ex);
                }
            }
            //Close the original form document since just one record.
            try {
                wrdDoc.Saved = true;
                wrdDoc.Close(ref oFalse, ref oMissing, ref oMissing);
            }
            catch (Exception ex) {
                errorMessage = Lan.g(this, "Error closing document:") + "\r\n" + ex.Message;
                MessageBox.Show(errorMessage);
                return;
            }
            //At this point, Word remains open with just one new document.
            try {
                WrdApp.Activate();
                if (WrdApp.WindowState == Word.WdWindowState.wdWindowStateMinimize)
                {
                    WrdApp.WindowState = Word.WdWindowState.wdWindowStateMaximize;
                }
            }
            catch (Exception ex) {
                errorMessage = Lan.g(this, "Error showing Microsoft Word:") + "\r\n" + ex.Message;
                MessageBox.Show(errorMessage);
                return;
            }
            wrdMailMerge = null;
            wrdDoc       = null;
            Commlog CommlogCur = new Commlog();
            CommlogCur.CommDateTime   = DateTime.Now;
            CommlogCur.CommType       = Commlogs.GetTypeAuto(CommItemTypeAuto.MISC);
            CommlogCur.Mode_          = CommItemMode.Mail;
            CommlogCur.SentOrReceived = CommSentOrReceived.Sent;
            CommlogCur.PatNum         = PatCur.PatNum;
            CommlogCur.Note           = "Letter sent: " + letterCur.Description + ". ";
            CommlogCur.UserNum        = Security.CurUser.UserNum;
            Commlogs.Insert(CommlogCur);
#else
            MessageBox.Show(this, "This version of Open Dental does not support Microsoft Word.");
#endif
            //this window now closes regardless of whether the user saved the comm item.
            DialogResult = DialogResult.OK;
        }
예제 #33
0
        private void butPrint_Click(object sender, System.EventArgs e)
        {
#if DISABLE_MICROSOFT_OFFICE
            MessageBox.Show(this, "This version of Open Dental does not support Microsoft Word.");
            return;
#endif
            if (listLetters.SelectedIndex == -1)
            {
                MsgBox.Show(this, "Please select a letter first.");
                return;
            }
            LetterMerge letterCur = ListForCat[listLetters.SelectedIndex];
            letterCur.ImageFolder = comboImageCategory.SelectedTag <Def>().DefNum;
            string templateFile = ODFileUtils.CombinePaths(PrefC.GetString(PrefName.LetterMergePath), letterCur.TemplateName);
            string dataFile     = ODFileUtils.CombinePaths(PrefC.GetString(PrefName.LetterMergePath), letterCur.DataFileName);
            if (!File.Exists(templateFile))
            {
                MsgBox.Show(this, "Template file does not exist.");
                return;
            }
            PrintDocument pd = new PrintDocument();
            if (!PrinterL.SetPrinter(pd, PrintSituation.Default, PatCur.PatNum, "Letter merge " + letterCur.Description + " printed"))
            {
                return;
            }
            if (!CreateDataFile(dataFile, letterCur))
            {
                return;
            }
            Word.MailMerge wrdMailMerge;
            //Create an instance of Word.
            Word.Application WrdApp;
            try {
                WrdApp = LetterMerges.WordApp;
            }
            catch {
                MsgBox.Show(this, "Error.  Is MS Word installed?");
                return;
            }
            //Open a document.
            Object oName = templateFile;
            wrdDoc = WrdApp.Documents.Open(ref oName, ref oMissing, ref oMissing,
                                           ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                                           ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
            wrdDoc.Select();
            wrdMailMerge = wrdDoc.MailMerge;
            //Attach the data file.
            wrdDoc.MailMerge.OpenDataSource(dataFile, ref oMissing, ref oMissing, ref oMissing,
                                            ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                                            ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
            wrdMailMerge.Destination = Word.WdMailMergeDestination.wdSendToPrinter;
            //WrdApp.ActivePrinter=pd.PrinterSettings.PrinterName;
            //replaced with following 4 lines due to MS bug that changes computer default printer
            object   oWBasic   = WrdApp.WordBasic;
            object[] oWBValues = new object[] { pd.PrinterSettings.PrinterName, 1 };
            String[] sWBNames  = new String[] { "Printer", "DoNotSetAsSysDefault" };
            oWBasic.GetType().InvokeMember("FilePrintSetup", BindingFlags.InvokeMethod, null, oWBasic, oWBValues, null, null, sWBNames);
            wrdMailMerge.Execute(ref oFalse);
            if (letterCur.ImageFolder != 0)           //if image folder exist for this letter, save to AtoZ folder
            {
                try {
                    wrdDoc.Select();
                    wrdMailMerge.Destination = Word.WdMailMergeDestination.wdSendToNewDocument;
                    wrdMailMerge.Execute(ref oFalse);
                    WrdApp.Activate();
                    string tempFilePath = ODFileUtils.CreateRandomFile(Path.GetTempPath(), GetFileExtensionForWordDoc(templateFile));
                    Object oFileName    = tempFilePath;
                    WrdApp.ActiveDocument.SaveAs(oFileName);                    //save the document
                    WrdApp.ActiveDocument.Close();
                    SaveToImageFolder(tempFilePath, letterCur);
                }
                catch (Exception ex) {
                    FriendlyException.Show(Lan.g(this, "Error saving file to the Image module:") + "\r\n" + ex.Message, ex);
                }
            }
            //Close the original form document since just one record.
            wrdDoc.Saved = true;
            wrdDoc.Close(ref oFalse, ref oMissing, ref oMissing);
            //At this point, Word remains open with no documents.
            WrdApp.WindowState = Word.WdWindowState.wdWindowStateMinimize;
            wrdMailMerge       = null;
            wrdDoc             = null;
            Commlog CommlogCur = new Commlog();
            CommlogCur.CommDateTime   = DateTime.Now;
            CommlogCur.CommType       = Commlogs.GetTypeAuto(CommItemTypeAuto.MISC);
            CommlogCur.Mode_          = CommItemMode.Mail;
            CommlogCur.SentOrReceived = CommSentOrReceived.Sent;
            CommlogCur.PatNum         = PatCur.PatNum;
            CommlogCur.Note           = "Letter sent: " + letterCur.Description + ". ";
            CommlogCur.UserNum        = Security.CurUser.UserNum;
            Commlogs.Insert(CommlogCur);
            DialogResult = DialogResult.OK;
        }
예제 #34
0
 ///<summary>Updates one LetterMerge in the database.</summary>
 internal static void Update(LetterMerge letterMerge)
 {
     string command="UPDATE lettermerge SET "
         +"Description   = '"+POut.String(letterMerge.Description)+"', "
         +"TemplateName  = '"+POut.String(letterMerge.TemplateName)+"', "
         +"DataFileName  = '"+POut.String(letterMerge.DataFileName)+"', "
         +"Category      =  "+POut.Long  (letterMerge.Category)+" "
         +"WHERE LetterMergeNum = "+POut.Long(letterMerge.LetterMergeNum);
     Db.NonQ(command);
 }
예제 #35
0
 ///<summary>Updates one LetterMerge in the database.  Uses an old object to compare to, and only alters changed fields.  This prevents collisions and concurrency problems in heavily used tables.</summary>
 internal static void Update(LetterMerge letterMerge,LetterMerge oldLetterMerge)
 {
     string command="";
     if(letterMerge.Description != oldLetterMerge.Description) {
         if(command!=""){ command+=",";}
         command+="Description = '"+POut.String(letterMerge.Description)+"'";
     }
     if(letterMerge.TemplateName != oldLetterMerge.TemplateName) {
         if(command!=""){ command+=",";}
         command+="TemplateName = '"+POut.String(letterMerge.TemplateName)+"'";
     }
     if(letterMerge.DataFileName != oldLetterMerge.DataFileName) {
         if(command!=""){ command+=",";}
         command+="DataFileName = '"+POut.String(letterMerge.DataFileName)+"'";
     }
     if(letterMerge.Category != oldLetterMerge.Category) {
         if(command!=""){ command+=",";}
         command+="Category = "+POut.Long(letterMerge.Category)+"";
     }
     if(command==""){
         return;
     }
     command="UPDATE lettermerge SET "+command
         +" WHERE LetterMergeNum = "+POut.Long(letterMerge.LetterMergeNum);
     Db.NonQ(command);
 }