Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Script to modify a selected group of BOM's and replace one item with another
- */
- var resultSet = function( type, savedSearch, filters, columns ) {
- var searchResults = [];
- var lastId = 0;
- var searchRecords = '';
- var searchRecordsLength = 0;
- do {
- //clone columns into new array
- var addColumn = [];
- columns.forEach( function( element, index, list ) {
- addColumn.push( element );
- } );
- //push special internalid column with sort into the columns array
- addColumn.push( new nlobjSearchColumn( 'internalid' ).setSort() );
- //clone filters into a new array
- var addFilter = [];
- filters.forEach( function( element, index, list ) {
- addFilter.push( element );
- } );
- //add the iterator filter to the filters array
- addFilter.push( new nlobjSearchFilter( 'internalidnumber', null, 'greaterthan', lastId ) );
- try {
- searchRecords = nlapiSearchRecord( type, savedSearch, addFilter, addColumn );
- }
- catch ( e ) {
- }
- if ( searchRecords ) {
- searchRecordsLength = searchRecords.length;
- lastId = searchRecords[ searchRecords.length - 1 ].getValue( 'internalid' );
- searchResults = searchResults.concat( searchRecords );
- } else {
- searchRecordsLength = 0;
- }
- }
- while ( searchRecordsLength == 1000 );
- return searchResults;
- }
- function main( request, response ) {
- var form = {};
- //this path is the submit from the first page that searches for Assemblies that contain the target item
- if ( request.getMethod() == 'POST' && request.getParameter( 'custpage_item_search' ) != '' && !request.getParameter( 'custpage_item_replace' ) ) {
- //begin form
- var form = nlapiCreateForm( "Select and confirm change to selected BOM's" );
- //extract text from the submit button
- var submitter = request.getParameter( 'submitter' );
- //extract text from the selected item
- var item_internalId = request.getParameter( 'custpage_item_search' );
- //select the text from the dropdown
- var search_item_name = request.getParameter( 'inpt_custpage_item_search' );
- //create fedex to test if this is an initial submit or a return after error
- var test = /^Modify\s[a-zA-Z0-9\-]+_\d+$/.test(submitter);
- if (test) {
- //name only contains the word modify
- var name = submitter.split( ' ' )[ 0 ];
- //this gives us the item name
- search_item_name = submitter.split( ' ' )[ 1 ].split( '_' )[ 0 ];
- //this gives us the item internal id to search for
- item_internalId = submitter.split( ' ' )[ 1 ].split( '_' )[ 1 ];
- }
- //header message
- var htmlHeader = form.addField( 'custpage_header', 'inlinehtml' ).setLayoutType( 'outsideabove', 'startrow' );
- htmlHeader.setDefaultValue( "<br><p style='font-size:16px; max-width:400px;'>Select the replacement item and the check the box next to the BOMs you wish modified.</p><br><br>" );
- //label text for aboive the second dropdown that is used to choose the rpelacement item
- var message = 'Select Item to Replace (' + search_item_name + ') in the selected BOMs';
- //add dropdown of the replacement item
- var select = form.addField( 'custpage_item_replace', 'select', message, null );
- //load replacement dropdown from the items only saved search, this does not include assembly items which is what constitutes a BOM
- var itemResults = resultSet( 'item', 'customsearch_item_only_search', [], [] );
- select.addSelectOption( '', '' );
- itemResults.forEach( function( item, idex, list ) {
- select.addSelectOption( item.id, item.getValue( 'name' ) );
- } );
- var filters = [ new nlobjSearchFilter( 'internalid', 'memberitem', 'is', item_internalId ) ] //filter the search by the item you want to replace
- var columns = [];
- var result = resultSet( 'item', 'customsearch_assembly_item_search', filters, columns );
- var htmlHeader = form.addField( 'custpage_message', 'inlinehtml' ).setLayoutType( 'startrow' );
- htmlHeader.setDefaultValue( "<br><br><div style='width:100%;font-size:12px'> </div><br><br>" );
- var ids = '';
- result.forEach( function( item, index, list ) {
- ids += item.id + ',';
- var name = 'custpage_checkbox_' + item.id;
- form.addField( name, 'checkbox', item.getValue( 'name' ) );
- } );
- var foo = this;
- //SELECT ITEM TO REPLACE THE CHOSEN ITEM (11274) IN THE SELECTED BOMS
- var buttonName = 'Modify ' + search_item_name + '_' + item_internalId;
- form.addSubmitButton( buttonName );
- response.writePage( form );
- }
- else if ( request.getMethod() == 'POST' && request.getParameter( 'custpage_item_replace' ) != '' && request.getParameter( 'submitter' ) != 'Search' ) {
- var form = nlapiCreateForm( "Modify BOM Mass Update" );
- //grab the value for the submit button to parse out the item to replace in the BOMS
- var submitter = request.getParameter( 'submitter' );
- var name = submitter.split( ' ' )[ 0 ];
- var itemName = submitter.split( ' ' )[ 1 ].split( '_' )[ 0 ];
- var itemid = submitter.split( ' ' )[ 1 ].split( '_' )[ 1 ];
- var replace_item_id = request.getParameter( 'custpage_item_replace' );
- var replace_item_name = request.getParameter( 'custpage_item_replace_display' );
- var filters = [ new nlobjSearchFilter( 'internalid', 'memberitem', 'is', itemid ) ];
- var columns = [];
- var result = resultSet( 'item', 'customsearch_assembly_item_search', filters, columns );
- var ids = '';
- var count = 0;
- result.forEach( function( item, index, list ) {
- var name = 'custpage_checkbox_' + item.id;
- if ( request.getParameter( name ) === 'T' ) {
- count++;
- var assemId = item.getId(); //gets the assembly item id
- var lineId = item.getValue( 'memberline' ); //gets the sublist line index
- var record = nlapiLoadRecord( 'assemblyitem', assemId ); //load assembly item record
- var quantity = record.getLineItemValue( 'member', 'quantity', lineId);
- record.setLineItemValue( 'member', 'item', lineId, replace_item_id );
- record.setLineItemValue( 'member', 'quantity', lineId, quantity );
- nlapiSubmitRecord(record);
- }
- } );
- var message = "Successfully modified " + count + " BOM(s).";
- if (parseInt(count) == 0 ) {
- message = "No BOMs were selected please click the link and start over. "
- }
- var htmlHeader = form.addField( 'custpage_message', 'inlinehtml' ).setLayoutType( 'startrow' );
- var url = '/app/site/hosting/scriptlet.nl?script=53&deploy=1';
- htmlHeader.setDefaultValue( "<br><br><div style='width:100%;font-size:16px'>" + message + "</div><br><br><a style='font-size:16px' href='" + url + "' >Modify Another set of BOMs</a>" );
- response.writePage( form );
- } else {
- var form = nlapiCreateForm( "Modify BOM Mass Update" );
- //header message
- var htmlHeader = form.addField( 'custpage_header', 'inlinehtml' ).setLayoutType( 'outsideabove', 'startrow' );
- htmlHeader.setDefaultValue( "<br><p style='font-size:16px; max-width:400px;'>This application is for the mass update of BOMs.<br>Select Item in dropdown to generate a list of associated BOMs.</p><br><br>" );
- //add empty dropdown and load with the saved search of inventory items
- var select = form.addField( 'custpage_item_search', 'select', 'Select Item to search for in BOMs', null );
- //pull inventory items from the saved search
- var itemResults = resultSet( 'item', 'customsearch_item_only_search', [], [] );
- select.addSelectOption( '', '' );
- itemResults.forEach( function( item, idex, list ) {
- select.addSelectOption( item.id, item.getValue( 'name' ) );
- } );
- var htmlHidden = form.addField( 'custpage_hidden', 'inlinehtml' ).setLayoutType( 'outsideabove', 'startrow' );
- htmlHidden.setDefaultValue( "<input type='hidden' id='hiddenValue' value='this is a test'>" );
- form.addSubmitButton( 'Search' );
- response.writePage( form );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment