Merge branch 'edge' of github.com:webnotes/erpnext into webshop

Conflicts:
	stock/doctype/item/item.txt
This commit is contained in:
Anand Doshi
2013-05-10 18:12:24 +05:30
65 changed files with 529 additions and 184 deletions

View File

@@ -79,7 +79,7 @@ class DocType:
if (flt(args.get("actual_qty")) < 0 or flt(args.get("reserved_qty")) > 0) \
and args.get("is_cancelled") == 'No' and args.get("is_amended")=='No':
self.reorder_item(args.get("voucher_type"), args.get("voucher_no"))
self.reorder_item(args.get("voucher_type"), args.get("voucher_no"), args.get("company"))
def get_first_sle(self):
sle = sql("""
@@ -92,7 +92,7 @@ class DocType:
""", (self.doc.item_code, self.doc.warehouse), as_dict=1)
return sle and sle[0] or None
def reorder_item(self,doc_type,doc_name):
def reorder_item(self,doc_type,doc_name, company):
""" Reorder item if stock reaches reorder level"""
if not hasattr(webnotes, "auto_indent"):
webnotes.auto_indent = webnotes.conn.get_value('Global Defaults', None, 'auto_indent')
@@ -111,10 +111,10 @@ class DocType:
material_request_type = "Purchase"
if flt(reorder_qty) and flt(self.doc.projected_qty) < flt(reorder_level):
self.create_material_request(doc_type, doc_name, reorder_level, reorder_qty,
material_request_type)
self.create_material_request(doc_type, doc_name, reorder_level, reorder_qty,
company, material_request_type)
def create_material_request(self, doc_type, doc_name, reorder_level, reorder_qty,
def create_material_request(self, doc_type, doc_name, reorder_level, reorder_qty, company,
material_request_type="Purchase"):
""" Create indent on reaching reorder level """
defaults = webnotes.defaults.get_defaults()
@@ -122,7 +122,7 @@ class DocType:
mr = webnotes.bean([{
"doctype": "Material Request",
"company": defaults.company,
"company": company or defaults.company,
"fiscal_year": defaults.fiscal_year,
"transaction_date": nowdate(),
"material_request_type": material_request_type,

View File

@@ -134,11 +134,7 @@ cur_frm.fields_dict.item_supplier_details.grid.get_field("supplier").get_query =
erpnext.utils.supplier_query;
cur_frm.cscript.on_remove_attachment = function(doc) {
// refresh image list before unsetting image
refresh_field("image");
if(!inList(cur_frm.fields_dict.image.df.options.split("\n"), doc.image)) {
// if the selected image is removed from attachment, unset it
cur_frm.set_value("image", "");
msgprint(wn._("Attachment removed. You may need to update: ")
+ wn.meta.get_docfield(doc.doctype, "description_html").label);
}
@@ -157,3 +153,7 @@ cur_frm.cscript.copy_from_item_group = function(doc) {
cur_frm.refresh();
});
}
cur_frm.cscript.image = function() {
refresh_field("image_view");
}

View File

@@ -31,7 +31,9 @@ class DocType(DocListController):
if webnotes.conn.get_default("item_naming_by")=="Naming Series":
from webnotes.model.doc import make_autoname
self.doc.item_code = make_autoname(self.doc.naming_series+'.#####')
elif not self.doc.item_code:
msgprint(_("Item Code is mandatory"), raise_exception=1)
self.doc.name = self.doc.item_code
def validate(self):
@@ -270,7 +272,7 @@ class DocType(DocListController):
from webnotes.webutils import clear_cache
clear_cache(self.doc.page_name)
def on_rename(self,newdn,olddn):
def on_rename(self,newdn,olddn, merge=False):
webnotes.conn.sql("update tabItem set item_code = %s where name = %s", (newdn, olddn))
if self.doc.page_name:
from webnotes.webutils import clear_cache

View File

@@ -1,8 +1,8 @@
[
{
"creation": "2013-04-25 10:56:55",
"creation": "2013-05-03 10:45:46",
"docstatus": 0,
"modified": "2013-05-02 15:10:00",
"modified": "2013-05-07 16:00:00",
"modified_by": "Administrator",
"owner": "Administrator"
},
@@ -28,13 +28,14 @@
"permlevel": 0
},
{
"amend": 0,
"doctype": "DocPerm",
"name": "__common__",
"parent": "Item",
"parentfield": "permissions",
"parenttype": "DocType",
"permlevel": 0,
"read": 1,
"report": 1,
"submit": 0
},
{
@@ -55,7 +56,8 @@
"fieldname": "naming_series",
"fieldtype": "Select",
"label": "Naming Series",
"options": "\nITEM"
"options": "\nITEM",
"read_only": 0
},
{
"description": "Item will be saved by this name in the data base.",
@@ -64,10 +66,11 @@
"fieldtype": "Data",
"in_filter": 0,
"label": "Item Code",
"no_copy": 1,
"oldfieldname": "item_code",
"oldfieldtype": "Data",
"read_only": 0,
"reqd": 1,
"reqd": 0,
"search_index": 0
},
{
@@ -887,27 +890,23 @@
"cancel": 1,
"create": 1,
"doctype": "DocPerm",
"permlevel": 0,
"report": 1,
"role": "Material Manager",
"write": 1
},
{
"cancel": 0,
"create": 1,
"doctype": "DocPerm",
"permlevel": 0,
"report": 1,
"role": "Material User",
"write": 1
},
{
"cancel": 1,
"create": 1,
"doctype": "DocPerm",
"permlevel": 0,
"report": 1,
"role": "Material Master Manager",
"write": 1
},
{
"amend": 0,
"cancel": 0,
"create": 0,
"doctype": "DocPerm",
"role": "Material Manager",
"write": 0
},
{
"amend": 0,
"cancel": 0,
"create": 0,
"doctype": "DocPerm",
"role": "Material User",
"write": 0
}
]

View File

@@ -19,7 +19,7 @@ import webnotes
from webnotes.utils import cint, getdate, nowdate
import datetime
from webnotes import msgprint
from webnotes import msgprint, _
from controllers.stock_controller import StockController
@@ -117,8 +117,11 @@ class DocType(StockController):
self.make_stock_ledger_entry(1)
self.make_gl_entries()
def on_rename(self, new, old):
def on_rename(self, new, old, merge=False):
"""rename serial_no text fields"""
if merge:
msgprint(_("Sorry. Serial Nos. cannot be merged"), raise_exception=True)
for dt in webnotes.conn.sql("""select parent from tabDocField
where fieldname='serial_no' and fieldtype='Text'"""):

View File

@@ -57,6 +57,7 @@ class DocType(StockController):
self.validate_return_reference_doc()
self.validate_with_material_request()
self.validate_fiscal_year()
self.set_total_amount()
def on_submit(self):
self.update_serial_no(1)
@@ -174,6 +175,9 @@ class DocType(StockController):
elif self.doc.purpose != "Material Transfer":
self.doc.production_order = None
def set_total_amount(self):
self.doc.total_amount = sum([flt(item.amount) for item in self.doclist.get({"parentfield": "mtn_details"})])
def make_gl_entries(self):
if not cint(webnotes.defaults.get_global_default("auto_inventory_accounting")):
return
@@ -194,10 +198,10 @@ class DocType(StockController):
total_valuation_amount = 0
for item in self.doclist.get({"parentfield": "mtn_details"}):
if item.t_warehouse and not item.s_warehouse:
total_valuation_amount += flt(item.incoming_rate) * flt(item.transfer_qty)
total_valuation_amount += flt(item.incoming_rate, 2) * flt(item.transfer_qty)
if item.s_warehouse and not item.t_warehouse:
total_valuation_amount -= flt(item.incoming_rate) * flt(item.transfer_qty)
total_valuation_amount -= flt(item.incoming_rate, 2) * flt(item.transfer_qty)
return total_valuation_amount
@@ -220,7 +224,7 @@ class DocType(StockController):
if not flt(d.incoming_rate):
d.incoming_rate = self.get_incoming_rate(args)
d.amount = flt(d.qty) * flt(d.incoming_rate)
d.amount = flt(d.transfer_qty) * flt(d.incoming_rate)
def get_incoming_rate(self, args):
incoming_rate = 0
@@ -607,7 +611,7 @@ class DocType(StockController):
'voucher_no': self.doc.name,
'voucher_detail_no': d.name,
'actual_qty': qty,
'incoming_rate': flt(d.incoming_rate) or 0,
'incoming_rate': flt(d.incoming_rate, 2) or 0,
'stock_uom': d.stock_uom,
'company': self.doc.company,
'is_cancelled': (is_cancelled ==1) and 'Yes' or 'No',

View File

@@ -1,8 +1,8 @@
[
{
"creation": "2013-03-28 15:56:40",
"creation": "2013-04-09 11:43:55",
"docstatus": 0,
"modified": "2013-03-29 15:31:42",
"modified": "2013-05-09 13:31:00",
"modified_by": "Administrator",
"owner": "Administrator"
},
@@ -518,6 +518,14 @@
"read_only": 0,
"width": "50%"
},
{
"doctype": "DocField",
"fieldname": "total_amount",
"fieldtype": "Currency",
"label": "Total Amount",
"options": "Company:company:default_currency",
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "project_name",
@@ -558,6 +566,14 @@
"read_only": 0,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "col5",
"fieldtype": "Column Break",
"print_width": "50%",
"read_only": 0,
"width": "50%"
},
{
"allow_on_submit": 0,
"doctype": "DocField",
@@ -576,14 +592,6 @@
"reqd": 1,
"search_index": 0
},
{
"doctype": "DocField",
"fieldname": "col5",
"fieldtype": "Column Break",
"print_width": "50%",
"read_only": 0,
"width": "50%"
},
{
"allow_on_submit": 0,
"doctype": "DocField",

View File

@@ -197,6 +197,10 @@ wn.module_page["Stock"] = [
route: "query-report/Item-Wise Price List",
doctype: "Item"
},
{
"label":wn._("Purchase In Transit"),
route: "query-report/Purchase In Transit",
},
]
}
]

