Commit graph

218 commits

Author SHA1 Message Date
Bradley M. Kuhn
07aea9ba74 Remove spurious debugging print to STDERR 2024-11-03 15:49:30 -08:00
Bradley M. Kuhn
8f54ebb54c Big Postal Address Change — First steps toward new fields.
These are various changes to support the changes to the postal
address table to include split-out fields for parts of the address
instead of just the formatted_address field.  The changes herein are
not comprehensive to solve all the problems and issues associated
with this update, but they are enough changes to get most daily
operations with the database more-or-less working.
2022-12-16 11:36:15 -08:00
Bradley M. Kuhn
aab0b132b2 Return additional values on getPostalAddress 2022-12-08 08:12:43 -08:00
Bradley M. Kuhn
cc1aee90d8 No Changes file is included in this library; remove from MANIFEST 2022-06-21 13:57:29 -07:00
Bradley M. Kuhn
aece96946d Allow search by Supporter only. 2022-06-21 10:08:25 -07:00
Bradley M. Kuhn
36c1d11d1f Include Carp 2022-06-21 10:08:00 -07:00
Bradley M. Kuhn
ed4a2c1aea Correct function call; this is not a variable! 2022-06-21 10:07:45 -07:00
Bradley M. Kuhn
3d83a8e546 Add id as part of return for postalAddress addition. 2022-06-21 09:58:57 -07:00
Bradley M. Kuhn
6d143082de Add method: getBestPostalAddress 2022-06-21 09:55:37 -07:00
Bradley M. Kuhn
391fb0d3f2 support is_supporter setting, add findSupporter method. 2021-04-18 15:29:48 -07:00
Bradley M. Kuhn
fdf58bb729 fulfillFailure: fix reason message to include more data; add who
'who' is now a possible parameter, but default it the old way so it's
not mandatory, and improve the reason message on failures.
2021-02-20 13:02:49 -08:00
Bradley M. Kuhn
16ce9f4bf1 addPostalAddress: additional argument to set date_encountered 2021-02-11 11:58:55 -08:00
Bradley M. Kuhn
36592c9747 Correct typo in error message. 2020-12-22 16:31:52 -08:00
Bradley M. Kuhn
0c477cf4da Convert to work with Beancount; constructor takes a filehandle now
The output format for donations changed slightly when we switched to
Beancount at Conservancy from Ledger CLI.  This change now assumes a
specific format of the output for the donations, and takes a
filehandle in the constructor to receive the data.

As such, this effectively makes it slightly less dependent on any
specific donation database, since as long as you can get it into the
format the regex herein expects onto a filehandle, it doesn't matter
what system you use underneath.
2020-12-22 16:31:37 -08:00
Bradley M. Kuhn
51d0db3fab Add tests for Preferred email addresses. 2019-12-10 09:35:16 -08:00
Bradley M. Kuhn
f50c4d6053 paperMailOk: correct contact-setting typo. 2019-12-10 09:35:16 -08:00
Bradley M. Kuhn
2816c8ab2e emailOk: attempts to make more versatile.
Most of this commented out because I was attempting to make it more versatile
and it failed.
2018-01-24 11:45:03 -08:00
Bradley M. Kuhn
a82ebfb0a9 _lookupDeliveryError: begun
Verify beginnings of implementation
2017-12-26 12:32:15 -08:00
Bradley M. Kuhn
9ffd4d4e88 Tests: addEmailError: initial functionality tests
These tests lay out the basic functionality for adding an email error.

