fixed conflict

This commit is contained in:
Nabin Hait 2012-07-03 12:14:48 +05:30
commit fdb1993125
61 changed files with 642 additions and 225 deletions

View File

@ -44,7 +44,7 @@ class DocType:
dl = sql("select t1.name, t1.cheque_no, t1.cheque_date, t2.debit, t2.credit, t1.posting_date, t2.against_account from `tabJournal Voucher` t1, `tabJournal Voucher Detail` t2 where t2.parent = t1.name and t2.account = %s and (clearance_date is null or clearance_date = '0000-00-00' or clearance_date = '') and (t1.cheque_no is not null or t1.cheque_no != '') and t1.posting_date >= %s and t1.posting_date <= %s and t1.docstatus=1", (self.doc.bank_account, self.doc.from_date, self.doc.to_date)) dl = sql("select t1.name, t1.cheque_no, t1.cheque_date, t2.debit, t2.credit, t1.posting_date, t2.against_account from `tabJournal Voucher` t1, `tabJournal Voucher Detail` t2 where t2.parent = t1.name and t2.account = %s and (clearance_date is null or clearance_date = '0000-00-00' or clearance_date = '') and (t1.cheque_no is not null or t1.cheque_no != '') and t1.posting_date >= %s and t1.posting_date <= %s and t1.docstatus=1", (self.doc.bank_account, self.doc.from_date, self.doc.to_date))
self.doc.clear_table(self.doclist, 'entries') self.doclist = self.doc.clear_table(self.doclist, 'entries')
self.doc.total_amount = 0.0 self.doc.total_amount = 0.0
for d in dl: for d in dl:

View File

@ -20,6 +20,6 @@ cur_frm.cscript.onload = function(doc,cdt,cdn){
refresh_field('budget_distribution_details'); refresh_field('budget_distribution_details');
} }
$c('runserverobj',args={'method' : 'get_months', 'docs' : compress_doclist([doc])},callback1); $c('runserverobj',args={'method' : 'get_months', 'docs' : compress_doclist(make_doclist(doc.doctype, doc.name))},callback1);
} }
} }

View File

@ -77,7 +77,7 @@ class DocType(TransactionBase):
# Get TDS Return acknowledgement # Get TDS Return acknowledgement
#------------------------------- #-------------------------------
def get_return_ack_details(self): def get_return_ack_details(self):
self.doc.clear_table(self.doclist, 'form_16A_ack_details') self.doclist = self.doc.clear_table(self.doclist, 'form_16A_ack_details')
if not (self.doc.from_date and self.doc.to_date): if not (self.doc.from_date and self.doc.to_date):
msgprint("Please enter From Date, To Date") msgprint("Please enter From Date, To Date")
else: else:
@ -90,7 +90,7 @@ class DocType(TransactionBase):
# Get tds payment details # Get tds payment details
#------------------------------- #-------------------------------
def get_tds(self): def get_tds(self):
self.doc.clear_table(self.doclist,'form_16A_tax_details') self.doclist = self.doc.clear_table(self.doclist,'form_16A_tax_details')
import datetime import datetime
if self.doc.from_date and self.doc.to_date and self.doc.tds_category: if self.doc.from_date and self.doc.to_date and self.doc.tds_category:
tot=0.0 tot=0.0

View File

@ -289,7 +289,7 @@ class DocType:
def get_advances(self, obj, account_head, table_name,table_field_name, dr_or_cr): def get_advances(self, obj, account_head, table_name,table_field_name, dr_or_cr):
jv_detail = webnotes.conn.sql("select t1.name, t1.remark, t2.%s, t2.name, t1.ded_amount from `tabJournal Voucher` t1, `tabJournal Voucher Detail` t2 where t1.name = t2.parent and (t2.against_voucher is null or t2.against_voucher = '') and (t2.against_invoice is null or t2.against_invoice = '') and (t2.against_jv is null or t2.against_jv = '') and t2.account = '%s' and t2.is_advance = 'Yes' and t1.docstatus = 1 order by t1.voucher_date " % (dr_or_cr,account_head)) jv_detail = webnotes.conn.sql("select t1.name, t1.remark, t2.%s, t2.name, t1.ded_amount from `tabJournal Voucher` t1, `tabJournal Voucher Detail` t2 where t1.name = t2.parent and (t2.against_voucher is null or t2.against_voucher = '') and (t2.against_invoice is null or t2.against_invoice = '') and (t2.against_jv is null or t2.against_jv = '') and t2.account = '%s' and t2.is_advance = 'Yes' and t1.docstatus = 1 order by t1.voucher_date " % (dr_or_cr,account_head))
# clear advance table # clear advance table
obj.doc.clear_table(obj.doclist,table_field_name) obj.doclist = obj.doc.clear_table(obj.doclist,table_field_name)
# Create advance table # Create advance table
for d in jv_detail: for d in jv_detail:
add = addchild(obj.doc, table_field_name, table_name, 1, obj.doclist) add = addchild(obj.doc, table_field_name, table_name, 1, obj.doclist)
@ -301,6 +301,8 @@ class DocType:
if table_name == 'Purchase Invoice Advance': if table_name == 'Purchase Invoice Advance':
add.tds_amount = flt(d[4]) add.tds_amount = flt(d[4])
return obj.doclist
# Clear rows which is not adjusted # Clear rows which is not adjusted
#------------------------------------- #-------------------------------------
def clear_advances(self, obj,table_name,table_field_name): def clear_advances(self, obj,table_name,table_field_name):

View File

@ -378,7 +378,7 @@ class DocType:
# get outstanding invoices # get outstanding invoices
# ------------------------- # -------------------------
def get_outstanding_invoices(self): def get_outstanding_invoices(self):
self.doc.clear_table(self.doclist, 'entries') self.doclist = self.doc.clear_table(self.doclist, 'entries')
total = 0 total = 0
for d in self.get_values(): for d in self.get_values():
total += flt(d[2]) total += flt(d[2])

View File

@ -73,7 +73,7 @@ class DocType:
Payment entry will be decided based on account type (Dr/Cr) Payment entry will be decided based on account type (Dr/Cr)
""" """
self.doc.clear_table(self.doclist, 'ir_payment_details') self.doclist = self.doc.clear_table(self.doclist, 'ir_payment_details')
gle = self.get_gl_entries() gle = self.get_gl_entries()
self.create_payment_table(gle) self.create_payment_table(gle)

View File

@ -170,7 +170,7 @@ class DocType(TransactionBase):
# Advance Allocation # Advance Allocation
# ------------------- # -------------------
def get_advances(self): def get_advances(self):
get_obj('GL Control').get_advances( self, self.doc.credit_to, 'Purchase Invoice Advance','advance_allocation_details','debit') self.doclist = get_obj('GL Control').get_advances(self, self.doc.credit_to, 'Purchase Invoice Advance','advance_allocation_details','debit')
# ============= OTHER CHARGES ==================== # ============= OTHER CHARGES ====================
@ -183,7 +183,7 @@ class DocType(TransactionBase):
# Get Purchase Taxes and Charges Master # Get Purchase Taxes and Charges Master
# ----------------------------------------------------------- # -----------------------------------------------------------
def get_purchase_tax_details(self): def get_purchase_tax_details(self):
return get_obj('Purchase Common').get_purchase_tax_details(self) self.doclist = get_obj('Purchase Common').get_purchase_tax_details(self)
def get_rate1(self,acc): def get_rate1(self,acc):

View File

@ -140,13 +140,13 @@ class DocType(TransactionBase):
# Delivery Note # Delivery Note
if self.doc.delivery_note_main: if self.doc.delivery_note_main:
self.validate_prev_docname('delivery note') self.validate_prev_docname('delivery note')
self.doc.clear_table(self.doclist,'other_charges') self.doclist = self.doc.clear_table(self.doclist,'other_charges')
self.doclist = get_obj('DocType Mapper', 'Delivery Note-Sales Invoice').dt_map('Delivery Note', 'Sales Invoice', self.doc.delivery_note_main, self.doc, self.doclist, "[['Delivery Note', 'Sales Invoice'],['Delivery Note Item', 'Sales Invoice Item'],['Sales Taxes and Charges','Sales Taxes and Charges'],['Sales Team','Sales Team']]") self.doclist = get_obj('DocType Mapper', 'Delivery Note-Sales Invoice').dt_map('Delivery Note', 'Sales Invoice', self.doc.delivery_note_main, self.doc, self.doclist, "[['Delivery Note', 'Sales Invoice'],['Delivery Note Item', 'Sales Invoice Item'],['Sales Taxes and Charges','Sales Taxes and Charges'],['Sales Team','Sales Team']]")
self.get_income_account('entries') self.get_income_account('entries')
# Sales Order # Sales Order
elif self.doc.sales_order_main: elif self.doc.sales_order_main:
self.validate_prev_docname('sales order') self.validate_prev_docname('sales order')
self.doc.clear_table(self.doclist,'other_charges') self.doclist = self.doc.clear_table(self.doclist,'other_charges')
get_obj('DocType Mapper', 'Sales Order-Sales Invoice').dt_map('Sales Order', 'Sales Invoice', self.doc.sales_order_main, self.doc, self.doclist, "[['Sales Order', 'Sales Invoice'],['Sales Order Item', 'Sales Invoice Item'],['Sales Taxes and Charges','Sales Taxes and Charges'], ['Sales Team', 'Sales Team']]") get_obj('DocType Mapper', 'Sales Order-Sales Invoice').dt_map('Sales Order', 'Sales Invoice', self.doc.sales_order_main, self.doc, self.doclist, "[['Sales Order', 'Sales Invoice'],['Sales Order Item', 'Sales Invoice Item'],['Sales Taxes and Charges','Sales Taxes and Charges'], ['Sales Team', 'Sales Team']]")
self.get_income_account('entries') self.get_income_account('entries')
@ -240,18 +240,17 @@ class DocType(TransactionBase):
# Load Default Charges # Load Default Charges
# ---------------------------------------------------------- # ----------------------------------------------------------
def load_default_taxes(self): def load_default_taxes(self):
return get_obj('Sales Common').load_default_taxes(self) self.doclist = get_obj('Sales Common').load_default_taxes(self)
# Get Sales Taxes and Charges Master Details # Get Sales Taxes and Charges Master Details
# -------------------------- # --------------------------
def get_other_charges(self): def get_other_charges(self):
return get_obj('Sales Common').get_other_charges(self) self.doclist = get_obj('Sales Common').get_other_charges(self)
# Get Advances # Get Advances
# ------------- # -------------
def get_advances(self): def get_advances(self):
get_obj('GL Control').get_advances(self, self.doc.debit_to, 'Sales Invoice Advance', 'advance_adjustment_details', 'credit') self.doclist = get_obj('GL Control').get_advances(self, self.doc.debit_to, 'Sales Invoice Advance', 'advance_adjustment_details', 'credit')
#pull project customer #pull project customer
#------------------------- #-------------------------

View File

@ -67,7 +67,7 @@ class DocType:
# Fetch voucherwise tds details # Fetch voucherwise tds details
#------------------------------- #-------------------------------
def get_tds_list(self): def get_tds_list(self):
self.doc.clear_table(self.doclist,'tds_payment_details') self.doclist = self.doc.clear_table(self.doclist,'tds_payment_details')
self.doc.total_tds = 0 self.doc.total_tds = 0
import datetime import datetime
if not self.doc.tds_category: if not self.doc.tds_category:

View File

@ -170,6 +170,14 @@ class DocType(TransactionBase):
'import_rate': 0, 'import_rate': 0,
}) })
if obj.doc.doctype == 'Purchase Order':
supplier_part_no = webnotes.conn.sql("""\
select supplier_part_no from `tabItem Supplier`
where parent = %s and parenttype = 'Item' and
supplier = %s""", (arg['item_code'], obj.doc.supplier))
if supplier_part_no and supplier_part_no[0][0]:
ret['supplier_part_no'] = supplier_part_no[0][0]
return ret return ret
# Get Available Qty at Warehouse # Get Available Qty at Warehouse
@ -621,7 +629,7 @@ class DocType(TransactionBase):
# Get other charges from Master # Get other charges from Master
# ================================================================================= # =================================================================================
def get_purchase_tax_details(self,obj): def get_purchase_tax_details(self,obj):
self.doc.clear_table(obj.doclist,'purchase_tax_details') obj.doclist = self.doc.clear_table(obj.doclist,'purchase_tax_details')
idx = 0 idx = 0
other_charge = sql("select category, add_deduct_tax, charge_type,row_id,description,account_head,rate,tax_amount from `tabPurchase Taxes and Charges` where parent = '%s' order by idx" %(obj.doc.purchase_other_charges), as_dict = 1) other_charge = sql("select category, add_deduct_tax, charge_type,row_id,description,account_head,rate,tax_amount from `tabPurchase Taxes and Charges` where parent = '%s' order by idx" %(obj.doc.purchase_other_charges), as_dict = 1)
for other in other_charge: for other in other_charge:
@ -636,6 +644,7 @@ class DocType(TransactionBase):
d.tax_amount = flt(other['tax_amount']) d.tax_amount = flt(other['tax_amount'])
d.idx = idx d.idx = idx
idx += 1 idx += 1
return obj.doclist
# Get Tax rate if account type is TAX # Get Tax rate if account type is TAX

View File

@ -291,7 +291,7 @@ class DocType(TransactionBase):
if self.doc.is_subcontracted == 'Yes': if self.doc.is_subcontracted == 'Yes':
self.add_bom(d) self.add_bom(d)
else: else:
self.doc.clear_table(self.doclist,'po_raw_material_details',1) self.doclist = self.doc.clear_table(self.doclist,'po_raw_material_details',1)
self.doc.save() self.doc.save()
elif item_det[0][1] == 'No': elif item_det[0][1] == 'No':
self.add_bom(d) self.add_bom(d)
@ -371,4 +371,4 @@ class DocType(TransactionBase):
# **** Pull details from other charges master (Get Other Charges) **** # **** Pull details from other charges master (Get Other Charges) ****
def get_purchase_tax_details(self): def get_purchase_tax_details(self):
return get_obj('Purchase Common').get_purchase_tax_details(self) self.doclist = get_obj('Purchase Common').get_purchase_tax_details(self)

View File

@ -3,9 +3,9 @@
# These values are common in all dictionaries # These values are common in all dictionaries
{ {
'creation': '2012-03-27 14:35:50', 'creation': '2012-05-15 12:14:38',
'docstatus': 0, 'docstatus': 0,
'modified': '2012-03-27 14:35:50', 'modified': '2012-06-29 13:05:33',
'modified_by': u'Administrator', 'modified_by': u'Administrator',
'owner': u'Administrator' 'owner': u'Administrator'
}, },
@ -22,7 +22,7 @@
'section_style': u'Tray', 'section_style': u'Tray',
'server_code_error': u' ', 'server_code_error': u' ',
'show_in_menu': 0, 'show_in_menu': 0,
'version': 65 'version': 1
}, },
# These values are common for all DocField # These values are common for all DocField
@ -74,6 +74,19 @@
'trigger': u'Client' 'trigger': u'Client'
}, },
# DocField
{
'colour': u'White:FFF',
'description': u'If Supplier Part Number exists for given Item, it gets stored here',
'doctype': u'DocField',
'fieldname': u'supplier_part_no',
'fieldtype': u'Data',
'hidden': 1,
'label': u'Supplier Part Number',
'permlevel': 1,
'print_hide': 1
},
# DocField # DocField
{ {
'doctype': u'DocField', 'doctype': u'DocField',

View File

@ -45,7 +45,7 @@ class DocType:
def get_item_specification_details(self): def get_item_specification_details(self):
self.doc.clear_table(self.doclist, 'qa_specification_details') self.doclist = self.doc.clear_table(self.doclist, 'qa_specification_details')
specification = sql("select specification, value from `tabItem Quality Inspection Parameter` \ specification = sql("select specification, value from `tabItem Quality Inspection Parameter` \
where parent = '%s' order by idx" % (self.doc.item_code)) where parent = '%s' order by idx" % (self.doc.item_code))
for d in specification: for d in specification:

View File

@ -62,24 +62,9 @@ cur_frm.cscript.make_address = function() {
}, },
as_dict: 1, as_dict: 1,
no_results_message: 'No addresses created', no_results_message: 'No addresses created',
render_row: function(wrapper, data) { render_row: cur_frm.cscript.render_address_row,
$(wrapper).css('padding','5px 0px');
var link = $ln(wrapper,cstr(data.name), function() { loaddoc("Address", this.dn); }, {fontWeight:'bold'});
link.dn = data.name
$a(wrapper,'span','',{marginLeft:'5px', color: '#666'},(data.is_primary_address ? '[Primary]' : '') + (data.is_shipping_address ? '[Shipping]' : ''));
$a(wrapper,'div','',{marginTop:'5px', color:'#555'},
(data.address_line1 ? data.address_line1 + '<br />' : '') +
(data.address_line2 ? data.address_line2 + '<br />' : '') +
(data.city ? data.city + '<br />' : '') +
(data.state ? data.state + ', ' : '') +
(data.country ? data.country + '<br />' : '') +
(data.pincode ? 'Pincode: ' + data.pincode + '<br />' : '') +
(data.phone ? 'Phone: ' + data.phone + '<br />' : '') +
(data.fax ? 'Fax: ' + data.fax + '<br />' : '') +
(data.email_id ? 'Email: ' + data.email_id + '<br />' : ''));
}
}); });
// note: render_address_row is defined in contact_control.js
} }
cur_frm.address_list.run(); cur_frm.address_list.run();
} }
@ -95,15 +80,9 @@ cur_frm.cscript.make_contact = function() {
}, },
as_dict: 1, as_dict: 1,
no_results_message: 'No contacts created', no_results_message: 'No contacts created',
render_row: function(wrapper, data) { render_row: cur_frm.cscript.render_contact_row,
$(wrapper).css('padding', '5px 0px');
var link = $ln(wrapper, cstr(data.name), function() { loaddoc("Contact", this.dn); }, {fontWeight:'bold'});
link.dn = data.name
$a(wrapper,'span','',{marginLeft:'5px', color: '#666'},(data.is_primary_contact ? '[Primary]' : ''));
$a(wrapper,'div', '',{marginTop:'5px', color:'#555'}, data.first_name + (data.last_name ? ' ' + data.last_name + '<br />' : '<br>') + (data.phone ? 'Tel: ' + data.phone + '<br />' : '') + (data.mobile_no ? 'Mobile: ' + data.mobile_no + '<br />' : '') + (data.email_id ? 'Email: ' + data.email_id + '<br />' : '') + (data.department ? 'Department: ' + data.department + '<br />' : '') + (data.designation ? 'Designation: ' + data.designation + '<br />' : ''));
}
}); });
// note: render_contact_row is defined in contact_control.js
} }
cur_frm.contact_list.run(); cur_frm.contact_list.run();
} }

