X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FMember%2FForm%2FMembership.php;h=0df3043e6f1045d36dc80c72477aa984f143cdff;hb=8892984acd5354dc8d672afed9e67993c2e3cb82;hp=d089ea86d271ce94c2941922e3bc8b70fd8b83de;hpb=6dcae13c90740fedce223bf97d4ad35c9a29fa13;p=civicrm-core.git diff --git a/CRM/Member/Form/Membership.php b/CRM/Member/Form/Membership.php index d089ea86d2..0df3043e6f 100644 --- a/CRM/Member/Form/Membership.php +++ b/CRM/Member/Form/Membership.php @@ -121,7 +121,7 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { $this->_id = CRM_Utils_Request::retrieve('id', 'Positive', $this); $this->_contactID = CRM_Utils_Request::retrieve('cid', 'Positive', $this); $this->_processors = array(); - CRM_Core_Resources::singleton()->addSetting(array('ids' => array('contact' => $this->_contactID))); + $this->assign('contactID', $this->_contactID); // check for edit permission if (!CRM_Core_Permission::checkActionPermission('CiviMember', $this->_action)) { @@ -227,43 +227,26 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { $mem['status_id'], 'label', 'id' ); - if ($this->_mode) { - $mem['renewUrl'] = CRM_Utils_System::url('civicrm/contact/view/membership', - "reset=1&action=renew&cid={$this->_contactID}&id={$mem['id']}&context=membership&selectedChild=member&mode=live" - ); - } - else { - $mem['renewUrl'] = CRM_Utils_System::url('civicrm/contact/view/membership', - "reset=1&action=renew&cid={$this->_contactID}&id={$mem['id']}&context=membership&selectedChild=member" - ); - } + $mem['renewUrl'] = CRM_Utils_System::url('civicrm/contact/view/membership', + "reset=1&action=renew&cid={$this->_contactID}&id={$mem['id']}&context=membership&selectedChild=member" + . ($this->_mode ? '&mode=live' : '') + ); $mem['membershipTab'] = CRM_Utils_System::url('civicrm/contact/view', "reset=1&force=1&cid={$this->_contactID}&selectedChild=member" ); $mems_by_org[$mem['member_of_contact_id']] = $mem; } - $resources = CRM_Core_Resources::singleton(); - $resources->addSetting(array('existingMems' => array('memberorgs' => $mems_by_org))); - $resources->addScriptFile('civicrm', 'templates/CRM/Member/Form/Membership.js'); + $this->assign('existingContactMemberships', $mems_by_org); } } else { + // In standalone mode we don't have a contact id yet so lookup will be done client-side with this script: $resources = CRM_Core_Resources::singleton(); $resources->addScriptFile('civicrm', 'templates/CRM/Member/Form/MembershipStandalone.js'); - $statuses = array(); - $membershipStatus = new CRM_Member_DAO_MembershipStatus(); - $membershipStatus->is_current_member = 1; - $membershipStatus->find(); - $membershipStatus->selectAdd(); - $membershipStatus->selectAdd('id'); - while ($membershipStatus->fetch()) { - $statuses[$membershipStatus->id] = $membershipStatus->label; - } - $membershipStatus->free(); $passthru = array( 'typeorgs' => CRM_Member_BAO_MembershipType::getMembershipTypeOrganization(), - 'memtypes' => CRM_Member_BAO_MembershipType::getMembershipTypes(FALSE), - 'statuses' => $statuses, + 'memtypes' => CRM_Core_PseudoConstant::get('CRM_Member_BAO_Membership', 'membership_type_id'), + 'statuses' => CRM_Core_PseudoConstant::get('CRM_Member_BAO_Membership', 'status_id'), ); $resources->addSetting(array('existingMems' => $passthru)); } @@ -286,18 +269,9 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { $this->assign('onlinePendingContributionId', $this->_onlinePendingContributionId); $this->_fromEmails = CRM_Core_BAO_Email::getFromEmail(); - // Set title - if ($this->_contactID) { - $displayName = CRM_Contact_BAO_Contact::displayName($this->_contactID); + $this->setPageTitle(ts('Membership')); - // Check if this is default domain contact CRM-10482 - if (CRM_Contact_BAO_Contact::checkDomainContact($this->_contactID)) { - $displayName .= ' (' . ts('default organization') . ')'; - } - // omitting contactImage from title for now since the summary overlay css doesn't work outside of our crm-container - CRM_Utils_System::setTitle(ts('Membership for') . ' ' . $displayName); - } parent::preProcess(); } @@ -430,9 +404,6 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { $billingDefaults = $this->getProfileDefaults('Billing', $this->_contactID); $defaults = array_merge($defaults, $billingDefaults); - // now fix all state country selectors, set correct state based on country - CRM_Core_BAO_Address::fixAllStateSelects($this, $defaults); - // // hack to simplify credit card entry for testing // $defaults['credit_card_type'] = 'Visa'; // $defaults['credit_card_number'] = '4807731747657838'; @@ -551,7 +522,7 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { } if ($this->_context == 'standalone') { - $this->addEntityRef('contact_id', ts('Contact'), array('create' => TRUE), TRUE); + $this->addEntityRef('contact_id', ts('Contact'), array('create' => TRUE, 'api' => array('extra' => array('email'))), TRUE); } $selOrgMemType[0][0] = $selMemTypeOrg[0] = ts('- select -'); @@ -1092,6 +1063,13 @@ WHERE id IN ( ' . implode(' , ', array_keys($membershipType)) . ' )'; return; } + $isTest = ($this->_mode == 'test') ? 1 : 0; + + $lineItems = NULL; + if (!empty($this->_lineItem)) { + $lineItems = $this->_lineItem; + } + $config = CRM_Core_Config::singleton(); // get the submitted form values. $this->_params = $formValues = $this->controller->exportValues($this->_name); @@ -1204,7 +1182,7 @@ WHERE id IN ( ' . implode(' , ', array_keys($membershipType)) . ' )'; $$dateVariable = CRM_Utils_Date::processDate($formValues[$dateField]); } - $memTypeNumTerms = CRM_Utils_Array::value('num_terms', $formValues); + $memTypeNumTerms = empty($termsByType) ? CRM_Utils_Array::value('num_terms', $formValues) : NULL; $calcDates = array(); foreach ($this->_memTypeSelected as $memType) { @@ -1404,7 +1382,7 @@ WHERE id IN ( ' . implode(' , ', array_keys($membershipType)) . ' )'; ); } - // add all the additioanl payment params we need + // add all the additional payment params we need $this->_params["state_province-{$this->_bltID}"] = $this->_params["billing_state_province-{$this->_bltID}"] = CRM_Core_PseudoConstant::stateProvinceAbbreviation($this->_params["billing_state_province_id-{$this->_bltID}"]); $this->_params["country-{$this->_bltID}"] = $this->_params["billing_country-{$this->_bltID}"] = CRM_Core_PseudoConstant::countryIsoCode($this->_params["billing_country_id-{$this->_bltID}"]); @@ -1453,18 +1431,21 @@ WHERE id IN ( ' . implode(' , ', array_keys($membershipType)) . ' )'; $result, $this->_contributorContactID, $contributionType, - FALSE, TRUE, - FALSE + FALSE, + $isTest, + $lineItems ); //create new soft-credit record, CRM-13981 - $softParams['contribution_id'] = $contribution->id; - $softParams['currency'] = $contribution->currency; - $softParams['amount'] = $contribution->total_amount; - CRM_Contribute_BAO_ContributionSoft::add($softParams); + if ($softParams) { + $softParams['contribution_id'] = $contribution->id; + $softParams['currency'] = $contribution->currency; + $softParams['amount'] = $contribution->total_amount; + CRM_Contribute_BAO_ContributionSoft::add($softParams); + } - $paymentParams['contactID'] = $contactID; + $paymentParams['contactID'] = $this->_contactID; $paymentParams['contributionID'] = $contribution->id; $paymentParams['contributionTypeID'] = $contribution->financial_type_id; $paymentParams['contributionPageID'] = $contribution->contribution_page_id; @@ -1491,7 +1472,7 @@ WHERE id IN ( ' . implode(' , ', array_keys($membershipType)) . ' )'; if ($params['total_amount'] > 0.0) { $payment = CRM_Core_Payment::singleton($this->_mode, $this->_paymentProcessor, $this); - $result = & $payment->doDirectPayment($paymentParams); + $result = $payment->doDirectPayment($paymentParams); } if (is_a($result, 'CRM_Core_Error')) { @@ -1551,8 +1532,13 @@ WHERE id IN ( ' . implode(' , ', array_keys($membershipType)) . ' )'; } $membershipParams = array_merge($membershipTypeValues[$memType], $params); + //CRM-15366 + if (!empty($softParams) && empty($paymentParams['is_recur'])) { + $membershipParams['soft_credit'] = $softParams; + } $membership = CRM_Member_BAO_Membership::create($membershipParams, $ids); - + $params['contribution'] = CRM_Utils_Array::value('contribution', $membershipParams); + unset($params['lineItems']); $this->_membershipIDs[] = $membership->id; $createdMemberships[$memType] = $membership; $count++; @@ -1581,18 +1567,20 @@ WHERE id IN ( ' . implode(' , ', array_keys($membershipType)) . ' )'; $lineItems[$itemId]['line_total'] = $params['total_amount']; $lineItems[$itemId]['id'] = $itemId; $lineItem[$priceSetId] = $lineItems; - CRM_Price_BAO_LineItem::processPriceSet($params['contribution_id'], $lineItem); + $contributionBAO = new CRM_Contribute_BAO_Contribution(); + $contributionBAO->id = $params['contribution_id']; + $contributionBAO->find(); + CRM_Price_BAO_LineItem::processPriceSet($params['contribution_id'], $lineItem, $contributionBAO, 'civicrm_membership'); //create new soft-credit record, CRM-13981 - $softParams['contribution_id'] = $params['contribution_id']; - $dao = new CRM_Contribute_DAO_Contribution(); - $dao->id = $params['contribution_id']; - $dao->find(); - while ($dao->fetch()) { - $softParams['currency'] = $dao->currency; - $softParams['amount'] = $dao->total_amount; + if ($softParams) { + $softParams['contribution_id'] = $params['contribution_id']; + while ($contributionBAO->fetch()) { + $softParams['currency'] = $contributionBAO->currency; + $softParams['amount'] = $contributionBAO->total_amount; + } + CRM_Contribute_BAO_ContributionSoft::add($softParams); } - CRM_Contribute_BAO_ContributionSoft::add($softParams); } //carry updated membership object. @@ -1652,6 +1640,8 @@ WHERE id IN ( ' . implode(' , ', array_keys($membershipType)) . ' )'; } $membership = CRM_Member_BAO_Membership::create($membershipParams, $ids); + $params['contribution'] = CRM_Utils_Array::value('contribution', $membershipParams); + unset($params['lineItems']); $this->_membershipIDs[] = $membership->id; $createdMemberships[$memType] = $membership; @@ -1661,35 +1651,41 @@ WHERE id IN ( ' . implode(' , ', array_keys($membershipType)) . ' )'; } if (!empty($lineItem[$priceSetId])) { + $invoiceSettings = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::CONTRIBUTE_PREFERENCES_NAME,'contribution_invoice_settings'); + $invoicing = CRM_Utils_Array::value('invoicing', $invoiceSettings); + $taxAmount = FALSE; $totalTaxAmount = 0; foreach ($lineItem[$priceSetId] as & $priceFieldOp) { if (!empty($priceFieldOp['membership_type_id'])) { - $priceFieldOp['start_date'] = $membershipTypeValues[$priceFieldOp['membership_type_id']]['start_date'] ? CRM_Utils_Date::customFormat($membershipTypeValues[$priceFieldOp['membership_type_id']]['start_date'], '%d%f %b, %Y') : '-'; - - $priceFieldOp['end_date'] = $membershipTypeValues[$priceFieldOp['membership_type_id']]['end_date'] ? CRM_Utils_Date::customFormat($membershipTypeValues[$priceFieldOp['membership_type_id']]['end_date'], '%d%f %b, %Y') : '-'; + $priceFieldOp['start_date'] = $membershipTypeValues[$priceFieldOp['membership_type_id']]['start_date'] ? CRM_Utils_Date::customFormat($membershipTypeValues[$priceFieldOp['membership_type_id']]['start_date'], '%B %E%f, %Y') : '-'; + $priceFieldOp['end_date'] = $membershipTypeValues[$priceFieldOp['membership_type_id']]['end_date'] ? CRM_Utils_Date::customFormat($membershipTypeValues[$priceFieldOp['membership_type_id']]['end_date'], '%B %E%f, %Y') : '-'; } else { $priceFieldOp['start_date'] = $priceFieldOp['end_date'] = 'N/A'; } - if (isset($priceFieldOp['tax_amount'])) { + if ($invoicing && isset($priceFieldOp['tax_amount'])) { + $taxAmount = TRUE; $totalTaxAmount += $priceFieldOp['tax_amount']; } } - //add dataArray membership receipt - $dataArray = array(); - foreach ($lineItem[$priceSetId] as $key => $value) { - if (isset($value['tax_amount']) && isset($value['tax_rate'])) { - if (isset($dataArray[$value['tax_rate']])) { - $dataArray[$value['tax_rate']] += $dataArray[$value['tax_rate']] + CRM_Utils_Array::value('tax_amount', $value); - } else { - $dataArray[$value['tax_rate']] = CRM_Utils_Array::value('tax_amount', $value); - } - } + if ($invoicing) { + $dataArray = array(); + foreach ($lineItem[$priceSetId] as $key => $value) { + if (isset($value['tax_amount']) && isset($value['tax_rate'])) { + if (isset($dataArray[$value['tax_rate']])) { + $dataArray[$value['tax_rate']] = $dataArray[$value['tax_rate']] + CRM_Utils_Array::value('tax_amount', $value); + } else { + $dataArray[$value['tax_rate']] = CRM_Utils_Array::value('tax_amount', $value); + } + } + } + if ($taxAmount) { + $this->assign('totalTaxAmount', $totalTaxAmount); + $this->assign('taxTerm', CRM_Utils_Array::value('tax_term', $invoiceSettings)); + } + $this->assign('dataArray', $dataArray); } - $smarty = CRM_Core_Smarty::singleton(); - $smarty->assign('dataArray', $dataArray); } - $this->assign('totalTaxAmount', $totalTaxAmount); $this->assign('lineItem', !empty($lineItem) && !$isQuickConfig ? $lineItem : FALSE); $receiptSend = FALSE; @@ -1698,6 +1694,7 @@ WHERE id IN ( ' . implode(' , ', array_keys($membershipType)) . ' )'; $formValues['contact_id'] = $this->_contactID; + $formValues['contribution_id'] = CRM_Member_BAO_Membership::getMembershipContributionId($membership->id); // send email receipt $mailSend = self::emailReceipt($this, $formValues, $membership); } @@ -1910,6 +1907,17 @@ WHERE id IN ( ' . implode(' , ', array_keys($membershipType)) . ' )'; $form->_receiptContactId = $formValues['contact_id']; } } + $template = CRM_Core_Smarty::singleton( ); + $taxAmt = $template->get_template_vars('dataArray'); + $eventTaxAmt = $template->get_template_vars('totalTaxAmount'); + $prefixValue = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::CONTRIBUTE_PREFERENCES_NAME, 'contribution_invoice_settings'); + $invoicing = CRM_Utils_Array::value('invoicing', $prefixValue); + if ((!empty($taxAmt) || isset($eventTaxAmt)) && (isset($invoicing) && isset($prefixValue['is_email_pdf']))) { + $isEmailPdf = True; + } + else { + $isEmailPdf = False; + } list($mailSend, $subject, $message, $html) = CRM_Core_BAO_MessageTemplate::sendTemplate( array( @@ -1919,6 +1927,9 @@ WHERE id IN ( ' . implode(' , ', array_keys($membershipType)) . ' )'; 'from' => $receiptFrom, 'toName' => $form->_contributorDisplayName, 'toEmail' => $form->_contributorEmail, + 'PDFFilename' => ts('receipt').'.pdf', + 'isEmailPdf' => $isEmailPdf, + 'contributionId' => $formValues['contribution_id'], 'isTest' => (bool) ($form->_action & CRM_Core_Action::PREVIEW) ) );