mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-10-30 20:55:42 +00:00 
			
		
		
		
	Merge remote-tracking branch 'inventree/master' into variant-available
# Conflicts: # InvenTree/InvenTree/version.py
This commit is contained in:
		| @@ -77,6 +77,12 @@ | ||||
|                 {% endfor %} | ||||
|                 {% endif %} | ||||
|  | ||||
|                 {% if plugin.is_sample %} | ||||
|                 <a class='sidebar-selector' id='select-plugin-{{plugin_key}}' data-bs-parent="#sidebar"> | ||||
|                     <span class='badge bg-info rounded-pill'>{% trans "code sample" %}</span> | ||||
|                 </a> | ||||
|                 {% endif %} | ||||
|  | ||||
|                 {% if plugin.website %} | ||||
|                 <a href="{{ plugin.website }}"><span class="fas fa-globe"></span></a> | ||||
|                 {% endif %} | ||||
|   | ||||
| @@ -99,14 +99,22 @@ function renderStockItem(name, data, parameters={}, options={}) { | ||||
|  | ||||
|     var stock_detail = ''; | ||||
|  | ||||
|     if (data.serial && data.quantity == 1) { | ||||
|         stock_detail = `{% trans "Serial Number" %}: ${data.serial}`; | ||||
|     } else if (data.quantity == 0) { | ||||
|     if (data.quantity == 0) { | ||||
|         stock_detail = `<span class='badge rounded-pill bg-danger'>{% trans "No Stock"% }</span>`; | ||||
|     } else { | ||||
|         stock_detail = `{% trans "Quantity" %}: ${data.quantity}`; | ||||
|         if (data.serial && data.quantity == 1) { | ||||
|             stock_detail = `{% trans "Serial Number" %}: ${data.serial}`; | ||||
|         } else { | ||||
|             stock_detail = `{% trans "Quantity" %}: ${data.quantity}`; | ||||
|         } | ||||
|  | ||||
|         if (data.batch) { | ||||
|             stock_detail += ` - <small>{% trans "Batch" %}: ${data.batch}</small>`; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
|  | ||||
|     var html = ` | ||||
|     <span> | ||||
|         ${part_detail} | ||||
|   | ||||
| @@ -171,6 +171,9 @@ function notificationCheck(force = false) { | ||||
|             { | ||||
|                 success: function(response) { | ||||
|                     updateNotificationIndicator(response.length); | ||||
|                 }, | ||||
|                 error: function(xhr) { | ||||
|                     console.warn('Could not access server: /api/notifications'); | ||||
|                 } | ||||
|             } | ||||
|         ); | ||||
|   | ||||
| @@ -293,6 +293,7 @@ function categoryFields() { | ||||
|     return { | ||||
|         parent: { | ||||
|             help_text: '{% trans "Parent part category" %}', | ||||
|             required: false, | ||||
|         }, | ||||
|         name: {}, | ||||
|         description: {}, | ||||
|   | ||||
| @@ -107,6 +107,7 @@ function stockLocationFields(options={}) { | ||||
|     var fields = { | ||||
|         parent: { | ||||
|             help_text: '{% trans "Parent stock location" %}', | ||||
|             required: false, | ||||
|         }, | ||||
|         name: {}, | ||||
|         description: {}, | ||||
| @@ -240,9 +241,11 @@ function stockItemFields(options={}) { | ||||
|         serial: { | ||||
|             icon: 'fa-hashtag', | ||||
|         }, | ||||
|         batch: { | ||||
|             icon: 'fa-layer-group', | ||||
|         }, | ||||
|         status: {}, | ||||
|         expiry_date: {}, | ||||
|         batch: {}, | ||||
|         purchase_price: { | ||||
|             icon: 'fa-dollar-sign', | ||||
|         }, | ||||
| @@ -963,6 +966,10 @@ function adjustStock(action, items, options={}) { | ||||
|             quantity = `#${item.serial}`; | ||||
|         } | ||||
|  | ||||
|         if (item.batch) { | ||||
|             quantity += ` - <small>{% trans "Batch" %}: ${item.batch}</small>`; | ||||
|         } | ||||
|  | ||||
|         var actionInput = ''; | ||||
|  | ||||
|         if (actionTitle != null) { | ||||
| @@ -2314,6 +2321,23 @@ function loadStockTrackingTable(table, options) { | ||||
|  | ||||
|     var cols = []; | ||||
|  | ||||
|     var filterTarget = '#filter-list-stocktracking'; | ||||
|  | ||||
|     var filterKey = 'stocktracking'; | ||||
|  | ||||
|     var filters = loadTableFilters(filterKey); | ||||
|  | ||||
|     var params = options.params; | ||||
|  | ||||
|     var original = {}; | ||||
|  | ||||
|     for (var k in params) { | ||||
|         original[k] = params[k]; | ||||
|         filters[k] = params[k]; | ||||
|     } | ||||
|  | ||||
|     setupFilterList(filterKey, table, filterTarget); | ||||
|  | ||||
|     // Date | ||||
|     cols.push({ | ||||
|         field: 'date', | ||||
| @@ -2351,6 +2375,19 @@ function loadStockTrackingTable(table, options) { | ||||
|                 return html; | ||||
|             } | ||||
|  | ||||
|             // Part information | ||||
|             if (details.part) { | ||||
|                 html += `<tr><th>{% trans "Part" %}</th><td>`; | ||||
|  | ||||
|                 if (details.part_detail) { | ||||
|                     html += renderLink(details.part_detail.full_name, `/part/${details.part}/`); | ||||
|                 } else { | ||||
|                     html += `{% trans "Part information unavailable" %}`; | ||||
|                 } | ||||
|  | ||||
|                 html += `</td></tr>`; | ||||
|             } | ||||
|  | ||||
|             // Location information | ||||
|             if (details.location) { | ||||
|  | ||||
| @@ -2488,27 +2525,10 @@ function loadStockTrackingTable(table, options) { | ||||
|         } | ||||
|     }); | ||||
|  | ||||
|     /* | ||||
|     // 2021-05-11 - Ability to edit or delete StockItemTracking entries is now removed | ||||
|     cols.push({ | ||||
|         sortable: false, | ||||
|         formatter: function(value, row, index, field) { | ||||
|             // Manually created entries can be edited or deleted | ||||
|             if (false && !row.system) { | ||||
|                 var bEdit = "<button title='{% trans 'Edit tracking entry' %}' class='btn btn-entry-edit btn-outline-secondary' type='button' url='/stock/track/" + row.pk + "/edit/'><span class='fas fa-edit'/></button>"; | ||||
|                 var bDel = "<button title='{% trans 'Delete tracking entry' %}' class='btn btn-entry-delete btn-outline-secondary' type='button' url='/stock/track/" + row.pk + "/delete/'><span class='fas fa-trash-alt icon-red'/></button>"; | ||||
|  | ||||
|                 return "<div class='btn-group' role='group'>" + bEdit + bDel + "</div>"; | ||||
|             } else { | ||||
|                 return ""; | ||||
|             } | ||||
|         } | ||||
|     }); | ||||
|     */ | ||||
|  | ||||
|     table.inventreeTable({ | ||||
|         method: 'get', | ||||
|         queryParams: options.params, | ||||
|         queryParams: filters, | ||||
|         original: original, | ||||
|         columns: cols, | ||||
|         url: options.url, | ||||
|     }); | ||||
| @@ -2639,7 +2659,8 @@ function installStockItem(stock_item_id, part_id, options={}) { | ||||
|         <ul> | ||||
|             <li>{% trans "The Stock Item links to a Part which is the BOM for this Stock Item" %}</li> | ||||
|             <li>{% trans "The Stock Item is currently available in stock" %}</li> | ||||
|             <li>{% trans "The Stock Item is serialized and does not belong to another item" %}</li> | ||||
|             <li>{% trans "The Stock Item is not already installed in another item" %}</li> | ||||
|             <li>{% trans "The Stock Item is tracked by either a batch code or serial number" %}</li> | ||||
|         </ul> | ||||
|     </div>`; | ||||
|  | ||||
| @@ -2665,7 +2686,7 @@ function installStockItem(stock_item_id, part_id, options={}) { | ||||
|                     filters: { | ||||
|                         part_detail: true, | ||||
|                         in_stock: true, | ||||
|                         serialized: true, | ||||
|                         tracked: true, | ||||
|                     }, | ||||
|                     adjustFilters: function(filters, opts) { | ||||
|                         var part = getFormFieldValue('part', {}, opts); | ||||
|   | ||||
| @@ -234,10 +234,19 @@ function getAvailableTableFilters(tableKey) { | ||||
|                 title: '{% trans "Stock status" %}', | ||||
|                 description: '{% trans "Stock status" %}', | ||||
|             }, | ||||
|             has_batch: { | ||||
|                 title: '{% trans "Has batch code" %}', | ||||
|                 type: 'bool', | ||||
|             }, | ||||
|             batch: { | ||||
|                 title: '{% trans "Batch" %}', | ||||
|                 description: '{% trans "Batch code" %}', | ||||
|             }, | ||||
|             tracked: { | ||||
|                 title: '{% trans "Tracked" %}', | ||||
|                 description: '{% trans "Stock item is tracked by either batch code or serial number" %}', | ||||
|                 type: 'bool', | ||||
|             }, | ||||
|             has_purchase_price: { | ||||
|                 type: 'bool', | ||||
|                 title: '{% trans "Has purchase price" %}', | ||||
|   | ||||
		Reference in New Issue
	
	Block a user