internal static void UpdateField(Model.Archive.ArchiveDataClassesDataContext dc, Model.Common.ArchiveGroupField archiveGroupField)
        {
            Model.Archive.ArchiveField originalArchiveField = dc.ArchiveFields.Where(t => t.IDParent == archiveGroupField.ID).Single();
            string originalLabel        = originalArchiveField.Label;
            string originalTabTitle     = originalArchiveField.ArchiveTab.Title;
            int    originalBoxTypeCode  = originalArchiveField.BoxTypeCode;
            string originalDefaultValue = originalArchiveField.DefaultValue;

            Model.Archive.ArchiveTab archiveTab = dc.ArchiveTabs.Where(t => t.ID == originalArchiveField.ArchiveTabID).Single();

            if (ArchiveFieldController.FieldNameAlreadyExist(dc, archiveTab.ID, archiveGroupField.Label, originalArchiveField.ID))
            {
                throw new Exception(string.Format("فیلد '{0}' در گروه اطلاعاتی '{1}' وجود دارد. لطفا نام دیگری انتخاب کنید", archiveGroupField.Label, archiveTab.Title));
            }

            Model.Archive.ArchiveField archiveField = Model.Archive.ArchiveField.GetNewInstance(originalArchiveField.ID, archiveTab.ID, archiveGroupField.Label, originalArchiveField.FieldName, archiveGroupField.FieldTypeCode, archiveGroupField.StatusCode, archiveGroupField.BoxTypeCode, archiveGroupField.AutoComplete, archiveGroupField.MinLength, archiveGroupField.MaxLength, archiveGroupField.MinValue, archiveGroupField.MaxValue, archiveGroupField.DefaultValue, archiveGroupField.ID, originalArchiveField.Index);
            Model.Archive.ArchiveField.Copy(originalArchiveField, archiveField);
            dc.SubmitChanges();

            try
            {
                Setting.User.ThisProgram.AddLog(Setting.User.UserOparatesPlaceNames.بایگانی, Setting.User.UserOparatesNames.ویرایش, null, "ویرایش فیلد '" + originalLabel + "' در گروه اطلاعاتی '" + originalTabTitle + "' در بایگانی '" + dc.GetArchive().Title + "'");
            }
            catch
            {
                throw new Exception("خطا در ذخیره عملکرد کاربر جاری");
            }

            SqlHelper.UpdateArchiveField(dc, originalArchiveField, (Enums.BoxTypes)originalBoxTypeCode, originalDefaultValue);
        }
        internal static int AddField(Field field, int archiveTabID)
        {
            Model.Archive.ArchiveDataClassesDataContext dc = new Model.Archive.ArchiveDataClassesDataContext(Setting.Sql.ThisProgram.ArchiveConnection.ConnectionString);
            dc.Connection.Open();
            dc.Transaction = dc.Connection.BeginTransaction();
            try
            {
                Model.Archive.ArchiveTab archiveTab = dc.ArchiveTabs.Where(t => t.ID == archiveTabID).Single();

                if (ArchiveFieldController.FieldNameAlreadyExist(dc, archiveTabID, field.Label))
                {
                    throw new Exception(string.Format("فیلد '{0}' در گروه اطلاعاتی '{1}' وجود دارد. لطفا نام دیگری انتخاب کنید", field.Label, archiveTab.Title));
                }

                if (archiveTab.Exist == false)
                {
                    SqlHelper.CreateTableForArchiveTab(dc, archiveTab);
                    archiveTab.Exist = true;
                    dc.SubmitChanges();
                }

                int index = 1;
                if (archiveTab.ArchiveFields.Count > 0)
                {
                    index = archiveTab.ArchiveFields.Max(t => t.Index) + 1;
                }
                Model.Archive.ArchiveField archiveField = Model.Archive.ArchiveField.GetNewInstance(archiveTab.ID, field.Label, field.FieldName, field.FieldTypeCode, field.StatusCode, field.BoxTypeCode, field.AutoComplete, field.MinLength, field.MaxLength, field.MinValue, field.MaxValue, field.DefaultValue, null, index);
                dc.ArchiveFields.InsertOnSubmit(archiveField);
                dc.SubmitChanges();

                SqlHelper.CreateArchiveField(dc, archiveField);

                try
                {
                    Setting.User.ThisProgram.AddLog(Setting.User.UserOparatesPlaceNames.بایگانی, Setting.User.UserOparatesNames.ثبت, null, "افزودن فیلد '" + archiveField.Label + "' به گروه اطلاعاتی '" + archiveField.ArchiveTab.Title + "' در بایگانی '" + dc.GetArchive().Title + "'");
                }
                catch
                {
                    throw new Exception("خطا در ذخیره عملکرد کاربر جاری");
                }

                dc.Transaction.Commit();
                dc.Connection.Close();
                return(archiveField.ID);
            }
            catch
            {
                dc.Transaction.Rollback();
                dc.Connection.Close();
                throw;
            }
            finally
            {
                if (dc.Connection.State == System.Data.ConnectionState.Open)
                {
                    dc.Connection.Close();
                }
            }
        }
        internal static void UpdateField(int originalArchiveFieldID, Field field)
        {
            Model.Archive.ArchiveDataClassesDataContext dc = new Model.Archive.ArchiveDataClassesDataContext(Setting.Sql.ThisProgram.ArchiveConnection.ConnectionString);
            dc.Connection.Open();
            dc.Transaction = dc.Connection.BeginTransaction();
            try
            {
                Model.Archive.ArchiveField originalArchiveField = dc.ArchiveFields.Where(t => t.ID == originalArchiveFieldID).Single();
                string originalLabel        = originalArchiveField.Label;
                string originalTabTitle     = originalArchiveField.ArchiveTab.Title;
                int    originalBoxTypeCode  = originalArchiveField.BoxTypeCode;
                string originalDefaultValue = originalArchiveField.DefaultValue;

                if (ArchiveFieldController.FieldNameAlreadyExist(dc, originalArchiveField.ArchiveTabID, field.Label, originalArchiveFieldID))
                {
                    throw new Exception(string.Format("فیلد '{0}' در گروه اطلاعاتی '{1}' وجود دارد. لطفا نام دیگری انتخاب کنید", field.Label, originalArchiveField.ArchiveTab.Title));
                }

                Model.Archive.ArchiveField archiveField = Model.Archive.ArchiveField.GetNewInstance(originalArchiveField.ID, originalArchiveField.ArchiveTabID, field.Label, originalArchiveField.FieldName, field.FieldTypeCode, field.StatusCode, field.BoxTypeCode, field.AutoComplete, field.MinLength, field.MaxLength, field.MinValue, field.MaxValue, field.DefaultValue, originalArchiveField.IDParent, originalArchiveField.Index);
                Model.Archive.ArchiveField.Copy(originalArchiveField, archiveField);
                dc.SubmitChanges();

                SqlHelper.UpdateArchiveField(dc, originalArchiveField, (Enums.BoxTypes)originalBoxTypeCode, originalDefaultValue);

                try
                {
                    Setting.User.ThisProgram.AddLog(Setting.User.UserOparatesPlaceNames.بایگانی, Setting.User.UserOparatesNames.ویرایش, null, "ویرایش فیلد '" + originalLabel + "' در گروه اطلاعاتی '" + originalTabTitle + "' در بایگانی '" + dc.GetArchive().Title + "'");
                }
                catch
                {
                    throw new Exception("خطا در ذخیره عملکرد کاربر جاری");
                }

                dc.Transaction.Commit();
                dc.Connection.Close();
            }
            catch
            {
                dc.Transaction.Rollback();
                dc.Connection.Close();
                throw;
            }
            finally
            {
                if (dc.Connection.State == System.Data.ConnectionState.Open)
                {
                    dc.Connection.Close();
                }
            }
        }
        internal static void AddField(Model.Archive.ArchiveDataClassesDataContext dc, Model.Common.ArchiveGroupField archiveGroupField)
        {
            Model.Archive.ArchiveTab archiveTab = dc.ArchiveTabs.Where(t => t.IDParent == archiveGroupField.ArchiveGroupTabID).Single();

            if (ArchiveFieldController.FieldNameAlreadyExist(dc, archiveTab.ID, archiveGroupField.Label))
            {
                throw new Exception(string.Format("فیلد '{0}' در گروه اطلاعاتی '{1}' وجود دارد. لطفا نام دیگری انتخاب کنید", archiveGroupField.Label, archiveTab.Title));
            }

            if (archiveTab.Exist == false)
            {
                SqlHelper.CreateTableForArchiveTab(dc, archiveTab);
                archiveTab.Exist = true;
                dc.SubmitChanges();
            }

            int index = 1;
            var q     = dc.ArchiveFields.Where(t => t.ArchiveTabID == archiveTab.ID).Select(t => t.Index);

            if (q.Count() > 0)
            {
                index = (q.Max() + 1);
            }
            Model.Archive.ArchiveField archiveField = Model.Archive.ArchiveField.GetNewInstance(archiveTab.ID, archiveGroupField.Label, null, archiveGroupField.FieldTypeCode, archiveGroupField.StatusCode, archiveGroupField.BoxTypeCode, archiveGroupField.AutoComplete, archiveGroupField.MinLength, archiveGroupField.MaxLength, archiveGroupField.MinValue, archiveGroupField.MaxValue, archiveGroupField.DefaultValue, archiveGroupField.ID, index);
            dc.ArchiveFields.InsertOnSubmit(archiveField);
            dc.SubmitChanges();

            SqlHelper.CreateArchiveField(dc, archiveField);

            try
            {
                Setting.User.ThisProgram.AddLog(Setting.User.UserOparatesPlaceNames.بایگانی, Setting.User.UserOparatesNames.ثبت, null, "افزودن فیلد '" + archiveField.Label + "' به گروه اطلاعاتی '" + archiveField.ArchiveTab.Title + "' در بایگانی '" + dc.GetArchive().Title + "'");
            }
            catch
            {
                throw new Exception("خطا در ذخیره عملکرد کاربر جاری");
            }
        }