built item grids for sales, purchase, stock
diff --git a/erpnext/accounts/doctype/account/account.py b/erpnext/accounts/doctype/account/account.py
index 5b034f8..2f60dca 100644
--- a/erpnext/accounts/doctype/account/account.py
+++ b/erpnext/accounts/doctype/account/account.py
@@ -16,7 +16,6 @@
if not frozen_accounts_modifier or frozen_accounts_modifier in frappe.user.get_roles():
self.get("__onload").can_freeze_account = True
-
def autoname(self):
self.name = self.account_name.strip() + ' - ' + \
frappe.db.get_value("Company", self.company, "abbr")
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 8f82fc6..1205646 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -18,6 +18,10 @@
from erpnext.controllers.selling_controller import SellingController
+form_grid_templates = {
+ "entries": "templates/form_grid/item_grid.html"
+}
+
class SalesInvoice(SellingController):
tname = 'Sales Invoice Item'
fname = 'entries'
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py
index f9f5103..04ad37f 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.py
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.py
@@ -8,6 +8,10 @@
from frappe.model.mapper import get_mapped_doc
from erpnext.controllers.buying_controller import BuyingController
+form_grid_templates = {
+ "po_details": "templates/form_grid/item_grid.html"
+}
+
class PurchaseOrder(BuyingController):
tname = 'Purchase Order Item'
fname = 'po_details'
diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py
index 2af7bb9..d009bac 100644
--- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py
+++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py
@@ -6,6 +6,11 @@
from frappe.model.mapper import get_mapped_doc
from erpnext.controllers.buying_controller import BuyingController
+
+form_grid_templates = {
+ "quotation_items": "templates/form_grid/item_grid.html"
+}
+
class SupplierQuotation(BuyingController):
tname = "Supplier Quotation Item"
fname = "quotation_items"
diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py
index 7faba41..dd58758 100644
--- a/erpnext/controllers/selling_controller.py
+++ b/erpnext/controllers/selling_controller.py
@@ -6,6 +6,7 @@
from frappe.utils import cint, flt, rounded, cstr, comma_or
from erpnext.setup.utils import get_company_currency
from frappe import _, throw
+from erpnext.stock.get_item_details import get_available_qty
from erpnext.controllers.stock_controller import StockController
@@ -17,6 +18,12 @@
"other_charges": "templates/print_formats/includes/taxes.html",
}
+ def onload(self):
+ if self.doctype in ("Sales Order", "Delivery Note", "Sales Invoice"):
+ for item in self.get(self.fname):
+ item.update(get_available_qty(item.item_code,
+ item.warehouse))
+
def validate(self):
super(SellingController, self).validate()
self.validate_max_discount()
diff --git a/erpnext/selling/doctype/quotation/quotation.py b/erpnext/selling/doctype/quotation/quotation.py
index f396191..ab6e4ba 100644
--- a/erpnext/selling/doctype/quotation/quotation.py
+++ b/erpnext/selling/doctype/quotation/quotation.py
@@ -9,6 +9,10 @@
from erpnext.controllers.selling_controller import SellingController
+form_grid_templates = {
+ "quotation_details": "templates/form_grid/item_grid.html"
+}
+
class Quotation(SellingController):
tname = 'Quotation Item'
fname = 'quotation_details'
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index e0a7a1d..37b26fd 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -12,6 +12,10 @@
from erpnext.controllers.selling_controller import SellingController
+form_grid_templates = {
+ "sales_order_details": "templates/form_grid/item_grid.html"
+}
+
class SalesOrder(SellingController):
tname = 'Sales Order Item'
fname = 'sales_order_details'
diff --git a/erpnext/selling/doctype/sales_order_item/sales_order_item.json b/erpnext/selling/doctype/sales_order_item/sales_order_item.json
index eb0c024..4ea3fec 100644
--- a/erpnext/selling/doctype/sales_order_item/sales_order_item.json
+++ b/erpnext/selling/doctype/sales_order_item/sales_order_item.json
@@ -1,443 +1,443 @@
{
- "autoname": "SOD/.#####",
- "creation": "2013-03-07 11:42:58",
- "docstatus": 0,
- "doctype": "DocType",
+ "autoname": "SOD/.#####",
+ "creation": "2013-03-07 11:42:58",
+ "docstatus": 0,
+ "doctype": "DocType",
"fields": [
{
- "fieldname": "item_code",
- "fieldtype": "Link",
- "in_filter": 1,
- "in_list_view": 1,
- "label": "Item Code",
- "oldfieldname": "item_code",
- "oldfieldtype": "Link",
- "options": "Item",
- "permlevel": 0,
- "print_width": "150px",
- "read_only": 0,
- "reqd": 1,
- "search_index": 1,
+ "fieldname": "item_code",
+ "fieldtype": "Link",
+ "in_filter": 1,
+ "in_list_view": 1,
+ "label": "Item Code",
+ "oldfieldname": "item_code",
+ "oldfieldtype": "Link",
+ "options": "Item",
+ "permlevel": 0,
+ "print_width": "150px",
+ "read_only": 0,
+ "reqd": 1,
+ "search_index": 1,
"width": "150px"
- },
+ },
{
- "fieldname": "customer_item_code",
- "fieldtype": "Data",
- "hidden": 1,
- "in_list_view": 0,
- "label": "Customer's Item Code",
- "permlevel": 0,
- "print_hide": 1,
+ "fieldname": "customer_item_code",
+ "fieldtype": "Data",
+ "hidden": 1,
+ "in_list_view": 0,
+ "label": "Customer's Item Code",
+ "permlevel": 0,
+ "print_hide": 1,
"read_only": 1
- },
+ },
{
- "fieldname": "item_name",
- "fieldtype": "Data",
- "in_list_view": 0,
- "label": "Item Name",
- "oldfieldname": "item_name",
- "oldfieldtype": "Data",
- "permlevel": 0,
- "print_hide": 1,
- "print_width": "150",
- "read_only": 0,
- "reqd": 1,
+ "fieldname": "item_name",
+ "fieldtype": "Data",
+ "in_list_view": 0,
+ "label": "Item Name",
+ "oldfieldname": "item_name",
+ "oldfieldtype": "Data",
+ "permlevel": 0,
+ "print_hide": 1,
+ "print_width": "150",
+ "read_only": 0,
+ "reqd": 1,
"width": "150"
- },
+ },
{
- "fieldname": "col_break1",
- "fieldtype": "Column Break",
+ "fieldname": "col_break1",
+ "fieldtype": "Column Break",
"permlevel": 0
- },
+ },
{
- "fieldname": "description",
- "fieldtype": "Small Text",
- "in_filter": 1,
- "in_list_view": 1,
- "label": "Description",
- "oldfieldname": "description",
- "oldfieldtype": "Small Text",
- "permlevel": 0,
- "print_width": "300px",
- "read_only": 0,
- "reqd": 1,
- "search_index": 1,
+ "fieldname": "description",
+ "fieldtype": "Small Text",
+ "in_filter": 1,
+ "in_list_view": 1,
+ "label": "Description",
+ "oldfieldname": "description",
+ "oldfieldtype": "Small Text",
+ "permlevel": 0,
+ "print_width": "300px",
+ "read_only": 0,
+ "reqd": 1,
+ "search_index": 1,
"width": "300px"
- },
+ },
{
- "fieldname": "quantity_and_rate",
- "fieldtype": "Section Break",
- "in_list_view": 0,
- "label": "Quantity and Rate",
+ "fieldname": "quantity_and_rate",
+ "fieldtype": "Section Break",
+ "in_list_view": 0,
+ "label": "Quantity and Rate",
"permlevel": 0
- },
+ },
{
- "fieldname": "qty",
- "fieldtype": "Float",
- "in_list_view": 1,
- "label": "Quantity",
- "oldfieldname": "qty",
- "oldfieldtype": "Currency",
- "permlevel": 0,
- "print_width": "100px",
- "read_only": 0,
- "reqd": 1,
+ "fieldname": "qty",
+ "fieldtype": "Float",
+ "in_list_view": 1,
+ "label": "Quantity",
+ "oldfieldname": "qty",
+ "oldfieldtype": "Currency",
+ "permlevel": 0,
+ "print_width": "100px",
+ "read_only": 0,
+ "reqd": 1,
"width": "100px"
- },
+ },
{
- "fieldname": "price_list_rate",
- "fieldtype": "Currency",
- "in_list_view": 0,
- "label": "Price List Rate",
- "oldfieldname": "ref_rate",
- "oldfieldtype": "Currency",
- "options": "currency",
- "permlevel": 0,
- "print_hide": 1,
- "print_width": "70px",
- "read_only": 1,
- "reqd": 0,
+ "fieldname": "price_list_rate",
+ "fieldtype": "Currency",
+ "in_list_view": 0,
+ "label": "Price List Rate",
+ "oldfieldname": "ref_rate",
+ "oldfieldtype": "Currency",
+ "options": "currency",
+ "permlevel": 0,
+ "print_hide": 1,
+ "print_width": "70px",
+ "read_only": 1,
+ "reqd": 0,
"width": "70px"
- },
+ },
{
- "fieldname": "discount_percentage",
- "fieldtype": "Percent",
- "in_list_view": 0,
- "label": "Discount(%)",
- "oldfieldname": "adj_rate",
- "oldfieldtype": "Float",
- "permlevel": 0,
- "print_hide": 1,
- "print_width": "70px",
- "read_only": 0,
+ "fieldname": "discount_percentage",
+ "fieldtype": "Float",
+ "in_list_view": 0,
+ "label": "Discount(%)",
+ "oldfieldname": "adj_rate",
+ "oldfieldtype": "Float",
+ "permlevel": 0,
+ "print_hide": 1,
+ "print_width": "70px",
+ "read_only": 0,
"width": "70px"
- },
+ },
{
- "fieldname": "col_break2",
- "fieldtype": "Column Break",
+ "fieldname": "col_break2",
+ "fieldtype": "Column Break",
"permlevel": 0
- },
+ },
{
- "fieldname": "stock_uom",
- "fieldtype": "Link",
- "hidden": 0,
- "in_list_view": 0,
- "label": "UOM",
- "oldfieldname": "stock_uom",
- "oldfieldtype": "Data",
- "options": "UOM",
- "permlevel": 0,
- "print_width": "70px",
- "read_only": 1,
- "reqd": 0,
+ "fieldname": "stock_uom",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "in_list_view": 0,
+ "label": "UOM",
+ "oldfieldname": "stock_uom",
+ "oldfieldtype": "Data",
+ "options": "UOM",
+ "permlevel": 0,
+ "print_width": "70px",
+ "read_only": 1,
+ "reqd": 0,
"width": "70px"
- },
+ },
{
- "fieldname": "base_price_list_rate",
- "fieldtype": "Currency",
- "in_list_view": 0,
- "label": "Price List Rate (Company Currency)",
- "oldfieldname": "base_ref_rate",
- "oldfieldtype": "Currency",
- "options": "Company:company:default_currency",
- "permlevel": 0,
- "print_hide": 1,
- "print_width": "100px",
- "read_only": 1,
+ "fieldname": "base_price_list_rate",
+ "fieldtype": "Currency",
+ "in_list_view": 0,
+ "label": "Price List Rate (Company Currency)",
+ "oldfieldname": "base_ref_rate",
+ "oldfieldtype": "Currency",
+ "options": "Company:company:default_currency",
+ "permlevel": 0,
+ "print_hide": 1,
+ "print_width": "100px",
+ "read_only": 1,
"width": "100px"
- },
+ },
{
- "fieldname": "section_break_simple1",
- "fieldtype": "Section Break",
+ "fieldname": "section_break_simple1",
+ "fieldtype": "Section Break",
"permlevel": 0
- },
+ },
{
- "fieldname": "rate",
- "fieldtype": "Currency",
- "in_list_view": 1,
- "label": "Rate",
- "oldfieldname": "export_rate",
- "oldfieldtype": "Currency",
- "options": "currency",
- "permlevel": 0,
- "print_width": "100px",
- "read_only": 0,
- "reqd": 0,
+ "fieldname": "rate",
+ "fieldtype": "Currency",
+ "in_list_view": 1,
+ "label": "Rate",
+ "oldfieldname": "export_rate",
+ "oldfieldtype": "Currency",
+ "options": "currency",
+ "permlevel": 0,
+ "print_width": "100px",
+ "read_only": 0,
+ "reqd": 0,
"width": "100px"
- },
+ },
{
- "fieldname": "amount",
- "fieldtype": "Currency",
- "in_list_view": 1,
- "label": "Amount",
- "no_copy": 0,
- "oldfieldname": "export_amount",
- "oldfieldtype": "Currency",
- "options": "currency",
- "permlevel": 0,
- "print_width": "100px",
- "read_only": 1,
- "reqd": 0,
+ "fieldname": "amount",
+ "fieldtype": "Currency",
+ "in_list_view": 1,
+ "label": "Amount",
+ "no_copy": 0,
+ "oldfieldname": "export_amount",
+ "oldfieldtype": "Currency",
+ "options": "currency",
+ "permlevel": 0,
+ "print_width": "100px",
+ "read_only": 1,
+ "reqd": 0,
"width": "100px"
- },
+ },
{
- "fieldname": "col_break3",
- "fieldtype": "Column Break",
+ "fieldname": "col_break3",
+ "fieldtype": "Column Break",
"permlevel": 0
- },
+ },
{
- "fieldname": "base_rate",
- "fieldtype": "Currency",
- "in_list_view": 0,
- "label": "Basic Rate (Company Currency)",
- "oldfieldname": "basic_rate",
- "oldfieldtype": "Currency",
- "options": "Company:company:default_currency",
- "permlevel": 0,
- "print_hide": 1,
- "print_width": "100px",
- "read_only": 1,
- "reqd": 0,
+ "fieldname": "base_rate",
+ "fieldtype": "Currency",
+ "in_list_view": 0,
+ "label": "Basic Rate (Company Currency)",
+ "oldfieldname": "basic_rate",
+ "oldfieldtype": "Currency",
+ "options": "Company:company:default_currency",
+ "permlevel": 0,
+ "print_hide": 1,
+ "print_width": "100px",
+ "read_only": 1,
+ "reqd": 0,
"width": "100px"
- },
+ },
{
- "fieldname": "base_amount",
- "fieldtype": "Currency",
- "in_list_view": 0,
- "label": "Amount (Company Currency)",
- "no_copy": 0,
- "oldfieldname": "amount",
- "oldfieldtype": "Currency",
- "options": "Company:company:default_currency",
- "permlevel": 0,
- "print_hide": 1,
- "print_width": "100px",
- "read_only": 1,
- "reqd": 0,
+ "fieldname": "base_amount",
+ "fieldtype": "Currency",
+ "in_list_view": 0,
+ "label": "Amount (Company Currency)",
+ "no_copy": 0,
+ "oldfieldname": "amount",
+ "oldfieldtype": "Currency",
+ "options": "Company:company:default_currency",
+ "permlevel": 0,
+ "print_hide": 1,
+ "print_width": "100px",
+ "read_only": 1,
+ "reqd": 0,
"width": "100px"
- },
+ },
{
- "fieldname": "pricing_rule",
- "fieldtype": "Link",
- "label": "Pricing Rule",
- "options": "Pricing Rule",
- "permlevel": 0,
+ "fieldname": "pricing_rule",
+ "fieldtype": "Link",
+ "label": "Pricing Rule",
+ "options": "Pricing Rule",
+ "permlevel": 0,
"read_only": 1
- },
+ },
{
- "fieldname": "warehouse_and_reference",
- "fieldtype": "Section Break",
- "in_list_view": 0,
- "label": "Warehouse and Reference",
+ "fieldname": "warehouse_and_reference",
+ "fieldtype": "Section Break",
+ "in_list_view": 0,
+ "label": "Warehouse and Reference",
"permlevel": 0
- },
+ },
{
- "fieldname": "warehouse",
- "fieldtype": "Link",
- "in_list_view": 0,
- "label": "Reserved Warehouse",
- "no_copy": 0,
- "oldfieldname": "reserved_warehouse",
- "oldfieldtype": "Link",
- "options": "Warehouse",
- "permlevel": 0,
- "print_hide": 1,
- "print_width": "150px",
- "read_only": 0,
- "reqd": 0,
+ "fieldname": "warehouse",
+ "fieldtype": "Link",
+ "in_list_view": 0,
+ "label": "Reserved Warehouse",
+ "no_copy": 0,
+ "oldfieldname": "reserved_warehouse",
+ "oldfieldtype": "Link",
+ "options": "Warehouse",
+ "permlevel": 0,
+ "print_hide": 1,
+ "print_width": "150px",
+ "read_only": 0,
+ "reqd": 0,
"width": "150px"
- },
+ },
{
- "fieldname": "prevdoc_docname",
- "fieldtype": "Link",
- "hidden": 0,
- "in_filter": 1,
- "in_list_view": 0,
- "label": "Quotation",
- "no_copy": 1,
- "oldfieldname": "prevdoc_docname",
- "oldfieldtype": "Link",
- "options": "Quotation",
- "permlevel": 0,
- "print_hide": 1,
- "read_only": 1,
+ "fieldname": "prevdoc_docname",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "in_filter": 1,
+ "in_list_view": 0,
+ "label": "Quotation",
+ "no_copy": 1,
+ "oldfieldname": "prevdoc_docname",
+ "oldfieldtype": "Link",
+ "options": "Quotation",
+ "permlevel": 0,
+ "print_hide": 1,
+ "read_only": 1,
"search_index": 1
- },
+ },
{
- "fieldname": "brand",
- "fieldtype": "Link",
- "hidden": 1,
- "in_filter": 1,
- "in_list_view": 0,
- "label": "Brand Name",
- "oldfieldname": "brand",
- "oldfieldtype": "Link",
- "options": "Brand",
- "permlevel": 0,
- "print_hide": 1,
- "read_only": 1,
+ "fieldname": "brand",
+ "fieldtype": "Link",
+ "hidden": 1,
+ "in_filter": 1,
+ "in_list_view": 0,
+ "label": "Brand Name",
+ "oldfieldname": "brand",
+ "oldfieldtype": "Link",
+ "options": "Brand",
+ "permlevel": 0,
+ "print_hide": 1,
+ "read_only": 1,
"search_index": 1
- },
+ },
{
- "description": "<a href=\"#Sales Browser/Item Group\">Add / Edit</a>",
- "fieldname": "item_group",
- "fieldtype": "Link",
- "hidden": 1,
- "in_filter": 1,
- "in_list_view": 0,
- "label": "Item Group",
- "oldfieldname": "item_group",
- "oldfieldtype": "Link",
- "options": "Item Group",
- "permlevel": 0,
- "print_hide": 1,
- "read_only": 1,
+ "description": "<a href=\"#Sales Browser/Item Group\">Add / Edit</a>",
+ "fieldname": "item_group",
+ "fieldtype": "Link",
+ "hidden": 1,
+ "in_filter": 1,
+ "in_list_view": 0,
+ "label": "Item Group",
+ "oldfieldname": "item_group",
+ "oldfieldtype": "Link",
+ "options": "Item Group",
+ "permlevel": 0,
+ "print_hide": 1,
+ "read_only": 1,
"search_index": 1
- },
+ },
{
- "allow_on_submit": 1,
- "fieldname": "page_break",
- "fieldtype": "Check",
- "in_list_view": 0,
- "label": "Page Break",
- "oldfieldname": "page_break",
- "oldfieldtype": "Check",
- "permlevel": 0,
- "print_hide": 1,
- "read_only": 0,
+ "allow_on_submit": 1,
+ "fieldname": "page_break",
+ "fieldtype": "Check",
+ "in_list_view": 0,
+ "label": "Page Break",
+ "oldfieldname": "page_break",
+ "oldfieldtype": "Check",
+ "permlevel": 0,
+ "print_hide": 1,
+ "read_only": 0,
"report_hide": 1
- },
+ },
{
- "fieldname": "col_break4",
- "fieldtype": "Column Break",
+ "fieldname": "col_break4",
+ "fieldtype": "Column Break",
"permlevel": 0
- },
+ },
{
- "fieldname": "projected_qty",
- "fieldtype": "Float",
- "hidden": 1,
- "in_list_view": 0,
- "label": "Projected Qty",
- "no_copy": 1,
- "oldfieldname": "projected_qty",
- "oldfieldtype": "Currency",
- "permlevel": 0,
- "print_hide": 1,
- "print_width": "70px",
- "read_only": 1,
+ "fieldname": "projected_qty",
+ "fieldtype": "Float",
+ "hidden": 0,
+ "in_list_view": 0,
+ "label": "Projected Qty",
+ "no_copy": 1,
+ "oldfieldname": "projected_qty",
+ "oldfieldtype": "Currency",
+ "permlevel": 0,
+ "print_hide": 1,
+ "print_width": "70px",
+ "read_only": 1,
"width": "70px"
- },
+ },
{
- "fieldname": "actual_qty",
- "fieldtype": "Float",
- "in_list_view": 0,
- "label": "Actual Qty",
- "no_copy": 1,
- "permlevel": 0,
- "print_hide": 1,
- "print_width": "70px",
- "read_only": 1,
+ "fieldname": "actual_qty",
+ "fieldtype": "Float",
+ "in_list_view": 0,
+ "label": "Actual Qty",
+ "no_copy": 1,
+ "permlevel": 0,
+ "print_hide": 1,
+ "print_width": "70px",
+ "read_only": 1,
"width": "70px"
- },
+ },
{
- "fieldname": "delivered_qty",
- "fieldtype": "Float",
- "hidden": 0,
- "in_filter": 0,
- "in_list_view": 0,
- "label": "Delivered Qty",
- "no_copy": 1,
- "oldfieldname": "delivered_qty",
- "oldfieldtype": "Currency",
- "permlevel": 0,
- "print_hide": 1,
- "print_width": "100px",
- "read_only": 1,
- "search_index": 0,
+ "fieldname": "delivered_qty",
+ "fieldtype": "Float",
+ "hidden": 0,
+ "in_filter": 0,
+ "in_list_view": 0,
+ "label": "Delivered Qty",
+ "no_copy": 1,
+ "oldfieldname": "delivered_qty",
+ "oldfieldtype": "Currency",
+ "permlevel": 0,
+ "print_hide": 1,
+ "print_width": "100px",
+ "read_only": 1,
+ "search_index": 0,
"width": "100px"
- },
+ },
{
- "fieldname": "billed_amt",
- "fieldtype": "Currency",
- "in_list_view": 0,
- "label": "Billed Amt",
- "no_copy": 1,
- "options": "currency",
- "permlevel": 0,
- "print_hide": 1,
+ "fieldname": "billed_amt",
+ "fieldtype": "Currency",
+ "in_list_view": 0,
+ "label": "Billed Amt",
+ "no_copy": 1,
+ "options": "currency",
+ "permlevel": 0,
+ "print_hide": 1,
"read_only": 1
- },
+ },
{
- "description": "For Production",
- "fieldname": "planned_qty",
- "fieldtype": "Float",
- "hidden": 1,
- "in_list_view": 0,
- "label": "Planned Quantity",
- "no_copy": 1,
- "oldfieldname": "planned_qty",
- "oldfieldtype": "Currency",
- "permlevel": 0,
- "print_hide": 1,
- "print_width": "50px",
- "read_only": 1,
- "report_hide": 1,
+ "description": "For Production",
+ "fieldname": "planned_qty",
+ "fieldtype": "Float",
+ "hidden": 1,
+ "in_list_view": 0,
+ "label": "Planned Quantity",
+ "no_copy": 1,
+ "oldfieldname": "planned_qty",
+ "oldfieldtype": "Currency",
+ "permlevel": 0,
+ "print_hide": 1,
+ "print_width": "50px",
+ "read_only": 1,
+ "report_hide": 1,
"width": "50px"
- },
+ },
{
- "description": "For Production",
- "fieldname": "produced_qty",
- "fieldtype": "Float",
- "hidden": 1,
- "in_list_view": 0,
- "label": "Produced Quantity",
- "oldfieldname": "produced_qty",
- "oldfieldtype": "Currency",
- "permlevel": 0,
- "print_hide": 1,
- "print_width": "50px",
- "read_only": 1,
- "report_hide": 1,
+ "description": "For Production",
+ "fieldname": "produced_qty",
+ "fieldtype": "Float",
+ "hidden": 1,
+ "in_list_view": 0,
+ "label": "Produced Quantity",
+ "oldfieldname": "produced_qty",
+ "oldfieldtype": "Currency",
+ "permlevel": 0,
+ "print_hide": 1,
+ "print_width": "50px",
+ "read_only": 1,
+ "report_hide": 1,
"width": "50px"
- },
+ },
{
- "fieldname": "item_tax_rate",
- "fieldtype": "Small Text",
- "hidden": 1,
- "in_list_view": 0,
- "label": "Item Tax Rate",
- "oldfieldname": "item_tax_rate",
- "oldfieldtype": "Small Text",
- "permlevel": 0,
- "print_hide": 1,
- "read_only": 1,
+ "fieldname": "item_tax_rate",
+ "fieldtype": "Small Text",
+ "hidden": 1,
+ "in_list_view": 0,
+ "label": "Item Tax Rate",
+ "oldfieldname": "item_tax_rate",
+ "oldfieldtype": "Small Text",
+ "permlevel": 0,
+ "print_hide": 1,
+ "read_only": 1,
"report_hide": 1
- },
+ },
{
- "description": "Used for Production Plan",
- "fieldname": "transaction_date",
- "fieldtype": "Date",
- "hidden": 1,
- "in_filter": 0,
- "in_list_view": 0,
- "label": "Sales Order Date",
- "oldfieldname": "transaction_date",
- "oldfieldtype": "Date",
- "permlevel": 0,
- "print_hide": 1,
- "read_only": 1,
- "report_hide": 1,
+ "description": "Used for Production Plan",
+ "fieldname": "transaction_date",
+ "fieldtype": "Date",
+ "hidden": 1,
+ "in_filter": 0,
+ "in_list_view": 0,
+ "label": "Sales Order Date",
+ "oldfieldname": "transaction_date",
+ "oldfieldtype": "Date",
+ "permlevel": 0,
+ "print_hide": 1,
+ "read_only": 1,
+ "report_hide": 1,
"search_index": 0
}
- ],
- "idx": 1,
- "istable": 1,
- "modified": "2014-07-31 04:55:10.143164",
- "modified_by": "Administrator",
- "module": "Selling",
- "name": "Sales Order Item",
- "owner": "Administrator",
- "permissions": [],
- "sort_field": "modified",
+ ],
+ "idx": 1,
+ "istable": 1,
+ "modified": "2014-07-31 04:55:10.143164",
+ "modified_by": "Administrator",
+ "module": "Selling",
+ "name": "Sales Order Item",
+ "owner": "Administrator",
+ "permissions": [],
+ "sort_field": "modified",
"sort_order": "DESC"
-}
\ No newline at end of file
+}
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py
index 54e4fa2..e831c47 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.py
@@ -12,6 +12,10 @@
from erpnext.stock.utils import update_bin
from erpnext.controllers.selling_controller import SellingController
+form_grid_templates = {
+ "delivery_note_details": "templates/form_grid/item_grid.html"
+}
+
class DeliveryNote(SellingController):
tname = 'Delivery Note Item'
fname = 'delivery_note_details'
diff --git a/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json b/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json
index 2f69bc9..8c5cbb7 100644
--- a/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json
+++ b/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json
@@ -109,7 +109,7 @@
},
{
"fieldname": "discount_percentage",
- "fieldtype": "Percent",
+ "fieldtype": "Float",
"in_list_view": 0,
"label": "Discount (%)",
"oldfieldname": "adj_rate",
@@ -365,6 +365,7 @@
"label": "Against Sales Order",
"options": "Sales Order",
"permlevel": 0,
+ "print_hide": 1,
"read_only": 1
},
{
@@ -373,6 +374,7 @@
"label": "Against Sales Invoice",
"options": "Sales Invoice",
"permlevel": 0,
+ "print_hide": 1,
"read_only": 1
},
{
@@ -429,7 +431,7 @@
],
"idx": 1,
"istable": 1,
- "modified": "2014-07-24 05:56:00.218977",
+ "modified": "2014-07-29 06:11:36.636120",
"modified_by": "Administrator",
"module": "Stock",
"name": "Delivery Note Item",
diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py
index 9951fc8..89121e3 100644
--- a/erpnext/stock/doctype/material_request/material_request.py
+++ b/erpnext/stock/doctype/material_request/material_request.py
@@ -12,6 +12,11 @@
from frappe.model.mapper import get_mapped_doc
from erpnext.controllers.buying_controller import BuyingController
+
+form_grid_templates = {
+ "indent_details": "templates/form_grid/material_request_grid.html"
+}
+
class MaterialRequest(BuyingController):
tname = 'Material Request Item'
fname = 'indent_details'
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
index 74f1198..5f56149 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -11,6 +11,11 @@
from erpnext.stock.utils import update_bin
from erpnext.controllers.buying_controller import BuyingController
+
+form_grid_templates = {
+ "purchase_receipt_details": "templates/form_grid/item_grid.html"
+}
+
class PurchaseReceipt(BuyingController):
tname = 'Purchase Receipt Item'
fname = 'purchase_receipt_details'
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index 861d967..413aa47 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -19,6 +19,10 @@
from erpnext.controllers.stock_controller import StockController
+form_grid_templates = {
+ "mtn_details": "templates/form_grid/stock_entry_grid.html"
+}
+
class StockEntry(StockController):
fname = 'mtn_details'
diff --git a/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json b/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json
index 0bdc9a8..e2f2c59 100644
--- a/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json
+++ b/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json
@@ -1,6 +1,6 @@
{
"autoname": "MTND/.######",
- "creation": "2013-03-29 18:22:12.000000",
+ "creation": "2013-03-29 18:22:12",
"docstatus": 0,
"doctype": "DocType",
"fields": [
@@ -190,7 +190,7 @@
"oldfieldtype": "Link",
"options": "Batch",
"permlevel": 0,
- "print_hide": 1,
+ "print_hide": 0,
"read_only": 0
},
{
@@ -300,9 +300,10 @@
],
"idx": 1,
"istable": 1,
- "modified": "2014-02-03 12:59:27.000000",
+ "modified": "2014-07-29 05:28:21.872968",
"modified_by": "Administrator",
"module": "Stock",
"name": "Stock Entry Detail",
- "owner": "Administrator"
+ "owner": "Administrator",
+ "permissions": []
}
\ No newline at end of file
diff --git a/erpnext/templates/form_grid/includes/visible_cols.html b/erpnext/templates/form_grid/includes/visible_cols.html
new file mode 100644
index 0000000..82f15c2
--- /dev/null
+++ b/erpnext/templates/form_grid/includes/visible_cols.html
@@ -0,0 +1,13 @@
+{% $.each(visible_columns || [], function(i, df) { %}
+ {% var val = row.get_formatted(df.fieldname);
+ if(val) { %}
+ <div class="row">
+ <div class="col-xs-3">
+ <strong>{%= __(df.label) %}:</strong>
+ </div>
+ <div class="col-xs-9">
+ {%= row.get_formatted(df.fieldname) %}
+ </div>
+ </div>
+ {% } %}
+{% }); %}
diff --git a/erpnext/templates/form_grid/item_grid.html b/erpnext/templates/form_grid/item_grid.html
new file mode 100644
index 0000000..2c03ef9
--- /dev/null
+++ b/erpnext/templates/form_grid/item_grid.html
@@ -0,0 +1,109 @@
+{% var visible_columns = row.get_visible_columns(["item_code", "item_name", "description", "qty", "rate", "amount", "stock_uom", "uom", "discount_percentage", "schedule_date", "warehouse", "against_sales_order", "sales_order"]); %}
+
+{% if(!doc) { %}
+ <div class="row">
+ <div class="col-sm-6">{%= __("Item") %}</div>
+ <div class="col-sm-2 text-right">{%= __("Qty") %}</div>
+ <div class="col-sm-2 text-right">{%= __("Rate") %}</div>
+ <div class="col-sm-2 text-right">{%= __("Amount") %}</div>
+ </div>
+{% } else { %}
+ <div class="row">
+ <div class="col-sm-6"><strong>{%= doc.item_code %}</strong>
+ {% if(doc.item_name != doc.item_code) { %}
+ <br>{%= doc.item_name %}{% } %}
+ {% if(doc.item_name != doc.description) { %}
+ <p>{%= doc.description %}</p>{% } %}
+ {% if(doc.sales_order || doc.against_sales_order) { %}
+ <p><span class="label label-default"
+ title="{%= __("Sales Order") %}">
+ <i class="icon-file"></i>
+ {%= doc.sales_order || doc.against_sales_order %}
+ </span></p>
+ {% } %}
+ {% include "templates/form_grid/includes/visible_cols.html" %}
+ {% if(doc.schedule_date) { %}
+ <br><span title="{%= __("Reqd By Date") %}" class="label {%=
+ (frappe.datetime.get_diff(doc.schedule_date) < 1
+ && doc.received_qty < doc.qty)
+ ? "label-danger" : "label-default" %}">
+ {%= row.get_formatted("schedule_date") %}</span>
+ {% } %}
+ </div>
+
+ <!-- qty -->
+ <div class="col-sm-2 text-right">
+ {%= row.get_formatted("qty") %}
+ <br><small>{%= doc.uom || doc.stock_uom %}</small>
+ {% if(in_list(["Sales Order Item", "Purchase Order Item"],
+ doc.doctype) && frm.doc.docstatus===1) {
+ var delivered = doc.doctype==="Sales Order Item" ?
+ doc.delivered_qty : doc.received_qty,
+ percent_delivered =
+ 100 - cint((doc.qty - delivered) * 100 / doc.qty);
+ %}
+ <div class="progress" title="% {%= __("Delivered") %}"
+ style="margin-bottom: 4px;">
+ <div class="progress-bar" role="progressbar"
+ aria-valuenow="{%= percent_delivered %}"
+ aria-valuemin="0" aria-valuemax="100"
+ style="width: {%= percent_delivered %}%">
+ {%= percent_delivered %}%
+ </div>
+ </div>
+ {% } %}
+ {% if(doc.warehouse) {
+ var label_class = "label-default",
+ title = "Warehouse",
+ actual_qty = (doc.doctype==="Sales Order"
+ ? doc.projected_qty : doc.actual_qty);
+ if(actual_qty != undefined) {
+ if(actual_qty > doc.qty) {
+ var label_class = "label-success";
+ var title = "In Stock"
+ } else {
+ var title = "Not In Stock"
+ }
+ }
+ %}
+ <div style="overflow:hidden; min-height: 25px;
+ white-space:nowrap; text-overflow: ellipsis;"
+ title="{%= title %}">
+ <span class="label {%= label_class %}">
+ {%= doc.warehouse %}
+ </span>
+ </div>
+ {% } %}
+ </div>
+
+ <!-- rate -->
+ <div class="col-sm-2 text-right">
+ {%= row.get_formatted("rate") %}
+ {% if(doc.discount_percentage) { %}
+ <br><span class="label label-default pull-right"
+ title="{%= __("Discount") %}">
+ {%= -1 * doc.discount_percentage %}%</span>
+ {% }%}
+ </div>
+
+ <!-- amount -->
+ <div class="col-sm-2 text-right">
+ {%= row.get_formatted("amount") %}
+ {% if(in_list(["Sales Order Item", "Purchase Order Item"],
+ doc.doctype) && frm.doc.docstatus===1 && doc.amount) {
+ var percent_billed =
+ 100 - cint((doc.amount - doc.billed_amt) * 100 / doc.amount);
+ %}
+ <br><small> </small>
+ <div class="progress" title="% {%= __("Billed") %}">
+ <div class="progress-bar" role="progressbar"
+ aria-valuenow="{%= percent_billed %}"
+ aria-valuemin="0" aria-valuemax="100"
+ style="width: {%= percent_billed %}%">
+ {%= percent_billed %}%
+ </div>
+ </div>
+ {% } %}
+ </div>
+ </div>
+{% } %}
diff --git a/erpnext/templates/form_grid/material_request_grid.html b/erpnext/templates/form_grid/material_request_grid.html
new file mode 100644
index 0000000..53b875a
--- /dev/null
+++ b/erpnext/templates/form_grid/material_request_grid.html
@@ -0,0 +1,52 @@
+{% var visible_columns = row.get_visible_columns(["item_code",
+ "item_name", "description", "amount", "stock_uom", "uom", "qty"]); %}
+
+{% if(!doc) { %}
+ <div class="row">
+ <div class="col-sm-9">{%= __("Item") %}</div>
+ <div class="col-sm-3 text-right">{%= __("Qty") %}</div>
+ </div>
+{% } else { %}
+ <div class="row">
+ <div class="col-sm-9"><strong>{%= doc.item_code %}</strong>
+ {% if(doc.item_name != doc.item_code) { %}
+ <br>{%= doc.item_name %}{% } %}
+ {% if(doc.item_name != doc.description) { %}
+ <p>{%= doc.description %}</p>{% } %}
+ {% include "templates/form_grid/includes/visible_cols.html" %}
+ {% if(doc.schedule_date) { %}
+ <br><span title="{%= __("Reqd By Date") %}" class="label {%=
+ (frappe.datetime.get_diff(doc.schedule_date) < 1
+ && doc.ordered_qty < doc.qty)
+ ? "label-danger" : "label-default" %}">
+ {%= row.get_formatted("schedule_date") %}</span>
+ {% } %}
+ </div>
+
+ <!-- qty -->
+ <div class="col-sm-3 text-right">
+ {%= row.get_formatted("qty") %}
+ <small>{%= doc.uom || doc.stock_uom %}</small>
+ {% var percent_delivered =
+ 100 - cint((doc.qty - cint(doc.ordered_qty)) * 100 / doc.qty); %}
+ <div class="progress" title="% {%= __("Ordered") %}"
+ style="margin-bottom: 4px;">
+ <div class="progress-bar" role="progressbar"
+ aria-valuenow="{%= percent_delivered %}"
+ aria-valuemin="0" aria-valuemax="100"
+ style="width: {%= percent_delivered %}%">
+ {%= percent_delivered %}%
+ </div>
+ </div>
+ {% if(doc.warehouse) { %}
+ <div style="overflow:hidden; min-height: 25px;
+ white-space:nowrap; text-overflow: ellipsis;"
+ title="{%= __("For Warehouse") %}">
+ <span class="label label-default">
+ {%= doc.warehouse %}
+ </span>
+ </div>
+ {% } %}
+ </div>
+ </div>
+{% } %}
diff --git a/erpnext/templates/form_grid/stock_entry_grid.html b/erpnext/templates/form_grid/stock_entry_grid.html
new file mode 100644
index 0000000..5603305
--- /dev/null
+++ b/erpnext/templates/form_grid/stock_entry_grid.html
@@ -0,0 +1,42 @@
+{% var visible_columns = row.get_visible_columns(["item_code",
+ "item_name", "description", "amount", "stock_uom", "uom", "qty",
+ "s_warehouse", "t_warehouse", "incoming_rate"]);
+%}
+
+{% if(!doc) { %}
+ <div class="row">
+ <div class="col-sm-8">{%= __("Item") %}</div>
+ <div class="col-sm-2 text-right">{%= __("Qty") %}</div>
+ <div class="col-sm-2 text-right">{%= __("Amount") %}</div>
+ </div>
+{% } else { %}
+ <div class="row">
+ <div class="col-sm-8"><strong>{%= doc.item_code %}</strong>
+ {% if(doc.item_name != doc.item_code) { %}
+ <br>{%= doc.item_name %}{% } %}
+ {% if(doc.item_name != doc.description) { %}
+ <p>{%= doc.description %}</p>{% } %}
+ {% include "templates/form_grid/includes/visible_cols.html" %}
+ <div>
+ {% if(doc.s_warehouse) { %}<span class="label label-default">
+ {%= doc.s_warehouse || "" %}</span>{% } %}
+ <i class="icon-long-arrow-right"></i>
+ {% if(doc.t_warehouse) { %}<span class="label label-primary">
+ {%= doc.t_warehouse || "" %}</span>{% } %}
+ </div>
+ </div>
+
+ <!-- qty -->
+ <div class="col-sm-2 text-right">
+ {%= row.get_formatted("qty") %}
+ <br><small>{%= doc.uom || doc.stock_uom %}</small>
+ </div>
+
+ <!-- amount -->
+ <div class="col-sm-2 text-right">
+ {%= row.get_formatted("amount") %}
+ <div class="small text-muted">
+ {%= row.get_formatted("incoming_rate") %}</div>
+ </div>
+ </div>
+{% } %}