View File

@@ -1,8 +1,8 @@
[
{
"creation": "2013-01-02 14:22:51",
"creation": "2013-02-22 18:01:55",
"docstatus": 0,
"modified": "2013-02-22 15:53:01",
"modified": "2013-05-07 11:50:46",
"modified_by": "Administrator",
"owner": "Administrator"
},
@@ -10,7 +10,7 @@
"doctype": "Report",
"is_standard": "Yes",
"name": "__common__",
"query": "select\n item.name as \"ID:Link/Item:120\", \n item.item_name as \"Item Name::120\", \n item_price.price_list_name as \"Price List::80\",\n item_price.ref_currency as \"Currency::40\", \n item_price.ref_rate as \"Rate:Currency:80\",\n item.description as \"Description::160\",\n item.item_group as \"Item Group:Link/Item Group:100\",\n item.brand as \"Brand::100\"\nfrom `tabItem` item, `tabItem Price` item_price\nwhere\n item_price.parent = item.name",
"query": "select\n item.name as \"ID:Link/Item:120\", \n item.item_name as \"Item Name::120\", \n item_price.price_list_name as \"Price List::80\",\n item_price.ref_currency as \"Currency::40\", \n item_price.ref_rate as \"Rate:Float:80\",\n item.description as \"Description::160\",\n item.item_group as \"Item Group:Link/Item Group:100\",\n item.brand as \"Brand::100\"\nfrom `tabItem` item, `tabItem Price` item_price\nwhere\n item_price.parent = item.name",
"ref_doctype": "Item",
"report_name": "Item-Wise Price List",
"report_type": "Query Report"

View File

@@ -0,0 +1,22 @@
[
{
"creation": "2013-05-06 12:09:05",
"docstatus": 0,
"modified": "2013-05-06 12:22:52",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"doctype": "Report",
"is_standard": "Yes",
"name": "__common__",
"query": "SELECT\n pi.name as \"Purchase Invoice:Link/Purchase Invoice:120\",\n\tpi.posting_date as \"Posting Date:Date:100\",\n\tpi.credit_to as \"Supplier Account:Link/Account:120\",\n\tpi_item.item_code as \"Item Code:Link/Item:120\",\n\tpi_item.description as \"Description:Data:140\",\n\tpi_item.qty as \"Qty:Float:120\",\n\tpi_item.amount as \"Amount:Currency:120\",\n\tpi_item.purchase_order as \"Purchase Order:Link/Purchase Order:120\",\n\tpi_item.purchase_receipt as \"Purchase Receipt:Link/Purchase Receipt:120\",\n\tpr.posting_date as \"PR Posting Date:Date:130\",\n\tpi.company as \"Company:Link/Company:120\"\nFROM\n\t`tabPurchase Invoice` pi, `tabPurchase Invoice Item` pi_item, `tabPurchase Receipt` pr\nWHERE\n\tpi.name = pi_item.parent and pi_item.purchase_receipt = pr.name\n\tand pi.docstatus = 1 and pr.posting_date > pi.posting_date\nORDER BY\n\tpi.name desc",
"ref_doctype": "Purchase Receipt",
"report_name": "Purchase In Transit",
"report_type": "Query Report"
},
{
"doctype": "Report",
"name": "Purchase In Transit"
}
]