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;