[buying] started cleanup, [mapper] started rewrite

This commit is contained in:
Rushabh Mehta 2013-07-04 12:50:52 +05:30
parent bcff7dce8e
commit 8aded138c7
17 changed files with 218 additions and 97 deletions

View File

@ -53,6 +53,12 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({
});
},
refresh: function(doc) {
this.frm.toggle_display("supplier_name",
(this.supplier_name && this.frm.doc.supplier_name!==this.frm.doc.supplier));
this._super();
},
supplier: function() {
if(this.frm.doc.supplier || this.frm.doc.credit_to) {
if(!this.frm.doc.company) {

View File

@ -2,7 +2,7 @@
{
"creation": "2013-05-21 16:16:39",
"docstatus": 0,
"modified": "2013-06-11 16:05:08",
"modified": "2013-07-04 10:48:54",
"modified_by": "Administrator",
"owner": "Administrator"
},
@ -39,6 +39,13 @@
"doctype": "DocType",
"name": "Purchase Order"
},
{
"doctype": "DocField",
"fieldname": "supplier_section",
"fieldtype": "Section Break",
"label": "Supplier",
"options": "icon-user"
},
{
"description": "To manage multiple series please go to Setup > Manage Series",
"doctype": "DocField",
@ -67,7 +74,6 @@
"search_index": 1
},
{
"depends_on": "supplier",
"doctype": "DocField",
"fieldname": "supplier_name",
"fieldtype": "Data",
@ -77,38 +83,34 @@
"read_only": 1
},
{
"depends_on": "supplier",
"doctype": "DocField",
"fieldname": "address_display",
"fieldtype": "Small Text",
"hidden": 0,
"hidden": 1,
"label": "Address",
"read_only": 1
},
{
"depends_on": "supplier",
"doctype": "DocField",
"fieldname": "contact_display",
"fieldtype": "Small Text",
"hidden": 0,
"hidden": 1,
"label": "Contact",
"read_only": 1
},
{
"depends_on": "supplier",
"doctype": "DocField",
"fieldname": "contact_mobile",
"fieldtype": "Text",
"hidden": 0,
"hidden": 1,
"label": "Mobile No",
"read_only": 1
},
{
"depends_on": "supplier",
"doctype": "DocField",
"fieldname": "contact_email",
"fieldtype": "Text",
"hidden": 0,
"hidden": 1,
"label": "Contact Email",
"print_hide": 1,
"read_only": 1
@ -139,7 +141,8 @@
"fieldname": "items",
"fieldtype": "Section Break",
"label": "Items",
"oldfieldtype": "Section Break"
"oldfieldtype": "Section Break",
"options": "icon-shopping-cart"
},
{
"allow_on_submit": 1,
@ -155,8 +158,7 @@
{
"doctype": "DocField",
"fieldname": "sb_last_purchase",
"fieldtype": "Section Break",
"options": "Simple"
"fieldtype": "Section Break"
},
{
"doctype": "DocField",
@ -238,7 +240,8 @@
"doctype": "DocField",
"fieldname": "price_list_and_currency",
"fieldtype": "Section Break",
"label": "Currency & Price List"
"label": "Currency & Price List",
"options": "icon-tag"
},
{
"doctype": "DocField",
@ -309,6 +312,7 @@
"fieldtype": "Section Break",
"label": "Taxes",
"oldfieldtype": "Section Break",
"options": "icon-money",
"print_hide": 0
},
{
@ -364,7 +368,8 @@
"fieldname": "totals",
"fieldtype": "Section Break",
"label": "Totals",
"oldfieldtype": "Section Break"
"oldfieldtype": "Section Break",
"options": "icon-money"
},
{
"doctype": "DocField",
@ -523,7 +528,8 @@
"fieldname": "terms_section_break",
"fieldtype": "Section Break",
"label": "Terms and Conditions",
"oldfieldtype": "Section Break"
"oldfieldtype": "Section Break",
"options": "icon-legal"
},
{
"doctype": "DocField",
@ -555,7 +561,8 @@
"doctype": "DocField",
"fieldname": "contact_section",
"fieldtype": "Section Break",
"label": "Contact Info"
"label": "Contact Info",
"options": "icon-bullhorn"
},
{
"doctype": "DocField",
@ -759,8 +766,9 @@
"doctype": "DocField",
"fieldname": "raw_material_details",
"fieldtype": "Section Break",
"label": "Raw Material Details",
"label": "Raw Materials Supplied",
"oldfieldtype": "Section Break",
"options": "icon-truck",
"print_hide": 1
},
{

View File

@ -45,7 +45,7 @@ cur_frm.cscript.refresh = function(doc,dt,dn) {
}
cur_frm.cscript.make_dashboard = function(doc) {
cur_frm.dashboard.wrapper.empty().toggle(doc.__islocal ? false : true);
cur_frm.dashboard.reset();
if(doc.__islocal)
return;
cur_frm.dashboard.set_headline('<span class="text-muted">Loading...</span>')

View File

@ -2,7 +2,7 @@
{
"creation": "2013-01-10 16:34:11",
"docstatus": 0,
"modified": "2013-01-29 14:35:42",
"modified": "2013-07-04 10:13:19",
"modified_by": "Administrator",
"owner": "Administrator"
},
@ -46,7 +46,8 @@
"fieldname": "basic_info",
"fieldtype": "Section Break",
"label": "Basic Info",
"oldfieldtype": "Section Break"
"oldfieldtype": "Section Break",
"options": "icon-user"
},
{
"doctype": "DocField",
@ -91,7 +92,8 @@
"fieldname": "address_contacts",
"fieldtype": "Section Break",
"label": "Address & Contacts",
"oldfieldtype": "Column Break"
"oldfieldtype": "Column Break",
"options": "icon-map-marker"
},
{
"depends_on": "eval:doc.__islocal",
@ -132,7 +134,9 @@
{
"doctype": "DocField",
"fieldname": "communication_history",
"fieldtype": "Section Break"
"fieldtype": "Section Break",
"label": "Communication History",
"options": "icon-comments"
},
{
"doctype": "DocField",
@ -145,7 +149,8 @@
"fieldname": "more_info",
"fieldtype": "Section Break",
"label": "More Info",
"oldfieldtype": "Section Break"
"oldfieldtype": "Section Break",
"options": "icon-file-text"
},
{
"description": "Enter the company name under which Account Head will be created for this Supplier",

View File

@ -2,7 +2,7 @@
{
"creation": "2013-05-21 16:16:45",
"docstatus": 0,
"modified": "2013-06-11 16:05:53",
"modified": "2013-07-04 10:51:05",
"modified_by": "Administrator",
"owner": "Administrator"
},
@ -39,6 +39,13 @@
"doctype": "DocType",
"name": "Supplier Quotation"
},
{
"doctype": "DocField",
"fieldname": "supplier_section",
"fieldtype": "Section Break",
"label": "Supplier",
"options": "icon-user"
},
{
"description": "To manage multiple series please go to Setup > Manage Series",
"doctype": "DocField",
@ -67,7 +74,6 @@
"search_index": 1
},
{
"depends_on": "supplier",
"doctype": "DocField",
"fieldname": "supplier_name",
"fieldtype": "Data",
@ -77,38 +83,34 @@
"read_only": 1
},
{
"depends_on": "supplier",
"doctype": "DocField",
"fieldname": "address_display",
"fieldtype": "Small Text",
"hidden": 0,
"hidden": 1,
"label": "Address",
"read_only": 1
},
{
"depends_on": "supplier",
"doctype": "DocField",
"fieldname": "contact_display",
"fieldtype": "Small Text",
"hidden": 0,
"hidden": 1,
"label": "Contact",
"read_only": 1
},
{
"depends_on": "supplier",
"doctype": "DocField",
"fieldname": "contact_mobile",
"fieldtype": "Text",
"hidden": 0,
"hidden": 1,
"label": "Mobile No",
"read_only": 1
},
{
"depends_on": "supplier",
"doctype": "DocField",
"fieldname": "contact_email",
"fieldtype": "Text",
"hidden": 0,
"hidden": 1,
"label": "Contact Email",
"print_hide": 1,
"read_only": 1
@ -139,7 +141,8 @@
"fieldname": "items",
"fieldtype": "Section Break",
"label": "Items",
"oldfieldtype": "Section Break"
"oldfieldtype": "Section Break",
"options": "icon-shopping-cart"
},
{
"allow_on_submit": 1,
@ -155,8 +158,7 @@
{
"doctype": "DocField",
"fieldname": "section_break0",
"fieldtype": "Section Break",
"options": "Simple"
"fieldtype": "Section Break"
},
{
"doctype": "DocField",
@ -168,8 +170,7 @@
{
"doctype": "DocField",
"fieldname": "section_break_14",
"fieldtype": "Section Break",
"options": "Simple"
"fieldtype": "Section Break"
},
{
"description": "You can make a purchase order from multiple Material Requests. Select Material Requests one by one and click on the button below.",
@ -197,7 +198,8 @@
"doctype": "DocField",
"fieldname": "currency_price_list",
"fieldtype": "Section Break",
"label": "Currency & Price List"
"label": "Currency & Price List",
"options": "icon-tag"
},
{
"description": "Supplier's currency",
@ -264,7 +266,8 @@
"fieldname": "taxes",
"fieldtype": "Section Break",
"label": "Taxes",
"oldfieldtype": "Section Break"
"oldfieldtype": "Section Break",
"options": "icon-money"
},
{
"description": "If you have created a standard template in Purchase Taxes and Charges Master, select one and click on the button below.",
@ -319,7 +322,8 @@
"fieldname": "totals",
"fieldtype": "Section Break",
"label": "Totals",
"oldfieldtype": "Section Break"
"oldfieldtype": "Section Break",
"options": "icon-money"
},
{
"doctype": "DocField",
@ -478,7 +482,8 @@
"fieldname": "terms_section_break",
"fieldtype": "Section Break",
"label": "Terms and Conditions",
"oldfieldtype": "Section Break"
"oldfieldtype": "Section Break",
"options": "icon-legal"
},
{
"allow_on_submit": 1,
@ -512,7 +517,7 @@
"doctype": "DocField",
"fieldname": "terms",
"fieldtype": "Text Editor",
"label": "Terms and Conditions1",
"label": "Terms and Conditions",
"oldfieldname": "terms",
"oldfieldtype": "Text Editor"
},
@ -521,7 +526,8 @@
"doctype": "DocField",
"fieldname": "contact_section",
"fieldtype": "Section Break",
"label": "Contact Info"
"label": "Contact Info",
"options": "icon-bullhorn"
},
{
"doctype": "DocField",
@ -546,7 +552,8 @@
"fieldname": "more_info",
"fieldtype": "Section Break",
"label": "More Info",
"oldfieldtype": "Section Break"
"oldfieldtype": "Section Break",
"options": "icon-file-text"
},
{
"doctype": "DocField",
@ -585,6 +592,11 @@
"read_only": 1,
"report_hide": 0
},
{
"doctype": "DocField",
"fieldname": "column_break_57",
"fieldtype": "Column Break"
},
{
"description": "Select the relevant company name if you have multiple companies",
"doctype": "DocField",

View File

@ -99,38 +99,10 @@ erpnext.LeadController = wn.ui.form.Controller.extend({
$.extend(cur_frm.cscript, new erpnext.LeadController({frm: cur_frm}));
cur_frm.cscript['Create Customer'] = function(){
var doc = cur_frm.doc;
$c('runserverobj',args={ 'method':'check_status', 'docs':wn.model.compress(make_doclist(doc.doctype, doc.name))},
function(r,rt){
if(r.message == 'Converted'){
msgprint("This lead is already converted to customer");
}
else{
n = wn.model.make_new_doc_and_get_name("Customer");
$c('dt_map', args={
'docs':wn.model.compress([locals["Customer"][n]]),
'from_doctype':'Lead',
'to_doctype':'Customer',
'from_docname':doc.name,
'from_to_list':"[['Lead', 'Customer']]"
},
function(r,rt) {
wn.model.with_doctype("Customer", function() {
var customer = wn.model.get_doc("Customer", n);
var customer_copy = $.extend({}, customer);
var updated = wn.model.set_default_values(customer_copy);
$.each(updated, function(i, f) {
if(!customer[f]) customer[f] = customer_copy[f];
});
loaddoc("Customer", n);
});
}
);
}
}
);
wn.model.open_mapped_doc({
method: "selling.doctype.lead.lead.make_customer",
source_name: cur_frm.doc.name
})
}
// Create New Opportunity

View File

@ -95,4 +95,24 @@ class DocType(SellingController):
webnotes.conn.sql("""update `tabSupport Ticket` set lead='' where lead=%s""",
self.doc.name)
self.delete_events()
self.delete_events()
@webnotes.whitelist()
def make_customer(source_name, target_doclist=None):
from webnotes.model.mapper import get_mapped_doclist
if target_doclist:
target_doclist = json.loads(target_doclist)
doclist = get_mapped_doclist("Lead", source_name,
{"Lead": {
"doctype": "Customer",
"field_map": {
"name": "lead_name",
"company_name": "customer_name",
"contact_no": "phone_1",
"fax": "fax_1"
}
}})
return [d.fields for d in doclist]

View File

@ -1,3 +1,5 @@
from __future__ import unicode_literals
test_records = [
[{"doctype":"Lead", "lead_name": "_Test Lead", "status":"Open",
"email_id":"test_lead@example.com"}],
@ -8,3 +10,17 @@ test_records = [
[{"doctype":"Lead", "lead_name": "_Test Lead 3", "status":"Converted",
"email_id":"test_lead3@example.com"}],
]
import webnotes
import unittest
class TestLead(unittest.TestCase):
def test_make_customer(self):
from selling.doctype.lead.lead import make_customer
customer = make_customer("_T-Lead-00001")
self.assertEquals(customer[0]["doctype"], "Customer")
self.assertEquals(customer[0]["lead_name"], "_T-Lead-00001")
webnotes.bean(customer).insert()

View File

@ -154,8 +154,11 @@ class DocType(SellingController):
super(DocType, self).validate()
import utilities
utilities.validate_status(self.doc.status, ["Draft", "Submitted",
"Order Confirmed", "Order Lost", "Cancelled"])
if not self.doc.status:
self.doc.status = "Draft"
else:
utilities.validate_status(self.doc.status, ["Draft", "Submitted",
"Order Confirmed", "Order Lost", "Cancelled"])
self.validate_fiscal_year()
self.set_last_contact_date()

View File

@ -2,7 +2,7 @@
{
"creation": "2013-05-24 19:29:08",
"docstatus": 0,
"modified": "2013-07-03 16:12:44",
"modified": "2013-07-04 10:56:10",
"modified_by": "Administrator",
"owner": "Administrator"
},
@ -114,7 +114,6 @@
"read_only": 0
},
{
"depends_on": "customer",
"doctype": "DocField",
"fieldname": "customer_name",
"fieldtype": "Data",

View File

@ -0,0 +1,49 @@
import webnotes
from webnotes.utils import flt
import unittest
test_dependencies = ["Sales BOM"]
class TestLead(unittest.TestCase):
def test_make_sales_order(self):
lead = webnotes.bean("Lead", "_T-Lead-00001")
lead.make_controller()
customer = lead.controller.make_customer()
self.assertEquals(customer[0].doctype, "Customer")
self.assertEquals(customer[0].lead_name, lead.doc.name)
webnotes.bean(customer).insert()
test_records = [
[
{
"company": "_Test Company",
"conversion_rate": 1.0,
"currency": "INR",
"customer": "_Test Customer",
"customer_name": "_Test Customer",
"customer_group": "_Test Customer Group",
"doctype": "Quotation",
"fiscal_year": "_Test Fiscal Year 2013",
"order_type": "Sales",
"plc_conversion_rate": 1.0,
"price_list_currency": "INR",
"price_list_name": "_Test Price List",
"territory": "_Test Territory",
"transaction_date": "2013-02-21",
"grand_total": 1000.0,
"grand_total_export": 1000.0,
},
{
"description": "CPU",
"doctype": "Quotation Item",
"item_code": "_Test Item Home Desktop 100",
"item_name": "CPU",
"parentfield": "quotation_details",
"qty": 10.0,
"basic_rate": 100.0,
"export_rate": 100.0,
"amount": 1000.0,
}
],
]

View File

@ -37,6 +37,12 @@ erpnext.selling.SellingController = erpnext.TransactionController.extend({
this.toggle_rounded_total();
},
refresh: function(doc) {
this.frm.toggle_display("customer_name",
(this.customer_name && this.frm.doc.customer_name!==this.frm.doc.customer));
this._super();
},
customer: function() {
var me = this;
if(this.frm.doc.customer || this.frm.doc.debit_to) {

View File

@ -2,7 +2,7 @@
{
"creation": "2013-06-18 12:39:59",
"docstatus": 0,
"modified": "2013-07-03 16:12:26",
"modified": "2013-07-04 10:56:35",
"modified_by": "Administrator",
"owner": "Administrator"
},
@ -84,7 +84,6 @@
"search_index": 1
},
{
"depends_on": "customer",
"doctype": "DocField",
"fieldname": "customer_name",
"fieldtype": "Data",

View File

@ -21,6 +21,8 @@ cur_frm.cscript.refresh = function(doc) {
// make sensitive fields(has_serial_no, is_stock_item, valuation_method)
// read only if any stock ledger entry exists
cur_frm.cscript.make_dashboard()
cur_frm.toggle_display("naming_series", sys_defaults.item_naming_by=="Naming Series"
&& doc.__islocal)
cur_frm.toggle_display("item_code", sys_defaults.item_naming_by!="Naming Series"
@ -36,6 +38,12 @@ cur_frm.cscript.refresh = function(doc) {
}
}
cur_frm.cscript.make_dashboard = function() {
cur_frm.dashboard.reset();
if(doc.__islocal)
return;
}
cur_frm.cscript.item_code = function(doc) {
if(!doc.item_name) cur_frm.set_value("item_name", doc.item_code);
if(!doc.description) cur_frm.set_value("description", doc.item_code);

View File

@ -24,6 +24,16 @@ erpnext.buying.MaterialRequestController = erpnext.buying.BuyingController.exten
refresh: function(doc) {
this._super();
// dashboard
cur_frm.dashboard.reset();
if(doc.docstatus===1) {
if(doc.status==="Stopped") {
cur_frm.dashboard.set_headline_alert(wn._("Stopped"), "alert-danger", "icon-stop")
}
cur_frm.dashboard.add_progress(cint(doc.per_ordered) + "% "
+ wn._("Fulfilled"), cint(doc.per_ordered));
}
if(doc.docstatus == 1 && doc.status != 'Stopped'){
if(doc.material_request_type === "Purchase")
cur_frm.add_custom_button("Make Supplier Quotation", cur_frm.cscript.make_supplier_quotation);

View File

@ -2,7 +2,7 @@
{
"creation": "2013-03-07 14:48:38",
"docstatus": 0,
"modified": "2013-06-11 16:16:36",
"modified": "2013-07-04 10:24:53",
"modified_by": "Administrator",
"owner": "Administrator"
},
@ -44,6 +44,13 @@
"doctype": "DocType",
"name": "Material Request"
},
{
"doctype": "DocField",
"fieldname": "type_section",
"fieldtype": "Section Break",
"label": "Type",
"options": "icon-pushpin"
},
{
"doctype": "DocField",
"fieldname": "material_request_type",
@ -76,7 +83,8 @@
"fieldname": "items",
"fieldtype": "Section Break",
"label": "Items",
"oldfieldtype": "Section Break"
"oldfieldtype": "Section Break",
"options": "icon-shopping-cart"
},
{
"allow_on_submit": 0,
@ -92,8 +100,7 @@
{
"doctype": "DocField",
"fieldname": "section_break1",
"fieldtype": "Section Break",
"options": "Simple"
"fieldtype": "Section Break"
},
{
"doctype": "DocField",
@ -131,12 +138,12 @@
},
{
"default": "Give additional details about the indent.",
"description": "Filing in Additional Information about the Material Request will help you analyze your data better.",
"doctype": "DocField",
"fieldname": "more_info",
"fieldtype": "Section Break",
"label": "More Info",
"oldfieldtype": "Section Break"
"oldfieldtype": "Section Break",
"options": "icon-file-text"
},
{
"doctype": "DocField",
@ -287,7 +294,8 @@
"fieldname": "terms_section_break",
"fieldtype": "Section Break",
"label": "Terms and Conditions",
"oldfieldtype": "Section Break"
"oldfieldtype": "Section Break",
"options": "icon-legal"
},
{
"doctype": "DocField",

View File

@ -7,6 +7,11 @@ wn.module_page["Stock"] = [
top: true,
icon: "icon-copy",
items: [
{
label: wn._("Item"),
description: wn._("All Products or Services."),
doctype:"Item"
},
{
label: wn._("Material Request"),
description: wn._("Requests for items."),
@ -33,11 +38,6 @@ wn.module_page["Stock"] = [
title: wn._("Masters"),
icon: "icon-book",
items: [
{
label: wn._("Item"),
description: wn._("All Products or Services."),
doctype:"Item"
},
{
label: wn._("Serial No"),
description: wn._("Single unit of an Item."),