+sub GetPreparedLetter {
+ my %params = @_;
+
+ my $module = $params{module} or croak "No module";
+ my $letter_code = $params{letter_code} or croak "No letter_code";
+ my $branchcode = $params{branchcode} || '';
+ my $tables = $params{tables};
+ my $substitute = $params{substitute};
+ my $repeat = $params{repeat};
+
+ my $letter = getletter( $module, $letter_code, $branchcode )
+ or warn( "No $module $letter_code letter"),
+ return;
+
+ my $prepared_letter = GetProcessedLetter(
+ module => $module,
+ letter_code => $letter_code,
+ letter => $letter,
+ branchcode => $branchcode,
+ tables => $tables,
+ substitute => $substitute,
+ repeat => $repeat
+ );
+
+ return $prepared_letter;
+}
+
+=head2 GetProcessedLetter( %params )
+
+ given a letter, with possible pre-processing do standard processing
+ allows one to perform letter template processing beforehand
+
+ %params hash:
+ module => letter module, mandatory
+ letter_code => letter code, mandatory
+ letter => letter, mandatory
+ branchcode => for letter selection, if missing default system letter taken
+ tables => a hashref with table names as keys. Values are either:
+ - a scalar - primary key value
+ - an arrayref - primary key values
+ - a hashref - full record
+ substitute => custom substitution key/value pairs
+ repeat => records to be substituted on consecutive lines:
+ - an arrayref - tries to guess what needs substituting by
+ taking remaining << >> tokensr; not recommended
+ - a hashref token => @tables - replaces <token> << >> << >> </token>
+ subtemplate for each @tables row; table is a hashref as above
+ want_librarian => boolean, if set to true triggers librarian details
+ substitution from the userenv
+ Return value:
+ letter fields hashref (title & content useful)
+
+=cut
+
+sub GetProcessedLetter {
+ my %params = @_;
+
+ my $module = $params{module} or croak "No module";
+ my $letter_code = $params{letter_code} or croak "No letter_code";
+ my $letter = $params{letter} or croak "No letter";
+ my $branchcode = $params{branchcode} || '';
+ my $tables = $params{tables};
+ my $substitute = $params{substitute};
+ my $repeat = $params{repeat};
+
+ $tables || $substitute || $repeat
+ or carp( "ERROR: nothing to substitute - both 'tables' and 'substitute' are empty" ),
+ return;
+ my $want_librarian = $params{want_librarian};
+
+ if ($substitute) {
+ while ( my ($token, $val) = each %$substitute ) {
+ $letter->{title} =~ s/<<$token>>/$val/g;
+ $letter->{content} =~ s/<<$token>>/$val/g;
+ }
+ }