When trying to come up with good tests, found a few bugs (imagine!).
Some have been nagging for a while now.
1) For 'MFHDDrawn' event, make sure it runs if deleting the last
serials data of any kind for that record (to unpopulate the menus
properly)
2) Make sure global mfhd member (g.mfhd) is cleared in the same case
(i.e. deleting the last serials data for that record)
3) Add a string to better indicate when no MFHD records are available
for 'Legacy Record Entry' drop-down
4) Convert submitted empty drop-down values to 'null' as needed in
distribution editor
5) Mark subscription 'start date' as a required field
6) Make serial virtual records better handle deleted 'legacy record
entries' attached to distributions, and also expose non-deleted
record entries even if in 'use_sdist_only' summary mode
Signed-off-by: Dan Wells <dbw2@calvin.edu>
Signed-off-by: Jason Etheridge <jason@esilibrary.com>
my $mfhd_parser = OpenILS::Utils::MFHDParser->new();
foreach (@$sdists) {
my $svr;
- if (ref $_->record_entry and $_->summary_method ne 'use_sdist_only') {
+ if ($_->summary_method ne 'use_sdist_only' and ref $_->record_entry and !$U->is_true($_->record_entry->deleted)) {
my $skip_all_computable = 0;
if ($_->summary_method eq 'merge_with_sre') { # 'computable' (85x/86x combos) are handled by generated_coverage when attempting to merge
$skip_all_computable = 1;
$svr = $mfhd_parser->generate_svr($_->record_entry->id, $_->record_entry->marc, $_->record_entry->owning_lib, $skip_all_computable);
} else {
$svr = Fieldmapper::serial::virtual_record->new;
- $svr->sre_id(-1);
+ if (ref $_->record_entry and !$U->is_true($_->record_entry->deleted)) {
+ $svr->sre_id($_->record_entry->id);
+ } else {
+ $svr->sre_id(-1);
+ }
$svr->location($_->holding_lib->name);
$svr->owning_lib($_->holding_lib);
$svr->basic_holdings([]);
*/
function _holdingsDraw(h) {
holdings = h.getResultObject();
- if (!holdings) { return null; }
-
- // Only draw holdings within our OU scope
- var here = findOrgUnit(getLocation());
- var entryNum = 0;
- dojo.forEach(holdings, function (item) {
- if (orgIsMine(here, findOrgUnit(item.owning_lib()))) {
- _holdingsDrawMFHD(item, entryNum);
- entryNum++;
- }
- });
- // Populate XUL menus
+ if (holdings) {
+ // Only draw holdings within our OU scope
+ var here = findOrgUnit(getLocation());
+ var entryNum = 0;
+ dojo.forEach(holdings, function (item) {
+ if (orgIsMine(here, findOrgUnit(item.owning_lib()))) {
+ _holdingsDrawMFHD(item, entryNum);
+ entryNum++;
+ }
+ });
+ }
+
+ // Populate (or unpopulate) XUL menus
if (isXUL()) {
runEvt('rdetail','MFHDDrawn');
}
item = mfhd_delete_menu.appendItem(label);
item.setAttribute('oncommand','delete_mfhd('+mfhd_details.id+')');
}
- var change_event = document.createEvent("Event");
- change_event.initEvent("MFHDChange",false,false);
- window.dispatchEvent(change_event);
+ } else if (g.mfhd) { // clear from previous runs if deleting last MFHD
+ delete g.mfhd;
}
+ var change_event = document.createEvent("Event");
+ change_event.initEvent("MFHDChange",false,false);
+ window.dispatchEvent(change_event);
}
);
},
staff.serial.sdist_editor.merge_with_sre.label=Merge with record entry
staff.serial.sdist_editor.use_sre_only.label=Use record entry only
staff.serial.sdist_editor.use_sdist_only.label=Do not use record entry
+staff.serial.sdist_editor.no_mfhd_available.label=No MFHD records for this Holding Lib
staff.serial.siss_editor.count=1 issuance
staff.serial.siss_editor.count.plural=%1$s issuances
staff.serial.siss_editor.create.label=Create Issuance(s)
'apply' : function(field,value) {
var obj = this;
+ var field_name_list = ['bind_call_number','receive_call_number','bind_unit_template','receive_unit_template','record_entry'];
+
// null out call number if the holding lib is changed
obj.holding_lib_changed = (field == 'holding_lib');
var loop_func = function(sdist) {
if (obj.holding_lib_changed) {
- var field_name_list = ['bind_call_number','receive_call_number','bind_unit_template','receive_unit_template','record_entry'];
for (var i = 0; i < field_name_list.length; i++) {
sdist[field_name_list[i]](null);
obj.changed[fieldmapper.IDL.fmclasses.sdist.field_map[field_name_list[i]].label] = true;
}
}
}
+
+ // check for blank drop-down submits
+ for (var i = 0; i < field_name_list.length; i++) {
+ if (field == field_name_list[i] && value === '') {
+ value = null;
+ break;
+ }
+ }
obj.editor_base_apply(field, value, loop_func);
obj.holding_lib_changed = false;
},
var lib_id = typeof obj.sdists[0].holding_lib() == 'object' ? obj.sdists[0].holding_lib().id() : obj.sdists[0].holding_lib();
var sre_details_list = obj.sres_ou_map[lib_id];
if (sre_details_list == null) {
- return [];
+ return [{'label' : $('serialStrings').getString('staff.serial.sdist_editor.no_mfhd_available.label'), 'id' : ''}];
} else {
return sre_details_list;
}
{
render: 'fm.start_date() == null ? "" : util.date.formatted_date( fm.start_date(), "%F");',
input: 'c = function(v){ obj.apply("start_date",v); if (typeof post_c == "function") post_c(v); }; x = document.createElement("textbox"); x.setAttribute("value",obj.editor_values.start_date); x.addEventListener("apply",function(f){ return function(ev) { f(ev.target.value); } }(c), false);',
- value_key: 'start_date'
+ value_key: 'start_date',
+ required: true
}
],
[