diff --git a/DSWeb/Areas/MvcShipping/Controllers/MsCompanysController.cs b/DSWeb/Areas/MvcShipping/Controllers/MsCompanysController.cs index 871e5274..8ac9719c 100644 --- a/DSWeb/Areas/MvcShipping/Controllers/MsCompanysController.cs +++ b/DSWeb/Areas/MvcShipping/Controllers/MsCompanysController.cs @@ -11,7 +11,7 @@ using System.Collections.Generic; using DSWeb.MvcShipping.DAL.MsBaseInfoDAL; using DSWeb.EntityDA; using DSWeb.Models; -using DSWeb.Attributes; +//using DSWeb.Attributes; using DSWeb.SoftMng.DBUtility; using DSWeb.SoftMng.BLL; using DSWeb.SoftMng.Common; diff --git a/DSWeb/Areas/MvcShipping/Controllers/MsCrmQuotationController.cs b/DSWeb/Areas/MvcShipping/Controllers/MsCrmQuotationController.cs index a99712d8..1065c97c 100644 --- a/DSWeb/Areas/MvcShipping/Controllers/MsCrmQuotationController.cs +++ b/DSWeb/Areas/MvcShipping/Controllers/MsCrmQuotationController.cs @@ -11,7 +11,7 @@ using System.Collections.Generic; using DSWeb.MvcShipping.DAL.MsBaseInfoDAL; using DSWeb.EntityDA; using DSWeb.Models; -using DSWeb.Attributes; +//using DSWeb.Attributes; using DSWeb.MvcShipping.Models.MsSysBillNoSet; using DSWeb.MvcShipping.DAL.MsSysBillNoSet; using DSWeb.MvcShipping.Models.MsCodeServiceFeeTemplate; diff --git a/DSWeb/Areas/MvcShipping/Controllers/MsExchangesUnitController.cs b/DSWeb/Areas/MvcShipping/Controllers/MsExchangesUnitController.cs index 7ed8df52..92fdb9eb 100644 --- a/DSWeb/Areas/MvcShipping/Controllers/MsExchangesUnitController.cs +++ b/DSWeb/Areas/MvcShipping/Controllers/MsExchangesUnitController.cs @@ -11,7 +11,7 @@ using System.Collections.Generic; using DSWeb.MvcShipping.DAL.MsBaseInfoDAL; using DSWeb.EntityDA; using DSWeb.Models; -using DSWeb.Attributes; +//using DSWeb.Attributes; using System.IO; namespace DSWeb.MvcShipping.Controllers diff --git a/DSWeb/Areas/MvcShipping/Controllers/MsOpOtherController.cs b/DSWeb/Areas/MvcShipping/Controllers/MsOpOtherController.cs index 04cd8380..048a103a 100644 --- a/DSWeb/Areas/MvcShipping/Controllers/MsOpOtherController.cs +++ b/DSWeb/Areas/MvcShipping/Controllers/MsOpOtherController.cs @@ -11,7 +11,7 @@ using System.Collections.Generic; using DSWeb.MvcShipping.DAL.MsBaseInfoDAL; using DSWeb.EntityDA; using DSWeb.Models; -using DSWeb.Attributes; +//using DSWeb.Attributes; using DSWeb.MvcShipping.Models.MsSysBillNoSet; using DSWeb.MvcShipping.DAL.MsSysBillNoSet; using DSWeb.MvcShipping.Models.MsCodeServiceFeeTemplate; diff --git a/DSWeb/Areas/MvcShipping/Controllers/MsOpSeaePreController.cs b/DSWeb/Areas/MvcShipping/Controllers/MsOpSeaePreController.cs index 2a63431e..dcfe9518 100644 --- a/DSWeb/Areas/MvcShipping/Controllers/MsOpSeaePreController.cs +++ b/DSWeb/Areas/MvcShipping/Controllers/MsOpSeaePreController.cs @@ -11,7 +11,7 @@ using System.Collections.Generic; using DSWeb.MvcShipping.DAL.MsBaseInfoDAL; using DSWeb.EntityDA; using DSWeb.Models; -using DSWeb.Attributes; +//using DSWeb.Attributes; using DSWeb.MvcShipping.Models.MsSysBillNoSet; using DSWeb.MvcShipping.DAL.MsSysBillNoSet; using DSWeb.MvcShipping.Models.MsCodeServiceFeeTemplate; diff --git a/DSWeb/Areas/MvcShipping/Controllers/MsOpSocCtnController.cs b/DSWeb/Areas/MvcShipping/Controllers/MsOpSocCtnController.cs index cb596422..cbdffafc 100644 --- a/DSWeb/Areas/MvcShipping/Controllers/MsOpSocCtnController.cs +++ b/DSWeb/Areas/MvcShipping/Controllers/MsOpSocCtnController.cs @@ -11,7 +11,7 @@ using System.Collections.Generic; using DSWeb.MvcShipping.DAL.MsBaseInfoDAL; using DSWeb.EntityDA; using DSWeb.Models; -using DSWeb.Attributes; +//using DSWeb.Attributes; using DSWeb.MvcShipping.Models.MsSysBillNoSet; using DSWeb.MvcShipping.DAL.MsSysBillNoSet; using DSWeb.MvcShipping.Models.MsCodeServiceFeeTemplate; diff --git a/DSWeb/Areas/SoftMng/Controllers/AuthController.cs b/DSWeb/Areas/SoftMng/Controllers/AuthController.cs index e3377d46..84bd718f 100644 --- a/DSWeb/Areas/SoftMng/Controllers/AuthController.cs +++ b/DSWeb/Areas/SoftMng/Controllers/AuthController.cs @@ -717,23 +717,23 @@ namespace DSWeb.SoftMng.Controllers /// /// /// - public JsonResult RoleAuthDelete2(string roleid, string ids) - { - var module = new Modules.ModuleGridSource(); - user_roleBLL ubll = new user_roleBLL(); - sys_roleauthBLL mbll = new sys_roleauthBLL(); - - bool result = mbll.DeleteListWhere(string.Format("PID ='{0}' AND AuthorityID IN({1})", roleid, ids)) > 0; - //所有拥有此角色的人员删除该权限 - var list = ubll.GetModelList("ROLEID='" + roleid + "'"); - string[] delItems = ids.Split(','); - foreach (var item in delItems) - { - foreach (var p in list) - module.RemoveUserModule(p.USERID, item.Replace("\'", "")); - } - return Json(new { success = result, message = result ? "操作成功" : "操作失败" }); - } + //public JsonResult RoleAuthDelete2(string roleid, string ids) + //{ + // var module = new Modules.ModuleGridSource(); + // user_roleBLL ubll = new user_roleBLL(); + // sys_roleauthBLL mbll = new sys_roleauthBLL(); + + // bool result = mbll.DeleteListWhere(string.Format("PID ='{0}' AND AuthorityID IN({1})", roleid, ids)) > 0; + // //所有拥有此角色的人员删除该权限 + // var list = ubll.GetModelList("ROLEID='" + roleid + "'"); + // string[] delItems = ids.Split(','); + // foreach (var item in delItems) + // { + // foreach (var p in list) + // module.RemoveUserModule(p.USERID, item.Replace("\'", "")); + // } + // return Json(new { success = result, message = result ? "操作成功" : "操作失败" }); + //} /// /// 获取人员树型 /// @@ -820,36 +820,36 @@ namespace DSWeb.SoftMng.Controllers /// /// /// - public JsonResult SetRole(string userid, string roleid, int type) - { - sys_roleauthBLL mbll = new sys_roleauthBLL(); - var authlist = mbll.GetModelList("Type=1 And PID ='" + roleid + "'"); - var module = new Modules.ModuleGridSource(); - string msg = ""; - try - { - foreach (var item in authlist) - { - if (type == 0) - { - var m = module.RemoveUserModule(userid, item.AuthorityID); - if (m != "1") msg += m + "
"; - } - else - { - var m = module.AddUserModule(userid, item.AuthorityID); - if (m != "1") msg += m + "
"; - } - } - //绑定用户角色表 - //dosomething - return Json(msg); - } - catch (Exception se) - { - return Json(se.Message); - } - } + //public JsonResult SetRole(string userid, string roleid, int type) + //{ + // sys_roleauthBLL mbll = new sys_roleauthBLL(); + // var authlist = mbll.GetModelList("Type=1 And PID ='" + roleid + "'"); + // var module = new Modules.ModuleGridSource(); + // string msg = ""; + // try + // { + // foreach (var item in authlist) + // { + // if (type == 0) + // { + // var m = module.RemoveUserModule(userid, item.AuthorityID); + // if (m != "1") msg += m + "
"; + // } + // else + // { + // var m = module.AddUserModule(userid, item.AuthorityID); + // if (m != "1") msg += m + "
"; + // } + // } + // //绑定用户角色表 + // //dosomething + // return Json(msg); + // } + // catch (Exception se) + // { + // return Json(se.Message); + // } + //} /// /// 设置权限范围 /// @@ -1059,49 +1059,49 @@ namespace DSWeb.SoftMng.Controllers /// /// /// - public JsonResult SaveRoleAuth(string roleid, string modulelist) - { - var module = new Modules.ModuleGridSource(); - sys_roleauthBLL mbll = new sys_roleauthBLL(); - user_roleBLL ubll = new user_roleBLL(); - try - { - var data = new JavaScriptSerializer().Deserialize>(modulelist); - var list = ubll.GetModelList("ROLEID='" + roleid + "'"); - - //20200225 首先检查拥有该角色的所有人 能否获得该权限范围 - var useridlist = ""; - foreach (var user in list) { - if (useridlist != "") useridlist += ","; - useridlist += user.GID; - } - - var checkresult = SysUserDAL.CheckOPRange(data, useridlist); - if (!checkresult.Success) { - return Json(new { success = false, msg = checkresult.Message }); - } - - foreach (var item in data) - { - sys_roleauth model = new sys_roleauth(); - model.GID = Guid.NewGuid().ToString(); - model.AuthorityID = item.id;//模块id - model.Name = item.name; - model.PID = roleid; - model.Type = 1;//一般权限 - mbll.Add(model); - //所有拥有此角色的人员添加该权限 + //public JsonResult SaveRoleAuth(string roleid, string modulelist) + //{ + // var module = new Modules.ModuleGridSource(); + // sys_roleauthBLL mbll = new sys_roleauthBLL(); + // user_roleBLL ubll = new user_roleBLL(); + // try + // { + // var data = new JavaScriptSerializer().Deserialize>(modulelist); + // var list = ubll.GetModelList("ROLEID='" + roleid + "'"); + + // //20200225 首先检查拥有该角色的所有人 能否获得该权限范围 + // var useridlist = ""; + // foreach (var user in list) { + // if (useridlist != "") useridlist += ","; + // useridlist += user.GID; + // } + + // var checkresult = SysUserDAL.CheckOPRange(data, useridlist); + // if (!checkresult.Success) { + // return Json(new { success = false, msg = checkresult.Message }); + // } + + // foreach (var item in data) + // { + // sys_roleauth model = new sys_roleauth(); + // model.GID = Guid.NewGuid().ToString(); + // model.AuthorityID = item.id;//模块id + // model.Name = item.name; + // model.PID = roleid; + // model.Type = 1;//一般权限 + // mbll.Add(model); + // //所有拥有此角色的人员添加该权限 - foreach (var p in list) - module.AddUserModule(p.USERID, item.id); - } - return Json(new { success = true }); - } - catch (Exception se) - { - return Json(new { success = false, msg = se.Message }); - } - } + // foreach (var p in list) + // module.AddUserModule(p.USERID, item.id); + // } + // return Json(new { success = true }); + // } + // catch (Exception se) + // { + // return Json(new { success = false, msg = se.Message }); + // } + //} //获取全部角色 public JsonResult GetRoleView() { @@ -1159,14 +1159,14 @@ namespace DSWeb.SoftMng.Controllers case 1://添加角色 ubll.Add(model); //加权限 - SetRole(userid, item.id, 1); + //SetRole(userid, item.id, 1); ////修改权限范围 //SetRange(userid, item.id, 1); break; case 0://移除角色 ubll.DeleteListWhere(string.Format("USERID='{0}' AND ROLEID='{1}'", userid, item.id)); ////移除权限 - SetRole(userid, item.id, 0); + //SetRole(userid, item.id, 0); ////恢复默认权限范围 //SetRange(userid, item.id, 0); break; diff --git a/DSWeb/Areas/SoftMng/Controllers/MsInfoClientFeedbackController.cs b/DSWeb/Areas/SoftMng/Controllers/MsInfoClientFeedbackController.cs index 273e7465..3e090faa 100644 --- a/DSWeb/Areas/SoftMng/Controllers/MsInfoClientFeedbackController.cs +++ b/DSWeb/Areas/SoftMng/Controllers/MsInfoClientFeedbackController.cs @@ -7,7 +7,7 @@ using HcUtility.Comm; using HcUtility.Core; using DSWeb.EntityDA; using DSWeb.Models; -using DSWeb.Attributes; +//using DSWeb.Attributes; using DSWeb.SoftMng.DAL.MsInfoClientFeedbackDAL; using DSWeb.SoftMng.Models.MsInfoClientFeedback; using DSWeb.MvcShipping.Helper; diff --git a/DSWeb/Areas/TruckMng/Controllers/MsOpTruckBulkController.cs b/DSWeb/Areas/TruckMng/Controllers/MsOpTruckBulkController.cs index 8bb8c8ee..152c84f9 100644 --- a/DSWeb/Areas/TruckMng/Controllers/MsOpTruckBulkController.cs +++ b/DSWeb/Areas/TruckMng/Controllers/MsOpTruckBulkController.cs @@ -8,7 +8,7 @@ using HcUtility.Comm; using HcUtility.Core; using System.Collections.Generic; using DSWeb.EntityDA; -using DSWeb.Attributes; +//using DSWeb.Attributes; using DSWeb.MvcShipping.DAL.MsSysBillNoSet; using DSWeb.MvcShipping.DAL.MsInfoClient; using System.IO; @@ -179,7 +179,7 @@ namespace DSWeb.Areas.TruckMng.Controllers } // T_ALL_DA T_ALL_DA = new EntityDA.T_ALL_DA(); - AttributeManage attributeManager = new AttributeManage(); + ////AttributeManage attributeManager = new AttributeManage(); var dataall = data.Replace("}", ",") + data2.Replace("{", ""); var headData = JsonConvert.Deserialize(dataall); var bodyList = JsonConvert.Deserialize>(body); @@ -419,7 +419,7 @@ namespace DSWeb.Areas.TruckMng.Controllers } // T_ALL_DA T_ALL_DA = new EntityDA.T_ALL_DA(); - AttributeManage attributeManager = new AttributeManage(); + //AttributeManage attributeManager = new AttributeManage(); var dataall = data.Replace("}", ",") + data2.Replace("{", ""); var headData = JsonConvert.Deserialize(dataall); var bodyList = JsonConvert.Deserialize>(body); @@ -591,7 +591,7 @@ namespace DSWeb.Areas.TruckMng.Controllers } // T_ALL_DA T_ALL_DA = new EntityDA.T_ALL_DA(); - AttributeManage attributeManager = new AttributeManage(); + //AttributeManage attributeManager = new AttributeManage(); var dataall = data.Replace("}", ",") + data2.Replace("{", ""); var headData = JsonConvert.Deserialize(dataall); var bodyList = JsonConvert.Deserialize>(body); diff --git a/DSWeb/Areas/TruckMng/Controllers/MsOpTruckBulkPcController.cs b/DSWeb/Areas/TruckMng/Controllers/MsOpTruckBulkPcController.cs index 222eb5c8..c676942a 100644 --- a/DSWeb/Areas/TruckMng/Controllers/MsOpTruckBulkPcController.cs +++ b/DSWeb/Areas/TruckMng/Controllers/MsOpTruckBulkPcController.cs @@ -10,7 +10,7 @@ using HcUtility.Comm; using HcUtility.Core; using System.Collections.Generic; using DSWeb.EntityDA; -using DSWeb.Attributes; +//using DSWeb.Attributes; using DSWeb.MvcShipping.DAL.MsSysBillNoSet; namespace DSWeb.Areas.TruckMng.Controllers @@ -128,7 +128,7 @@ namespace DSWeb.Areas.TruckMng.Controllers } // T_ALL_DA T_ALL_DA = new EntityDA.T_ALL_DA(); - AttributeManage attributeManager = new AttributeManage(); + //AttributeManage attributeManager = new AttributeManage(); var headData = JsonConvert.Deserialize(data); @@ -375,7 +375,7 @@ namespace DSWeb.Areas.TruckMng.Controllers } // T_ALL_DA T_ALL_DA = new EntityDA.T_ALL_DA(); - AttributeManage attributeManager = new AttributeManage(); + //AttributeManage attributeManager = new AttributeManage(); var headData = JsonConvert.Deserialize(data); var bodyList = JsonConvert.Deserialize>(body); @@ -536,7 +536,7 @@ namespace DSWeb.Areas.TruckMng.Controllers } // T_ALL_DA T_ALL_DA = new EntityDA.T_ALL_DA(); - AttributeManage attributeManager = new AttributeManage(); + //AttributeManage attributeManager = new AttributeManage(); var OpTruckBulk = JsonConvert.Deserialize(data); var isPost = true; @@ -741,7 +741,7 @@ namespace DSWeb.Areas.TruckMng.Controllers } // T_ALL_DA T_ALL_DA = new EntityDA.T_ALL_DA(); - AttributeManage attributeManager = new AttributeManage(); + //AttributeManage attributeManager = new AttributeManage(); var OpTruckBulk = JsonConvert.Deserialize(data); @@ -772,7 +772,7 @@ namespace DSWeb.Areas.TruckMng.Controllers } // T_ALL_DA T_ALL_DA = new EntityDA.T_ALL_DA(); - AttributeManage attributeManager = new AttributeManage(); + //AttributeManage attributeManager = new AttributeManage(); var bodyList = JsonConvert.Deserialize < List>(data); var result = MsOpTruckBulkPcDAL.UpTransStatus(bodyList, transstatus, statusdate, arriverremark); @@ -805,7 +805,7 @@ namespace DSWeb.Areas.TruckMng.Controllers } // T_ALL_DA T_ALL_DA = new EntityDA.T_ALL_DA(); - AttributeManage attributeManager = new AttributeManage(); + //AttributeManage attributeManager = new AttributeManage(); var headData = JsonConvert.Deserialize(data); var bodyList = JsonConvert.Deserialize>(body); @@ -987,7 +987,7 @@ namespace DSWeb.Areas.TruckMng.Controllers // T_ALL_DA T_ALL_DA = new EntityDA.T_ALL_DA(); - AttributeManage attributeManager = new AttributeManage(); + //AttributeManage attributeManager = new AttributeManage(); var headData = JsonConvert.Deserialize(data); diff --git a/DSWeb/DSWeb.csproj b/DSWeb/DSWeb.csproj index 2995acf6..d987dc0d 100644 --- a/DSWeb/DSWeb.csproj +++ b/DSWeb/DSWeb.csproj @@ -4311,13 +4311,6 @@ - - - - - - - @@ -4341,10 +4334,6 @@ - - - - @@ -4358,8 +4347,6 @@ - - @@ -5278,10 +5265,6 @@ - - - - @@ -6936,13 +6919,6 @@ - - About.aspx - ASPXCodeBehind - - - About.aspx - @@ -7304,71 +7280,7 @@ - - AttributeCompanyEdit.aspx - ASPXCodeBehind - - - AttributeCompanyEdit.aspx - - - AttributeCompanyList.aspx - ASPXCodeBehind - - - AttributeCompanyList.aspx - - - AttributeEdit.aspx - ASPXCodeBehind - - - AttributeEdit.aspx - - - AttributeGridSource.aspx - ASPXCodeBehind - - - AttributeGridSource.aspx - - - - AttributeManageList.aspx - ASPXCodeBehind - - - AttributeManageList.aspx - - - TypeEdit.aspx - ASPXCodeBehind - - - TypeEdit.aspx - - - TypeList.aspx - ASPXCodeBehind - - - TypeList.aspx - - - wucGridView.ascx - ASPXCodeBehind - - - wucGridView.ascx - - - wucGridView2.ascx - ASPXCodeBehind - - - wucGridView2.ascx - @@ -9081,216 +8993,6 @@ - - CRMClientAssignList.aspx - ASPXCodeBehind - - - CRMClientAssignList.aspx - - - CRMClientAssignListGridSource.aspx - ASPXCodeBehind - - - CRMClientAssignListGridSource.aspx - - - CRMClientContactAllList.aspx - ASPXCodeBehind - - - CRMClientContactAllList.aspx - - - CRMClientContactAllListGridSource.aspx - ASPXCodeBehind - - - CRMClientContactAllListGridSource.aspx - - - CRMClientContactAnniversaryList.aspx - ASPXCodeBehind - - - CRMClientContactAnniversaryList.aspx - - - CRMClientContactAnniversaryListGridSource.aspx - ASPXCodeBehind - - - CRMClientContactAnniversaryListGridSource.aspx - - - CRMClientEdit.aspx - ASPXCodeBehind - - - CRMClientEdit.aspx - - - CRMClientOverview.aspx - ASPXCodeBehind - - - CRMClientOverview.aspx - - - CRMClientQuotationList.aspx - ASPXCodeBehind - - - CRMClientQuotationList.aspx - - - CRMClientVisitInfo.aspx - ASPXCodeBehind - - - CRMClientVisitInfo.aspx - - - CRMClientVisitList.aspx - ASPXCodeBehind - - - CRMClientVisitList.aspx - - - CRMClientVisitListGridSource.aspx - ASPXCodeBehind - - - CRMClientVisitListGridSource.aspx - - - CRMClientVisitNotList.aspx - ASPXCodeBehind - - - CRMClientVisitNotList.aspx - - - CRMClientVisitNotListGridSource.aspx - ASPXCodeBehind - - - CRMClientVisitNotListGridSource.aspx - - - CRMClientVisitPlanList.aspx - ASPXCodeBehind - - - CRMClientVisitPlanList.aspx - - - CRMClientVisitPlanListGridSource.aspx - ASPXCodeBehind - - - CRMClientVisitPlanListGridSource.aspx - - - CRMInfoFaqInfo.aspx - ASPXCodeBehind - - - CRMInfoFaqInfo.aspx - - - CRMClientList.aspx - ASPXCodeBehind - - - CRMClientList.aspx - - - CRMClientListGridSource.aspx - ASPXCodeBehind - - - CRMClientListGridSource.aspx - - - CRMClientInfo.aspx - ASPXCodeBehind - - - CRMClientInfo.aspx - - - CRMClientContactInfo.aspx - ASPXCodeBehind - - - CRMClientContactInfo.aspx - - - CRMClientContactList.aspx - ASPXCodeBehind - - - CRMClientContactList.aspx - - - CRMClientContactListGridSource.aspx - ASPXCodeBehind - - - CRMClientContactListGridSource.aspx - - - CRMInfoFaqList.aspx - ASPXCodeBehind - - - CRMInfoFaqList.aspx - - - CRMInfoFaqListGridSource.aspx - ASPXCodeBehind - - - CRMInfoFaqListGridSource.aspx - - - CRMClientSaleIndex.aspx - ASPXCodeBehind - - - CRMClientSaleIndex.aspx - - - CRMClientQuotationInfo.aspx - ASPXCodeBehind - - - CRMClientQuotationInfo.aspx - - - CRMClientQuotationListGridSource.aspx - ASPXCodeBehind - - - CRMClientQuotationListGridSource.aspx - - - SaleProfitReport.aspx - ASPXCodeBehind - - - SaleProfitReport.aspx - - - SaleProfitReportGridSource.aspx - ASPXCodeBehind - - - SaleProfitReportGridSource.aspx - Default.aspx ASPXCodeBehind @@ -9435,10 +9137,14 @@ Login.aspx + + + + @@ -9451,25 +9157,41 @@ + + + + + + + + + + + + + + + + @@ -9478,6 +9200,8 @@ + + @@ -9486,12 +9210,16 @@ + + + + @@ -9504,9 +9232,10 @@ + + - @@ -9519,8 +9248,11 @@ + + + @@ -9535,38 +9267,48 @@ + + + + + + + + + + + + + + + - + + + + - - - ModuleManagement.aspx - ASPXCodeBehind - - - ModuleManagement.aspx - ASPXCodeBehind @@ -9642,81 +9384,6 @@ MainPortal.aspx - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Add.aspx - ASPXCodeBehind - - - Add.aspx - - - Edit.aspx - ASPXCodeBehind - - - Edit.aspx - - - ModuleGridSource.aspx - ASPXCodeBehind - - - ModuleGridSource.aspx - - - ModuleList.aspx - ASPXCodeBehind - - - ModuleList.aspx - ShowFavorite.aspx @@ -9872,7 +9539,6 @@ - @@ -10218,40 +9884,12 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - -