Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CRM-21677 - Report improvements #11550

Closed
wants to merge 8 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 66 additions & 17 deletions CRM/Report/Form.php
Original file line number Diff line number Diff line change
Expand Up @@ -4304,33 +4304,82 @@ public function fiscalYearOffset($fieldName) {

/**
* Add Address into From Table if required.
*
* Prefix will be added to both tables as
* it is assumed you are using it to get address of a secondary contact.
*
* @param string $prefix
* @param array $extra Additional options.
* Not currently used in core but may be used in override extensions.
*/
public function addAddressFromClause() {
public function joinAddressFromContact($prefix = '', $extra = array()) {
// include address field if address column is to be included
if ((isset($this->_addressField) &&
$this->_addressField
) ||
$this->isTableSelected('civicrm_address')
) {
if ((isset($this->_addressField) && $this->_addressField) || $this->isTableSelected($prefix . 'civicrm_address')) {
$this->_from .= "
LEFT JOIN civicrm_address {$this->_aliases[$prefix . 'civicrm_address']}
ON ({$this->_aliases[$prefix . 'civicrm_contact']}.id =
{$this->_aliases[$prefix . 'civicrm_address']}.contact_id) AND
{$this->_aliases[$prefix . 'civicrm_address']}.is_primary = 1\n";
}
}

/**
* Add Country into From Table if required.
*
* Prefix will be added to both tables as
* it is assumed you are using it to get address of a secondary contact.
*
* @param string $prefix
* @param array $extra Additional options.
* Not currently used in core but may be used in override extensions.
*/
public function joinCountryFromClause($prefix = '', $extra = array()) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we change this to joinCountryFromAddressClause

// include country field if country column is to be included
if ($this->isTableSelected($prefix . 'civicrm_country')) {
$this->_from .= "
LEFT JOIN civicrm_address {$this->_aliases['civicrm_address']}
ON ({$this->_aliases['civicrm_contact']}.id =
{$this->_aliases['civicrm_address']}.contact_id) AND
{$this->_aliases['civicrm_address']}.is_primary = 1\n";
LEFT JOIN civicrm_country {$this->_aliases[$prefix . 'civicrm_country']}
ON {$this->_aliases[$prefix . 'civicrm_address']}.country_id = {$this->_aliases[$prefix . 'civicrm_country']}.id AND
{$this->_aliases[$prefix . 'civicrm_address']}.is_primary = 1 ";
}
}

/**
* Add Phone into From Table if required.
*
* Prefix will be added to both tables as
* it is assumed you are using it to get address of a secondary contact.
*
* @param string $prefix
* @param array $extra Additional options.
* Not currently used in core but may be used in override extensions.
*/
public function addPhoneFromClause() {
// include address field if address column is to be included
if ($this->isTableSelected('civicrm_phone')) {
public function joinPhoneFromClause($prefix = '', $extra = array()) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we change to joinPhoneFromContactClause

// include phone field if phone column is to be included
if ($this->isTableSelected($prefix . 'civicrm_phone')) {
$this->_from .= "
LEFT JOIN civicrm_phone {$this->_aliases[$prefix . 'civicrm_phone']}
ON {$this->_aliases[$prefix . 'civicrm_contact']}.id = {$this->_aliases[$prefix . 'civicrm_phone']}.contact_id AND
{$this->_aliases[$prefix . 'civicrm_phone']}.is_primary = 1\n";
}
}

/**
* Add Email into From Table if required.
*
* Prefix will be added to both tables as
* it is assumed you are using it to get address of a secondary contact.
*
* @param string $prefix
* @param array $extra Additional options.
* Not currently used in core but may be used in override extensions.
*/
public function joinEmailFromClause($prefix = '', $extra = array()) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we change to joinEmailFromContactClause

// include email field if email column is to be included
if ($this->isTableSelected($prefix . 'civicrm_email')) {
$this->_from .= "
LEFT JOIN civicrm_phone {$this->_aliases['civicrm_phone']}
ON ({$this->_aliases['civicrm_contact']}.id =
{$this->_aliases['civicrm_phone']}.contact_id) AND
{$this->_aliases['civicrm_phone']}.is_primary = 1\n";
LEFT JOIN civicrm_email {$this->_aliases[$prefix . 'civicrm_email']}
ON ({$this->_aliases[$prefix . 'civicrm_contact']}.id = {$this->_aliases[$prefix . 'civicrm_email']}.contact_id AND
{$this->_aliases[$prefix . 'civicrm_email']}.is_primary = 1) ";
}
}

Expand Down
2 changes: 1 addition & 1 deletion CRM/Report/Form/Activity.php
Original file line number Diff line number Diff line change
Expand Up @@ -582,7 +582,7 @@ public function from($recordType) {
$this->_aliases['civicrm_contact'] = 'civicrm_contact_source';
}

$this->addAddressFromClause();
$this->joinAddressFromClause();
}

/**
Expand Down
14 changes: 2 additions & 12 deletions CRM/Report/Form/ActivitySummary.php
Original file line number Diff line number Diff line change
Expand Up @@ -337,12 +337,7 @@ public function from($durationMode = FALSE) {
LEFT JOIN civicrm_case_contact
ON civicrm_case_contact.case_id = civicrm_case.id ";

if ($this->_phoneField) {
$this->_from .= "
LEFT JOIN civicrm_phone {$this->_aliases['civicrm_phone']}
ON {$this->_aliases['civicrm_contact']}.id = {$this->_aliases['civicrm_phone']}.contact_id AND
{$this->_aliases['civicrm_phone']}.is_primary = 1 ";
}
$this->joinPhoneFromClause();
}
else {
$this->_from = "
Expand All @@ -355,12 +350,7 @@ public function from($durationMode = FALSE) {
{$this->_aclFrom}";
}

if ($this->_emailField) {
$this->_from .= "
LEFT JOIN civicrm_email {$this->_aliases['civicrm_email']}
ON {$this->_aliases['civicrm_contact']}.id = {$this->_aliases['civicrm_email']}.contact_id AND
{$this->_aliases['civicrm_email']}.is_primary = 1 ";
}
$this->joinEmailFromClause();
}

/**
Expand Down
16 changes: 3 additions & 13 deletions CRM/Report/Form/Campaign/SurveyDetails.php
Original file line number Diff line number Diff line change
Expand Up @@ -291,19 +291,9 @@ public function from() {
$this->_from .= " INNER JOIN civicrm_activity_contact activity_contact_civireport ON
( {$this->_aliases['civicrm_activity']}.id = activity_contact_civireport.activity_id AND activity_contact_civireport.record_type_id = {$assigneeID} )\n";

//get the address table.
$this->_from .= " LEFT JOIN civicrm_address {$this->_aliases['civicrm_address']} ON
{$this->_aliases['civicrm_contact']}.id = {$this->_aliases['civicrm_address']}.contact_id AND {$this->_aliases['civicrm_address']}.is_primary = 1\n";

if ($this->_emailField) {
$this->_from .= "LEFT JOIN civicrm_email {$this->_aliases['civicrm_email']} ON
{$this->_aliases['civicrm_contact']}.id = {$this->_aliases['civicrm_email']}.contact_id AND {$this->_aliases['civicrm_email']}.is_primary = 1\n";
}

if ($this->_phoneField) {
$this->_from .= "LEFT JOIN civicrm_phone {$this->_aliases['civicrm_phone']} ON
{$this->_aliases['civicrm_contact']}.id = {$this->_aliases['civicrm_phone']}.contact_id AND {$this->_aliases['civicrm_phone']}.is_primary = 1\n";
}
$this->joinAddressFromClause();
$this->joinPhoneFromClause();
$this->joinEmailFromClause();

if ($this->_locationBasedPhoneField) {
foreach ($this->_surveyResponseFields as $key => $value) {
Expand Down
14 changes: 2 additions & 12 deletions CRM/Report/Form/Case/Demographics.php
Original file line number Diff line number Diff line change
Expand Up @@ -313,19 +313,9 @@ public function from() {
}
}

if ($this->_emailField) {
$this->_from .= "
LEFT JOIN civicrm_email {$this->_aliases['civicrm_email']}
ON ({$this->_aliases['civicrm_contact']}.id = {$this->_aliases['civicrm_email']}.contact_id AND
{$this->_aliases['civicrm_email']}.is_primary = 1) ";
}
$this->joinPhoneFromClause();
$this->joinEmailFromClause();

if ($this->_phoneField) {
$this->_from .= "
LEFT JOIN civicrm_phone {$this->_aliases['civicrm_phone']}
ON {$this->_aliases['civicrm_contact']}.id = {$this->_aliases['civicrm_phone']}.contact_id AND
{$this->_aliases['civicrm_phone']}.is_primary = 1 ";
}
}

public function where() {
Expand Down
22 changes: 4 additions & 18 deletions CRM/Report/Form/Case/Detail.php
Original file line number Diff line number Diff line change
Expand Up @@ -414,24 +414,10 @@ public function from() {
";
}

if ($this->_addressField) {
$this->_from .= "
LEFT JOIN civicrm_address {$this->_aliases['civicrm_address']}
ON {$conact}.id = {$this->_aliases['civicrm_address']}.contact_id AND
{$this->_aliases['civicrm_address']}.is_primary = 1 ";
}
if ($this->_emailField) {
$this->_from .= "
LEFT JOIN civicrm_email {$this->_aliases['civicrm_email']}
ON {$conact}.id = {$this->_aliases['civicrm_email']}.contact_id AND
{$this->_aliases['civicrm_email']}.is_primary = 1 ";
}
if ($this->_phoneField) {
$this->_from .= "
LEFT JOIN civicrm_phone {$this->_aliases['civicrm_phone']}
ON ( {$conact}.id = {$this->_aliases['civicrm_phone']}.contact_id AND
{$this->_aliases['civicrm_phone']}.is_primary = 1) ";
}
$this->joinAddressFromClause();
$this->joinPhoneFromClause();
$this->joinEmailFromClause();

if ($this->_worldRegionField) {
$this->_from .= "
LEFT JOIN civicrm_country {$this->_aliases['civicrm_country']}
Expand Down
16 changes: 5 additions & 11 deletions CRM/Report/Form/Contact/CurrentEmployer.php
Original file line number Diff line number Diff line change
Expand Up @@ -252,17 +252,11 @@ public function from() {
LEFT JOIN civicrm_relationship {$this->_aliases['civicrm_relationship']}
ON ( {$this->_aliases['civicrm_relationship']}.contact_id_a={$this->_aliases['civicrm_contact']}.id
AND {$this->_aliases['civicrm_relationship']}.contact_id_b={$this->_aliases['civicrm_contact']}.employer_id
AND {$this->_aliases['civicrm_relationship']}.relationship_type_id={$relType})
LEFT JOIN civicrm_address {$this->_aliases['civicrm_address']}
ON ({$this->_aliases['civicrm_contact']}.id = {$this->_aliases['civicrm_address']}.contact_id
AND {$this->_aliases['civicrm_address']}.is_primary = 1 )

LEFT JOIN civicrm_phone {$this->_aliases['civicrm_phone']}
ON ({$this->_aliases['civicrm_contact']}.id = {$this->_aliases['civicrm_phone']}.contact_id
AND {$this->_aliases['civicrm_phone']}.is_primary = 1)
LEFT JOIN civicrm_email {$this->_aliases['civicrm_email']}
ON ({$this->_aliases['civicrm_contact']}.id = {$this->_aliases['civicrm_email']}.contact_id
AND {$this->_aliases['civicrm_email']}.is_primary = 1) ";
AND {$this->_aliases['civicrm_relationship']}.relationship_type_id={$relType}) ";

$this->joinAddressFromClause();
$this->joinPhoneFromClause();
$this->joinEmailFromClause();
}

public function where() {
Expand Down
39 changes: 10 additions & 29 deletions CRM/Report/Form/Contact/Detail.php
Original file line number Diff line number Diff line change
Expand Up @@ -390,6 +390,12 @@ public function select() {
if (!empty($field['required']) ||
!empty($this->_params['fields'][$fieldName])
) {
if ($tableName == 'civicrm_address' || $tableName == 'civicrm_country') {
$this->_addressField = TRUE;
}
elseif ($tableName == 'civicrm_email') {
$this->_emailField = TRUE;
}
//isolate the select clause compoenent wise
if (in_array($table['alias'], $this->_component)) {
$select[$table['alias']][] = "{$field['dbAlias']} as {$tableName}_{$fieldName}";
Expand Down Expand Up @@ -457,35 +463,10 @@ public function from() {
$this->_from = "
FROM civicrm_contact {$this->_aliases['civicrm_contact']} {$this->_aclFrom}";

if ($this->isTableSelected('civicrm_country') ||
$this->isTableSelected('civicrm_address')
) {
$this->_from .= "
LEFT JOIN civicrm_address {$this->_aliases['civicrm_address']}
ON ({$this->_aliases['civicrm_contact']}.id = {$this->_aliases['civicrm_address']}.contact_id AND
{$this->_aliases['civicrm_address']}.is_primary = 1 ) ";
}

if ($this->isTableSelected('civicrm_email')) {
$this->_from .= "
LEFT JOIN civicrm_email {$this->_aliases['civicrm_email']}
ON ({$this->_aliases['civicrm_contact']}.id = {$this->_aliases['civicrm_email']}.contact_id AND
{$this->_aliases['civicrm_email']}.is_primary = 1) ";
}

if ($this->isTableSelected('civicrm_phone')) {
$this->_from .= "
LEFT JOIN civicrm_phone {$this->_aliases['civicrm_phone']}
ON {$this->_aliases['civicrm_contact']}.id = {$this->_aliases['civicrm_phone']}.contact_id AND
{$this->_aliases['civicrm_phone']}.is_primary = 1 ";
}

if ($this->isTableSelected('civicrm_country')) {
$this->_from .= "
LEFT JOIN civicrm_country {$this->_aliases['civicrm_country']}
ON {$this->_aliases['civicrm_address']}.country_id = {$this->_aliases['civicrm_country']}.id AND
{$this->_aliases['civicrm_address']}.is_primary = 1 ";
}
$this->joinAddressFromClause();
$this->joinCountryFromClause();
$this->joinPhoneFromClause();
$this->joinEmailFromClause();

$this->_from .= "{$group}";

Expand Down
24 changes: 3 additions & 21 deletions CRM/Report/Form/Contact/Summary.php
Original file line number Diff line number Diff line change
Expand Up @@ -192,27 +192,9 @@ public function from() {
LEFT JOIN civicrm_address {$this->_aliases['civicrm_address']}
ON ({$this->_aliases['civicrm_contact']}.id = {$this->_aliases['civicrm_address']}.contact_id AND
{$this->_aliases['civicrm_address']}.is_primary = 1 ) ";

if ($this->isTableSelected('civicrm_email')) {
$this->_from .= "
LEFT JOIN civicrm_email {$this->_aliases['civicrm_email']}
ON ({$this->_aliases['civicrm_contact']}.id = {$this->_aliases['civicrm_email']}.contact_id AND
{$this->_aliases['civicrm_email']}.is_primary = 1) ";
}

if ($this->_phoneField) {
$this->_from .= "
LEFT JOIN civicrm_phone {$this->_aliases['civicrm_phone']}
ON {$this->_aliases['civicrm_contact']}.id = {$this->_aliases['civicrm_phone']}.contact_id AND
{$this->_aliases['civicrm_phone']}.is_primary = 1 ";
}

if ($this->isTableSelected('civicrm_country')) {
$this->_from .= "
LEFT JOIN civicrm_country {$this->_aliases['civicrm_country']}
ON {$this->_aliases['civicrm_address']}.country_id = {$this->_aliases['civicrm_country']}.id AND
{$this->_aliases['civicrm_address']}.is_primary = 1 ";
}
$this->joinPhoneFromClause();
$this->joinEmailFromClause();
$this->joinCountryFromClause();
}

public function postProcess() {
Expand Down
12 changes: 3 additions & 9 deletions CRM/Report/Form/Contribute/Detail.php
Original file line number Diff line number Diff line change
Expand Up @@ -941,16 +941,10 @@ public function appendAdditionalFromJoins() {
INNER JOIN (SELECT c.id, IF(COUNT(oc.id) = 0, 0, 1) AS ordinality FROM civicrm_contribution c LEFT JOIN civicrm_contribution oc ON c.contact_id = oc.contact_id AND oc.receive_date < c.receive_date GROUP BY c.id) {$this->_aliases['civicrm_contribution_ordinality']}
ON {$this->_aliases['civicrm_contribution_ordinality']}.id = {$this->_aliases['civicrm_contribution']}.id";
}
$this->addPhoneFromClause();
$this->joinPhoneFromClause();
$this->joinAddressFromClause();
$this->joinEmailFromClause();

$this->addAddressFromClause();

if ($this->_emailField) {
$this->_from .= "
LEFT JOIN civicrm_email {$this->_aliases['civicrm_email']}
ON {$this->_aliases['civicrm_contact']}.id = {$this->_aliases['civicrm_email']}.contact_id AND
{$this->_aliases['civicrm_email']}.is_primary = 1\n";
}
// include contribution note
if (!empty($this->_params['fields']['contribution_note']) ||
!empty($this->_params['note_value'])
Expand Down
16 changes: 3 additions & 13 deletions CRM/Report/Form/Contribute/History.php
Original file line number Diff line number Diff line change
Expand Up @@ -398,23 +398,13 @@ public function from() {
ON {$this->_aliases['civicrm_contact']}.id = {$this->_aliases['civicrm_contribution']}.contact_id AND
{$this->_aliases['civicrm_contribution']}.is_test = 0 ";

if ($this->_emailField) {
$this->_from .= " LEFT JOIN civicrm_email {$this->_aliases['civicrm_email']}
ON ({$this->_aliases['civicrm_contact']}.id = {$this->_aliases['civicrm_email']}.contact_id AND
{$this->_aliases['civicrm_email']}.is_primary = 1) ";
}

if ($this->_phoneField) {
$this->_from .= " LEFT JOIN civicrm_phone {$this->_aliases['civicrm_phone']}
ON ({$this->_aliases['civicrm_contact']}.id = {$this->_aliases['civicrm_phone']}.contact_id AND
{$this->_aliases['civicrm_phone']}.is_primary = 1) ";
}

$relContacAlias = 'contact_relationship';
$this->_relationshipFrom = " INNER JOIN civicrm_relationship {$this->_aliases['civicrm_relationship']}
ON (({$this->_aliases['civicrm_relationship']}.contact_id_a = {$relContacAlias}.id OR {$this->_aliases['civicrm_relationship']}.contact_id_b = {$relContacAlias}.id ) AND {$this->_aliases['civicrm_relationship']}.is_active = 1) ";

$this->addAddressFromClause();
$this->joinAddressFromClause();
$this->joinPhoneFromClause();
$this->joinEmailFromClause();

// for credit card type
$this->addFinancialTrxnFromClause();
Expand Down
17 changes: 4 additions & 13 deletions CRM/Report/Form/Contribute/Lybunt.php
Original file line number Diff line number Diff line change
Expand Up @@ -345,19 +345,10 @@ public function from() {
AND {$this->_aliases['civicrm_contribution']}.is_test = 0
INNER JOIN civicrm_contact {$this->_aliases['civicrm_contact']}
ON restricted_contacts.cid = {$this->_aliases['civicrm_contact']}.id";
if ($this->isTableSelected('civicrm_email')) {
$this->_from .= "
LEFT JOIN civicrm_email {$this->_aliases['civicrm_email']}
ON {$this->_aliases['civicrm_contact']}.id = {$this->_aliases['civicrm_email']}.contact_id
AND {$this->_aliases['civicrm_email']}.is_primary = 1";
}
if ($this->isTableSelected('civicrm_phone')) {
$this->_from .= "
LEFT JOIN civicrm_phone {$this->_aliases['civicrm_phone']}
ON {$this->_aliases['civicrm_contact']}.id = {$this->_aliases['civicrm_phone']}.contact_id
AND {$this->_aliases['civicrm_phone']}.is_primary = 1";
}
$this->addAddressFromClause();

$this->joinAddressFromClause();
$this->joinPhoneFromClause();
$this->joinEmailFromClause();
}
else {
$this->setFromBase('civicrm_contact');
Expand Down
Loading