// MBOrgView.cpp : implementation file
|
//
|
|
#include "stdafx.h"
|
#include "mborg.h"
|
#include "MBOrgView.h"
|
|
|
// CMBOrgView
|
|
IMPLEMENT_DYNAMIC(CMBOrgView, CObject)
|
CMBOrgView::CMBOrgView()
|
{
|
m_strName = _T("");
|
m_strSName = _T("");
|
m_strID = _T("");
|
m_bIsLoaded = FALSE;
|
|
m_nLevel = 10000;
|
m_strGener = _T("");
|
m_nMemOrgs = 0;
|
m_nMemUsers = 0;
|
m_bHasSub = FALSE;
|
m_bIsLoadedUserSuccess = true;
|
m_arParentMember.RemoveAll();
|
}
|
|
CMBOrgView::~CMBOrgView()
|
{
|
DetachList( );
|
}
|
|
|
|
|
// CMBOrgView message handlers
|
|
void CMBOrgView::operator = ( const CMBOrgView &Item )
|
{
|
POSITION pos;
|
CMBOrgMember *pMember = NULL;
|
CMBOrgMember *pNewMember = NULL;
|
|
m_strID = Item.m_strID;
|
m_strName = Item.m_strName;
|
m_strSName = Item.m_strName;
|
|
m_bIsLoadedUserSuccess= Item.m_bIsLoadedUserSuccess;
|
m_bIsLoaded = Item.m_bIsLoaded;
|
|
m_strGener = Item.m_strGener;
|
m_nLevel = Item.m_nLevel;
|
m_bHasSub = Item.m_bHasSub;
|
m_nMemOrgs = Item.m_nMemOrgs;
|
m_nMemUsers = Item.m_nMemUsers;
|
m_arParentMember.RemoveAll();
|
m_arParentMember.Copy(Item.m_arParentMember);
|
|
// Copy Member List
|
DetachList( );
|
for ( pos = Item.m_listMember.GetHeadPosition(); pos; )
|
{
|
pMember = (CMBOrgMember *)Item.m_listMember.GetNext( pos );
|
pNewMember = new CMBOrgMember;
|
*pNewMember = *pMember;
|
m_listMember.AddTail( pNewMember );
|
}
|
}
|
|
/////////////////////////////////////////////////////////////////////////////
|
// CMBOrgView message handlers
|
|
void CMBOrgView::DetachList( )
|
{
|
POSITION pos;
|
CMBOrgMember *pMember = NULL;
|
|
for ( pos = m_listMember.GetHeadPosition(); pos; )
|
{
|
pMember = (CMBOrgMember *)m_listMember.GetNext( pos );
|
if ( pMember )
|
{
|
delete pMember;
|
pMember = NULL;
|
}
|
}
|
m_listMember.RemoveAll();
|
}
|
|
POSITION CMBOrgView::FindMember( AMVIEWITEMTYPE nType, CString strMemberID )
|
{
|
POSITION pos;
|
POSITION posOld = NULL;
|
CMBOrgMember *pMember = NULL;
|
|
for ( pos = m_listMember.GetHeadPosition(); pos; pos )
|
{
|
posOld = pos;
|
pMember = (CMBOrgMember *)m_listMember.GetNext( pos );
|
if ( pMember->m_nType == nType && pMember->m_strID.CompareNoCase(strMemberID) == 0)
|
return posOld;
|
}
|
|
return NULL;
|
}
|
|
CString CMBOrgView::GetItemMember( AMVIEWITEMTYPE nType )
|
{
|
POSITION pos;
|
CMBOrgMember *pMember = NULL;
|
CString strNames;
|
|
for ( pos = m_listMember.GetHeadPosition(); pos;pos )
|
{
|
pMember = (CMBOrgMember *)m_listMember.GetNext( pos );
|
if ( pMember->m_nType == nType )
|
{
|
strNames += pMember->m_strName;
|
strNames += _T(";");
|
}
|
}
|
|
if ( !strNames.IsEmpty() )
|
strNames.TrimRight( _T(";") );
|
|
return strNames;
|
}
|
|
void CMBOrgView::RemoveSubView( CString strViewID )
|
{
|
POSITION pos, posOld;
|
CMBOrgMember *pMember = NULL;
|
CString strNames;
|
|
for ( pos = m_listMember.GetHeadPosition(); pos; pos )
|
{
|
posOld = pos;
|
pMember = (CMBOrgMember *)m_listMember.GetNext( pos );
|
if ( pMember->m_nType == AM_VIEWITEMTYPE_VIEW && pMember->m_strID.CompareNoCase(strViewID) == 0 )
|
{
|
m_listMember.RemoveAt( posOld );
|
delete pMember;
|
break;
|
}
|
}
|
}
|
|
POSITION CMBOrgView::AddMember( AMVIEWITEMTYPE nMemberType, CString strMemerID,
|
CString strName, CString strGener,
|
int nLevel /*= 0*/ )
|
{
|
POSITION pos;
|
CMBOrgMember *pMember = NULL;
|
|
if ( strMemerID.IsEmpty() || strName.IsEmpty() )
|
return NULL;
|
|
pos = FindMember( nMemberType, strMemerID );
|
if ( pos )
|
pMember = (CMBOrgMember *)m_listMember.GetAt( pos );
|
else
|
{
|
pMember = new CMBOrgMember;
|
pMember->m_nType = nMemberType;
|
pMember->m_strID = strMemerID;
|
pos = m_listMember.AddTail( pMember );
|
if(nMemberType ==AM_VIEWITEMTYPE_USER )
|
{
|
if(m_listMember.GetCount() > m_nMemUsers)
|
m_nMemUsers = GetUserMemberCount();
|
}
|
}
|
pMember->m_bIsDelete = FALSE;
|
pMember->m_strName = strName;
|
pMember->m_nSortLevel = nLevel;
|
pMember->m_strGener = strGener;
|
|
return pos;
|
}
|
|
POSITION CMBOrgView::FindUser( CString strName )
|
{
|
POSITION pos, posOld;
|
CMBOrgMember *pMember = NULL;
|
|
for ( pos = m_listMember.GetHeadPosition( ); pos; )
|
{
|
posOld = pos;
|
pMember = (CMBOrgMember*)m_listMember.GetNext( pos );
|
if ( !pMember )
|
continue;
|
if ( pMember->m_strName.CompareNoCase( strName ) == 0 )
|
return posOld;
|
}
|
|
return NULL;
|
}
|
|
POSITION CMBOrgView::AddUser( CString strUserName, CString strUser )
|
{
|
POSITION pos;
|
CMBOrgMember *pMember = NULL;
|
|
if ( strUser.IsEmpty() )
|
return NULL;
|
|
pos = FindUser( strUser );
|
if ( pos )
|
pMember = (CMBOrgMember *)m_listMember.GetAt( pos );
|
else
|
{
|
pMember = new CMBOrgMember;
|
pMember->m_nType = AM_VIEWITEMTYPE_USER;
|
pMember->m_strID = strUser;
|
|
pos = m_listMember.AddTail( pMember );
|
if(m_listMember.GetCount() > m_nMemUsers)
|
m_nMemUsers = GetUserMemberCount();
|
}
|
pMember->m_bIsDelete = FALSE;
|
pMember->m_strName = strUserName;
|
pMember->m_nSortLevel = 0;
|
|
return pos;
|
}
|
|
int CMBOrgView::GetUserMemberCount()
|
{
|
int nCount = 0;
|
POSITION pos;
|
CMBOrgMember *pMember = NULL;
|
|
for ( pos = m_listMember.GetHeadPosition(); pos; pos )
|
{
|
pMember = (CMBOrgMember *)m_listMember.GetNext( pos );
|
if ( !pMember->m_bIsDelete )
|
{
|
if ( pMember->m_nType == AM_VIEWITEMTYPE_USER )
|
{
|
nCount++;
|
}
|
}
|
}
|
return nCount;
|
}
|
CString CMBOrgView::GetMemberIDFromName( CString strName,AMVIEWITEMTYPE nMemberType )
|
{
|
POSITION pos, posOld;
|
CMBOrgMember *pMember = NULL;
|
CString strID = _T("");
|
for ( pos = m_listMember.GetHeadPosition( ); pos; )
|
{
|
posOld = pos;
|
pMember = (CMBOrgMember*)m_listMember.GetNext( pos );
|
if ( !pMember )
|
continue;
|
if ( pMember->m_bIsDelete )
|
continue;
|
if ( pMember->m_strName.CompareNoCase( strName ) == 0 && pMember->m_nType == nMemberType)
|
{
|
strID = pMember->m_strID;
|
break;
|
}
|
}
|
|
return strID;
|
}
|