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

This commit is contained in:
Rushabh Mehta 2012-10-02 15:58:19 +05:30
commit 0b24c5ec0c
22 changed files with 293 additions and 504 deletions

View File

@ -23,7 +23,7 @@ from webnotes.model import db_exists
from webnotes.model.doc import Document, addchild, getchildren, make_autoname from webnotes.model.doc import Document, addchild, getchildren, make_autoname
from webnotes.model.doclist import getlist, copy_doclist from webnotes.model.doclist import getlist, copy_doclist
from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
from webnotes import session, form, msgprint, errprint from webnotes import session, form, is_testing, msgprint, errprint
set = webnotes.conn.set set = webnotes.conn.set
sql = webnotes.conn.sql sql = webnotes.conn.sql
@ -42,15 +42,9 @@ class DocType:
self.credit_days_global = -1 self.credit_days_global = -1
self.is_approving_authority = -1 self.is_approving_authority = -1
#--------------------------------------------------------------------------------------------------------
# Autoname
#--------------------------------------------------------------------------------------------------------
def autoname(self): def autoname(self):
self.doc.name = make_autoname(self.doc.naming_series+'.#####') self.doc.name = make_autoname(self.doc.naming_series+'.#####')
#--------------------------------------------------------------------------------------------------------
# Fetch outstanding amount from RV/PV
#--------------------------------------------------------------------------------------------------------
def get_outstanding(self, args): def get_outstanding(self, args):
args = eval(args) args = eval(args)
o_s = sql("select outstanding_amount from `tab%s` where name = '%s'" % (args['doctype'],args['docname'])) o_s = sql("select outstanding_amount from `tab%s` where name = '%s'" % (args['doctype'],args['docname']))
@ -59,9 +53,6 @@ class DocType:
if args['doctype'] == 'Sales Invoice': if args['doctype'] == 'Sales Invoice':
return {'credit': o_s and flt(o_s[0][0]) or 0} return {'credit': o_s and flt(o_s[0][0]) or 0}
#--------------------------------------------------------------------------------------------------------
# Create remarks
#--------------------------------------------------------------------------------------------------------
def create_remarks(self): def create_remarks(self):
r = [] r = []
if self.doc.cheque_no : if self.doc.cheque_no :
@ -90,9 +81,6 @@ class DocType:
if r: if r:
self.doc.remark = ("\n").join(r) self.doc.remark = ("\n").join(r)
# --------------------------------------------------------------------------------------------------------
# Check user role for approval process
# --------------------------------------------------------------------------------------------------------
def get_authorized_user(self): def get_authorized_user(self):
if self.is_approving_authority==-1: if self.is_approving_authority==-1:
self.is_approving_authority = 0 self.is_approving_authority = 0
@ -107,17 +95,12 @@ class DocType:
return self.is_approving_authority return self.is_approving_authority
# get master type
# ---------------
def get_master_type(self, ac): def get_master_type(self, ac):
if not self.master_type.get(ac): if not self.master_type.get(ac):
self.master_type[ac] = sql("select master_type from `tabAccount` where name=%s", ac)[0][0] or 'None' self.master_type[ac] = sql("select master_type from `tabAccount` where name=%s", ac)[0][0] or 'None'
return self.master_type[ac] return self.master_type[ac]
# get credit days for
# -------------------
def get_credit_days_for(self, ac): def get_credit_days_for(self, ac):
if not self.credit_days_for.has_key(ac): if not self.credit_days_for.has_key(ac):
self.credit_days_for[ac] = sql("select credit_days from `tabAccount` where name='%s'" % ac)[0][0] or 0 self.credit_days_for[ac] = sql("select credit_days from `tabAccount` where name='%s'" % ac)[0][0] or 0
@ -128,10 +111,6 @@ class DocType:
else: else:
return self.credit_days_for[ac] return self.credit_days_for[ac]
# --------------------------------------------------------------------------------------------------------
# Check Credit Days - Cheque Date can not after (Posting date + Credit Days)
# --------------------------------------------------------------------------------------------------------
def check_credit_days(self): def check_credit_days(self):
date_diff = 0 date_diff = 0
if self.doc.cheque_date: if self.doc.cheque_date:
@ -150,9 +129,6 @@ class DocType:
msgprint("Credit Not Allowed: Cannot allow a check that is dated more than %s days after the posting date" % credit_days) msgprint("Credit Not Allowed: Cannot allow a check that is dated more than %s days after the posting date" % credit_days)
raise Exception raise Exception
#--------------------------------------------------------------------------------------------------------
# validation of debit/credit account with Debit To Account(RV) or Credit To Account (PV)
#--------------------------------------------------------------------------------------------------------
def check_account_against_entries(self): def check_account_against_entries(self):
for d in getlist(self.doclist,'entries'): for d in getlist(self.doclist,'entries'):
if d.against_invoice: if d.against_invoice:
@ -167,9 +143,6 @@ class DocType:
msgprint("Credit account is not matching with payable voucher") msgprint("Credit account is not matching with payable voucher")
raise Exception raise Exception
#--------------------------------------------------------------------------------------------------------
# Validate Cheque Info: Mandatory for Bank/Contra voucher
#--------------------------------------------------------------------------------------------------------
def validate_cheque_info(self): def validate_cheque_info(self):
if self.doc.voucher_type in ['Bank Voucher']: if self.doc.voucher_type in ['Bank Voucher']:
if not self.doc.cheque_no or not self.doc.cheque_date: if not self.doc.cheque_no or not self.doc.cheque_date:
@ -180,9 +153,6 @@ class DocType:
msgprint("Cheque No is mandatory if you entered Cheque Date") msgprint("Cheque No is mandatory if you entered Cheque Date")
raise Exception raise Exception
#--------------------------------------------------------------------------------------------------------
# Gives reminder for making is_advance = 'Yes' in Advance Entry
#--------------------------------------------------------------------------------------------------------
def validate_entries_for_advance(self): def validate_entries_for_advance(self):
for d in getlist(self.doclist,'entries'): for d in getlist(self.doclist,'entries'):
if not d.is_advance and not d.against_voucher and not d.against_invoice and d.against_jv: if not d.is_advance and not d.against_voucher and not d.against_invoice and d.against_jv:
@ -190,9 +160,6 @@ class DocType:
if (master_type == 'Customer' and flt(d.credit) > 0) or (master_type == 'Supplier' and flt(d.debit) > 0): if (master_type == 'Customer' and flt(d.credit) > 0) or (master_type == 'Supplier' and flt(d.debit) > 0):
msgprint("Message: Please check Is Advance as 'Yes' against Account %s if this is an advance entry." % d.account) msgprint("Message: Please check Is Advance as 'Yes' against Account %s if this is an advance entry." % d.account)
#--------------------------------------------------------------------------------------------------------
# TDS: Validate tds related fields
#--------------------------------------------------------------------------------------------------------
def get_tds_category_account(self): def get_tds_category_account(self):
for d in getlist(self.doclist,'entries'): for d in getlist(self.doclist,'entries'):
if flt(d.debit) > 0 and not d.against_voucher and d.is_advance == 'Yes': if flt(d.debit) > 0 and not d.against_voucher and d.is_advance == 'Yes':
@ -220,11 +187,6 @@ class DocType:
msgprint("Please select TDS Applicable = 'Yes' in account head: '%s' if you want to deduct TDS." % self.doc.supplier_account) msgprint("Please select TDS Applicable = 'Yes' in account head: '%s' if you want to deduct TDS." % self.doc.supplier_account)
raise Exception raise Exception
#--------------------------------------------------------------------------------------------------------
# If TDS applicable , TDS category and supplier account should be mandatory
#--------------------------------------------------------------------------------------------------------
def validate_category_account(self, credit_account): def validate_category_account(self, credit_account):
if not self.doc.tds_category: if not self.doc.tds_category:
msgprint("Please select TDS Category") msgprint("Please select TDS Category")
@ -236,10 +198,6 @@ class DocType:
msgprint("Supplier Account is not matching with the account mentioned in the table. Please select proper Supplier Account and click on 'Get TDS' button.") msgprint("Supplier Account is not matching with the account mentioned in the table. Please select proper Supplier Account and click on 'Get TDS' button.")
raise Exception raise Exception
#--------------------------------------------------------------------------------------------------------
# If TDS is not applicable , all related fields should blank
#--------------------------------------------------------------------------------------------------------
def set_fields_null(self): def set_fields_null(self):
self.doc.ded_amount = 0 self.doc.ded_amount = 0
self.doc.rate = 0 self.doc.rate = 0
@ -247,9 +205,6 @@ class DocType:
self.doc.tds_category = '' self.doc.tds_category = ''
self.doc.supplier_account = '' self.doc.supplier_account = ''
#--------------------------------------------------------------------------------------------------------
# Get TDS amount
#--------------------------------------------------------------------------------------------------------
def get_tds(self): def get_tds(self):
if cstr(self.doc.is_opening) != 'Yes': if cstr(self.doc.is_opening) != 'Yes':
if self.doc.total_debit > 0: if self.doc.total_debit > 0:
@ -257,10 +212,6 @@ class DocType:
if self.doc.supplier_account and self.doc.tds_category: if self.doc.supplier_account and self.doc.tds_category:
get_obj('TDS Control').get_tds_amount(self) get_obj('TDS Control').get_tds_amount(self)
#--------------------------------------------------------------------------------------------------------
# Insert new row to balance total debit and total credit
#--------------------------------------------------------------------------------------------------------
def get_balance(self): def get_balance(self):
if not getlist(self.doclist,'entries'): if not getlist(self.doclist,'entries'):
msgprint("Please enter atleast 1 entry in 'GL Entries' table") msgprint("Please enter atleast 1 entry in 'GL Entries' table")
@ -295,9 +246,6 @@ class DocType:
self.doc.difference = flt(self.doc.total_debit) - flt(self.doc.total_credit) self.doc.difference = flt(self.doc.total_debit) - flt(self.doc.total_credit)
#--------------------------------------------------------------------------------------------------------
# Set against account
#--------------------------------------------------------------------------------------------------------
def get_against_account(self): def get_against_account(self):
# Debit = Credit # Debit = Credit
debit, credit = 0.0, 0.0 debit, credit = 0.0, 0.0
@ -323,9 +271,6 @@ class DocType:
if flt(d.debit) > 0: d.against_account = ', '.join(credit_list) if flt(d.debit) > 0: d.against_account = ', '.join(credit_list)
if flt(d.credit) > 0: d.against_account = ', '.join(debit_list) if flt(d.credit) > 0: d.against_account = ', '.join(debit_list)
# set aging date
#---------------
def set_aging_date(self): def set_aging_date(self):
if self.doc.is_opening != 'Yes': if self.doc.is_opening != 'Yes':
self.doc.aging_date = self.doc.posting_date self.doc.aging_date = self.doc.posting_date
@ -345,9 +290,6 @@ class DocType:
else: else:
self.doc.aging_date = self.doc.posting_date self.doc.aging_date = self.doc.posting_date
# ------------------------
# set print format fields
# ------------------------
def set_print_format_fields(self): def set_print_format_fields(self):
for d in getlist(self.doclist, 'entries'): for d in getlist(self.doclist, 'entries'):
#msgprint(self.doc.company) #msgprint(self.doc.company)
@ -363,10 +305,6 @@ class DocType:
self.doc.total_amount = dcc +' '+ cstr(amt) self.doc.total_amount = dcc +' '+ cstr(amt)
self.doc.total_amount_in_words = get_obj('Sales Common').get_total_in_words(dcc, cstr(amt)) self.doc.total_amount_in_words = get_obj('Sales Common').get_total_in_words(dcc, cstr(amt))
# --------------------------------
# get outstanding invoices values
# --------------------------------
def get_values(self): def get_values(self):
cond = (flt(self.doc.write_off_amount) > 0) and ' and outstanding_amount <= '+self.doc.write_off_amount or '' cond = (flt(self.doc.write_off_amount) > 0) and ' and outstanding_amount <= '+self.doc.write_off_amount or ''
if self.doc.write_off_based_on == 'Accounts Receivable': if self.doc.write_off_based_on == 'Accounts Receivable':
@ -375,9 +313,6 @@ class DocType:
return sql("select name, credit_to, outstanding_amount from `tabPurchase Invoice` where docstatus = 1 and company = '%s' and outstanding_amount > 0 %s" % (self.doc.company, cond)) return sql("select name, credit_to, outstanding_amount from `tabPurchase Invoice` where docstatus = 1 and company = '%s' and outstanding_amount > 0 %s" % (self.doc.company, cond))
# -------------------------
# get outstanding invoices
# -------------------------
def get_outstanding_invoices(self): def get_outstanding_invoices(self):
self.doclist = self.doc.clear_table(self.doclist, 'entries') self.doclist = self.doc.clear_table(self.doclist, 'entries')
total = 0 total = 0
@ -399,13 +334,10 @@ class DocType:
jd.credit = total jd.credit = total
jd.save(1) jd.save(1)
#--------------------------------------------------------------------------------------------------------
# VALIDATE
#--------------------------------------------------------------------------------------------------------
def validate(self): def validate(self):
if not self.doc.is_opening: if not self.doc.is_opening:
self.doc.is_opening='No' self.doc.is_opening='No'
self.validate_debit_credit()
self.get_against_account() self.get_against_account()
self.validate_cheque_info() self.validate_cheque_info()
self.create_remarks() self.create_remarks()
@ -420,25 +352,24 @@ class DocType:
self.set_print_format_fields() self.set_print_format_fields()
#FY and Date validation #FY and Date validation
get_obj('Sales Common').validate_fiscal_year(self.doc.fiscal_year,self.doc.posting_date,'Posting Date') get_obj('Sales Common').validate_fiscal_year(self.doc.fiscal_year, \
self.doc.posting_date, 'Posting Date')
def validate_debit_credit(self):
for d in getlist(self.doclist, 'entries'):
if d.debit and d.credit:
msgprint("You cannot credit and debit same account at the same time.",
raise_exception=1)
#--------------------------------------------------------------------------------------------------------
# On Update - Update Feed
#--------------------------------------------------------------------------------------------------------
def on_update(self): def on_update(self):
pass pass
#--------------------------------------------------------------------------------------------------------
# On submit
#--------------------------------------------------------------------------------------------------------
def on_submit(self): def on_submit(self):
if self.doc.voucher_type in ['Bank Voucher', 'Contra Voucher', 'Journal Entry']: if self.doc.voucher_type in ['Bank Voucher', 'Contra Voucher', 'Journal Entry']:
self.check_credit_days() self.check_credit_days()
self.check_account_against_entries() self.check_account_against_entries()
get_obj(dt='GL Control').make_gl_entries(self.doc, self.doclist) get_obj(dt='GL Control').make_gl_entries(self.doc, self.doclist)
# validate against jv no
def validate_against_jv(self): def validate_against_jv(self):
for d in getlist(self.doclist, 'entries'): for d in getlist(self.doclist, 'entries'):
if d.against_jv: if d.against_jv:
@ -448,18 +379,13 @@ class DocType:
elif not sql("select name from `tabJournal Voucher Detail` where account = '%s' and docstatus = 1 and parent = '%s'" % (d.account, d.against_jv)): elif not sql("select name from `tabJournal Voucher Detail` where account = '%s' and docstatus = 1 and parent = '%s'" % (d.account, d.against_jv)):
msgprint("Against JV: "+ d.against_jv + " is not valid. Please check") msgprint("Against JV: "+ d.against_jv + " is not valid. Please check")
raise Exception raise Exception
#--------------------------------------------------------------------------------------------------------
# On cancel reverse gl entry
#--------------------------------------------------------------------------------------------------------
def on_cancel(self): def on_cancel(self):
self.check_tds_payment_voucher() self.check_tds_payment_voucher()
get_obj(dt='GL Control').make_gl_entries(self.doc, self.doclist, cancel=1) get_obj(dt='GL Control').make_gl_entries(self.doc, self.doclist, cancel=1)
# Check whether tds payment voucher has been created against this voucher
#---------------------------------------------------------------------------
def check_tds_payment_voucher(self): def check_tds_payment_voucher(self):
tdsp = sql("select parent from `tabTDS Payment Detail` where voucher_no = '%s' and docstatus = 1 and parent not like 'old%'") tdsp = sql("select parent from `tabTDS Payment Detail` where voucher_no = '%s' and docstatus = 1 and parent not like 'old%'")
if tdsp: if tdsp:
msgprint("TDS Payment voucher '%s' has been made against this voucher. Please cancel the payment voucher to proceed." % (tdsp and tdsp[0][0] or '')) msgprint("TDS Payment voucher '%s' has been made against this voucher. Please cancel the payment voucher to proceed." % (tdsp and tdsp[0][0] or ''))
raise Exception raise Exception

