1 package com.leonarduk.clearcheckbook.calls;
2
3 import java.io.IOException;
4 import java.util.List;
5
6 import org.apache.log4j.Logger;
7
8 import com.leonarduk.clearcheckbook.ClearCheckBookConnection;
9 import com.leonarduk.clearcheckbook.ClearcheckbookException;
10 import com.leonarduk.clearcheckbook.dto.AbstractDataType;
11 import com.leonarduk.clearcheckbook.dto.AccountDataType;
12 import com.leonarduk.clearcheckbook.dto.ParsedNameValuePair;
13 import com.leonarduk.clearcheckbook.dto.TransactionDataType;
14
15 public class TransactionCall extends AbstractCall<TransactionDataType> {
16
17 private static final Logger _logger = Logger
18 .getLogger(TransactionCall.class);
19
20 public static final String TYPE = "transaction";
21
22 public TransactionCall(ClearCheckBookConnection connection) {
23 super(connection, TransactionDataType.class);
24 }
25
26 @Override
27 public List<String> bulkProcess(List<TransactionDataType> dataTypeList)
28 throws ClearcheckbookException {
29 return super.bulkProcess(dataTypeList);
30 }
31
32 @Override
33 protected String getUrlSuffix() {
34 return TYPE;
35 }
36
37 /***
38 * Returns an array of transactions for the current user <br>
39 * Method: get <br>
40 * Call: transactions
41 * <p>
42 * Example: <br>
43 * https://username:password@www.clearcheckbook.com/api/transactions/
44 * <p>
45 * Parameters: <br>
46 * Parameter Required Description <br>
47 * account_id Optional Get transactions for a specific account <br>
48 * page Optional integer used for limiting the number of transactions. Used
49 * in conjunction with limit. (eg: page=2, limit=10) <br>
50 * limit Optional The number of transactions you want to receive. Must be
51 * used with the page variable.
52 * <p>
53 * Returned Values: <br>
54 * Value Description <br>
55 * id The id of the transaction <br>
56 * date The date for the transaction (formatted as yyyy-mm-dd) <br>
57 * amount Float value for the amount of the transaction. <br>
58 * transaction_type Whether this transaction is a deposit or withdrawal
59 * (0=withdrawal, 1=deposit) <br>
60 * description The description for this transaction <br>
61 * account_id The account associated with this transaction. 0 = No account <br>
62 * category_id The category associated with this transaction. 0 = No
63 * category <br>
64 * jive Whether or not this transaction is jived (0= Not jived, 1= Jived) <br>
65 * specialstatus Text that is empty or says Transfer or Split <br>
66 * parent If this is a split from a split transaction, this is the id of the
67 * parent transaction <br>
68 * related_transfer A unique integer corresponding to its related transfer.
69 * <br>
70 * check_num Text from the check number field <br>
71 * memo Text from the memo field <br>
72 * payee Text from the payee field <br>
73 * initial_balance Boolean for whether or not this was set up as an initial
74 * balance for an account
75 *
76 * @Override {@link AbstractCall#getAll()}
77 * @throws ClearcheckbookException
78 * @return List of transactions
79 */
80 public List<TransactionDataType> getAll() throws ClearcheckbookException {
81 return super.getAll();
82 }
83
84 public List<TransactionDataType> getAll(long accountId)
85 throws ClearcheckbookException {
86 return super.getAll(AccountDataType.getIdParameter(accountId));
87 }
88
89 /***
90 *
91 * @param account
92 * @return
93 * @throws ClearcheckbookException
94 */
95 public List<TransactionDataType> getAll(AccountDataType account)
96 throws ClearcheckbookException {
97 return super.getAll(new ParsedNameValuePair("account_id", String
98 .valueOf(account.getId())));
99 }
100
101 public List<TransactionDataType> getAll(long accountId, int page, int limit)
102 throws ClearcheckbookException {
103 return super.getAll(AccountDataType.getIdParameter(accountId),
104 TransactionDataType.getPageParameter(page),
105 TransactionDataType.getLimitParameter(limit));
106 }
107
108 public List<TransactionDataType> getAll(int page, int limit)
109 throws ClearcheckbookException {
110 return super.getAll(TransactionDataType.getPageParameter(page),
111 TransactionDataType.getLimitParameter(limit));
112 }
113
114 /***
115 * Returns information about a specific transaction. <br>
116 * Method: get <br>
117 * Call: transaction
118 * <p>
119 * Example: <br>
120 * https://username:password@www.clearcheckbook.com/api/transaction/
121 * <p>
122 * Parameters: <br>
123 * Parameter Required Description <br>
124 * id Required The id of the transaction you want
125 * <p>
126 * Returned Values: <br>
127 * Value Description <br>
128 * id The id of the transaction <br>
129 * date The date for the transaction (formatted as yyyy-mm-dd) <br>
130 * amount Float value for the amount of the transaction. <br>
131 * transaction_type Whether this transaction is a deposit or withdrawal
132 * (0=withdrawal, 1=deposit) <br>
133 * description The description for this transaction <br>
134 * account_id The account associated with this transaction. 0 = No account <br>
135 * category_id The category associated with this transaction. 0 = No
136 * category <br>
137 * jive Whether or not this transaction is jived (0= Not jived, 1= Jived) <br>
138 * specialstatus Text that is empty or says Transfer or Split <br>
139 * parent If this is a split from a split transaction, this is the id of the
140 * parent transaction <br>
141 * related_transfer A unique integer corresponding to its related transfer.
142 * <br>
143 * check_num Text from the check number field <br>
144 * memo Text from the memo field <br>
145 * payee Text from the payee field <br>
146 * initial_balance Boolean for whether or not this was set up as an initial
147 * balance for an account
148 *
149 * @Override {@link AbstractCall#get(ParsedNameValuePair)}
150 * @return transaction
151 */
152 public TransactionDataType get(ParsedNameValuePair id)
153 throws ClearcheckbookException {
154 TransactionDataType transactionDataType = super.get(id);
155 _logger.debug("get: " + transactionDataType);
156 return transactionDataType;
157
158 }
159
160 /***
161 * Inserts a transaction for the current user <br>
162 * Method: post <br>
163 * Call: transaction
164 * <p>
165 * Example: <br>
166 * https://username:password@www.clearcheckbook.com/api/transaction/
167 * <p>
168 * Parameters: <br>
169 * Parameter Required Description <br>
170 * date Required The date for the transaction (Formatted as yyyy-mm-dd) <br>
171 * amount Required Float value formatted as (xxxx.xx) <br>
172 * transaction_type Required Whether the transaction is a deposit or
173 * withdrawal (0= Withdrawal, 1= Deposit, 3= Transfer) <br>
174 * account_id Required* The id of the account for this transaction (0 if no
175 * account). * Not required if transaction_type=3 <br>
176 * category_id Required The id of the category for this transaction (0 if no
177 * category) <br>
178 * description Required Text for the description of this transaction <br>
179 * jive Optional If the transaction being added should be marked as jived.
180 * (0= un-jived, 1= jived) <br>
181 * from_account_id Optional If this transaction is a transfer, this is the
182 * id of the account you're transferring from. <br>
183 * to_account_id Optional If this transaction is a transfer, this is the id
184 * of the account you're transferring to. <br>
185 * check_num Optional If the user has a premium membership and has the
186 * check_num field enabled, the system will accept a check number <br>
187 * memo Optional If the user has a premium membership and has the memo field
188 * enabled, the system will accept a memo <br>
189 * payee Optional If the user has a premium membership and has the payee
190 * field enabled, the system will accept a payee
191 * <p>
192 * Returned Values: <br>
193 * Value Description <br>
194 * Multiple Responses* Returns the id of the newly created transaction, true
195 * (if the transaction is a transfer) or false/null on fail.
196 *
197 * @Override {@link AbstractCall#insert(AbstractDataType)}
198 * @throws IOException
199 * @return transaction
200 */
201 public String insert(TransactionDataType input)
202 throws ClearcheckbookException {
203 return super.insert(input);
204 }
205
206 /***
207 * Edit a specific transaction for the current user. <br>
208 * Method: put <br>
209 * Call: transaction
210 * <p>
211 * Example: <br>
212 * https://username:password@www.clearcheckbook.com/api/transaction/
213 * <p>
214 * Parameters: <br>
215 * Parameter Required Description <br>
216 * id Required The id of the transaction being edited <br>
217 * date Required The date for the transaction (Formatted as yyyy-mm-dd) <br>
218 * amount Required Float value formatted as (xxxx.xx) <br>
219 * transaction_type Required Whether the transaction is a deposit or
220 * withdrawal (0= Withdrawal, 1= Deposit) <br>
221 * account_id Required The id of the account for this transaction (0 if no
222 * account) <br>
223 * category_id Required The id of the category for this transaction (0 if no
224 * category) <br>
225 * description Required Text for the description of this transaction <br>
226 * jive Optional Optional value to set whether or not the transaction is
227 * jived (0= Un-jived, 1= Jived). If you just want to jive a transaction,
228 * use editJive() instead. <br>
229 * check_num Optional If the user has a premium membership and has the
230 * check_num field enabled, the system will accept a check number <br>
231 * memo Optional If the user has a premium membership and has the memo field
232 * enabled, the system will accept a memo <br>
233 * payee Optional If the user has a premium membership and has the payee
234 * field enabled, the system will accept a payee
235 * <p>
236 * Returned Values: <br>
237 * Value Description <br>
238 * true / false Returns true on a successful edit or false/null on fail.
239 *
240 * @Override {@link AbstractCall#edit(AbstractDataType)}
241 * @return transaction
242 * @throws ClearcheckbookException
243 */
244 public boolean edit(TransactionDataType input)
245 throws ClearcheckbookException {
246 return super.edit(input);
247 }
248
249 /***
250 * Delete a specific transaction for the current user. <br>
251 * Method: delete <br>
252 * Call: transaction
253 * <p>
254 * Example: <br>
255 * https://username:password@www.clearcheckbook.com/api/transaction/
256 * <p>
257 * Parameters: <br>
258 * Parameter Required Description <br>
259 * id Required The id of the transaction to delete
260 * <p>
261 * Returned Values: <br>
262 * Value Description <br>
263 * true / false Returns true on a successful delete or false/null on fail
264 *
265 * @Override {@link AbstractCall#insert(AbstractDataType)}
266 * @throws IOException
267 * @return transaction
268 * @throws ClearcheckbookException
269 */
270 @Override
271 public boolean delete(ParsedNameValuePair input)
272 throws ClearcheckbookException {
273 return super.delete(input);
274 }
275
276 /***
277 * Jive or Un-jive a specific transaction for the current user. <br>
278 * Method: put <br>
279 * Call: jive
280 * <p>
281 * Example: <br>
282 * https://username:password@www.clearcheckbook.com/api/jive/
283 * <p>
284 * Parameters: <br>
285 * Parameter Required Description <br>
286 * id Required The id of the transaction being updated <br>
287 * status Required The status of the jive (0= Un-jived, 1= Jived)
288 * <p>
289 * Returned Values: <br>
290 * Value Description <br>
291 * true / false Returns true on a successful jive update or false/null on
292 * fail
293 *
294 * @param input
295 * @throws ClearcheckbookException
296 */
297 public boolean editJive(ParsedNameValuePair id, boolean jiveStatus)
298 throws ClearcheckbookException {
299 String status = (jiveStatus) ? "1" : "0";
300 ParsedNameValuePair statusParameter = new ParsedNameValuePair("status",
301 status);
302 try {
303 String exitStatus = this.getConnection().putPage("jive",
304 new ParsedNameValuePair[] { id, statusParameter });
305 return Boolean.valueOf(exitStatus);
306 } catch (IOException e) {
307 throw new ClearcheckbookException(
308 "failed to edit jive for transaction id: " + id.getValue(),
309 e);
310 }
311 }
312 }