#!/usr/bin/perl use strict ; use warnings ; #use lib '.' ; use Data::Dumper ; use List::Util qw( first ) ; use Safelib::AL3::Parser ; use Safelib::AL3::DB ; my $opts = parse_args() ; my $eview_records = make_eview_records() ; #print Dumper $eview_records ; store_eview_records( $eview_records, $opts->{truncate} ) ; exit ; sub make_eview_records { my $al3_trans_rows = get_al3_trans_by_column( $opts->{col_name}, $opts->{col_val}, ) ; die "no transactions found" unless @{$al3_trans_rows} ; my @eview_records ; foreach my $trans_row ( @{$al3_trans_rows} ) { my $trans_id = $trans_row->{id} ; my $eview = {} ; add_transaction_to_eview( $eview, $trans_row ) ; add_al3_records_to_eview( $eview, $trans_id ) ; add_6cva_records_to_eview( $eview, $trans_id ) ; cleanup_eview( $eview ) ; push( @eview_records, $eview ) ; } return \@eview_records ; } sub add_6cva_records_to_eview { my( $eview, $trans_id ) = @_ ; my $rows = get_al3_records_by_trans_id( '6cva', $trans_id ) ; my $opt_bi_row = first { $_->{coverage_code_personal_automobile} =~ /^OPTBI\s*$/ } @{$rows} ; my ( $limit1, $limit2 ) = @{$opt_bi_row}{qw( limit1 limit2 )} ; if ( defined $limit1 && $limit1 =~ /d/ ) { s/^0+(\d+?)000$/$1/ for $limit1, $limit2 ; $eview->{bi_limits} = "$limit1/$limit2" ; } else { $eview->{bi_limits} = '' ; } my $sdip_row = first { $_->{coverage_code_personal_automobile} =~ /^SDIP\s*$/ } @{$rows} ; $eview->{maximum_sdip} = $sdip_row->{option_code1} || '' ; } sub add_transaction_to_eview { my( $eview, $trans_row ) = @_ ; @{$eview}{ qw( record_date broker_num policy_num ) } = @{$trans_row}{ qw( file_date broker_num policy_num ) } ; } my %al3_to_eview ; BEGIN { %al3_to_eview = ( '2trg' => { trans_type => 'cycle_business_purpose', trans_cat => 'transaction_category', trans_date => 'transaction_date', }, '5bis' => { policy_holder_name => 'insureds_name', }, '5bpi' => { company_num => 'company_code', policy_type => 'line_of_business_code', current_prem => 'current_term_amount', net_prem => 'net_change_amount', policy_eff_date => 'policy_effective_date', policy_exp_date => 'policy_expiration_date', }, ) ; } sub add_al3_records_to_eview { my( $eview, $trans_id ) = @_ ; while( my( $rec_type, $col_map ) = each %al3_to_eview ) { my $rows = get_al3_records_by_trans_id( $rec_type, $trans_id ) ; my $row = $rows->[0] ; @{$eview}{ keys %{$col_map} } = @{$row}{ values %{$col_map} } ; } } sub cleanup_eview { my( $eview ) = @_ ; format_currency( $eview, qw( current_prem net_prem ) ) ; format_date( $eview, qw( trans_date policy_eff_date policy_exp_date ) ) ; format_name( $eview, qw( policy_holder_name ) ) ; @{$eview}{ qw( processed ho_email ho_email_type ho_setup_by ) } = ( 0, '', '', '' ) ; } sub format_currency { my( $eview, @fields ) = @_ ; s/^(\d+)(\d{2})([+-])$/$3$1.$2/ for @{$eview}{@fields} ; } sub format_date { my( $eview, @fields ) = @_ ; s/^(\d{2})(\d{2})(\d{2})/20$1-$2-$3/ for @{$eview}{@fields} ; # this has to happen after we format the dates $eview->{eff_year} = substr( $eview->{policy_eff_date}, 0, 4 ) ; } sub format_name { my( $eview, @fields ) = @_ ; foreach my $field ( @fields ) { my $iname = $eview->{$field} ; my $name_parts = Safelib::AL3::Parser::parse_iname( $iname ) ; # print Dumper $name_parts ; $eview->{$field} = $name_parts->{name} ; } } sub parse_args { use Getopt::Long ; my %opts ; GetOptions( \%opts, 'policy|p=s' => sub { $opts{col_name} = 'policy_num' ; $opts{col_val} = $_[1] }, 'file_date|d=s' => sub { $opts{col_name} = 'file_date' ; $opts{col_val} = $_[1] }, 'truncate|t', ) or usage() ; $opts{col_name} or usage( 'policy or file_date options must be set' ) ; return \%opts ; } sub usage { my( $err_text ) = @_ ; $err_text ||= '' ; die <] [(--file_date | -d) ] [--truncate | -t] This script selects transactions from the AL3 tables and puts rows into the al3_eview table. --policy | -p Select by Safety policy number --file_date | -d Select by date of transactions in YYYY-MM-DD format --truncate | -t Truncate al3_eview table before loading Either date or the policy number must be set. DIE }