起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 1993|回复: 39

【搞定】关于计划中心和任务中心的需求(急)**

[复制链接]
发表于 2007-1-23 10:00:16 | 显示全部楼层 |阅读模式
版本:x3-2611
计划中心和任务中心现在默认的是,可以看到本人和本部门的所有计划和任务。
我们的需求:

1、只有直接上级和具有管理权限的人可以看到他所管辖的部门的所有记录。
2、一般员工只能看到自已的计划和任务。


希望能改改,谢谢!
回复

使用道具 举报

 楼主| 发表于 2007-1-23 11:19:20 | 显示全部楼层
顶起来
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-23 14:27:35 | 显示全部楼层
再顶
回复 支持 反对

使用道具 举报

发表于 2007-1-23 14:28:47 | 显示全部楼层
收到了,已经做为需求提交。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-23 14:33:10 | 显示全部楼层
现在不是你作为需求提交的问题。是我们现在必须用的问题。以前在2401下面AlANG给我们改过,但是现在在2611下面你们改了计划和任务。所以现在还得请你们改改。
回复 支持 反对

使用道具 举报

发表于 2007-1-23 14:46:07 | 显示全部楼层
好的,我联系一下 alang ,晚上给你看看。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-23 14:51:43 | 显示全部楼层
好的非常感谢!
回复 支持 反对

使用道具 举报

发表于 2007-1-23 17:12:00 | 显示全部楼层
你把2401上修改的方法贴出来,我这里找不到了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-23 21:36:58 | 显示全部楼层
现在计划和任务都需要改一下,谢谢。

2  计划中心默认不可以看本部门的计划
在 协同系统\计划\计划中心资源
注释掉
{      //与自己部门相关
      lWhere := GetMergeSQLWhereOR(lWhere,
        SysUtils.Format('FDEPTID IN (%s)', [lDepts]));
}//by alang

    { 2. 与上级部门相关的计划 }
{    lDeptURLs := TStringList.Create;
    try
      lDeptURLs.Duplicates := TDuplicates.dupIgnore;
      lDeptURLs.Sorted := True;
      TPlanSpecialLogic.GetSuperiorDeptURLs(Context, lDeptURLs);
      lDeptLikes := '';
      for I := 0 to lDeptURLs.Count - 1 do
      begin
        lDeptLikes := GetMergeSQLWhereOR(lDeptLikes,
          SysUtils.Format('(FORGURL LIKE ''%s%%'')',
          [TPlanSpecialLogic.GetSaveOrgURL(lDeptURLs[I])]),
          False);
      end;
      Assert(lDeptLikes <> '', '获取上级部门URL失败');
      //上级部门相关的计划
      lWhere := GetMergeSQLWhereOR(lWhere, lDeptLikes);
    finally
      lDeptURLs.Free;
    end; }//by alang
回复 支持 反对

使用道具 举报

发表于 2007-1-24 00:35:15 | 显示全部楼层
同样在 在 协同系统\计划\计划中心资源

应该是跟下面的函数有关系

function TPlanFilterManage.GetSQLFilter: string;
const
  SOrg = 'FPERSONID = ''%s''';
  SOrg_Pos = '(FDEPTID = ''%s'') AND (FPOSITIONID = ''%s'') AND (FPERSONID = ''%s'')';
var
  I: Integer;
  lWhere: string;
  lSQLFilter: string;
//  lOperatorPosition: TOperatorPosition;

  lDeptIDs, lPerIDs: TStringList;
  lDepts, lPers: string;

  lDeptURLs: TStringList;
  lDeptLikes: string;

  lSubLikes: string;

  lDeptFilter: string;

  lPlanState: TPlanState;

  lOperatorID, lDept, lPos, lPer: string;
