package Pear::LocalLoop::Import::LCCCsv::Postcodes; use Moo; use Geo::UK::Postcode::Regex; extends qw/Pear::LocalLoop::Import::LCCCsv/; has '+csv_required_columns' => ( builder => sub { return [ qw/ postcode ward / ]}, ); sub import_csv { my ($self) = @_; $self->check_headers; while ( my $row = $self->get_csv_line ) { $self->_row_to_result($row); } } sub _row_to_result { my ( $self, $row ) = @_; my $postcode_obj = Geo::UK::Postcode::Regex->parse( $row->{postcode} ); my $ward = $self->schema->resultset('GbWard')->find_or_create(ward => $row->{ward}); my $postcode_r = $self->schema->resultset('GbPostcode')->find({ outcode => $postcode_obj->{outcode}, incode => $postcode_obj->{incode}, }); return unless $postcode_r; return if $postcode_r->ward; $postcode_r->update({ ward_id => $ward->id }); } 1;