mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-11-04 07:05:41 +00:00 
			
		
		
		
	working on updating build output tables
This commit is contained in:
		@@ -5,12 +5,10 @@ JSON API for the Build app
 | 
				
			|||||||
# -*- coding: utf-8 -*-
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
from __future__ import unicode_literals
 | 
					from __future__ import unicode_literals
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from django.utils.translation import ugettext_lazy as _
 | 
					 | 
				
			||||||
from django.shortcuts import get_object_or_404
 | 
					from django.shortcuts import get_object_or_404
 | 
				
			||||||
from django.conf.urls import url, include
 | 
					from django.conf.urls import url, include
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from rest_framework import filters, generics
 | 
					from rest_framework import filters, generics
 | 
				
			||||||
from rest_framework.serializers import ValidationError
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
from django_filters.rest_framework import DjangoFilterBackend
 | 
					from django_filters.rest_framework import DjangoFilterBackend
 | 
				
			||||||
from django_filters import rest_framework as rest_filters
 | 
					from django_filters import rest_framework as rest_filters
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -218,26 +218,21 @@
 | 
				
			|||||||
        <h4>{% trans "Incomplete Build Outputs" %}</h4>
 | 
					        <h4>{% trans "Incomplete Build Outputs" %}</h4>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
    <div class='panel-content'>
 | 
					    <div class='panel-content'>
 | 
				
			||||||
        <div class='btn-group' role='group'>
 | 
					 | 
				
			||||||
        {% if build.active %}
 | 
					        {% if build.active %}
 | 
				
			||||||
 | 
					        <div class='btn-group' role='group' id='build-output-toolbar'>
 | 
				
			||||||
            <button class='btn btn-primary' type='button' id='btn-create-output' title='{% trans "Create new build output" %}'>
 | 
					            <button class='btn btn-primary' type='button' id='btn-create-output' title='{% trans "Create new build output" %}'>
 | 
				
			||||||
                <span class='fas fa-plus-circle'></span> {% trans "Create New Output" %}
 | 
					                <span class='fas fa-plus-circle'></span> {% trans "Create New Output" %}
 | 
				
			||||||
            </button>
 | 
					            </button>
 | 
				
			||||||
            {% endif %}
 | 
					
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        {% if build.incomplete_outputs %}
 | 
					 | 
				
			||||||
        <div class="panel-group" id="build-output-accordion" role="tablist" aria-multiselectable="true">
 | 
					        <div class="panel-group" id="build-output-accordion" role="tablist" aria-multiselectable="true">
 | 
				
			||||||
            {% for item in build.incomplete_outputs %}
 | 
					            {% for item in build.incomplete_outputs %}
 | 
				
			||||||
            {% include "build/allocation_card.html" with item=item tracked_items=build.has_tracked_bom_items %}
 | 
					            {% include "build/allocation_card.html" with item=item tracked_items=build.has_tracked_bom_items %}
 | 
				
			||||||
            {% endfor %}
 | 
					            {% endfor %}
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
        {% else %}
 | 
					        
 | 
				
			||||||
        <div class='alert alert-block alert-info'>
 | 
					        <table class='table table-striped table-condensed' id='build-output-table' data-toolbar='#build-output-toolbar'></table>
 | 
				
			||||||
            <strong>{% trans "Create a new build output" %}</strong><br>
 | 
					 | 
				
			||||||
            {% trans "No incomplete build outputs remain." %}<br>
 | 
					 | 
				
			||||||
            {% trans "Create a new build output using the button above" %}
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
        {% endif %}
 | 
					        {% endif %}
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
    {% endif %}
 | 
					    {% endif %}
 | 
				
			||||||
