Beispiel #1
0
        /// <summary>
        /// 删除员工内部成本
        /// </summary>
        /// <param name="resId"></param>
        /// <param name="id"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        public List <sys_resource_internal_cost> DeleteInternalCost(long resId, long id, long userId)
        {
            var dal      = new sys_resource_internal_cost_dal();
            var costList = GetInternalCostList(resId);

            if (costList == null || costList.Count == 1)
            {
                return(null);
            }

            int idx = costList.FindIndex(_ => _.id == id);

            if (idx == -1)
            {
                return(costList);
            }

            if (idx == 0)   // 第一个
            {
                costList[1].start_date = null;
                dal.Update(costList[1]);
            }
            else if (idx == costList.Count - 1)  // 最后一个
            {
                costList[idx - 1].end_date = null;
                dal.Update(costList[idx - 1]);
            }
            else
            {
                costList[idx - 1].end_date = costList[idx].end_date;
                dal.Update(costList[idx - 1]);
            }
            costList.RemoveAt(idx);
            dal.Delete(costList[idx]);

            return(costList);
        }
Beispiel #2
0
        /// <summary>
        /// 新增员工内部成本
        /// </summary>
        /// <param name="resId"></param>
        /// <param name="start"></param>
        /// <param name="rate"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        public List <sys_resource_internal_cost> AddInternalCost(long resId, DateTime start, decimal rate, long userId)
        {
            var dal      = new sys_resource_internal_cost_dal();
            var costList = GetInternalCostList(resId);

            if (costList.Count == 0)    // 第一条
            {
                sys_resource_internal_cost cost = new sys_resource_internal_cost
                {
                    id          = dal.GetNextIdCom(),
                    resource_id = resId,
                    hourly_rate = rate
                };
                dal.Insert(cost);
                costList.Add(cost);
            }
            else
            {
                var fd = costList.Find(_ => _.start_date == start);
                if (fd != null)     // 开始时间不能重复
                {
                    return(null);
                }
                sys_resource_internal_cost cost = new sys_resource_internal_cost();
                cost.id          = dal.GetNextIdCom();
                cost.start_date  = start;
                cost.hourly_rate = rate;
                cost.resource_id = resId;
                if (costList[0].end_date != null && costList[0].end_date.Value >= start)    // 生效时间最前,作为第二条
                {
                    costList[0].end_date = start.AddDays(-1);
                    cost.end_date        = costList[1].start_date.Value.AddDays(-1);
                    dal.Update(costList[0]);    // 更新第一条的结束时间
                    costList.Insert(1, cost);
                }
                else if (costList[0].end_date == null)      // 当前只有一条,作为第二条
                {
                    costList[0].end_date = cost.start_date.Value.AddDays(-1);
                    dal.Update(costList[0]);    // 更新第一条的结束时间
                    costList.Insert(1, cost);
                }
                else if (cost.start_date.Value > costList[costList.Count - 1].start_date.Value)     // 生效时间最后,最后一条
                {
                    costList[costList.Count - 1].end_date = cost.start_date.Value.AddDays(-1);
                    dal.Update(costList[costList.Count - 1]);    // 更新最后一条的结束时间
                    costList.Add(cost);
                }
                else    // 生效时间在中间
                {
                    for (int i = 1; i < costList.Count - 2; i++)
                    {
                        if (costList[i].start_date.Value <cost.start_date.Value && costList[i + 1].start_date.Value> cost.start_date.Value)     // 找到按顺序的时间前后项
                        {
                            costList[i].end_date = cost.start_date.Value.AddDays(-1);
                            cost.end_date        = costList[i + 1].start_date.Value.AddDays(-1);
                            dal.Update(costList[i]);        // 更新前一条的结束时间
                            dal.Update(costList[i + 1]);    // 更新后一条的开始时间
                            costList.Insert(i + 1, cost);
                        }
                    }
                }
                dal.Insert(cost);
            }
            return(costList);
        }