built item grids for sales, purchase, stock
This commit is contained in:
parent
c13727adba
commit
b5e768906a
@ -16,7 +16,6 @@ class Account(Document):
|
||||
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")
|
||||
|
@ -18,6 +18,10 @@ month_map = {'Monthly': 1, 'Quarterly': 3, 'Half-yearly': 6, 'Yearly': 12}
|
||||
|
||||
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'
|
||||
|
@ -8,6 +8,10 @@ from frappe import msgprint, _, throw
|
||||
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'
|
||||
|
@ -6,6 +6,11 @@ import frappe
|
||||
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"
|
||||
|
@ -6,6 +6,7 @@ import frappe
|
||||
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 @@ class SellingController(StockController):
|
||||
"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()
|
||||
|
@ -9,6 +9,10 @@ from frappe import _
|
||||
|
||||
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'
|
||||
|
@ -12,6 +12,10 @@ from frappe.model.mapper import get_mapped_doc
|
||||
|
||||
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'
|
||||
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
@ -12,6 +12,10 @@ from frappe.model.mapper import get_mapped_doc
|
||||
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'
|
||||
|
@ -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",
|
||||
|
@ -12,6 +12,11 @@ from frappe import _
|
||||
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'
|
||||
|
@ -11,6 +11,11 @@ import frappe.defaults
|
||||
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'
|
||||
|
@ -19,6 +19,10 @@ class DuplicateEntryForProductionOrderError(frappe.ValidationError): pass
|
||||
|
||||
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'
|
||||
|
||||
|
@ -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": []
|
||||
}
|
13
erpnext/templates/form_grid/includes/visible_cols.html
Normal file
13
erpnext/templates/form_grid/includes/visible_cols.html
Normal file
@ -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>
|
||||
{% } %}
|
||||
{% }); %}
|
109
erpnext/templates/form_grid/item_grid.html
Normal file
109
erpnext/templates/form_grid/item_grid.html
Normal file
@ -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>
|
||||
{% } %}
|
52
erpnext/templates/form_grid/material_request_grid.html
Normal file
52
erpnext/templates/form_grid/material_request_grid.html
Normal file
@ -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>
|
||||
{% } %}
|
42
erpnext/templates/form_grid/stock_entry_grid.html
Normal file
42
erpnext/templates/form_grid/stock_entry_grid.html
Normal file
@ -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>
|
||||
{% } %}
|
Loading…
x
Reference in New Issue
Block a user