diff --git a/accounts/doctype/sales_invoice/sales_invoice.py b/accounts/doctype/sales_invoice/sales_invoice.py index 9b5c80cfbb3..4b926439a25 100644 --- a/accounts/doctype/sales_invoice/sales_invoice.py +++ b/accounts/doctype/sales_invoice/sales_invoice.py @@ -608,22 +608,23 @@ class DocType(SellingController): def make_sl_entry(self, d, wh, qty, in_value, update_stock): st_uom = webnotes.conn.sql("select stock_uom from `tabItem` where name = '%s'"%d['item_code']) self.values.append({ - 'item_code' : d['item_code'], - 'warehouse' : wh, - 'transaction_date' : getdate(self.doc.modified).strftime('%Y-%m-%d'), - 'posting_date' : self.doc.posting_date, - 'posting_time' : self.doc.posting_time, - 'voucher_type' : 'Sales Invoice', - 'voucher_no' : cstr(self.doc.name), - 'voucher_detail_no' : cstr(d['name']), - 'actual_qty' : qty, - 'stock_uom' : st_uom and st_uom[0][0] or '', - 'incoming_rate' : in_value, - 'company' : self.doc.company, - 'fiscal_year' : self.doc.fiscal_year, - 'is_cancelled' : (update_stock==1) and 'No' or 'Yes', - 'batch_no' : cstr(d['batch_no']), - 'serial_no' : d['serial_no'] + 'item_code' : d['item_code'], + 'warehouse' : wh, + 'transaction_date' : getdate(self.doc.modified).strftime('%Y-%m-%d'), + 'posting_date' : self.doc.posting_date, + 'posting_time' : self.doc.posting_time, + 'voucher_type' : 'Sales Invoice', + 'voucher_no' : cstr(self.doc.name), + 'voucher_detail_no' : cstr(d['name']), + 'actual_qty' : qty, + 'stock_uom' : st_uom and st_uom[0][0] or '', + 'incoming_rate' : in_value, + 'company' : self.doc.company, + 'fiscal_year' : self.doc.fiscal_year, + 'is_cancelled' : (update_stock==1) and 'No' or 'Yes', + 'batch_no' : cstr(d['batch_no']), + 'serial_no' : d['serial_no'], + "project" : self.doc.project_name }) def update_stock_ledger(self, update_stock): diff --git a/patches/march_2013/p07_update_project_in_stock_ledger.py b/patches/march_2013/p07_update_project_in_stock_ledger.py new file mode 100644 index 00000000000..ad4d639da9a --- /dev/null +++ b/patches/march_2013/p07_update_project_in_stock_ledger.py @@ -0,0 +1,42 @@ +import webnotes + +def execute(): + webnotes.reload_doc("stock", "doctype", "stock_ledger_entry") + + # from stock entry + webnotes.conn.sql("""update + `tabStock Ledger Entry` sle, + `tabStock Entry` st + set sle.project = st.project_name + where + sle.voucher_type = "Stock Entry" + and sle.voucher_no = st.name""") + + # from purchase + webnotes.conn.sql("""update + `tabStock Ledger Entry` sle, + `tabPurchase Receipt Item` pri + set sle.project = pri.project_name + where + sle.voucher_type = "Purchase Receipt" + and sle.voucher_detail_no = pri.name""") + + # from delivery note + webnotes.conn.sql("""update + `tabStock Ledger Entry` sle, + `tabDelivery Note` dn + set sle.project = dn.project_name + where + sle.voucher_type = "Delivery Note" + and sle.voucher_no = dn.name""") + + # from pos invoice + webnotes.conn.sql("""update + `tabStock Ledger Entry` sle, + `tabSales Invoice` si + set sle.project = si.project_name + where + sle.voucher_type = "Sales Invoice" + and sle.voucher_no = si.name""") + + \ No newline at end of file diff --git a/patches/patch_list.py b/patches/patch_list.py index 9c0d9b8199f..fc9855d096b 100644 --- a/patches/patch_list.py +++ b/patches/patch_list.py @@ -214,5 +214,7 @@ patch_list = [ "patches.march_2013.p04_pos_update_stock_check", "patches.march_2013.p05_payment_reconciliation", "patches.march_2013.p06_remove_sales_purchase_return_tool", - "execute:webnotes.bean('Global Defaults').save()" + "execute:webnotes.bean('Global Defaults').save()", + "patches.march_2013.p07_update_project_in_stock_ledger", + "execute:webnotes.bean('Style Settings').save() #2013-03-25", ] \ No newline at end of file diff --git a/startup/report_data_map.py b/startup/report_data_map.py index f914277cc34..501db4f6cec 100644 --- a/startup/report_data_map.py +++ b/startup/report_data_map.py @@ -80,6 +80,11 @@ data_map = { "conditions": ["docstatus < 2"], "order_by": "name" }, + "Project": { + "columns": ["name"], + "conditions": ["docstatus < 2"], + "order_by": "name" + }, "Warehouse": { "columns": ["name"], "conditions": ["docstatus < 2"], @@ -87,13 +92,14 @@ data_map = { }, "Stock Ledger Entry": { "columns": ["name", "posting_date", "posting_time", "item_code", "warehouse", - "actual_qty as qty", "voucher_type", "voucher_no", + "actual_qty as qty", "voucher_type", "voucher_no", "project", "ifnull(incoming_rate,0) as incoming_rate", "stock_uom", "serial_no"], "conditions": ["ifnull(is_cancelled, 'No')='No'"], "order_by": "posting_date, posting_time, name", "links": { "item_code": ["Item", "name"], - "warehouse": ["Warehouse", "name"] + "warehouse": ["Warehouse", "name"], + "project": ["Project", "name"] }, "force_index": "posting_sort_index" }, diff --git a/stock/doctype/delivery_note/delivery_note.py b/stock/doctype/delivery_note/delivery_note.py index 5e3c9e94fe6..90b0ba7e2df 100644 --- a/stock/doctype/delivery_note/delivery_note.py +++ b/stock/doctype/delivery_note/delivery_note.py @@ -387,7 +387,8 @@ class DocType(SellingController): 'fiscal_year' : self.doc.fiscal_year, 'is_cancelled' : (update_stock==1) and 'No' or 'Yes', 'batch_no' : d['batch_no'], - 'serial_no' : d['serial_no'] + 'serial_no' : d['serial_no'], + "project" : self.doc.project_name }) diff --git a/stock/doctype/purchase_receipt/purchase_receipt.py b/stock/doctype/purchase_receipt/purchase_receipt.py index 7949a1c1c34..4a52a5f6924 100644 --- a/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/stock/doctype/purchase_receipt/purchase_receipt.py @@ -196,21 +196,22 @@ class DocType(BuyingController): serial_no = cstr(d.serial_no).strip() self.values.append({ - 'item_code' : d.fields.has_key('item_code') and d.item_code or d.rm_item_code, - 'warehouse' : wh, - 'posting_date' : self.doc.posting_date, - 'posting_time' : self.doc.posting_time, - 'voucher_type' : 'Purchase Receipt', - 'voucher_no' : self.doc.name, - 'voucher_detail_no' : d.name, - 'actual_qty' : qty, - 'stock_uom' : d.stock_uom, - 'incoming_rate' : in_value, - 'company' : self.doc.company, - 'fiscal_year' : self.doc.fiscal_year, - 'is_cancelled' : (is_submit==1) and 'No' or 'Yes', - 'batch_no' : cstr(d.batch_no).strip(), - 'serial_no' : serial_no + 'item_code' : d.fields.has_key('item_code') and d.item_code or d.rm_item_code, + 'warehouse' : wh, + 'posting_date' : self.doc.posting_date, + 'posting_time' : self.doc.posting_time, + 'voucher_type' : 'Purchase Receipt', + 'voucher_no' : self.doc.name, + 'voucher_detail_no' : d.name, + 'actual_qty' : qty, + 'stock_uom' : d.stock_uom, + 'incoming_rate' : in_value, + 'company' : self.doc.company, + 'fiscal_year' : self.doc.fiscal_year, + 'is_cancelled' : (is_submit==1) and 'No' or 'Yes', + 'batch_no' : cstr(d.batch_no).strip(), + 'serial_no' : serial_no, + "project" : d.project_name }) diff --git a/stock/doctype/stock_entry/stock_entry.py b/stock/doctype/stock_entry/stock_entry.py index f54ce605a0b..e79e989883c 100644 --- a/stock/doctype/stock_entry/stock_entry.py +++ b/stock/doctype/stock_entry/stock_entry.py @@ -604,7 +604,8 @@ class DocType(StockController): 'company': self.doc.company, 'is_cancelled': (is_cancelled ==1) and 'Yes' or 'No', 'batch_no': cstr(d.batch_no).strip(), - 'serial_no': cstr(d.serial_no).strip() + 'serial_no': cstr(d.serial_no).strip(), + "project": self.doc.project_name }) def get_cust_values(self): diff --git a/stock/doctype/stock_ledger_entry/stock_ledger_entry.txt b/stock/doctype/stock_ledger_entry/stock_ledger_entry.txt index 9551b593146..6bcd7587330 100644 --- a/stock/doctype/stock_ledger_entry/stock_ledger_entry.txt +++ b/stock/doctype/stock_ledger_entry/stock_ledger_entry.txt @@ -1,8 +1,8 @@ [ { - "creation": "2013-01-14 16:33:26", + "creation": "2013-01-29 19:25:42", "docstatus": 0, - "modified": "2013-01-29 16:27:57", + "modified": "2013-03-25 16:04:59", "modified_by": "Administrator", "owner": "Administrator" }, @@ -24,13 +24,9 @@ "parent": "Stock Ledger Entry", "parentfield": "fields", "parenttype": "DocType", - "permlevel": 0, - "read_only": 1 + "permlevel": 0 }, { - "amend": 0, - "cancel": 0, - "create": 0, "doctype": "DocPerm", "name": "__common__", "parent": "Stock Ledger Entry", @@ -39,9 +35,7 @@ "permlevel": 0, "read": 1, "report": 1, - "role": "Material User", - "submit": 0, - "write": 0 + "submit": 0 }, { "doctype": "DocType", @@ -57,6 +51,7 @@ "oldfieldtype": "Link", "options": "Item", "print_width": "100px", + "read_only": 1, "reqd": 0, "search_index": 1, "width": "100px" @@ -68,6 +63,7 @@ "in_filter": 0, "label": "Serial No", "print_width": "100px", + "read_only": 1, "search_index": 0, "width": "100px" }, @@ -77,7 +73,8 @@ "fieldtype": "Data", "label": "Batch No", "oldfieldname": "batch_no", - "oldfieldtype": "Data" + "oldfieldtype": "Data", + "read_only": 1 }, { "doctype": "DocField", @@ -89,6 +86,7 @@ "oldfieldtype": "Link", "options": "Warehouse", "print_width": "100px", + "read_only": 1, "search_index": 1, "width": "100px" }, @@ -101,6 +99,7 @@ "oldfieldname": "warehouse_type", "oldfieldtype": "Select", "options": "link:Warehouse Type", + "read_only": 1, "search_index": 0 }, { @@ -113,6 +112,7 @@ "oldfieldname": "posting_date", "oldfieldtype": "Date", "print_width": "100px", + "read_only": 1, "reqd": 0, "search_index": 1, "width": "100px" @@ -126,6 +126,7 @@ "oldfieldname": "posting_time", "oldfieldtype": "Time", "print_width": "100px", + "read_only": 1, "search_index": 0, "width": "100px" }, @@ -138,6 +139,7 @@ "oldfieldname": "voucher_type", "oldfieldtype": "Data", "print_width": "150px", + "read_only": 1, "search_index": 0, "width": "150px" }, @@ -150,6 +152,7 @@ "oldfieldname": "voucher_no", "oldfieldtype": "Data", "print_width": "150px", + "read_only": 1, "search_index": 0, "width": "150px" }, @@ -161,6 +164,7 @@ "oldfieldname": "voucher_detail_no", "oldfieldtype": "Data", "print_width": "150px", + "read_only": 1, "width": "150px" }, { @@ -172,6 +176,7 @@ "oldfieldname": "actual_qty", "oldfieldtype": "Currency", "print_width": "150px", + "read_only": 1, "width": "150px" }, { @@ -181,7 +186,8 @@ "label": "Incoming Rate", "oldfieldname": "incoming_rate", "oldfieldtype": "Currency", - "options": "Company:company:default_currency" + "options": "Company:company:default_currency", + "read_only": 1 }, { "doctype": "DocField", @@ -191,6 +197,7 @@ "oldfieldname": "stock_uom", "oldfieldtype": "Data", "print_width": "150px", + "read_only": 1, "width": "150px" }, { @@ -202,6 +209,7 @@ "oldfieldname": "bin_aqat", "oldfieldtype": "Currency", "print_width": "150px", + "read_only": 1, "width": "150px" }, { @@ -213,6 +221,7 @@ "oldfieldtype": "Currency", "options": "Company:company:default_currency", "print_width": "150px", + "read_only": 1, "width": "150px" }, { @@ -222,7 +231,8 @@ "label": "Stock Value", "oldfieldname": "stock_value", "oldfieldtype": "Currency", - "options": "Company:company:default_currency" + "options": "Company:company:default_currency", + "read_only": 1 }, { "doctype": "DocField", @@ -234,9 +244,17 @@ "oldfieldname": "fcfs_stack", "oldfieldtype": "Text", "print_hide": 1, + "read_only": 1, "report_hide": 1, "search_index": 0 }, + { + "doctype": "DocField", + "fieldname": "project", + "fieldtype": "Link", + "label": "Project", + "options": "Project" + }, { "doctype": "DocField", "fieldname": "company", @@ -247,6 +265,7 @@ "oldfieldtype": "Data", "options": "link:Company", "print_width": "150px", + "read_only": 1, "search_index": 0, "width": "150px" }, @@ -259,6 +278,7 @@ "oldfieldname": "fiscal_year", "oldfieldtype": "Data", "print_width": "150px", + "read_only": 1, "search_index": 0, "width": "150px" }, @@ -272,10 +292,20 @@ "oldfieldtype": "Select", "options": "\nYes\nNo", "print_width": "100px", + "read_only": 1, "search_index": 0, "width": "100px" }, { - "doctype": "DocPerm" + "amend": 0, + "cancel": 0, + "create": 0, + "doctype": "DocPerm", + "role": "Material User", + "write": 0 + }, + { + "doctype": "DocPerm", + "role": "Accounts Manager" } ] \ No newline at end of file diff --git a/stock/page/stock_balance/stock_balance.js b/stock/page/stock_balance/stock_balance.js index 47a3344b296..163b74f6291 100644 --- a/stock/page/stock_balance/stock_balance.js +++ b/stock/page/stock_balance/stock_balance.js @@ -35,7 +35,7 @@ erpnext.StockBalance = erpnext.StockAnalytics.extend({ this._super(wrapper, { title: "Stock Balance", doctypes: ["Item", "Item Group", "Warehouse", "Stock Ledger Entry", "Brand", - "Stock Entry"], + "Stock Entry", "Project"], }); }, setup_columns: function() { @@ -76,6 +76,10 @@ erpnext.StockBalance = erpnext.StockAnalytics.extend({ default_value: "Select Warehouse...", filter: function(val, item, opts, me) { return me.apply_zero_filter(val, item, opts, me); }}, + {fieldtype:"Select", label: "Project", link:"Project", + default_value: "Select Project...", filter: function(val, item, opts, me) { + return me.apply_zero_filter(val, item, opts, me); + }, link_formatter: {filter_input: "project"}}, {fieldtype:"Date", label: "From Date"}, {fieldtype:"Label", label: "To"}, {fieldtype:"Date", label: "To Date"}, @@ -105,7 +109,8 @@ erpnext.StockBalance = erpnext.StockAnalytics.extend({ var sl = data[i]; var sl_posting_date = dateutil.str_to_obj(sl.posting_date); - if(me.is_default("warehouse") ? true : me.warehouse == sl.warehouse) { + if((me.is_default("warehouse") ? true : me.warehouse == sl.warehouse) && + (me.is_default("project") ? true : me.project == sl.project)) { var item = me.item_by_name[sl.item_code]; var wh = me.get_item_warehouse(sl.warehouse, sl.item_code); var valuation_method = item.valuation_method ? diff --git a/website/doctype/style_settings/custom_template.css b/website/doctype/style_settings/custom_template.css index 712c748cb83..e2c0db598a6 100644 --- a/website/doctype/style_settings/custom_template.css +++ b/website/doctype/style_settings/custom_template.css @@ -69,7 +69,6 @@ div.web-footer, div.web-footer a { .navbar-inverse .navbar-inner { background-color: #{{ doc.top_bar_background or "444444"}}; background-repeat: repeat-x; - border-color: transparent; background-image: none; } diff --git a/website/doctype/style_settings/style_settings.py b/website/doctype/style_settings/style_settings.py index 71478a4573c..58dca7b6a09 100644 --- a/website/doctype/style_settings/style_settings.py +++ b/website/doctype/style_settings/style_settings.py @@ -85,7 +85,7 @@ class DocType: "UPPERCASE": "uppercase", "Title Case":"capitalize", "lowercase": "lowercase" - }[self.doc.heading_text_as] + }.get(self.doc.heading_text_as) or "" self.doc.at_import = "" for f in fonts: