Commit graph

181 commits

Author SHA1 Message Date
Bradley M. Kuhn
be2409792f Improve monthly lapse detection.
Previously, we were over-requesting renewals from monthly donors.  This
code corrects the problem.
2017-02-09 18:57:49 -08:00
Brett Smith
8f102e54c4 send-renewal-notices: Fix lapse rate math.
The lapse rate by Supporter type was being miscalculated.
2017-01-26 13:59:29 -05:00
Bradley M. Kuhn
02e80b8d08 Correct typo in variable name. 2017-01-18 14:34:15 +11:00
Bradley M. Kuhn
1900575269 Add renewal percentage per group. 2017-01-12 10:33:50 -08:00
Bradley M. Kuhn
1a6fdd8f09 Merge changes from upstream 'master' branch. 2017-01-12 10:32:32 -08:00
Bradley M. Kuhn
35b47468b4 send-mass-email script: wrote this a while ago.
This script has never been committed before.  I wrote it a while ago
though.
2017-01-12 10:31:50 -08:00
Brett Smith
9655c13220 Read and write UTF-8 in address scripts. 2017-01-11 12:27:25 -05:00
Bradley M. Kuhn
22e02fb40e Final corrections to handle multiple shirt request
With this adjustments, the script seems to now handle multiple
shirt-requests properly.
2017-01-10 11:36:50 -08:00
Martin Michlmayr
18ccb9d152 Set UTF8 mode
Set UTF8 mode so the information is printed correctly.
2017-01-03 12:11:47 -05:00
Brett Smith
14fbb42dd6 find-supporter: Remove excessive whitespace.
Inspired by a patch from Martin, but unfortunately it doesn't apply cleanly
anymore.
2017-01-03 12:11:30 -05:00
Bradley M. Kuhn
3283cff2e1 Correct variable name typo. 2017-01-02 14:53:08 -08:00
Bradley M. Kuhn
211bd09c65 First hack of script to add people to announce 2017-01-02 11:59:23 -08:00
Bradley M. Kuhn
0e57d54747 Add missing newline. 2017-01-02 11:58:34 -08:00
Bradley M. Kuhn
595f96d869 Better support for multiple t-shirts to same donor
This change better handles the situation where t-shirt-0 and t-shirt-1
are requested and owed to the same donor.  We've added even more t-shirt
request types at this point meaning many shirts can go to one donor, and
this change should better handle that situation.
2017-01-02 11:57:42 -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
7d39d40e61 Find lapsed large donors separately and report.
This generates a report for particular large donors who are lapsed.
2016-12-31 17:51:21 -08:00
Bradley M. Kuhn
fda04200df Support paper mailing for renewal notices.
This allows adding a .tex file and sending a paper renewal notice.

This worked for me to send the paper renewal notices to Conservancy
Supporters in late 2016.
2016-12-31 11:31:51 -08:00
Bradley M. Kuhn
5cf6dfb805 Send postal shipment via an email address? Really?
This would have only worked if we had solved generalized energy-matter
conversion.... and I haven't invented a Heisenberg compensator.
2016-12-17 11:35:56 -08:00
Bradley M. Kuhn
07dc1bf515 add-postal address script. 2016-12-09 13:48:24 -08:00
Bradley M. Kuhn
460352b7c4 Ignor blank lines and comments in the inventory. 2016-12-09 13:47:02 -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
3c81b423b9 Support special contributions. 2016-12-07 17:10:11 -08:00
Bradley M. Kuhn
0333ea45fa Fix typo in variable name. 2016-12-05 12:38:35 -08:00
Bradley M. Kuhn
d4e8b71bee First draft of fulfill-request script.
It seems to work, just used it.
2016-12-02 14:51:10 -08:00
Bradley M. Kuhn
98026dd16d These two places should be $laspesSoon
Only debugging output is impacted here, but it really should be based on
the variable we're actually using in the next statement.
2016-12-02 14:39:36 -08:00
Bradley M. Kuhn
65070094ed Do not attempt to intuit renewal response here.
This code worked reasonable well when there was only one type of renewal
notice in play for a long period of time, but the point here is that we
can have many of them and this script should handle sending out the
different ones at different types.

