home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / VSCPPv8.zip / VACPP / IBMCPP / samples / VISBUILD / OASEARCH / CONTRACT.CPV < prev    next >
Text File  |  1995-05-15  |  8KB  |  250 lines

  1. //****************************************************************************
  2. // OAContract Class - C++ Code File (contract.cpv)                           *
  3. //                                                                           *
  4. // COPYRIGHT: Copyright (C) International Business Machines Corp., 1994,1995 *
  5. //                                                                           *
  6. // DISCLAIMER OF WARRANTIES:                                                 *
  7. //   The following [enclosed] code is sample code created by IBM             *
  8. //   Corporation.  This sample code is not part of any standard IBM product  *
  9. //   and is provided to you solely for the purpose of assisting you in the   *
  10. //   development of your applications.  The code is provided "AS IS",        *
  11. //   without warranty of any kind.  IBM shall not be liable for any damages  *
  12. //   arising out of your use of the sample code, even if they have been      *
  13. //   advised of the possibility of such damages.                             *
  14. //****************************************************************************
  15. //NOTE: WE RECOMMEND USING A FIXED-SPACE FONT TO LOOK AT THE SOURCE.
  16. //
  17. // Default Part Code Generation begins here...
  18. INotificationId OAContract::accountNumId = "OAContract::accountNum";
  19. INotificationId OAContract::companyNameId = "OAContract::companyName";
  20. INotificationId OAContract::projectMgrId = "OAContract::projectMgr";
  21. INotificationId OAContract::deptNameId = "OAContract::deptName";
  22. INotificationId OAContract::positionTitleId = "OAContract::positionTitle";
  23. INotificationId OAContract::startDateId = "OAContract::startDate";
  24. INotificationId OAContract::endDateId = "OAContract::endDate";
  25. INotificationId OAContract::currContractorId = "OAContract::currContractor";
  26.  
  27. IString OAContract::accountNum() const
  28. {
  29.   return iAccountNum;
  30. }
  31.  
  32. OAContract & OAContract::setAccountNum(const IString & aAccountNum)
  33. {
  34.   if (iAccountNum != aAccountNum)
  35.   {
  36.     iAccountNum = aAccountNum;
  37.     notifyObservers(INotificationEvent(OAContract::accountNumId, *this));
  38.   } // endif
  39.   return *this;
  40. }
  41.  
  42. IString OAContract::companyName() const
  43. {
  44.   return iCompanyName;
  45. }
  46.  
  47. OAContract & OAContract::setCompanyName(const IString & aCompanyName)
  48. {
  49.   if (iCompanyName != aCompanyName)
  50.   {
  51.     iCompanyName = aCompanyName;
  52.     notifyObservers(INotificationEvent(OAContract::companyNameId, *this));
  53.   } // endif
  54.   return *this;
  55. }
  56.  
  57. IString OAContract::projectMgr() const
  58. {
  59.   return iProjectMgr;
  60. }
  61.  
  62. OAContract & OAContract::setProjectMgr(const IString & aProjectMgr)
  63. {
  64.   if (iProjectMgr != aProjectMgr)
  65.   {
  66.     iProjectMgr = aProjectMgr;
  67.     notifyObservers(INotificationEvent(OAContract::projectMgrId, *this));
  68.   } // endif
  69.   return *this;
  70. }
  71.  
  72. IString OAContract::deptName() const
  73. {
  74.   return iDeptName;
  75. }
  76.  
  77. OAContract & OAContract::setDeptName(const IString & aDeptName)
  78. {
  79.   if (iDeptName != aDeptName)
  80.   {
  81.     iDeptName = aDeptName;
  82.     notifyObservers(INotificationEvent(OAContract::deptNameId, *this));
  83.   } // endif
  84.   return *this;
  85. }
  86.  
  87. IString OAContract::positionTitle() const
  88. {
  89.   return iPositionTitle;
  90. }
  91.  
  92. OAContract & OAContract::setPositionTitle(const IString & aPositionTitle)
  93. {
  94.   if (iPositionTitle != aPositionTitle)
  95.   {
  96.     iPositionTitle = aPositionTitle;
  97.     notifyObservers(INotificationEvent(OAContract::positionTitleId, *this));
  98.   } // endif
  99.   return *this;
  100. }
  101.  
  102. IString OAContract::startDate() const
  103. {
  104.   return iStartDate;
  105. }
  106.  
  107. OAContract & OAContract::setStartDate(const IString & aStartDate)
  108. {
  109.   if (iStartDate != aStartDate)
  110.   {
  111.     iStartDate = aStartDate;
  112.     notifyObservers(INotificationEvent(OAContract::startDateId, *this));
  113.   } // endif
  114.   return *this;
  115. }
  116.  
  117. IString OAContract::endDate() const
  118. {
  119.   return iEndDate;
  120. }
  121.  
  122. OAContract & OAContract::setEndDate(const IString & aEndDate)
  123. {
  124.   if (iEndDate != aEndDate)
  125.   {
  126.     iEndDate = aEndDate;
  127.     notifyObservers(INotificationEvent(OAContract::endDateId, *this));
  128.   } // endif
  129.   return *this;
  130. }
  131.  
  132. IString OAContract::currContractor() const
  133. {
  134.   return iCurrContractor;
  135. }
  136.  
  137. OAContract & OAContract::setCurrContractor(const IString & aCurrContractor)
  138. {
  139.   if (iCurrContractor != aCurrContractor)
  140.   {
  141.     iCurrContractor = aCurrContractor;
  142.     notifyObservers(INotificationEvent(OAContract::currContractorId, *this));
  143.   } // endif
  144.   return *this;
  145. }
  146.  
  147. // Default Part Code Generation ends here.
  148.  
  149. OAContract & OAContract::getContract(const IString & anAccountNum)
  150. {
  151.  
  152. // Start data access code
  153.  
  154.   IProfile *p = new IProfile("contract.ini");
  155.  
  156. // Check for this account number in the profile collection
  157.  
  158.   if (!p->containsKeyName("accountNum", anAccountNum))
  159.   {
  160.   throw IException("A record was not found for this contract.");
  161.   delete p;
  162.   return *this;
  163.   }
  164.  
  165. // If other data exists for this contract,
  166. // set the corresponding contract attributes
  167.  
  168.   setAccountNum(anAccountNum);
  169.  
  170.   if (p->containsKeyName("companyName", anAccountNum))
  171.     setCompanyName(p->elementWithKey("companyName", anAccountNum));
  172.   if (p->containsKeyName("projectMgr", anAccountNum))
  173.     setProjectMgr(p->elementWithKey("projectMgr", anAccountNum));
  174.   if (p->containsKeyName("deptName", anAccountNum))
  175.     setDeptName(p->elementWithKey("deptName", anAccountNum));
  176.   if (p->containsKeyName("positionTitle", anAccountNum))
  177.     setPositionTitle(p->elementWithKey("positionTitle", anAccountNum));
  178.   if (p->containsKeyName("startDate", anAccountNum))
  179.     setStartDate(p->elementWithKey("startDate", anAccountNum));
  180.   if (p->containsKeyName("endDate", anAccountNum))
  181.     setEndDate(p->elementWithKey("endDate", anAccountNum));
  182.   if (p->containsKeyName("currContractor", anAccountNum))
  183.     setCurrContractor(p->elementWithKey("currContractor", anAccountNum));
  184.  
  185.   delete p;
  186.  
  187. // End data access code
  188.  
  189.   return *this;
  190. }
  191.  
  192. OAContract & OAContract::putContract(const IString & anAccountNum)
  193. {
  194.  
  195. // Start data entry code
  196.  
  197.   IProfile *p = new IProfile("contract.ini");
  198.  
  199. // Test for missing account number
  200. // Necessary because of possible direct entry from OAMain EDIT menu
  201.  
  202.   if (anAccountNum.isWhiteSpace() || anAccountNum.length()==0)
  203.   {
  204.   throw IException("You did not enter an account number. Please try again.");
  205.   delete p;
  206.   return *this;
  207.   }
  208.  
  209.   p->addOrReplaceElementWithKey("accountNum", accountNum(), anAccountNum);
  210.  
  211. // If other data about this contract exists, update it in the database
  212.  
  213.   if (companyName)
  214.     p->addOrReplaceElementWithKey("companyName", companyName(), anAccountNum);
  215.   if (projectMgr)
  216.     p->addOrReplaceElementWithKey("projectMgr", projectMgr(), anAccountNum);
  217.   if (deptName)
  218.     p->addOrReplaceElementWithKey("deptName", deptName(), anAccountNum);
  219.   if (positionTitle)
  220.     p->addOrReplaceElementWithKey("positionTitle", positionTitle(), anAccountNum);
  221.   if (startDate)
  222.     p->addOrReplaceElementWithKey("startDate", startDate(), anAccountNum);
  223.   if (endDate)
  224.     p->addOrReplaceElementWithKey("endDate", endDate(), anAccountNum);
  225.   if (currContractor)
  226.     p->addOrReplaceElementWithKey("currContractor", currContractor(), anAccountNum);
  227.  
  228.   delete p;
  229.  
  230. // End data entry code
  231.  
  232.   return *this;
  233. }
  234.  
  235. // Copy constructor
  236.  
  237. OAContract::OAContract(const OAContract & aContract)
  238.   : IStandardNotifier(aContract),
  239.   iAccountNum(aContract.accountNum()),
  240.   iCompanyName(aContract.companyName()),
  241.   iProjectMgr(aContract.projectMgr()),
  242.   iDeptName(aContract.deptName()),
  243.   iPositionTitle(aContract.positionTitle()),
  244.   iStartDate(aContract.startDate()),
  245.   iEndDate(aContract.endDate()),
  246.   iCurrContractor(aContract.currContractor())
  247.   {
  248.     enableNotification();
  249.   }
  250.