using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BLL
{
   public static class MenuFlowOperateService
   {        
       /// <summary>
       ///  根据工作流主键获取工作流信息
       /// </summary>
       /// <param name="flowOperateId"></param>
       /// <returns></returns>
       public static Model.Sys_MenuFlowOperate GetMenuFlowOperateByFlowOperateId(string flowOperateId)
       {
           return  Funs.DB.Sys_MenuFlowOperate.FirstOrDefault(x=> x.FlowOperateId == flowOperateId);
       }

        /// <summary>
        ///  根据工作流主键获取工作流信息
        /// </summary>
        /// <param name="menuId"></param>
        /// <returns></returns>
        public static List<Model.Sys_MenuFlowOperate> GetMenuFlowOperateListByMenuId(string menuId)
        {
            return (from x in Funs.DB.Sys_MenuFlowOperate where x.MenuId == menuId
                    orderby x.FlowStep select x).ToList();
        }

        /// <summary>
        /// 添加工作流信息
        /// </summary>
        /// <param name="flow"></param>
        public static void AddAuditFlow(Model.Sys_MenuFlowOperate flow)
        {
            Model.Sys_MenuFlowOperate newMenuFlowOperate = new Model.Sys_MenuFlowOperate
            {
                FlowOperateId = SQLHelper.GetNewID(typeof(Model.Sys_MenuFlowOperate)),
                MenuId = flow.MenuId,
                FlowStep = flow.FlowStep,
                GroupNum = flow.GroupNum,
                OrderNum = flow.OrderNum,
                AuditFlowName = flow.AuditFlowName,
                RoleId = flow.RoleId,
                IsFlowEnd = flow.IsFlowEnd,      
                IsSelfRole=flow.IsSelfRole
            };
            Funs.DB.Sys_MenuFlowOperate.InsertOnSubmit(newMenuFlowOperate);
            Funs.DB.SubmitChanges();
        }

        /// <summary>
        /// 修改工作流信息
        /// </summary>
        /// <param name="flow"></param>
        public static void UpdateAuditFlow(Model.Sys_MenuFlowOperate flow)
        {
            Model.Sys_MenuFlowOperate newMenuFlow = Funs.DB.Sys_MenuFlowOperate.FirstOrDefault(e => e.FlowOperateId == flow.FlowOperateId);
            if (newMenuFlow != null)
            {
                newMenuFlow.MenuId = flow.MenuId;
                newMenuFlow.FlowStep = flow.FlowStep;
                newMenuFlow.GroupNum = flow.GroupNum;
                newMenuFlow.OrderNum = flow.OrderNum;
                newMenuFlow.AuditFlowName = flow.AuditFlowName;
                newMenuFlow.RoleId = flow.RoleId;
                newMenuFlow.IsFlowEnd = flow.IsFlowEnd;
                newMenuFlow.IsSelfRole = flow.IsSelfRole;
                Funs.DB.SubmitChanges();
            }
        }

       /// <summary>
       /// 删除工作流信息
       /// </summary>
       /// <param name="FlowOperateId"></param>
       public static void DeleteAuditFlow(string FlowOperateId)
       {
           Model.Sys_MenuFlowOperate flow = Funs.DB.Sys_MenuFlowOperate.First(e => e.FlowOperateId == FlowOperateId);
           if (flow != null)
           {
               Funs.DB.Sys_MenuFlowOperate.DeleteOnSubmit(flow);
               Funs.DB.SubmitChanges();
           }
       }
       
       /// <summary>
       ///  步骤更新顺序
       /// </summary>
       public static void SetSortIndex(string menuId)
       {
           var menuFlowOperate = from x in Funs.DB.Sys_MenuFlowOperate where x.MenuId == menuId  select x;
           if (menuFlowOperate.Count() > 0)
           {
               var maxSortIndex = menuFlowOperate.Select(x => x.FlowStep).Max();
               if (menuFlowOperate.Count() < maxSortIndex)
               {
                   int sortIndex = 0;
                   foreach (var item in menuFlowOperate)
                   {
                       sortIndex++;
                       item.FlowStep = sortIndex;
                       Funs.DB.SubmitChanges();
                   }
               }
           }
       }

       /// <summary>
       ///  步骤顺序说明
       /// </summary>
       public static string GetFlowOperateName(string menuId)
       {
           string returnValue = string.Empty;
           var menuFlowOperate = from x in Funs.DB.Sys_MenuFlowOperate 
                                 where x.MenuId == menuId 
                                 orderby x.FlowStep
                                 select x;
           if (menuFlowOperate.Count() > 0)
           {
               foreach (var item in menuFlowOperate)
               {
                   returnValue += ("第" + item.FlowStep + "步[" + item.AuditFlowName+"]");
                   if(item.IsFlowEnd == false || !item.IsFlowEnd.HasValue)
                   {
                       returnValue += ("办理角色为{" + BLL.RoleService.getRoleNamesRoleIds(item.RoleId) + "};");
                   }
               }
           }
           if (string.IsNullOrEmpty(returnValue))
           {
               returnValue = "未定义流程审批规则。";
           }

           return returnValue;
       }

        /// <summary>
        /// 获取分公司表下拉框
        /// </summary>
        /// <param name="dropName"></param>
        /// <param name="isShowPlease"></param>
        public static void InitMenuFlowOperateDropDownList(FineUIPro.DropDownList dropName,string menuId, string thisId, bool isShowPlease)
        {
            dropName.DataValueField = "FlowOperateId";
            dropName.DataTextField = "AuditFlowName";
            dropName.DataSource = (from x in Funs.DB.Sys_MenuFlowOperate
                                   where x.MenuId == menuId && x.IsFlowEnd == false && x.FlowOperateId != thisId
                                   orderby x.FlowStep
                                   select x).ToList();
            dropName.DataBind();
            if (isShowPlease)
            {
                Funs.FineUIPleaseSelect(dropName);
            }
        }
    }
}