We probably need an entirely separate script to intuit response.
2016-12-02 14:37:38 -08:00
Bradley M. Kuhn
13198815f3 Print the display_name, when public_ack requested 2016-12-02 13:53:06 -08:00
Bradley M. Kuhn
fb9c43d119 Count supporters rather than use all ids returned.
We actually can't rely on a call to $sp->findDonor({}) to give us *just*
Supporters, as eventually, this may be a donor database too.  So, count
them.

Really, $sp->findDonor() should be able to take { isSupporter => 1 }
instead.
2016-12-02 13:07:59 -08:00
Bradley M. Kuhn
522df6bbfa add display_name to outgoing email.
In an effort to improve the formatting on outgoing emails from the
renewal script, add the display_name to the To: field.

I'm not completely happy with what the MIME encoding is doing here.
Specifically, it chops the line on the < of <email@example.org> so you
get this:

"A very long name that leads to wrapping of the MIME encoded line" <
 email@example.org>

As I read https://www.ietf.org/rfc/rfc2822.txt, it violates this SHOULD:

  Note: Though structured field bodies are defined in such a way that
    folding can take place between many of the lexical tokens (and even
    within some of the lexical tokens), folding SHOULD be limited to
    placing the CRLF at higher-level syntactic breaks.  For instance, if
    a field body is defined as comma-separated values, it is recommended
    that folding occur after the comma separating the structured items
    in preference to other places where the field could be folded, even
    if it is allowed elsewhere.

Brett and I decided to leave it for now and go with it.
2016-12-02 12:56:53 -08:00
Bradley M. Kuhn
0b05ac3c5c CLI parameter for "how far out" to send renewal
This CLI parameter allows flexibility on how far in advance to send
renewal notices.
2016-12-02 12:55:52 -08:00
Bradley M. Kuhn
8bf9a01550 Also count lapsed/active against monthly/annual.
Add some details about the amount who are monthly/annual to the counts.
2016-11-05 10:34:41 -07:00
Bradley M. Kuhn
57275ec6bf don't duplicate request. 2016-10-20 11:18:59 -07:00
Bradley M. Kuhn
8fe8af4336 Update email text.
This should really not be hard coded here.
2016-10-20 11:18:32 -07:00
Bradley M. Kuhn
fece5bdb4a Bug: this should not use t-shirt-0 every time!
I am not sure why this had t-shirt-0 repeated every time, but it can't
possibly be right.
2016-10-20 11:17:51 -07:00
Bradley M. Kuhn
dc5f959259 Additional staff report for renewal notice report. 2016-10-20 11:16:51 -07:00
Bradley M. Kuhn
413f63ea43 Renewal count by month. 2016-09-07 16:05:06 -07:00
Bradley M. Kuhn
7f2cdba149 reverse sort for already lapsed; add multi-year
Multiyear totals are now included in report.

