mirror of
https://github.com/frappe/erpnext.git
synced 2026-06-07 23:22:52 +00:00
moved directory structure
This commit is contained in:
1
stock/search_criteria/stock_report/__init__.py
Normal file
1
stock/search_criteria/stock_report/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from __future__ import unicode_literals
|
||||
89
stock/search_criteria/stock_report/stock_report.js
Normal file
89
stock/search_criteria/stock_report/stock_report.js
Normal file
@@ -0,0 +1,89 @@
|
||||
// ERPNext - web based ERP (http://erpnext.com)
|
||||
// Copyright (C) 2012 Web Notes Technologies Pvt Ltd
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
//233
|
||||
report.customize_filters = function() {
|
||||
this.mytabs.items['Select Columns'].hide()
|
||||
this.mytabs.items['More Filters'].hide()
|
||||
this.hide_all_filters();
|
||||
this.add_filter({fieldname:'based_on', label:'Based On', fieldtype:'Select', options:'Warehouse'+NEWLINE+'Item Code',ignore : 1,parent:'Stock Ledger Entry'});
|
||||
this.filter_fields_dict['Stock Ledger Entry'+FILTER_SEP +'To Posting Date'].df.filter_hide = 0;
|
||||
this.filter_fields_dict['Stock Ledger Entry'+FILTER_SEP +'Item Code'].df.filter_hide = 0;
|
||||
this.filter_fields_dict['Stock Ledger Entry'+FILTER_SEP +'Warehouse'].df.filter_hide = 0;
|
||||
this.filter_fields_dict['Stock Ledger Entry'+FILTER_SEP +'Warehouse Type'].df.filter_hide = 0;
|
||||
this.filter_fields_dict['Stock Ledger Entry'+FILTER_SEP +'From Posting Date'].df.filter_hide = 1;
|
||||
|
||||
this.filter_fields_dict['Stock Ledger Entry'+FILTER_SEP +'Item Code'].df.in_first_page = 1;
|
||||
this.filter_fields_dict['Stock Ledger Entry'+FILTER_SEP +'Warehouse'].df.in_first_page = 1;
|
||||
this.filter_fields_dict['Stock Ledger Entry'+FILTER_SEP +'Based On'].df.in_first_page = 1;
|
||||
this.filter_fields_dict['Stock Ledger Entry'+FILTER_SEP +'Warehouse Type'].df.in_first_page = 1;
|
||||
this.filter_fields_dict['Stock Ledger Entry'+FILTER_SEP +'To Posting Date'].df.in_first_page = 1;
|
||||
}
|
||||
|
||||
|
||||
report.get_query = function(){
|
||||
based_on = this.filter_fields_dict['Stock Ledger Entry'+FILTER_SEP+'Based On'].get_value();
|
||||
as_on = this.filter_fields_dict['Stock Ledger Entry'+FILTER_SEP+'To Posting Date'].get_value();
|
||||
warehouse = this.filter_fields_dict['Stock Ledger Entry'+FILTER_SEP+'Warehouse'].get_value();
|
||||
warehouse_type = this.filter_fields_dict['Stock Ledger Entry'+FILTER_SEP+'Warehouse Type'].get_value();
|
||||
item_code = this.filter_fields_dict['Stock Ledger Entry'+FILTER_SEP+'Item Code'].get_value();
|
||||
|
||||
cond = '';
|
||||
date_cond = '';
|
||||
tables = '';
|
||||
cols = '';
|
||||
group_by = '';
|
||||
ware_type_cond = '';
|
||||
war = '';
|
||||
if(!as_on) as_on = get_today();
|
||||
|
||||
date_cond = repl(' AND `tabStock Ledger Entry`.posting_date <= "%(as_on)s" ', {as_on:as_on});
|
||||
|
||||
if(warehouse_type.length > 0 && warehouse_type != ''){
|
||||
for(var i = 0; i<warehouse_type.length; i++) war += "'"+warehouse_type[i]+"',";
|
||||
ware_type_cond = repl(' AND `tabWarehouse`.warehouse_type IN (%(war)s)', {war: war.substr(0,war.length-1)})
|
||||
}
|
||||
|
||||
if(based_on.length == 1 && based_on[0]){
|
||||
if(based_on[0] == 'Item Code'){
|
||||
cols = '`tabItem`.name AS "Item Code", `tabItem`.item_name AS "Item Name", `tabItem`.description AS "Description", `tabItem`.stock_uom AS "Stock UOM"';
|
||||
cond = '(IFNULL(`tabItem`.`end_of_life`,"") = "" OR `tabItem`.`end_of_life` = "0000-00-00" OR `tabItem`.`end_of_life` > NOW()) AND `tabItem`.is_stock_item = "Yes"';
|
||||
if(item_code) cond += repl(' AND `tabItem`.name = %(item)s', {item:'"'+item_code+'"'});
|
||||
cond += ' AND `tabStock Ledger Entry`.item_code = `tabItem`.name'
|
||||
tables = '`tabItem`';
|
||||
group_by = '`tabStock Ledger Entry`.item_code';
|
||||
}
|
||||
else if(based_on[0] == 'Warehouse'){
|
||||
cols = '`tabWarehouse`.name AS "Warehouse", `tabWarehouse`.warehouse_type AS "Warehouse Type"';
|
||||
cond = '`tabWarehouse`.docstatus < 2'
|
||||
if(warehouse) cond += repl(' AND `tabWarehouse`.name = %(warehouse)s', {warehouse:'"'+warehouse+'"'});
|
||||
cond += repl(' AND `tabStock Ledger Entry`.warehouse = `tabWarehouse`.name %(ware_type_cond)s', {ware_type_cond:ware_type_cond})
|
||||
tables = '`tabWarehouse`';
|
||||
group_by = '`tabStock Ledger Entry`.warehouse';
|
||||
}
|
||||
} else {
|
||||
cols = '`tabItem`.name AS "Item Code", `tabItem`.item_name AS "Item Name", `tabItem`.description AS "Description", `tabItem`.stock_uom AS "Stock UOM", `tabWarehouse`.name AS "Warehouse", `tabWarehouse`.warehouse_type AS "Warehouse Type"';
|
||||
cond = '(IFNULL(`tabItem`.`end_of_life`,"") = "" OR `tabItem`.`end_of_life` = "0000-00-00" OR `tabItem`.`end_of_life` > NOW()) AND `tabItem`.is_stock_item = "Yes" AND `tabWarehouse`.docstatus < 2';
|
||||
if(item_code) cond += repl(" AND `tabItem`.name = %(item)s", {item:"'"+item_code+"'"});
|
||||
if(warehouse) cond += repl(" AND `tabWarehouse`.name = %(warehouse)s", {warehouse:"'"+warehouse+"'"});
|
||||
cond += repl(' AND `tabStock Ledger Entry`.item_code = `tabItem`.name AND `tabStock Ledger Entry`.warehouse = `tabWarehouse`.name %(ware_type_cond)s', {ware_type_cond:ware_type_cond})
|
||||
tables = '`tabItem`, `tabWarehouse`';
|
||||
group_by = '`tabStock Ledger Entry`.item_code, `tabStock Ledger Entry`.warehouse';
|
||||
}
|
||||
|
||||
q = repl("SELECT %(cols)s FROM %(tables)s, `tabStock Ledger Entry` WHERE %(cond)s %(date_cond)s GROUP BY %(group_by)s", {cols:cols, tables:tables, cond:cond, date_cond:date_cond, group_by:group_by});
|
||||
return q;
|
||||
}
|
||||
88
stock/search_criteria/stock_report/stock_report.py
Normal file
88
stock/search_criteria/stock_report/stock_report.py
Normal file
@@ -0,0 +1,88 @@
|
||||
# ERPNext - web based ERP (http://erpnext.com)
|
||||
# Copyright (C) 2012 Web Notes Technologies Pvt Ltd
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from __future__ import unicode_literals
|
||||
cols, columns = [], []
|
||||
# Add columns
|
||||
# ------------
|
||||
based_on = filter_values.get('based_on').split(NEWLINE)
|
||||
if len(based_on) == 1 and based_on[0]:
|
||||
if based_on[0] == 'Item Code':
|
||||
cols = ["Item Code", "Item Name", "Description", "Stock UOM"]
|
||||
elif based_on[0] == 'Warehouse':
|
||||
cols = ["Warehouse", "Warehouse Type"]
|
||||
else:
|
||||
cols = ["Item Code", "Item Name", "Description", "Stock UOM", "Warehouse", "Warehouse Type"]
|
||||
|
||||
for d in cols:
|
||||
columns.append([d,'Data','150px',''])
|
||||
|
||||
columns.append(['Closing Balance','Currency','200px',''])
|
||||
columns.append(['Stock Value','Currency','150px',''])
|
||||
|
||||
posting_date = filter_values.get('posting_date1')
|
||||
if not posting_date: posting_date = nowdate()
|
||||
|
||||
for c in columns:
|
||||
colnames.append(c[0])
|
||||
coltypes.append(c[1])
|
||||
colwidths.append(c[2])
|
||||
coloptions.append(c[3])
|
||||
col_idx[c[0]] = len(colnames)-1
|
||||
|
||||
def get_values(msgprint, flt, posting_date, item_code = '', warehouse = ''):
|
||||
cl_bal, stock_val = 0,0
|
||||
if item_code and not warehouse:
|
||||
war_list = sql("select distinct warehouse from `tabStock Ledger Entry` where item_code = %s", item_code)
|
||||
for d in war_list:
|
||||
act = sql("select bin_aqat, stock_value from `tabStock Ledger Entry` where item_code = %s and warehouse = %s and ifnull(is_cancelled, 'No') = 'No' and timestamp(posting_date, posting_time) <= timestamp(%s, %s) Order by timestamp(posting_date, posting_time) DESC, name DESC LIMIT 1", (item_code, d[0], posting_date, '23:55'))
|
||||
cl_bal += act and flt(act[0][0]) or 0.00
|
||||
stock_val += act and flt(act[0][1]) or 0.00
|
||||
elif warehouse and not item_code:
|
||||
item_list = sql("select distinct item_code from `tabStock Ledger Entry` where warehouse = %s", warehouse)
|
||||
for d in item_list:
|
||||
act = sql("select bin_aqat, stock_value from `tabStock Ledger Entry` where item_code = %s and warehouse = %s and ifnull(is_cancelled, 'No') = 'No' and timestamp(posting_date, posting_time) <= timestamp(%s, %s) Order by timestamp(posting_date, posting_time) DESC, name DESC LIMIT 1", (d[0], warehouse, posting_date, '23:55'))
|
||||
cl_bal += act and flt(act[0][0]) or 0.00
|
||||
stock_val += act and flt(act[0][1]) or 0.00
|
||||
return cl_bal, stock_val
|
||||
|
||||
out=[]
|
||||
cl_bal,tot_stock = 0,0
|
||||
|
||||
for r in res:
|
||||
if len(based_on) == 1 and based_on[0]:
|
||||
if based_on[0] == 'Item Code': closing_balance, stock_value = get_values(msgprint, flt, posting_date, item_code = r[col_idx['Item Code']])
|
||||
elif based_on[0] == 'Warehouse': closing_balance, stock_value = get_values(msgprint, flt, posting_date, warehouse = r[col_idx['Warehouse']])
|
||||
r.append(closing_balance)
|
||||
r.append(stock_value)
|
||||
else:
|
||||
det = sql("select bin_aqat, stock_value from `tabStock Ledger Entry` where item_code = %s and warehouse = %s and ifnull(is_cancelled, 'No') = 'No' and timestamp(posting_date, posting_time) <= timestamp(%s, %s) Order by timestamp(posting_date, posting_time) DESC, name DESC LIMIT 1", (r[col_idx['Item Code']], r[col_idx['Warehouse']], posting_date, '23:55'))
|
||||
|
||||
r.append(det and flt(det[0][0]) or 0.00)
|
||||
r.append(det and flt(det[0][1]) or 0.00)
|
||||
cl_bal += flt(r[col_idx['Closing Balance']])
|
||||
tot_stock += flt(r[col_idx['Stock Value']])
|
||||
out.append(r)
|
||||
|
||||
# Add the totals row
|
||||
l_row = ['' for i in range(len(colnames))]
|
||||
if len(based_on) == 1 and based_on[0] == 'Warehouse':
|
||||
l_row[col_idx['Warehouse Type']] = '<b>TOTALS</b>'
|
||||
else:
|
||||
l_row[col_idx['Stock UOM']] = '<b>TOTALS</b>'
|
||||
l_row[col_idx['Closing Balance']] = cl_bal
|
||||
l_row[col_idx['Stock Value']] = tot_stock
|
||||
out.append(l_row)
|
||||
33
stock/search_criteria/stock_report/stock_report.txt
Normal file
33
stock/search_criteria/stock_report/stock_report.txt
Normal file
@@ -0,0 +1,33 @@
|
||||
# Search Criteria, stock_report
|
||||
[
|
||||
|
||||
# These values are common in all dictionaries
|
||||
{
|
||||
'creation': '2012-04-03 12:49:53',
|
||||
'docstatus': 0,
|
||||
'modified': '2012-04-03 12:49:53',
|
||||
'modified_by': u'Administrator',
|
||||
'owner': u'Administrator'
|
||||
},
|
||||
|
||||
# These values are common for all Search Criteria
|
||||
{
|
||||
'columns': u'Stock Ledger Entry\x01ID',
|
||||
'criteria_name': u'Stock Report',
|
||||
'doc_type': u'Stock Ledger Entry',
|
||||
'doctype': 'Search Criteria',
|
||||
'filters': u"{'Stock Ledger Entry\x01Is Cancelled':'','Stock Ledger Entry\x01Is Stock Entry':''}",
|
||||
'module': u'Stock',
|
||||
'name': '__common__',
|
||||
'page_len': 50,
|
||||
'sort_by': u'`tabStock Ledger Entry`.`name`',
|
||||
'sort_order': u'DESC',
|
||||
'standard': u'Yes'
|
||||
},
|
||||
|
||||
# Search Criteria, stock_report
|
||||
{
|
||||
'doctype': 'Search Criteria',
|
||||
'name': u'stock_report'
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user