mirror of
https://github.com/inventree/InvenTree.git
synced 2025-07-01 03:00:54 +00:00
Project code support (#4636)
* Support image uploads in the "notes" markdown fields - Implemented using the existing EasyMDE library - Copy / paste support - Drag / drop support * Remove debug message * Updated API version * Better UX when saving notes * Pin PIP version (for testing) * Bug fixes - Fix typo - Use correct serializer type * Add unit testing * Update role permissions * Typo fix * Update migration file * Adds a notes mixin class to be used for refactoring * Refactor existing models with notes to use the new mixin * Add helper function for finding all model types with a certain mixin * Refactor barcode plugin to use new method * Typo fix * Add daily task to delete old / unused notes * Add ProjectCode model (cherry picked from commit 382a0a2fc32c930d46ed3fe0c6d2cae654c2209d) * Adds IsStaffOrReadyOnly permissions - Authenticated users get read-only access - Staff users get read/write access (cherry picked from commit 53d04da86c4c866fd9c909d147d93844186470b4) * Adds API endpoints for project codes (cherry picked from commit 5ae1da23b2eae4e1168bc6fe28a3544dedc4a1b4) * Add migration file for projectcode model (cherry picked from commit 5f8717712c65df853ea69907d33e185fd91df7ee) * Add project code configuration page to the global settings view * Add 'project code' field to orders * Add ability to set / edit the project code for various order models * Add project code info to order list tables * Add configuration options for project code integration * Allow orders to be filtered by project code * Refactor table_filters.js - Allow orders to be filtered dynamically by project code * Bump API version * Fixes * Add resource mixin for exporting project code in order list * Add "has_project_code" filter * javascript fix * Edit / delete project codes via API - Also refactor some existing JS * Move MetadataMixin to InvenTree.models To prevent circular imports (cherry picked from commit d23b013881eaffe612dfbfcdfc5dff6d729068c6) * Fixes for circular imports * Add metadata for ProjectCode model * Add Metadata API endpoint for ProjectCode * Add unit testing for ProjectCode API endpoints
This commit is contained in:
@ -1123,9 +1123,9 @@ function loadSupplierPartTable(table, url, options) {
|
||||
var params = options.params || {};
|
||||
|
||||
// Load filters
|
||||
var filters = loadTableFilters('supplier-part', params);
|
||||
var filters = loadTableFilters('supplierpart', params);
|
||||
|
||||
setupFilterList('supplier-part', $(table));
|
||||
setupFilterList('supplierpart', $(table));
|
||||
|
||||
$(table).inventreeTable({
|
||||
url: url,
|
||||
|
@ -16,6 +16,7 @@
|
||||
renderOwner,
|
||||
renderPart,
|
||||
renderPartCategory,
|
||||
renderProjectCode,
|
||||
renderReturnOrder,
|
||||
renderStockItem,
|
||||
renderStockLocation,
|
||||
@ -78,6 +79,8 @@ function getModelRenderer(model) {
|
||||
return renderUser;
|
||||
case 'group':
|
||||
return renderGroup;
|
||||
case 'projectcode':
|
||||
return renderProjectCode;
|
||||
default:
|
||||
// Un-handled model type
|
||||
console.error(`Rendering not implemented for model '${model}'`);
|
||||
@ -476,3 +479,16 @@ function renderSupplierPart(data, parameters={}) {
|
||||
parameters
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// Renderer for "ProjectCode" model
|
||||
function renderProjectCode(data, parameters={}) {
|
||||
|
||||
return renderModel(
|
||||
{
|
||||
text: data.code,
|
||||
textSecondary: data.description,
|
||||
},
|
||||
parameters
|
||||
);
|
||||
}
|
||||
|
@ -62,6 +62,9 @@ function purchaseOrderFields(options={}) {
|
||||
}
|
||||
},
|
||||
supplier_reference: {},
|
||||
project_code: {
|
||||
icon: 'fa-list',
|
||||
},
|
||||
target_date: {
|
||||
icon: 'fa-calendar-alt',
|
||||
},
|
||||
@ -126,6 +129,10 @@ function purchaseOrderFields(options={}) {
|
||||
};
|
||||
}
|
||||
|
||||
if (!global_settings.PROJECT_CODES_ENABLED) {
|
||||
delete fields.project_code;
|
||||
}
|
||||
|
||||
return fields;
|
||||
}
|
||||
|
||||
@ -1614,6 +1621,18 @@ function loadPurchaseOrderTable(table, options) {
|
||||
field: 'description',
|
||||
title: '{% trans "Description" %}',
|
||||
},
|
||||
{
|
||||
field: 'project_code',
|
||||
title: '{% trans "Project Code" %}',
|
||||
switchable: global_settings.PROJECT_CODES_ENABLED,
|
||||
visible: global_settings.PROJECT_CODES_ENABLED,
|
||||
sortable: true,
|
||||
formatter: function(value, row) {
|
||||
if (row.project_code_detail) {
|
||||
return `<span title='${row.project_code_detail.description}'>${row.project_code_detail.code}</span>`;
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'status',
|
||||
title: '{% trans "Status" %}',
|
||||
|
@ -46,6 +46,9 @@ function returnOrderFields(options={}) {
|
||||
}
|
||||
},
|
||||
customer_reference: {},
|
||||
project_code: {
|
||||
icon: 'fa-list',
|
||||
},
|
||||
target_date: {
|
||||
icon: 'fa-calendar-alt',
|
||||
},
|
||||
@ -69,6 +72,10 @@ function returnOrderFields(options={}) {
|
||||
}
|
||||
};
|
||||
|
||||
if (!global_settings.PROJECT_CODES_ENABLED) {
|
||||
delete fields.project_code;
|
||||
}
|
||||
|
||||
return fields;
|
||||
}
|
||||
|
||||
@ -271,6 +278,18 @@ function loadReturnOrderTable(table, options={}) {
|
||||
field: 'description',
|
||||
title: '{% trans "Description" %}',
|
||||
},
|
||||
{
|
||||
field: 'project_code',
|
||||
title: '{% trans "Project Code" %}',
|
||||
switchable: global_settings.PROJECT_CODES_ENABLED,
|
||||
visible: global_settings.PROJECT_CODES_ENABLED,
|
||||
sortable: true,
|
||||
formatter: function(value, row) {
|
||||
if (row.project_code_detail) {
|
||||
return `<span title='${row.project_code_detail.description}'>${row.project_code_detail.code}</span>`;
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
sortable: true,
|
||||
field: 'status',
|
||||
|
@ -59,6 +59,9 @@ function salesOrderFields(options={}) {
|
||||
}
|
||||
},
|
||||
customer_reference: {},
|
||||
project_code: {
|
||||
icon: 'fa-list',
|
||||
},
|
||||
target_date: {
|
||||
icon: 'fa-calendar-alt',
|
||||
},
|
||||
@ -82,6 +85,10 @@ function salesOrderFields(options={}) {
|
||||
}
|
||||
};
|
||||
|
||||
if (!global_settings.PROJECT_CODES_ENABLED) {
|
||||
delete fields.project_code;
|
||||
}
|
||||
|
||||
return fields;
|
||||
}
|
||||
|
||||
@ -739,6 +746,18 @@ function loadSalesOrderTable(table, options) {
|
||||
field: 'description',
|
||||
title: '{% trans "Description" %}',
|
||||
},
|
||||
{
|
||||
field: 'project_code',
|
||||
title: '{% trans "Project Code" %}',
|
||||
switchable: global_settings.PROJECT_CODES_ENABLED,
|
||||
visible: global_settings.PROJECT_CODES_ENABLED,
|
||||
sortable: true,
|
||||
formatter: function(value, row) {
|
||||
if (row.project_code_detail) {
|
||||
return `<span title='${row.project_code_detail.description}'>${row.project_code_detail.code}</span>`;
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
sortable: true,
|
||||
field: 'status',
|
||||
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user