already lapsed list is reverse sorted by date instead.
2016-07-20 16:09:32 -07:00
Bradley M. Kuhn
4231731b24 Include additional font package. 2016-05-27 06:08:36 -07:00
Bradley M. Kuhn
3b14ca9abe Fix address formatting here too. 2016-05-27 06:02:17 -07:00
Bradley M. Kuhn
eb34901017 LaTeX does support these characters. 2016-05-26 21:17:09 -07:00
Bradley M. Kuhn
04ae300292 Use preferred postal address if available.
Test first to see if a preferred postal address is available before
attempting to just accept one.
2016-05-26 21:04:43 -07:00
Bradley M. Kuhn
e98b8b9d42 Print the overall needed. 2016-05-26 21:03:54 -07:00
Bradley M. Kuhn
6fd18b6643 Merge branch 'master' from upstream. 2016-05-26 20:41:42 -07:00
Bradley M. Kuhn
7b5f6f1b8a Correct variable names 2016-05-26 20:40:24 -07:00
Bradley M. Kuhn
4e52c8fe1c Fix test command. 2016-05-26 20:39:58 -07:00
Bradley M. Kuhn
6147f2b869 Fix bug: $type from loop should be used!
We weren't using the type variable from the loop!
2016-05-26 20:39:40 -07:00
Bradley M. Kuhn
6a6ec1fca2 Properly sort so most in need get shirts first.
The idea behind this sort is to give monthlies top priority based on
their id number (i.e., when they hit $60, just get that shirt out to
them), and for annuals, make sure we prioritize based on how long it has
been since their last donation.
2016-05-26 20:38:48 -07:00
Bradley M. Kuhn
f3a6debdf7 Sort by last gave date. 2016-05-26 13:29:21 -07:00
Bradley M. Kuhn
ced1501eab On second thought, nine months. 2016-05-26 13:29:00 -07:00
Bradley M. Kuhn
93d048a3fd Find only entries that gave a year later. 2016-05-26 13:18:28 -07:00
Bradley M. Kuhn
d72431cdce Include type in output; range check on one request
The request date depends on the import date, not the date of the
donation, so we have to range-check here to see if it's nearby the date
of the last donation.
2016-05-26 13:14:05 -07:00
Bradley M. Kuhn
010543c685 Adapt script to figure out problems with t-shirts 2016-05-26 12:53:20 -07:00
Bradley M. Kuhn
23487b3907 First draft of a script to find already renewed. 2016-05-26 12:34:52 -07:00
Martin Michlmayr
c94f0001b9 Indicate if there's no existing preferred email address
Show "(none)" when there's no existing preferred email address instead
of an unitialized variable warning.
2016-05-05 17:27:48 -07:00
Bradley M. Kuhn
b344e4febf Clarify output. 2016-03-11 12:29:58 -08:00
Bradley M. Kuhn
ae7b876647 Implement {set,get}PreferredPostalAddress 2016-03-11 12:29:20 -08:00
Bradley M. Kuhn
fd6b55e7be Print public ack status on find-supporter script. 2016-03-11 12:11:58 -08:00
Bradley M. Kuhn
32bf9f399c Simple add-request script to add request from CLI. 2016-03-11 12:11:44 -08:00
Bradley M. Kuhn
3a6edee83f Mark preferred addresses & better formatting.
Note that I haven't implemented getPreferredPostalAddress() yet so it's
commented out here for now.
2016-03-11 11:23:30 -08:00
Bradley M. Kuhn
b1abebb32b Better formatting of address output. 2016-03-11 11:10:39 -08:00
Bradley M. Kuhn
6615abe535 Print request data if it exists. 2016-03-11 11:05:05 -08:00
Bradley M. Kuhn
9a82f72aa9 Spacing changes. 2016-03-11 11:04:46 -08:00
Bradley M. Kuhn
b8add1ded5 Fix typo. 2016-03-11 11:04:22 -08:00
Bradley M. Kuhn
7398b2f3f7 Add search for id & output of postal/email address 2016-03-11 09:55:11 -08:00
Bradley M. Kuhn
279c3e33f9 Add lapsed count to output for status report. 2016-03-07 10:36:28 -08:00
Bradley M. Kuhn
6137907548 Rework to create status report for staff.
This script now also sends an email to the staff (via the $FROM_ADDRESS)
about the status of Supporter renewals.
2016-03-07 10:29:18 -08:00
Bradley M. Kuhn
a0c5936e1c Send renewal notices one week before expiration. 2016-03-07 08:25:46 -08:00
Bradley M. Kuhn
76f4e3f4ef Only tell them it'll come later if post. 2016-02-29 17:58:37 -08:00
Bradley M. Kuhn
475f8a8a1d Allow no email address when adding supporter. 2016-02-29 17:58:23 -08:00
Bradley M. Kuhn
f8d145c3a7 Create find-supporter script. 2016-01-24 16:18:29 -08:00
Bradley M. Kuhn
ae0b7000ae Add verbose argument. 2016-01-22 17:12:22 -08:00
Bradley M. Kuhn
376075e549 Skip lapsed supporters. 2016-01-22 17:12:05 -08:00
Bradley M. Kuhn
922e8f279e Add additional parameters. 2016-01-22 17:10:58 -08:00
Bradley M. Kuhn
6986796a7d Correct variable name. 2016-01-22 17:10:45 -08:00
Bradley M. Kuhn
8f5c3b8d1f This error checking condition is now meaningless. 2016-01-22 17:10:30 -08:00
Bradley M. Kuhn
167d8c9520 checklist is the proper has value throughout. 2016-01-22 17:10:17 -08:00
Bradley M. Kuhn
1039f6f6d2 Allow for undef. 2016-01-22 17:09:41 -08:00
Bradley M. Kuhn
cf8cc36045 Giving limit for donor to receive t-shirt.
Analysis of IRS rules indicate that sometimes, a thank-you gift can't be
sent unless the percentage the gift is of the donation meets a certain
threshold.

