## a module providing functions for final sending of a report issue package Ernad::Final; use strict; use warnings; use Carp qw(confess); use Data::Dumper; use File::Basename; use Encode qw(decode encode); use MIME::Entity; use Ernad::Common; use Ernad::Editor; use Ernad::Email; use Ernad::Rss; #use Ernad::Report; binmode(STDOUT,":utf8:"); ## first param - reference to the params hash ## second param - name of the created report sub Show { my $wepas=shift or confess 'I need the parameter input.'; my $rs=shift or confess 'I have no repcode.'; my $e=$rs->{'e'} or confess 'I do not see your erimp.'; my $presenter=''; if($$wepas{"Text"}) { $presenter='final_text_screen'; } ## do the HTML first. Recall that hen this is ## invoqued neither Text nor HTML are set else { $presenter='final_html_screen'; } my $rix = $rs->load_rix(); $rix=&Ernad::Editor::update_in_doc($rix,$rs,'do_add'); my $html_doc=$e->{'t'}->transform($rix,$presenter); my $string=$html_doc->toString; return $string; } ## creates MIME post message and returns it sub create_mail { my $wepas=shift or die 'no parameter input'; my $rs=shift or die 'no repcode'; my $e=$rs->{'e'} or die 'no erimp'; my $email_dir = $rs->path()."/mail"; if(not -d $email_dir) { mkdir $email_dir; } ## check the can save the mail my $mailvault_dir=$e->{'dir'}->{'mailvault'} // confess "I don't have a mailvault."; my $issuedate = $rs->timestamp(); my $save_email=$e->{'dir'}->{'mailvault'}.'/'.$rs->{'repcode'}.'/'.$issuedate; ## check if we have already issued the mail my $save_mail_dir = dirname($save_email); if(not -d $save_mail_dir) { mkdir $save_mail_dir; } ## check if we have already issued the mail my $glob_mail=$email_dir."/$issuedate*.mail"; my @mail_files = glob($glob_mail); if ( scalar( @mail_files ) > 0 ) { return 0; } ## let's check if we have a from address my $rerc=$e->{'report'}->{$rs->repcode()}; my $editor_email=$rerc->{'editor_email'} or confess "I have no editor email."; my $rix = $rs->load_rix(); $rix=&Ernad::Editor::update_in_doc($rix,$rs,'do_add'); my $email_file=Ernad::Email::prepare_email($rix,'issue',$save_email); &Ernad::Email::send_email($email_file); return 0; } ## processes reference to params hash ## returns 0 if mode wasnt changed, -1 if we go back( to report selecting ) ## and 1 if we go forward( to sorting ) sub Process { my $wepas=shift or die 'no parameter input'; my $rs=shift or die 'no report state'; my $e=$rs->{'e'} or die 'no erimp'; my $repcode=$rs->{'repcode'} or confess "no report"; my $issuedate=$rs->issuedate() or confess "no issuedate"; ## signal the Petrick-Muñoz bug if(not $e->{'s'}->stage_done($repcode,$issuedate,'selected')) { my $out = Dumper $wepas; $out .= "\n$issuedate\n$repcode"; confess "Petrick-Muñoz bug i.e. no selected at final " . $out; } ## accept if called from preview, finish if called from sorting1 if( defined( $wepas->{'Final'}) or defined($wepas->{'Finish'})) { my $rix=$rs->load_rix(); $rix=&Ernad::Editor::update_in_doc($rix,$rs); $rs->save( $e->{'const'}->{'sent_dir'} ); ## since there is no allport issue being released this is ## obsolete but it may come back #if($repcode eq $e->get_allport_repcode()) { # $e->run_bin('release ',$e->{'impna'}); #} $e->run_bin('publish',$rs->file(),$repcode); ## trigger the learn script my $issuetime_learn_span=$e->{'conf'}->{'issuetime_learn_span'} // 0; if(defined($e->{'conf'}->{'issuetime_learn_span'})) { ## we need to find the age my $r=$e->{'report'}->{$repcode}->{'r'}; if(not $r) { ## we need to set up the report object #$r=Ernad::Report->new($repcode); $e->{'report'}->{$repcode}->{'r'}=$r; } my $age=$e->{'report'}->{$repcode}->{'age'}; if(not $age) { #$age=$r->age($repcode); $age=$e->{'p'}->get_age($repcode); $e->{'report'}->{$repcode}->{'age'}=$age; } if(not defined($age)) { $e->echo(__LINE__,'WARNING: I have no defined age here.'); $age=0; } if($e->{'conf'}->{'issuetime_learn_span'} > $age) { #open(L,"> /tmp/final.log"); #print L "I ran learn"; $e->run_bin('learn -l ',$e->{'impna'}." $repcode"); } } else { #print L "I don't run learn"; } #close L; return 1; } if( exists( $$wepas{"Back"} ) ) { $rs->save( $e->{'const'}->{'filtered_dir'}); return -1; } ## nothing happened return 0; } 1;