diff --git a/CHANGES.rst b/CHANGES.rst index a954093817..108e1e6488 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -61,7 +61,9 @@ Changelog - #334 Fix TypeError (setRequestID, unexpected keyword argument) on AR Creation - #327 Keep Laboratory name when reinstalling - #339 Index not found warnings in bika listing. -- #348 Add Attachment objects to portal_catalog, to allow idserver to function correctly. +- #348 Add Attachment objects to portal_catalog, to allow idserver to function correctly. +- #352 Fix traceback on listings + 1.0.0 (2017-10-13) ------------------ diff --git a/bika/lims/browser/bika_listing.py b/bika/lims/browser/bika_listing.py index fde58d431c..ef37eb497c 100644 --- a/bika/lims/browser/bika_listing.py +++ b/bika/lims/browser/bika_listing.py @@ -1257,11 +1257,24 @@ def _folderitems(self, full_objects=False): after={}, replace={}, ) - rs = self.workflow.getInfoFor(obj, 'review_state') - st_title = self.workflow.getTitleForStateOnType(rs, obj.portal_type) - st_title = t(PMF(st_title)) + + rs = None + wf_state_var = None + + workflows = self.workflow.getWorkflowsFor(obj) + for wf in workflows: + if wf.state_var: + wf_state_var = wf.state_var + break + + if wf_state_var is not None: + rs = self.workflow.getInfoFor(obj, wf_state_var) + st_title = self.workflow.getTitleForStateOnType(rs, obj.portal_type) + st_title = t(PMF(st_title)) + if rs: results_dict['review_state'] = rs + for state_var, state in states.items(): if not st_title: st_title = self.workflow.getTitleForStateOnType( diff --git a/bika/lims/browser/js/bika.lims.bikalisting.js b/bika/lims/browser/js/bika.lims.bikalisting.js index b8505a2276..346c89b180 100644 --- a/bika/lims/browser/js/bika.lims.bikalisting.js +++ b/bika/lims/browser/js/bika.lims.bikalisting.js @@ -1,131 +1,121 @@ -/* - * Controller class for Bika Listing Table view +/* Please use this command to compile this file into the parent `js` directory: + coffee --no-header -w -o ../ -c bika.lims.bikalisting.coffee */ - (function() { - window.BikaListingTableView = function () { - var autosave, build_typical_save_request, category_header_clicked,column_header_clicked, column_toggle_context_menu, column_toggle_context_menu_selection, filter_search_button_click, filter_search_keypress, - listing_string_input_keypress, - listing_string_select_changed, loadNewRemarksEventHandlers, load_export_buttons, load_transitions, loading_transitions, - pagesize_change, positionTooltip, render_transition_buttons, save_elements, select_all_clicked, select_one_clicked, show_more_clicked, that, - workflow_action_button_click; - that = this; - loading_transitions = false; - show_more_clicked=function () { +/* + * Controller class for Bika Listing Table view + */ - $('a.bika_listing_show_more').click(function(e){ - var filter_options, filterbar, filters, filters1, filters2, formid, limit_from, pagesize, tbody, url;e.preventDefault(); - formid = $(this).attr('data-form-id'); - pagesize = parseInt($(this).attr('data-pagesize')); - url = $(this).attr('data-ajax-url'); - limit_from = parseInt($(this).attr('data-limitfrom')); - url = url.replace('_limit_from=','_olf='); - url += '&'+formid+'_limit_from='+limit_from; - $('#'+formid+' a.bika_listing_show_more').fadeOut(); - tbody = $('table.bika-listing-table[form_id="'+formid+'"] tbody.item-listing-tbody'); - filter_options = []; - filters1 = $('.bika_listing_filter_bar input[name][value!=""]'); - filters2 = $('.bika_listing_filter_bar select option:selected[value!=""]'); - filters = $.merge(filters1, filters2); - $(filters).each(function(e) { - var opt; +(function() { + window.BikaListingTableView = function() { + var autosave, build_typical_save_request, category_header_clicked, column_header_clicked, column_toggle_context_menu, column_toggle_context_menu_selection, filter_search_button_click, filter_search_keypress, listing_string_input_keypress, listing_string_select_changed, loadNewRemarksEventHandlers, load_export_buttons, load_transitions, loading_transitions, pagesize_change, positionTooltip, render_transition_buttons, save_elements, select_all_clicked, select_one_clicked, show_more_clicked, that, workflow_action_button_click; + that = this; + loading_transitions = false; + show_more_clicked = function() { + $('a.bika_listing_show_more').click(function(e) { + var filter_options, filterbar, filters, filters1, filters2, formid, limit_from, pagesize, tbody, url; + e.preventDefault(); + formid = $(this).attr('data-form-id'); + pagesize = parseInt($(this).attr('data-pagesize')); + url = $(this).attr('data-ajax-url'); + limit_from = parseInt($(this).attr('data-limitfrom')); + url = url.replace('_limit_from=', '_olf='); + url += '&' + formid + '_limit_from=' + limit_from; + $('#' + formid + ' a.bika_listing_show_more').fadeOut(); + tbody = $('table.bika-listing-table[form_id="' + formid + '"] tbody.item-listing-tbody'); + filter_options = []; + filters1 = $('.bika_listing_filter_bar input[name][value!=""]'); + filters2 = $('.bika_listing_filter_bar select option:selected[value!=""]'); + filters = $.merge(filters1, filters2); + $(filters).each(function(e) { + var opt; opt = [$(this).attr('name'), $(this).val()]; - filter_options.push(opt); - }); - filterbar = {}; - if (filter_options.length > 0) { - filterbar.bika_listing_filter_bar = $.toJSON(filter_options); - } - $.post(url, filterbar) - .done(function(data) { - var rows;try { - rows = $(''+data+'
').find('tr'); - - $(tbody).append(rows); - - $('#'+formid+' a.bika_listing_show_more').attr('data-limitfrom', limit_from+pagesize); - loadNewRemarksEventHandlers(); - } - catch (error) {e= error; - $('#' + formid + ' a.bika_listing_show_more').hide(); - console.log(e); - } - load_transitions(); - }).fail(function () { - $('#'+formid+' a.bika_listing_show_more').hide(); - console.log('bika_listing_show_more failed'); - }).always(function() { - var numitems; - numitems = $('table.bika-listing-table[form_id="'+formid+'"] tbody.item-listing-tbody tr').length; - $('#'+formid+' span.number-items').html(numitems); - if (numitems % pagesize === 0) { - $('#'+formid+' a.bika_listing_show_more').fadeIn(); - } - }); - }); - }; - - loadNewRemarksEventHandlers= function() { - var pointer, txt1; - $('a.add-remark').remove(); - txt1 = ''; - pointer = $('.listing_remarks:contains(\'\')').closest('tr').prev().find('td.service_title span.before'); - - $(pointer).append(txt1); - - $('a.add-remark').click(function(e){ - var rmks;e.preventDefault(); - rmks = $(this).closest('tr').next('tr').find('td.remarks'); - if (rmks.length > 0) { - rmks.toggle(); - } - }); - $('td.remarks').hide(); - }; - - column_header_clicked= function() { - $('th.sortable').live('click', function () { - var column_id, column_index, form, form_id, options, sort_on, sort_on_selector, sort_order, sort_order_selector, stored_form_action;form = $(this).parents('form'); - form_id = $(form).attr('id'); - column_id = this.id.split('-')[1]; - column_index = $(this).parent().children('th').index(this); - sort_on_selector = '[name=' + form_id + '_sort_on]'; - sort_on = $(sort_on_selector).val(); - sort_order_selector = '[name=' + form_id + '_sort_order]'; - sort_order = $(sort_order_selector).val(); - if (sort_on === column_id) { - - if (sort_order == = 'descending') { - sort_order = 'ascending'; - } - else { - sort_order = 'descending'; - } - } - else { - sort_on = column_id; - sort_order = 'ascending'; - } - - $(sort_on_selector).val(sort_on); - $(sort_order_selector).val(sort_order); - - - stored_form_action = $(form).attr('action'); - $(form).attr('action', window.location.href); - $(form).append(''); - options = { - target: $(this).parents('table'), - replaceTarget: true, - data: form.formToArray(), - success: load_transitions}; - form.ajaxSubmit(options); - $('[name=\'table_only\']').remove(); - $(form).attr('action', stored_form_action); - }); - }; + filter_options.push(opt); + }); + filterbar = {}; + if (filter_options.length > 0) { + filterbar.bika_listing_filter_bar = $.toJSON(filter_options); + } + $.post(url, filterbar).done(function(data) { + var rows; + try { + rows = $('' + data + '
').find('tr'); + $(tbody).append(rows); + $('#' + formid + ' a.bika_listing_show_more').attr('data-limitfrom', limit_from + pagesize); + loadNewRemarksEventHandlers(); + } catch (error) { + e = error; + $('#' + formid + ' a.bika_listing_show_more').hide(); + console.log(e); + } + load_transitions(); + }).fail(function() { + $('#' + formid + ' a.bika_listing_show_more').hide(); + console.log('bika_listing_show_more failed'); + }).always(function() { + var numitems; + numitems = $('table.bika-listing-table[form_id="' + formid + '"] tbody.item-listing-tbody tr').length; + $('#' + formid + ' span.number-items').html(numitems); + if (numitems % pagesize === 0) { + $('#' + formid + ' a.bika_listing_show_more').fadeIn(); + } + }); + }); + }; + loadNewRemarksEventHandlers = function() { + var pointer, txt1; + $('a.add-remark').remove(); + txt1 = ''; + pointer = $('.listing_remarks:contains(\'\')').closest('tr').prev().find('td.service_title span.before'); + $(pointer).append(txt1); + $('a.add-remark').click(function(e) { + var rmks; + e.preventDefault(); + rmks = $(this).closest('tr').next('tr').find('td.remarks'); + if (rmks.length > 0) { + rmks.toggle(); + } + }); + $('td.remarks').hide(); + }; + column_header_clicked = function() { + $('th.sortable').live('click', function() { + var column_id, column_index, form, form_id, options, sort_on, sort_on_selector, sort_order, sort_order_selector, stored_form_action; + form = $(this).parents('form'); + form_id = $(form).attr('id'); + column_id = this.id.split('-')[1]; + column_index = $(this).parent().children('th').index(this); + sort_on_selector = '[name=' + form_id + '_sort_on]'; + sort_on = $(sort_on_selector).val(); + sort_order_selector = '[name=' + form_id + '_sort_order]'; + sort_order = $(sort_order_selector).val(); + if (sort_on === column_id) { + if (sort_order === 'descending') { + sort_order = 'ascending'; + } else { + sort_order = 'descending'; + } + } else { + sort_on = column_id; + sort_order = 'ascending'; + } + $(sort_on_selector).val(sort_on); + $(sort_order_selector).val(sort_order); + stored_form_action = $(form).attr('action'); + $(form).attr('action', window.location.href); + $(form).append(''); + options = { + target: $(this).parents('table'), + replaceTarget: true, + data: form.formToArray() + }; + form.ajaxSubmit(options); + $('[name=\'table_only\']').remove(); + $(form).attr('action', stored_form_action); + }); + }; /* * Fetch allowed transitions for all the objects listed in bika_listing and diff --git a/bika/lims/browser/js/coffee/bika.lims.bikalisting.coffee b/bika/lims/browser/js/coffee/bika.lims.bikalisting.coffee index f819661826..25c1b98946 100644 --- a/bika/lims/browser/js/coffee/bika.lims.bikalisting.coffee +++ b/bika/lims/browser/js/coffee/bika.lims.bikalisting.coffee @@ -1,3 +1,7 @@ +### Please use this command to compile this file into the parent `js` directory: + coffee --no-header -w -o ../ -c bika.lims.bikalisting.coffee +### + ### # Controller class for Bika Listing Table view ###