View File

@ -66,7 +66,9 @@ class DocType(TransactionBase):
def get_cust(self): def get_cust(self):
ret = {} ret = {}
if self.doc.credit_to: if self.doc.credit_to:
ret['supplier'] = get_value('Account',self.doc.credit_to,'master_name') acc = get_value('Account',self.doc.credit_to,['master_name', 'credit_days'])
ret['supplier'] = acc[0]
ret['due_date'] = add_days(cstr(self.doc.posting_date), acc and cint(acc[1]) or 0)
return ret return ret

View File

@ -5,7 +5,7 @@
{ {
u'creation': '2012-09-18 11:20:24', u'creation': '2012-09-18 11:20:24',
u'docstatus': 0, u'docstatus': 0,
u'modified': '2012-09-28 12:19:57', u'modified': '2012-09-28 12:27:43',
u'modified_by': u'Administrator', u'modified_by': u'Administrator',
u'owner': u'wasim@webnotestech.com' u'owner': u'wasim@webnotestech.com'
}, },

View File

@ -30,7 +30,7 @@ wn.require('app/setup/doctype/notification_control/notification_control.js');
// On Load // On Load
// ------- // -------
cur_frm.cscript.onload = function(doc,dt,dn) { cur_frm.cscript.onload = function(doc,dt,dn) {
if(!doc.customer && doc.debit_to) get_field(dt, 'debit_to', dn).print_hide = 0; if(!doc.customer && doc.debit_to) Meta.get_field(dt, 'debit_to', dn).print_hide = 0;
if (doc.__islocal) { if (doc.__islocal) {
//if(!doc.voucher_date) set_multiple(dt,dn,{voucher_date:get_today()}); //if(!doc.voucher_date) set_multiple(dt,dn,{voucher_date:get_today()});
if(!doc.due_date) set_multiple(dt,dn,{due_date:get_today()}); if(!doc.due_date) set_multiple(dt,dn,{due_date:get_today()});

View File

@ -102,8 +102,9 @@ erpnext.GeneralLedger = wn.views.GridReport.extend({
var default_company = me.filter_inputs.company.get(0).opts.default_value; var default_company = me.filter_inputs.company.get(0).opts.default_value;
$filter.empty().add_options([$filter.get(0).opts.default_value].concat( $filter.empty().add_options([$filter.get(0).opts.default_value].concat(
$.map(wn.report_dump.data["Account"], function(ac) { $.map(wn.report_dump.data["Account"], function(ac) {
return (accounts_by_company[company].indexOf(ac.name)!=-1 || return (company===default_company ||
company===default_company) ? ac.name : null; accounts_by_company[company].indexOf(ac.name)!=-1) ?
ac.name : null;
}))); })));
me.filter_inputs.refresh.click(); me.filter_inputs.refresh.click();
}); });

View File

@ -53,7 +53,7 @@ cur_frm.cscript.employee = function(doc,cdt,cdn){
$c_obj(make_doclist(doc.doctype, doc.name),'set_approver','', function(r,rt){ $c_obj(make_doclist(doc.doctype, doc.name),'set_approver','', function(r,rt){
if(r.message){ if(r.message){
doc.employee_name = r.message['emp_nm']; doc.employee_name = r.message['emp_nm'];
get_field(doc.doctype, 'kra_approver' , doc.name).options = r.message['app_lst']; Meta.get_field(doc.doctype, 'kra_approver' , doc.name).options = r.message['app_lst'];
refresh_many(['kra_approver','employee_name']); refresh_many(['kra_approver','employee_name']);
} }
}); });

View File

@ -89,6 +89,7 @@ class DocType:
self.validate_fiscal_year() self.validate_fiscal_year()
def set_approver(self): def set_approver(self):
errprint('here')
ret={} ret={}
approver_lst =[] approver_lst =[]
emp_nm = self.get_employee_name() emp_nm = self.get_employee_name()

View File

@ -3,11 +3,11 @@
# These values are common in all dictionaries # These values are common in all dictionaries
{ {
'creation': '2012-03-27 14:35:58', u'creation': '2012-05-15 12:14:45',
'docstatus': 0, u'docstatus': 0,
'modified': '2012-03-27 14:45:49', u'modified': '2012-10-02 11:21:31',
'modified_by': u'Administrator', u'modified_by': u'Administrator',
'owner': u'Administrator' u'owner': u'Administrator'
}, },
# These values are common for all DocType # These values are common for all DocType
@ -16,21 +16,21 @@
'autoname': u'LAL/.#####', 'autoname': u'LAL/.#####',
'colour': u'White:FFF', 'colour': u'White:FFF',
'default_print_format': u'Standard', 'default_print_format': u'Standard',
'doctype': 'DocType', u'doctype': u'DocType',
'is_submittable': 1, 'is_submittable': 1,
'module': u'HR', 'module': u'HR',
'name': '__common__', u'name': u'__common__',
'search_fields': u'employee,employee_name,leave_type,total_leaves_allocated,fiscal_year', 'search_fields': u'employee,employee_name,leave_type,total_leaves_allocated,fiscal_year',
'section_style': u'Simple', 'section_style': u'Simple',
'server_code_error': u' ', 'server_code_error': u' ',
'show_in_menu': 0, 'show_in_menu': 0,
'version': 1560 'version': 1
}, },
# These values are common for all DocField # These values are common for all DocField
{ {
'doctype': u'DocField', u'doctype': u'DocField',
'name': '__common__', u'name': u'__common__',
'parent': u'Leave Allocation', 'parent': u'Leave Allocation',
'parentfield': u'fields', 'parentfield': u'fields',
'parenttype': u'DocType' 'parenttype': u'DocType'
@ -38,8 +38,8 @@
# These values are common for all DocPerm # These values are common for all DocPerm
{ {
'doctype': u'DocPerm', u'doctype': u'DocPerm',
'name': '__common__', u'name': u'__common__',
'parent': u'Leave Allocation', 'parent': u'Leave Allocation',
'parentfield': u'permissions', 'parentfield': u'permissions',
'parenttype': u'DocType', 'parenttype': u'DocType',
@ -48,58 +48,13 @@
# DocType, Leave Allocation # DocType, Leave Allocation
{ {
'doctype': 'DocType', u'doctype': u'DocType',
'name': u'Leave Allocation' u'name': u'Leave Allocation'
},
# DocPerm
{
'amend': 1,
'cancel': 1,
'create': 1,
'doctype': u'DocPerm',
'match': u'owner',
'permlevel': 0,
'role': u'HR User',
'submit': 1,
'write': 1
},
# DocPerm
{
'amend': 0,
'cancel': 0,
'create': 0,
'doctype': u'DocPerm',
'match': u'owner',
'permlevel': 0,
'role': u'HR User',
'submit': 0,
'write': 0
},
# DocPerm
{
'amend': 1,
'cancel': 1,
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'HR Manager',
'submit': 1,
'write': 1
},
# DocPerm
{
'doctype': u'DocPerm',
'permlevel': 1,
'role': u'HR Manager'
}, },
# DocField # DocField
{ {
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'column_break0', 'fieldname': u'column_break0',
'fieldtype': u'Column Break', 'fieldtype': u'Column Break',
'permlevel': 0, 'permlevel': 0,
@ -109,7 +64,7 @@
# DocField # DocField
{ {
'colour': u'White:FFF', 'colour': u'White:FFF',
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'employee', 'fieldname': u'employee',
'fieldtype': u'Link', 'fieldtype': u'Link',
'in_filter': 1, 'in_filter': 1,
@ -125,7 +80,7 @@
# DocField # DocField
{ {
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'employee_name', 'fieldname': u'employee_name',
'fieldtype': u'Data', 'fieldtype': u'Data',
'in_filter': 1, 'in_filter': 1,
@ -137,7 +92,7 @@
# DocField # DocField
{ {
'colour': u'White:FFF', 'colour': u'White:FFF',
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'leave_type', 'fieldname': u'leave_type',
'fieldtype': u'Select', 'fieldtype': u'Select',
'in_filter': 1, 'in_filter': 1,
@ -155,7 +110,7 @@
{ {
'colour': u'White:FFF', 'colour': u'White:FFF',
'default': u'Today', 'default': u'Today',
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'posting_date', 'fieldname': u'posting_date',
'fieldtype': u'Date', 'fieldtype': u'Date',
'hidden': 0, 'hidden': 0,
@ -171,7 +126,7 @@
# DocField # DocField
{ {
'colour': u'White:FFF', 'colour': u'White:FFF',
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'fiscal_year', 'fieldname': u'fiscal_year',
'fieldtype': u'Select', 'fieldtype': u'Select',
'in_filter': 1, 'in_filter': 1,
@ -188,7 +143,7 @@
# DocField # DocField
{ {
'colour': u'White:FFF', 'colour': u'White:FFF',
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'description', 'fieldname': u'description',
'fieldtype': u'Small Text', 'fieldtype': u'Small Text',
'hidden': 0, 'hidden': 0,
@ -201,7 +156,7 @@
# DocField # DocField
{ {
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'column_break1', 'fieldname': u'column_break1',
'fieldtype': u'Column Break', 'fieldtype': u'Column Break',
'permlevel': 0, 'permlevel': 0,
@ -210,7 +165,7 @@
# DocField # DocField
{ {
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'carry_forward', 'fieldname': u'carry_forward',
'fieldtype': u'Check', 'fieldtype': u'Check',
'label': u'Carry Forward', 'label': u'Carry Forward',
@ -220,7 +175,7 @@
# DocField # DocField
{ {
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'carry_forwarded_leaves', 'fieldname': u'carry_forwarded_leaves',
'fieldtype': u'Currency', 'fieldtype': u'Currency',
'label': u'Carry Forwarded Leaves', 'label': u'Carry Forwarded Leaves',
@ -230,7 +185,7 @@
# DocField # DocField
{ {
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'new_leaves_allocated', 'fieldname': u'new_leaves_allocated',
'fieldtype': u'Currency', 'fieldtype': u'Currency',
'label': u'New Leaves Allocated', 'label': u'New Leaves Allocated',
@ -240,7 +195,7 @@
# DocField # DocField
{ {
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'total_leaves_allocated', 'fieldname': u'total_leaves_allocated',
'fieldtype': u'Currency', 'fieldtype': u'Currency',
'label': u'Total Leaves Allocated', 'label': u'Total Leaves Allocated',
@ -250,7 +205,7 @@
# DocField # DocField
{ {
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'amended_from', 'fieldname': u'amended_from',
'fieldtype': u'Data', 'fieldtype': u'Data',
'hidden': 0, 'hidden': 0,
@ -265,7 +220,7 @@
# DocField # DocField
{ {
'description': u'The date at which current entry is corrected in the system.', 'description': u'The date at which current entry is corrected in the system.',
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'amendment_date', 'fieldname': u'amendment_date',
'fieldtype': u'Date', 'fieldtype': u'Date',
'hidden': 0, 'hidden': 0,
@ -275,5 +230,37 @@
'oldfieldtype': u'Date', 'oldfieldtype': u'Date',
'permlevel': 1, 'permlevel': 1,
'print_hide': 1 'print_hide': 1
},
# DocPerm
{
'amend': 1,
'cancel': 1,
'create': 1,
u'doctype': u'DocPerm',
'match': u'owner',
'permlevel': 0,
'role': u'HR User',
'submit': 1,
'write': 1
},
# DocPerm
{
'amend': 1,
'cancel': 1,
'create': 1,
u'doctype': u'DocPerm',
'permlevel': 0,
'role': u'HR Manager',
'submit': 1,
'write': 1
},
# DocPerm
{
u'doctype': u'DocPerm',
'permlevel': 1,
'role': u'All'
} }
] ]

View File

@ -3,11 +3,11 @@
# These values are common in all dictionaries # These values are common in all dictionaries
{ {
'creation': '2012-03-27 14:35:58', u'creation': '2012-05-15 12:14:45',
'docstatus': 0, u'docstatus': 0,
'modified': '2012-03-27 14:45:49', u'modified': '2012-10-02 11:19:44',
'modified_by': u'Administrator', u'modified_by': u'Administrator',
'owner': u'Administrator' u'owner': u'Administrator'
}, },
# These values are common for all DocType # These values are common for all DocType
@ -15,23 +15,23 @@
'_last_update': u'1310019491', '_last_update': u'1310019491',
'autoname': u'LAP/.#####', 'autoname': u'LAP/.#####',
'colour': u'White:FFF', 'colour': u'White:FFF',
'doctype': 'DocType', u'doctype': u'DocType',
'document_type': u'Transaction', 'document_type': u'Transaction',
'is_submittable': 1, 'is_submittable': 1,
'module': u'HR', 'module': u'HR',
'name': '__common__', u'name': u'__common__',
'search_fields': u'employee,employee_name,leave_type,from_date,to_date,total_leave_days,fiscal_year', 'search_fields': u'employee,employee_name,leave_type,from_date,to_date,total_leave_days,fiscal_year',
'section_style': u'Simple', 'section_style': u'Simple',
'show_in_menu': 0, 'show_in_menu': 0,
'subject': u'From %(employee_name)s, %(designation)s', 'subject': u'From %(employee_name)s, %(designation)s',
'tag_fields': u'leave_type', 'tag_fields': u'leave_type',
'version': 17 'version': 1
}, },
# These values are common for all DocField # These values are common for all DocField
{ {
'doctype': u'DocField', u'doctype': u'DocField',
'name': '__common__', u'name': u'__common__',
'parent': u'Leave Application', 'parent': u'Leave Application',
'parentfield': u'fields', 'parentfield': u'fields',
'parenttype': u'DocType' 'parenttype': u'DocType'
@ -39,8 +39,8 @@
# These values are common for all DocPerm # These values are common for all DocPerm
{ {
'doctype': u'DocPerm', u'doctype': u'DocPerm',
'name': '__common__', u'name': u'__common__',
'parent': u'Leave Application', 'parent': u'Leave Application',
'parentfield': u'permissions', 'parentfield': u'permissions',
'parenttype': u'DocType', 'parenttype': u'DocType',
@ -49,85 +49,13 @@
# DocType, Leave Application # DocType, Leave Application
{ {
'doctype': 'DocType', u'doctype': u'DocType',
'name': u'Leave Application' u'name': u'Leave Application'
},
# DocPerm
{
'amend': 1,
'cancel': 1,
'create': 1,
'doctype': u'DocPerm',
'match': u'owner',
'permlevel': 0,
'submit': 1,
'write': 1
},
# DocPerm
{
'amend': 0,
'cancel': 0,
'create': 0,
'doctype': u'DocPerm',
'match': u'owner',
'permlevel': 0,
'submit': 0,
'write': 0
},
# DocPerm
{
'amend': 1,
'cancel': 1,
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'HR User',
'submit': 1,
'write': 1
},
# DocPerm
{
'amend': 1,
'cancel': 1,
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'HR Manager',
'submit': 1,
'write': 1
},
# DocPerm
{
'amend': 0,
'cancel': 0,
'create': 0,
'doctype': u'DocPerm',
'permlevel': 1,
'role': u'HR User',
'submit': 0,
'write': 0
},
# DocPerm
{
'amend': 0,
'cancel': 0,
'create': 0,
'doctype': u'DocPerm',
'permlevel': 1,
'role': u'HR Manager',
'submit': 0,
'write': 0
}, },
# DocField # DocField
{ {
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'column_break0', 'fieldname': u'column_break0',
'fieldtype': u'Column Break', 'fieldtype': u'Column Break',
'permlevel': 0, 'permlevel': 0,
@ -136,7 +64,7 @@
# DocField # DocField
{ {
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'employee', 'fieldname': u'employee',
'fieldtype': u'Link', 'fieldtype': u'Link',
'in_filter': 1, 'in_filter': 1,
@ -149,7 +77,7 @@
# DocField # DocField
{ {
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'employee_name', 'fieldname': u'employee_name',
'fieldtype': u'Data', 'fieldtype': u'Data',
'in_filter': 1, 'in_filter': 1,
@ -160,7 +88,7 @@
# DocField # DocField
{ {
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'leave_type', 'fieldname': u'leave_type',
'fieldtype': u'Select', 'fieldtype': u'Select',
'in_filter': 1, 'in_filter': 1,
@ -173,7 +101,7 @@
# DocField # DocField
{ {
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'leave_balance', 'fieldname': u'leave_balance',
'fieldtype': u'Currency', 'fieldtype': u'Currency',
'label': u'Leave Balance', 'label': u'Leave Balance',
@ -184,7 +112,7 @@
{ {
'colour': u'White:FFF', 'colour': u'White:FFF',
'default': u'Today', 'default': u'Today',
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'posting_date', 'fieldname': u'posting_date',
'fieldtype': u'Date', 'fieldtype': u'Date',
'label': u'Posting Date', 'label': u'Posting Date',
@ -195,7 +123,7 @@
# DocField # DocField
{ {
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'fiscal_year', 'fieldname': u'fiscal_year',
'fieldtype': u'Select', 'fieldtype': u'Select',
'in_filter': 1, 'in_filter': 1,
@ -208,7 +136,7 @@
# DocField # DocField
{ {
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'column_break1', 'fieldname': u'column_break1',
'fieldtype': u'Column Break', 'fieldtype': u'Column Break',
'permlevel': 0, 'permlevel': 0,
@ -218,7 +146,7 @@
# DocField # DocField
{ {
'colour': u'White:FFF', 'colour': u'White:FFF',
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'half_day', 'fieldname': u'half_day',
'fieldtype': u'Check', 'fieldtype': u'Check',
'label': u'Half Day', 'label': u'Half Day',
@ -229,7 +157,7 @@
# DocField # DocField
{ {
'colour': u'White:FFF', 'colour': u'White:FFF',
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'from_date', 'fieldname': u'from_date',
'fieldtype': u'Date', 'fieldtype': u'Date',
'label': u'From Date', 'label': u'From Date',
@ -241,7 +169,7 @@
# DocField # DocField
{ {
'colour': u'White:FFF', 'colour': u'White:FFF',
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'to_date', 'fieldname': u'to_date',
'fieldtype': u'Date', 'fieldtype': u'Date',
'label': u'To Date', 'label': u'To Date',
@ -252,7 +180,7 @@
# DocField # DocField
{ {
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'total_leave_days', 'fieldname': u'total_leave_days',
'fieldtype': u'Currency', 'fieldtype': u'Currency',
'label': u'Total Leave Days', 'label': u'Total Leave Days',
@ -261,7 +189,7 @@
# DocField # DocField
{ {
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'description', 'fieldname': u'description',
'fieldtype': u'Small Text', 'fieldtype': u'Small Text',
'label': u'Description', 'label': u'Description',
@ -271,7 +199,7 @@
# DocField # DocField
{ {
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'letter_head', 'fieldname': u'letter_head',
'fieldtype': u'Link', 'fieldtype': u'Link',
'label': u'Letter Head', 'label': u'Letter Head',
@ -281,7 +209,7 @@
# DocField # DocField
{ {
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'amended_from', 'fieldname': u'amended_from',
'fieldtype': u'Data', 'fieldtype': u'Data',
'label': u'Amended From', 'label': u'Amended From',
@ -290,10 +218,68 @@
# DocField # DocField
{ {
'doctype': u'DocField', u'doctype': u'DocField',
'fieldname': u'amendment_date', 'fieldname': u'amendment_date',
'fieldtype': u'Date', 'fieldtype': u'Date',
'label': u'Amendment Date', 'label': u'Amendment Date',
'permlevel': 1 'permlevel': 1
},
# DocPerm
{
'amend': 0,
'cancel': 0,
'create': 0,
u'doctype': u'DocPerm',
'match': u'owner',
'permlevel': 0,
'role': u'Employee',
'submit': 0,
'write': 0
},
# DocPerm
{
'amend': 1,
'cancel': 1,
'create': 1,
u'doctype': u'DocPerm',
'permlevel': 0,
'role': u'HR User',
'submit': 1,
'write': 1
},
# DocPerm
{
'amend': 1,
'cancel': 1,
'create': 1,
u'doctype': u'DocPerm',
'permlevel': 0,
'role': u'HR Manager',
'submit': 1,
'write': 1
},
# DocPerm
{
u'doctype': u'DocPerm',
'permlevel': 1,
'role': u'HR User'
},
# DocPerm
{
u'doctype': u'DocPerm',
'permlevel': 1,
'role': u'HR Manager'
},
# DocPerm
{
u'doctype': u'DocPerm',
'permlevel': 1,
'role': u'Employee'
} }
] ]

BIN
master.sql.gz Normal file

Binary file not shown.

View File

@ -30,10 +30,7 @@ def execute():
fy_obj = get_obj('Fiscal Year', f[0]) fy_obj = get_obj('Fiscal Year', f[0])
fy_obj.doc.past_year = prev_fy fy_obj.doc.past_year = prev_fy
fy_obj.doc.company = c[0] fy_obj.doc.company = c[0]
fy_obj.doc.save()
fy_obj = get_obj('Fiscal Year', f[0])
fy_obj.repost() fy_obj.repost()
prev_fy = f[0] prev_fy = f[0]
sql("commit") webnotes.conn.commit()
sql("start transaction") webnotes.conn.begin()

View File

View File

@ -0,0 +1,39 @@
# ERPNext - web based ERP (http://erpnext.com)
# Copyright (C) 2012 Web Notes Technologies Pvt Ltd
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from __future__ import unicode_literals
def execute():
import webnotes
webnotes.conn.sql("""
delete from `tabDocPerm`
where
role in ('Sales User', 'Sales Manager', 'Sales Master Manager',
'Purchase User', 'Purchase Manager', 'Purchase Master Manager')
and parent = 'Sales and Purchase Return Tool'
""")
webnotes.conn.sql("""delete from `tabDocPerm` where ifnull(role, '') = ''""")
if not webnotes.conn.sql("""select name from `tabDocPerm` where parent = 'Leave Application'
and role = 'Employee' and permlevel = 1"""):
from webnotes.model.code import get_obj
from webnotes.model.doc import addchild
leave_app = get_obj('DocType', 'Leave Application', with_children=1)
ch = addchild(leave_app.doc, 'permissions', 'DocPerm')
ch.role = 'Employee'
ch.permlevel = 1
ch.read = 1
ch.save()

View File

@ -607,4 +607,8 @@ patch_list = [
'patch_module': 'patches.september_2012', 'patch_module': 'patches.september_2012',
'patch_file': 'profile_delete_permission', 'patch_file': 'profile_delete_permission',
}, },
{
'patch_module': 'patches.october_2012',
'patch_file': 'update_permission',
},
] ]

View File

@ -59,17 +59,11 @@ cur_frm.cscript.onload_post_render = function(doc, cdt, cdn) {
} }
} }
// fetch cur_frm.cscript.item_code = function(doc, cdt, cdn) {
// =============================================================== var d = locals[cdt][cdn];
cur_frm.cscript.set_fetch = function() { if (d.item_code) {
// item get_server_fields('get_item_details',d.item_code, 'enquiry_details',doc, cdt,cdn,1);
cur_frm.add_fetch('item_code', 'item_name', 'item_name'); }
cur_frm.add_fetch('item_code', 'stock_uom', 'uom');
cur_frm.add_fetch('item_code', 'description', 'description');
cur_frm.add_fetch('item_code', 'item_group', 'item_group');
cur_frm.add_fetch('item_code', 'brand', 'brand');
// customer
} }
// hide - unhide fields on basis of enquiry_from lead or customer // hide - unhide fields on basis of enquiry_from lead or customer

View File

@ -42,13 +42,21 @@ class DocType(TransactionBase):
self.fname = 'enq_details' self.fname = 'enq_details'
self.tname = 'Opportunity Item' self.tname = 'Opportunity Item'
# Autoname
# ====================================================================================================================
def autoname(self): def autoname(self):
self.doc.name = make_autoname(self.doc.naming_series+'.####') self.doc.name = make_autoname(self.doc.naming_series+'.####')
def get_item_details(self, item_code):
item = sql("""select item_name, stock_uom, description_html, description, item_group, brand
from `tabItem` where name = %s""", item_code, as_dict=1)
ret = {
'item_name': item and item[0]['item_name'] or '',
'uom': item and item[0]['stock_uom'] or '',
'description': item and item[0]['description_html'] or item[0]['description'] or '',
'item_group': item and item[0]['item_group'] or '',
'brand': item and item[0]['brand'] or ''
}
return ret
#--------Get customer address-------
# ====================================================================================================================
def get_cust_address(self,name): def get_cust_address(self,name):
details = sql("select customer_name, address, territory, customer_group from `tabCustomer` where name = '%s' and docstatus != 2" %(name), as_dict = 1) details = sql("select customer_name, address, territory, customer_group from `tabCustomer` where name = '%s' and docstatus != 2" %(name), as_dict = 1)
if details: if details:
@ -71,9 +79,7 @@ class DocType(TransactionBase):
else: else:
msgprint("Customer : %s does not exist in system." % (name)) msgprint("Customer : %s does not exist in system." % (name))
raise Exception raise Exception
# ====================================================================================================================
def get_contact_details(self, arg): def get_contact_details(self, arg):
arg = eval(arg) arg = eval(arg)
contact = sql("select contact_no, email_id from `tabContact` where contact_name = '%s' and customer_name = '%s'" %(arg['contact_person'],arg['customer']), as_dict = 1) contact = sql("select contact_no, email_id from `tabContact` where contact_name = '%s' and customer_name = '%s'" %(arg['contact_person'],arg['customer']), as_dict = 1)
@ -83,18 +89,14 @@ class DocType(TransactionBase):
} }
return ret return ret
# ====================================================================================================================
def on_update(self): def on_update(self):
# Add to calendar # Add to calendar
#if self.doc.contact_date and self.doc.last_contact_date != self.doc.contact_date:
if self.doc.contact_date and self.doc.contact_date_ref != self.doc.contact_date: if self.doc.contact_date and self.doc.contact_date_ref != self.doc.contact_date:
if self.doc.contact_by: if self.doc.contact_by:
self.add_calendar_event() self.add_calendar_event()
set(self.doc, 'contact_date_ref',self.doc.contact_date) set(self.doc, 'contact_date_ref',self.doc.contact_date)
set(self.doc, 'status', 'Draft') set(self.doc, 'status', 'Draft')
# Add to Calendar
# ====================================================================================================================
def add_calendar_event(self): def add_calendar_event(self):
desc='' desc=''
user_lst =[] user_lst =[]
@ -133,8 +135,6 @@ class DocType(TransactionBase):
ch.person = d ch.person = d
ch.save(1) ch.save(1)
#--------------Validation For Last Contact Date-----------------
# ====================================================================================================================
def set_last_contact_date(self): def set_last_contact_date(self):
if self.doc.contact_date_ref and self.doc.contact_date_ref != self.doc.contact_date: if self.doc.contact_date_ref and self.doc.contact_date_ref != self.doc.contact_date:
if getdate(self.doc.contact_date_ref) < getdate(self.doc.contact_date): if getdate(self.doc.contact_date_ref) < getdate(self.doc.contact_date):
@ -142,16 +142,12 @@ class DocType(TransactionBase):
else: else:
msgprint("Contact Date Cannot be before Last Contact Date") msgprint("Contact Date Cannot be before Last Contact Date")
raise Exception raise Exception
# check if item present in item table
# ====================================================================================================================
def validate_item_details(self): def validate_item_details(self):
if not getlist(self.doclist, 'enquiry_details'): if not getlist(self.doclist, 'enquiry_details'):
msgprint("Please select items for which enquiry needs to be made") msgprint("Please select items for which enquiry needs to be made")
raise Exception raise Exception
#check if enquiry date in the range of fiscal year selected
#=====================================================
def validate_fiscal_year(self): def validate_fiscal_year(self):
fy=sql("select year_start_date from `tabFiscal Year` where name='%s'"%self.doc.fiscal_year) fy=sql("select year_start_date from `tabFiscal Year` where name='%s'"%self.doc.fiscal_year)
ysd=fy and fy[0][0] or "" ysd=fy and fy[0][0] or ""
@ -166,19 +162,15 @@ class DocType(TransactionBase):
elif self.doc.enquiry_from == 'Customer' and not self.doc.customer: elif self.doc.enquiry_from == 'Customer' and not self.doc.customer:
msgprint("Customer is mandatory if 'Opportunity From' is selected as Customer", raise_exception=1) msgprint("Customer is mandatory if 'Opportunity From' is selected as Customer", raise_exception=1)
def validate(self): def validate(self):
self.validate_fiscal_year() self.validate_fiscal_year()
self.set_last_contact_date() self.set_last_contact_date()
self.validate_item_details() self.validate_item_details()
self.validate_lead_cust() self.validate_lead_cust()
# On Submit Functions
# ====================================================================================================================
def on_submit(self): def on_submit(self):
set(self.doc, 'status', 'Submitted') set(self.doc, 'status', 'Submitted')
# ====================================================================================================================
def on_cancel(self): def on_cancel(self):
chk = sql("select t1.name from `tabQuotation` t1, `tabQuotation Item` t2 where t2.parent = t1.name and t1.docstatus=1 and (t1.status!='Order Lost' and t1.status!='Cancelled') and t2.prevdoc_docname = %s",self.doc.name) chk = sql("select t1.name from `tabQuotation` t1, `tabQuotation Item` t2 where t2.parent = t1.name and t1.docstatus=1 and (t1.status!='Order Lost' and t1.status!='Cancelled') and t2.prevdoc_docname = %s",self.doc.name)
if chk: if chk:
@ -187,8 +179,6 @@ class DocType(TransactionBase):
else: else:
set(self.doc, 'status', 'Cancelled') set(self.doc, 'status', 'Cancelled')
# declare as enquiry lost
#---------------------------
def declare_enquiry_lost(self,arg): def declare_enquiry_lost(self,arg):
chk = sql("select t1.name from `tabQuotation` t1, `tabQuotation Item` t2 where t2.parent = t1.name and t1.docstatus=1 and (t1.status!='Order Lost' and t1.status!='Cancelled') and t2.prevdoc_docname = %s",self.doc.name) chk = sql("select t1.name from `tabQuotation` t1, `tabQuotation Item` t2 where t2.parent = t1.name and t1.docstatus=1 and (t1.status!='Order Lost' and t1.status!='Cancelled') and t2.prevdoc_docname = %s",self.doc.name)
if chk: if chk:
@ -198,32 +188,3 @@ class DocType(TransactionBase):
set(self.doc, 'status', 'Opportunity Lost') set(self.doc, 'status', 'Opportunity Lost')
set(self.doc, 'order_lost_reason', arg) set(self.doc, 'order_lost_reason', arg)
return 'true' return 'true'
#---------------------- Add details in follow up table----------------
# ====================================================================================================================
def add_in_follow_up(self,message,type):
import datetime
child = addchild( self.doc, 'follow_up', 'Communication Log', 1, self.doclist)
child.date = datetime.datetime.now().date().strftime('%Y-%m-%d')
child.notes = message
child.follow_up_type = type
child.save()
#-------------------SMS----------------------------------------------
# ====================================================================================================================
def send_sms(self):
if not self.doc.sms_message:
msgprint("Please enter message in SMS Section ")
raise Exception
elif not getlist(self.doclist, 'enquiry_sms_detail'):
msgprint("Please mention mobile no. to which sms needs to be sent")
raise Exception
else:
receiver_list = []
for d in getlist(self.doclist,'enquiry_sms_detail'):
if d.other_mobile_no:
receiver_list.append(d.other_mobile_no)
if receiver_list:
msgprint(get_obj('SMS Control', 'SMS Control').send_sms(receiver_list, self.doc.sms_message))
self.add_in_follow_up(self.doc.sms_message,'SMS')

View File

@ -37,7 +37,7 @@ cur_frm.cscript.onload = function(doc, cdt, cdn) {
// load default charges // load default charges
if(doc.__islocal && !doc.customer){ if(doc.__islocal && !doc.customer){
hide_field(['customer_address','contact_person','customer_name','address_display','contact_display','contact_mobile','contact_email','territory','customer_group','shipping_address']); hide_field(['customer_address','contact_person','customer_name','address_display','contact_display','contact_mobile','contact_email','territory','customer_group']);
} }
} }
@ -100,7 +100,7 @@ cur_frm.cscript.customer = function(doc,dt,dn) {
var callback = function(r,rt) { var callback = function(r,rt) {
var callback2 = function(r, rt) { var callback2 = function(r, rt) {
if(doc.customer) unhide_field(['customer_address', 'contact_person', 'territory','customer_group','shipping_address']); if(doc.customer) unhide_field(['customer_address', 'contact_person', 'territory','customer_group']);
cur_frm.refresh(); cur_frm.refresh();
if(!onload && (pl != doc.price_list_name)) cur_frm.cscript.price_list_name(doc, dt, dn); if(!onload && (pl != doc.price_list_name)) cur_frm.cscript.price_list_name(doc, dt, dn);
@ -141,8 +141,8 @@ cur_frm.cscript.pull_quotation_details = function(doc,dt,dn) {
if(r.message){ if(r.message){
doc.quotation_no = r.message; doc.quotation_no = r.message;
if(doc.quotation_no) { if(doc.quotation_no) {
unhide_field(['quotation_date','customer_address','contact_person','territory','customer_group','shipping_address']); unhide_field(['quotation_date', 'customer_address', 'contact_person', 'territory', 'customer_group']);
if(doc.customer) get_server_fields('get_shipping_address',doc.customer,'',doc, dt, dn, 0); if(doc.customer) get_server_fields('get_shipping_address', doc.customer, '', doc, dt, dn, 0);
} }
cur_frm.refresh(); cur_frm.refresh();
} }

View File

@ -19,29 +19,29 @@ cur_frm.cscript.refresh = function(doc, cdt, cdn) {
cur_frm.set_intro("Save this list to begin."); cur_frm.set_intro("Save this list to begin.");
return; return;
} }
if(!doc.file_list) { if (wn.boot.profile.can_create.indexOf(cdt) !== -1) {
cur_frm.set_intro('<p>1. Click on "Download Template" \ if(!doc.file_list) {
to download the template of all Items.</p>' cur_frm.set_intro('<p>1. Click on "Download Template" \
+'<p>2. Update prices and Currency.</p>' to download the template of all Items.</p>'
+'<p>3. Save it as a CSV (.csv) file.</p>' +'<p>2. Update prices and Currency.</p>'
+'<p>4. Upload the file.</p>'); +'<p>3. Save it as a CSV (.csv) file.</p>'
+'<p>4. Upload the file.</p>');
cur_frm.add_custom_button('Download Template', function() { cur_frm.add_custom_button('Download Template', function() {
$c_obj_csv(cur_frm.get_doclist(), 'download_template'); $c_obj_csv(cur_frm.get_doclist(), 'download_template');
}, 'icon-download') }, 'icon-download')
cur_frm.add_custom_button('Upload Price List', function() { cur_frm.add_custom_button('Upload Price List', function() {
cur_frm.attachments.add_attachment(); cur_frm.attachments.add_attachment();
}, 'icon-upload') }, 'icon-upload');
} else {
cur_frm.set_intro('To update prices from the attachment, click on "Update Prices". \
To reset prices, delete the attachment (in the sidebar) and upload again.');
// Update Prices
} else { cur_frm.add_custom_button('Update Prices', function() {
cur_frm.set_intro('To update prices from the attachment, click on "Update Prices". \ cur_frm.call_server('update_prices');
To reset prices, delete the attachment (in the sidebar) and upload again.'); }, 'icon-refresh');
}
// Update Prices
cur_frm.add_custom_button('Update Prices', function() {
cur_frm.call_server('update_prices');
}, 'icon-refresh')
} }
} }

View File

@ -231,7 +231,12 @@ class DocType:
pr.name = pr.email = user_email pr.name = pr.email = user_email
pr.enabled = 1 pr.enabled = 1
pr.save(1) pr.save(1)
if pwd: webnotes.conn.sql("UPDATE `tabProfile` SET password=PASSWORD(%s) WHERE name=%s", (pwd, user_email)) if pwd:
webnotes.conn.sql("""insert into __Auth (user, `password`)
values (%s, password(%s))
on duplicate key update `password`=password(%s)""",
(user_email, pwd, pwd))
self.add_roles(pr) self.add_roles(pr)
def add_roles(self, pr): def add_roles(self, pr):

View File

@ -118,8 +118,7 @@ def check_if_expired():
# if expired, stop user from logging in # if expired, stop user from logging in
from webnotes.utils import formatdate from webnotes.utils import formatdate
msg = """Oops! Your subscription expired on <b>%s</b>. msg = """Oops! Your subscription expired on <b>%s</b>.<br>""" % formatdate(conf.expires_on)
<br>Nothing catastrophic.<br>""" % formatdate(conf.expires_on)
if 'System Manager' in webnotes.user.roles: if 'System Manager' in webnotes.user.roles:
msg += """Just drop in a mail at <b>support@erpnext.com</b> and msg += """Just drop in a mail at <b>support@erpnext.com</b> and

View File

@ -106,6 +106,7 @@ cur_frm.fields_dict['item_group'].get_query = function(doc,cdt,cdn) {
cur_frm.cscript.add_image = function(doc, dt, dn) { cur_frm.cscript.add_image = function(doc, dt, dn) {
if(!doc.file_list) { if(!doc.file_list) {
msgprint('Please attach a file first!'); msgprint('Please attach a file first!');
return;
} }
var f = doc.file_list.split('\n')[0]; var f = doc.file_list.split('\n')[0];

View File

@ -3,9 +3,9 @@
# These values are common in all dictionaries # These values are common in all dictionaries
{ {
u'creation': '2012-07-03 13:29:45', u'creation': '2012-09-19 12:24:41',
u'docstatus': 0, u'docstatus': 0,
u'modified': '2012-09-17 10:55:11', u'modified': '2012-10-02 10:40:14',
u'modified_by': u'Administrator', u'modified_by': u'Administrator',
u'owner': u'wasim@webnotestech.com' u'owner': u'wasim@webnotestech.com'
}, },
@ -230,45 +230,37 @@
# DocPerm # DocPerm
{ {
'amend': 0,
'cancel': 0,
'create': 1, 'create': 1,
u'doctype': u'DocPerm', u'doctype': u'DocPerm',
'permlevel': 0, 'permlevel': 0,
'role': u'Accounts Manager', 'role': u'Material User',
'submit': 0,
'write': 1 'write': 1
}, },
# DocPerm
{
u'doctype': u'DocPerm',
'permlevel': 1,
'role': u'All'
},
# DocPerm # DocPerm
{ {
'amend': 0, 'amend': 0,
'cancel': 0, 'cancel': 0,
'create': 0, 'create': 1,
u'doctype': u'DocPerm', u'doctype': u'DocPerm',
'permlevel': 1, 'permlevel': 0,
'role': u'Material Manager',
'submit': 0,
'write': 1
},
# DocPerm
{
'amend': 0,
'cancel': 0,
'create': 1,
u'doctype': u'DocPerm',
'permlevel': 0,
'role': u'System Manager', 'role': u'System Manager',
'submit': 0, 'submit': 0,
'write': 0
},
# DocPerm
{
u'doctype': u'DocPerm',
'permlevel': 1,
'role': u'Accounts Manager'
},
# DocPerm
{
'create': 1,
u'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Purchase Manager',
'write': 1 'write': 1
}, },
@ -277,25 +269,7 @@
'create': 1, 'create': 1,
u'doctype': u'DocPerm', u'doctype': u'DocPerm',
'permlevel': 0, 'permlevel': 0,
'role': u'Purchase User', 'role': u'Accounts Manager',
'write': 1
},
# DocPerm
{
'create': 1,
u'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Sales Manager',
'write': 1
},
# DocPerm
{
'create': 1,
u'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Sales User',
'write': 1 'write': 1
}, },
@ -308,98 +282,10 @@
'write': 1 'write': 1
}, },
# DocPerm
{
'amend': 0,
'cancel': 0,
'create': 1,
u'doctype': u'DocPerm',
'permlevel': 0,
'role': u'System Manager',
'submit': 0,
'write': 1
},
# DocPerm # DocPerm
{ {
u'doctype': u'DocPerm', u'doctype': u'DocPerm',
'permlevel': 1, 'permlevel': 1,
'role': u'Accounts User' 'role': u'All'
},
# DocPerm
{
u'doctype': u'DocPerm',
'permlevel': 1,
'role': u'Sales User'
},
# DocPerm
{
u'doctype': u'DocPerm',
'permlevel': 1,
'role': u'Sales Manager'
},
# DocPerm
{
u'doctype': u'DocPerm',
'permlevel': 1,
'role': u'Purchase User'
},
# DocPerm
{
u'doctype': u'DocPerm',
'permlevel': 1,
'role': u'Purchase Manager'
},
# DocPerm
{
'amend': 0,
'cancel': 0,
'create': 0,
u'doctype': u'DocPerm',
'permlevel': 1,
'role': u'Material Manager',
'submit': 0,
'write': 0
},
# DocPerm
{
'amend': 0,
'cancel': 0,
'create': 1,
u'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Material Manager',
'submit': 0,
'write': 1
},
# DocPerm
{
'amend': 0,
'cancel': 0,
'create': 0,
u'doctype': u'DocPerm',
'permlevel': 1,
'role': u'Material User',
'submit': 0,
'write': 0
},
# DocPerm
{
'amend': 0,
'cancel': 0,
'create': 1,
u'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Material User',
'submit': 0,
'write': 1
} }
] ]