mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-20 13:39:18 +00:00
Merge branch 'edge' of github.com:webnotes/erpnext into webshop
Conflicts: patches/patch_list.py
This commit is contained in:
@@ -1,8 +1,8 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"creation": "2013-04-09 10:18:10",
|
"creation": "2013-05-07 13:50:30",
|
||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"modified": "2013-03-22 18:17:14",
|
"modified": "2013-05-13 11:12:56",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"owner": "Administrator"
|
"owner": "Administrator"
|
||||||
},
|
},
|
||||||
@@ -30,7 +30,9 @@
|
|||||||
"parent": "Purchase Invoice",
|
"parent": "Purchase Invoice",
|
||||||
"parentfield": "permissions",
|
"parentfield": "permissions",
|
||||||
"parenttype": "DocType",
|
"parenttype": "DocType",
|
||||||
"read": 1
|
"permlevel": 0,
|
||||||
|
"read": 1,
|
||||||
|
"report": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocType",
|
"doctype": "DocType",
|
||||||
@@ -41,6 +43,7 @@
|
|||||||
"fieldname": "column_break0",
|
"fieldname": "column_break0",
|
||||||
"fieldtype": "Column Break",
|
"fieldtype": "Column Break",
|
||||||
"oldfieldtype": "Column Break",
|
"oldfieldtype": "Column Break",
|
||||||
|
"read_only": 0,
|
||||||
"width": "50%"
|
"width": "50%"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -54,6 +57,7 @@
|
|||||||
"oldfieldtype": "Select",
|
"oldfieldtype": "Select",
|
||||||
"options": "BILL\nBILLJ",
|
"options": "BILL\nBILLJ",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
|
"read_only": 0,
|
||||||
"report_hide": 0,
|
"report_hide": 0,
|
||||||
"reqd": 1
|
"reqd": 1
|
||||||
},
|
},
|
||||||
@@ -68,6 +72,7 @@
|
|||||||
"oldfieldtype": "Link",
|
"oldfieldtype": "Link",
|
||||||
"options": "Account",
|
"options": "Account",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
|
"read_only": 0,
|
||||||
"reqd": 1,
|
"reqd": 1,
|
||||||
"search_index": 1
|
"search_index": 1
|
||||||
},
|
},
|
||||||
@@ -80,7 +85,8 @@
|
|||||||
"oldfieldname": "supplier",
|
"oldfieldname": "supplier",
|
||||||
"oldfieldtype": "Link",
|
"oldfieldtype": "Link",
|
||||||
"options": "Supplier",
|
"options": "Supplier",
|
||||||
"print_hide": 1
|
"print_hide": 1,
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
@@ -131,6 +137,7 @@
|
|||||||
"fieldname": "column_break1",
|
"fieldname": "column_break1",
|
||||||
"fieldtype": "Column Break",
|
"fieldtype": "Column Break",
|
||||||
"oldfieldtype": "Column Break",
|
"oldfieldtype": "Column Break",
|
||||||
|
"read_only": 0,
|
||||||
"reqd": 0,
|
"reqd": 0,
|
||||||
"width": "50%"
|
"width": "50%"
|
||||||
},
|
},
|
||||||
@@ -146,6 +153,7 @@
|
|||||||
"oldfieldname": "posting_date",
|
"oldfieldname": "posting_date",
|
||||||
"oldfieldtype": "Date",
|
"oldfieldtype": "Date",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
|
"read_only": 0,
|
||||||
"reqd": 1,
|
"reqd": 1,
|
||||||
"search_index": 1
|
"search_index": 1
|
||||||
},
|
},
|
||||||
@@ -159,6 +167,7 @@
|
|||||||
"oldfieldname": "bill_no",
|
"oldfieldname": "bill_no",
|
||||||
"oldfieldtype": "Data",
|
"oldfieldtype": "Data",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
|
"read_only": 0,
|
||||||
"reqd": 1,
|
"reqd": 1,
|
||||||
"search_index": 1
|
"search_index": 1
|
||||||
},
|
},
|
||||||
@@ -171,6 +180,7 @@
|
|||||||
"oldfieldname": "bill_date",
|
"oldfieldname": "bill_date",
|
||||||
"oldfieldtype": "Date",
|
"oldfieldtype": "Date",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
|
"read_only": 0,
|
||||||
"reqd": 0,
|
"reqd": 0,
|
||||||
"search_index": 1
|
"search_index": 1
|
||||||
},
|
},
|
||||||
@@ -179,7 +189,8 @@
|
|||||||
"fieldname": "items",
|
"fieldname": "items",
|
||||||
"fieldtype": "Section Break",
|
"fieldtype": "Section Break",
|
||||||
"label": "Items",
|
"label": "Items",
|
||||||
"oldfieldtype": "Section Break"
|
"oldfieldtype": "Section Break",
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_on_submit": 1,
|
"allow_on_submit": 1,
|
||||||
@@ -189,25 +200,29 @@
|
|||||||
"label": "Entries",
|
"label": "Entries",
|
||||||
"oldfieldname": "entries",
|
"oldfieldname": "entries",
|
||||||
"oldfieldtype": "Table",
|
"oldfieldtype": "Table",
|
||||||
"options": "Purchase Invoice Item"
|
"options": "Purchase Invoice Item",
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
"fieldname": "section_break0",
|
"fieldname": "section_break0",
|
||||||
"fieldtype": "Section Break"
|
"fieldtype": "Section Break",
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
"fieldname": "recalculate",
|
"fieldname": "recalculate",
|
||||||
"fieldtype": "Button",
|
"fieldtype": "Button",
|
||||||
"label": "Recalculate",
|
"label": "Recalculate",
|
||||||
"oldfieldtype": "Button"
|
"oldfieldtype": "Button",
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
"fieldname": "section_break_17",
|
"fieldname": "section_break_17",
|
||||||
"fieldtype": "Section Break",
|
"fieldtype": "Section Break",
|
||||||
"options": "Simple"
|
"options": "Simple",
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"description": "Select Items from Purchase Order",
|
"description": "Select Items from Purchase Order",
|
||||||
@@ -218,7 +233,8 @@
|
|||||||
"oldfieldname": "purchase_order_main",
|
"oldfieldname": "purchase_order_main",
|
||||||
"oldfieldtype": "Link",
|
"oldfieldtype": "Link",
|
||||||
"options": "Purchase Order",
|
"options": "Purchase Order",
|
||||||
"print_hide": 1
|
"print_hide": 1,
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"description": "Select Items from Purchase Receipt",
|
"description": "Select Items from Purchase Receipt",
|
||||||
@@ -229,7 +245,8 @@
|
|||||||
"oldfieldname": "purchase_receipt_main",
|
"oldfieldname": "purchase_receipt_main",
|
||||||
"oldfieldtype": "Link",
|
"oldfieldtype": "Link",
|
||||||
"options": "Purchase Receipt",
|
"options": "Purchase Receipt",
|
||||||
"print_hide": 1
|
"print_hide": 1,
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
@@ -237,13 +254,15 @@
|
|||||||
"fieldtype": "Button",
|
"fieldtype": "Button",
|
||||||
"label": "Get Items",
|
"label": "Get Items",
|
||||||
"oldfieldtype": "Button",
|
"oldfieldtype": "Button",
|
||||||
"options": "pull_details"
|
"options": "pull_details",
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
"fieldname": "currency_price_list",
|
"fieldname": "currency_price_list",
|
||||||
"fieldtype": "Section Break",
|
"fieldtype": "Section Break",
|
||||||
"label": "Currency & Price List"
|
"label": "Currency & Price List",
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
@@ -253,7 +272,8 @@
|
|||||||
"oldfieldname": "currency",
|
"oldfieldname": "currency",
|
||||||
"oldfieldtype": "Select",
|
"oldfieldtype": "Select",
|
||||||
"options": "Currency",
|
"options": "Currency",
|
||||||
"print_hide": 1
|
"print_hide": 1,
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"default": "1",
|
"default": "1",
|
||||||
@@ -264,12 +284,14 @@
|
|||||||
"label": "Exchange Rate",
|
"label": "Exchange Rate",
|
||||||
"oldfieldname": "conversion_rate",
|
"oldfieldname": "conversion_rate",
|
||||||
"oldfieldtype": "Currency",
|
"oldfieldtype": "Currency",
|
||||||
"print_hide": 1
|
"print_hide": 1,
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
"fieldname": "column_break2",
|
"fieldname": "column_break2",
|
||||||
"fieldtype": "Column Break"
|
"fieldtype": "Column Break",
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"description": "Consider this Price List for fetching rate. (only which have \"For Buying\" as checked)",
|
"description": "Consider this Price List for fetching rate. (only which have \"For Buying\" as checked)",
|
||||||
@@ -278,7 +300,8 @@
|
|||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"label": "Price List",
|
"label": "Price List",
|
||||||
"options": "Price List",
|
"options": "Price List",
|
||||||
"print_hide": 1
|
"print_hide": 1,
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"depends_on": "price_list_name",
|
"depends_on": "price_list_name",
|
||||||
@@ -287,7 +310,8 @@
|
|||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"label": "Price List Currency",
|
"label": "Price List Currency",
|
||||||
"options": "Currency",
|
"options": "Currency",
|
||||||
"print_hide": 1
|
"print_hide": 1,
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"depends_on": "price_list_name",
|
"depends_on": "price_list_name",
|
||||||
@@ -295,7 +319,8 @@
|
|||||||
"fieldname": "plc_conversion_rate",
|
"fieldname": "plc_conversion_rate",
|
||||||
"fieldtype": "Float",
|
"fieldtype": "Float",
|
||||||
"label": "Price List Exchange Rate",
|
"label": "Price List Exchange Rate",
|
||||||
"print_hide": 1
|
"print_hide": 1,
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"description": "Add / Edit Taxes and Charges",
|
"description": "Add / Edit Taxes and Charges",
|
||||||
@@ -303,7 +328,8 @@
|
|||||||
"fieldname": "taxes",
|
"fieldname": "taxes",
|
||||||
"fieldtype": "Section Break",
|
"fieldtype": "Section Break",
|
||||||
"label": "Taxes",
|
"label": "Taxes",
|
||||||
"oldfieldtype": "Section Break"
|
"oldfieldtype": "Section Break",
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
@@ -313,7 +339,8 @@
|
|||||||
"oldfieldname": "purchase_other_charges",
|
"oldfieldname": "purchase_other_charges",
|
||||||
"oldfieldtype": "Link",
|
"oldfieldtype": "Link",
|
||||||
"options": "Purchase Taxes and Charges Master",
|
"options": "Purchase Taxes and Charges Master",
|
||||||
"print_hide": 1
|
"print_hide": 1,
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
@@ -322,7 +349,8 @@
|
|||||||
"label": "Get Tax Detail",
|
"label": "Get Tax Detail",
|
||||||
"oldfieldtype": "Button",
|
"oldfieldtype": "Button",
|
||||||
"options": "get_purchase_tax_details",
|
"options": "get_purchase_tax_details",
|
||||||
"print_hide": 1
|
"print_hide": 1,
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
@@ -331,7 +359,8 @@
|
|||||||
"label": "Purchase Taxes and Charges",
|
"label": "Purchase Taxes and Charges",
|
||||||
"oldfieldname": "purchase_tax_details",
|
"oldfieldname": "purchase_tax_details",
|
||||||
"oldfieldtype": "Table",
|
"oldfieldtype": "Table",
|
||||||
"options": "Purchase Taxes and Charges"
|
"options": "Purchase Taxes and Charges",
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
@@ -339,7 +368,8 @@
|
|||||||
"fieldtype": "Button",
|
"fieldtype": "Button",
|
||||||
"label": "Calculate Tax",
|
"label": "Calculate Tax",
|
||||||
"oldfieldtype": "Button",
|
"oldfieldtype": "Button",
|
||||||
"print_hide": 1
|
"print_hide": 1,
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
@@ -347,7 +377,8 @@
|
|||||||
"fieldtype": "HTML",
|
"fieldtype": "HTML",
|
||||||
"label": "Tax Calculation",
|
"label": "Tax Calculation",
|
||||||
"oldfieldtype": "HTML",
|
"oldfieldtype": "HTML",
|
||||||
"print_hide": 1
|
"print_hide": 1,
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
@@ -364,7 +395,8 @@
|
|||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
"fieldname": "contact_section",
|
"fieldname": "contact_section",
|
||||||
"fieldtype": "Section Break",
|
"fieldtype": "Section Break",
|
||||||
"label": "Contact Info"
|
"label": "Contact Info",
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"depends_on": "eval:doc.supplier",
|
"depends_on": "eval:doc.supplier",
|
||||||
@@ -372,12 +404,14 @@
|
|||||||
"fieldname": "supplier_address",
|
"fieldname": "supplier_address",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"label": "Supplier Address",
|
"label": "Supplier Address",
|
||||||
"options": "Address"
|
"options": "Address",
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
"fieldname": "col_break23",
|
"fieldname": "col_break23",
|
||||||
"fieldtype": "Column Break",
|
"fieldtype": "Column Break",
|
||||||
|
"read_only": 0,
|
||||||
"width": "50%"
|
"width": "50%"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -387,14 +421,16 @@
|
|||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"label": "Contact Person",
|
"label": "Contact Person",
|
||||||
"options": "Contact",
|
"options": "Contact",
|
||||||
"print_hide": 1
|
"print_hide": 1,
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
"fieldname": "totals",
|
"fieldname": "totals",
|
||||||
"fieldtype": "Section Break",
|
"fieldtype": "Section Break",
|
||||||
"label": "Totals",
|
"label": "Totals",
|
||||||
"oldfieldtype": "Section Break"
|
"oldfieldtype": "Section Break",
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
@@ -497,6 +533,7 @@
|
|||||||
"fieldtype": "Column Break",
|
"fieldtype": "Column Break",
|
||||||
"oldfieldtype": "Column Break",
|
"oldfieldtype": "Column Break",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
|
"read_only": 0,
|
||||||
"width": "50%"
|
"width": "50%"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -562,7 +599,8 @@
|
|||||||
"label": "Write Off Amount",
|
"label": "Write Off Amount",
|
||||||
"no_copy": 1,
|
"no_copy": 1,
|
||||||
"options": "Company:company:default_currency",
|
"options": "Company:company:default_currency",
|
||||||
"print_hide": 1
|
"print_hide": 1,
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"depends_on": "eval:flt(doc.write_off_amount)!=0",
|
"depends_on": "eval:flt(doc.write_off_amount)!=0",
|
||||||
@@ -572,7 +610,8 @@
|
|||||||
"label": "Write Off Account",
|
"label": "Write Off Account",
|
||||||
"no_copy": 1,
|
"no_copy": 1,
|
||||||
"options": "Account",
|
"options": "Account",
|
||||||
"print_hide": 1
|
"print_hide": 1,
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"depends_on": "eval:flt(doc.write_off_amount)!=0",
|
"depends_on": "eval:flt(doc.write_off_amount)!=0",
|
||||||
@@ -581,8 +620,9 @@
|
|||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"label": "Write Off Cost Center",
|
"label": "Write Off Cost Center",
|
||||||
"no_copy": 1,
|
"no_copy": 1,
|
||||||
"options": "Account",
|
"options": "Cost Center",
|
||||||
"print_hide": 1
|
"print_hide": 1,
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
@@ -594,6 +634,7 @@
|
|||||||
"oldfieldname": "against_expense_account",
|
"oldfieldname": "against_expense_account",
|
||||||
"oldfieldtype": "Small Text",
|
"oldfieldtype": "Small Text",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
|
"read_only": 0,
|
||||||
"report_hide": 0
|
"report_hide": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -602,7 +643,8 @@
|
|||||||
"fieldtype": "Section Break",
|
"fieldtype": "Section Break",
|
||||||
"label": "Advances",
|
"label": "Advances",
|
||||||
"oldfieldtype": "Section Break",
|
"oldfieldtype": "Section Break",
|
||||||
"print_hide": 1
|
"print_hide": 1,
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
@@ -611,7 +653,8 @@
|
|||||||
"label": "Get Advances Paid",
|
"label": "Get Advances Paid",
|
||||||
"oldfieldtype": "Button",
|
"oldfieldtype": "Button",
|
||||||
"options": "get_advances",
|
"options": "get_advances",
|
||||||
"print_hide": 1
|
"print_hide": 1,
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
@@ -622,7 +665,8 @@
|
|||||||
"oldfieldname": "advance_allocation_details",
|
"oldfieldname": "advance_allocation_details",
|
||||||
"oldfieldtype": "Table",
|
"oldfieldtype": "Table",
|
||||||
"options": "Purchase Invoice Advance",
|
"options": "Purchase Invoice Advance",
|
||||||
"print_hide": 1
|
"print_hide": 1,
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
@@ -630,7 +674,8 @@
|
|||||||
"fieldtype": "Section Break",
|
"fieldtype": "Section Break",
|
||||||
"label": "More Info",
|
"label": "More Info",
|
||||||
"oldfieldtype": "Section Break",
|
"oldfieldtype": "Section Break",
|
||||||
"print_hide": 1
|
"print_hide": 1,
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"default": "No",
|
"default": "No",
|
||||||
@@ -644,6 +689,7 @@
|
|||||||
"oldfieldtype": "Select",
|
"oldfieldtype": "Select",
|
||||||
"options": "No\nYes",
|
"options": "No\nYes",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
|
"read_only": 0,
|
||||||
"search_index": 1
|
"search_index": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -655,6 +701,7 @@
|
|||||||
"oldfieldname": "aging_date",
|
"oldfieldname": "aging_date",
|
||||||
"oldfieldtype": "Date",
|
"oldfieldtype": "Date",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
|
"read_only": 0,
|
||||||
"search_index": 0
|
"search_index": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -680,6 +727,7 @@
|
|||||||
"oldfieldtype": "Link",
|
"oldfieldtype": "Link",
|
||||||
"options": "Print Heading",
|
"options": "Print Heading",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
|
"read_only": 0,
|
||||||
"report_hide": 1
|
"report_hide": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -692,6 +740,7 @@
|
|||||||
"oldfieldname": "due_date",
|
"oldfieldname": "due_date",
|
||||||
"oldfieldtype": "Date",
|
"oldfieldtype": "Date",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
|
"read_only": 0,
|
||||||
"search_index": 1
|
"search_index": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -701,12 +750,14 @@
|
|||||||
"label": "Mode of Payment",
|
"label": "Mode of Payment",
|
||||||
"oldfieldname": "mode_of_payment",
|
"oldfieldname": "mode_of_payment",
|
||||||
"oldfieldtype": "Select",
|
"oldfieldtype": "Select",
|
||||||
"options": "link:Mode of Payment"
|
"options": "link:Mode of Payment",
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
"fieldname": "column_break_63",
|
"fieldname": "column_break_63",
|
||||||
"fieldtype": "Column Break"
|
"fieldtype": "Column Break",
|
||||||
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
@@ -718,6 +769,7 @@
|
|||||||
"oldfieldtype": "Link",
|
"oldfieldtype": "Link",
|
||||||
"options": "Company",
|
"options": "Company",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
|
"read_only": 0,
|
||||||
"search_index": 1
|
"search_index": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -730,6 +782,7 @@
|
|||||||
"oldfieldtype": "Select",
|
"oldfieldtype": "Select",
|
||||||
"options": "link:Fiscal Year",
|
"options": "link:Fiscal Year",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
|
"read_only": 0,
|
||||||
"search_index": 1
|
"search_index": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -753,81 +806,53 @@
|
|||||||
"oldfieldname": "remarks",
|
"oldfieldname": "remarks",
|
||||||
"oldfieldtype": "Text",
|
"oldfieldtype": "Text",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
|
"read_only": 0,
|
||||||
"reqd": 0
|
"reqd": 0
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"amend": 0,
|
|
||||||
"cancel": 0,
|
|
||||||
"create": 0,
|
|
||||||
"doctype": "DocPerm",
|
|
||||||
"match": "",
|
|
||||||
"permlevel": 1,
|
|
||||||
"report": 0,
|
|
||||||
"role": "Accounts Manager",
|
|
||||||
"submit": 0,
|
|
||||||
"write": 0
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"amend": 1,
|
"amend": 1,
|
||||||
"cancel": 1,
|
"cancel": 1,
|
||||||
"create": 1,
|
"create": 1,
|
||||||
"doctype": "DocPerm",
|
"doctype": "DocPerm",
|
||||||
"permlevel": 0,
|
|
||||||
"report": 1,
|
|
||||||
"role": "Accounts Manager",
|
|
||||||
"submit": 1,
|
|
||||||
"write": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"amend": 0,
|
|
||||||
"cancel": 0,
|
|
||||||
"create": 0,
|
|
||||||
"doctype": "DocPerm",
|
|
||||||
"match": "",
|
|
||||||
"permlevel": 1,
|
|
||||||
"report": 0,
|
|
||||||
"role": "Accounts User",
|
|
||||||
"submit": 0,
|
|
||||||
"write": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"amend": 0,
|
|
||||||
"cancel": 0,
|
|
||||||
"create": 0,
|
|
||||||
"doctype": "DocPerm",
|
|
||||||
"match": "",
|
|
||||||
"permlevel": 1,
|
|
||||||
"role": "Purchase User",
|
|
||||||
"submit": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"amend": 0,
|
|
||||||
"cancel": 0,
|
|
||||||
"create": 1,
|
|
||||||
"doctype": "DocPerm",
|
|
||||||
"match": "",
|
|
||||||
"permlevel": 0,
|
|
||||||
"report": 1,
|
|
||||||
"role": "Purchase User",
|
|
||||||
"submit": 0,
|
|
||||||
"write": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"amend": 1,
|
|
||||||
"cancel": 1,
|
|
||||||
"create": 1,
|
|
||||||
"doctype": "DocPerm",
|
|
||||||
"permlevel": 0,
|
|
||||||
"report": 1,
|
|
||||||
"role": "Accounts User",
|
"role": "Accounts User",
|
||||||
"submit": 1,
|
"submit": 1,
|
||||||
"write": 1
|
"write": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"amend": 0,
|
||||||
|
"cancel": 0,
|
||||||
|
"create": 1,
|
||||||
|
"doctype": "DocPerm",
|
||||||
|
"role": "Purchase User",
|
||||||
|
"submit": 0,
|
||||||
|
"write": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"amend": 0,
|
||||||
|
"cancel": 0,
|
||||||
|
"create": 0,
|
||||||
"doctype": "DocPerm",
|
"doctype": "DocPerm",
|
||||||
"match": "supplier",
|
"match": "supplier",
|
||||||
"permlevel": 0,
|
"role": "Supplier",
|
||||||
"report": 1,
|
"submit": 0,
|
||||||
"role": "Supplier"
|
"write": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"amend": 1,
|
||||||
|
"cancel": 1,
|
||||||
|
"create": 1,
|
||||||
|
"doctype": "DocPerm",
|
||||||
|
"role": "Accounts Manager",
|
||||||
|
"submit": 1,
|
||||||
|
"write": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"amend": 0,
|
||||||
|
"cancel": 0,
|
||||||
|
"create": 0,
|
||||||
|
"doctype": "DocPerm",
|
||||||
|
"role": "Auditor",
|
||||||
|
"submit": 0,
|
||||||
|
"write": 0
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -36,7 +36,7 @@ def execute(filters=None):
|
|||||||
# invoice details
|
# invoice details
|
||||||
sales_order = ", ".join(invoice_so_dn_map.get(inv.name, {}).get("sales_order", []))
|
sales_order = ", ".join(invoice_so_dn_map.get(inv.name, {}).get("sales_order", []))
|
||||||
delivery_note = ", ".join(invoice_so_dn_map.get(inv.name, {}).get("delivery_note", []))
|
delivery_note = ", ".join(invoice_so_dn_map.get(inv.name, {}).get("delivery_note", []))
|
||||||
# webnotes.errprint(customer_map.get(inv.customer, []))
|
|
||||||
row = [inv.name, inv.posting_date, inv.customer, inv.debit_to,
|
row = [inv.name, inv.posting_date, inv.customer, inv.debit_to,
|
||||||
account_map.get(inv.debit_to), customer_map.get(inv.customer), inv.project_name,
|
account_map.get(inv.debit_to), customer_map.get(inv.customer), inv.project_name,
|
||||||
inv.remarks, sales_order, delivery_note]
|
inv.remarks, sales_order, delivery_note]
|
||||||
|
|||||||
@@ -111,6 +111,10 @@ wn.module_page["Buying"] = [
|
|||||||
"label":wn._("Purchase In Transit"),
|
"label":wn._("Purchase In Transit"),
|
||||||
route: "query-report/Purchase In Transit",
|
route: "query-report/Purchase In Transit",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"label":wn._("Requested Items To Be Ordered"),
|
||||||
|
route: "query-report/Requested Items To Be Ordered",
|
||||||
|
},
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"creation": "2013-05-13 16:10:02",
|
||||||
|
"docstatus": 0,
|
||||||
|
"modified": "2013-05-13 16:21:07",
|
||||||
|
"modified_by": "Administrator",
|
||||||
|
"owner": "Administrator"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"add_total_row": 1,
|
||||||
|
"doctype": "Report",
|
||||||
|
"is_standard": "Yes",
|
||||||
|
"name": "__common__",
|
||||||
|
"query": "select \n mr.name as \"Material Request:Link/Material Request:120\",\n\tmr.transaction_date as \"Date:Date:100\",\n\tmr_item.item_code as \"Item Code:Link/Item:120\",\n\tmr_item.qty as \"Qty:Float:100\",\n\tmr_item.ordered_qty as \"Ordered Qty:Float:100\", \n\t(mr_item.qty - ifnull(mr_item.ordered_qty, 0)) as \"Qty to Order:Float:100\",\n\tmr_item.item_name as \"Item Name::150\",\n\tmr_item.description as \"Description::200\"\nfrom\n\t`tabMaterial Request` mr, `tabMaterial Request Item` mr_item\nwhere\n\tmr_item.parent = mr.name\n\tand mr.material_request_type = \"Purchase\"\n\tand mr.docstatus = 1\n\tand mr.status != \"Stopped\"\n\tand ifnull(mr_item.ordered_qty, 0) < ifnull(mr_item.qty, 0)\norder by mr.transaction_date asc",
|
||||||
|
"ref_doctype": "Purchase Order",
|
||||||
|
"report_name": "Requested Items To Be Ordered",
|
||||||
|
"report_type": "Query Report"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"doctype": "Report",
|
||||||
|
"name": "Requested Items To Be Ordered"
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -114,7 +114,7 @@
|
|||||||
"ticket": {
|
"ticket": {
|
||||||
"no_cache": true,
|
"no_cache": true,
|
||||||
"template": "app/website/templates/pages/ticket",
|
"template": "app/website/templates/pages/ticket",
|
||||||
"get_website_args": "support.doctype.support_ticket.support_ticket.get_website_args"
|
"args_method": "support.doctype.support_ticket.support_ticket.get_website_args"
|
||||||
},
|
},
|
||||||
"tickets": {
|
"tickets": {
|
||||||
"template": "app/website/templates/pages/tickets"
|
"template": "app/website/templates/pages/tickets"
|
||||||
@@ -122,6 +122,10 @@
|
|||||||
"writers": {
|
"writers": {
|
||||||
"template": "app/website/templates/pages/writers",
|
"template": "app/website/templates/pages/writers",
|
||||||
"args_method": "website.helpers.blog.get_writers_args"
|
"args_method": "website.helpers.blog.get_writers_args"
|
||||||
|
},
|
||||||
|
"profile": {
|
||||||
|
"no_cache": true,
|
||||||
|
"template": "app/website/templates/pages/profile"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"generators": {
|
"generators": {
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ class DocType:
|
|||||||
if not "Employee" in webnotes.conn.sql_list("""select role from tabUserRole
|
if not "Employee" in webnotes.conn.sql_list("""select role from tabUserRole
|
||||||
where parent=%s""", self.doc.user_id):
|
where parent=%s""", self.doc.user_id):
|
||||||
from webnotes.profile import add_role
|
from webnotes.profile import add_role
|
||||||
add_role(self.doc.user_id, "HR User")
|
add_role(self.doc.user_id, "Employee")
|
||||||
|
|
||||||
profile_wrapper = webnotes.bean("Profile", self.doc.user_id)
|
profile_wrapper = webnotes.bean("Profile", self.doc.user_id)
|
||||||
|
|
||||||
|
|||||||
@@ -75,7 +75,6 @@ erpnext.hr.AttendanceControlPanel = wn.ui.form.Controller.extend({
|
|||||||
r.messages = ["<h4 style='color:green'>Import Successful!</h4>"].
|
r.messages = ["<h4 style='color:green'>Import Successful!</h4>"].
|
||||||
concat(r.messages)
|
concat(r.messages)
|
||||||
}
|
}
|
||||||
console.log(r.messages);
|
|
||||||
|
|
||||||
$.each(r.messages, function(i, v) {
|
$.each(r.messages, function(i, v) {
|
||||||
var $p = $('<p>').html(v).appendTo($log_wrapper);
|
var $p = $('<p>').html(v).appendTo($log_wrapper);
|
||||||
|
|||||||
@@ -100,7 +100,6 @@ def get_naming_series():
|
|||||||
def upload():
|
def upload():
|
||||||
from webnotes.utils.datautils import read_csv_content_from_uploaded_file
|
from webnotes.utils.datautils import read_csv_content_from_uploaded_file
|
||||||
from webnotes.modules import scrub
|
from webnotes.modules import scrub
|
||||||
from core.page.data_import_tool.data_import_tool import check_record, import_doc
|
|
||||||
|
|
||||||
rows = read_csv_content_from_uploaded_file()
|
rows = read_csv_content_from_uploaded_file()
|
||||||
if not rows:
|
if not rows:
|
||||||
@@ -112,6 +111,9 @@ def upload():
|
|||||||
ret = []
|
ret = []
|
||||||
error = False
|
error = False
|
||||||
|
|
||||||
|
from webnotes.utils.datautils import check_record, import_doc
|
||||||
|
doctype_dl = webnotes.get_doctype("Attendance")
|
||||||
|
|
||||||
for i, row in enumerate(rows[5:]):
|
for i, row in enumerate(rows[5:]):
|
||||||
if not row: continue
|
if not row: continue
|
||||||
row_idx = i + 5
|
row_idx = i + 5
|
||||||
@@ -121,7 +123,7 @@ def upload():
|
|||||||
d["docstatus"] = webnotes.conn.get_value("Attendance", d.name, "docstatus")
|
d["docstatus"] = webnotes.conn.get_value("Attendance", d.name, "docstatus")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
check_record(d)
|
check_record(d, doctype_dl=doctype_dl)
|
||||||
ret.append(import_doc(d, "Attendance", 1, row_idx, submit=True))
|
ret.append(import_doc(d, "Attendance", 1, row_idx, submit=True))
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
error = True
|
error = True
|
||||||
|
|||||||
@@ -177,6 +177,14 @@ wn.module_page["HR"] = [
|
|||||||
"label":wn._("Employee Information"),
|
"label":wn._("Employee Information"),
|
||||||
route: "Report2/Employee/Employee Information"
|
route: "Report2/Employee/Employee Information"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"label":wn._("Monthly Salary Register"),
|
||||||
|
route: "query-report/Monthly Salary Register"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label":wn._("Monthly Attendance Sheet"),
|
||||||
|
route: "query-report/Monthly Attendance Sheet"
|
||||||
|
},
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|||||||
0
hr/report/monthly_attendance_sheet/__init__.py
Normal file
0
hr/report/monthly_attendance_sheet/__init__.py
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
wn.query_reports["Monthly Attendance Sheet"] = {
|
||||||
|
"filters": [
|
||||||
|
{
|
||||||
|
"fieldname":"month",
|
||||||
|
"label": "Month",
|
||||||
|
"fieldtype": "Select",
|
||||||
|
"options": "Jan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug\nSep\nOct\nNov\nDec",
|
||||||
|
"default": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov",
|
||||||
|
"Dec"][wn.datetime.str_to_obj(wn.datetime.get_today()).getMonth()],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname":"fiscal_year",
|
||||||
|
"label": "Fiscal Year",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"options": "Fiscal Year",
|
||||||
|
"default": sys_defaults.fiscal_year,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname":"employee",
|
||||||
|
"label": "Employee",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"options": "Employee"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname":"company",
|
||||||
|
"label": "Company",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"options": "Company",
|
||||||
|
"default": sys_defaults.company
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
107
hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py
Normal file
107
hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
# 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
|
||||||
|
import webnotes
|
||||||
|
from webnotes.utils import cstr, cint
|
||||||
|
from webnotes import msgprint, _
|
||||||
|
|
||||||
|
def execute(filters=None):
|
||||||
|
if not filters: filters = {}
|
||||||
|
|
||||||
|
conditions, filters = get_conditions(filters)
|
||||||
|
columns = get_columns(filters)
|
||||||
|
att_map = get_attendance_list(conditions, filters)
|
||||||
|
emp_map = get_employee_details()
|
||||||
|
|
||||||
|
data = []
|
||||||
|
for emp in sorted(att_map):
|
||||||
|
emp_det = emp_map.get(emp)
|
||||||
|
row = [emp, emp_det.employee_name, emp_det.branch, emp_det.department, emp_det.designation,
|
||||||
|
emp_det.company]
|
||||||
|
|
||||||
|
total_p = total_a = 0.0
|
||||||
|
for day in range(filters["total_days_in_month"]):
|
||||||
|
status = att_map.get(emp).get(day + 1, "Absent")
|
||||||
|
status_map = {"Present": "P", "Absent": "A", "Half Day": "HD"}
|
||||||
|
row.append(status_map[status])
|
||||||
|
|
||||||
|
if status == "Present":
|
||||||
|
total_p += 1
|
||||||
|
elif status == "Absent":
|
||||||
|
total_a += 1
|
||||||
|
elif status == "Half Day":
|
||||||
|
total_p += 0.5
|
||||||
|
total_a += 0.5
|
||||||
|
|
||||||
|
row += [total_p, total_a]
|
||||||
|
|
||||||
|
data.append(row)
|
||||||
|
|
||||||
|
return columns, data
|
||||||
|
|
||||||
|
def get_columns(filters):
|
||||||
|
columns = [
|
||||||
|
"Employee:Link/Employee:120", "Employee Name::140", "Branch:Link/Branch:120",
|
||||||
|
"Department:Link/Department:120", "Designation:Link/Designation:120",
|
||||||
|
"Company:Link/Company:120"
|
||||||
|
]
|
||||||
|
|
||||||
|
for day in range(filters["total_days_in_month"]):
|
||||||
|
columns.append(cstr(day+1) +"::20")
|
||||||
|
|
||||||
|
columns += ["Total Present:Float:80", "Total Absent:Float:80"]
|
||||||
|
return columns
|
||||||
|
|
||||||
|
def get_attendance_list(conditions, filters):
|
||||||
|
attendance_list = webnotes.conn.sql("""select employee, day(att_date) as day_of_month,
|
||||||
|
status from tabAttendance where docstatus = 1 %s order by employee, att_date""" %
|
||||||
|
conditions, filters, as_dict=1)
|
||||||
|
|
||||||
|
att_map = {}
|
||||||
|
for d in attendance_list:
|
||||||
|
att_map.setdefault(d.employee, webnotes._dict()).setdefault(d.day_of_month, "")
|
||||||
|
att_map[d.employee][d.day_of_month] = d.status
|
||||||
|
|
||||||
|
return att_map
|
||||||
|
|
||||||
|
def get_conditions(filters):
|
||||||
|
if not (filters.get("month") and filters.get("fiscal_year")):
|
||||||
|
msgprint(_("Please select month and year"), raise_exception=1)
|
||||||
|
|
||||||
|
filters["month"] = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov",
|
||||||
|
"Dec"].index(filters["month"]) + 1
|
||||||
|
|
||||||
|
from calendar import monthrange
|
||||||
|
filters["total_days_in_month"] = monthrange(cint(filters["fiscal_year"].split("-")[-1]),
|
||||||
|
filters["month"])[1]
|
||||||
|
|
||||||
|
conditions = " and month(att_date) = %(month)s and fiscal_year = %(fiscal_year)s"
|
||||||
|
|
||||||
|
if filters.get("company"): conditions += " and company = %(company)s"
|
||||||
|
if filters.get("employee"): conditions += " and employee = %(employee)s"
|
||||||
|
|
||||||
|
return conditions, filters
|
||||||
|
|
||||||
|
def get_employee_details():
|
||||||
|
employee = webnotes.conn.sql("""select name, employee_name, designation, department,
|
||||||
|
branch, company from tabEmployee where docstatus < 2 and status = 'Active'""", as_dict=1)
|
||||||
|
|
||||||
|
emp_map = {}
|
||||||
|
for emp in employee:
|
||||||
|
emp_map[emp.name] = emp
|
||||||
|
|
||||||
|
return emp_map
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"creation": "2013-05-13 14:04:03",
|
||||||
|
"docstatus": 0,
|
||||||
|
"modified": "2013-05-13 14:32:42",
|
||||||
|
"modified_by": "Administrator",
|
||||||
|
"owner": "Administrator"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"add_total_row": 0,
|
||||||
|
"doctype": "Report",
|
||||||
|
"is_standard": "Yes",
|
||||||
|
"name": "__common__",
|
||||||
|
"ref_doctype": "Attendance",
|
||||||
|
"report_name": "Monthly Attendance Sheet",
|
||||||
|
"report_type": "Script Report"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"doctype": "Report",
|
||||||
|
"name": "Monthly Attendance Sheet"
|
||||||
|
}
|
||||||
|
]
|
||||||
0
hr/report/monthly_salary_register/__init__.py
Normal file
0
hr/report/monthly_salary_register/__init__.py
Normal file
32
hr/report/monthly_salary_register/monthly_salary_register.js
Normal file
32
hr/report/monthly_salary_register/monthly_salary_register.js
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
wn.query_reports["Monthly Salary Register"] = {
|
||||||
|
"filters": [
|
||||||
|
{
|
||||||
|
"fieldname":"month",
|
||||||
|
"label": "Month",
|
||||||
|
"fieldtype": "Select",
|
||||||
|
"options": "Jan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug\nSep\nOct\nNov\nDec",
|
||||||
|
"default": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov",
|
||||||
|
"Dec"][wn.datetime.str_to_obj(wn.datetime.get_today()).getMonth()],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname":"fiscal_year",
|
||||||
|
"label": "Fiscal Year",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"options": "Fiscal Year",
|
||||||
|
"default": sys_defaults.fiscal_year,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname":"employee",
|
||||||
|
"label": "Employee",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"options": "Employee"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname":"company",
|
||||||
|
"label": "Company",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"options": "Company",
|
||||||
|
"default": sys_defaults.company
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
119
hr/report/monthly_salary_register/monthly_salary_register.py
Normal file
119
hr/report/monthly_salary_register/monthly_salary_register.py
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
# 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
|
||||||
|
import webnotes
|
||||||
|
from webnotes.utils import flt, cstr
|
||||||
|
from webnotes import msgprint, _
|
||||||
|
|
||||||
|
def execute(filters=None):
|
||||||
|
if not filters: filters = {}
|
||||||
|
|
||||||
|
salary_slips = get_salary_slips(filters)
|
||||||
|
columns, earning_types, ded_types = get_columns(salary_slips)
|
||||||
|
ss_earning_map = get_ss_earning_map(salary_slips)
|
||||||
|
ss_ded_map = get_ss_ded_map(salary_slips)
|
||||||
|
|
||||||
|
data = []
|
||||||
|
for ss in salary_slips:
|
||||||
|
row = [ss.employee, ss.employee_name, ss.branch, ss.department, ss.designation,
|
||||||
|
ss.company, ss.month, ss.leave_withut_pay, ss.payment_days]
|
||||||
|
|
||||||
|
for e in earning_types:
|
||||||
|
row.append(ss_earning_map.get(ss.name, {}).get(e))
|
||||||
|
|
||||||
|
row += [ss.arrear_amount, ss.leave_encashment_amount, ss.gross_pay]
|
||||||
|
|
||||||
|
for d in ded_types:
|
||||||
|
row.append(ss_ded_map.get(ss.name, {}).get(d))
|
||||||
|
|
||||||
|
row += [ss.total_deduction, ss.net_pay]
|
||||||
|
|
||||||
|
data.append(row)
|
||||||
|
|
||||||
|
return columns, data
|
||||||
|
|
||||||
|
def get_columns(salary_slips):
|
||||||
|
columns = [
|
||||||
|
"Employee:Link/Employee:120", "Employee Name::140", "Branch:Link/Branch:120",
|
||||||
|
"Department:Link/Department:120", "Designation:Link/Designation:120",
|
||||||
|
"Company:Link/Company:120", "Month::80", "Leave Without pay:Float:130",
|
||||||
|
"Payment Days:Float:120"
|
||||||
|
]
|
||||||
|
|
||||||
|
earning_types = webnotes.conn.sql_list("""select distinct e_type from `tabSalary Slip Earning`
|
||||||
|
where ifnull(e_modified_amount, 0) != 0 and parent in (%s)""" %
|
||||||
|
(', '.join(['%s']*len(salary_slips))), tuple([d.name for d in salary_slips]))
|
||||||
|
|
||||||
|
ded_types = webnotes.conn.sql_list("""select distinct d_type from `tabSalary Slip Deduction`
|
||||||
|
where ifnull(d_modified_amount, 0) != 0 and parent in (%s)""" %
|
||||||
|
(', '.join(['%s']*len(salary_slips))), tuple([d.name for d in salary_slips]))
|
||||||
|
|
||||||
|
columns = columns + [(e + ":Link/Earning Type:120") for e in earning_types] + \
|
||||||
|
["Arrear Amount:Currency:120", "Leave Encashment Amount:Currency:150",
|
||||||
|
"Gross Pay:Currency:120"] + [(d + ":Link/Deduction Type:120") for d in ded_types] + \
|
||||||
|
["Total Deduction:Currency:120", "Net Pay:Currency:120"]
|
||||||
|
|
||||||
|
return columns, earning_types, ded_types
|
||||||
|
|
||||||
|
def get_salary_slips(filters):
|
||||||
|
conditions, filters = get_conditions(filters)
|
||||||
|
salary_slips = webnotes.conn.sql("""select * from `tabSalary Slip` where docstatus = 1 %s""" %
|
||||||
|
conditions, filters, as_dict=1)
|
||||||
|
|
||||||
|
if not salary_slips:
|
||||||
|
msgprint(_("No salary slip found for month: ") + cstr(filters.get("month")) +
|
||||||
|
_(" and year: ") + cstr(filters.get("fiscal_year")), raise_exception=1)
|
||||||
|
|
||||||
|
return salary_slips
|
||||||
|
|
||||||
|
def get_conditions(filters):
|
||||||
|
conditions = ""
|
||||||
|
if filters.get("month"):
|
||||||
|
month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov",
|
||||||
|
"Dec"].index(filters["month"]) + 1
|
||||||
|
filters["month"] = month
|
||||||
|
conditions += " and month = %(month)s"
|
||||||
|
|
||||||
|
if filters.get("fiscal_year"): conditions += " and fiscal_year = %(fiscal_year)s"
|
||||||
|
if filters.get("company"): conditions += " and company = %(company)s"
|
||||||
|
if filters.get("employee"): conditions += " and employee = %(employee)s"
|
||||||
|
|
||||||
|
return conditions, filters
|
||||||
|
|
||||||
|
def get_ss_earning_map(salary_slips):
|
||||||
|
ss_earnings = webnotes.conn.sql("""select parent, e_type, e_modified_amount
|
||||||
|
from `tabSalary Slip Earning` where parent in (%s)""" %
|
||||||
|
(', '.join(['%s']*len(salary_slips))), tuple([d.name for d in salary_slips]), as_dict=1)
|
||||||
|
|
||||||
|
ss_earning_map = {}
|
||||||
|
for d in ss_earnings:
|
||||||
|
ss_earning_map.setdefault(d.parent, webnotes._dict()).setdefault(d.e_type, [])
|
||||||
|
ss_earning_map[d.parent][d.e_type] = flt(d.e_modified_amount)
|
||||||
|
|
||||||
|
return ss_earning_map
|
||||||
|
|
||||||
|
def get_ss_ded_map(salary_slips):
|
||||||
|
ss_deductions = webnotes.conn.sql("""select parent, d_type, d_modified_amount
|
||||||
|
from `tabSalary Slip Deduction` where parent in (%s)""" %
|
||||||
|
(', '.join(['%s']*len(salary_slips))), tuple([d.name for d in salary_slips]), as_dict=1)
|
||||||
|
|
||||||
|
ss_ded_map = {}
|
||||||
|
for d in ss_deductions:
|
||||||
|
ss_ded_map.setdefault(d.parent, webnotes._dict()).setdefault(d.d_type, [])
|
||||||
|
ss_ded_map[d.parent][d.e_type] = flt(d.d_modified_amount)
|
||||||
|
|
||||||
|
return ss_ded_map
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"creation": "2013-05-07 18:09:42",
|
||||||
|
"docstatus": 0,
|
||||||
|
"modified": "2013-05-07 18:09:42",
|
||||||
|
"modified_by": "Administrator",
|
||||||
|
"owner": "Administrator"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"add_total_row": 1,
|
||||||
|
"doctype": "Report",
|
||||||
|
"is_standard": "Yes",
|
||||||
|
"name": "__common__",
|
||||||
|
"ref_doctype": "Salary Slip",
|
||||||
|
"report_name": "Monthly Salary Register",
|
||||||
|
"report_type": "Script Report"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"doctype": "Report",
|
||||||
|
"name": "Monthly Salary Register"
|
||||||
|
}
|
||||||
|
]
|
||||||
34
patches/may_2013/repost_stock_for_no_posting_time.py
Normal file
34
patches/may_2013/repost_stock_for_no_posting_time.py
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
# 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
|
||||||
|
def execute():
|
||||||
|
import webnotes
|
||||||
|
from stock.stock_ledger import update_entries_after
|
||||||
|
|
||||||
|
res = webnotes.conn.sql("""select distinct item_code, warehouse from `tabStock Ledger Entry`
|
||||||
|
where posting_time = '00:00'""")
|
||||||
|
|
||||||
|
i=0
|
||||||
|
for d in res:
|
||||||
|
try:
|
||||||
|
update_entries_after({ "item_code": d[0], "warehouse": d[1] })
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
i += 1
|
||||||
|
if i%100 == 0:
|
||||||
|
webnotes.conn.sql("commit")
|
||||||
|
webnotes.conn.sql("start transaction")
|
||||||
@@ -251,4 +251,5 @@ patch_list = [
|
|||||||
"patches.april_2013.rebuild_sales_browser",
|
"patches.april_2013.rebuild_sales_browser",
|
||||||
"patches.april_2013.p08_price_list_country",
|
"patches.april_2013.p08_price_list_country",
|
||||||
"patches.may_2013.p01_selling_net_total_export",
|
"patches.may_2013.p01_selling_net_total_export",
|
||||||
|
"patches.may_2013.repost_stock_for_no_posting_time",
|
||||||
]
|
]
|
||||||
@@ -9,15 +9,21 @@ def get_time_log_list(doctype, txt, searchfield, start, page_len, filters):
|
|||||||
|
|
||||||
@webnotes.whitelist()
|
@webnotes.whitelist()
|
||||||
def query_task(doctype, txt, searchfield, start, page_len, filters):
|
def query_task(doctype, txt, searchfield, start, page_len, filters):
|
||||||
|
from webnotes.widgets.reportview import build_match_conditions
|
||||||
|
|
||||||
search_string = "%%%s%%" % txt
|
search_string = "%%%s%%" % txt
|
||||||
order_by_string = "%s%%" % txt
|
order_by_string = "%s%%" % txt
|
||||||
|
match_conditions = build_match_conditions("Task")
|
||||||
|
match_conditions = ("and" + match_conditions) if match_conditions else ""
|
||||||
|
|
||||||
return webnotes.conn.sql("""select name, subject from `tabTask`
|
return webnotes.conn.sql("""select name, subject from `tabTask`
|
||||||
where `%s` like %s or `subject` like %s
|
where (`%s` like %s or `subject` like %s) %s
|
||||||
order by
|
order by
|
||||||
case when `subject` like %s then 0 else 1 end,
|
case when `subject` like %s then 0 else 1 end,
|
||||||
case when `%s` like %s then 0 else 1 end,
|
case when `%s` like %s then 0 else 1 end,
|
||||||
`%s`,
|
`%s`,
|
||||||
subject
|
subject
|
||||||
limit %s, %s""" %
|
limit %s, %s""" %
|
||||||
(searchfield, "%s", "%s", "%s", searchfield, "%s", searchfield, "%s", "%s"),
|
(searchfield, "%s", "%s", match_conditions, "%s",
|
||||||
|
searchfield, "%s", searchfield, "%s", "%s"),
|
||||||
(search_string, search_string, order_by_string, order_by_string, start, page_len))
|
(search_string, search_string, order_by_string, order_by_string, start, page_len))
|
||||||
@@ -193,21 +193,8 @@ wn.module_page["Setup"] = [
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: wn._("Backups"),
|
title: wn._("Administration"),
|
||||||
icon: "icon-cloud-upload",
|
icon: "icon-rocket",
|
||||||
right: true,
|
|
||||||
items: [
|
|
||||||
{
|
|
||||||
"route":"Form/Backup Manager",
|
|
||||||
doctype:"Backup Manager",
|
|
||||||
label: wn._("Backup Manager"),
|
|
||||||
"description":wn._("Sync backups with remote tools like Dropbox etc.")
|
|
||||||
},
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: wn._("Update Manager"),
|
|
||||||
icon: "icon-magnet",
|
|
||||||
right: true,
|
right: true,
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
@@ -215,6 +202,18 @@ wn.module_page["Setup"] = [
|
|||||||
label: wn._("Update This Application"),
|
label: wn._("Update This Application"),
|
||||||
"description":wn._("Apply latest updates and patches to this app")
|
"description":wn._("Apply latest updates and patches to this app")
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"route":"Form/Backup Manager",
|
||||||
|
doctype:"Backup Manager",
|
||||||
|
label: wn._("Backup Manager"),
|
||||||
|
"description":wn._("Sync backups with remote tools like Dropbox etc.")
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"route":"List/Scheduler Log",
|
||||||
|
doctype:"Scheduler Log",
|
||||||
|
label: wn._("Scheduler Error Log"),
|
||||||
|
"description":wn._("Get a list of errors encountered by the Scheduler")
|
||||||
|
},
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -201,6 +201,10 @@ wn.module_page["Stock"] = [
|
|||||||
"label":wn._("Purchase In Transit"),
|
"label":wn._("Purchase In Transit"),
|
||||||
route: "query-report/Purchase In Transit",
|
route: "query-report/Purchase In Transit",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"label":wn._("Requested Items To Be Transferred"),
|
||||||
|
route: "query-report/Requested Items To Be Transferred",
|
||||||
|
},
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"creation": "2013-02-21 14:26:49",
|
"creation": "2013-02-22 18:01:55",
|
||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"modified": "2013-02-22 15:53:01",
|
"modified": "2013-05-13 16:11:27",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"owner": "Administrator"
|
"owner": "Administrator"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"add_total_row": 1,
|
||||||
"doctype": "Report",
|
"doctype": "Report",
|
||||||
"is_standard": "Yes",
|
"is_standard": "Yes",
|
||||||
"name": "__common__",
|
"name": "__common__",
|
||||||
"query": "select \n `tabPurchase Order`.`name` as \"Purchase Order:Link/Purchase Order:120\",\n `tabPurchase Order`.`transaction_date` as \"Date:Date:100\",\n `tabPurchase Order`.`supplier` as \"Supplier:Link/Supplier:120\",\n `tabPurchase Order`.`project_name` as \"Project\",\n `tabPurchase Order Item`.item_code as \"Item Code:Link/Item:120\",\n `tabPurchase Order Item`.qty as \"Qty:Float:100\",\n `tabPurchase Order Item`.received_qty as \"Received Qty:Float:100\", \n (`tabPurchase Order Item`.qty - ifnull(`tabPurchase Order Item`.received_qty, 0)) as \"Qty to Receive:Float:100\",\n `tabPurchase Order Item`.item_name as \"Item Name::150\",\n `tabPurchase Order Item`.description as \"Description::200\"\nfrom\n `tabPurchase Order`, `tabPurchase Order Item`\nwhere\n `tabPurchase Order Item`.`parent` = `tabPurchase Order`.`name`\n and `tabPurchase Order`.docstatus = 1\n and `tabPurchase Order`.status != \"Stopped\"\n and ifnull(`tabPurchase Order Item`.received_qty, 0) < ifnull(`tabPurchase Order Item`.qty, 0)\norder by `tabPurchase Order`.transaction_date asc",
|
"query": "select \n `tabPurchase Order`.`name` as \"Purchase Order:Link/Purchase Order:120\",\n\t`tabPurchase Order`.`transaction_date` as \"Date:Date:100\",\n\t`tabPurchase Order`.`supplier` as \"Supplier:Link/Supplier:120\",\n\t`tabPurchase Order`.`project_name` as \"Project\",\n\t`tabPurchase Order Item`.item_code as \"Item Code:Link/Item:120\",\n\t`tabPurchase Order Item`.qty as \"Qty:Float:100\",\n\t`tabPurchase Order Item`.received_qty as \"Received Qty:Float:100\", \n\t(`tabPurchase Order Item`.qty - ifnull(`tabPurchase Order Item`.received_qty, 0)) as \"Qty to Receive:Float:100\",\n\t`tabPurchase Order Item`.item_name as \"Item Name::150\",\n\t`tabPurchase Order Item`.description as \"Description::200\"\nfrom\n\t`tabPurchase Order`, `tabPurchase Order Item`\nwhere\n\t`tabPurchase Order Item`.`parent` = `tabPurchase Order`.`name`\n\tand `tabPurchase Order`.docstatus = 1\n\tand `tabPurchase Order`.status != \"Stopped\"\n\tand ifnull(`tabPurchase Order Item`.received_qty, 0) < ifnull(`tabPurchase Order Item`.qty, 0)\norder by `tabPurchase Order`.transaction_date asc",
|
||||||
"ref_doctype": "Purchase Receipt",
|
"ref_doctype": "Purchase Receipt",
|
||||||
"report_name": "Purchase Order Items To Be Received",
|
"report_name": "Purchase Order Items To Be Received",
|
||||||
"report_type": "Query Report"
|
"report_type": "Query Report"
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"creation": "2013-05-13 16:23:05",
|
||||||
|
"docstatus": 0,
|
||||||
|
"modified": "2013-05-13 16:25:08",
|
||||||
|
"modified_by": "Administrator",
|
||||||
|
"owner": "Administrator"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"add_total_row": 1,
|
||||||
|
"doctype": "Report",
|
||||||
|
"is_standard": "Yes",
|
||||||
|
"name": "__common__",
|
||||||
|
"query": "select \n mr.name as \"Material Request:Link/Material Request:120\",\n\tmr.transaction_date as \"Date:Date:100\",\n\tmr_item.item_code as \"Item Code:Link/Item:120\",\n\tmr_item.qty as \"Qty:Float:100\",\n\tmr_item.ordered_qty as \"Transferred Qty:Float:100\", \n\t(mr_item.qty - ifnull(mr_item.ordered_qty, 0)) as \"Qty to Transfer:Float:100\",\n\tmr_item.item_name as \"Item Name::150\",\n\tmr_item.description as \"Description::200\"\nfrom\n\t`tabMaterial Request` mr, `tabMaterial Request Item` mr_item\nwhere\n\tmr_item.parent = mr.name\n\tand mr.material_request_type = \"Transfer\"\n\tand mr.docstatus = 1\n\tand mr.status != \"Stopped\"\n\tand ifnull(mr_item.ordered_qty, 0) < ifnull(mr_item.qty, 0)\norder by mr.transaction_date asc",
|
||||||
|
"ref_doctype": "Stock Entry",
|
||||||
|
"report_name": "Requested Items To Be Transferred",
|
||||||
|
"report_type": "Query Report"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"doctype": "Report",
|
||||||
|
"name": "Requested Items To Be Transferred"
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -86,7 +86,7 @@ def get_tickets():
|
|||||||
webnotes.session.user, as_dict=1)
|
webnotes.session.user, as_dict=1)
|
||||||
return tickets
|
return tickets
|
||||||
|
|
||||||
def get_website_args():
|
def get_website_args():
|
||||||
bean = webnotes.bean("Support Ticket", webnotes.form_dict.name)
|
bean = webnotes.bean("Support Ticket", webnotes.form_dict.name)
|
||||||
if bean.doc.raised_by != webnotes.session.user:
|
if bean.doc.raised_by != webnotes.session.user:
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -4,10 +4,9 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import webnotes
|
import webnotes
|
||||||
from webnotes.utils import cstr
|
from webnotes.utils import cstr, cint
|
||||||
from webnotes.webutils import build_html, delete_page_cache
|
from webnotes.webutils import build_html, delete_page_cache
|
||||||
|
|
||||||
|
|
||||||
@webnotes.whitelist(allow_guest=True)
|
@webnotes.whitelist(allow_guest=True)
|
||||||
def get_product_info(item_code):
|
def get_product_info(item_code):
|
||||||
"""get product price / stock info"""
|
"""get product price / stock info"""
|
||||||
@@ -20,10 +19,20 @@ def get_product_info(item_code):
|
|||||||
in_stock = in_stock[0][0] > 0 and 1 or 0
|
in_stock = in_stock[0][0] > 0 and 1 or 0
|
||||||
else:
|
else:
|
||||||
in_stock = -1
|
in_stock = -1
|
||||||
|
|
||||||
|
price = price_list and webnotes.conn.sql("""select ref_rate, ref_currency from
|
||||||
|
`tabItem Price` where parent=%s and price_list_name=%s""",
|
||||||
|
(item_code, price_list), as_dict=1) or []
|
||||||
|
|
||||||
|
price = price and price[0] or None
|
||||||
|
|
||||||
|
if price:
|
||||||
|
price["ref_currency"] = not cint(webnotes.conn.get_default("hide_currency_symbol")) \
|
||||||
|
and (webnotes.conn.get_value("Currency", price.ref_currency, "symbol") or price.ref_currency) \
|
||||||
|
or ""
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"price": price_list and webnotes.conn.sql("""select ref_rate, ref_currency from
|
"price": price,
|
||||||
`tabItem Price` where parent=%s and price_list_name=%s""",
|
|
||||||
(item_code, price_list), as_dict=1) or [],
|
|
||||||
"stock": in_stock
|
"stock": in_stock
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,4 +7,7 @@
|
|||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
line-height: 200%;
|
line-height: 200%;
|
||||||
}
|
}
|
||||||
|
.item-price {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
@@ -35,23 +35,25 @@
|
|||||||
{{ web_long_description or web_short_description or
|
{{ web_long_description or web_short_description or
|
||||||
"[No description given]" }}
|
"[No description given]" }}
|
||||||
</div>
|
</div>
|
||||||
{% if obj.doclist.get({"doctype":"Item Website Specification"}) %}
|
<div class="item-price hide"></div>
|
||||||
|
<div class="item-stock"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% if obj.doclist.get({"doctype":"Item Website Specification"}) -%}
|
||||||
|
<div class="row" style="margin-top: 20px">
|
||||||
|
<div class="span12">
|
||||||
<h4>Specifications</h4>
|
<h4>Specifications</h4>
|
||||||
<table class="table table-bordered" style="width: 100%">
|
<table class="table table-bordered" style="width: 100%">
|
||||||
{% for d in obj.doclist.get(
|
{% for d in obj.doclist.get(
|
||||||
{"doctype":"Item Website Specification"}) %}
|
{"doctype":"Item Website Specification"}) -%}
|
||||||
<tr>
|
<tr>
|
||||||
<td style="width: 30%;">{{ d.label }}</td>
|
<td style="width: 30%;">{{ d.label }}</td>
|
||||||
<td>{{ d.description }}</td>
|
<td>{{ d.description }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{%- endfor %}
|
||||||
</table>
|
</table>
|
||||||
{% endif %}
|
|
||||||
<div class="item-price hide">
|
|
||||||
<p>Price:</p>
|
|
||||||
</div>
|
|
||||||
<div class="item-stock"></div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{%- endif %}
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@@ -26,8 +26,8 @@ $(document).ready(function() {
|
|||||||
success: function(data) {
|
success: function(data) {
|
||||||
if(data.message) {
|
if(data.message) {
|
||||||
if(data.message.price) {
|
if(data.message.price) {
|
||||||
$("<h4>").html(data.message.price[0].ref_currency + " "
|
$("<h4>").html(data.message.price.ref_currency + " "
|
||||||
+ data.message.price[0].ref_rate).appendTo(".item-price");
|
+ data.message.price.ref_rate).appendTo(".item-price");
|
||||||
$(".item-price").toggle(true);
|
$(".item-price").toggle(true);
|
||||||
}
|
}
|
||||||
if(data.message.stock==0) {
|
if(data.message.stock==0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user