package FS::cust_msg;
+use base qw( FS::cust_main_Mixin FS::Record );
use strict;
-use base qw( FS::cust_main_Mixin FS::Record );
-use FS::Record qw( qsearch qsearchs );
+use FS::Record qw( dbh );
use MIME::Parser;
-use vars qw( @statuses );
=head1 NAME
=head1 DESCRIPTION
-An FS::cust_msg object represents an email message generated by Freeside
-and sent to a customer (see L<FS::msg_template>). FS::cust_msg inherits
-from FS::Record. The following fields are currently supported:
+An FS::cust_msg object represents an email message generated by Freeside.
+FS::cust_msg inherits from FS::Record. The following fields are currently
+supported:
=over 4
=item body - message body (as a complete MIME document)
+=item preview - HTML fragment to show as a preview of the message
+
=item error - Email::Sender error message (or null for success)
+=item status - "prepared", "sent", or "failed"
+
=back
=head1 METHODS
sub nohistory_fields { ('header', 'body'); }
# history is kind of pointless on this table
-@statuses = qw( prepared sent failed );
+our @statuses = qw( prepared sent failed );
=item insert
|| $self->ut_textn('env_to')
|| $self->ut_anything('header')
|| $self->ut_anything('body')
+ || $self->ut_anything('preview')
|| $self->ut_enum('status', \@statuses)
|| $self->ut_textn('error')
|| $self->ut_enum('msgtype', [ '',
'invoice',
'receipt',
'admin',
+ 'report',
])
;
return $error if $error;
sub send {
my $self = shift;
- my $msg_template = $self->msg_template
- or return 'message was created without a template object';
+ # it's still allowed to have cust_msgs without message templates, but only
+ # for email.
+ my $msg_template = $self->msg_template || 'FS::msg_template::email';
$msg_template->send_prepared($self);
}
=back
+=head1 SUBROUTINES
+
+=over 4
+
+=item process_send CUSTMSGNUM
+
+Given a C<cust_msg.custmsgnum> value, sends the message. It must already
+have been prepared (via L<FS::msg_template/prepare>).
+
+=cut
+
+sub process_send {
+ my $custmsgnum = shift;
+ my $cust_msg = FS::cust_msg->by_key($custmsgnum)
+ or die "cust_msg #$custmsgnum not found";
+ my $error = $cust_msg->send;
+ die $error if $error;
+}
+
+sub _upgrade_schema {
+ my ($class, %opts) = @_;
+
+ my $sql = '
+ DELETE FROM cust_msg WHERE NOT EXISTS
+ ( SELECT 1 FROM cust_main WHERE cust_main.custnum = cust_msg.custnum )
+ ';
+
+ my $sth = dbh->prepare($sql) or die dbh->errstr;
+ $sth->execute or die $sth->errstr;
+ '';
+
+}
+
+=back
+
=head1 SEE ALSO
L<FS::msg_template>, L<FS::cust_main>, L<FS::Record>.