use Modern::Perl; # updates request_storage.part_number value from csv file use lib '/home/raj/perl-lib'; use Local::DB; use Data::Printer alias => 'ddp'; use Data::Dumper; use SQL::Abstract::More; use Text::CSV; use IO::File; my $dbix = Local::DB->dbix('hilis4'); my $src_file = './part_numbers_update.csv'; my $io = new IO::File; open( $io, '<', $src_file ) || die $!; my $opt = { binary => 1 }; # recommended to set true my $csv = Text::CSV->new($opt); # ddp $csv; exit; my $head = $csv->getline($io); $csv->column_names( $head ); my $i = 0; my $tbl = 'hilis4.request_storage'; my $sqla = SQL::Abstract::More->new; while ( my $ref = $csv->getline_hr($io) ) { # ddp $ref; next; my $original_hmds_num = $ref->{original_HMDS_No}; # print $original_hmds_num, " "; my $vial_id = $ref->{possible_vial_id}; # ddp $vial_id; next; my $part_number = $ref->{currrent_part_number}; # NOTE 3 r's !!!!! ddp $part_number; next; my $source = $ref->{original_source}; $original_hmds_num =~ s/^H//; # print $original_hmds_num, "\n"; next; my @join = ( 'request_storage|rs' => 'rs.request_id=r.id' => 'requests|r' ); my ($sql, @bind) = $sqla->select( -columns => [ qw/r.id r.request_number r.year rs.part_number rs.source/ ], -from => [ -join => @join ], -where => { vialId => $vial_id }, ); # ddp $sql; ddp @bind; my $res = $dbix->query($sql, @bind)->hash; # ddp $res; next; my $lab_number = sprintf '%s/%.02d', $res->{request_number}, $res->{year} - 2000; # check csv data matches db data: do { warn Dumper [$lab_number, $original_hmds_num]; next; } unless ( $lab_number eq $original_hmds_num ) && ( $part_number eq $res->{part_number} ) && ( $source eq $res->{source} ); # say "update $tbl set part_number = " . $ref->{correct_part_ID} . " where vialId = $vial_id"; next; # my $action = sprintf 'updated storage vialID %s part number [%s -> %s]', # $vial_id, $part_number, $ref->{correct_part_ID}; # say "insert into $tbl values($res->{id}, 14, $action)"; next; $dbix->update($tbl, { part_number => $ref->{correct_part_ID} }, { vialId => $vial_id } ); { my $action = sprintf 'updated storage vialID %s part number [%s -> %s]', $vial_id, $part_number, $ref->{correct_part_ID}; my %h = ( request_id => $res->{id}, user_id => 14, action => $action, ); $dbix->insert('request_lab_test_history', \%h); } $i++; } warn "updated $i records";