mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-10-31 21:25:42 +00:00 
			
		
		
		
	Adds API endpoint to delete build outputs
This commit is contained in:
		| @@ -417,6 +417,145 @@ function completeBuildOutputs(build_id, outputs, options={}) { | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * Launch a modal form to delete selected build outputs | ||||
|  */ | ||||
| function deleteBuildOutputs(build_id, outputs, options={}) { | ||||
|  | ||||
|     if (outputs.length == 0) { | ||||
|         showAlertDialog( | ||||
|             '{% trans "Select Build Outputs" %}', | ||||
|             '{% trans "At least one build output must be selected" %}', | ||||
|         ); | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     // Render a single build output (StockItem) | ||||
|     function renderBuildOutput(output, opts={}) { | ||||
|         var pk = output.pk; | ||||
|  | ||||
|         var output_html = imageHoverIcon(output.part_detail.thumbnail); | ||||
|  | ||||
|         if (output.quantity == 1 && output.serial) { | ||||
|             output_html += `{% trans "Serial Number" %}: ${output.serial}`; | ||||
|         } else { | ||||
|             output_html += `{% trans "Quantity" %}: ${output.quantity}`; | ||||
|         } | ||||
|  | ||||
|         var buttons = `<div class='btn-group float-right' role='group'>`; | ||||
|  | ||||
|         buttons += makeIconButton('fa-times icon-red', 'button-row-remove', pk, '{% trans "Remove row" %}'); | ||||
|  | ||||
|         buttons += '</div>'; | ||||
|  | ||||
|         var field = constructField( | ||||
|             `outputs_output_${pk}`, | ||||
|             { | ||||
|                 type: 'raw', | ||||
|                 html: output_html, | ||||
|             }, | ||||
|             { | ||||
|                 hideLabels: true, | ||||
|             } | ||||
|         ); | ||||
|  | ||||
|         var html = ` | ||||
|         <tr id='output_row_${pk}'> | ||||
|             <td>${field}</td> | ||||
|             <td>${output.part_detail.full_name}</td> | ||||
|             <td>${buttons}</td> | ||||
|         </tr>`; | ||||
|  | ||||
|         return html; | ||||
|     } | ||||
|  | ||||
|     // Construct table entries | ||||
|     var table_entries = ''; | ||||
|  | ||||
|     outputs.forEach(function(output) { | ||||
|         table_entries += renderBuildOutput(output); | ||||
|     }); | ||||
|  | ||||
|     var html = ` | ||||
|     <table class='table table-striped table-condensed' id='build-complete-table'> | ||||
|         <thead> | ||||
|             <th colspan='2'>{% trans "Output" %}</th> | ||||
|             <th><!-- Actions --></th> | ||||
|         </thead> | ||||
|         <tbody> | ||||
|             ${table_entries} | ||||
|         </tbody> | ||||
|     </table>`; | ||||
|  | ||||
|     constructForm(`/api/build/${build_id}/delete-outputs/`, { | ||||
|         method: 'POST', | ||||
|         preFormContent: html, | ||||
|         fields: {}, | ||||
|         confirm: true, | ||||
|         title: '{% trans "Delete Build Outputs" %}', | ||||
|         afterRender: function(fields, opts) { | ||||
|             // Setup callbacks to remove outputs | ||||
|             $(opts.modal).find('.button-row-remove').click(function() { | ||||
|             var pk = $(this).attr('pk'); | ||||
|  | ||||
|             $(opts.modal).find(`#output_row_${pk}`).remove(); | ||||
|             });  | ||||
|         }, | ||||
|         onSubmit: function(fields, opts) { | ||||
|             var data = { | ||||
|                 outputs: [], | ||||
|             }; | ||||
|  | ||||
|             var output_pk_values = []; | ||||
|  | ||||
|             outputs.forEach(function(output) { | ||||
|                 var pk = output.pk; | ||||
|  | ||||
|                 var row = $(opts.modal).find(`#output_row_${pk}`); | ||||
|  | ||||
|                 if (row.exists()) { | ||||
|                     data.outputs.push({ | ||||
|                         output: pk | ||||
|                     }); | ||||
|                     output_pk_values.push(pk); | ||||
|                 } | ||||
|             }); | ||||
|  | ||||
|             opts.nested = { | ||||
|                 'outputs': output_pk_values, | ||||
|             }; | ||||
|  | ||||
|             inventreePut( | ||||
|                 opts.url, | ||||
|                 data, | ||||
|                 { | ||||
|                     method: 'POST', | ||||
|                     success: function(response) { | ||||
|                         $(opts.modal).modal('hide'); | ||||
|  | ||||
|                         if (options.success) { | ||||
|                             options.success(response); | ||||
|                         } | ||||
|                     }, | ||||
|                     error: function(xhr) { | ||||
|                         switch (xhr.status) { | ||||
|                         case 400: | ||||
|                             handleFormErrors(xhr.responseJSON, fields, opts); | ||||
|                             break; | ||||
|                         default: | ||||
|                             $(opts.modal).modal('hide'); | ||||
|                             showApiError(xhr, opts.url); | ||||
|                             break; | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             ) | ||||
|         } | ||||
|     }); | ||||
| } | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * Load a table showing all the BuildOrder allocations for a given part | ||||
|  */ | ||||
| @@ -604,15 +743,17 @@ function loadBuildOutputTable(build_info, options={}) { | ||||
|         $(table).find('.button-output-delete').click(function() { | ||||
|             var pk = $(this).attr('pk'); | ||||
|  | ||||
|             // TODO: Move this to the API | ||||
|             launchModalForm( | ||||
|                 `/build/${build_info.pk}/delete-output/`, | ||||
|             var output = $(table).bootstrapTable('getRowByUniqueId', pk); | ||||
|  | ||||
|             deleteBuildOutputs( | ||||
|                 build_info.pk, | ||||
|                 [ | ||||
|                     output, | ||||
|                 ], | ||||
|                 { | ||||
|                     data: { | ||||
|                         output: pk | ||||
|                     }, | ||||
|                     success: function() { | ||||
|                         $(table).bootstrapTable('refresh'); | ||||
|                         $('#build-stock-table').bootstrapTable('refresh'); | ||||
|                     } | ||||
|                 } | ||||
|             ); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user