View File

@ -14,6 +14,12 @@
<br> <br>
<h4><a href="#!List/Item">Item</a></h4> <h4><a href="#!List/Item">Item</a></h4>
<p class="help">Item Master</p> <p class="help">Item Master</p>
<br>
<h4><a href="#!List/Contact">Contact</a></h4>
<p class="help">Contact Master</p>
<br>
<h4><a href="#!List/Address">Address</a></h4>
<p class="help">Address Master</p>
</div> </div>
<div style="clear: both"></div> <div style="clear: both"></div>
<hr> <hr>

View File

@ -48,7 +48,7 @@ class DocType:
if not self.doc.kra_template: if not self.doc.kra_template:
msgprint("Please select Appraisal Template to be be fetched") msgprint("Please select Appraisal Template to be be fetched")
raise Exception raise Exception
self.doc.clear_table(self.doclist,'appraisal_details') self.doclist = self.doc.clear_table(self.doclist,'appraisal_details')
get_obj('DocType Mapper', 'Appraisal Template-Appraisal').dt_map('Appraisal Template', 'Appraisal', self.doc.kra_template, self.doc, self.doclist, "[['Appraisal Template','Appraisal'],['Appraisal Template Goal', 'Appraisal Goal']]") get_obj('DocType Mapper', 'Appraisal Template-Appraisal').dt_map('Appraisal Template', 'Appraisal', self.doc.kra_template, self.doc, self.doclist, "[['Appraisal Template','Appraisal'],['Appraisal Template Goal', 'Appraisal Goal']]")
def validate_dates(self): def validate_dates(self):

View File

@ -113,7 +113,7 @@ class DocType:
# clear table # clear table
# ------------ # ------------
def clear_table(self): def clear_table(self):
self.doc.clear_table(self.doclist,'holiday_list_details') self.doclist = self.doc.clear_table(self.doclist,'holiday_list_details')
# ***************************************** validate ************************************************* # ***************************************** validate *************************************************

View File

@ -24,7 +24,7 @@ cur_frm.cscript.onload = function(doc,dt,dn){
// Validation For To Date // Validation For To Date
// ================================================================================================ // ================================================================================================
cur_frm.cscript.to_date = function(doc, cdt, cdn) { cur_frm.cscript.to_date = function(doc, cdt, cdn) {
$c('runserverobj', args={'method':'to_date_validation','docs':compress_doclist([doc])}, $c('runserverobj', args={'method':'to_date_validation','docs':compress_doclist(make_doclist(doc.doctype, doc.name))},
function(r, rt) { function(r, rt) {
var doc = locals[cdt][cdn]; var doc = locals[cdt][cdn];
if (r.message) { if (r.message) {

View File

@ -70,8 +70,8 @@ class DocType(TransactionBase):
# Pull struct details # Pull struct details
#======================================================= #=======================================================
def pull_sal_struct(self, struct): def pull_sal_struct(self, struct):
self.doc.clear_table(self.doclist, 'earning_details') self.doclist = self.doc.clear_table(self.doclist, 'earning_details')
self.doc.clear_table(self.doclist, 'deduction_details') self.doclist = self.doc.clear_table(self.doclist, 'deduction_details')
get_obj('DocType Mapper', 'Salary Structure-Salary Slip').dt_map('Salary Structure', 'Salary Slip', struct, self.doc, self.doclist, "[['Salary Structure', 'Salary Slip'],['Salary Structure Earning', 'Salary Slip Earning'],['Salary Structure Deduction','Salary Slip Deduction']]") get_obj('DocType Mapper', 'Salary Structure-Salary Slip').dt_map('Salary Structure', 'Salary Slip', struct, self.doc, self.doclist, "[['Salary Structure', 'Salary Slip'],['Salary Structure Earning', 'Salary Slip Earning'],['Salary Structure Deduction','Salary Slip Deduction']]")

View File

@ -0,0 +1,11 @@
def execute():
import webnotes
webnotes.conn.sql("""\
delete from `tabDocPerm`
where parent in ('Address', 'Contact')""")
webnotes.conn.commit()
import webnotes.model.sync
webnotes.model.sync.sync('utilities', 'address')
webnotes.model.sync.sync('utilities', 'contact')
webnotes.conn.begin()

View File

@ -0,0 +1,17 @@
def execute():
"""delete entries of child table having parent like old_par%% or ''"""
import webnotes
res = webnotes.conn.sql("""\
select dt.name from `tabDocType` dt
where ifnull(dt.istable, 0)=1 and
exists (
select * from `tabDocField` df
where df.fieldtype='Table' and
df.options=dt.name
)""")
for r in res:
if r[0]:
webnotes.conn.sql("""\
delete from `tab%s`
where (ifnull(parent, '')='' or parent like "old_par%%") and
ifnull(parenttype, '')!=''""" % r[0])

View File

@ -452,6 +452,11 @@ patch_list = [
'patch_file': 'alter_tabsessions', 'patch_file': 'alter_tabsessions',
'description': "alter tabsessions to change user column definition" 'description': "alter tabsessions to change user column definition"
}, },
{
'patch_module': 'patches.june_2012',
'patch_file': 'delete_old_parent_entries',
'description': "delete entries of child table having parent like old_par%% or ''"
},
{ {
'patch_module': 'patches.april_2012', 'patch_module': 'patches.april_2012',
'patch_file': 'delete_about_contact', 'patch_file': 'delete_about_contact',
@ -467,6 +472,11 @@ patch_list = [
'patch_file': 'reload_pr_po_mapper', 'patch_file': 'reload_pr_po_mapper',
'description': "order date should be greater than equal to request date" 'description': "order date should be greater than equal to request date"
}, },
{
'patch_module': 'patches.july_2012',
'patch_file': 'address_contact_perms',
'description': "sync address contact perms"
},
{ {
'patch_module': 'patches.july_2012', 'patch_module': 'patches.july_2012',
'patch_file': 'packing_list_cleanup_and_serial_no', 'patch_file': 'packing_list_cleanup_and_serial_no',

View File

@ -322,7 +322,7 @@ class DocType:
def add_to_flat_bom_detail(self, is_submit = 0): def add_to_flat_bom_detail(self, is_submit = 0):
"Add items to Flat BOM table" "Add items to Flat BOM table"
self.doc.clear_table(self.doclist, 'flat_bom_details', 1) self.doclist = self.doc.clear_table(self.doclist, 'flat_bom_details', 1)
for d in self.cur_flat_bom_items: for d in self.cur_flat_bom_items:
ch = addchild(self.doc, 'flat_bom_details', 'BOM Explosion Item', 1, self.doclist) ch = addchild(self.doc, 'flat_bom_details', 'BOM Explosion Item', 1, self.doclist)
for i in d.keys(): for i in d.keys():

View File

@ -58,13 +58,13 @@ class DocType:
def clear_so_table(self): def clear_so_table(self):
""" Clears sales order table""" """ Clears sales order table"""
self.doc.clear_table(self.doclist, 'pp_so_details') self.doclist = self.doc.clear_table(self.doclist, 'pp_so_details')
def clear_item_table(self): def clear_item_table(self):
""" Clears item table""" """ Clears item table"""
self.doc.clear_table(self.doclist, 'pp_details') self.doclist = self.doc.clear_table(self.doclist, 'pp_details')

View File

@ -95,5 +95,5 @@ cur_frm.cscript.add = function(doc, dt, dn) {
cur_frm.mylist.run(); cur_frm.mylist.run();
} }
$c_obj([doc],'add_update','',callback); $c_obj(make_doclist(doc.doctype, doc.name),'add_update','',callback);
} }

View File

@ -81,24 +81,9 @@ cur_frm.cscript.make_address = function() {
}, },
as_dict: 1, as_dict: 1,
no_results_message: 'No addresses created', no_results_message: 'No addresses created',
render_row: function(wrapper, data) { render_row: cur_frm.cscript.render_address_row,
$(wrapper).css('padding','5px 0px');
var link = $ln(wrapper,cstr(data.name), function() { loaddoc("Address", this.dn); }, {fontWeight:'bold'});
link.dn = data.name
$a(wrapper,'span','',{marginLeft:'5px', color: '#666'},(data.is_primary_address ? '[Primary]' : '') + (data.is_shipping_address ? '[Shipping]' : ''));
$a(wrapper,'div','',{marginTop:'5px', color:'#555'},
(data.address_line1 ? data.address_line1 + '<br />' : '') +
(data.address_line2 ? data.address_line2 + '<br />' : '') +
(data.city ? data.city + '<br />' : '') +
(data.state ? data.state + ', ' : '') +
(data.country ? data.country + '<br />' : '') +
(data.pincode ? 'Pincode: ' + data.pincode + '<br />' : '') +
(data.phone ? 'Phone: ' + data.phone + '<br />' : '') +
(data.fax ? 'Fax: ' + data.fax + '<br />' : '') +
(data.email_id ? 'Email: ' + data.email_id + '<br />' : ''));
}
}); });
// note: render_address_row is defined in contact_control.js
} }
cur_frm.address_list.run(); cur_frm.address_list.run();
} }
@ -114,15 +99,9 @@ cur_frm.cscript.make_contact = function() {
}, },
as_dict: 1, as_dict: 1,
no_results_message: 'No contacts created', no_results_message: 'No contacts created',
render_row: function(wrapper, data) { render_row: cur_frm.cscript.render_contact_row,
$(wrapper).css('padding', '5px 0px');
var link = $ln(wrapper, cstr(data.name), function() { loaddoc("Contact", this.dn); }, {fontWeight:'bold'});
link.dn = data.name
$a(wrapper,'span','',{marginLeft:'5px', color: '#666'},(data.is_primary_contact ? '[Primary]' : ''));
$a(wrapper,'div', '',{marginTop:'5px', color:'#555'}, data.first_name + (data.last_name ? ' ' + data.last_name + '<br />' : '<br>') + (data.phone ? 'Tel: ' + data.phone + '<br />' : '') + (data.mobile_no ? 'Mobile: ' + data.mobile_no + '<br />' : '') + (data.email_id ? 'Email: ' + data.email_id + '<br />' : '') + (data.department ? 'Department: ' + data.department + '<br />' : '') + (data.designation ? 'Designation: ' + data.designation + '<br />' : ''));
}
}); });
// note: render_contact_row is defined in contact_control.js
} }
cur_frm.contact_list.run(); cur_frm.contact_list.run();

View File