BTW, I decided we need an entirely different but mirrored setup for
postal errors, since the database tables for email and postal addresses
are hard-coded.
2017-11-26 15:04:21 -08:00
Bradley M. Kuhn
bce2679573 Tests: addSupporter(): fix two spelling typos. 2017-11-26 15:00:51 -08:00
Bradley M. Kuhn
99650b23ee releaseRequestHold(): Implement & update tests.
Some of these tests were written a while ago, and the function never
implemented.  It is now implemented and test are updated.
2017-11-26 14:32:17 -08:00
Bradley M. Kuhn
a3ea7a58df Tests: clearly should be ok(), not is().
This was a Boolean test, so it clearly should be ok(), not an is().
2017-11-26 14:30:44 -08:00
Bradley M. Kuhn
faf1a239a4 holdRequest(): requestId is not a parameter. 2017-11-22 13:32:44 -08:00
Bradley M. Kuhn
ebcabc5231 holdRequest(): Document function API. 2017-11-22 13:32:30 -08:00
Bradley M. Kuhn
722105b1ff contact-setting is not plural!
This was working incorrectly because contact-setting is not plural.
It's one setting.
2017-01-18 14:33:40 +11:00
Bradley M. Kuhn
ffd609b0cf Typo fix. 2017-01-16 06:05:51 +11:00
Bradley M. Kuhn
92717294f9 Correct tests based on recent changes.
These tests are not passing I believe from recent changes.
2017-01-16 05:50:34 +11:00
Bradley M. Kuhn
258d9fad0f Never fulfill requests that are on hold.
Requests on hold can never be fulfilled.

If you want to fulfill a request that is currently on hold, the right
semantic is that you should remove the hold, then fulfill the request.

Note that this test now passes and it didn't before:
  fulfillRequest: .... but undef is returned when attempting to fulfill a held request.
2017-01-14 20:37:56 -08:00
Bradley M. Kuhn
836a70c0ab holdRequest():testing hold on already held request
It's clear from the Supporters.pm code that when an hold is attempted on
an already held request, it simply returns the id of the existing hold.

I don't actually remember what behavior I really wanted here.  There are
certainly possibility for semantic confusion in the API with the current
functionality, since the API caller must actually check to verify if the
hold they got is a new one or just an existing one.

Perhaps this should be rethought.  I left a comment in the test code for
that reason.
2017-01-14 19:45:19 -08:00
Bradley M. Kuhn
68133e8cee holdRequest(): holdReleaseDate is required.
holdReleaseDate is now a required argument for holdRequest().
2017-01-14 14:43:01 -08:00
Bradley M. Kuhn
2877cd0a2a Tests for holdRequest() now match actual operation
The tests for holdRequest() are out of date.  This corrects a few of
them.
2017-01-14 14:33:00 -08:00
Bradley M. Kuhn
dce63bd5a8 s/why/heldBecause
heldBecause became the standard on holdRequest rather than why.

I don't remember "why". :)
2017-01-14 14:22:40 -08:00
Bradley M. Kuhn
33e2a42179 Should be possible to release and act in same day. 2017-01-10 11:22:24 -08:00
Bradley M. Kuhn
1a6cb14254 Support email settings for donors.
This change, which is not properly documented nor tests present, adds
support for making sure those who don't want emails from us do not
receive them.

I believe I've caught most of the places we want this change supported.
2017-01-02 11:54:25 -08:00
Bradley M. Kuhn
5458c0fbc4 holdRequest: 2 minor bug fixes on parameter names.
I should be more standardized on these parameters and also write tests
to find this stuff.
2016-12-09 13:47:18 -08:00
Bradley M. Kuhn
26c7e938ff fulfillFailure: turn fulfill into hold.
if we are unable to fulfill a request, this method turns it into an
indefinite hold on the request.

This design model for handling failure in fulfillment may not be the
best one, but it seemed to roughly fit the behavior and data model we're
looking for.

A little information is lost, but is at least saved in the 'why' field
of the request_hold table.
2016-12-09 13:46:51 -08:00
Bradley M. Kuhn
89bd74a50a Implement ability to put requests on hold.
Requests can now be placed "on hold", and getRequest() can ignore held
requests.

This required addition of a table, and another API call holdRequest().

Tests were not written here, which was a mistake.  Unit tests and docs
are needed.  A FIXME was added, at least.

