PERFORM migration_tools.exec( $1, 'CREATE UNIQUE INDEX ' || migration_schema || '_patron_barcode_key ON ' || migration_schema || '.actor_card ( barcode );' );
PERFORM migration_tools.exec( $1, 'CREATE UNIQUE INDEX ' || migration_schema || '_patron_usrname_key ON ' || migration_schema || '.actor_usr ( usrname );' );
PERFORM migration_tools.exec( $1, 'CREATE UNIQUE INDEX ' || migration_schema || '_copy_barcode_key ON ' || migration_schema || '.asset_copy ( barcode );' );
+ PERFORM migration_tools.exec( $1, 'CREATE UNIQUE INDEX ' || migration_schema || '_copy_id_key ON ' || migration_schema || '.asset_copy ( id );' );
PERFORM migration_tools.exec( $1, 'CREATE INDEX ' || migration_schema || '_callnum_record_idx ON ' || migration_schema || '.asset_call_number ( record );' );
PERFORM migration_tools.exec( $1, 'CREATE INDEX ' || migration_schema || '_callnum_upper_label_id_lib_idx ON ' || migration_schema || '.asset_call_number ( UPPER(label),id,owning_lib );' );
PERFORM migration_tools.exec( $1, 'CREATE UNIQUE INDEX ' || migration_schema || '_callnum_label_once_per_lib ON ' || migration_schema || '.asset_call_number ( record,owning_lib,label );' );
-- Fetch the correct rules for this circulation
EXECUTE ('
- SELECT
- circ_lib,
- target_copy,
- usr,
- CASE
- WHEN phone_renewal OR desk_renewal OR opac_renewal THEN TRUE
- ELSE FALSE
- END
- FROM ' || tablename || ' WHERE id = ' || circ || ';')
+ SELECT
+ circ_lib,
+ target_copy,
+ usr,
+ CASE
+ WHEN phone_renewal OR desk_renewal OR opac_renewal THEN TRUE
+ ELSE FALSE
+ END
+ FROM ' || tablename || ' WHERE id = ' || circ || ';')
INTO circ_lib, target_copy, usr, is_renewal ;
- SELECT
+ SELECT
INTO this_duration_rule,
this_fine_rule,
- this_max_fine_rule
- duration_rule,
- recurring_fine_rule,
- max_fine_rule
- FROM action.find_circ_matrix_matchpoint(
- circ_lib,
- target_copy,
- usr,
- is_renewal
+ this_max_fine_rule
+ duration_rule,
+ recurring_fine_rule,
+ max_fine_rule
+ FROM action.find_circ_matrix_matchpoint(
+ circ_lib,
+ target_copy,
+ usr,
+ is_renewal
);
- SELECT INTO rcd * FROM config.rule_circ_duration
+ SELECT INTO rcd * FROM config.rule_circ_duration
WHERE id = this_duration_rule;
- SELECT INTO rrf * FROM config.rule_recurring_fine
+ SELECT INTO rrf * FROM config.rule_recurring_fine
WHERE id = this_fine_rule;
- SELECT INTO rmf * FROM config.rule_max_fine
+ SELECT INTO rmf * FROM config.rule_max_fine
WHERE id = this_max_fine_rule;
-- Apply the rules to this circulation
max_fine_rule = rmf.name,
duration = rcd.normal,
recurring_fine = rrf.normal,
- max_fine = rmf.amount,
+ max_fine =
+ CASE rmf.is_percent
+ WHEN TRUE THEN (rmf.amount / 100.0) * ac.price
+ ELSE rmf.amount
+ END,
renewal_remaining = rcd.max_renewals
FROM
config.rule_circ_duration rcd,
config.rule_recurring_fine rrf,
- config.rule_max_fine rmf
+ config.rule_max_fine rmf,
+ asset.copy ac
WHERE
rcd.id = ' || this_duration_rule || ' AND
rrf.id = ' || this_fine_rule || ' AND
rmf.id = ' || this_max_fine_rule || ' AND
+ ac.id = c.target_copy AND
c.id = ' || circ || ';');
-- Keep track of where we are in the process
n := n + 1;
- IF (n % 100 = 0) THEN
- RAISE INFO '%', n || ' of ' || n_circs
+ IF (n % 100 = 0) THEN
+ RAISE INFO '%', n || ' of ' || n_circs
|| ' (' || (100*n/n_circs) || '%) circs updated.';
END IF;
END;
$$ LANGUAGE plpgsql;
+
+CREATE OR REPLACE FUNCTION migration_tools.zip_to_city_state_county (TEXT) RETURNS TEXT[] AS $$
+
+ my $input = $_[0];
+ my %zipdata;
+
+ open (FH, '<', '/openils/var/data/zips.txt') or return ('No File Found', 'No File Found', 'No File Found');
+
+ while (<FH>) {
+ chomp;
+ my ($junk, $state, $city, $zip, $foo, $bar, $county, $baz, $morejunk) = split(/\|/);
+ $zipdata{$zip} = [$city, $state, $county];
+ }
+
+ if (defined $zipdata{$input}) {
+ my ($city, $state, $county) = @{$zipdata{$input}};
+ return [$city, $state, $county];
+ } elsif (defined $zipdata{substr $input, 0, 5}) {
+ my ($city, $state, $county) = @{$zipdata{substr $input, 0, 5}};
+ return [$city, $state, $county];
+ } else {
+ return ['ZIP not found', 'ZIP not found', 'ZIP not found'];
+ }
+
+$$ LANGUAGE PLPERLU STABLE;
+