@ -87,7 +87,7 @@ cur_frm.cscript.item_code=function(doc,cdt,cdn){
// =============================================================== // ===============================================================
cur_frm.cscript['Create Customer'] = function(){ cur_frm.cscript['Create Customer'] = function(){
var doc = cur_frm.doc; var doc = cur_frm.doc;
$c('runserverobj',args={ 'method':'check_status', 'docs':compress_doclist([doc])}, $c('runserverobj',args={ 'method':'check_status', 'docs':compress_doclist(make_doclist(doc.doctype, doc.name))},
function(r,rt){ function(r,rt){
if(r.message == 'Converted'){ if(r.message == 'Converted'){
msgprint("This lead is already converted to customer"); msgprint("This lead is already converted to customer");
@ -124,7 +124,7 @@ cur_frm.cscript.send_email = function(doc,cdt,cdn){
// =============================================================== // ===============================================================
cur_frm.cscript['Create Opportunity'] = function(){ cur_frm.cscript['Create Opportunity'] = function(){
var doc = cur_frm.doc; var doc = cur_frm.doc;
$c('runserverobj',args={ 'method':'check_status', 'docs':compress_doclist([doc])}, $c('runserverobj',args={ 'method':'check_status', 'docs':compress_doclist(make_doclist(doc.doctype, doc.name))},
function(r,rt){ function(r,rt){
if(r.message == 'Converted'){ if(r.message == 'Converted'){
msgprint("This lead is now converted to customer. Please create enquiry on behalf of customer"); msgprint("This lead is now converted to customer. Please create enquiry on behalf of customer");

View File

@ -50,7 +50,6 @@ cur_frm.cscript.onload = function(doc, cdt, cdn) {
} }
} }
cur_frm.cscript.make_communication_body(); cur_frm.cscript.make_communication_body();
} }
cur_frm.cscript.onload_post_render = function(doc, dt, dn) { cur_frm.cscript.onload_post_render = function(doc, dt, dn) {

View File

@ -53,7 +53,7 @@ class DocType(TransactionBase):
# Pull Opportunity Details # Pull Opportunity Details
# -------------------- # --------------------
def pull_enq_details(self): def pull_enq_details(self):
self.doc.clear_table(self.doclist, 'quotation_details') self.doclist = self.doc.clear_table(self.doclist, 'quotation_details')
get_obj('DocType Mapper', 'Opportunity-Quotation').dt_map('Opportunity', 'Quotation', self.doc.enq_no, self.doc, self.doclist, "[['Opportunity', 'Quotation'],['Opportunity Item', 'Quotation Item']]") get_obj('DocType Mapper', 'Opportunity-Quotation').dt_map('Opportunity', 'Quotation', self.doc.enq_no, self.doc, self.doclist, "[['Opportunity', 'Quotation'],['Opportunity Item', 'Quotation Item']]")
self.get_adj_percent() self.get_adj_percent()
@ -81,12 +81,19 @@ class DocType(TransactionBase):
obj = get_obj('Sales Common') obj = get_obj('Sales Common')
for doc in self.doclist: for doc in self.doclist:
if doc.fields.get('item_code'): if doc.fields.get('item_code'):
arg = {'item_code':doc.fields.get('item_code'), 'income_account':doc.fields.get('income_account'), arg = {
'cost_center': doc.fields.get('cost_center'), 'warehouse': doc.fields.get('warehouse')}; 'item_code': doc.fields.get('item_code'),
ret = obj.get_item_defaults(arg) 'income_account': doc.fields.get('income_account'),
for r in ret: 'cost_center': doc.fields.get('cost_center'),
if not doc.fields.get(r): 'warehouse': doc.fields.get('warehouse')
doc.fields[r] = ret[r] }
fields_dict = obj.get_item_details(arg, self)
if fields_dict:
doc.fields.update(fields_dict)
#ret = obj.get_item_defaults(arg)
#for r in ret:
# if not doc.fields.get(r):
# doc.fields[r] = ret[r]
# Re-calculates Basic Rate & amount based on Price List Selected # Re-calculates Basic Rate & amount based on Price List Selected
@ -108,12 +115,12 @@ class DocType(TransactionBase):
# Load Default Charges # Load Default Charges
# ---------------------------------------------------------- # ----------------------------------------------------------
def load_default_taxes(self): def load_default_taxes(self):
return get_obj('Sales Common').load_default_taxes(self) self.doclist = get_obj('Sales Common').load_default_taxes(self)
# Pull details from other charges master (Get Sales Taxes and Charges Master) # Pull details from other charges master (Get Sales Taxes and Charges Master)
# ---------------------------------------------------------- # ----------------------------------------------------------
def get_other_charges(self): def get_other_charges(self):
return get_obj('Sales Common').get_other_charges(self) self.doclist = get_obj('Sales Common').get_other_charges(self)
# GET TERMS AND CONDITIONS # GET TERMS AND CONDITIONS

View File

@ -72,9 +72,11 @@ class DocType(TransactionBase):
# Get Sales Person Details # Get Sales Person Details
# ========================== # ==========================
# TODO: To be deprecated if not in use
def get_sales_person_details(self, obj): def get_sales_person_details(self, obj):
if obj.doc.doctype != 'Quotation': if obj.doc.doctype != 'Quotation':
obj.doc.clear_table(obj.doclist,'sales_team') obj.doclist = obj.doc.clear_table(obj.doclist,'sales_team')
idx = 0 idx = 0
for d in webnotes.conn.sql("select sales_person, allocated_percentage, allocated_amount, incentives from `tabSales Team` where parent = '%s'" % obj.doc.customer): for d in webnotes.conn.sql("select sales_person, allocated_percentage, allocated_amount, incentives from `tabSales Team` where parent = '%s'" % obj.doc.customer):
ch = addchild(obj.doc, 'sales_team', 'Sales Team', 1, obj.doclist) ch = addchild(obj.doc, 'sales_team', 'Sales Team', 1, obj.doclist)
@ -84,6 +86,7 @@ class DocType(TransactionBase):
ch.incentives = d and flt(d[3]) or 0 ch.incentives = d and flt(d[3]) or 0
ch.idx = idx ch.idx = idx
idx += 1 idx += 1
return obj.doclist
# Get customer's contact person details # Get customer's contact person details
@ -227,15 +230,15 @@ class DocType(TransactionBase):
# ==================== # ====================
def load_default_taxes(self, obj): def load_default_taxes(self, obj):
if cstr(obj.doc.charge): if cstr(obj.doc.charge):
self.get_other_charges(obj) return self.get_other_charges(obj)
else: else:
self.get_other_charges(obj, 1) return self.get_other_charges(obj, 1)
# Get other charges from Master # Get other charges from Master
# ================================================================================= # =================================================================================
def get_other_charges(self,obj, default=0): def get_other_charges(self,obj, default=0):
obj.doc.clear_table(obj.doclist,'other_charges') obj.doclist = obj.doc.clear_table(obj.doclist, 'other_charges')
if not getlist(obj.doclist, 'other_charges'): if not getlist(obj.doclist, 'other_charges'):
if default: add_cond = 'ifnull(t2.is_default,0) = 1' if default: add_cond = 'ifnull(t2.is_default,0) = 1'
else: add_cond = 't1.parent = "'+cstr(obj.doc.charge)+'"' else: add_cond = 't1.parent = "'+cstr(obj.doc.charge)+'"'
@ -265,6 +268,7 @@ class DocType(TransactionBase):
d.included_in_print_rate = cint(d.included_in_print_rate) d.included_in_print_rate = cint(d.included_in_print_rate)
d.idx = idx d.idx = idx
idx += 1 idx += 1
return obj.doclist
# Get TERMS AND CONDITIONS # Get TERMS AND CONDITIONS
# ======================================================================================= # =======================================================================================
@ -513,12 +517,22 @@ class DocType(TransactionBase):
self.cleanup_packing_list(obj, parent_items) self.cleanup_packing_list(obj, parent_items)
def cleanup_packing_list(self, obj, parent_items): def cleanup_packing_list(self, obj, parent_items):
"""Remove all those parent items which are no longer present in main item table""" """Remove all those child items which are no longer present in main item table"""
delete_list = []
for d in getlist(obj.doclist, 'packing_details'): for d in getlist(obj.doclist, 'packing_details'):
if [d.parent_item, d.parent_detail_docname] not in parent_items: if [d.parent_item, d.parent_detail_docname] not in parent_items:
d.parent = '' # mark for deletion from doclist
d.save() delete_list.append(d.name)
if not delete_list: return
# delete from doclist
obj.doclist = filter(lambda d: d.name not in delete_list, obj.doclist)
# delete from db
webnotes.conn.sql("""\
delete from `tabDelivery Note Packing Item`
where name in ("%s")""" % '", "'.join(delete_list))
# Get total in words # Get total in words
# ================================================================== # ==================================================================

View File

@ -35,8 +35,9 @@ convert_to_lists = webnotes.conn.convert_to_lists
from utilities.transaction_base import TransactionBase from utilities.transaction_base import TransactionBase
class DocType(TransactionBase): class DocType(TransactionBase):
def __init__(self, doc, doclist=[]): def __init__(self, doc, doclist=None):
self.doc = doc self.doc = doc
if not doclist: doclist = []
self.doclist = doclist self.doclist = doclist
self.tname = 'Sales Order Item' self.tname = 'Sales Order Item'
self.fname = 'sales_order_details' self.fname = 'sales_order_details'
@ -55,10 +56,10 @@ class DocType(TransactionBase):
# Pull Quotation Items # Pull Quotation Items
# ----------------------- # -----------------------
def pull_quotation_details(self): def pull_quotation_details(self):
self.doc.clear_table(self.doclist, 'other_charges') self.doclist = self.doc.clear_table(self.doclist, 'other_charges')
self.doc.clear_table(self.doclist, 'sales_order_details') self.doclist = self.doc.clear_table(self.doclist, 'sales_order_details')
self.doc.clear_table(self.doclist, 'sales_team') self.doclist = self.doc.clear_table(self.doclist, 'sales_team')
self.doc.clear_table(self.doclist, 'tc_details') self.doclist = self.doc.clear_table(self.doclist, 'tc_details')
if self.doc.quotation_no: if self.doc.quotation_no:
get_obj('DocType Mapper', 'Quotation-Sales Order').dt_map('Quotation', 'Sales Order', self.doc.quotation_no, self.doc, self.doclist, "[['Quotation', 'Sales Order'],['Quotation Item', 'Sales Order Item'],['Sales Taxes and Charges','Sales Taxes and Charges'],['Sales Team','Sales Team'],['TC Detail','TC Detail']]") get_obj('DocType Mapper', 'Quotation-Sales Order').dt_map('Quotation', 'Sales Order', self.doc.quotation_no, self.doc, self.doclist, "[['Quotation', 'Sales Order'],['Quotation Item', 'Sales Order Item'],['Sales Taxes and Charges','Sales Taxes and Charges'],['Sales Team','Sales Team'],['TC Detail','TC Detail']]")
else: else:
@ -129,12 +130,12 @@ class DocType(TransactionBase):
# Load Default Charges # Load Default Charges
# ---------------------------------------------------------- # ----------------------------------------------------------
def load_default_taxes(self): def load_default_taxes(self):
return get_obj('Sales Common').load_default_taxes(self) self.doclist = get_obj('Sales Common').load_default_taxes(self)
# Pull details from other charges master (Get Sales Taxes and Charges Master) # Pull details from other charges master (Get Sales Taxes and Charges Master)
# ---------------------------------------------------------- # ----------------------------------------------------------
def get_other_charges(self): def get_other_charges(self):
return get_obj('Sales Common').get_other_charges(self) self.doclist = get_obj('Sales Common').get_other_charges(self)
# GET TERMS & CONDITIONS # GET TERMS & CONDITIONS

View File

@ -20,6 +20,12 @@
<br> <br>
<h4><a href="#!List/Item">Item</a></h4> <h4><a href="#!List/Item">Item</a></h4>
<p class="help">Item Master</p> <p class="help">Item Master</p>
<br>
<h4><a href="#!List/Contact">Contact</a></h4>
<p class="help">Contact Master</p>
<br>
<h4><a href="#!List/Address">Address</a></h4>
<p class="help">Address Master</p>
</div> </div>
<div style="clear: both"></div> <div style="clear: both"></div>
<hr> <hr>

View File

@ -55,7 +55,7 @@ cur_frm.cscript.make_history_list = function(parent,doc){
// get sates on country trigger // get sates on country trigger
// ----------------------------- // -----------------------------
cur_frm.cscript.get_states=function(doc,dt,dn){ cur_frm.cscript.get_states=function(doc,dt,dn){
$c('runserverobj', args={'method':'check_state', 'docs':compress_doclist([doc])}, $c('runserverobj', args={'method':'check_state', 'docs':compress_doclist(make_doclist(doc.doctype, doc.name))},
function(r,rt){ function(r,rt){
if(r.message) { if(r.message) {
set_field_options('state', r.message); set_field_options('state', r.message);
@ -77,3 +77,140 @@ if(cur_frm.fields_dict['territory']){
return 'SELECT `tabTerritory`.`name`,`tabTerritory`.`parent_territory` FROM `tabTerritory` WHERE `tabTerritory`.`is_group` = "No" AND `tabTerritory`.`docstatus`!= 2 AND `tabTerritory`.%(key)s LIKE "%s" ORDER BY `tabTerritory`.`name` ASC LIMIT 50'; return 'SELECT `tabTerritory`.`name`,`tabTerritory`.`parent_territory` FROM `tabTerritory` WHERE `tabTerritory`.`is_group` = "No" AND `tabTerritory`.`docstatus`!= 2 AND `tabTerritory`.%(key)s LIKE "%s" ORDER BY `tabTerritory`.`name` ASC LIMIT 50';
} }
} }
cur_frm.cscript.render_contact_row = function(wrapper, data) {
// prepare data
data.fullname = (data.first_name || '')
+ (data.last_name ? ' ' + data.last_name : '');
data.primary = data.is_primary_contact ? ' [Primary]' : '';
// prepare description
var description = [];
$.each([
['phone', 'Tel'],
['mobile_no', 'Mobile'],
['email_id', 'Email'],
['department', 'Department'],
['designation', 'Designation']],
function(i, v) {
if(v[0] && data[v[0]]) {
description.push(repl('<h6>%(label)s:</h6> %(value)s', {
label: v[1],
value: data[v[0]],
}));
}
});
data.description = description.join('<br />');
cur_frm.cscript.render_row_in_wrapper(wrapper, data, 'Contact');
}
cur_frm.cscript.render_address_row = function(wrapper, data) {
// prepare data
data.fullname = data.address_type;
data.primary = '';
if (data.is_primary_address) data.primary += ' [Primary]';
if (data.is_shipping_address) data.primary += ' [Shipping]';
// prepare address
var address = [];
$.each(['address_line1', 'address_line2', 'city', 'state', 'country', 'pincode'],
function(i, v) {
if(data[v]) address.push(data[v]);
});
data.address = address.join('<br />');
data.address = "<p class='address-list'>" + data.address + "</p>";
// prepare description
var description = [];
$.each([
['address', 'Address'],
['phone', 'Tel'],
['fax', 'Fax'],
['email_id', 'Email']],
function(i, v) {
if(data[v[0]]) {
description.push(repl('<h6>%(label)s:</h6> %(value)s', {
label: v[1],
value: data[v[0]],
}));
}
});
data.description = description.join('<br />');
cur_frm.cscript.render_row_in_wrapper(wrapper, data, 'Address');
$(wrapper).find('p.address-list').css({
'padding-left': '10px',
'margin-bottom': '-10px'
});
}
cur_frm.cscript.render_row_in_wrapper = function(wrapper, data, doctype) {
// render
var $wrapper = $(wrapper);
data.doctype = doctype.toLowerCase();
$wrapper.append(repl("\
<h4><a class='link_type'>%(fullname)s</a>%(primary)s</h4>\
<div class='description'>\
%(description)s\
<p><a class='delete link_type'>delete this %(doctype)s</a></p>\
</div>", data));
// make link
$wrapper.find('h4 a.link_type').click(function() {
loaddoc(doctype, data.name);
});
// css
$wrapper.css({ 'padding': '5px 0px' });
$wrapper.find('div.description').css({
'padding': '5px 2px',
'line-height': '150%',
});
$wrapper.find('h6').css({ 'display': 'inline-block' });
// show delete
var $delete_doc = $wrapper.find('a.delete');
if (wn.model.can_delete(doctype)) {
$delete_doc.toggle(true);
} else {
$delete_doc.toggle(false);
}
$delete_doc.css({
'padding-left': '0px'
});
$delete_doc.click(function() {
cur_frm.cscript.delete_doc(doctype, data.name);
return false;
});
}
cur_frm.cscript.delete_doc = function(doctype, name) {
// confirm deletion
var go_ahead = confirm(repl('Delete %(doctype)s "%(name)s"', {
doctype: doctype,
name: name
}));
if (!go_ahead) return;
wn.call({
method: 'webnotes.model.delete_doc',
args: {
dt: doctype,
dn: name
},
callback: function(r) {
//console.log(r);
if (!r.exc) {
// run the correct list
var list_name = doctype.toLowerCase() + '_list';
cur_frm[list_name].run();
}
}
});
}

View File

@ -19,7 +19,7 @@ cur_frm.cscript.onload = function(doc, cdt, cdn){
var callback = function(r, rt){ var callback = function(r, rt){
set_field_options('select_doc_for_series', r.message); set_field_options('select_doc_for_series', r.message);
} }
$c_obj([doc],'get_transactions','',callback); $c_obj(make_doclist(doc.doctype, doc.name),'get_transactions','',callback);
cur_frm.cscript.refresh(); cur_frm.cscript.refresh();
// add page head // add page head
//var ph = new PageHeader(cur_frm.fields_dict['head_html'].wrapper, 'Setup Series', 'Set prefix for numbering series on your transactions'); //var ph = new PageHeader(cur_frm.fields_dict['head_html'].wrapper, 'Setup Series', 'Set prefix for numbering series on your transactions');
@ -36,5 +36,5 @@ cur_frm.cscript.select_doc_for_series = function(doc, cdt, cdn) {
refresh_field('set_options'); refresh_field('set_options');
} }
$c_obj([doc],'get_options','',callback) $c_obj(make_doclist(doc.doctype, doc.name),'get_options','',callback)
} }

View File

@ -46,7 +46,8 @@ class DocType:
WHERE ifnull(docstatus,0)=0 WHERE ifnull(docstatus,0)=0
AND ifnull(istable,0)=0 AND ifnull(istable,0)=0
AND ifnull(issingle,0)=0 AND ifnull(issingle,0)=0
AND `module` NOT IN ('System','Utilities','Setup Masters','Roles','Recycle Bin','Mapper','Application Internal','Development', 'Core') AND (`module` NOT IN ('System','Utilities','Setup Masters','Roles','Recycle Bin','Mapper','Application Internal','Development', 'Core')
OR name IN ('Contact', 'Address'))
ORDER BY `name` ASC""") ORDER BY `name` ASC""")
rl = [''] + [a[0] for a in sql("select name from tabRole where ifnull(docstatus,0)=0")] rl = [''] + [a[0] for a in sql("select name from tabRole where ifnull(docstatus,0)=0")]

View File

@ -32,6 +32,6 @@ cur_frm.cscript.refresh = function(doc, cdt, cdn) {
cur_frm.cscript.clear_prices = function(doc, cdt, cdn) { cur_frm.cscript.clear_prices = function(doc, cdt, cdn) {
if(confirm("This action will clear all rates for '"+ doc.name +"' from the Item Master and cannot be un-done. Are you sure you want to continue?")) { if(confirm("This action will clear all rates for '"+ doc.name +"' from the Item Master and cannot be un-done. Are you sure you want to continue?")) {
$c_obj([doc], 'clear_prices', '', function(r, rt) { }); $c_obj(make_doclist(doc.doctype, doc.name), 'clear_prices', '', function(r, rt) { });
} }
} }

View File

@ -26,7 +26,7 @@ cur_frm.cscript.onload = function(){
} }
cur_frm.cscript.country = function(doc, cdt, cdn) { cur_frm.cscript.country = function(doc, cdt, cdn) {
var mydoc=doc; var mydoc=doc;
$c('runserverobj', args={'method':'check_state', 'docs':compress_doclist([doc])}, $c('runserverobj', args={'method':'check_state', 'docs':compress_doclist(make_doclist(doc.doctype, doc.name))},
function(r,rt){ function(r,rt){
if(r.message) { if(r.message) {
var doc = locals[mydoc.doctype][mydoc.name]; var doc = locals[mydoc.doctype][mydoc.name];

View File

@ -65,7 +65,7 @@ class DocType(TransactionBase):
# *************** Pull Sales Order Items ************************ # *************** Pull Sales Order Items ************************
def pull_sales_order_details(self): def pull_sales_order_details(self):
self.validate_prev_docname() self.validate_prev_docname()
self.doc.clear_table(self.doclist,'other_charges') self.doclist = self.doc.clear_table(self.doclist,'other_charges')
if self.doc.sales_order_no: if self.doc.sales_order_no:
get_obj('DocType Mapper', 'Sales Order-Delivery Note').dt_map('Sales Order', 'Delivery Note', self.doc.sales_order_no, self.doc, self.doclist, "[['Sales Order', 'Delivery Note'],['Sales Order Item', 'Delivery Note Item'],['Sales Taxes and Charges','Sales Taxes and Charges'],['Sales Team','Sales Team']]") get_obj('DocType Mapper', 'Sales Order-Delivery Note').dt_map('Sales Order', 'Delivery Note', self.doc.sales_order_no, self.doc, self.doclist, "[['Sales Order', 'Delivery Note'],['Sales Order Item', 'Delivery Note Item'],['Sales Taxes and Charges','Sales Taxes and Charges'],['Sales Team','Sales Team']]")
@ -146,12 +146,12 @@ class DocType(TransactionBase):
# Load Default Charges # Load Default Charges
# ---------------------------------------------------------- # ----------------------------------------------------------
def load_default_taxes(self): def load_default_taxes(self):
return get_obj('Sales Common').load_default_taxes(self) self.doclist = get_obj('Sales Common').load_default_taxes(self)
# **** Pull details from other charges master (Get Sales Taxes and Charges Master) **** # **** Pull details from other charges master (Get Sales Taxes and Charges Master) ****
def get_other_charges(self): def get_other_charges(self):
return get_obj('Sales Common').get_other_charges(self) self.doclist = get_obj('Sales Common').get_other_charges(self)
#check in manage account if sales order required or not. #check in manage account if sales order required or not.

View File

@ -43,7 +43,7 @@ class DocType:
def get_purchase_receipts(self): def get_purchase_receipts(self):
""" Get purchase receipts for given period """ """ Get purchase receipts for given period """
self.doc.clear_table(self.doclist,'lc_pr_details',1) self.doclist = self.doc.clear_table(self.doclist,'lc_pr_details',1)
self.check_mandatory() self.check_mandatory()
pr = sql("select name from `tabPurchase Receipt` where docstatus = 1 and posting_date >= '%s' and posting_date <= '%s' and currency = '%s' order by name " % (self.doc.from_pr_date, self.doc.to_pr_date, self.doc.currency), as_dict = 1) pr = sql("select name from `tabPurchase Receipt` where docstatus = 1 and posting_date >= '%s' and posting_date <= '%s' and currency = '%s' order by name " % (self.doc.from_pr_date, self.doc.to_pr_date, self.doc.currency), as_dict = 1)
@ -58,7 +58,7 @@ class DocType:
def get_landed_cost_master_details(self): def get_landed_cost_master_details(self):
""" pull details from landed cost master""" """ pull details from landed cost master"""
self.doc.clear_table(self.doclist, 'landed_cost_details') self.doclist = self.doc.clear_table(self.doclist, 'landed_cost_details')
idx = 0 idx = 0
landed_cost = sql("select account_head, description from `tabLanded Cost Master Detail` where parent=%s", (self.doc.landed_cost), as_dict = 1) landed_cost = sql("select account_head, description from `tabLanded Cost Master Detail` where parent=%s", (self.doc.landed_cost), as_dict = 1)
for cost in landed_cost: for cost in landed_cost:

View File

@ -4,16 +4,27 @@ wn.doclistviews['Purchase Receipt'] = wn.views.ListView.extend({
this._super(d); this._super(d);
this.fields = this.fields.concat([ this.fields = this.fields.concat([
"`tabPurchase Receipt`.supplier_name", "`tabPurchase Receipt`.supplier_name",
"`tabPurchase Receipt`.purchase_order_no" "group_concat(`tabPurchase Receipt Item`.prevdoc_docname) as purchase_order_no",
]); ]);
}, },
prepare_data: function(data) {
this._super(data);
if(data.purchase_order_no) {
data.purchase_order_no = data.purchase_order_no.split(",");
var po_list = [];
$.each(data.purchase_order_no, function(i, v){
if(po_list.indexOf(v)==-1) po_list.push(v);
});
data.purchase_order_no = po_list.join(", ");
}
},
columns: [ columns: [
{width: '3%', content: 'check'}, {width: '3%', content: 'check'},
{width: '5%', content:'avatar'}, {width: '5%', content:'avatar'},
{width: '3%', content:'docstatus'}, {width: '3%', content:'docstatus'},
{width: '15%', content:'name'}, {width: '15%', content:'name'},
{width: '47%', content:'supplier_name+tags', css: {color:'#222'}}, {width: '32%', content:'supplier_name+tags', css: {color:'#222'}},
{width: '15%', content:'purchase_order_no', type:'link', doctype:'Purchase Order'}, {width: '30%', content:'purchase_order_no'},
{width: '12%', content:'modified', css: {'text-align': 'right', 'color':'#777'}} {width: '12%', content:'modified', css: {'text-align': 'right', 'color':'#777'}}
] ]
}); });

View File

@ -370,7 +370,7 @@ class DocType(TransactionBase):
raise Exception raise Exception
self.add_bom(d) self.add_bom(d)
else: else:
self.doc.clear_table(self.doclist,'pr_raw_material_details',1) self.doclist = self.doc.clear_table(self.doclist,'pr_raw_material_details',1)
self.doc.save() self.doc.save()
elif item_det[0][1] == 'No': elif item_det[0][1] == 'No':
if not self.doc.supplier_warehouse: if not self.doc.supplier_warehouse:
@ -479,4 +479,4 @@ class DocType(TransactionBase):
# **** Pull details from other charges master (Get Other Charges) **** # **** Pull details from other charges master (Get Other Charges) ****
def get_purchase_tax_details(self): def get_purchase_tax_details(self):
return get_obj('Purchase Common').get_purchase_tax_details(self) self.doclist = get_obj('Purchase Common').get_purchase_tax_details(self)

View File

@ -57,7 +57,7 @@ class DocType :
# Create Item Table # Create Item Table
# ----------------------------- # -----------------------------
def create_item_table(self, det): def create_item_table(self, det):
self.doc.clear_table(self.doclist, 'return_details', 1) self.doclist = self.doc.clear_table(self.doclist, 'return_details', 1)
for i in det: for i in det:
ch = addchild(self.doc, 'return_details', 'Sales and Purchase Return Item', 1, self.doclist) ch = addchild(self.doc, 'return_details', 'Sales and Purchase Return Item', 1, self.doclist)
ch.detail_name = i and i[0] or '' ch.detail_name = i and i[0] or ''
@ -73,5 +73,5 @@ class DocType :
# Clear return table # Clear return table
# -------------------------------- # --------------------------------
def clear_return_table(self): def clear_return_table(self):
self.doc.clear_table(self.doclist, 'return_details', 1) self.doclist = self.doc.clear_table(self.doclist, 'return_details', 1)
self.doc.save() self.doc.save()

View File

@ -240,7 +240,7 @@ class DocType(TransactionBase):
consider_sa_items_as_rm = self.doc.consider_sa_items_as_raw_materials consider_sa_items_as_rm = self.doc.consider_sa_items_as_raw_materials
self.get_raw_materials(bom_no, fg_qty, consider_sa_items_as_rm) self.get_raw_materials(bom_no, fg_qty, consider_sa_items_as_rm)
self.doc.clear_table(self.doclist, 'mtn_details', 1) self.doclist = self.doc.clear_table(self.doclist, 'mtn_details', 1)
sw = (self.doc.process == 'Backflush') and cstr(pro_obj.doc.wip_warehouse) or '' sw = (self.doc.process == 'Backflush') and cstr(pro_obj.doc.wip_warehouse) or ''
tw = (self.doc.process == 'Material Transfer') and cstr(pro_obj.doc.wip_warehouse) or '' tw = (self.doc.process == 'Material Transfer') and cstr(pro_obj.doc.wip_warehouse) or ''

View File

@ -16,7 +16,7 @@
cur_frm.cscript.country = function(doc, cdt, cdn) { cur_frm.cscript.country = function(doc, cdt, cdn) {
var mydoc=doc; var mydoc=doc;
$c('runserverobj', args={'method':'check_state', 'docs':compress_doclist([doc])}, $c('runserverobj', args={'method':'check_state', 'docs':compress_doclist(make_doclist(doc.doctype, doc.name))},
function(r,rt){ function(r,rt){
if(r.message) { if(r.message) {
var doc = locals[mydoc.doctype][mydoc.name]; var doc = locals[mydoc.doctype][mydoc.name];

View File

@ -36,7 +36,7 @@ cur_frm.cscript.render_communication_list = function(doc, dt, dn) {
prepare_data: function(data) { prepare_data: function(data) {
this._super(data); this._super(data);
data.creation = wn.datetime.str_to_user(data.communication_date); this.prepare_when(data, data.creation);
// escape double quote // escape double quote
data.content = cstr(data.subject).replace(/"/gi, '\"') data.content = cstr(data.subject).replace(/"/gi, '\"')
@ -54,7 +54,7 @@ cur_frm.cscript.render_communication_list = function(doc, dt, dn) {
{width: '15%', content: 'name'}, {width: '15%', content: 'name'},
{width: '15%', content: 'category'}, {width: '15%', content: 'category'},
{width: '55%', content: 'content'}, {width: '55%', content: 'content'},
{width: '12%', content:'communication_date', {width: '12%', content:'when',
css: {'text-align': 'right', 'color':'#777'}} css: {'text-align': 'right', 'color':'#777'}}
], ],

View File

@ -13,11 +13,13 @@ wn.doclistviews['Communication'] = wn.views.ListView.extend({
prepare_data: function(data) { prepare_data: function(data) {
this._super(data); this._super(data);
data.creation = wn.datetime.only_date(data.creation); this.prepare_when(data, data.creation);
// escape double quote // escape double quote
data.content = cstr(data.subject).replace(/"/gi, '\"') data.content = cstr(data.subject)
+ " | " + cstr(data.content).replace(/"/gi, '\"'); + " | " + cstr(data.content);
data.content = data.content.replace(/"/gi, '\"')
.replace(/</gi, '&lt;').replace(/>/gi, '&gt;');
if(data.content && data.content.length > 50) { if(data.content && data.content.length > 50) {
data.content = '<span title="'+data.content+'">' + data.content = '<span title="'+data.content+'">' +
@ -26,12 +28,12 @@ wn.doclistviews['Communication'] = wn.views.ListView.extend({
}, },
columns: [ columns: [
{width: '3%', content: 'check'},
{width: '5%', content: 'avatar'}, {width: '5%', content: 'avatar'},
{width: '3%', content: 'docstatus'},
{width: '15%', content: 'name'}, {width: '15%', content: 'name'},
{width: '15%', content: 'category'}, {width: '15%', content: 'category'},
{width: '55%', content: 'content+tags'}, {width: '55%', content: 'content+tags'},
{width: '12%', content:'creation', {width: '12%', content:'when',
css: {'text-align': 'right', 'color':'#777'}} css: {'text-align': 'right', 'color':'#777'}}
], ],
}); });

View File

@ -42,8 +42,8 @@ class DocType(TransactionBase):
# pull sales order details # pull sales order details
#-------------------------- #--------------------------
def pull_sales_order_detail(self): def pull_sales_order_detail(self):
self.doc.clear_table(self.doclist, 'item_maintenance_detail') self.doclist = self.doc.clear_table(self.doclist, 'item_maintenance_detail')
self.doc.clear_table(self.doclist, 'maintenance_schedule_detail') self.doclist = self.doc.clear_table(self.doclist, 'maintenance_schedule_detail')
self.doclist = get_obj('DocType Mapper', 'Sales Order-Maintenance Schedule').dt_map('Sales Order', 'Maintenance Schedule', self.doc.sales_order_no, self.doc, self.doclist, "[['Sales Order', 'Maintenance Schedule'],['Sales Order Item', 'Maintenance Schedule Item']]") self.doclist = get_obj('DocType Mapper', 'Sales Order-Maintenance Schedule').dt_map('Sales Order', 'Maintenance Schedule', self.doc.sales_order_no, self.doc, self.doclist, "[['Sales Order', 'Maintenance Schedule'],['Sales Order Item', 'Maintenance Schedule Item']]")
#pull item details #pull item details
@ -60,7 +60,7 @@ class DocType(TransactionBase):
#------------------------------------- #-------------------------------------
def generate_schedule(self): def generate_schedule(self):
import datetime import datetime
self.doc.clear_table(self.doclist, 'maintenance_schedule_detail') self.doclist = self.doc.clear_table(self.doclist, 'maintenance_schedule_detail')
count = 0 count = 0
sql("delete from `tabMaintenance Schedule Detail` where parent='%s'" %(self.doc.name)) sql("delete from `tabMaintenance Schedule Detail` where parent='%s'" %(self.doc.name))
for d in getlist(self.doclist, 'item_maintenance_detail'): for d in getlist(self.doclist, 'item_maintenance_detail'):

View File

@ -56,7 +56,7 @@ class DocType(TransactionBase):
msgprint("You can not fetch details of both, Sales Order and Customer Issue, in same Maintenance Visit") msgprint("You can not fetch details of both, Sales Order and Customer Issue, in same Maintenance Visit")
raise Exception raise Exception
self.doc.clear_table(self.doclist, 'maintenance_visit_details') self.doclist = self.doc.clear_table(self.doclist, 'maintenance_visit_details')
if self.doc.sales_order_no: if self.doc.sales_order_no:
self.doclist = get_obj('DocType Mapper', 'Sales Order-Maintenance Visit').dt_map('Sales Order', \ self.doclist = get_obj('DocType Mapper', 'Sales Order-Maintenance Visit').dt_map('Sales Order', \

View File

@ -31,8 +31,11 @@ wn.doclistviews['Support Ticket'] = wn.views.ListView.extend({
data.status_html = repl('<span class="label label-%(label_type)s">%(status)s</span>', data); data.status_html = repl('<span class="label label-%(label_type)s">%(status)s</span>', data);
// escape double quotes // escape double quotes
data.description = cstr(data.subject).replace(/"/gi, '\"') data.description = cstr(data.subject)
+ " | " + cstr(data.description).replace(/"/gi, '\"'); + " | " + cstr(data.description);
data.description = data.description.replace(/"/gi, '\"')
.replace(/</gi, '&lt;').replace(/>/gi, '&gt;');
// description // description
if(data.description && data.description.length > 50) { if(data.description && data.description.length > 50) {

View File

@ -99,7 +99,7 @@ $.extend(cur_frm.cscript, {
}, },
send: function(doc, dt, dn) { send: function(doc, dt, dn) {
$c_obj([doc], 'send_response', '', function(r,rt) { $c_obj(make_doclist(doc.doctype, doc.name), 'send_response', '', function(r,rt) {
locals[dt][dn].new_response = ''; locals[dt][dn].new_response = '';
if(!(r.exc || r.server_messages)) { if(!(r.exc || r.server_messages)) {
cur_frm.refresh(); cur_frm.refresh();
@ -124,7 +124,7 @@ $.extend(cur_frm.cscript, {
var answer = confirm("Close Ticket "+doc.name+"?\n\nAllocated To: "+doc.allocated_to+"\n\nSubject: "+doc.subject+""); var answer = confirm("Close Ticket "+doc.name+"?\n\nAllocated To: "+doc.allocated_to+"\n\nSubject: "+doc.subject+"");
if(answer) { if(answer) {
if(doc.name) if(doc.name)
$c_obj([doc],'close_ticket','',function(r,rt) { $c_obj(make_doclist(doc.doctype, doc.name),'close_ticket','',function(r,rt) {
if(!r.exc) { if(!r.exc) {
cur_frm.refresh(); cur_frm.refresh();
} }
@ -138,7 +138,7 @@ $.extend(cur_frm.cscript, {
var answer = confirm("Re-Open Ticket "+doc.name+"?\n\nAllocated To: "+doc.allocated_to+"\n\nSubject: "+doc.subject+""); var answer = confirm("Re-Open Ticket "+doc.name+"?\n\nAllocated To: "+doc.allocated_to+"\n\nSubject: "+doc.subject+"");
if(answer) { if(answer) {
if(doc.name) if(doc.name)
$c_obj([doc],'reopen_ticket','',function(r,rt) { $c_obj(make_doclist(doc.doctype, doc.name),'reopen_ticket','',function(r,rt) {
if(!r.exc) { if(!r.exc) {
cur_frm.refresh(); cur_frm.refresh();
} }

View File

@ -21,7 +21,6 @@ from webnotes.model.doc import Document
from webnotes import session, form, msgprint, errprint from webnotes import session, form, msgprint, errprint
# ----------------------------------------------------------------------------------------- # -----------------------------------------------------------------------------------------
class DocType: class DocType:
def __init__(self, doc, doclist=[]): def __init__(self, doc, doclist=[]):
self.doc = doc self.doc = doc

View File

@ -3,9 +3,9 @@
# These values are common in all dictionaries # These values are common in all dictionaries
{ {
'creation': '2012-03-27 14:36:45', 'creation': '2012-07-02 19:57:47',
'docstatus': 0, 'docstatus': 0,
'modified': '2012-03-27 14:36:45', 'modified': '2012-07-02 20:24:15',
'modified_by': u'Administrator', 'modified_by': u'Administrator',
'owner': u'Administrator' 'owner': u'Administrator'
}, },
@ -24,7 +24,7 @@
'search_fields': u'customer, supplier, sales_partner, country, state', 'search_fields': u'customer, supplier, sales_partner, country, state',
'section_style': u'Simple', 'section_style': u'Simple',
'show_in_menu': 0, 'show_in_menu': 0,
'version': 43 'version': 1
}, },
# These values are common for all DocField # These values are common for all DocField
@ -38,17 +38,12 @@
# These values are common for all DocPerm # These values are common for all DocPerm
{ {
'cancel': 1,
'create': 1,
'doctype': u'DocPerm', 'doctype': u'DocPerm',
'name': '__common__', 'name': '__common__',
'parent': u'Address', 'parent': u'Address',
'parentfield': u'permissions', 'parentfield': u'permissions',
'parenttype': u'DocType', 'parenttype': u'DocType',
'permlevel': 0, 'read': 1
'read': 1,
'role': u'All',
'write': 1
}, },
# DocType, Address # DocType, Address
@ -59,7 +54,116 @@
# DocPerm # DocPerm
{ {
'doctype': u'DocPerm' 'cancel': 1,
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'System Manager',
'write': 1
},
# DocPerm
{
'cancel': 1,
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Sales Master Manager',
'write': 1
},
# DocPerm
{
'cancel': 1,
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Purchase Master Manager',
'write': 1
},
# DocPerm
{
'cancel': 0,
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Maintenance Manager',
'write': 1
},
# DocPerm
{
'cancel': 0,
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Accounts Manager',
'write': 1
},
# DocPerm
{
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Sales Manager',
'write': 1
},
# DocPerm
{
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Purchase Manager',
'write': 1
},
# DocPerm
{
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Sales User',
'write': 1
},
# DocPerm
{
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Purchase User',
'write': 1
},
# DocPerm
{
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Maintenance User',
'write': 1
},
# DocPerm
{
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Accounts User',
'write': 1
},
# DocPerm
{
'cancel': 0,
'create': 0,
'doctype': u'DocPerm',
'permlevel': 1,
'role': u'All',
'write': 0
}, },
# DocField # DocField

View File

@ -0,0 +1,55 @@
wn.doclistviews['Address'] = wn.views.ListView.extend({
init: function(d) {
this._super(d)
this.fields = this.fields.concat([
"`tabAddress`.customer_name",
"`tabAddress`.supplier",
"`tabAddress`.supplier_name",
"`tabAddress`.sales_partner",
"`tabAddress`.city",
"`tabAddress`.country",
"ifnull(`tabAddress`.is_shipping_address, 0) as is_shipping_address",
]);
},
prepare_data: function(data) {
this._super(data);
// prepare address
var address = []
$.each(['city', 'country'], function(i, v) {
if(data[v]) address.push(data[v]);
});
data.address = address.join(", ");
// prepare shipping tag
if(data.is_shipping_address) {
data.shipping = '<span class="label label-info">Shipping</span>';
}
// prepare description
if(data.customer) {
data.description = (data.customer_name || data.customer);
data.contact_type = 'Customer';
} else if (data.supplier) {
data.description = (data.supplier_name || data.supplier);
data.contact_type = 'Supplier';
} else if (data.sales_partner) {
data.description = data.sales_partner;
data.contact_type = 'Sales Partner'
} else {
data.description = '';
data.contact_type = '';
}
},
columns: [
{width: '3%', content: 'check'},
{width: '20%', content: 'name'},
{width: '15%', content: 'contact_type'},
{width: '20%', content: 'description'},
{width: '30%', content: 'address+shipping+tags', css: {'padding': '2px 0px'}},
{width: '12%', content: 'modified', css: {'text-align': 'right', 'color':'#777'}}
]
});

View File

@ -21,7 +21,6 @@ from webnotes.model.doc import Document
from webnotes import session, form, msgprint, errprint from webnotes import session, form, msgprint, errprint
# ----------------------------------------------------------------------------------------- # -----------------------------------------------------------------------------------------
class DocType: class DocType:
def __init__(self, doc, doclist=[]): def __init__(self, doc, doclist=[]):
self.doc = doc self.doc = doc

View File

@ -3,9 +3,9 @@
# These values are common in all dictionaries # These values are common in all dictionaries
{ {
'creation': '2012-03-27 14:36:46', 'creation': '2012-07-02 19:57:48',
'docstatus': 0, 'docstatus': 0,
'modified': '2012-03-27 14:36:46', 'modified': '2012-07-02 20:24:17',
'modified_by': u'Administrator', 'modified_by': u'Administrator',
'owner': u'Administrator' 'owner': u'Administrator'
}, },
@ -26,7 +26,7 @@
'server_code_error': u' ', 'server_code_error': u' ',
'show_in_menu': 0, 'show_in_menu': 0,
'subject': u'%(first_name)s %(last_name)s - Email: %(email_id)s | Contact: %(phone)s | Mobile: %(mobile_no)s', 'subject': u'%(first_name)s %(last_name)s - Email: %(email_id)s | Contact: %(phone)s | Mobile: %(mobile_no)s',
'version': 245 'version': 1
}, },
# These values are common for all DocField # These values are common for all DocField
@ -54,6 +54,16 @@
'name': u'Contact' 'name': u'Contact'
}, },
# DocPerm
{
'cancel': 1,
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'System Manager',
'write': 1
},
# DocPerm # DocPerm
{ {
'amend': 0, 'amend': 0,
@ -66,21 +76,6 @@
'write': 1 'write': 1
}, },
# DocPerm
{
'doctype': u'DocPerm',
'permlevel': 1,
'role': u'All',
'write': 1
},
# DocPerm
{
'doctype': u'DocPerm',
'permlevel': 2,
'role': u'All'
},
# DocPerm # DocPerm
{ {
'cancel': 1, 'cancel': 1,
@ -91,16 +86,6 @@
'write': 1 'write': 1
}, },
# DocPerm
{
'cancel': 1,
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'System Manager',
'write': 1
},
# DocPerm # DocPerm
{ {
'doctype': u'DocPerm', 'doctype': u'DocPerm',
@ -115,6 +100,13 @@
'role': u'Purchase User' 'role': u'Purchase User'
}, },
# DocPerm
{
'doctype': u'DocPerm',
'permlevel': 1,
'role': u'All'
},
# DocField # DocField
{ {
'colour': u'White:FFF', 'colour': u'White:FFF',

View File

@ -0,0 +1,50 @@
wn.doclistviews['Contact'] = wn.views.ListView.extend({
init: function(d) {
this._super(d)
this.fields = this.fields.concat([
"`tabContact`.first_name",
"`tabContact`.last_name",
"`tabContact`.customer",
"`tabContact`.customer_name",
"`tabContact`.supplier",
"`tabContact`.supplier_name",
"`tabContact`.sales_partner",
"`tabContact`.email_id",
]);
},
prepare_data: function(data) {
this._super(data);
// prepare fullname
data.fullname = (data.first_name || '') +
(data.last_name ? ' ' + data.last_name : '');
if(!data.fullname) data.fullname = data.name;
data.fullname = repl("<a href='#!Form/Contact/%(name)s'>%(fullname)s\
</a>", data);
// prepare description
if(data.customer) {
data.description = (data.customer_name || data.customer);
data.contact_type = 'Customer';
} else if (data.supplier) {
data.description = (data.supplier_name || data.supplier);
data.contact_type = 'Supplier';
} else if (data.sales_partner) {
data.description = data.sales_partner;
data.contact_type = 'Sales Partner'
} else {
data.description = '';
data.contact_type = '';
}
},
columns: [
{width: '3%', content: 'check'},
{width: '20%', content: 'fullname'},
{width: '15%', content: 'contact_type'},
{width: '20%', content: 'description+tags'},
{width: '30%', content: 'email_id'},
{width: '12%', content:'modified', css: {'text-align': 'right', 'color':'#777'}}
]
});

View File

@ -82,6 +82,10 @@ def update_security(args=''):
webnotes.conn.set_value('Profile', args['user'], 'login_before', args.get('login_before') or None) webnotes.conn.set_value('Profile', args['user'], 'login_before', args.get('login_before') or None)
webnotes.conn.set_value('Profile', args['user'], 'enabled', int(args.get('enabled',0)) or 0) webnotes.conn.set_value('Profile', args['user'], 'enabled', int(args.get('enabled',0)) or 0)
# logout a disabled user
if not int(args.get('enabled',0) or 0):
webnotes.login_manager.logout(user=args['user'])
if args.get('new_password') and args.get('sys_admin_pwd'): if args.get('new_password') and args.get('sys_admin_pwd'):
from webnotes.utils import cint from webnotes.utils import cint
webnotes.conn.sql("update tabProfile set password=password(%s) where name=%s", webnotes.conn.sql("update tabProfile set password=password(%s) where name=%s",

View File

@ -214,7 +214,7 @@ class TransactionBase:
# Get Sales Person Details of Customer # Get Sales Person Details of Customer
# ------------------------------------ # ------------------------------------
def get_sales_person(self, name): def get_sales_person(self, name):
self.doc.clear_table(self.doclist,'sales_team') self.doclist = self.doc.clear_table(self.doclist,'sales_team')
idx = 0 idx = 0
for d in webnotes.conn.sql("select sales_person, allocated_percentage, allocated_amount, incentives from `tabSales Team` where parent = '%s'" % name): for d in webnotes.conn.sql("select sales_person, allocated_percentage, allocated_amount, incentives from `tabSales Team` where parent = '%s'" % name):
ch = addchild(self.doc, 'sales_team', 'Sales Team', 1, self.doclist) ch = addchild(self.doc, 'sales_team', 'Sales Team', 1, self.doclist)

View File

@ -396,7 +396,7 @@ wn.request.cleanup=function(opts,r){if(opts.btn)$(opts.btn).done_working();if(op
return;} return;}
if(r.server_messages)msgprint(r.server_messages) if(r.server_messages)msgprint(r.server_messages)
if(r.exc){console.log(r.exc);};if(r['403']){wn.container.change_to('403');} if(r.exc){console.log(r.exc);};if(r['403']){wn.container.change_to('403');}
if(r.docs)LocalDB.sync(r.docs);} if(r.docs){LocalDB.sync(r.docs);}}
wn.request.call=function(opts){wn.request.prepare(opts);$.ajax({url:opts.url||wn.request.url,data:opts.args,type:opts.type||'POST',dataType:opts.dataType||'json',success:function(r,xhr){wn.request.cleanup(opts,r);opts.success(r,xhr.responseText);},error:function(xhr,textStatus){wn.request.cleanup(opts,{});show_alert('Unable to complete request: '+textStatus) wn.request.call=function(opts){wn.request.prepare(opts);$.ajax({url:opts.url||wn.request.url,data:opts.args,type:opts.type||'POST',dataType:opts.dataType||'json',success:function(r,xhr){wn.request.cleanup(opts,r);opts.success(r,xhr.responseText);},error:function(xhr,textStatus){wn.request.cleanup(opts,{});show_alert('Unable to complete request: '+textStatus)
if(opts.error)opts.error(xhr)}})} if(opts.error)opts.error(xhr)}})}
wn.call=function(opts){var args=$.extend({},opts.args) wn.call=function(opts){var args=$.extend({},opts.args)
@ -735,19 +735,20 @@ return v;};function LinkField(){}LinkField.prototype=new Field();LinkField.proto
$(me.btn2).css('display','inline-block');else $dh(me.btn2);}} $(me.btn2).css('display','inline-block');else $dh(me.btn2);}}
me.txt.field_object=this;me.input.set_input=function(val){if(val==undefined)val='';me.txt.value=val;} me.txt.field_object=this;me.input.set_input=function(val){if(val==undefined)val='';me.txt.value=val;}
me.get_value=function(){return me.txt.value;} me.get_value=function(){return me.txt.value;}
$(me.txt).autocomplete({source:function(request,response){wn.call({method:'webnotes.widgets.search.search_link',args:{'txt':request.term,'dt':me.df.options,'query':me.get_custom_query()},callback:function(r){response(r.results);},});},select:function(event,ui){me.set_input_value(ui.item.value);}}).data('autocomplete')._renderItem=function(ul,item){return $('<li></li>').data('item.autocomplete',item).append(repl('<a>%(label)s<br><span style="font-size:10px">%(info)s</span></a>',item)).appendTo(ul);};$(this.txt).change(function(){if(!$(this).val()){if(selector&&selector.display) $(me.txt).autocomplete({source:function(request,response){wn.call({method:'webnotes.widgets.search.search_link',args:{'txt':request.term,'dt':me.df.options,'query':me.get_custom_query()},callback:function(r){response(r.results);},});},select:function(event,ui){me.set_input_value(ui.item.value);}}).data('autocomplete')._renderItem=function(ul,item){return $('<li></li>').data('item.autocomplete',item).append(repl('<a>%(label)s<br><span style="font-size:10px">%(info)s</span></a>',item)).appendTo(ul);};$(this.txt).change(function(){var val=$(this).val();me.set_input_value_executed=false;if(!val){if(selector&&selector.display)
return;me.set_input_value('');}})} return;me.set_input_value('');}else{setTimeout(function(){if(!me.set_input_value_executed){me.set_input_value(val);}},100);}})}
LinkField.prototype.get_custom_query=function(){this.set_get_query();if(this.get_query){if(cur_frm) LinkField.prototype.get_custom_query=function(){this.set_get_query();if(this.get_query){if(cur_frm)
var doc=locals[cur_frm.doctype][cur_frm.docname];return this.get_query(doc,this.doctype,this.docname);}} var doc=locals[cur_frm.doctype][cur_frm.docname];return this.get_query(doc,this.doctype,this.docname);}}
LinkField.prototype.setup_buttons=function(){var me=this;me.btn.onclick=function(){selector.set(me,me.df.options,me.df.label);selector.show(me.txt);} LinkField.prototype.setup_buttons=function(){var me=this;me.btn.onclick=function(){selector.set(me,me.df.options,me.df.label);selector.show(me.txt);}
if(me.btn1)me.btn1.onclick=function(){if(me.txt.value&&me.df.options){loaddoc(me.df.options,me.txt.value);}} if(me.btn1)me.btn1.onclick=function(){if(me.txt.value&&me.df.options){loaddoc(me.df.options,me.txt.value);}}
me.can_create=0;if((!me.not_in_form)&&in_list(profile.can_create,me.df.options)){me.can_create=1;me.btn2.onclick=function(){var on_save_callback=function(new_rec){if(new_rec){var d=_f.calling_doc_stack.pop();locals[d[0]][d[1]][me.df.fieldname]=new_rec;me.refresh();if(me.grid)me.grid.refresh();me.run_trigger();}} me.can_create=0;if((!me.not_in_form)&&in_list(profile.can_create,me.df.options)){me.can_create=1;me.btn2.onclick=function(){var on_save_callback=function(new_rec){if(new_rec){var d=_f.calling_doc_stack.pop();locals[d[0]][d[1]][me.df.fieldname]=new_rec;me.refresh();if(me.grid)me.grid.refresh();me.run_trigger();}}
_f.calling_doc_stack.push([me.doctype,me.docname]);new_doc(me.df.options,me.on_new,1,on_save_callback,me.doctype,me.docname,me.frm.not_in_container);}}else{$dh(me.btn2);$y($td(me.tab,0,2),{width:'0px'});}} _f.calling_doc_stack.push([me.doctype,me.docname]);new_doc(me.df.options,me.on_new,1,on_save_callback,me.doctype,me.docname,me.frm.not_in_container);}}else{$dh(me.btn2);$y($td(me.tab,0,2),{width:'0px'});}}
LinkField.prototype.set_input_value=function(val){var me=this;var from_selector=false;if(selector&&selector.display)from_selector=true;me.refresh_label_icon();if(me.not_in_form){$(this.txt).val(val);return;} LinkField.prototype.set_input_value=function(val){var me=this;me.set_input_value_executed=true;var from_selector=false;if(selector&&selector.display)from_selector=true;me.refresh_label_icon();if(me.not_in_form){$(this.txt).val(val);return;}
if(cur_frm){if(val==locals[me.doctype][me.docname][me.df.fieldname]){me.run_trigger();return;}} if(cur_frm){if(val==locals[me.doctype][me.docname][me.df.fieldname]){me.run_trigger();return;}}
me.set(val);if(_f.cur_grid_cell) me.set(val);if(_f.cur_grid_cell)
_f.cur_grid_cell.grid.cell_deselect();if(locals[me.doctype][me.docname][me.df.fieldname]&&!val){me.run_trigger();return;} _f.cur_grid_cell.grid.cell_deselect();if(locals[me.doctype][me.docname][me.df.fieldname]&&!val){me.run_trigger();return;}
var fetch='';if(cur_frm.fetch_dict[me.df.fieldname]) me.validate_link(val,from_selector);}
LinkField.prototype.validate_link=function(val,from_selector){var me=this;var fetch='';if(cur_frm.fetch_dict[me.df.fieldname])
fetch=cur_frm.fetch_dict[me.df.fieldname].columns.join(', ');$c('webnotes.widgets.form.utils.validate_link',{'value':val,'options':me.df.options,'fetch':fetch},function(r,rt){if(r.message=='Ok'){if($(me.txt).val()!=val){if((me.grid&&!from_selector)||(!me.grid)){$(me.txt).val(val);}} fetch=cur_frm.fetch_dict[me.df.fieldname].columns.join(', ');$c('webnotes.widgets.form.utils.validate_link',{'value':val,'options':me.df.options,'fetch':fetch},function(r,rt){if(r.message=='Ok'){if($(me.txt).val()!=val){if((me.grid&&!from_selector)||(!me.grid)){$(me.txt).val(val);}}
if(r.fetch_values) if(r.fetch_values)
me.set_fetch_values(r.fetch_values);me.run_trigger();}else{var astr='';if(in_list(profile.can_create,me.df.options))astr=repl('<br><br><span class="link_type" onclick="newdoc(\'%(dt)s\')">Click here</span> to create a new %(dtl)s',{dt:me.df.options,dtl:get_doctype_label(me.df.options)}) me.set_fetch_values(r.fetch_values);me.run_trigger();}else{var astr='';if(in_list(profile.can_create,me.df.options))astr=repl('<br><br><span class="link_type" onclick="newdoc(\'%(dt)s\')">Click here</span> to create a new %(dtl)s',{dt:me.df.options,dtl:get_doctype_label(me.df.options)})
@ -967,13 +968,13 @@ wn.views.DocListView=wn.ui.Listing.extend({init:function(doctype){this.doctype=d
<div style="clear: both"></div>\ <div style="clear: both"></div>\
</div>');this.appframe=new wn.ui.AppFrame(this.$page.find('.appframe-area'));wn.views.breadcrumbs($('<span class="breadcrumb-area">').appendTo(this.appframe.$titlebar),locals.DocType[this.doctype].module,this.doctype);},setup:function(){var me=this;me.can_delete=wn.model.can_delete(me.doctype);me.meta=locals.DocType[me.doctype];me.$page.find('.wnlist-area').empty(),me.setup_docstatus_filter();me.setup_listview();me.init_list();me.init_stats();me.make_report_button();me.add_delete_option();},make_report_button:function(){var me=this;if(wn.boot.profile.can_get_report.indexOf(this.doctype)!=-1){this.appframe.add_button('Build Report',function(){wn.set_route('Report2',me.doctype);},'icon-th')}},setup_docstatus_filter:function(){var me=this;this.can_submit=$.map(locals.DocPerm,function(d){if(d.parent==me.meta.name&&d.submit)return 1 </div>');this.appframe=new wn.ui.AppFrame(this.$page.find('.appframe-area'));wn.views.breadcrumbs($('<span class="breadcrumb-area">').appendTo(this.appframe.$titlebar),locals.DocType[this.doctype].module,this.doctype);},setup:function(){var me=this;me.can_delete=wn.model.can_delete(me.doctype);me.meta=locals.DocType[me.doctype];me.$page.find('.wnlist-area').empty(),me.setup_docstatus_filter();me.setup_listview();me.init_list();me.init_stats();me.make_report_button();me.add_delete_option();},make_report_button:function(){var me=this;if(wn.boot.profile.can_get_report.indexOf(this.doctype)!=-1){this.appframe.add_button('Build Report',function(){wn.set_route('Report2',me.doctype);},'icon-th')}},setup_docstatus_filter:function(){var me=this;this.can_submit=$.map(locals.DocPerm,function(d){if(d.parent==me.meta.name&&d.submit)return 1
else return null;}).length;if(this.can_submit){this.$page.find('.show-docstatus').removeClass('hide');this.$page.find('.show-docstatus input').click(function(){me.run();})}},setup_listview:function(){if(this.meta.__listjs){eval(this.meta.__listjs);this.listview=new wn.doclistviews[this.doctype](this);}else{this.listview=new wn.views.ListView(this);} else return null;}).length;if(this.can_submit){this.$page.find('.show-docstatus').removeClass('hide');this.$page.find('.show-docstatus input').click(function(){me.run();})}},setup_listview:function(){if(this.meta.__listjs){eval(this.meta.__listjs);this.listview=new wn.doclistviews[this.doctype](this);}else{this.listview=new wn.views.ListView(this);}
this.listview.parent=this;this.wrapper=this.$page.find('.wnlist-area');this.page_length=20;this.allow_delete=true;},init_list:function(auto_run){this.make({method:'webnotes.widgets.doclistview.get',get_args:this.get_args,parent:this.wrapper,start:0,page_length:this.page_length,show_filters:true,show_grid:true,new_doctype:this.doctype,allow_delete:this.allow_delete,no_result_message:this.make_no_result(),columns:this.listview.fields});if((auto_run!==false)&&(auto_run!==0))this.run();},make_no_result:function(){return repl('<div class="well"><p>No %(doctype_label)s found</p>\ this.listview.parent=this;this.wrapper=this.$page.find('.wnlist-area');this.page_length=20;this.allow_delete=true;},init_list:function(auto_run){var me=this;this.make({method:'webnotes.widgets.doclistview.get',get_args:this.get_args,parent:this.wrapper,start:0,page_length:this.page_length,show_filters:true,show_grid:true,new_doctype:this.doctype,allow_delete:this.allow_delete,no_result_message:this.make_no_result(),columns:this.listview.fields});$(this.wrapper).find('button[list_view_doc="'+me.doctype+'"]').click(function(){me.make_new_doc(me.doctype);});if((auto_run!==false)&&(auto_run!==0))this.run();},make_no_result:function(){var no_result_message=repl('<div class="well">\
<p>No %(doctype_label)s found</p>\
%(description)s\ %(description)s\
<hr>\ <hr>\
<p><button class="btn btn-info btn-small"\ <p><button class="btn btn-info btn-small" list_view_doc="%(doctype)s">\
onclick="newdoc(\'%(doctype)s\');"\ Make a new %(doctype_label)s</button>\
>Make a new %(doctype_label)s</button>\ </p></div>',{doctype_label:get_doctype_label(this.doctype),doctype:this.doctype,description:wn.markdown(locals.DocType[this.doctype].description||''),});return no_result_message;},render_row:function(row,data){data.doctype=this.doctype;this.listview.render(row,data,this);},get_query_fields:function(){return this.listview.fields;},get_args:function(){return{doctype:this.doctype,fields:this.get_query_fields(),filters:this.filter_list.get_filters(),docstatus:this.can_submit?$.map(this.$page.find('.show-docstatus :checked'),function(inp){return $(inp).attr('data-docstatus')}):[],order_by:this.listview.order_by||undefined,}},add_delete_option:function(){var me=this;if(this.can_delete){this.add_button('Delete',function(){me.delete_items();},'icon-remove')}},delete_items:function(){var me=this;var dl=$.map(me.$page.find('.list-delete:checked'),function(e){return $(e).data('name');});if(!dl.length)
</p></div>',{doctype_label:get_doctype_label(this.doctype),doctype:this.doctype,description:wn.markdown(locals.DocType[this.doctype].description||'')});},render_row:function(row,data){data.doctype=this.doctype;this.listview.render(row,data,this);},get_query_fields:function(){return this.listview.fields;},get_args:function(){return{doctype:this.doctype,fields:this.get_query_fields(),filters:this.filter_list.get_filters(),docstatus:this.can_submit?$.map(this.$page.find('.show-docstatus :checked'),function(inp){return $(inp).attr('data-docstatus')}):[],order_by:this.listview.order_by||undefined,}},add_delete_option:function(){var me=this;if(this.can_delete){this.add_button('Delete',function(){me.delete_items();},'icon-remove')}},delete_items:function(){var me=this;var dl=$.map(me.$page.find('.list-delete:checked'),function(e){return $(e).data('name');});if(!dl.length)
return;if(!confirm('This is PERMANENT action and you cannot undo. Continue?')){return;} return;if(!confirm('This is PERMANENT action and you cannot undo. Continue?')){return;}
me.set_working(true);wn.call({method:'webnotes.widgets.doclistview.delete_items',args:{items:dl,doctype:me.doctype},callback:function(){me.set_working(false);me.refresh();}})},init_stats:function(){var me=this me.set_working(true);wn.call({method:'webnotes.widgets.doclistview.delete_items',args:{items:dl,doctype:me.doctype},callback:function(){me.set_working(false);me.refresh();}})},init_stats:function(){var me=this
wn.call({method:'webnotes.widgets.doclistview.get_stats',args:{stats:me.listview.stats,doctype:me.doctype},callback:function(r){$.each(me.listview.stats,function(i,v){me.render_stat(v,r.message[v]);});if(me.listview.stats.length){$('<button class="btn btn-small"><i class="refresh"></i> Refresh</button>').click(function(){me.reload_stats();}).appendTo($('<div class="stat-wrapper">').appendTo(me.$page.find('.layout-side-section')))}}});},render_stat:function(field,stat){var me=this;if(!stat||!stat.length){if(field=='_user_tags'){this.$page.find('.layout-side-section').append('<div class="stat-wrapper"><h4>Tags</h4>\ wn.call({method:'webnotes.widgets.doclistview.get_stats',args:{stats:me.listview.stats,doctype:me.doctype},callback:function(r){$.each(me.listview.stats,function(i,v){me.render_stat(v,r.message[v]);});if(me.listview.stats.length){$('<button class="btn btn-small"><i class="refresh"></i> Refresh</button>').click(function(){me.reload_stats();}).appendTo($('<div class="stat-wrapper">').appendTo(me.$page.find('.layout-side-section')))}}});},render_stat:function(field,stat){var me=this;if(!stat||!stat.length){if(field=='_user_tags'){this.$page.find('.layout-side-section').append('<div class="stat-wrapper"><h4>Tags</h4>\
@ -1014,11 +1015,10 @@ $(parent).append(repl('<span class="bar-outer" style="width: 30px; float: right"
else if(opts.type=='link'&&opts.doctype){$(parent).append(repl('<a href="#!Form/'+opts.doctype+'/' else if(opts.type=='link'&&opts.doctype){$(parent).append(repl('<a href="#!Form/'+opts.doctype+'/'
+data[opts.content]+'">'+data[opts.content]+'</a>',data));} +data[opts.content]+'">'+data[opts.content]+'</a>',data));}
else if(opts.template){$(parent).append(repl(opts.template,data));} else if(opts.template){$(parent).append(repl(opts.template,data));}
else if(data[opts.content]){$(parent).append(' '+data[opts.content]);}},render:function(row,data){var me=this;this.prepare_data(data);rowhtml='';$.each(this.columns,function(i,v){rowhtml+=repl('<td style="width: %(width)s"></td>',v);});var tr=$(row).html('<table><tbody><tr>'+rowhtml+'</tr></tbody></table>').find('tr').get(0);$.each(this.columns,function(i,v){me.render_column(data,tr.cells[i],v);});},prepare_data:function(data){data.fullname=wn.user_info(data.owner).fullname;data.avatar=wn.user_info(data.owner).image;data.when=dateutil.str_to_user(data.modified).split(' ')[0];var diff=dateutil.get_diff(dateutil.get_today(),data.modified.split(' ')[0]);if(diff==0){data.when=dateutil.comment_when(data.modified);} else if(data[opts.content]){$(parent).append(' '+data[opts.content]);}},render:function(row,data){var me=this;this.prepare_data(data);rowhtml='';$.each(this.columns,function(i,v){rowhtml+=repl('<td style="width: %(width)s"></td>',v);});var tr=$(row).html('<table><tbody><tr>'+rowhtml+'</tr></tbody></table>').find('tr').get(0);$.each(this.columns,function(i,v){me.render_column(data,tr.cells[i],v);});},prepare_data:function(data){data.fullname=wn.user_info(data.owner).fullname;data.avatar=wn.user_info(data.owner).image;this.prepare_when(data,data.modified);if(data.docstatus==0||data.docstatus==null){data.docstatus_icon='icon-pencil';data.docstatus_title='Editable';}else if(data.docstatus==1){data.docstatus_icon='icon-lock';data.docstatus_title='Submitted';}else if(data.docstatus==2){data.docstatus_icon='icon-remove';data.docstatus_title='Cancelled';}
for(key in data){if(data[key]==null){data[key]='';}}},prepare_when:function(data,date_str){if(!date_str)date_str=data.modified;data.when=dateutil.str_to_user(date_str).split(' ')[0];var diff=dateutil.get_diff(dateutil.get_today(),date_str.split(' ')[0]);if(diff==0){data.when=dateutil.comment_when(date_str);}
if(diff==1){data.when='Yesterday'} if(diff==1){data.when='Yesterday'}
if(diff==2){data.when='2 days ago'} if(diff==2){data.when='2 days ago'}},add_user_tags:function(parent,data){var me=this;if(data._user_tags){if($(parent).html().length>0){$(parent).append('<br />');}
if(data.docstatus==0||data.docstatus==null){data.docstatus_icon='icon-pencil';data.docstatus_title='Editable';}else if(data.docstatus==1){data.docstatus_icon='icon-lock';data.docstatus_title='Submitted';}else if(data.docstatus==2){data.docstatus_icon='icon-remove';data.docstatus_title='Cancelled';}
for(key in data){if(data[key]==null){data[key]='';}}},add_user_tags:function(parent,data){var me=this;if(data._user_tags){if($(parent).html().length>0){$(parent).append('<br />');}
$.each(data._user_tags.split(','),function(i,t){if(t){$('<span class="label label-info" style="cursor: pointer; line-height: 200%">' $.each(data._user_tags.split(','),function(i,t){if(t){$('<span class="label label-info" style="cursor: pointer; line-height: 200%">'
+strip(t)+'</span>').click(function(){me.doclistview.set_filter('_user_tags',$(this).text())}).appendTo(parent);}});}},show_hide_check_column:function(){if(!this.doclistview.can_delete){this.columns=$.map(this.columns,function(v,i){if(v.content!='check')return v});}}});wn.provide('wn.views.RecordListView');wn.views.RecordListView=wn.views.DocListView.extend({init:function(doctype,wrapper,ListView){this.doctype=doctype;this.wrapper=wrapper;this.listview=new ListView(this);this.listview.parent=this;this.setup();},setup:function(){var me=this;me.page_length=10;$(me.wrapper).empty();me.init_list();},get_args:function(){var args=this._super();$.each((this.default_filters||[]),function(i,f){args.filters.push(f);});args.docstatus=args.docstatus.concat((this.default_docstatus||[]));return args;},}); +strip(t)+'</span>').click(function(){me.doclistview.set_filter('_user_tags',$(this).text())}).appendTo(parent);}});}},show_hide_check_column:function(){if(!this.doclistview.can_delete){this.columns=$.map(this.columns,function(v,i){if(v.content!='check')return v});}}});wn.provide('wn.views.RecordListView');wn.views.RecordListView=wn.views.DocListView.extend({init:function(doctype,wrapper,ListView){this.doctype=doctype;this.wrapper=wrapper;this.listview=new ListView(this);this.listview.parent=this;this.setup();},setup:function(){var me=this;me.page_length=10;$(me.wrapper).empty();me.init_list();},get_args:function(){var args=this._super();$.each((this.default_filters||[]),function(i,f){args.filters.push(f);});args.docstatus=args.docstatus.concat((this.default_docstatus||[]));return args;},});
/* /*
@ -1032,7 +1032,7 @@ wn.container.change_to('Form - '+dt);wn.views.formview[dt].frm.refresh(dn);});})
* lib/js/wn/views/reportview.js * lib/js/wn/views/reportview.js
*/ */
wn.views.reportview={show:function(dt,rep_name){wn.require('js/report-legacy.js');dt=get_label_doctype(dt);if(!_r.rb_con){_r.rb_con=new _r.ReportContainer();} wn.views.reportview={show:function(dt,rep_name){wn.require('js/report-legacy.js');dt=get_label_doctype(dt);if(!_r.rb_con){_r.rb_con=new _r.ReportContainer();}
_r.rb_con.set_dt(dt,function(rb){if(rep_name){var t=rb.current_loaded;var route_changed=(rb.current_route!=wn.get_route_str()) _r.rb_con.set_dt(dt,function(rb){if(rep_name){var route_changed=(rb.current_route!=wn.get_route_str())
rb.load_criteria(rep_name);if(rb.dt&&route_changed){rb.dt.run();}} rb.load_criteria(rep_name);if(rb.dt&&route_changed){rb.dt.run();}}
if(!rb.forbidden){wn.container.change_to('Report Builder');}});}} if(!rb.forbidden){wn.container.change_to('Report Builder');}});}}
wn.views.reportview2={show:function(dt){var page_name=wn.get_route_str();if(wn.pages[page_name]){wn.container.change_to(wn.pages[page_name]);}else{var route=wn.get_route();if(route[1]){new wn.views.ReportViewPage(route[1],route[2]);}else{wn.set_route('404');}}}} wn.views.reportview2={show:function(dt){var page_name=wn.get_route_str();if(wn.pages[page_name]){wn.container.change_to(wn.pages[page_name]);}else{var route=wn.get_route();if(route[1]){new wn.views.ReportViewPage(route[1],route[2]);}else{wn.set_route('404');}}}}
@ -1313,8 +1313,10 @@ LocalDB.add=function(dt,dn){if(!locals[dt])locals[dt]={};if(locals[dt][dn])delet
LocalDB.delete_doc=function(dt,dn){var doc=get_local(dt,dn);for(var ndt in locals){if(locals[ndt]){for(var ndn in locals[ndt]){var doc=locals[ndt][ndn];if(doc&&doc.parenttype==dt&&(doc.parent==dn||doc.__oldparent==dn)){delete locals[ndt][ndn];}}}} LocalDB.delete_doc=function(dt,dn){var doc=get_local(dt,dn);for(var ndt in locals){if(locals[ndt]){for(var ndn in locals[ndt]){var doc=locals[ndt][ndn];if(doc&&doc.parenttype==dt&&(doc.parent==dn||doc.__oldparent==dn)){delete locals[ndt][ndn];}}}}
delete locals[dt][dn];} delete locals[dt][dn];}
function get_local(dt,dn){return locals[dt]?locals[dt][dn]:null;} function get_local(dt,dn){return locals[dt]?locals[dt][dn]:null;}
LocalDB.sync=function(list){if(list._kl)list=expand_doclist(list);for(var i=0;i<list.length;i++){var d=list[i];if(!d.name) LocalDB.sync=function(list){if(list._kl)list=expand_doclist(list);if(list){LocalDB.clear_locals(list[0].doctype,list[0].name);}
for(var i=0;i<list.length;i++){var d=list[i];if(!d.name)
d.name=LocalDB.get_localname(d.doctype);LocalDB.add(d.doctype,d.name);locals[d.doctype][d.name]=d;if(d.doctype=='DocField')wn.meta.add_field(d);if(d.localname){wn.model.new_names[d.localname]=d.name;$(document).trigger('rename',[d.doctype,d.localname,d.name]);delete locals[d.doctype][d.localname];}}} d.name=LocalDB.get_localname(d.doctype);LocalDB.add(d.doctype,d.name);locals[d.doctype][d.name]=d;if(d.doctype=='DocField')wn.meta.add_field(d);if(d.localname){wn.model.new_names[d.localname]=d.name;$(document).trigger('rename',[d.doctype,d.localname,d.name]);delete locals[d.doctype][d.localname];}}}
LocalDB.clear_locals=function(dt,dn){var doclist=make_doclist(dt,dn,1);$.each(doclist,function(i,v){v&&delete locals[v.doctype][v.name];});}
local_name_idx={};LocalDB.get_localname=function(doctype){if(!local_name_idx[doctype])local_name_idx[doctype]=1;var n='New '+get_doctype_label(doctype)+' '+local_name_idx[doctype];local_name_idx[doctype]++;return n;} local_name_idx={};LocalDB.get_localname=function(doctype){if(!local_name_idx[doctype])local_name_idx[doctype]=1;var n='New '+get_doctype_label(doctype)+' '+local_name_idx[doctype];local_name_idx[doctype]++;return n;}
LocalDB.set_default_values=function(doc){var doctype=doc.doctype;var docfields=wn.meta.docfield_list[doctype];if(!docfields){return;} LocalDB.set_default_values=function(doc){var doctype=doc.doctype;var docfields=wn.meta.docfield_list[doctype];if(!docfields){return;}
var fields_to_refresh=[];for(var fid=0;fid<docfields.length;fid++){var f=docfields[fid];if(!in_list(no_value_fields,f.fieldtype)&&doc[f.fieldname]==null){var v=LocalDB.get_default_value(f.fieldname,f.fieldtype,f['default']);if(v){doc[f.fieldname]=v;fields_to_refresh.push(f.fieldname);}}} var fields_to_refresh=[];for(var fid=0;fid<docfields.length;fid++){var f=docfields[fid];if(!in_list(no_value_fields,f.fieldtype)&&doc[f.fieldname]==null){var v=LocalDB.get_default_value(f.fieldname,f.fieldtype,f['default']);if(v){doc[f.fieldname]=v;fields_to_refresh.push(f.fieldname);}}}
@ -1344,7 +1346,8 @@ return sys_defaults[fn];}
LocalDB.add_child=function(doc,childtype,parentfield){var n=LocalDB.create(childtype);var d=locals[childtype][n];d.parent=doc.name;d.parentfield=parentfield;d.parenttype=doc.doctype;return d;} LocalDB.add_child=function(doc,childtype,parentfield){var n=LocalDB.create(childtype);var d=locals[childtype][n];d.parent=doc.name;d.parentfield=parentfield;d.parenttype=doc.doctype;return d;}
LocalDB.no_copy_list=['amended_from','amendment_date','cancel_reason'];LocalDB.copy=function(dt,dn,from_amend){var newdoc=LocalDB.create(dt);for(var key in locals[dt][dn]){var df=get_field(dt,key);if(key!=='name'&&key.substr(0,2)!='__'&&!(df&&((!from_amend&&cint(df.no_copy)==1)||in_list(LocalDB.no_copy_list,df.fieldname)))){locals[dt][newdoc][key]=locals[dt][dn][key];}} LocalDB.no_copy_list=['amended_from','amendment_date','cancel_reason'];LocalDB.copy=function(dt,dn,from_amend){var newdoc=LocalDB.create(dt);for(var key in locals[dt][dn]){var df=get_field(dt,key);if(key!=='name'&&key.substr(0,2)!='__'&&!(df&&((!from_amend&&cint(df.no_copy)==1)||in_list(LocalDB.no_copy_list,df.fieldname)))){locals[dt][newdoc][key]=locals[dt][dn][key];}}
return locals[dt][newdoc];} return locals[dt][newdoc];}
function make_doclist(dt,dn,deleted){var dl=[];dl[0]=locals[dt][dn];for(var ndt in locals){if(locals[ndt]){for(var ndn in locals[ndt]){var doc=locals[ndt][ndn];if(doc&&doc.parenttype==dt&&(doc.parent==dn||(deleted&&doc.__oldparent==dn))){dl[dl.length]=doc;}}}} function make_doclist(dt,dn,deleted){if(!locals[dt]){return[];}
var dl=[];dl[0]=locals[dt][dn];for(var ndt in locals){if(locals[ndt]){for(var ndn in locals[ndt]){var doc=locals[ndt][ndn];if(doc&&doc.parenttype==dt&&(doc.parent==dn||(deleted&&doc.__oldparent==dn))){dl[dl.length]=doc;}}}}
return dl;} return dl;}
var Meta={};var local_dt={};Meta.make_local_dt=function(dt,dn){var dl=make_doclist('DocType',dt);if(!local_dt[dt])local_dt[dt]={};if(!local_dt[dt][dn])local_dt[dt][dn]={};for(var i=0;i<dl.length;i++){var d=dl[i];if(d.doctype=='DocField'){var key=d.fieldname?d.fieldname:d.label;local_dt[dt][dn][key]=copy_dict(d);}}} var Meta={};var local_dt={};Meta.make_local_dt=function(dt,dn){var dl=make_doclist('DocType',dt);if(!local_dt[dt])local_dt[dt]={};if(!local_dt[dt][dn])local_dt[dt][dn]={};for(var i=0;i<dl.length;i++){var d=dl[i];if(d.doctype=='DocField'){var key=d.fieldname?d.fieldname:d.label;local_dt[dt][dn][key]=copy_dict(d);}}}
Meta.get_field=function(dt,fn,dn){if(dn&&local_dt[dt]&&local_dt[dt][dn]){return local_dt[dt][dn][fn];}else{if(wn.meta.docfield_map[dt])var d=wn.meta.docfield_map[dt][fn];if(d)return d;} Meta.get_field=function(dt,fn,dn){if(dn&&local_dt[dt]&&local_dt[dt][dn]){return local_dt[dt][dn][fn];}else{if(wn.meta.docfield_map[dt])var d=wn.meta.docfield_map[dt][fn];if(d)return d;}
@ -1559,19 +1562,20 @@ return v;};function LinkField(){}LinkField.prototype=new Field();LinkField.proto
$(me.btn2).css('display','inline-block');else $dh(me.btn2);}} $(me.btn2).css('display','inline-block');else $dh(me.btn2);}}
me.txt.field_object=this;me.input.set_input=function(val){if(val==undefined)val='';me.txt.value=val;} me.txt.field_object=this;me.input.set_input=function(val){if(val==undefined)val='';me.txt.value=val;}
me.get_value=function(){return me.txt.value;} me.get_value=function(){return me.txt.value;}
$(me.txt).autocomplete({source:function(request,response){wn.call({method:'webnotes.widgets.search.search_link',args:{'txt':request.term,'dt':me.df.options,'query':me.get_custom_query()},callback:function(r){response(r.results);},});},select:function(event,ui){me.set_input_value(ui.item.value);}}).data('autocomplete')._renderItem=function(ul,item){return $('<li></li>').data('item.autocomplete',item).append(repl('<a>%(label)s<br><span style="font-size:10px">%(info)s</span></a>',item)).appendTo(ul);};$(this.txt).change(function(){if(!$(this).val()){if(selector&&selector.display) $(me.txt).autocomplete({source:function(request,response){wn.call({method:'webnotes.widgets.search.search_link',args:{'txt':request.term,'dt':me.df.options,'query':me.get_custom_query()},callback:function(r){response(r.results);},});},select:function(event,ui){me.set_input_value(ui.item.value);}}).data('autocomplete')._renderItem=function(ul,item){return $('<li></li>').data('item.autocomplete',item).append(repl('<a>%(label)s<br><span style="font-size:10px">%(info)s</span></a>',item)).appendTo(ul);};$(this.txt).change(function(){var val=$(this).val();me.set_input_value_executed=false;if(!val){if(selector&&selector.display)
return;me.set_input_value('');}})} return;me.set_input_value('');}else{setTimeout(function(){if(!me.set_input_value_executed){me.set_input_value(val);}},100);}})}
LinkField.prototype.get_custom_query=function(){this.set_get_query();if(this.get_query){if(cur_frm) LinkField.prototype.get_custom_query=function(){this.set_get_query();if(this.get_query){if(cur_frm)
var doc=locals[cur_frm.doctype][cur_frm.docname];return this.get_query(doc,this.doctype,this.docname);}} var doc=locals[cur_frm.doctype][cur_frm.docname];return this.get_query(doc,this.doctype,this.docname);}}
LinkField.prototype.setup_buttons=function(){var me=this;me.btn.onclick=function(){selector.set(me,me.df.options,me.df.label);selector.show(me.txt);} LinkField.prototype.setup_buttons=function(){var me=this;me.btn.onclick=function(){selector.set(me,me.df.options,me.df.label);selector.show(me.txt);}
if(me.btn1)me.btn1.onclick=function(){if(me.txt.value&&me.df.options){loaddoc(me.df.options,me.txt.value);}} if(me.btn1)me.btn1.onclick=function(){if(me.txt.value&&me.df.options){loaddoc(me.df.options,me.txt.value);}}
me.can_create=0;if((!me.not_in_form)&&in_list(profile.can_create,me.df.options)){me.can_create=1;me.btn2.onclick=function(){var on_save_callback=function(new_rec){if(new_rec){var d=_f.calling_doc_stack.pop();locals[d[0]][d[1]][me.df.fieldname]=new_rec;me.refresh();if(me.grid)me.grid.refresh();me.run_trigger();}} me.can_create=0;if((!me.not_in_form)&&in_list(profile.can_create,me.df.options)){me.can_create=1;me.btn2.onclick=function(){var on_save_callback=function(new_rec){if(new_rec){var d=_f.calling_doc_stack.pop();locals[d[0]][d[1]][me.df.fieldname]=new_rec;me.refresh();if(me.grid)me.grid.refresh();me.run_trigger();}}
_f.calling_doc_stack.push([me.doctype,me.docname]);new_doc(me.df.options,me.on_new,1,on_save_callback,me.doctype,me.docname,me.frm.not_in_container);}}else{$dh(me.btn2);$y($td(me.tab,0,2),{width:'0px'});}} _f.calling_doc_stack.push([me.doctype,me.docname]);new_doc(me.df.options,me.on_new,1,on_save_callback,me.doctype,me.docname,me.frm.not_in_container);}}else{$dh(me.btn2);$y($td(me.tab,0,2),{width:'0px'});}}
LinkField.prototype.set_input_value=function(val){var me=this;var from_selector=false;if(selector&&selector.display)from_selector=true;me.refresh_label_icon();if(me.not_in_form){$(this.txt).val(val);return;} LinkField.prototype.set_input_value=function(val){var me=this;me.set_input_value_executed=true;var from_selector=false;if(selector&&selector.display)from_selector=true;me.refresh_label_icon();if(me.not_in_form){$(this.txt).val(val);return;}
if(cur_frm){if(val==locals[me.doctype][me.docname][me.df.fieldname]){me.run_trigger();return;}} if(cur_frm){if(val==locals[me.doctype][me.docname][me.df.fieldname]){me.run_trigger();return;}}
me.set(val);if(_f.cur_grid_cell) me.set(val);if(_f.cur_grid_cell)
_f.cur_grid_cell.grid.cell_deselect();if(locals[me.doctype][me.docname][me.df.fieldname]&&!val){me.run_trigger();return;} _f.cur_grid_cell.grid.cell_deselect();if(locals[me.doctype][me.docname][me.df.fieldname]&&!val){me.run_trigger();return;}
var fetch='';if(cur_frm.fetch_dict[me.df.fieldname]) me.validate_link(val,from_selector);}
LinkField.prototype.validate_link=function(val,from_selector){var me=this;var fetch='';if(cur_frm.fetch_dict[me.df.fieldname])
fetch=cur_frm.fetch_dict[me.df.fieldname].columns.join(', ');$c('webnotes.widgets.form.utils.validate_link',{'value':val,'options':me.df.options,'fetch':fetch},function(r,rt){if(r.message=='Ok'){if($(me.txt).val()!=val){if((me.grid&&!from_selector)||(!me.grid)){$(me.txt).val(val);}} fetch=cur_frm.fetch_dict[me.df.fieldname].columns.join(', ');$c('webnotes.widgets.form.utils.validate_link',{'value':val,'options':me.df.options,'fetch':fetch},function(r,rt){if(r.message=='Ok'){if($(me.txt).val()!=val){if((me.grid&&!from_selector)||(!me.grid)){$(me.txt).val(val);}}
if(r.fetch_values) if(r.fetch_values)
me.set_fetch_values(r.fetch_values);me.run_trigger();}else{var astr='';if(in_list(profile.can_create,me.df.options))astr=repl('<br><br><span class="link_type" onclick="newdoc(\'%(dt)s\')">Click here</span> to create a new %(dtl)s',{dt:me.df.options,dtl:get_doctype_label(me.df.options)}) me.set_fetch_values(r.fetch_values);me.run_trigger();}else{var astr='';if(in_list(profile.can_create,me.df.options))astr=repl('<br><br><span class="link_type" onclick="newdoc(\'%(dt)s\')">Click here</span> to create a new %(dtl)s',{dt:me.df.options,dtl:get_doctype_label(me.df.options)})
@ -1831,7 +1835,7 @@ _f.Frm.prototype.savedoc=function(save_action,onsave,onerr){this.error_in_sectio
_f.Frm.prototype.saveupdate=function(){this.save('Update');} _f.Frm.prototype.saveupdate=function(){this.save('Update');}
_f.Frm.prototype.savesubmit=function(){var answer=confirm("Permanently Submit "+this.docname+"?");var me=this;if(answer){this.save('Submit',function(r){if(!r.exc&&me.cscript.on_submit){me.runclientscript('on_submit',me.doctype,me.docname);}});}} _f.Frm.prototype.savesubmit=function(){var answer=confirm("Permanently Submit "+this.docname+"?");var me=this;if(answer){this.save('Submit',function(r){if(!r.exc&&me.cscript.on_submit){me.runclientscript('on_submit',me.doctype,me.docname);}});}}
_f.Frm.prototype.savecancel=function(){var answer=confirm("Permanently Cancel "+this.docname+"?");if(answer)this.save('Cancel');} _f.Frm.prototype.savecancel=function(){var answer=confirm("Permanently Cancel "+this.docname+"?");if(answer)this.save('Cancel');}
_f.Frm.prototype.savetrash=function(){var me=this;var answer=confirm("Permanently Delete "+this.docname+"? This action cannot be reversed");if(answer){$c('webnotes.model.delete_doc',{dt:this.doctype,dn:this.docname},function(r,rt){if(r.message=='okay'){LocalDB.delete_doc(me.doctype,me.docname);if(wn.ui.toolbar.recent)wn.ui.toolbar.recent.remove(me.doctype,me.docname);window.back();}})}} _f.Frm.prototype.savetrash=function(){var me=this;var answer=confirm("Permanently Delete "+this.docname+"? This action cannot be reversed");if(answer){$c('webnotes.model.delete_doc',{dt:this.doctype,dn:this.docname},function(r,rt){if(r.message=='okay'){LocalDB.delete_doc(me.doctype,me.docname);if(wn.ui.toolbar.recent)wn.ui.toolbar.recent.remove(me.doctype,me.docname);window.history.back();}})}}
_f.Frm.prototype.amend_doc=function(){if(!this.fields_dict['amended_from']){alert('"amended_from" field must be present to do an amendment.');return;} _f.Frm.prototype.amend_doc=function(){if(!this.fields_dict['amended_from']){alert('"amended_from" field must be present to do an amendment.');return;}
var me=this;var fn=function(newdoc){newdoc.amended_from=me.docname;if(me.fields_dict&&me.fields_dict['amendment_date']) var me=this;var fn=function(newdoc){newdoc.amended_from=me.docname;if(me.fields_dict&&me.fields_dict['amendment_date'])
newdoc.amendment_date=dateutil.obj_to_str(new Date());} newdoc.amendment_date=dateutil.obj_to_str(new Date());}
@ -2114,7 +2118,7 @@ $c_get_values=function(args,doc,dt,dn,user_callback){var call_back=function(r,rt
refresh_field(fl[i],dn,args.table_field);else refresh_field(fl[i],dn,args.table_field);else
refresh_field(fl[i]);}} refresh_field(fl[i]);}}
$c('webnotes.widgets.form.utils.get_fields',args,call_back);} $c('webnotes.widgets.form.utils.get_fields',args,call_back);}
get_server_fields=function(method,arg,table_field,doc,dt,dn,allow_edit,call_back){if(!allow_edit)freeze('Fetching Data...');$c('runserverobj',args={'method':method,'docs':compress_doclist([doc]),'arg':arg},function(r,rt){if(r.message){var d=locals[dt][dn];var field_dict=r.message;for(var key in field_dict){d[key]=field_dict[key];if(table_field)refresh_field(key,d.name,table_field);else refresh_field(key);}} get_server_fields=function(method,arg,table_field,doc,dt,dn,allow_edit,call_back){if(!allow_edit)freeze('Fetching Data...');$c('runserverobj',args={'method':method,'docs':compress_doclist(make_doclist(doc.doctype,doc.name)),'arg':arg},function(r,rt){if(r.message){var d=locals[dt][dn];var field_dict=r.message;for(var key in field_dict){d[key]=field_dict[key];if(table_field)refresh_field(key,d.name,table_field);else refresh_field(key);}}
if(call_back){doc=locals[doc.doctype][doc.name];call_back(doc,dt,dn);} if(call_back){doc=locals[doc.doctype][doc.name];call_back(doc,dt,dn);}
if(!allow_edit)unfreeze();});} if(!allow_edit)unfreeze();});}
set_multiple=function(dt,dn,dict,table_field){var d=locals[dt][dn];for(var key in dict){d[key]=dict[key];if(table_field)refresh_field(key,d.name,table_field);else refresh_field(key);}} set_multiple=function(dt,dn,dict,table_field){var d=locals[dt][dn];for(var key in dict){d[key]=dict[key];if(table_field)refresh_field(key,d.name,table_field);else refresh_field(key);}}
@ -2165,7 +2169,7 @@ CommentItem.prototype.cmt_delete=function(cell,ri,ci,d){var me=this;if(d[ri][2]=
/* /*
* lib/js/legacy/wn/widgets/form/sidebar.js * lib/js/legacy/wn/widgets/form/sidebar.js
*/ */
wn.widgets.form.sidebar={Sidebar:function(form){var me=this;this.form=form;this.opts={sections:[{title:'Actions',items:[{type:'link',label:'New',icon:'icon-plus',display:function(){return in_list(profile.can_create,form.doctype)},onclick:function(){new_doc(me.form.doctype)}},{type:'link',label:'List',icon:'icon-list',display:function(){return!me.form.meta.issingle;},onclick:function(){window.location.href="#!List/"+me.form.doctype}},{type:'link',label:'Refresh',icon:'icon-refresh',onclick:function(){me.form.reload_doc()}},{type:'link',label:'Print',display:function(){return!(me.form.doc.__islocal||me.form.meta.allow_print);},icon:'icon-print',onclick:function(){me.form.print_doc()}},{type:'link',label:'Email',display:function(){return!(me.form.doc.__islocal||me.form.meta.allow_email);},icon:'icon-envelope',onclick:function(){me.form.email_doc()}},{type:'link',label:'Copy',display:function(){return in_list(profile.can_create,me.form.doctype)&&!me.form.meta.allow_copy},icon:'icon-file',onclick:function(){me.form.copy_doc()}},{type:'link',label:'Delete',display:function(){return me.form.meta.allow_trash&&cint(me.form.doc.docstatus)!=2&&(!me.form.doc.__islocal)&&me.form.perm[0][CANCEL]},icon:'icon-remove-sign',onclick:function(){me.form.savetrash()}}]},{title:'Assign To',render:function(wrapper){me.form.assign_to=new wn.widgets.form.sidebar.AssignTo(wrapper,me,me.form.doctype,me.form.docname);},display:function(){if(me.form.doc.__local)return false;else return true;}},{title:'Attachments',render:function(wrapper){me.form.attachments=new wn.widgets.form.sidebar.Attachments(wrapper,me,me.form.doctype,me.form.docname);},display:function(){return me.form.meta.allow_attach}},{title:'Comments',render:function(wrapper){new wn.widgets.form.sidebar.Comments(wrapper,me,me.form.doctype,me.form.docname);},display:function(){return!me.form.doc.__islocal}},{title:'Tags',render:function(wrapper){me.form.taglist=new TagList(wrapper,me.form.doc._user_tags?me.form.doc._user_tags.split(','):[],me.form.doctype,me.form.docname,0,function(){});},display:function(){return!me.form.doc.__islocal}},{title:'Users',render:function(wrapper){var doc=cur_frm.doc;var scrub_date=function(d){if(d)t=d.split(' ');else return'';return dateutil.str_to_user(t[0])+' '+t[1];} wn.widgets.form.sidebar={Sidebar:function(form){var me=this;this.form=form;this.opts={sections:[{title:'Actions',items:[{type:'link',label:'New',icon:'icon-plus',display:function(){return in_list(profile.can_create,form.doctype)},onclick:function(){new_doc(me.form.doctype)}},{type:'link',label:'List',icon:'icon-list',display:function(){return!me.form.meta.issingle;},onclick:function(){window.location.href="#!List/"+me.form.doctype}},{type:'link',label:'Refresh',icon:'icon-refresh',onclick:function(){me.form.reload_doc()}},{type:'link',label:'Print',display:function(){return!(me.form.doc.__islocal||me.form.meta.allow_print);},icon:'icon-print',onclick:function(){me.form.print_doc()}},{type:'link',label:'Email',display:function(){return!(me.form.doc.__islocal||me.form.meta.allow_email);},icon:'icon-envelope',onclick:function(){me.form.email_doc()}},{type:'link',label:'Copy',display:function(){return in_list(profile.can_create,me.form.doctype)&&!me.form.meta.allow_copy},icon:'icon-file',onclick:function(){me.form.copy_doc()}},{type:'link',label:'Delete',display:function(){return(cint(me.form.doc.docstatus)!=1)&&!me.form.doc.__islocal&&wn.model.can_delete(me.form.doctype);},icon:'icon-remove-sign',onclick:function(){me.form.savetrash()}}]},{title:'Assign To',render:function(wrapper){me.form.assign_to=new wn.widgets.form.sidebar.AssignTo(wrapper,me,me.form.doctype,me.form.docname);},display:function(){if(me.form.doc.__local)return false;else return true;}},{title:'Attachments',render:function(wrapper){me.form.attachments=new wn.widgets.form.sidebar.Attachments(wrapper,me,me.form.doctype,me.form.docname);},display:function(){return me.form.meta.allow_attach}},{title:'Comments',render:function(wrapper){new wn.widgets.form.sidebar.Comments(wrapper,me,me.form.doctype,me.form.docname);},display:function(){return!me.form.doc.__islocal}},{title:'Tags',render:function(wrapper){me.form.taglist=new TagList(wrapper,me.form.doc._user_tags?me.form.doc._user_tags.split(','):[],me.form.doctype,me.form.docname,0,function(){});},display:function(){return!me.form.doc.__islocal}},{title:'Users',render:function(wrapper){var doc=cur_frm.doc;var scrub_date=function(d){if(d)t=d.split(' ');else return'';return dateutil.str_to_user(t[0])+' '+t[1];}
$(wrapper).html(repl('<p>Created:<br> <span class="avatar-small">\ $(wrapper).html(repl('<p>Created:<br> <span class="avatar-small">\
<img title="%(created_by)s" src="%(avatar_created)s" /></span> \ <img title="%(created_by)s" src="%(avatar_created)s" /></span> \
<span class="help small">%(creation)s</span></p>\ <span class="help small">%(creation)s</span></p>\

View File

@ -283,7 +283,7 @@ wn.request.cleanup=function(opts,r){if(opts.btn)$(opts.btn).done_working();if(op
return;} return;}
if(r.server_messages)msgprint(r.server_messages) if(r.server_messages)msgprint(r.server_messages)
if(r.exc){console.log(r.exc);};if(r['403']){wn.container.change_to('403');} if(r.exc){console.log(r.exc);};if(r['403']){wn.container.change_to('403');}
if(r.docs)LocalDB.sync(r.docs);} if(r.docs){LocalDB.sync(r.docs);}}
wn.request.call=function(opts){wn.request.prepare(opts);$.ajax({url:opts.url||wn.request.url,data:opts.args,type:opts.type||'POST',dataType:opts.dataType||'json',success:function(r,xhr){wn.request.cleanup(opts,r);opts.success(r,xhr.responseText);},error:function(xhr,textStatus){wn.request.cleanup(opts,{});show_alert('Unable to complete request: '+textStatus) wn.request.call=function(opts){wn.request.prepare(opts);$.ajax({url:opts.url||wn.request.url,data:opts.args,type:opts.type||'POST',dataType:opts.dataType||'json',success:function(r,xhr){wn.request.cleanup(opts,r);opts.success(r,xhr.responseText);},error:function(xhr,textStatus){wn.request.cleanup(opts,{});show_alert('Unable to complete request: '+textStatus)
if(opts.error)opts.error(xhr)}})} if(opts.error)opts.error(xhr)}})}
wn.call=function(opts){var args=$.extend({},opts.args) wn.call=function(opts){var args=$.extend({},opts.args)
@ -626,8 +626,10 @@ LocalDB.add=function(dt,dn){if(!locals[dt])locals[dt]={};if(locals[dt][dn])delet
LocalDB.delete_doc=function(dt,dn){var doc=get_local(dt,dn);for(var ndt in locals){if(locals[ndt]){for(var ndn in locals[ndt]){var doc=locals[ndt][ndn];if(doc&&doc.parenttype==dt&&(doc.parent==dn||doc.__oldparent==dn)){delete locals[ndt][ndn];}}}} LocalDB.delete_doc=function(dt,dn){var doc=get_local(dt,dn);for(var ndt in locals){if(locals[ndt]){for(var ndn in locals[ndt]){var doc=locals[ndt][ndn];if(doc&&doc.parenttype==dt&&(doc.parent==dn||doc.__oldparent==dn)){delete locals[ndt][ndn];}}}}
delete locals[dt][dn];} delete locals[dt][dn];}
function get_local(dt,dn){return locals[dt]?locals[dt][dn]:null;} function get_local(dt,dn){return locals[dt]?locals[dt][dn]:null;}
LocalDB.sync=function(list){if(list._kl)list=expand_doclist(list);for(var i=0;i<list.length;i++){var d=list[i];if(!d.name) LocalDB.sync=function(list){if(list._kl)list=expand_doclist(list);if(list){LocalDB.clear_locals(list[0].doctype,list[0].name);}
for(var i=0;i<list.length;i++){var d=list[i];if(!d.name)
d.name=LocalDB.get_localname(d.doctype);LocalDB.add(d.doctype,d.name);locals[d.doctype][d.name]=d;if(d.doctype=='DocField')wn.meta.add_field(d);if(d.localname){wn.model.new_names[d.localname]=d.name;$(document).trigger('rename',[d.doctype,d.localname,d.name]);delete locals[d.doctype][d.localname];}}} d.name=LocalDB.get_localname(d.doctype);LocalDB.add(d.doctype,d.name);locals[d.doctype][d.name]=d;if(d.doctype=='DocField')wn.meta.add_field(d);if(d.localname){wn.model.new_names[d.localname]=d.name;$(document).trigger('rename',[d.doctype,d.localname,d.name]);delete locals[d.doctype][d.localname];}}}
LocalDB.clear_locals=function(dt,dn){var doclist=make_doclist(dt,dn,1);$.each(doclist,function(i,v){v&&delete locals[v.doctype][v.name];});}
local_name_idx={};LocalDB.get_localname=function(doctype){if(!local_name_idx[doctype])local_name_idx[doctype]=1;var n='New '+get_doctype_label(doctype)+' '+local_name_idx[doctype];local_name_idx[doctype]++;return n;} local_name_idx={};LocalDB.get_localname=function(doctype){if(!local_name_idx[doctype])local_name_idx[doctype]=1;var n='New '+get_doctype_label(doctype)+' '+local_name_idx[doctype];local_name_idx[doctype]++;return n;}
LocalDB.set_default_values=function(doc){var doctype=doc.doctype;var docfields=wn.meta.docfield_list[doctype];if(!docfields){return;} LocalDB.set_default_values=function(doc){var doctype=doc.doctype;var docfields=wn.meta.docfield_list[doctype];if(!docfields){return;}
var fields_to_refresh=[];for(var fid=0;fid<docfields.length;fid++){var f=docfields[fid];if(!in_list(no_value_fields,f.fieldtype)&&doc[f.fieldname]==null){var v=LocalDB.get_default_value(f.fieldname,f.fieldtype,f['default']);if(v){doc[f.fieldname]=v;fields_to_refresh.push(f.fieldname);}}} var fields_to_refresh=[];for(var fid=0;fid<docfields.length;fid++){var f=docfields[fid];if(!in_list(no_value_fields,f.fieldtype)&&doc[f.fieldname]==null){var v=LocalDB.get_default_value(f.fieldname,f.fieldtype,f['default']);if(v){doc[f.fieldname]=v;fields_to_refresh.push(f.fieldname);}}}
@ -657,7 +659,8 @@ return sys_defaults[fn];}
LocalDB.add_child=function(doc,childtype,parentfield){var n=LocalDB.create(childtype);var d=locals[childtype][n];d.parent=doc.name;d.parentfield=parentfield;d.parenttype=doc.doctype;return d;} LocalDB.add_child=function(doc,childtype,parentfield){var n=LocalDB.create(childtype);var d=locals[childtype][n];d.parent=doc.name;d.parentfield=parentfield;d.parenttype=doc.doctype;return d;}
LocalDB.no_copy_list=['amended_from','amendment_date','cancel_reason'];LocalDB.copy=function(dt,dn,from_amend){var newdoc=LocalDB.create(dt);for(var key in locals[dt][dn]){var df=get_field(dt,key);if(key!=='name'&&key.substr(0,2)!='__'&&!(df&&((!from_amend&&cint(df.no_copy)==1)||in_list(LocalDB.no_copy_list,df.fieldname)))){locals[dt][newdoc][key]=locals[dt][dn][key];}} LocalDB.no_copy_list=['amended_from','amendment_date','cancel_reason'];LocalDB.copy=function(dt,dn,from_amend){var newdoc=LocalDB.create(dt);for(var key in locals[dt][dn]){var df=get_field(dt,key);if(key!=='name'&&key.substr(0,2)!='__'&&!(df&&((!from_amend&&cint(df.no_copy)==1)||in_list(LocalDB.no_copy_list,df.fieldname)))){locals[dt][newdoc][key]=locals[dt][dn][key];}}
return locals[dt][newdoc];} return locals[dt][newdoc];}
function make_doclist(dt,dn,deleted){var dl=[];dl[0]=locals[dt][dn];for(var ndt in locals){if(locals[ndt]){for(var ndn in locals[ndt]){var doc=locals[ndt][ndn];if(doc&&doc.parenttype==dt&&(doc.parent==dn||(deleted&&doc.__oldparent==dn))){dl[dl.length]=doc;}}}} function make_doclist(dt,dn,deleted){if(!locals[dt]){return[];}
var dl=[];dl[0]=locals[dt][dn];for(var ndt in locals){if(locals[ndt]){for(var ndn in locals[ndt]){var doc=locals[ndt][ndn];if(doc&&doc.parenttype==dt&&(doc.parent==dn||(deleted&&doc.__oldparent==dn))){dl[dl.length]=doc;}}}}
return dl;} return dl;}
var Meta={};var local_dt={};Meta.make_local_dt=function(dt,dn){var dl=make_doclist('DocType',dt);if(!local_dt[dt])local_dt[dt]={};if(!local_dt[dt][dn])local_dt[dt][dn]={};for(var i=0;i<dl.length;i++){var d=dl[i];if(d.doctype=='DocField'){var key=d.fieldname?d.fieldname:d.label;local_dt[dt][dn][key]=copy_dict(d);}}} var Meta={};var local_dt={};Meta.make_local_dt=function(dt,dn){var dl=make_doclist('DocType',dt);if(!local_dt[dt])local_dt[dt]={};if(!local_dt[dt][dn])local_dt[dt][dn]={};for(var i=0;i<dl.length;i++){var d=dl[i];if(d.doctype=='DocField'){var key=d.fieldname?d.fieldname:d.label;local_dt[dt][dn][key]=copy_dict(d);}}}
Meta.get_field=function(dt,fn,dn){if(dn&&local_dt[dt]&&local_dt[dt][dn]){return local_dt[dt][dn][fn];}else{if(wn.meta.docfield_map[dt])var d=wn.meta.docfield_map[dt][fn];if(d)return d;} Meta.get_field=function(dt,fn,dn){if(dn&&local_dt[dt]&&local_dt[dt][dn]){return local_dt[dt][dn][fn];}else{if(wn.meta.docfield_map[dt])var d=wn.meta.docfield_map[dt][fn];if(d)return d;}

View File

@ -98,19 +98,20 @@ return v;};function LinkField(){}LinkField.prototype=new Field();LinkField.proto
$(me.btn2).css('display','inline-block');else $dh(me.btn2);}} $(me.btn2).css('display','inline-block');else $dh(me.btn2);}}
me.txt.field_object=this;me.input.set_input=function(val){if(val==undefined)val='';me.txt.value=val;} me.txt.field_object=this;me.input.set_input=function(val){if(val==undefined)val='';me.txt.value=val;}
me.get_value=function(){return me.txt.value;} me.get_value=function(){return me.txt.value;}
$(me.txt).autocomplete({source:function(request,response){wn.call({method:'webnotes.widgets.search.search_link',args:{'txt':request.term,'dt':me.df.options,'query':me.get_custom_query()},callback:function(r){response(r.results);},});},select:function(event,ui){me.set_input_value(ui.item.value);}}).data('autocomplete')._renderItem=function(ul,item){return $('<li></li>').data('item.autocomplete',item).append(repl('<a>%(label)s<br><span style="font-size:10px">%(info)s</span></a>',item)).appendTo(ul);};$(this.txt).change(function(){if(!$(this).val()){if(selector&&selector.display) $(me.txt).autocomplete({source:function(request,response){wn.call({method:'webnotes.widgets.search.search_link',args:{'txt':request.term,'dt':me.df.options,'query':me.get_custom_query()},callback:function(r){response(r.results);},});},select:function(event,ui){me.set_input_value(ui.item.value);}}).data('autocomplete')._renderItem=function(ul,item){return $('<li></li>').data('item.autocomplete',item).append(repl('<a>%(label)s<br><span style="font-size:10px">%(info)s</span></a>',item)).appendTo(ul);};$(this.txt).change(function(){var val=$(this).val();me.set_input_value_executed=false;if(!val){if(selector&&selector.display)
return;me.set_input_value('');}})} return;me.set_input_value('');}else{setTimeout(function(){if(!me.set_input_value_executed){me.set_input_value(val);}},100);}})}
LinkField.prototype.get_custom_query=function(){this.set_get_query();if(this.get_query){if(cur_frm) LinkField.prototype.get_custom_query=function(){this.set_get_query();if(this.get_query){if(cur_frm)
var doc=locals[cur_frm.doctype][cur_frm.docname];return this.get_query(doc,this.doctype,this.docname);}} var doc=locals[cur_frm.doctype][cur_frm.docname];return this.get_query(doc,this.doctype,this.docname);}}
LinkField.prototype.setup_buttons=function(){var me=this;me.btn.onclick=function(){selector.set(me,me.df.options,me.df.label);selector.show(me.txt);} LinkField.prototype.setup_buttons=function(){var me=this;me.btn.onclick=function(){selector.set(me,me.df.options,me.df.label);selector.show(me.txt);}
if(me.btn1)me.btn1.onclick=function(){if(me.txt.value&&me.df.options){loaddoc(me.df.options,me.txt.value);}} if(me.btn1)me.btn1.onclick=function(){if(me.txt.value&&me.df.options){loaddoc(me.df.options,me.txt.value);}}
me.can_create=0;if((!me.not_in_form)&&in_list(profile.can_create,me.df.options)){me.can_create=1;me.btn2.onclick=function(){var on_save_callback=function(new_rec){if(new_rec){var d=_f.calling_doc_stack.pop();locals[d[0]][d[1]][me.df.fieldname]=new_rec;me.refresh();if(me.grid)me.grid.refresh();me.run_trigger();}} me.can_create=0;if((!me.not_in_form)&&in_list(profile.can_create,me.df.options)){me.can_create=1;me.btn2.onclick=function(){var on_save_callback=function(new_rec){if(new_rec){var d=_f.calling_doc_stack.pop();locals[d[0]][d[1]][me.df.fieldname]=new_rec;me.refresh();if(me.grid)me.grid.refresh();me.run_trigger();}}
_f.calling_doc_stack.push([me.doctype,me.docname]);new_doc(me.df.options,me.on_new,1,on_save_callback,me.doctype,me.docname,me.frm.not_in_container);}}else{$dh(me.btn2);$y($td(me.tab,0,2),{width:'0px'});}} _f.calling_doc_stack.push([me.doctype,me.docname]);new_doc(me.df.options,me.on_new,1,on_save_callback,me.doctype,me.docname,me.frm.not_in_container);}}else{$dh(me.btn2);$y($td(me.tab,0,2),{width:'0px'});}}
LinkField.prototype.set_input_value=function(val){var me=this;var from_selector=false;if(selector&&selector.display)from_selector=true;me.refresh_label_icon();if(me.not_in_form){$(this.txt).val(val);return;} LinkField.prototype.set_input_value=function(val){var me=this;me.set_input_value_executed=true;var from_selector=false;if(selector&&selector.display)from_selector=true;me.refresh_label_icon();if(me.not_in_form){$(this.txt).val(val);return;}
if(cur_frm){if(val==locals[me.doctype][me.docname][me.df.fieldname]){me.run_trigger();return;}} if(cur_frm){if(val==locals[me.doctype][me.docname][me.df.fieldname]){me.run_trigger();return;}}
me.set(val);if(_f.cur_grid_cell) me.set(val);if(_f.cur_grid_cell)
_f.cur_grid_cell.grid.cell_deselect();if(locals[me.doctype][me.docname][me.df.fieldname]&&!val){me.run_trigger();return;} _f.cur_grid_cell.grid.cell_deselect();if(locals[me.doctype][me.docname][me.df.fieldname]&&!val){me.run_trigger();return;}
var fetch='';if(cur_frm.fetch_dict[me.df.fieldname]) me.validate_link(val,from_selector);}
LinkField.prototype.validate_link=function(val,from_selector){var me=this;var fetch='';if(cur_frm.fetch_dict[me.df.fieldname])
fetch=cur_frm.fetch_dict[me.df.fieldname].columns.join(', ');$c('webnotes.widgets.form.utils.validate_link',{'value':val,'options':me.df.options,'fetch':fetch},function(r,rt){if(r.message=='Ok'){if($(me.txt).val()!=val){if((me.grid&&!from_selector)||(!me.grid)){$(me.txt).val(val);}} fetch=cur_frm.fetch_dict[me.df.fieldname].columns.join(', ');$c('webnotes.widgets.form.utils.validate_link',{'value':val,'options':me.df.options,'fetch':fetch},function(r,rt){if(r.message=='Ok'){if($(me.txt).val()!=val){if((me.grid&&!from_selector)||(!me.grid)){$(me.txt).val(val);}}
if(r.fetch_values) if(r.fetch_values)
me.set_fetch_values(r.fetch_values);me.run_trigger();}else{var astr='';if(in_list(profile.can_create,me.df.options))astr=repl('<br><br><span class="link_type" onclick="newdoc(\'%(dt)s\')">Click here</span> to create a new %(dtl)s',{dt:me.df.options,dtl:get_doctype_label(me.df.options)}) me.set_fetch_values(r.fetch_values);me.run_trigger();}else{var astr='';if(in_list(profile.can_create,me.df.options))astr=repl('<br><br><span class="link_type" onclick="newdoc(\'%(dt)s\')">Click here</span> to create a new %(dtl)s',{dt:me.df.options,dtl:get_doctype_label(me.df.options)})