Also, minor imporvements to reporting on fulfilled requests.
2016-12-08 15:10:16 -08:00
Bradley M. Kuhn
4737e02745 A quick hack to fix a problem.
I had this in my checkout and was using it, noted with a FIXME.
2016-12-07 17:08:59 -08:00
Bradley M. Kuhn
bf00eeca74 Don't die on this. 2016-12-07 17:07:50 -08:00
Bradley M. Kuhn
9733aff0f3 A few changes that I had yet to commit. 2016-12-07 17:07:43 -08:00
Bradley M. Kuhn
ae7b876647 Implement {set,get}PreferredPostalAddress 2016-03-11 12:29:20 -08:00
Bradley M. Kuhn
1577a5613c getRequestType with no arguments returns full list
I debated whether to create a getRequestTypes() instead, but this seemed
reasonable.  I am too far out of Perl5 programming culture to know if
this sort of interface is recommended practice.
2016-03-11 10:58:05 -08:00
Bradley M. Kuhn
ef21af7afd holdRequest: revise tests to shake out the API.
First of all, I originally thought about releaseDate all wrong.  We want
to store the date that the hold was released, which is the indicator
that the request is no longer on hold and can be fulfilled.

We also need tests that assure a request is not fulfilled while on
hold.  Those are added here.

I shook out a few other changes to the test ordering that are necessary
for the change to testing holdRequest().
2016-01-19 17:49:20 -08:00
Bradley M. Kuhn
18e08833d5 Typo fix. 2016-01-19 17:44:34 -08:00
Bradley M. Kuhn
e2291f777c holdRequest: basic tests that define API.
This is the basic API definition for holdRequest and the changes to
getRequest that will occur because of it.
2016-01-18 21:34:03 -08:00
Bradley M. Kuhn
40eb4b32c9 getRequest: unit test w/ ignoreFulfilledRequests
There was no unit test using ignoreFulfilledRequests.  This adds it.
2016-01-18 21:29:45 -08:00
Bradley M. Kuhn
02dd863c53 getPostalAddresses: implementation
It's straightforward but has no unit tests, and should have some.
2016-01-18 21:20:43 -08:00
Bradley M. Kuhn
82ec41cc33 Verify getRequest works after failed fulfill.
getRequest() should return expected values after failed fulfillRequest()
call
2016-01-18 21:13:21 -08:00
Bradley M. Kuhn
ded2028069 Allow missing entityId in Ledger output.
The ledger data can, in fact, sometimes have a missing entityId for
various reasons.  For now, these donations should just be ignored.
Perhaps in future a warning of some sort should be generated.
2016-01-18 21:10:47 -08:00
Bradley M. Kuhn
e43b6e34ae donorTotalGaveInPeriod: First implementation.
This passes all tests:

ok 224 - donorTotalGaveInPeriod(): dies with undefined donorId
ok 225 - donorTotalGaveInPeriod(): dies with non-numeric donorId
ok 226 - donorTotalGaveInPeriod(): dies with non-existent id
ok 227 - donorTotalGaveInPeriod():  dies with non ISO-8601 string in startDate
ok 228 - donorTotalGaveInPeriod():  dies with non ISO-8601 string in endDate
ok 229 - donorTotalGaveInPeriod(): dies if given an argument that is not recognized
ok 230 - donorTotalGaveInPeriod(): total for a donor with no period named succeeds...
ok 231 - donorTotalGaveInPeriod(): ...and returned value is correct.
ok 232 - donorTotalGaveInPeriod(): check for total with both start and end date succeeds...
ok 233 - donorTotalGaveInPeriod(): ...and returned value is correct.
ok 234 - donorTotalGaveInPeriod(): check for total with just a start date succeeds...
ok 235 - donorTotalGaveInPeriod(): ...and returned value is correct.
ok 236 - donorTotalGaveInPeriod(): check for total with just a end date succeeds...
ok 237 - donorTotalGaveInPeriod(): ...and returned value is correct.
2016-01-07 13:36:21 -08:00