This change allows the caller of this script to implement that sort of
threshold.
2016-01-08 13:10:20 -08:00
Bradley M. Kuhn
97e772b89c Parallel hashes made no sense here.
Since the main index is size, no reason not to have a single hash that
is so-keyed, and have subhash with two keys for checklist and labels.
2016-01-07 12:42:51 -08:00
Bradley M. Kuhn
dd8d8cba37 Reverse shortened postal address printed.
Packers find that reversing the postal address makes people easier to
find when matching up labels.
2016-01-07 12:38:53 -08:00
Bradley M. Kuhn
a4fdb4ea99 Correct sorting to print by size.
Packers indicate that packing by size rather than any other method is
better.
2016-01-07 12:33:52 -08:00
Bradley M. Kuhn
ed6b1decb0 This should really be input to the script.
But changing it here for the moment.
2016-01-06 22:22:44 -08:00
Bradley M. Kuhn
dbea255aee Properly handle counting.
Fix an off-by-one error on the size counts and otherwise handle counting
well.
2016-01-06 21:46:58 -08:00
Bradley M. Kuhn
e35ee8b953 Script to calculate our renewal rate. 2016-01-03 14:14:04 -08:00
Bradley M. Kuhn
da75edccf2 Handle other donor info. 2016-01-03 13:17:00 -08:00
Bradley M. Kuhn
6d7bae7e02 Correct printout of email addresses for renewal. 2016-01-03 12:26:49 -08:00
Bradley M. Kuhn
d151b992c4 First past script to print t-shirt labels. 2016-01-02 11:21:17 -08:00
Bradley M. Kuhn
f985b1c1ef Modifications to the email notification. 2016-01-02 10:47:29 -08:00
Bradley M. Kuhn
a57ed11bd5 Additional verbosity that says what we did. 2016-01-02 10:47:22 -08:00
Bradley M. Kuhn
b85575c625 Don't warn, just print to STDERR with verbosity. 2016-01-02 10:47:09 -08:00
Bradley M. Kuhn
964755c3e3 This takes a hash as argument. 2016-01-02 10:36:35 -08:00
Bradley M. Kuhn
215ac05484 Fixed spelling on hash key. 2016-01-02 10:35:05 -08:00
Bradley M. Kuhn
2d52ce2cd1 Need to use Supporters! 2016-01-02 10:33:57 -08:00
Bradley M. Kuhn
09f25e9fc9 send-t-shirt.plx: First hack at it. 2016-01-02 10:33:35 -08:00
Bradley M. Kuhn
dcbc823f0b need $emailTo variable. 2015-12-31 02:24:32 -08:00
Bradley M. Kuhn
5e226a3483 Rename variable. 2015-12-31 02:24:26 -08:00
Bradley M. Kuhn
db43a3ed71 First draft of renewal-notices script. 2015-12-31 02:16:30 -08:00
Bradley M. Kuhn
4bd5ab4fd1 Wrote add-email-address.plx script. 2015-12-31 00:38:59 -08:00
Bradley M. Kuhn
8b233299c8 Properly use these strings. 2015-12-31 00:00:11 -08:00