//Copyright (c) 1998 - 1999 Microsoft Corporation /*++ Module Name: AddKp.cpp Abstract: This Module contains the implementation of CAddKeyPack Dialog class (Dialog box used for adding keypacks) Author: Arathi Kundapur (v-akunda) 11-Feb-1998 Revision History: --*/ #include "stdafx.h" #include "defines.h" #include "LicMgr.h" #include "LSServer.h" #include "MainFrm.h" #include "AddKP.h" #include "LicAgrmt.h" #include "AddLic.h" #include "lsserver.h" #include "remlic.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CAddKeyPack dialog CAddKeyPack::CAddKeyPack(CWnd* pParent /*=NULL*/) : CDialog(CAddKeyPack::IDD, pParent) { //{{AFX_DATA_INIT(CAddKeyPack) m_KeypackType = _T(""); m_TotalLicenses = 0; m_pKeyPackList = NULL; //}}AFX_DATA_INIT } CAddKeyPack::CAddKeyPack(KeyPackList *pKeyPackList, BOOL bIsUserAdmin,CWnd* pParent /*=NULL*/) : CDialog(CAddKeyPack::IDD, pParent) { //{{AFX_DATA_INIT(CAddKeyPack) m_KeypackType = _T(""); m_TotalLicenses = 0; m_pKeyPackList = pKeyPackList; m_bIsUserAdmin = bIsUserAdmin; //}}AFX_DATA_INIT } void CAddKeyPack::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAddKeyPack) DDX_CBString(pDX, IDC_KEYPACK_TYPE, m_KeypackType); DDX_Control(pDX, IDC_KEYPACK_TYPE, m_LicenseCombo); DDX_Text(pDX,IDC_TOTAL_LICENSES,m_TotalLicenses); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAddKeyPack, CDialog) //{{AFX_MSG_MAP(CAddKeyPack) ON_BN_CLICKED(IDC_HELP2, OnHelp2) ON_CBN_SELCHANGE(IDC_KEYPACK_TYPE, OnSelchangeKeypackType) ON_BN_CLICKED(IDC_ADD, OnAddLicenses) ON_BN_CLICKED(IDC_REMOVE, OnRemoveLicenses) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CAddKeyPack message handlers BOOL CAddKeyPack::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here if(!m_bIsUserAdmin) { GetDlgItem(IDC_ADD)->EnableWindow(FALSE); GetDlgItem(IDC_REMOVE)->EnableWindow(FALSE); } //CString SKU1; //CString SKU2; CString SKU236; //SKU1.LoadString(IDS_SKU1); //SKU2.LoadString(IDS_SKU2); SKU236.LoadString(IDS_236_SKU); POSITION pos = m_pKeyPackList->GetHeadPosition(); while(pos) { CKeyPack *pKeyPack = (CKeyPack *)m_pKeyPackList->GetNext(pos); if(NULL == pKeyPack) return FALSE; LSKeyPack sKeyPack = pKeyPack->GetKeyPackStruct(); //if(((0 == SKU1.CompareNoCase(sKeyPack.szProductId)) || // (0 == SKU2.CompareNoCase(sKeyPack.szProductId)))&& #if 0 if(_tcsnicmp(sKeyPack.szProductId, SKU236.GetBuffer(0), SKU236.GetLength()) != 0) continue; #endif if( sKeyPack.ucKeyPackType == LSKEYPACKTYPE_TEMPORARY || sKeyPack.ucKeyPackType == LSKEYPACKTYPE_FREE) { continue; } int nResult = m_LicenseCombo.AddString(sKeyPack.szProductDesc); if(nResult == CB_ERR || nResult == CB_ERRSPACE) return FALSE; } m_LicenseCombo.SetCurSel(0); OnSelchangeKeypackType(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CAddKeyPack::OnHelp2() { // TODO: Add your control notification handler code here AfxGetApp()->WinHelp(IDC_HELP2,HELP_CONTEXT ); } void CAddKeyPack::OnOK() { // TODO: Add extra validation here //Validate the information Entered UpdateData(); if(m_KeypackType.IsEmpty()) { AfxMessageBox(IDS_INVALID_FIELDS); return; } //Ask the user to select number of Licenses he wants to add. CAddLicenses AddLicense; if(IDCANCEL == AddLicense.DoModal()) return; //Display the License agreement CLicAgreement LicAgreement; CString TempString; TempString.LoadString(IDS_LIC_AGRMT); LicAgreement.m_License.Format((LPCTSTR)TempString,AddLicense.m_NumLicenses); if( IDCANCEL == LicAgreement.DoModal()) return; else CDialog::OnOK(); } void CAddKeyPack::OnSelchangeKeypackType() { // TODO: Add your control notification handler code here UpdateData(); //Get the Current Selection. int nSelection = m_LicenseCombo.GetCurSel( ); //Get the Product Description. CString ProdDesc; m_LicenseCombo.GetLBText(nSelection,ProdDesc); //Search and pickup the keypack with this product description. //Set the Edit box to display the total licenses. POSITION pos = m_pKeyPackList->GetHeadPosition(); while(pos) { CKeyPack *pKeyPack = (CKeyPack *)m_pKeyPackList->GetNext(pos); if(NULL == pKeyPack) break; LSKeyPack sKeyPack = pKeyPack->GetKeyPackStruct(); if(0 == ProdDesc.CompareNoCase(sKeyPack.szProductDesc)) { m_TotalLicenses = sKeyPack.dwTotalLicenseInKeyPack; break; } } UpdateData(FALSE); return; } void CAddKeyPack::OnAddLicenses() { int nCount = m_LicenseCombo.GetCount( ); CString ProdDesc, DescBeforeAddLicense; CKeyPack *pKeyPack = NULL; LSKeyPack sKeyPack; HRESULT hResult = ERROR_SUCCESS; BOOL bUpdateData = TRUE; CLicMgrApp *pApp = (CLicMgrApp*)AfxGetApp(); ASSERT(pApp); if(NULL == pApp) { AfxMessageBox(IDS_INTERNAL_ERROR); return; } CMainFrame * pWnd = (CMainFrame *)pApp->m_pMainWnd ; ASSERT(pWnd); if(NULL == pWnd) { AfxMessageBox(IDS_INTERNAL_ERROR); return; } m_LicenseCombo.GetLBText(m_LicenseCombo.GetCurSel(),DescBeforeAddLicense); CAddLicenses AddLicense(this); if(IDOK == AddLicense.DoModal()) { //Get the LicensePack to which the data has to be added. //Display the License agreement ProdDesc = AddLicense.m_LicensePack; GetKeyPack(ProdDesc,&pKeyPack); if(NULL == pKeyPack) { AfxMessageBox(IDS_INTERNAL_ERROR); return; } sKeyPack = pKeyPack->GetKeyPackStruct(); if(0 != ProdDesc.CompareNoCase(DescBeforeAddLicense)) { //User has changed selection in the AddLicenses Dialog. //reset the m_TotalLicenses and set bUpdateData to FALSE; m_TotalLicenses = sKeyPack.dwTotalLicenseInKeyPack; bUpdateData = FALSE; } CLicAgreement LicAgreement; CString TempString; TempString.LoadString(IDS_LIC_AGRMT); LicAgreement.m_License.Format((LPCTSTR)TempString,m_TotalLicenses + AddLicense.m_NumLicenses); if( IDCANCEL == LicAgreement.DoModal()) return; SetCursor(LoadCursor(NULL,IDC_WAIT)); hResult = pWnd->AddLicenses(pKeyPack,AddLicense.m_NumLicenses); if(ERROR_SUCCESS != hResult) { if(LSERVER_E_ACCESS_DENIED == hResult) AfxMessageBox(IDS_NO_ACCESS); else AfxMessageBox(IDS_INTERNAL_ERROR); return; } m_TotalLicenses = m_TotalLicenses + AddLicense.m_NumLicenses; sKeyPack = pKeyPack->GetKeyPackStruct(); if((m_TotalLicenses != sKeyPack.dwTotalLicenseInKeyPack) && !bUpdateData) { TempString.Format(IDS_TOTAL_CHANGED,sKeyPack.dwTotalLicenseInKeyPack - AddLicense.m_NumLicenses,sKeyPack.dwTotalLicenseInKeyPack); AfxMessageBox(TempString); } m_TotalLicenses = sKeyPack.dwTotalLicenseInKeyPack; if(bUpdateData) { UpdateData(FALSE); } return; } } void CAddKeyPack::OnRemoveLicenses() { int nCount = m_LicenseCombo.GetCount( ); CString ProdDesc,DescBeforeRemLicense; CKeyPack *pKeyPack = NULL; LSKeyPack sKeyPack; CString TempString; CString RemWarning; HRESULT hResult = ERROR_SUCCESS; CLicMgrApp *pApp = (CLicMgrApp*)AfxGetApp(); ASSERT(pApp); if(NULL == pApp) { AfxMessageBox(IDS_INTERNAL_ERROR); return; } CMainFrame * pWnd = (CMainFrame *)pApp->m_pMainWnd ; ASSERT(pWnd); if(NULL == pWnd) { AfxMessageBox(IDS_INTERNAL_ERROR); return; } m_LicenseCombo.GetLBText(m_LicenseCombo.GetCurSel(),DescBeforeRemLicense); CRemoveLicenses RemLicense(this); if(IDOK == RemLicense.DoModal()) { //Get the LicensePack to which the data has to be added. ProdDesc = RemLicense.m_LicensePack; GetKeyPack(ProdDesc,&pKeyPack); if(NULL == pKeyPack) { AfxMessageBox(IDS_INTERNAL_ERROR); return; } sKeyPack = pKeyPack->GetKeyPackStruct(); if(RemLicense.m_NumLicenses > sKeyPack.dwTotalLicenseInKeyPack) { TempString.LoadString(IDS_REMOVE_MORE); RemWarning.Format((LPCTSTR)TempString, sKeyPack.dwNumberOfLicenses,RemLicense.m_NumLicenses); AfxMessageBox(RemWarning); return; } TempString.LoadString(IDS_REMOVE_WARNING); RemWarning.Format((LPCTSTR)TempString,RemLicense.m_NumLicenses,ProdDesc); if(IDNO == AfxMessageBox(RemWarning,MB_YESNO)) return; hResult = pWnd->RemoveLicenses(pKeyPack,RemLicense.m_NumLicenses); if(ERROR_SUCCESS != hResult && LSERVER_I_REMOVE_TOOMANY != hResult) { if(LSERVER_E_ACCESS_DENIED == hResult) AfxMessageBox(IDS_NO_ACCESS); else AfxMessageBox(IDS_INTERNAL_ERROR); return; } if(LSERVER_I_REMOVE_TOOMANY == hResult) { sKeyPack = pKeyPack->GetKeyPackStruct(); TempString.Format(IDS_REMOVE_TOOMANY,sKeyPack.dwTotalLicenseInKeyPack); AfxMessageBox(TempString); m_TotalLicenses = sKeyPack.dwTotalLicenseInKeyPack; UpdateData(FALSE); return; } m_TotalLicenses = m_TotalLicenses - RemLicense.m_NumLicenses; sKeyPack = pKeyPack->GetKeyPackStruct(); if((m_TotalLicenses != sKeyPack.dwTotalLicenseInKeyPack) && (0 == ProdDesc.CompareNoCase(DescBeforeRemLicense))) { TempString.Format(IDS_TOTAL_CHANGED,sKeyPack.dwTotalLicenseInKeyPack + RemLicense.m_NumLicenses,sKeyPack.dwTotalLicenseInKeyPack); AfxMessageBox(TempString); m_TotalLicenses = sKeyPack.dwTotalLicenseInKeyPack; } if(0 == ProdDesc.CompareNoCase(DescBeforeRemLicense)) UpdateData(FALSE); return; } //Get the Product Description. } void CAddKeyPack::GetKeyPack(CString ProdDesc, CKeyPack ** ppKeyPack) { if(NULL == ppKeyPack) return; *ppKeyPack = NULL; if(NULL == m_pKeyPackList) return; CKeyPack * pKeyPack = NULL; LSKeyPack sKeyPack; POSITION pos = m_pKeyPackList->GetHeadPosition(); while(pos) { pKeyPack = (CKeyPack *)m_pKeyPackList->GetNext(pos); if(NULL == pKeyPack) return; sKeyPack = pKeyPack->GetKeyPackStruct(); if(0 == ProdDesc.CompareNoCase(sKeyPack.szProductDesc)) { *ppKeyPack = pKeyPack; break; } } return; }