jk121960

Modify BOM SS 1.0

Feb 9th, 2017
266
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.63 KB | None | 0 0
  1. /*
  2. Script to modify a selected group of BOM's and replace one item with another
  3. */
  4. var resultSet = function( type, savedSearch, filters, columns ) {
  5. var searchResults = [];
  6. var lastId = 0;
  7. var searchRecords = '';
  8. var searchRecordsLength = 0;
  9. do {
  10. //clone columns into new array
  11. var addColumn = [];
  12. columns.forEach( function( element, index, list ) {
  13. addColumn.push( element );
  14. } );
  15. //push special internalid column with sort into the columns array
  16. addColumn.push( new nlobjSearchColumn( 'internalid' ).setSort() );
  17.  
  18. //clone filters into a new array
  19. var addFilter = [];
  20. filters.forEach( function( element, index, list ) {
  21. addFilter.push( element );
  22. } );
  23. //add the iterator filter to the filters array
  24. addFilter.push( new nlobjSearchFilter( 'internalidnumber', null, 'greaterthan', lastId ) );
  25.  
  26.  
  27. try {
  28. searchRecords = nlapiSearchRecord( type, savedSearch, addFilter, addColumn );
  29. }
  30. catch ( e ) {
  31. }
  32. if ( searchRecords ) {
  33. searchRecordsLength = searchRecords.length;
  34. lastId = searchRecords[ searchRecords.length - 1 ].getValue( 'internalid' );
  35. searchResults = searchResults.concat( searchRecords );
  36. } else {
  37. searchRecordsLength = 0;
  38. }
  39. }
  40. while ( searchRecordsLength == 1000 );
  41.  
  42. return searchResults;
  43.  
  44. }
  45.  
  46. function main( request, response ) {
  47. var form = {};
  48.  
  49. //this path is the submit from the first page that searches for Assemblies that contain the target item
  50. if ( request.getMethod() == 'POST' && request.getParameter( 'custpage_item_search' ) != '' && !request.getParameter( 'custpage_item_replace' ) ) {
  51. //begin form
  52. var form = nlapiCreateForm( "Select and confirm change to selected BOM's" );
  53. //extract text from the submit button
  54. var submitter = request.getParameter( 'submitter' );
  55. //extract text from the selected item
  56. var item_internalId = request.getParameter( 'custpage_item_search' );
  57. //select the text from the dropdown
  58. var search_item_name = request.getParameter( 'inpt_custpage_item_search' );
  59. //create fedex to test if this is an initial submit or a return after error
  60. var test = /^Modify\s[a-zA-Z0-9\-]+_\d+$/.test(submitter);
  61. if (test) {
  62. //name only contains the word modify
  63. var name = submitter.split( ' ' )[ 0 ];
  64. //this gives us the item name
  65. search_item_name = submitter.split( ' ' )[ 1 ].split( '_' )[ 0 ];
  66. //this gives us the item internal id to search for
  67. item_internalId = submitter.split( ' ' )[ 1 ].split( '_' )[ 1 ];
  68. }
  69. //header message
  70. var htmlHeader = form.addField( 'custpage_header', 'inlinehtml' ).setLayoutType( 'outsideabove', 'startrow' );
  71. 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>" );
  72. //label text for aboive the second dropdown that is used to choose the rpelacement item
  73. var message = 'Select Item to Replace (' + search_item_name + ') in the selected BOMs';
  74. //add dropdown of the replacement item
  75. var select = form.addField( 'custpage_item_replace', 'select', message, null );
  76. //load replacement dropdown from the items only saved search, this does not include assembly items which is what constitutes a BOM
  77. var itemResults = resultSet( 'item', 'customsearch_item_only_search', [], [] );
  78. select.addSelectOption( '', '' );
  79. itemResults.forEach( function( item, idex, list ) {
  80. select.addSelectOption( item.id, item.getValue( 'name' ) );
  81. } );
  82.  
  83. var filters = [ new nlobjSearchFilter( 'internalid', 'memberitem', 'is', item_internalId ) ] //filter the search by the item you want to replace
  84. var columns = [];
  85. var result = resultSet( 'item', 'customsearch_assembly_item_search', filters, columns );
  86.  
  87.  
  88. var htmlHeader = form.addField( 'custpage_message', 'inlinehtml' ).setLayoutType( 'startrow' );
  89. htmlHeader.setDefaultValue( "<br><br><div style='width:100%;font-size:12px'>&nbsp;</div><br><br>" );
  90.  
  91.  
  92. var ids = '';
  93.  
  94. result.forEach( function( item, index, list ) {
  95. ids += item.id + ',';
  96. var name = 'custpage_checkbox_' + item.id;
  97. form.addField( name, 'checkbox', item.getValue( 'name' ) );
  98. } );
  99.  
  100.  
  101. var foo = this;
  102. //SELECT ITEM TO REPLACE THE CHOSEN ITEM (11274) IN THE SELECTED BOMS
  103. var buttonName = 'Modify ' + search_item_name + '_' + item_internalId;
  104. form.addSubmitButton( buttonName );
  105.  
  106. response.writePage( form );
  107.  
  108. }
  109. else if ( request.getMethod() == 'POST' && request.getParameter( 'custpage_item_replace' ) != '' && request.getParameter( 'submitter' ) != 'Search' ) {
  110. var form = nlapiCreateForm( "Modify BOM Mass Update" );
  111. //grab the value for the submit button to parse out the item to replace in the BOMS
  112. var submitter = request.getParameter( 'submitter' );
  113. var name = submitter.split( ' ' )[ 0 ];
  114. var itemName = submitter.split( ' ' )[ 1 ].split( '_' )[ 0 ];
  115. var itemid = submitter.split( ' ' )[ 1 ].split( '_' )[ 1 ];
  116.  
  117. var replace_item_id = request.getParameter( 'custpage_item_replace' );
  118. var replace_item_name = request.getParameter( 'custpage_item_replace_display' );
  119.  
  120. var filters = [ new nlobjSearchFilter( 'internalid', 'memberitem', 'is', itemid ) ];
  121. var columns = [];
  122. var result = resultSet( 'item', 'customsearch_assembly_item_search', filters, columns );
  123.  
  124. var ids = '';
  125. var count = 0;
  126. result.forEach( function( item, index, list ) {
  127. var name = 'custpage_checkbox_' + item.id;
  128. if ( request.getParameter( name ) === 'T' ) {
  129. count++;
  130. var assemId = item.getId(); //gets the assembly item id
  131. var lineId = item.getValue( 'memberline' ); //gets the sublist line index
  132. var record = nlapiLoadRecord( 'assemblyitem', assemId ); //load assembly item record
  133. var quantity = record.getLineItemValue( 'member', 'quantity', lineId);
  134. record.setLineItemValue( 'member', 'item', lineId, replace_item_id );
  135. record.setLineItemValue( 'member', 'quantity', lineId, quantity );
  136. nlapiSubmitRecord(record);
  137. }
  138. } );
  139.  
  140. var message = "Successfully modified " + count + " BOM(s).";
  141. if (parseInt(count) == 0 ) {
  142. message = "No BOMs were selected please click the link and start over. "
  143. }
  144. var htmlHeader = form.addField( 'custpage_message', 'inlinehtml' ).setLayoutType( 'startrow' );
  145. var url = '/app/site/hosting/scriptlet.nl?script=53&deploy=1';
  146. 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>" );
  147.  
  148. response.writePage( form );
  149.  
  150. } else {
  151. var form = nlapiCreateForm( "Modify BOM Mass Update" );
  152.  
  153. //header message
  154. var htmlHeader = form.addField( 'custpage_header', 'inlinehtml' ).setLayoutType( 'outsideabove', 'startrow' );
  155. 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>" );
  156. //add empty dropdown and load with the saved search of inventory items
  157. var select = form.addField( 'custpage_item_search', 'select', 'Select Item to search for in BOMs', null );
  158. //pull inventory items from the saved search
  159. var itemResults = resultSet( 'item', 'customsearch_item_only_search', [], [] );
  160. select.addSelectOption( '', '' );
  161. itemResults.forEach( function( item, idex, list ) {
  162. select.addSelectOption( item.id, item.getValue( 'name' ) );
  163. } );
  164.  
  165. var htmlHidden = form.addField( 'custpage_hidden', 'inlinehtml' ).setLayoutType( 'outsideabove', 'startrow' );
  166. htmlHidden.setDefaultValue( "<input type='hidden' id='hiddenValue' value='this is a test'>" );
  167.  
  168. form.addSubmitButton( 'Search' );
  169. response.writePage( form );
  170. }
  171. }
Advertisement
Add Comment
Please, Sign In to add comment