[Koha-devel] Advice on syncing and DBIC

Magnus Enger magnus at enger.priv.no
Tue Jan 21 11:17:10 CET 2014


Hi!

I am working on Bug 11401 - Add support for Norwegian national library card:
http://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=11401

The goal is to sync patrons in Koha back and forth to the Norwegian
national patron database. In order to do this I need to keep track of
- which patrons should be synced (they can choose to opt out of the syncing)
- a sync status, to see which patrons are new, which have been changed
and which are already synced
- the date of the last sync

I am a bit undecided about whether I should use extended patron
attributes for this, or add columns to the "borrowers" table. Some
pros and cons:
- Attributes are less intrusive, they only need to be added to systems
that want to sync with the Norwegian national patron database.
- New columns could be re-used by others, to implement other syncing
schemes, and they are easier to work with, as far as I can see.
I am currently leaning towards adding columns.

Now the thing is that I want to change the "syncstatus" every time
AddMember or ModMember is called, so I want to add some logic to these
subroutines, perhaps like this ("..." indicates lines that have been
edited out for clarity):

use Koha::Database;
...
sub AddMember {
    my (%data) = @_;
    ...
    $data{'borrowernumber'}=InsertInTable("borrowers",\%data);

    # If NorwegianPatronDBEnable is enabled, we set the nllastsync
attribute to something that a
    # cronjob will use for syncing with NL
    if ( C4::Context->preference('NorwegianPatronDBEnable') == 1 ) {
        my $borrower =
Koha::Database->new->schema->resultset('Borrower')->find(
$data{'borrowernumber'} );
        $borrower->update( { 'syncstatus' => 'new' } );
    }
    ...
}

Would that be an OK way to do it? Or is mixing in DBIC in existing
subroutines like this frowned upon?

Would it be cleaner to add a module like Koha::Borrower::Sync (that
could be re-used by other syncing schemes), with methods like
SetBorrowerSyncstatus( $patronnumber, $value ) that would then look
something like this:

use Koha::Database;
sub SetBorrowerSyncstatus {
    my ( $borrowernumber, $value ) = @_;
    my $borrower =
Koha::Database->new->schema->resultset('Borrower')->find(
$borrowernumber );
    $borrower->update( { 'syncstatus' => 'new' } );
}

Any advice on this would be much appreciated!

Best regards,
Magnus


More information about the Koha-devel mailing list