public function GetPriorMembershipText() { $strPriors = null; foreach ($this->objPerson->GetMembershipArray(QQ::OrderBy(QQN::Membership()->DateStart, false)) as $objMembership) { if ($objMembership->DateEnd) { $strPriors .= sprintf('<br/><em>Prior membership from %s to %s</em>', $objMembership->DateStart->__toString('MMMM D, YYYY'), $objMembership->DateEnd->__toString('MMMM D, YYYY')); } } return $strPriors; }
protected function dtgNewMembers_Bind() { $dtAfterValue = new QDateTime($this->dtxAfterValue->Text); $dtBeforeValue = new QDateTime($this->dtxBeforeValue->Text); $objcondition = QQ::Equal(QQN::Membership()->Person->AttributeValue->Attribute->Name, 'Post-2016'); $this->dtgNewMembers->TotalItemCount = Membership::CountArrayByStartDateRange($dtAfterValue, $dtBeforeValue, $objcondition); $objMembershipArray = Membership::LoadArrayByStartDateRange($dtAfterValue, $dtBeforeValue, $objcondition, $this->dtgNewMembers->LimitClause); $this->dtgNewMembers->DataSource = $objMembershipArray; $this->iTotalCount = count($objMembershipArray); $this->CalculateMaritalAndAgeStatus($objMembershipArray); $this->CalculateAttributeStatistics($objMembershipArray); }
protected function Form_Create() { $this->lblLabel = new QLabel($this); $this->lblLabel->Text = "Members who left after "; $this->dtxBeforeValue = new QDateTimeTextBox($this); $this->dtxBeforeValue->Name = "Members who Exited Before:"; $this->dtxBeforeValue->Required = true; $this->beforeCalValue = new QCalendar($this, $this->dtxBeforeValue); $this->dtxBeforeValue->RemoveAllActions(QClickEvent::EventName); $this->dtxBeforeValue->AddAction(new QChangeEvent(), new QAjaxAction('dtxDate_Change')); $this->dtxBeforeValue->Text = QApplication::PathInfo(1); $this->dtxAfterValue = new QDateTimeTextBox($this); $this->dtxAfterValue->Name = "Members who exited After:"; $this->dtxAfterValue->Required = true; $this->afterCalValue = new QCalendar($this, $this->dtxAfterValue); $this->dtxAfterValue->RemoveAllActions(QClickEvent::EventName); $this->dtxAfterValue->AddAction(new QChangeEvent(), new QAjaxAction('dtxDate_Change')); $this->dtxAfterValue->Text = QApplication::PathInfo(0); $this->dtgExitingMembers = new QDataGrid($this); $this->dtgExitingMembers->AddColumn(new QDataGridColumn('Name', '<?= $_ITEM->Person->FullName; ?>', 'Width=270px')); $this->dtgExitingMembers->AddColumn(new QDataGridColumn('Membership End Date', '<?= $_ITEM->DateEnd; ?>', 'Width=270px')); $this->dtgExitingMembers->AddColumn(new QDataGridColumn('Termination Reason', '<?= $_ITEM->TerminationReason; ?>', 'Width=270px')); $dtAfterValue = new QDateTime($this->dtxAfterValue->Text); $dtBeforeValue = new QDateTime($this->dtxBeforeValue->Text); $objcondition = QQ::Equal(QQN::Membership()->Person->AttributeValue->Attribute->Name, 'Post-2016'); $objMembershipArray = Membership::LoadArrayByEndDateRange($dtAfterValue, $dtBeforeValue, $objcondition); $this->iTotalCount = count($objMembershipArray); $this->dtgExitingMembers->DataSource = $objMembershipArray; $chartArray = array(); $terminationReason = array(); foreach ($objMembershipArray as $member) { if (array_key_exists($member->TerminationReason, $terminationReason)) { $terminationReason[$member->TerminationReason]++; } else { $terminationReason[$member->TerminationReason] = 1; } } ksort($terminationReason, SORT_STRING); foreach ($terminationReason as $key => $value) { $objItem = new memberArray(); $objItem->reason = $key; $objItem->count = $value; $chartArray[] = $objItem; } QApplication::ExecuteJavaScript('initializeChart(' . json_encode($chartArray) . ');'); }
/** * Recalculates this member's Membership Status and updates MembershipStatusTypeId * based on the calculation. Will call save if asked to do so * @param boolean $blnSave whether or not to call save after updating * @return integer the new/updated TypeId */ public function RefreshMembershipStatusTypeId($blnSave = true) { // If this Individual record isn't saved yet, then we are automatically not a member if (!$this->intId) { $this->intMembershipStatusTypeId = MembershipStatusType::NonMember; if ($blnSave) { $this->Save(); } return $this->intMembershipStatusTypeId; } // Pull the most recent Membership $objMembership = Membership::QuerySingle(QQ::Equal(QQN::Membership()->PersonId, $this->intId), QQ::OrderBy(QQN::Membership()->DateStart, false)); // If no membership if (!$objMembership) { // TODO: Check to see if "Child of Member" $this->intMembershipStatusTypeId = MembershipStatusType::NonMember; if ($blnSave) { $this->Save(); } return $this->intMembershipStatusTypeId; } // If no EndDate, or EndDate is in the future if (!$objMembership->DateEnd || $objMembership->DateEnd->IsLaterThan(QDateTime::Now(false))) { $this->intMembershipStatusTypeId = MembershipStatusType::Member; if ($blnSave) { $this->Save(); } return $this->intMembershipStatusTypeId; } // Check to see if we're deceased if ($objMembership->TerminationReason == MembershipStatusType::ToString(MembershipStatusType::Deceased)) { $this->intMembershipStatusTypeId = MembershipStatusType::Deceased; if ($blnSave) { $this->Save(); } return $this->intMembershipStatusTypeId; } // Otherwise, we are a Past member $this->intMembershipStatusTypeId = MembershipStatusType::FormerMember; if ($blnSave) { $this->Save(); } return $this->intMembershipStatusTypeId; }
/** * Count Memberships * by DateStart Index(es) * @param QDateTime $dttDateStart * @return int */ public static function CountByDateStart($dttDateStart, $objOptionalClauses = null) { // Call Membership::QueryCount to perform the CountByDateStart query return Membership::QueryCount(QQ::Equal(QQN::Membership()->DateStart, $dttDateStart), $objOptionalClauses); }
/** * Used internally by the Meta-based Add Column tools. * * Given a QQNode or a Text String, this will return a Membership-based QQNode. * It will also verify that it is a proper Membership-based QQNode, and will throw an exception otherwise. * * @param mixed $mixContent * @return QQNode */ protected function ResolveContentItem($mixContent) { if ($mixContent instanceof QQNode) { if (!$mixContent->_ParentNode) { throw new QCallerException('Content QQNode cannot be a Top Level Node'); } if ($mixContent->_RootTableName == 'membership') { if ($mixContent instanceof QQReverseReferenceNode && !$mixContent->_PropertyName) { throw new QCallerException('Content QQNode cannot go through any "To Many" association nodes.'); } $objCurrentNode = $mixContent; while ($objCurrentNode = $objCurrentNode->_ParentNode) { if (!$objCurrentNode instanceof QQNode) { throw new QCallerException('Content QQNode cannot go through any "To Many" association nodes.'); } if ($objCurrentNode instanceof QQReverseReferenceNode && !$objCurrentNode->_PropertyName) { throw new QCallerException('Content QQNode cannot go through any "To Many" association nodes.'); } } return $mixContent; } else { throw new QCallerException('Content QQNode has a root table of "' . $mixContent->_RootTableName . '". Must be a root of "membership".'); } } else { if (is_string($mixContent)) { switch ($mixContent) { case 'Id': return QQN::Membership()->Id; case 'PersonId': return QQN::Membership()->PersonId; case 'Person': return QQN::Membership()->Person; case 'DateStart': return QQN::Membership()->DateStart; case 'DateEnd': return QQN::Membership()->DateEnd; case 'TerminationReason': return QQN::Membership()->TerminationReason; default: throw new QCallerException('Simple Property not found in MembershipDataGrid content: ' . $mixContent); } } else { if ($mixContent instanceof QQAssociationNode) { throw new QCallerException('Content QQNode cannot go through any "To Many" association nodes.'); } else { throw new QCallerException('Invalid Content type'); } } } }
public function dtgMemberships_Bind() { $this->dtgMemberships->DataSource = $this->objPerson->GetMembershipArray(QQ::OrderBy(QQN::Membership()->DateStart, false)); }
public static function LoadArrayByEndDateRange($dttAfterDateStart, $dttBeforeDateStart, $objCondition = null, $objOptionalClauses = null) { // This will return an array of Membership objects $objCondition = QQ::AndCondition($objCondition, QQ::AndCondition(QQ::GreaterOrEqual(QQN::Membership()->DateEnd, $dttAfterDateStart), QQ::LessOrEqual(QQN::Membership()->DateEnd, $dttBeforeDateStart))); return Membership::QueryArray($objCondition, $objOptionalClauses); }