Add support for the SIP Server to obtain patron stat information for export.
Signed-off-by: Thomas Berezansky <tsbere@mvlc.org>
<link field="usr" reltype="has_a" key="id" map="" class="au"/>
</links>
</class>
+ <class id="actscsf" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="actor::stat_cat_sip_fields" oils_persist:tablename="actor.stat_cat_sip_fields" reporter:label="SIP Statistical Category Field Identifier">
+ <fields oils_persist:primary="field">
+ <field reporter:label="Field Identifier" name="field" reporter:datatype="text" reporter:selector="name"/>
+ <field reporter:label="Field Name" name="name" reporter:datatype="text"/>
+ </fields>
+ <links/>
+ <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
+ <create permission="CREATE_PATRON_STAT_CAT" global_required="true"/>
+ <retrieve />
+ <update permission="UPDATE_PATRON_STAT_CAT" global_required="true"/>
+ <delete permission="DELETE_PATRON_STAT_CAT" global_required="true"/>
+ </permacrud>
+ </class>
<class id="actsc" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="actor::stat_cat" oils_persist:tablename="actor.stat_cat" reporter:label="User Statistical Category">
<fields oils_persist:primary="id" oils_persist:sequence="actor.stat_cat_id_seq">
<field reporter:label="Entries" name="entries" oils_persist:virtual="true" reporter:datatype="link"/>
<field reporter:label="OPAC Visible" name="opac_visible" reporter:datatype="bool"/>
<field reporter:label="Owning Library" name="owner" reporter:datatype="org_unit"/>
<field reporter:label="User Summary" name="usr_summary" reporter:datatype="bool"/>
+ <field reporter:label="SIP Field" name="sip_field" reporter:datatype="link"/>
+ <field reporter:label="SIP Format" name="sip_format" reporter:datatype="text"/>
</fields>
<links>
<link field="owner" reltype="has_a" key="id" map="" class="aou"/>
+ <link field="sip_field" reltype="has_a" key="field" map="" class="actscsf"/>
<link field="entries" reltype="has_many" key="stat_cat" map="" class="actsce"/>
</links>
<permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
return [ sort { $a->name cmp $b->name } @$cats ];
}
+__PACKAGE__->register_method (
+ method => "retrieve_stat_cat_sip_fields",
+ api_name => "open-ils.circ.stat_cat.actor.sip_fields.retrieve.all");
+
+sub retrieve_stat_cat_sip_fields {
+ my( $self, $client, $user_session ) = @_;
+
+ my $method = 'open-ils.storage.actor.stat_cat_sip_fields.retrieve.all.atomic';
+
+ my($user_obj, $evt) = $apputils->checkses($user_session);
+ return $evt if $evt;
+
+ my $fields = $apputils->simple_scalar_request(
+ "open-ils.storage", $method );
+
+ return $fields;
+}
+
__PACKAGE__->register_method(
method => "retrieve_ranged_intersect_stat_cats",
__PACKAGE__->table( 'actor_stat_cat' );
__PACKAGE__->columns( Primary => qw/id/ );
-__PACKAGE__->columns( Essential => qw/owner name opac_visible usr_summary/ );
+__PACKAGE__->columns( Essential => qw/owner name opac_visible usr_summary sip_field sip_format/ );
+
+#-------------------------------------------------------------------------------
+package actor::stat_cat_sip_fields;
+use base qw/actor/;
+
+__PACKAGE__->table( 'actor_stat_cat_sip_fields' );
+__PACKAGE__->columns( Primary => qw/field/ );
+__PACKAGE__->columns( Essential => qw/name/ );
#-------------------------------------------------------------------------------
package actor::stat_cat_entry;
actor::stat_cat->table( 'actor.stat_cat' );
actor::stat_cat->sequence( 'actor.stat_cat_id_seq' );
+
+ #---------------------------------------------------------------------
+ package actor::stat_cat_sip_fields;
+ actor::stat_cat_sip_fields->table( 'actor.stat_cat_sip_fields' );
+
#---------------------------------------------------------------------
package actor::stat_cat_entry;
method => 'ranged_actor_stat_cat_entry',
);
+sub actor_stat_cat_sip_fields {
+ my $self = shift;
+ my $client = shift;
+ my $s_table = actor::stat_cat_sip_fields->table;
+
+ my $select = <<" SQL";
+ SELECT field, name
+ FROM $s_table
+ SQL
+
+ my $sth = actor::stat_cat_sip_fields->db_Main->prepare_cached($select);
+ $sth->execute();
+
+ for my $scsf ( map { actor::stat_cat_sip_fields->construct($_) } $sth->fetchall_hash ) {
+ $client->respond( $scsf->to_fieldmapper );
+ }
+
+ return undef;
+}
+
+__PACKAGE__->register_method(
+ api_name => 'open-ils.storage.actor.stat_cat_sip_fields.retrieve.all',
+ api_level => 1,
+ stream => 1,
+ method => 'actor_stat_cat_sip_fields',
+);
1;
"billing_address",
"mailing_address",
'profile',
+ "stat_cat_entries",
+ ],
+ actscecm => [
+ "stat_cat",
],
}
};
return $name;
}
+sub extra_fields {
+ my( $self ) = @_;
+ my $extra_fields = {};
+ my $u = $self->{user};
+ foreach my $stat_cat_entry (@{$u->stat_cat_entries}) {
+ my $stat_cat = $stat_cat_entry->stat_cat;
+ next unless ($stat_cat->sip_field);
+ $extra_fields->{ $stat_cat->sip_field } = [] unless (defined $extra_fields->{$stat_cat->sip_field});
+ my $value = $stat_cat_entry->stat_cat_entry;
+ $value = sprintf($stat_cat->sip_format, $value) if (defined $stat_cat->sip_format);
+ push(@{$extra_fields->{ $stat_cat->sip_field}}, $value);
+ }
+ return $extra_fields;
+}
1;
CREATE INDEX actor_usr_setting_usr_idx ON actor.usr_setting (usr);
+CREATE TABLE actor.stat_cat_sip_fields (
+ field CHAR(2) PRIMARY KEY,
+ name TEXT NOT NULL
+);
+COMMENT ON TABLE actor.stat_cat_sip_fields IS $$
+Actor Statistical Category SIP Fields
+
+Contains the list of valid SIP Field identifiers for
+Statistical Categories.
+$$;
CREATE TABLE actor.stat_cat (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
opac_visible BOOL NOT NULL DEFAULT FALSE,
usr_summary BOOL NOT NULL DEFAULT FALSE,
+ sip_field CHAR(2) REFERENCES actor.stat_cat_sip_fields(field) ON UPDATE CASCADE ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED,
+ sip_format TEXT,
CONSTRAINT sc_once_per_owner UNIQUE (owner,name)
);
COMMENT ON TABLE actor.stat_cat IS $$
--- /dev/null
+BEGIN;
+
+INSERT INTO config.upgrade_log (version) VALUES ('XXXX');
+
+CREATE TABLE actor.stat_cat_sip_fields (
+ field CHAR(2) PRIMARY KEY,
+ name TEXT NOT NULL
+);
+COMMENT ON TABLE actor.stat_cat_sip_fields IS $$
+Actor Statistical Category SIP Fields
+
+Contains the list of valid SIP Field identifiers for
+Statistical Categories.
+$$;
+
+ALTER TABLE actor.stat_cat
+ ADD COLUMN sip_field CHAR(2) REFERENCES actor.stat_cat_sip_fields(field) ON UPDATE CASCADE ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED,
+ ADD COLUMN sip_format TEXT;
+
+COMMIT;
<!ENTITY staff.server.admin.stat_cat.new_entry_name "Enter the value of the new entry: ">
<!ENTITY staff.server.admin.stat_cat.new_entry_create "Create new entry">
<!ENTITY staff.server.admin.stat_cat.update_success "Update succeeded">
+<!ENTITY staff.server.admin.stat_cat.sip_field "SIP Field: ">
+<!ENTITY staff.server.admin.stat_cat.sip_field.none "No SIP Export">
+<!ENTITY staff.server.admin.stat_cat.sip_format "SIP Format: ">
+<!ENTITY staff.server.admin.stat_cat.sip_field.label "SIP Field">
+<!ENTITY staff.server.admin.stat_cat.sip_format.label "SIP Format">
+<!ENTITY staff.server.admin.stat_cat.sip_field.none.label "No SIP">
<!ENTITY staff.server.admin.upload_xacts.title "Upload Offline Transactions">
<!ENTITY staff.server.admin.upload_xacts.header "Uploading transactions...">
<!ENTITY staff.server.admin.upload_xacts.upload "Upload">
var SC_FETCH_ALL = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.retrieve.all';
+var SC_FETCH_SF = 'open-ils.circ:open-ils.circ.stat_cat.actor.sip_fields.retrieve.all';
var SC_CREATE = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.create';
var SC_UPDATE = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.update';
var SC_DELETE = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.delete';
if(!session) throw "User session is not defined";
user = fetchUser(session);
$('sc_type_selector').onchange = scBuildNew;
+ try {
+ var sipfieldselect1 = $('sc_sip_field');
+ var sipfieldselect2 = $n($('sc_edit_row'), 'sc_edit_sip_field');
+ var req = new Request( SC_FETCH_SF, session );
+ req.send(true);
+ var result = req.result();
+ for(var f in result) {
+ var option1 = document.createElement('option');
+ option1.value = result[f].field();
+ option1.appendChild(text(result[f].name() + ' (' + result[f].field() + ')'));
+ var option2 = option1.cloneNode(true);
+ sipfieldselect1.appendChild(option1);
+ sipfieldselect2.appendChild(option2);
+ }
+ } catch (E) { alert(js2JSON(E));}
+
+
setTimeout(
function() {
fetchHighestWorkPermOrgs(
}
function _scShow(type) {
-
currentlyVisible = type;
if( type == ASSET ) {
if(type == ACTOR) {
unHideMe($('sc_usr_summary_label'));
+ unHideMe($('sc_sip_field_label'));
+ unHideMe($('sc_sip_format_label'));
hideMe($('sc_required_label'));
} else {
unHideMe($('sc_required_label'));
hideMe($('sc_usr_summary_label'));
+ hideMe($('sc_sip_field_label'));
+ hideMe($('sc_sip_format_label'));
}
scCounter = 0;
else
unHideMe($n(row, 'sc_usr_summary'));
+ if(cat.sip_field().length != 2)
+ unHideMe($n(row, 'sc_sip_field_none'));
+ else {
+ $n(row, 'sc_sip_field_value').appendChild( text( cat.sip_field() ) );
+ unHideMe($n(row, 'sc_sip_field_value'));
+ }
+
+ $n(row, 'sc_sip_format_td').appendChild( text( cat.sip_format() ) );
+
hideMe($n(row, 'sc_required_td'));
} else {
if(isTrue(cat.required()))
unHideMe($n(row, 'sc_required'));
hideMe($n(row, 'sc_usr_summary_td'));
+ hideMe($n(row, 'sc_sip_field_td'));
+ hideMe($n(row, 'sc_sip_format_td'));
}
tbody.appendChild(row);
hideMe($('required_td2'));
unHideMe($('usr_summary_td1'));
unHideMe($('usr_summary_td2'));
+ unHideMe($('sip_tr'));
break;
case ASSET:
hideMe($('usr_summary_td1'));
hideMe($('usr_summary_td2'));
+ hideMe($('sip_tr'));
unHideMe($('required_td1'));
unHideMe($('required_td2'));
break;
if( type == ACTOR ) {
cat = new actsc();
cat.usr_summary( usr_summary );
+ var field = getSelectorVal($('sc_sip_field'));
+ if(field.length == 2) cat.sip_field(field);
+ else cat.sip_field(null);
+ cat.sip_format($('sc_sip_format').value);
}
if( type == ASSET ) {
cat = new asc();
if(type == ACTOR) {
var cb = $n(row, 'sc_edit_usr_summary');
cb.checked = isTrue(cat.usr_summary());
+ setSelector($n(row, 'sc_edit_sip_field'), cat.sip_field());
+ $n(row, 'sc_edit_sip_format').value = cat.sip_format();
hideMe($n(row, 'sc_edit_required_td'));
unHideMe($n(row, 'sc_edit_usr_summary_td'));
+ unHideMe($n(row, 'sc_edit_sip_field_td'));
+ unHideMe($n(row, 'sc_edit_sip_format_td'));
} else {
var cb = $n(row, 'sc_edit_required');
cb.checked = isTrue(cat.required());
hideMe($n(row, 'sc_edit_usr_summary_td'));
+ hideMe($n(row, 'sc_edit_sip_field_td'));
+ hideMe($n(row, 'sc_edit_sip_format_td'));
unHideMe($n(row, 'sc_edit_required_td'));
}
var usr_summary = $n(row, 'sc_edit_usr_summary').checked;
var required = $n(row, 'sc_edit_required').checked;
+ var sip_field = getSelectorVal( $n(row, 'sc_edit_sip_field') );
cat.name( name );
cat.owner( newlib );
cat.entries(null);
cat.opac_visible(0);
+ if(sip_field.length == 2) cat.sip_field( sip_field );
+ else cat.sip_field(null);
+ cat.sip_format($n(row, 'sc_edit_sip_format').value);
if( visible ) cat.opac_visible(1);
switch(type) {
case ACTOR:
<span>&staff.server.admin.stat_cat.off;</span>
<input type='radio' name='usr_summary' checked='checked'> </input>
</td>
-
+ </tr>
+ <tr id='sip_tr'>
+ <td>&staff.server.admin.stat_cat.sip_field;</td>
+ <td>
+ <select name='sip_field' id='sc_sip_field'>
+ <option value=''>&staff.server.admin.stat_cat.sip_field.none;</option>
+ </select>
+ </td>
+ <td>&staff.server.admin.stat_cat.sip_format;</td>
+ <td><input type='text' name='sip_format' id='sc_sip_format' /></td>
</tr>
<tr>
<td colspan='4'>
<td>&staff.server.admin.stat_cat.opac_visibility.label;</td>
<td id='sc_required_label'>&staff.server.admin.stat_cat.required.label;</td>
<td id='sc_usr_summary_label'>&staff.server.admin.stat_cat.usr_summary.label;</td>
+ <td id='sc_sip_field_label'>&staff.server.admin.stat_cat.sip_field.label;</td>
+ <td id='sc_sip_format_label'>&staff.server.admin.stat_cat.sip_format.label;</td>
<td>&staff.server.admin.stat_cat.entries.label;</td>
<td>&staff.server.admin.stat_cat.add_entry;</td>
<td>&staff.server.admin.stat_cat.edit;</td>
<span class='hide_me' name='sc_usr_summary_on'>&staff.server.admin.stat_cat.on;</span>
<span class='hide_me' name='sc_usr_summary'>&staff.server.admin.stat_cat.off;</span>
</td>
+ <td name='sc_sip_field_td'>
+ <span class='hide_me' name='sc_sip_field_none'>&staff.server.admin.stat_cat.sip_field.none.label;</span>
+ <span class='hide_me' name='sc_sip_field_value' />
+ </td>
+ <td name='sc_sip_format_td'/>
<td>
<select class='selector' name='sc_entries_selector'>
<option>&staff.server.admin.stat_cat.none;</option>
<td name='sc_edit_usr_summary_td'>
<input type='checkbox' name='sc_edit_usr_summary'/>
</td>
+ <td name='sc_edit_sip_field_td'>
+ <select name='sc_edit_sip_field'>
+ <option value=''>&staff.server.admin.stat_cat.sip_field.none;</option>
+ </select>
+ </td>
+ <td name='sc_edit_sip_format_td'>
+ <input type='text' name='sc_edit_sip_format'/>
+ </td>
<td colspan='4'>
<span class='padded'>
<input type='submit' value='&staff.server.admin.stat_cat.edit_submit;' name='sc_edit_submit'/>