@@ -321,8 +316,22 @@ var buildInfo = {
 | 
				
			|||||||
    {% if build.take_from %}
 | 
					    {% if build.take_from %}
 | 
				
			||||||
    source_location: {{ build.take_from.pk }},
 | 
					    source_location: {{ build.take_from.pk }},
 | 
				
			||||||
    {% endif %}
 | 
					    {% endif %}
 | 
				
			||||||
 | 
					    {% if build.has_tracked_bom_items %}
 | 
				
			||||||
 | 
					    tracked_parts: true,
 | 
				
			||||||
 | 
					    {% else %}
 | 
				
			||||||
 | 
					    tracked_parts: false,
 | 
				
			||||||
 | 
					    {% endif %}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% if build.active %}
 | 
				
			||||||
 | 
					loadBuildOutputTable(
 | 
				
			||||||
 | 
					    buildInfo,
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{% for item in build.incomplete_outputs %}
 | 
					{% for item in build.incomplete_outputs %}
 | 
				
			||||||
// Get the build output as a javascript object
 | 
					// Get the build output as a javascript object
 | 
				
			||||||
inventreeGet('{% url 'api-stock-detail' item.pk %}', {},
 | 
					inventreeGet('{% url 'api-stock-detail' item.pk %}', {},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,6 @@ JSON API for the Order app
 | 
				
			|||||||
# -*- coding: utf-8 -*-
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
from __future__ import unicode_literals
 | 
					from __future__ import unicode_literals
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from django.utils.translation import ugettext_lazy as _
 | 
					 | 
				
			||||||
from django.conf.urls import url, include
 | 
					from django.conf.urls import url, include
 | 
				
			||||||
from django.db.models import Q, F
 | 
					from django.db.models import Q, F
 | 
				
			||||||
from django.shortcuts import get_object_or_404
 | 
					from django.shortcuts import get_object_or_404
 | 
				
			||||||
@@ -14,7 +13,6 @@ from django_filters import rest_framework as rest_filters
 | 
				
			|||||||
from rest_framework import generics
 | 
					from rest_framework import generics
 | 
				
			||||||
from rest_framework import filters, status
 | 
					from rest_framework import filters, status
 | 
				
			||||||
from rest_framework.response import Response
 | 
					from rest_framework.response import Response
 | 
				
			||||||
from rest_framework.serializers import ValidationError
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from InvenTree.filters import InvenTreeOrderingFilter
 | 
					from InvenTree.filters import InvenTreeOrderingFilter
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -108,10 +108,64 @@ function newBuildOrder(options={}) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Construct a set of output buttons for a particular build output
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					function makeBuildOutputButtons(output_id, build_info, options={}) {
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					    var html = `<div class='btn-group float-right' role='group'>`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Tracked parts? Must be individually allocated
 | 
				
			||||||
 | 
					    if (build_info.tracked_parts) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Add a button to allocate stock against this build output
 | 
				
			||||||
 | 
					        html += makeIconButton(
 | 
				
			||||||
 | 
					            'fa-sign-in-alt icon-blue',
 | 
				
			||||||
 | 
					            'button-output-allocate',
 | 
				
			||||||
 | 
					            output_id,
 | 
				
			||||||
 | 
					            '{% trans "Allocate stock items to this build output" %}',
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Add a button to unallocate stock from this build output
 | 
				
			||||||
 | 
					        html += makeIconButton(
 | 
				
			||||||
 | 
					            'fa-minus-circle icon-red',
 | 
				
			||||||
 | 
					            'build-output-unallocate',
 | 
				
			||||||
 | 
					            output_id,
 | 
				
			||||||
 | 
					            '{% trans "Unallocate stock from build output" %}',
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Add a button to "complete" this build output
 | 
				
			||||||
 | 
					    html += makeIconButton(
 | 
				
			||||||
 | 
					        'fa-check-circle icon-green',
 | 
				
			||||||
 | 
					        'build-output-complete',
 | 
				
			||||||
 | 
					        output_id,
 | 
				
			||||||
 | 
					        '{% trans "Complete build output" %}',
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Add a button to "delete" this build output
 | 
				
			||||||
 | 
					    html += makeIconButton(
 | 
				
			||||||
 | 
					        'fa-trash-alt icon-red',
 | 
				
			||||||
 | 
					        'button-output-delete',
 | 
				
			||||||
 | 
					        output_id,
 | 
				
			||||||
 | 
					        '{% trans "Delete build output" %}',
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    html += `</div>`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return html;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// TODO "delete me"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function makeBuildOutputActionButtons(output, buildInfo, lines) {
 | 
					function makeBuildOutputActionButtons(output, buildInfo, lines) {
 | 
				
			||||||
    /* Generate action buttons for a build output.
 | 
					    /* Generate action buttons for a build output.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    var todo = "delete this function ok";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var buildId = buildInfo.pk;
 | 
					    var buildId = buildInfo.pk;
 | 
				
			||||||
    var partId = buildInfo.part;
 | 
					    var partId = buildInfo.part;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -357,9 +411,100 @@ function loadBuildOrderAllocationTable(table, options={}) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function loadBuildOutputAllocationTable(buildInfo, output, options={}) {
 | 
					/*
 | 
				
			||||||
    /*
 | 
					 * Display a "build output" table for a particular build.
 | 
				
			||||||
     * Load the "allocation table" for a particular build output.
 | 
					 *
 | 
				
			||||||
 | 
					 * This displays a list of "active" (i.e. "in production") build outputs for a given build
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					function loadBuildOutputTable(build_info, options={}) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    var table = options.table || '#build-output-table';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    var params = options.params || {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Mandatory query filters
 | 
				
			||||||
 | 
					    params.part_detail = true;
 | 
				
			||||||
 | 
					    params.is_building = true;
 | 
				
			||||||
 | 
					    params.build = build_info.pk;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    var filters = {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (var key in params) {
 | 
				
			||||||
 | 
					        filters[key] = params[key];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // TODO: Initialize filter list
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $(table).inventreeTable({
 | 
				
			||||||
 | 
					        url: '{% url "api-stock-list" %}',
 | 
				
			||||||
 | 
					        queryParams: filters,
 | 
				
			||||||
 | 
					        original: params,
 | 
				
			||||||
 | 
					        showColumns: true,
 | 
				
			||||||
 | 
					        name: 'build-outputs',
 | 
				
			||||||
 | 
					        sortable: true,
 | 
				
			||||||
 | 
					        search: true,
 | 
				
			||||||
 | 
					        sidePagination: 'server',
 | 
				
			||||||
 | 
					        formatNoMatches: function() {
 | 
				
			||||||
 | 
					            return '{% trans "No active build outputs found" %}';
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        onPostBody: function() {
 | 
				
			||||||
 | 
					            // TODO
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        columns: [
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                field: 'part',
 | 
				
			||||||
 | 
					                title: '{% trans "Part" %}',
 | 
				
			||||||
 | 
					                formatter: function(value, row) {
 | 
				
			||||||
 | 
					                    var thumb = row.part_detail.thumbnail;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    return imageHoverIcon(thumb) + row.part_detail.full_name + makePartIcons(row.part_detail);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                field: 'quantity',
 | 
				
			||||||
 | 
					                title: '{% trans "Quantity" %}',
 | 
				
			||||||
 | 
					                formatter: function(value, row) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    var url = `/stock/item/${row.pk}/`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    var text = '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if (row.serial && row.quantity == 1) {
 | 
				
			||||||
 | 
					                        text = `{% trans "Serial Number" %}: ${row.serial}`;
 | 
				
			||||||
 | 
					                    } else {
 | 
				
			||||||
 | 
					                        text = `{% trans "Quantity" %}: ${row.quantity}`;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    return renderLink(text, url);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                field: 'allocated',
 | 
				
			||||||
 | 
					                title: '{% trans "Allocated" %}',
 | 
				
			||||||
 | 
					                formatter: function(value, row) {
 | 
				
			||||||
 | 
					                    return "TODO";
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                field: 'actions',
 | 
				
			||||||
 | 
					                title: '',
 | 
				
			||||||
 | 
					                formatter: function(value, row) {
 | 
				
			||||||
 | 
					                    return makeBuildOutputButtons(
 | 
				
			||||||
 | 
					                        row.pk,
 | 
				
			||||||
 | 
					                        build_info,
 | 
				
			||||||
 | 
					                    );
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        ]
 | 
				
			||||||
 | 
					    }); 
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Display the "allocation table" for a particular build output.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * This displays a table of required allocations for a particular build output
 | 
				
			||||||
 * 
 | 
					 * 
 | 
				
			||||||
 * Args:
 | 
					 * Args:
 | 
				
			||||||
 * - buildId: The PK of the Build object
 | 
					 * - buildId: The PK of the Build object
 | 
				
			||||||
@@ -368,6 +513,8 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) {
 | 
				
			|||||||
 * - options:
 | 
					 * - options:
 | 
				
			||||||
 * -- table: The #id of the table (will be auto-calculated if not provided)
 | 
					 * -- table: The #id of the table (will be auto-calculated if not provided)
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					function loadBuildOutputAllocationTable(buildInfo, output, options={}) {
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var buildId = buildInfo.pk;
 | 
					    var buildId = buildInfo.pk;
 | 
				
			||||||
    var partId = buildInfo.part;
 | 
					    var partId = buildInfo.part;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user