mirror of
https://github.com/frappe/erpnext.git
synced 2026-06-07 07:02:54 +00:00
[enhancement] stock balance page
This commit is contained in:
0
erpnext/stock/page/stock_balance/__init__.py
Normal file
0
erpnext/stock/page/stock_balance/__init__.py
Normal file
32
erpnext/stock/page/stock_balance/stock_balance.html
Normal file
32
erpnext/stock/page/stock_balance/stock_balance.html
Normal file
@@ -0,0 +1,32 @@
|
||||
<div class="padding">
|
||||
<div class="row" style="margin-bottom: 15px;">
|
||||
<div class="col-sm-8"></div>
|
||||
<div class="col-sm-4">
|
||||
<button class="btn btn-default btn-xs pull-right btn-order"
|
||||
data-value="desc" style="margin-left: 10px;">
|
||||
<span class="octicon octicon-triangle-down"></span></button>
|
||||
<div class="dropdown pull-right" data-value="actual_qty">
|
||||
<a class="text-muted dropdown-toggle small"
|
||||
data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
||||
{{ __("Actual quantity") }}
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a class="option" data-value="actual_qty">
|
||||
{{ __("Actual quantity") }}</a></li>
|
||||
<li><a class="option" data-value="reserved_qty">
|
||||
{{ __("Reserved for sale") }}</a></li>
|
||||
<li><a class="option" data-value="reserved_qty_for_production">
|
||||
{{ __("Reserved for manufacturing") }}</a></li>
|
||||
<li><a class="option" data-value="projected_qty">
|
||||
{{ __("Projected quantity") }}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="result list-group">
|
||||
|
||||
</div>
|
||||
<div class="more hidden" style="padding-top: 15px;">
|
||||
<a class="btn btn-default btn-xs btn-more">More</a>
|
||||
</div>
|
||||
</div>
|
||||
109
erpnext/stock/page/stock_balance/stock_balance.js
Normal file
109
erpnext/stock/page/stock_balance/stock_balance.js
Normal file
@@ -0,0 +1,109 @@
|
||||
{% include 'erpnext/stock/doctype/item/item_dashboard.html' %}
|
||||
|
||||
frappe.pages['stock-balance'].on_page_load = function(wrapper) {
|
||||
var page = frappe.ui.make_app_page({
|
||||
parent: wrapper,
|
||||
title: 'Stock Balance',
|
||||
single_column: true
|
||||
});
|
||||
|
||||
var warehouse_field = page.add_field({
|
||||
fieldname: 'wareshouse',
|
||||
label: __('Warehouse'),
|
||||
fieldtype:'Link',
|
||||
options:'Warehouse',
|
||||
change: function() {
|
||||
page.start = 0;
|
||||
refresh()
|
||||
}
|
||||
});
|
||||
|
||||
var item_field = page.add_field({
|
||||
fieldname: 'item_code',
|
||||
label: __('Item'),
|
||||
fieldtype:'Link',
|
||||
options:'Item',
|
||||
change: function() {
|
||||
page.start = 0;
|
||||
refresh()
|
||||
}
|
||||
});
|
||||
|
||||
page.start = 0;
|
||||
page.sort_by = 'actual_qty';
|
||||
page.sort_order = 'desc';
|
||||
|
||||
page.content = $(frappe.render_template('stock_balance')).appendTo(page.main);
|
||||
page.result = page.content.find('.result');
|
||||
|
||||
// more
|
||||
page.content.find('.btn-more').on('click', function() {
|
||||
page.start += 20;
|
||||
refresh();
|
||||
});
|
||||
|
||||
// order
|
||||
page.content.find('.btn-order').on('click', function() {
|
||||
var btn = $(this);
|
||||
var order = $(this).attr('data-value')==='desc' ? 'asc' : 'desc';
|
||||
|
||||
btn.attr('data-value', order);
|
||||
page.sort_order = order;
|
||||
btn.find('.octicon')
|
||||
.removeClass('octicon-triangle-' + (order==='asc' ? 'down' : 'up'))
|
||||
.addClass('octicon-triangle-' + (order==='desc' ? 'down' : 'up'));
|
||||
page.start = 0;
|
||||
refresh();
|
||||
});
|
||||
|
||||
// select field
|
||||
page.content.find('.dropdown a.option').on('click', function() {
|
||||
page.sort_by = $(this).attr('data-value');
|
||||
page.content.find('.dropdown .dropdown-toggle').html($(this).html());
|
||||
refresh();
|
||||
});
|
||||
|
||||
var refresh = function() {
|
||||
var item_code = item_field.get_value();
|
||||
var warehouse = warehouse_field.get_value();
|
||||
frappe.call({
|
||||
method: 'erpnext.stock.page.stock_balance.stock_balance.get_data',
|
||||
args: {
|
||||
item_code: item_code,
|
||||
warehouse: warehouse,
|
||||
start: page.start,
|
||||
sort_by: page.sort_by,
|
||||
sort_order: page.sort_order,
|
||||
},
|
||||
callback: function(r) {
|
||||
render(r.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var render = function(data) {
|
||||
if(page.start===0) {
|
||||
page.max_count = 0;
|
||||
page.result.empty();
|
||||
}
|
||||
|
||||
var context = erpnext.get_item_dashboard_data(data, page.max_count);
|
||||
page.max_count = context.max_count;
|
||||
|
||||
// show more button
|
||||
if(data.length===21) {
|
||||
page.content.find('.more').removeClass('hidden');
|
||||
|
||||
// remove the last element
|
||||
data.splice(-1);
|
||||
} else {
|
||||
page.content.find('.more').addClass('hidden');
|
||||
}
|
||||
|
||||
$(frappe.render_template('item_dashboard', context)).appendTo(page.result);
|
||||
|
||||
}
|
||||
|
||||
refresh();
|
||||
|
||||
}
|
||||
22
erpnext/stock/page/stock_balance/stock_balance.json
Normal file
22
erpnext/stock/page/stock_balance/stock_balance.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"content": null,
|
||||
"creation": "2016-04-21 04:59:00.141546",
|
||||
"docstatus": 0,
|
||||
"doctype": "Page",
|
||||
"idx": 0,
|
||||
"modified": "2016-04-21 05:04:30.228526",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Stock",
|
||||
"name": "stock-balance",
|
||||
"owner": "Administrator",
|
||||
"page_name": "stock-balance",
|
||||
"roles": [
|
||||
{
|
||||
"role": "Stock User"
|
||||
}
|
||||
],
|
||||
"script": null,
|
||||
"standard": "Yes",
|
||||
"style": null,
|
||||
"title": "Stock Balance"
|
||||
}
|
||||
14
erpnext/stock/page/stock_balance/stock_balance.py
Normal file
14
erpnext/stock/page/stock_balance/stock_balance.py
Normal file
@@ -0,0 +1,14 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import frappe
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_data(item_code=None, warehouse=None, start=0, sort_by='actual_qty', sort_order='desc'):
|
||||
filters = {}
|
||||
if item_code:
|
||||
filters = {'item_code': item_code }
|
||||
if warehouse:
|
||||
filters = {'warehouse': warehouse }
|
||||
return frappe.get_list("Bin", filters=filters, fields=['item_code', 'warehouse',
|
||||
'projected_qty', 'reserved_qty', 'reserved_qty_for_production', 'actual_qty'],
|
||||
order_by='{0} {1}'.format(sort_by, sort_order), start=start, page_length = 21)
|
||||
Reference in New Issue
Block a user