Merge remote-tracking branch 'upstream/4.5' into 4.5-master-2015-03-09-21-44-34
[civicrm-core.git] / api / v3 / PledgePayment.php
CommitLineData
6a488035 1<?php
6a488035
TO
2/*
3 +--------------------------------------------------------------------+
39de6fd5 4 | CiviCRM version 4.6 |
6a488035 5 +--------------------------------------------------------------------+
731a0992 6 | Copyright CiviCRM LLC (c) 2004-2014 |
6a488035
TO
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
9 | |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
13 | |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
18 | |
19 | You should have received a copy of the GNU Affero General Public |
20 | License and the CiviCRM Licensing Exception along |
21 | with this program; if not, contact CiviCRM LLC |
22 | at info[AT]civicrm[DOT]org. If you have questions about the |
23 | GNU Affero General Public License or the licensing of CiviCRM, |
24 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
25 +--------------------------------------------------------------------+
26 */
27
28/**
c28e1768 29 * This api exposes CiviCRM Pledge payment.
6a488035
TO
30 *
31 * @package CiviCRM_APIv3
6a488035
TO
32 */
33
6a488035 34/**
9d32e6f7
EM
35 * Add or update a pledge payment.
36 *
c28e1768
CW
37 * Pledge Payment API doesn't actually add a pledge.
38 * If the request is to 'create' and 'id' is not passed in
39 * the oldest pledge with no associated contribution is updated.
6a488035
TO
40 *
41 * @todo possibly add ability to add payment if there are less payments than pledge installments
c206647d 42 * @todo possibly add ability to recalculate dates if the schedule is changed
6a488035 43 *
cf470720
TO
44 * @param array $params
45 * Input parameters.
6a488035 46 *
a6c01b45 47 * @return array
72b3a70c 48 * API Result
6a488035
TO
49 */
50function civicrm_api3_pledge_payment_create($params) {
51
52 $paymentParams = $params;
8cc574cf 53 if (empty($params['id']) && empty($params['option.create_new'])) {
6a488035
TO
54 $paymentDetails = CRM_Pledge_BAO_PledgePayment::getOldestPledgePayment($params['pledge_id']);
55 if (empty($paymentDetails)) {
56 return civicrm_api3_create_error("There are no unmatched payment on this pledge. Pass in the pledge_payment id to specify one or 'option.create_new' to create one");
57 }
58 elseif (is_array($paymentDetails)) {
59 $paymentParams = array_merge($params, $paymentDetails);
60 }
61 }
62
63 $dao = CRM_Pledge_BAO_PledgePayment::add($paymentParams);
906e6120 64 $result = array();
9b873358 65 if (empty($dao->pledge_id)) {
35671d00 66 $dao->find(TRUE);
6a488035
TO
67 }
68 _civicrm_api3_object_to_array($dao, $result[$dao->id]);
69
6a488035
TO
70 //update pledge status
71 CRM_Pledge_BAO_PledgePayment::updatePledgePaymentStatus($dao->pledge_id);
72
244bbdd8 73 return civicrm_api3_create_success($result, $params, 'PledgePayment', 'create', $dao);
6a488035 74}
11e09c59
TO
75
76/**
0aa0303c
EM
77 * Adjust Metadata for Create action.
78 *
79 * The metadata is used for setting defaults, documentation & validation.
6a488035 80 *
cf470720 81 * @param array $params
b081365f 82 * Array of parameters determined by getfields.
6a488035
TO
83 */
84function _civicrm_api3_pledge_payment_create_spec(&$params) {
85 $params['pledge_id']['api.required'] = 1;
86 $params['status_id']['api.required'] = 1;
87}
88
89/**
9d32e6f7 90 * Delete a pledge Payment - Note this deletes the contribution not just the link.
6a488035 91 *
cf470720
TO
92 * @param array $params
93 * Input parameters.
6a488035 94 *
a6c01b45 95 * @return array
72b3a70c 96 * API result
6a488035
TO
97 */
98function civicrm_api3_pledge_payment_delete($params) {
99
100 if (CRM_Pledge_BAO_PledgePayment::del($params['id'])) {
244bbdd8 101 return civicrm_api3_create_success(array('id' => $params['id']), $params, 'PledgePayment', 'delete');
6a488035
TO
102 }
103 else {
104 return civicrm_api3_create_error('Could not delete payment');
105 }
106}
107
108/**
9d32e6f7 109 * Retrieve a set of pledges, given a set of input params.
6a488035 110 *
cf470720
TO
111 * @param array $params
112 * Input parameters.
6a488035 113 *
a6c01b45 114 * @return array
9d32e6f7 115 * array of pledges, if error an array with an error id and error message
6a488035
TO
116 */
117function civicrm_api3_pledge_payment_get($params) {
118
6a488035
TO
119 return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params);
120}
121
11e09c59 122/**
9d32e6f7 123 * Gets field for civicrm_pledge_payment functions.
6a488035 124 *
c490a46a 125 * @param array $params
ae5ffbb7 126 * Modifiable list of fields allowed for the PledgePayment.get action.
6a488035
TO
127 */
128function civicrm_api3_pledge_payment_get_spec(&$params) {
129 $params['option.create_new'] = array('title' => "Create new field rather than update an unpaid payment");
130}