begin
//  lOperatorPosition :=
//    PlanLib.TPlanSpecialLogic.GetOperatorPosition(Context);
{
我的工作
   SELECT * FROM TPLAN
   WHERE FPLANROOTID IN (SELECT DISTINCT FPLANROOTID FROM TPLAN WHERE    --显示整棵树
         FAFFIRMLEVEL >= 自己的“审批范围” AND                             --排除审批范围属于下级审批的计划
         FPLANID IN (SELECT DISTINCT FPLANID FROM TPLANEXECUTOR             --
                     WHERE FPERSONID = 自己 OR                                --与自己相关的计划
                           FDEPTID = 自己部门 OR                              --自己部门内的计划
                           FORGURL LIKE '上级部门%' OR                        --上级部门的计划
                           (FTYPE = 'petEditor' AND FORGURL LIKE '下级%')    --我的下属创建的
         ))
我的管理
   SELECT * FROM TPLAN
   WHERE FPLANROOTID IN (SELECT DISTINCT FPLANROOTID FROM TPLAN WHERE    --显示整棵树
         FAFFIRMLEVEL >= 自己的“审批范围” AND                             --排除审批范围属于下级审批的计划
         FPLANID IN (SELECT DISTINCT FPLANID FROM TPLANEXECUTOR             --
                     WHERE FPERSONID = 自己 OR                                --与自己相关的计划
                           FORGURL LIKE '下级%'                               --我的下属创建的
         ))
}

  { 只列出与任务相关的计划 }
  if AllowPlanIDs then
  begin
    lWhere := '';
    for I := 0 to PlanIDs.Count - 1 do
    begin
      if I = 0 then
        lWhere := SysUtils.Format('''%s''', [SysUtils.Trim(PlanIDs[I])])
      else
        lWhere := lWhere + SysUtils.Format(', ''%s''', [SysUtils.Trim(PlanIDs[I])]);
    end;
    if lWhere <> '' then
      lSQLFilter := SysUtils.Format('FPLANID IN (%s)', [lWhere]) else
      lSQLFilter := '1 <> 1';
  end
  else
  begin
    { 获取显示在望远镜中的过滤条件 }
    lSQLFilter := CustomFilter;

    { 排除审批范围属于下级审批的计划 }
    { 暂时干掉
    lWhere := SysUtils.Format(
      'FAFFIRMLEVEL >= %d',
      [PlanLib.TPlanSpecialLogic.GetDeptLevel(
      lOperatorPosition.PositionMember.Parent)]);
    lSQLFilter := GetMergeSQLWhereAND(lSQLFilter, lWhere);}


    lWhere := '';
    { 从执行表中获取与组织机构相关的范围权限 }

    lPerIDs := TStringList.Create;
    lDeptIDs := TStringList.Create;
    try
      lPerIDs.Duplicates := TDuplicates.dupIgnore;
      lPerIDs.Sorted := True;
      lDeptIDs.Duplicates := TDuplicates.dupIgnore;
      lDeptIDs.Sorted := True;
      TPlanSpecialLogic.GetPersonIDsAndDeptIDs(Context, lPerIDs, lDeptIDs);
      lPers := '';
      for I := 0 to lPerIDs.Count - 1 do
        if I = 0 then
          lPers := SysUtils.Format('''%s''', [lPerIDs[I]]) else
          lPers := lPers + ', ' + SysUtils.Format('''%s''', [lPerIDs[I]]);
      Assert(lPers <> '', '人员不存在');
{      lDepts := '';
      for I := 0 to lDeptIDs.Count - 1 do
        if I = 0 then
          lDepts := SysUtils.Format('''%s''', [lDeptIDs[I]]) else
          lDepts := lDepts + ', ' + SysUtils.Format('''%s''', [lDeptIDs[I]]);
      Assert(lDepts <> '', '部门不存在');}
      //与自己相关
      //与自己部门相关
{      lWhere := GetMergeSQLWhereOR(lWhere,
        SysUtils.Format('FDEPTID IN (%s)', [lDepts]));}
    finally
      lPerIDs.Free;
      lDeptIDs.Free;
    end;

    { 1. 与自己相关的计划 }
    if FIncludePerson then
    begin
      lWhere := GetMergeSQLWhereOR(lWhere, SysUtils.Format('FPERSONID IN (%s)', [lPers]));
    end;

    { 2. 与部门相关的计划 }
    if FIncludeDept then
    begin
      lDeptURLs := TStringList.Create;
      try
        lDeptURLs.Duplicates := TDuplicates.dupIgnore;
        lDeptURLs.Sorted := True;
        TPlanSpecialLogic.GetSuperiorDeptURLs(Context, lDeptURLs);
        lDeptLikes := '';
        for I := 0 to lDeptURLs.Count - 1 do
        begin
          lDeptLikes := GetMergeSQLWhereOR(lDeptLikes,
            SysUtils.Format('(FORGURL LIKE ''%s%%'')',
            [TPlanSpecialLogic.GetSaveOrgURL(lDeptURLs[I])]),
            False);
        end;
        Assert(lDeptLikes <> '', '获取上级部门URL失败');
      finally
        lDeptURLs.Free;
      end;
      if not FIncludePerson then
        lDeptLikes := GetMergeSQLWhereAND(lDeptLikes, SysUtils.Format('FPERSONID NOT IN (%s)', [lPers]));
      lWhere := GetMergeSQLWhereOR(lWhere, lDeptLikes);
    end;

    { 3. 与指定的组织机构(管理的部门)相关的 }
    lDeptFilter := '';
    for I := 0 to DeptURLs.Count - 1 do
    begin
      lDeptFilter := GetMergeSQLWhereOR(lDeptFilter,
        SysUtils.Format('(FORGURL LIKE ''%s%%'')',
          [TPlanSpecialLogic.GetSaveOrgURL(DeptURLs[I])]), False);
    end;
    lWhere := GetMergeSQLWhereOR(lWhere, lDeptFilter);

    { 4. 组合上述执行表过滤条件 }
    Assert(SysUtils.Trim(lWhere) <> '', 'Error: TPlanFilterManage.GetSQLFilter');
    lWhere := SysUtils.Format(
      'FPLANID IN (SELECT DISTINCT TPLANEXECUTOR.FPLANID FROM TPLANEXECUTOR, TPLAN WHERE (TPLAN.FPLANID = TPLANEXECUTOR.FPLANID) AND (%s))',
      [lWhere]);
    lSQLFilter := GetMergeSQLWhereAND(lSQLFilter, lWhere);
  end;

  { 获取计划的完整树 }
  if ShowEntireTree then
  begin
    lSQLFilter := SysUtils.Format(
      'TPLAN.FPLANROOTID IN (SELECT DISTINCT FPLANROOTID FROM TPLAN WHERE %s)',
      [lSQLFilter]);
  end;

  { 即使是显示完整的数,计划类型中的已删除和已调整的计划也不显示出来 }
  if PlanStates <> [] then
  begin
    lWhere := '';

    lPlanState := TPlanState.psPlanDeleted;
    if not(lPlanState in PlanStates) then
      if lWhere = '' then
        lWhere := SysUtils.Format('''%s''', [TPlanSpecialLogic.PlanStateToStr(lPlanState)]) else
        lWhere := lWhere + SysUtils.Format(', ''%s''', [TPlanSpecialLogic.PlanStateToStr(lPlanState)]);

    if lWhere <> '' then
    begin
      lWhere := SysUtils.Format('NOT(TPLAN.FPLANSTATE IN (%s))', [lWhere]);
      lSQLFilter := GetMergeSQLWhereAND(lSQLFilter, lWhere);
    end;
  end;

  { 与数据集中的原始SQLFilter合并 }
  Result := GetMergeSQLWhereAND(lSQLFilter, FSQLFilter);
end;
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-25 09:02 , Processed in 0.039474 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表