Landed cost redesign initial commit #1921
diff --git a/erpnext/stock/doctype/landed_cost_item/landed_cost_item.json b/erpnext/stock/doctype/landed_cost_item/landed_cost_item.json
index f761eba..c5887d4 100644
--- a/erpnext/stock/doctype/landed_cost_item/landed_cost_item.json
+++ b/erpnext/stock/doctype/landed_cost_item/landed_cost_item.json
@@ -1,27 +1,18 @@
{
- "creation": "2013-02-22 01:28:02.000000",
+ "creation": "2013-02-22 01:28:02",
"docstatus": 0,
"doctype": "DocType",
"fields": [
{
- "fieldname": "account_head",
+ "fieldname": "item_code",
"fieldtype": "Link",
"in_list_view": 1,
- "label": "Account Head",
- "oldfieldname": "account_head",
- "oldfieldtype": "Link",
- "options": "Account",
+ "label": "Item Code",
+ "options": "Item",
"permlevel": 0,
+ "read_only": 1,
"reqd": 1,
- "search_index": 1
- },
- {
- "fieldname": "cost_center",
- "fieldtype": "Link",
- "label": "Cost Center",
- "options": "Cost Center",
- "permlevel": 0,
- "reqd": 1
+ "width": "100px"
},
{
"fieldname": "description",
@@ -32,8 +23,46 @@
"oldfieldtype": "Data",
"permlevel": 0,
"print_width": "300px",
+ "read_only": 1,
"reqd": 1,
- "width": "300px"
+ "width": "120px"
+ },
+ {
+ "fieldname": "purchase_receipt",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "label": "Purchase Receipt",
+ "options": "Purchase Receipt",
+ "permlevel": 0,
+ "read_only": 1
+ },
+ {
+ "fieldname": "warehouse",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "label": "Warehouse",
+ "options": "Warehouse",
+ "permlevel": 0,
+ "read_only": 1
+ },
+ {
+ "fieldname": "col_break2",
+ "fieldtype": "Column Break",
+ "permlevel": 0
+ },
+ {
+ "fieldname": "qty",
+ "fieldtype": "Float",
+ "label": "Qty",
+ "permlevel": 0,
+ "read_only": 1
+ },
+ {
+ "fieldname": "rate",
+ "fieldtype": "Currency",
+ "label": "Rate",
+ "permlevel": 0,
+ "read_only": 1
},
{
"fieldname": "amount",
@@ -44,14 +73,34 @@
"oldfieldtype": "Currency",
"options": "currency",
"permlevel": 0,
+ "read_only": 1,
"reqd": 1
+ },
+ {
+ "fieldname": "old_valuation_rate",
+ "fieldtype": "Currency",
+ "in_list_view": 1,
+ "label": "Old Valuation Rate",
+ "permlevel": 0,
+ "read_only": 1,
+ "width": ""
+ },
+ {
+ "fieldname": "new_valuation_rate",
+ "fieldtype": "Currency",
+ "in_list_view": 1,
+ "label": "New Valuation Rate",
+ "permlevel": 0,
+ "read_only": 1,
+ "width": ""
}
],
"idx": 1,
"istable": 1,
- "modified": "2013-12-20 19:23:18.000000",
+ "modified": "2014-07-11 15:20:53.714633",
"modified_by": "Administrator",
"module": "Stock",
"name": "Landed Cost Item",
- "owner": "wasim@webnotestech.com"
+ "owner": "wasim@webnotestech.com",
+ "permissions": []
}
\ No newline at end of file
diff --git a/erpnext/stock/doctype/landed_cost_purchase_receipt/landed_cost_purchase_receipt.json b/erpnext/stock/doctype/landed_cost_purchase_receipt/landed_cost_purchase_receipt.json
index b50c148..651f288 100644
--- a/erpnext/stock/doctype/landed_cost_purchase_receipt/landed_cost_purchase_receipt.json
+++ b/erpnext/stock/doctype/landed_cost_purchase_receipt/landed_cost_purchase_receipt.json
@@ -1,5 +1,5 @@
{
- "creation": "2013-02-22 01:28:02.000000",
+ "creation": "2013-02-22 01:28:02",
"docstatus": 0,
"doctype": "DocType",
"fields": [
@@ -13,14 +13,48 @@
"options": "Purchase Receipt",
"permlevel": 0,
"print_width": "220px",
+ "read_only": 0,
+ "reqd": 1,
"width": "220px"
+ },
+ {
+ "fieldname": "supplier",
+ "fieldtype": "Link",
+ "in_list_view": 1,
+ "label": "Supplier",
+ "options": "Supplier",
+ "permlevel": 0,
+ "read_only": 1
+ },
+ {
+ "fieldname": "col_break1",
+ "fieldtype": "Column Break",
+ "permlevel": 0,
+ "width": "50%"
+ },
+ {
+ "fieldname": "posting_date",
+ "fieldtype": "Date",
+ "in_list_view": 1,
+ "label": "Posting Date",
+ "permlevel": 0,
+ "read_only": 1
+ },
+ {
+ "fieldname": "grand_total",
+ "fieldtype": "Currency",
+ "in_list_view": 1,
+ "label": "Grand Total",
+ "permlevel": 0,
+ "read_only": 1
}
],
"idx": 1,
"istable": 1,
- "modified": "2013-12-20 19:23:18.000000",
+ "modified": "2014-07-11 12:12:08.572263",
"modified_by": "Administrator",
"module": "Stock",
"name": "Landed Cost Purchase Receipt",
- "owner": "wasim@webnotestech.com"
+ "owner": "wasim@webnotestech.com",
+ "permissions": []
}
\ No newline at end of file
diff --git a/erpnext/stock/doctype/landed_cost_taxes_and_charges/__init__.py b/erpnext/stock/doctype/landed_cost_taxes_and_charges/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/stock/doctype/landed_cost_taxes_and_charges/__init__.py
diff --git a/erpnext/stock/doctype/landed_cost_taxes_and_charges/landed_cost_taxes_and_charges.json b/erpnext/stock/doctype/landed_cost_taxes_and_charges/landed_cost_taxes_and_charges.json
new file mode 100644
index 0000000..d077dbc
--- /dev/null
+++ b/erpnext/stock/doctype/landed_cost_taxes_and_charges/landed_cost_taxes_and_charges.json
@@ -0,0 +1,51 @@
+{
+ "creation": "2014-07-11 11:51:00.453717",
+ "docstatus": 0,
+ "doctype": "DocType",
+ "document_type": "",
+ "fields": [
+ {
+ "fieldname": "description",
+ "fieldtype": "Small Text",
+ "in_list_view": 1,
+ "label": "Description",
+ "permlevel": 0,
+ "reqd": 1
+ },
+ {
+ "fieldname": "col_break3",
+ "fieldtype": "Column Break",
+ "permlevel": 0,
+ "width": "50%"
+ },
+ {
+ "fieldname": "account",
+ "fieldtype": "Link",
+ "in_list_view": 1,
+ "label": "Account",
+ "options": "Account",
+ "permlevel": 0,
+ "print_hide": 1,
+ "read_only": 0,
+ "reqd": 1
+ },
+ {
+ "fieldname": "amount",
+ "fieldtype": "Currency",
+ "in_list_view": 1,
+ "label": "Amount",
+ "permlevel": 0,
+ "reqd": 1
+ }
+ ],
+ "istable": 1,
+ "modified": "2014-07-11 13:00:14.770284",
+ "modified_by": "Administrator",
+ "module": "Stock",
+ "name": "Landed Cost Taxes and Charges",
+ "name_case": "",
+ "owner": "Administrator",
+ "permissions": [],
+ "sort_field": "modified",
+ "sort_order": "DESC"
+}
\ No newline at end of file
diff --git a/erpnext/stock/doctype/landed_cost_taxes_and_charges/landed_cost_taxes_and_charges.py b/erpnext/stock/doctype/landed_cost_taxes_and_charges/landed_cost_taxes_and_charges.py
new file mode 100644
index 0000000..2e1f5a3
--- /dev/null
+++ b/erpnext/stock/doctype/landed_cost_taxes_and_charges/landed_cost_taxes_and_charges.py
@@ -0,0 +1,9 @@
+# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
+# For license information, please see license.txt
+
+from __future__ import unicode_literals
+import frappe
+from frappe.model.document import Document
+
+class LandedCostTaxesandCharges(Document):
+ pass
\ No newline at end of file
diff --git a/erpnext/stock/doctype/landed_cost_voucher/__init__.py b/erpnext/stock/doctype/landed_cost_voucher/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/stock/doctype/landed_cost_voucher/__init__.py
diff --git a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js
new file mode 100644
index 0000000..47ba0e1
--- /dev/null
+++ b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js
@@ -0,0 +1,82 @@
+// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
+// License: GNU General Public License v3. See license.txt
+
+
+frappe.provide("erpnext.stock");
+frappe.require("assets/erpnext/js/controllers/stock_controller.js");
+
+erpnext.stock.LandedCostVoucher = erpnext.stock.StockController.extend({
+ setup: function() {
+ var me = this;
+ this.frm.fields_dict.landed_cost_purchase_receipts.grid.get_field('purchase_receipt').get_query =
+ function() {
+ if(!me.frm.doc.company) msgprint(__("Please enter company first"));
+ return {
+ filters:[
+ ['Purchase Receipt', 'docstatus', '=', '1'],
+ ['Purchase Receipt', 'company', '=', me.frm.doc.company],
+ ]
+ }
+ };
+
+ this.frm.fields_dict.landed_cost_taxes_and_charges.grid.get_field('account').get_query = function() {
+ if(!me.frm.doc.company) msgprint(__("Please enter company first"));
+ return {
+ filters:[
+ ['Account', 'group_or_ledger', '=', 'Ledger'],
+ ['Account', 'account_type', 'in', ['Tax', 'Chargeable']],
+ ['Account', 'company', '=', me.frm.doc.company]
+ ]
+ }
+ };
+
+ this.frm.add_fetch("purchase_receipt", "supplier", "supplier");
+ this.frm.add_fetch("purchase_receipt", "posting_date", "posting_date");
+ this.frm.add_fetch("purchase_receipt", "grand_total", "grand_total");
+
+ },
+
+ get_items_from_purchase_receipts: function() {
+ var me = this;
+ if(!this.frm.doc.landed_cost_purchase_receipts.length) {
+ msgprint(__("Please enter Purchase Receipt first"));
+ } else {
+ return this.frm.call({
+ doc: me.frm.doc,
+ method: "get_items_from_purchase_receipts"
+ });
+ }
+ },
+
+ amount: function() {
+ this.set_total_taxes_and_charges();
+ this.set_new_valuation_rate();
+ },
+
+ set_total_taxes_and_charges: function() {
+ total_taxes_and_charges = 0.0;
+ $.each(this.frm.doc.landed_cost_taxes_and_charges, function(i, d) {
+ total_taxes_and_charges += flt(d.amount)
+ });
+ cur_frm.set_value("total_taxes_and_charges", total_taxes_and_charges);
+ },
+
+ set_new_valuation_rate: function() {
+ var me = this;
+ if(this.frm.doc.landed_cost_taxes_and_charges.length) {
+ var total_item_cost = 0.0;
+ $.each(this.frm.doc.landed_cost_items, function(i, d) {
+ total_item_cost += flt(d.amount)
+ });
+
+ $.each(this.frm.doc.landed_cost_items, function(i, item) {
+ var charges_for_item = flt(item.amount) * flt(me.frm.doc.total_taxes_and_charges) / flt(total_item_cost)
+ item.new_valuation_rate = flt(item.old_valuation_rate) + charges_for_item
+ });
+ refresh_field("landed_cost_items");
+ }
+ }
+
+});
+
+cur_frm.script_manager.make(erpnext.stock.LandedCostVoucher);
\ No newline at end of file
diff --git a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.json b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.json
new file mode 100644
index 0000000..11425c2
--- /dev/null
+++ b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.json
@@ -0,0 +1,97 @@
+{
+ "allow_import": 0,
+ "autoname": "LCV.####",
+ "creation": "2014-07-11 11:33:42.547339",
+ "docstatus": 0,
+ "doctype": "DocType",
+ "document_type": "Transaction",
+ "fields": [
+ {
+ "fieldname": "company",
+ "fieldtype": "Link",
+ "in_list_view": 1,
+ "label": "Company",
+ "options": "Company",
+ "permlevel": 0,
+ "reqd": 1
+ },
+ {
+ "fieldname": "landed_cost_purchase_receipts",
+ "fieldtype": "Table",
+ "label": "Purchase Receipts",
+ "options": "Landed Cost Purchase Receipt",
+ "permlevel": 0
+ },
+ {
+ "fieldname": "get_items_from_purchase_receipts",
+ "fieldtype": "Button",
+ "label": "Get Items From Purchase Receipts",
+ "permlevel": 0
+ },
+ {
+ "fieldname": "landed_cost_items",
+ "fieldtype": "Table",
+ "label": "Purchase Receipt Items",
+ "no_copy": 1,
+ "options": "Landed Cost Item",
+ "permlevel": 0,
+ "read_only": 0
+ },
+ {
+ "fieldname": "landed_cost_taxes_and_charges",
+ "fieldtype": "Table",
+ "label": "Taxes and Charges",
+ "options": "Landed Cost Taxes and Charges",
+ "permlevel": 0
+ },
+ {
+ "fieldname": "total_taxes_and_charges",
+ "fieldtype": "Currency",
+ "label": "Total Taxes and Charges",
+ "permlevel": 0,
+ "read_only": 1,
+ "reqd": 1
+ },
+ {
+ "fieldname": "landed_cost_help",
+ "fieldtype": "HTML",
+ "label": "Landed Cost Help",
+ "options": "",
+ "permlevel": 0
+ },
+ {
+ "fieldname": "amended_from",
+ "fieldtype": "Link",
+ "label": "Amended From",
+ "no_copy": 1,
+ "options": "Landed Cost Voucher",
+ "permlevel": 0,
+ "print_hide": 1,
+ "read_only": 1
+ }
+ ],
+ "is_submittable": 1,
+ "modified": "2014-07-11 15:34:51.306164",
+ "modified_by": "Administrator",
+ "module": "Stock",
+ "name": "Landed Cost Voucher",
+ "name_case": "",
+ "owner": "Administrator",
+ "permissions": [
+ {
+ "amend": 1,
+ "cancel": 1,
+ "create": 1,
+ "delete": 1,
+ "export": 1,
+ "permlevel": 0,
+ "read": 1,
+ "report": 1,
+ "role": "Material Manager",
+ "submit": 1,
+ "write": 1
+ }
+ ],
+ "sort_field": "modified",
+ "sort_order": "DESC"
+}
\ No newline at end of file
diff --git a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py
new file mode 100644
index 0000000..7ebdb0b
--- /dev/null
+++ b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py
@@ -0,0 +1,83 @@
+# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
+# For license information, please see license.txt
+
+from __future__ import unicode_literals
+import frappe
+from frappe import _
+from frappe.utils import flt
+from frappe.model.document import Document
+
+class LandedCostVoucher(Document):
+ def get_items_from_purchase_receipts(self):
+ self.set("landed_cost_items", [])
+ for pr in self.get("landed_cost_purchase_receipts"):
+ pr_items = frappe.db.sql("""select item_code, description, qty, rate, amount, valuation_rate, warehouse
+ from `tabPurchase Receipt Item` where parent = %s""", pr.purchase_receipt, as_dict=True)
+ for d in pr_items:
+ item = self.append("landed_cost_items")
+ item.item_code = d.item_code
+ item.description = d.description
+ item.qty = d.qty
+ item.rate = d.rate
+ item.amount = d.amount
+ item.old_valuation_rate = d.valuation_rate
+ item.purchase_receipt = pr.purchase_receipt
+ item.warehouse = d.warehouse
+
+ if self.total_taxes_and_charges:
+ self.set_new_valuation_rate()
+
+ def validate(self):
+ self.check_mandatory()
+ self.validate_purchase_receipts()
+ self.set_total_taxes_and_charges()
+ if not self.get("landed_cost_items"):
+ self.get_items_from_purchase_receipts()
+ else:
+ self.set_new_valuation_rate()
+
+ def check_mandatory(self):
+ if not self.get("landed_cost_purchase_receipts"):
+ frappe.throw(_("Please enter Purchase Receipts"))
+
+ if not self.get("landed_cost_taxes_and_charges"):
+ frappe.throw(_("Please enter Taxes and Charges"))
+
+ def validate_purchase_receipts(self):
+ purchase_receipts = []
+ for d in self.get("landed_cost_purchase_receipts"):
+ if frappe.db.get_value("Purchase Receipt", d.purchase_receipt, "docstatus") != 1:
+ frappe.throw(_("Purchase Receipt must be submitted"))
+ else:
+ purchase_receipts.append(d.purchase_receipt)
+
+ for item in self.get("landed_cost_items"):
+ if not item.purchase_receipt:
+ frappe.throw(_("Item must be added using 'Get Items from Purchase Receipts' button"))
+ elif item.purchase_receipt not in purchase_receipts:
+ frappe.throw(_("Item Row {0}: Purchase Reciept {1} does not exist in above 'Purchase Receipts' table")
+ .format(item.idx, item.purchase_receipt))
+
+ def set_total_taxes_and_charges(self):
+ total_taxes_and_charges = 0.0
+ for d in self.get("landed_cost_taxes_and_charges"):
+ total_taxes_and_charges += flt(d.amount)
+
+ self.total_taxes_and_charges = total_taxes_and_charges
+
+ def set_new_valuation_rate(self):
+ total_item_cost = sum([flt(d.amount) for d in self.get("landed_cost_items")])
+
+ for item in self.get("landed_cost_items"):
+ charges_for_item = flt(item.amount) * flt(self.total_taxes_and_charges) / flt(total_item_cost)
+ item.new_valuation_rate = flt(item.old_valuation_rate) + charges_for_item
+
+ def on_submit(self):
+ self.make_stock_ledger_entries()
+ self.make_gl_entries()
+
+ def make_stock_ledger_entries(self):
+ pass
+
+ def make_gl_entries(self):
+ pass
\ No newline at end of file