/// <summary> /// 根据当前用户+请求uri 获取父菜单Id; /// </summary> /// <param name="userId"></param> /// <param name="uri"></param> /// <returns></returns> public Tuple <string, string, string> GetParentModuleIds(int userId, string uri) { string sqlstr = "select moduleid from moduleinfo where status=0 and moduleid in (SELECT DISTINCT moduleid FROM RoleModule WHERE roleid IN(select roleid from userrole where userID=@userId and status=0)) order by level desc"; //获取用户已经有的 moduleId; var userHaveModuleIds = _navigationDapperRepository.QueryBySql <string>(sqlstr, new { userId = userId }); var sysId = _configuration["ThisSysID"]; var nav2or3 = _navigationDapperRepository.Find(s => s.Status == 0 && s.SysID == sysId && s.Links.Contains(uri)); if (nav2or3 == null) { return(new Tuple <string, string, string>("", "", "")); } var b = userHaveModuleIds.Contains(nav2or3.ModuleID); //三级 if (nav2or3.ModuleID.Contains("SUB")) { var moduleId2 = _navigationDapperRepository.Where(s => s.ModuleID == nav2or3.ModuleID).Select(s => s.PID).FirstOrDefault(); var moduleId1 = _navigationDapperRepository.Where(s => s.ModuleID == moduleId2).Select(s => s.PID).FirstOrDefault(); return(new Tuple <string, string, string>(moduleId1, moduleId2, nav2or3.ModuleID)); } else { var moduleId1 = _navigationDapperRepository.Where(s => s.ModuleID == nav2or3.ModuleID).Select(s => s.PID).FirstOrDefault(); return(new Tuple <string, string, string>(moduleId1, nav2or3.ModuleID, "")); } }
private List <ExpenseAccount> RedirectSplit(List <ExpenseAccount> models, int year, int month, string period) { var redirectList = new List <ExpenseAccount>(); var businessRedirectSplitInfos = _businessRedirectSplitRepository.Where(s => s.Month == month && s.Year == year); var departsVersion = _departRepository.Where(s => s.Period == period); foreach (var item in models) { var count = businessRedirectSplitInfos.Count(s => s.FromDepartId == item.DepartID); if (count == 0) { item.SourceId = item.Id; item.Id = 0; item.CreateTime = DateTime.Now; item.Step = (int)CommonEnum.EnumCostAccountSplitStep.RedirectSplit; item.Formula += $"定向:计入---->"; redirectList.Add(item); } else { int i = 1; decimal sum = 0; decimal allAmount = item.Amount; foreach (var redict in businessRedirectSplitInfos.Where(s => s.FromDepartId == item.DepartID).OrderBy(s => s.Split)) { var toRate = string.IsNullOrEmpty(redict.Split) ? 0 : decimal.Round(Convert.ToDecimal(redict.Split) * (decimal)0.01, 2); var temAmount = decimal.Round(item.Amount * toRate, 2); //定向后的钱 var tem = JsonConvert.DeserializeObject <ExpenseAccount>(JsonConvert.SerializeObject(item)); tem.DepartID = redict.ToDepartId; tem.DepartNamePath = departsVersion.Where(s => s.DepartID == redict.ToDepartId).Select(s => s.NamePath).FirstOrDefault(); tem.Amount = i == count ? allAmount - sum : temAmount; tem.Ratio = toRate; tem.SourceId = item.Id; tem.Step = (int)CommonEnum.EnumCostAccountSplitStep.RedirectSplit; tem.Formula += i == count ? $"定向:({allAmount}-{sum})---->" : $"定向:({item.Amount}*{toRate})---->"; redirectList.Add(tem); i++; sum += temAmount; } } } return(redirectList); }
public bool DoSplit(string poCode = "", string period = null) { /** * 1、获取所有拆分前数据 * * 2、获取定向数据 拆分比例 */ //计入日期 period = (string.IsNullOrEmpty(period) || period.Length != 7) ? DateTime.Now.AddMonths(-1).ToString("yyyy-MM") : period; int month = (string.IsNullOrEmpty(period) || period.Length != 7) ? DateTime.Now.AddMonths(-1).Month : Convert.ToInt32(period.Split('-')[1]); int year = (string.IsNullOrEmpty(period) || period.Length != 7) ? DateTime.Now.AddMonths(-1).Year : Convert.ToInt32(period.Split('-')[0]); //更新状态 var dic = EnumHelper.GetValueAndDesc <CommonEnum.EnumCostAccountSplitStep>(); dic.Remove((int)CommonEnum.EnumCostAccountSplitStep.BeforeSplit); var steps = dic.Select(s => s.Key).ToList(); Expression <Func <CostAccount, bool> > delExpression = s => s.Status == 0 && s.Period == period && steps.Contains(s.Step); if (!string.IsNullOrEmpty(poCode)) { delExpression = delExpression.And(s => s.POCode == poCode); } var cc = _costAccountRepository.UpdateWhere(delExpression, new CostAccount() { Status = -1, LastUpdateTime = DateTime.Now }, t => t.Status, t => t.LastUpdateTime); //1 var be = (int)CommonEnum.EnumCostAccountSplitStep.BeforeSplit; var befores = _costAccountRepository.Where(s => s.Period == period && s.Status == 0 && s.Step == be) .WhereIf(!string.IsNullOrEmpty(poCode), s => s.POCode == poCode) .ToList(); //2 var businessRedirectSplitInfos = _businessRedirectSplitRepository.Where(s => s.Month == month && s.Year == year); #region 公共成本拆分 //拆分 //拆到末级集合; var lastDepInfo = new List <CostAccount>(); //循环递归---到末级 CommonSplit(befores, lastDepInfo, month, year); var commonSplits = _costAccountRepository.Add(lastDepInfo); if (commonSplits == 0) { return(false); } #endregion #region 定向拆分 //定向 //查询出所有已经 完成公共成本拆分的 var ss = (int)CommonEnum.EnumCostAccountSplitStep.CommonSplit; var hasCommonSplits = _costAccountRepository.Where(s => s.Step == ss && s.Period == period && s.Status == 0) .WhereIf(!string.IsNullOrEmpty(poCode), s => s.POCode == poCode) .ToList(); var departsVersion = _departRepository.Where(s => s.Period == period); var redirectList = new List <CostAccount>(); foreach (var item in hasCommonSplits) { var count = businessRedirectSplitInfos.Count(s => s.FromDepartId == item.DepartID); if (count == 0) { item.SourceId = item.Id; item.Id = 0; item.CreateTime = DateTime.Now; item.Step = (int)CommonEnum.EnumCostAccountSplitStep.RedirectSplit; item.Formula += $"定向:计入---->"; redirectList.Add(item); } else { int i = 1; decimal sum = 0; decimal allAmount = item.Amount; foreach (var redict in businessRedirectSplitInfos.Where(s => s.FromDepartId == item.DepartID).OrderBy(s => s.Split)) { var toRate = string.IsNullOrEmpty(redict.Split) ? 0 : decimal.Round(Convert.ToDecimal(redict.Split) * (decimal)0.01, 2); var temAmount = decimal.Round(item.Amount * toRate, 2); //定向后的钱 var tem = JsonConvert.DeserializeObject <CostAccount>(JsonConvert.SerializeObject(item)); tem.DepartID = redict.ToDepartId; tem.DepathNamePath = departsVersion.Where(s => s.DepartID == redict.ToDepartId).Select(s => s.NamePath).FirstOrDefault(); tem.Amount = i == count ? allAmount - sum : temAmount; tem.Ratio = toRate; tem.SourceId = item.Id; tem.Step = (int)CommonEnum.EnumCostAccountSplitStep.RedirectSplit; tem.Formula += i == count ? $"定向:({allAmount}-{sum})---->" : $"定向:({item.Amount}*{toRate})---->"; redirectList.Add(tem); i++; sum += temAmount; } } } var num = _costAccountRepository.Add(redirectList); if (num == 0) { return(false); } #endregion #region 业务--》管理 //业务---》管理关系 var ss1 = (int)CommonEnum.EnumCostAccountSplitStep.RedirectSplit; var hasRedirect = _costAccountRepository.Where(s => s.Step == ss1 && s.Period == period && s.Status == 0) .WhereIf(!string.IsNullOrEmpty(poCode), s => s.POCode == poCode) .ToList(); var achs = _achMappingRepository.Where(s => s.Status == 0 && s.Month == month && s.Year == year); foreach (var item in hasRedirect) { var ach = achs.FirstOrDefault(s => s.BusinessDepartID == item.DepartID); item.SourceId = item.Id; item.Id = 0; item.Step = (int)CommonEnum.EnumCostAccountSplitStep.BusinessToAchDepartSplit; item.DepartID = ach?.AchievementDepartID; item.DepathNamePath = ach?.AchievementDepartName; item.CreateTime = DateTime.Now; } var n = _costAccountRepository.Add(hasRedirect); if (n == 0) { return(false); } #endregion return(true); }
public List <CostAccount> GetAllBeforeSplits() { var models = _costAccountRepository.Where(s => s.Status == 0).ToList(); return(models); }
public bool AddCostAccountBeforeSplit(string poCode = "", string period = null) { //计入日期 if (string.IsNullOrEmpty(period) || period.Length != 7) { period = DateTime.Now.AddMonths(-1).ToString("yyyy-MM"); } #region 获取范围数据 Expression <Func <PurchaseOrderLineConfirmHistory, bool> > histExp = s => s.Status == 0 && s.Period == period; Expression <Func <PurchaseRequirementDeptShareRatioVersion, bool> > verExp = s => s.Status == 0 && s.Period == period; if (!string.IsNullOrEmpty(poCode)) { histExp = histExp.And(s => s.POCode == poCode); verExp = verExp.And(s => s.POCode == poCode); } var historys = _polchRepository.Where(histExp); var versions = _purchaseRequirementDeptShareRatioVersionRepository.Where(verExp); #endregion var configs = _costAccountConfigRepository.Where(s => s.Status == 0); var dicInfos = _commonDataService.GetDicInfos(); //1.历史记录表 var models = new List <PurchaseOrderLineConfirmHistory>(); foreach (var confirmHistory in historys) { var count = versions.Count(s => s.POCode == confirmHistory.POCode && s.POLineNum == confirmHistory.POLineNum); if (count > 0) { int i = 1; decimal sum = 0; decimal allAmount = confirmHistory.Amount; foreach (var ver in versions.Where(s => s.POCode == confirmHistory.POCode && s.POLineNum == confirmHistory.POLineNum)) { var toDepartId = ver.DepartID; var toRate = ver.ShareProportion * (decimal)0.01; var tem = Newtonsoft.Json.JsonConvert.DeserializeObject <PurchaseOrderLineConfirmHistory>(Newtonsoft.Json.JsonConvert.SerializeObject(confirmHistory));// JsonConvert (confirmHistory); tem.DepartID = toDepartId; tem.DepartNamePath = ver.DepartNamePath; tem.Amount = i == count ? allAmount - sum : decimal.Round(confirmHistory.Amount * toRate, 2);//满足总和一致 tem.Ratio = toRate; tem.Formula += i == count ? $"拆分前:({allAmount}-{sum})---->" : $"拆分前:({confirmHistory.Amount}*{toRate})---->"; models.Add(tem); i++; sum += tem.Amount; } } else { models.Add(confirmHistory); } } var costAccounts = new List <CostAccount>(); foreach (var item in models) { var tem = configs.Where(s => (s.CompanyCode == item.CompanyCode || s.CompanyCode == "-99") && s.ContentType == item.ContentType && s.ProductCat1 == item.MaterialClassCode && (s.ProductCat2 == item.MaterialCode || s.ProductCat2 == "-99")).ToList(); var costAccountConfig = tem.OrderByDescending(s => s.CompanyCode).ThenByDescending(s => s.ProductCat2).FirstOrDefault() ?? new CostAccountConfig(); var ca = new CostAccount { POCode = item.POCode, POLineNum = item.POLineNum, DepartID = item.DepartID, DepathNamePath = item.DepartNamePath, Period = item.Period, Amount = item.Amount, MaterialClassCode = item.MaterialClassCode, MaterialClassName = item.MaterialClassName, MaterialCode = item.MaterialCode, MaterialName = item.MaterialName, ExpenseItem = item.ExpenseItem, ExpenseItemName = item.ExpenseItemName, ProjectCode = item.ProjectCode, ProjectName = item.ProjectName, CompanyCode = item.CompanyCode, CompanyName = item.CompanyName, SupplierID = item.SupplierID, SupplierName = item.SupplierName, ContentType = item.ContentType, ContentTypeName = item.ContentTypeName, CostAccountConfigID = costAccountConfig.Id, SubjectCode = costAccountConfig.PayOutType1, SubjectName = costAccountConfig.PayOutType1 == 0?null:dicInfos.FirstOrDefault(s => s.DictId == costAccountConfig.PayOutType1)?.DictName, SecondSubjectCode = costAccountConfig.PayOutType2, SecondSubjetName = costAccountConfig.PayOutType2 == 0 ? null : costAccountConfig.PayOutType2 == -99?"缺省" :dicInfos.FirstOrDefault(s => s.DictId == costAccountConfig.PayOutType2)?.DictName, Status = 0, CreateTime = DateTime.Now, Ratio = item.Ratio, Step = (int)CommonEnum.EnumCostAccountSplitStep.BeforeSplit, Formula = string.IsNullOrEmpty(item.Formula) ? "拆分前:计入---->" : item.Formula, PRCode = item.PRCode, PRDepartID = item.PRDepartID, PRDepartNamePath = item.PRDepartNamePath, POCreateTime = item.POCreateTime, POLineAmount = item.POLineAmount, POLineBeginTime = item.POLineBeginTime, POLineEndTime = item.POLineEndTime, CustID = item.CustID, CustName = item.CustName, OrderEnum = item.OrderEnum, OrderEnumName = item.OrderEnumName, TaxCode = item.TaxCode }; costAccounts.Add(ca); } using (var uow = _uowCrm.Create()) { //更新状态 Expression <Func <CostAccount, bool> > delExpression = s => s.Status == 0 && s.Period == period; if (!string.IsNullOrEmpty(poCode)) { delExpression = delExpression.And(s => s.POCode == poCode); } var cc = _costAccountRepository.UpdateWhere(delExpression, new CostAccount() { Status = -1, LastUpdateTime = DateTime.Now }, t => t.Status, t => t.LastUpdateTime); var num = _costAccountRepository.Add(costAccounts); uow.SaveChanges(); return(true); } }
public List <DepartMentVersion> GetDepartMentsByVersion(string period) { var departMentVersions = _departVersionRepository.Where(s => s.Period == period).ToList(); return(departMentVersions); }
public List <DepartMent> GetDepartMents() { var tem = _departMentRepository.Where(s => s.Status == 0).ToList(); return(tem); }
/// <summary> /// 费用进行拆分 /// </summary> /// <param name="expenseType">费用类型</param> /// <param name="expenseCode"></param> /// <param name="period"></param> /// <returns></returns> public bool ExpenseAccountDoSplit(int expenseType, string expenseCode = "", string period = null) { //计入日期 period = (string.IsNullOrEmpty(period) || period.Length != 7) ? DateTime.Now.AddMonths(-1).ToString("yyyy-MM") : period; int month = (string.IsNullOrEmpty(period) || period.Length != 7) ? DateTime.Now.AddMonths(-1).Month : Convert.ToInt32(period.Split('-')[1]); int year = (string.IsNullOrEmpty(period) || period.Length != 7) ? DateTime.Now.AddMonths(-1).Year : Convert.ToInt32(period.Split('-')[0]); //更新删除 #region 修改为删除状态 var dic = EnumHelper.GetValueAndDesc <CommonEnum.EnumCostAccountSplitStep>(); dic.Remove((int)CommonEnum.EnumCostAccountSplitStep.BeforeSplit); var steps = dic.Select(s => s.Key).ToList(); Expression <Func <ExpenseAccount, bool> > exptem = s => s.Status == 0 && s.Period == period && s.ExpenseType == expenseType && steps.Contains(s.Step); if (!string.IsNullOrEmpty(expenseCode)) { exptem = exptem.And(s => s.ExpenseCode == expenseCode); } var cc = _expenseAccountRepository.UpdateWhere(exptem , new ExpenseAccount() { Status = -1, LastUpdateTime = DateTime.Now }, t => t.Status, t => t.LastUpdateTime); #endregion var step = (int)CommonEnum.EnumCostAccountSplitStep.BeforeSplit; Expression <Func <ExpenseAccount, bool> > expression1 = s => s.Period == period && s.Step == step && s.ExpenseType == expenseType; if (!string.IsNullOrEmpty(expenseCode)) { expression1 = expression1.And(s => s.ExpenseCode == expenseCode); } //获取数据 var models1 = _expenseAccountRepository.Where(expression1); //拆到末级转换 var entities2 = CommonSplit(models1, month, year); //插入数据库 var num2 = _expenseAccountRepository.Add(entities2); if (num2 == 0) { return(false); } //-------定向 var step2 = (int)CommonEnum.EnumCostAccountSplitStep.CommonSplit; Expression <Func <ExpenseAccount, bool> > expression2 = s => s.Period == period && s.Step == step2 && s.ExpenseType == expenseType; if (!string.IsNullOrEmpty(expenseCode)) { expression2 = expression2.And(s => s.ExpenseCode == expenseCode); } //获取数据 var models2 = _expenseAccountRepository.Where(expression2); var entities3 = RedirectSplit(models2, year, month, period); //插入数据库 var num3 = _expenseAccountRepository.Add(entities3); if (num3 == 0) { return(false); } //-----管理架构 var step3 = (int)CommonEnum.EnumCostAccountSplitStep.RedirectSplit; Expression <Func <ExpenseAccount, bool> > expression3 = s => s.Period == period && s.Step == step3 && s.ExpenseType == expenseType; if (!string.IsNullOrEmpty(expenseCode)) { expression3 = expression3.And(s => s.ExpenseCode == expenseCode); } var hasRedirect = _expenseAccountRepository.Where(expression3); var achs = _achMappingRepository.Where(s => s.Status == 0 && s.Month == month && s.Year == year); foreach (var item in hasRedirect) { var ach = achs.FirstOrDefault(s => s.BusinessDepartID == item.DepartID); item.SourceId = item.Id; item.Id = 0; item.Step = (int)CommonEnum.EnumCostAccountSplitStep.BusinessToAchDepartSplit; item.DepartID = ach?.AchievementDepartID; item.DepartNamePath = ach?.AchievementDepartName; item.CreateTime = DateTime.Now; } var num4 = _expenseAccountRepository.Add(hasRedirect); if (num4 == 0) { return(false); } return(num2 + num3 + num4 > 0); }