Merge branch 'master' of github.com:webnotes/erpnext
diff --git a/accounts/doctype/form_16a/form_16a.py b/accounts/doctype/form_16a/form_16a.py
index 7d569b7..292c52a 100644
--- a/accounts/doctype/form_16a/form_16a.py
+++ b/accounts/doctype/form_16a/form_16a.py
@@ -18,85 +18,92 @@
from utilities.transaction_base import TransactionBase
class DocType(TransactionBase):
- def __init__(self,d,dl):
- self.doc, self.doclist = d, dl
-
- def autoname(self):
- self.doc.name = make_autoname('Form 16A' + '/.#####')
+ def __init__(self,d,dl):
+ self.doc, self.doclist = d, dl
+
+ def autoname(self):
+ self.doc.name = make_autoname('Form 16A' + '/.#####')
- # Get pan no and tan no from company
- #-------------------------------------
- def get_registration_details(self):
- comp_det=sql("Select address,registration_details from `tabCompany` where name = '%s'"%(self.doc.company))
- if not comp_det:
- msgprint("Registration Details is not mentioned in comapny")
- ret = {
- 'company_address':'',
- 'registration_details': ''
- }
- else:
- ret = {
- 'company_address': cstr(comp_det[0][0]),
- 'registration_details': cstr(comp_det[0][1])
- }
- return cstr(ret)
-
- # Get party details
- #------------------
- def get_party_det(self):
- party_det=sql("Select pan_number, address from `tabAccount` where name = '%s'" % self.doc.party_name)
- ret = {
- 'pan_number': cstr(party_det[0][0]) ,
- 'party_address': cstr(party_det[0][1])
- }
- return cstr(ret)
-
- # Get TDS Return acknowledgement
- #-------------------------------
- def get_return_ack_details(self):
- self.doc.clear_table(self.doclist, 'form_16A_ack_details')
- if not (self.doc.from_date and self.doc.to_date):
- msgprint("Please enter From Date, To Date")
- else:
- ack = sql("select quarter, acknowledgement_no from `tabTDS Return Acknowledgement` where date_of_receipt>='%s' and date_of_receipt<='%s' and tds_category = '%s' order by date_of_receipt ASC" % (self.doc.from_date, self.doc.to_date, self.doc.tds_category))
- for d in ack:
- ch = addchild(self.doc, 'form_16A_ack_details', 'Form 16A Ack Detail', 1, self.doclist)
- ch.quarter = d[0]
- ch.ack_no = d[1]
-
- # Get tds payment details
- #-------------------------------
- def get_tds(self):
- self.doc.clear_table(self.doclist,'form_16A_tax_details')
- import datetime
- if self.doc.from_date and self.doc.to_date and self.doc.tds_category:
- tot=0.0
- party_tds_list=sql("select t2.amount_paid,t2.date_of_payment,t2.tds_amount,t2.cess_on_tds, t2.total_tax_amount, t1.cheque_no, t1.bsr_code, t1.date_of_receipt, t1.challan_id from `tabTDS Payment` t1, `tabTDS Payment Detail` t2 where t1.tds_category='%s' and t2.party_name='%s' and t1.from_date >= '%s' and t1.to_date <= '%s' and t2.total_tax_amount>0 and t2.parent=t1.name and t1.docstatus=1" % (self.doc.tds_category,self.doc.party_name,self.doc.from_date,self.doc.to_date))
- for s in party_tds_list:
- child = addchild(self.doc, 'form_16A_tax_details', 'Form 16A Tax Detail', 1, self.doclist)
- child.amount_paid = s and flt(s[0]) or ''
- child.date_of_payment =s and s[1].strftime('%Y-%m-%d') or ''
- child.tds_main = s and flt(s[2]) or ''
- child.surcharge = 0
- child.cess_on_tds = s and flt(s[3]) or ''
- child.total_tax_deposited = s and flt(s[4]) or ''
- child.cheque_no = s and s[5] or ''
- child.bsr_code = s and s[6] or ''
- child.tax_deposited_date = s and s[7].strftime('%Y-%m-%d') or ''
- child.challan_no = s and s[8] or ''
- tot=flt(tot)+flt(s[4])
- self.doc.total_amount = flt(tot)
- else:
- msgprint("Plaese enter from date, to date and TDS category")
+ # Get pan no and tan no from company
+ #-------------------------------------
+ def get_registration_details(self):
+ comp_det=sql("Select address,registration_details from `tabCompany` where name = '%s'"%(self.doc.company))
+ if not comp_det:
+ msgprint("Registration Details is not mentioned in comapny")
+ ret = {
+ 'company_address':'',
+ 'registration_details': ''
+ }
+ else:
+ ret = {
+ 'company_address': cstr(comp_det[0][0]),
+ 'registration_details': cstr(comp_det[0][1])
+ }
+ return cstr(ret)
-
- # validate
- #----------------
- def validate(self):
- tot=0.0
- for d in getlist(self.doclist,'form_16A_tax_details'):
- tot=flt(tot)+flt(d.total_tax_deposited)
-
- dcc = TransactionBase().get_company_currency(self.doc.company)
- self.doc.total_amount = flt(tot)
- self.doc.in_words = get_obj('Sales Common').get_total_in_words(dcc, self.doc.total_amount)
+ # Get party details
+ #------------------
+ def get_party_det(self):
+ party_det=sql("select master_type, master_name from `tabAccount` where name='%s'" % self.doc.party_name)
+ if party_det and party_det[0][0]=='Supplier':
+ try:
+ rec = sql("select name, address_line1, address_line2, city, country, pincode, state from `tabAddress` where supplier = '%s' and docstatus != 2 order by is_primary_address desc limit 1" %(party_det[0][1]), as_dict = 1)
+ address_display = cstr((rec[0]['address_line1'] and rec[0]['address_line1'] or '')) + cstr((rec[0]['address_line2'] and '\n' + rec[0]['address_line2'] or '')) + cstr((rec[0]['city'] and '\n'+rec[0]['city'] or '')) + cstr((rec[0]['pincode'] and '\n' + rec[0]['pincode'] or '')) + cstr((rec[0]['state'] and '\n'+rec[0]['state'] or '')) + cstr((rec[0]['country'] and '\n'+rec[0]['country'] or ''))
+ except:
+ address_display = ''
+
+ ret = {
+ 'party_address': cstr(address_display)
+ }
+
+ return cstr(ret)
+
+ # Get TDS Return acknowledgement
+ #-------------------------------
+ def get_return_ack_details(self):
+ self.doc.clear_table(self.doclist, 'form_16A_ack_details')
+ if not (self.doc.from_date and self.doc.to_date):
+ msgprint("Please enter From Date, To Date")
+ else:
+ ack = sql("select quarter, acknowledgement_no from `tabTDS Return Acknowledgement` where date_of_receipt>='%s' and date_of_receipt<='%s' and tds_category = '%s' order by date_of_receipt ASC" % (self.doc.from_date, self.doc.to_date, self.doc.tds_category))
+ for d in ack:
+ ch = addchild(self.doc, 'form_16A_ack_details', 'Form 16A Ack Detail', 1, self.doclist)
+ ch.quarter = d[0]
+ ch.ack_no = d[1]
+
+ # Get tds payment details
+ #-------------------------------
+ def get_tds(self):
+ self.doc.clear_table(self.doclist,'form_16A_tax_details')
+ import datetime
+ if self.doc.from_date and self.doc.to_date and self.doc.tds_category:
+ tot=0.0
+ party_tds_list=sql("select t2.amount_paid,t2.date_of_payment,t2.tds_amount,t2.cess_on_tds, t2.total_tax_amount, t1.cheque_no, t1.bsr_code, t1.date_of_receipt, t1.challan_id from `tabTDS Payment` t1, `tabTDS Payment Detail` t2 where t1.tds_category='%s' and t2.party_name='%s' and t1.from_date >= '%s' and t1.to_date <= '%s' and t2.total_tax_amount>0 and t2.parent=t1.name and t1.docstatus=1" % (self.doc.tds_category,self.doc.party_name,self.doc.from_date,self.doc.to_date))
+ for s in party_tds_list:
+ child = addchild(self.doc, 'form_16A_tax_details', 'Form 16A Tax Detail', 1, self.doclist)
+ child.amount_paid = s and flt(s[0]) or ''
+ child.date_of_payment =s and s[1].strftime('%Y-%m-%d') or ''
+ child.tds_main = s and flt(s[2]) or ''
+ child.surcharge = 0
+ child.cess_on_tds = s and flt(s[3]) or ''
+ child.total_tax_deposited = s and flt(s[4]) or ''
+ child.cheque_no = s and s[5] or ''
+ child.bsr_code = s and s[6] or ''
+ child.tax_deposited_date = s and s[7].strftime('%Y-%m-%d') or ''
+ child.challan_no = s and s[8] or ''
+ tot=flt(tot)+flt(s[4])
+ self.doc.total_amount = flt(tot)
+ else:
+ msgprint("Plaese enter from date, to date and TDS category")
+
+
+ # validate
+ #----------------
+ def validate(self):
+ tot=0.0
+ for d in getlist(self.doclist,'form_16A_tax_details'):
+ tot=flt(tot)+flt(d.total_tax_deposited)
+
+ dcc = TransactionBase().get_company_currency(self.doc.company)
+ self.doc.total_amount = flt(tot)
+ self.doc.in_words = get_obj('Sales Common').get_total_in_words(dcc, self.doc.total_amount)
diff --git a/hr/doctype/leave_application/leave_application.txt b/hr/doctype/leave_application/leave_application.txt
index a95f4ce..11d01e6 100644
--- a/hr/doctype/leave_application/leave_application.txt
+++ b/hr/doctype/leave_application/leave_application.txt
@@ -3,16 +3,16 @@
# These values are common in all dictionaries
{
- 'creation': '2011-02-10 14:10:08',
+ 'creation': '2011-02-17 13:25:56',
'docstatus': 0,
- 'modified': '2011-02-17 13:44:37',
+ 'modified': '2011-07-08 13:28:15',
'modified_by': 'Administrator',
'owner': 'Administrator'
},
# These values are common for all DocType
{
- '_last_update': '1305714022',
+ '_last_update': '1310019491',
'autoname': 'LAP/.#####',
'colour': 'White:FFF',
'doctype': 'DocType',
@@ -24,7 +24,7 @@
'show_in_menu': 0,
'subject': 'From %(employee_name)s, %(designation)s',
'tag_fields': 'leave_type',
- 'version': 18
+ 'version': 17
},
# These values are common for all DocField
@@ -54,37 +54,24 @@
# DocPerm
{
- 'amend': 1,
- 'cancel': 1,
+ 'amend': 0,
+ 'cancel': 0,
'create': 1,
'doctype': 'DocPerm',
'idx': 1,
- 'match': 'owner',
'permlevel': 0,
- 'submit': 1,
+ 'role': 'Employee',
+ 'submit': 0,
'write': 1
},
# DocPerm
{
- 'amend': 0,
- 'cancel': 0,
- 'create': 0,
- 'doctype': 'DocPerm',
- 'idx': 2,
- 'match': 'owner',
- 'permlevel': 0,
- 'submit': 0,
- 'write': 0
- },
-
- # DocPerm
- {
'amend': 1,
'cancel': 1,
'create': 1,
'doctype': 'DocPerm',
- 'idx': 3,
+ 'idx': 2,
'permlevel': 0,
'role': 'HR User',
'submit': 1,
@@ -97,7 +84,7 @@
'cancel': 1,
'create': 1,
'doctype': 'DocPerm',
- 'idx': 4,
+ 'idx': 3,
'permlevel': 0,
'role': 'HR Manager',
'submit': 1,
@@ -106,24 +93,33 @@
# DocPerm
{
+ 'amend': 0,
+ 'cancel': 0,
+ 'create': 0,
'doctype': 'DocPerm',
- 'idx': 5,
+ 'idx': 4,
'permlevel': 1,
- 'role': 'HR User'
+ 'role': 'HR User',
+ 'submit': 0,
+ 'write': 0
},
# DocPerm
{
+ 'amend': 0,
+ 'cancel': 0,
+ 'create': 0,
'doctype': 'DocPerm',
- 'idx': 6,
+ 'idx': 5,
'permlevel': 1,
- 'role': 'HR Manager'
+ 'role': 'HR Manager',
+ 'submit': 0,
+ 'write': 0
},
# DocField
{
'doctype': 'DocField',
- 'fieldname': 'column_break1',
'fieldtype': 'Column Break',
'idx': 1,
'permlevel': 0,
@@ -211,7 +207,6 @@
# DocField
{
'doctype': 'DocField',
- 'fieldname': 'column_break8',
'fieldtype': 'Column Break',
'idx': 8,
'permlevel': 0,
@@ -278,9 +273,20 @@
# DocField
{
'doctype': 'DocField',
+ 'fieldname': 'letter_head',
+ 'fieldtype': 'Link',
+ 'idx': 14,
+ 'label': 'Letter Head',
+ 'options': 'Letter Head',
+ 'permlevel': 0
+ },
+
+ # DocField
+ {
+ 'doctype': 'DocField',
'fieldname': 'amended_from',
'fieldtype': 'Data',
- 'idx': 14,
+ 'idx': 15,
'label': 'Amended From',
'permlevel': 1
},
@@ -290,7 +296,7 @@
'doctype': 'DocField',
'fieldname': 'amendment_date',
'fieldtype': 'Date',
- 'idx': 15,
+ 'idx': 16,
'label': 'Amendment Date',
'permlevel': 1
}
diff --git a/patches/patch.py b/patches/patch.py
index 56004a8..87b2f78 100644
--- a/patches/patch.py
+++ b/patches/patch.py
@@ -1,7 +1,7 @@
# REMEMBER to update this
# ========================
-last_patch = 320
+last_patch = 322
#-------------------------------------------
@@ -1281,3 +1281,7 @@
sql("delete from tabFeed where doc_name like 'New %'")
elif patch_no == 320:
reload_doc('setup', 'doctype', 'series_detail')
+ elif patch_no == 321:
+ reload_doc('hr','doctype','leave_application')
+ elif patch_no == 322:
+ sql("delete from `tabDocField` where parent = 'Leave Application' and fieldname = 'latter_head'")
diff --git a/setup/doctype/setup_control/setup_control.py b/setup/doctype/setup_control/setup_control.py
index 7cbf4d3..1b30660 100644
--- a/setup/doctype/setup_control/setup_control.py
+++ b/setup/doctype/setup_control/setup_control.py
@@ -58,7 +58,8 @@
# Company
master_dict = {'Company':{'company_name':company_name,
- 'abbr':comp_abbr
+ 'abbr':comp_abbr,
+ 'default_currency':currency
}}
self.create_records(master_dict)
@@ -74,7 +75,9 @@
'pr_required':'No',
'emp_created_by':'Naming Series',
'cust_master_name':'Customer Name',
- 'supp_master_name':'Supplier Name'}
+ 'supp_master_name':'Supplier Name',
+ 'default_currency_format': (currency=='INR') and 'Lacs' or 'Millions'
+ }
# Set
self.set_defaults(def_args)
diff --git a/support/doctype/support_ticket/__init__.py b/support/doctype/support_ticket/__init__.py
index 959a751..0ca33ec 100644
--- a/support/doctype/support_ticket/__init__.py
+++ b/support/doctype/support_ticket/__init__.py
@@ -35,7 +35,7 @@
st = get_obj('Support Ticket', thread_id)
st.make_response_record(content, mail.mail['From'], content_type)
- webnotes.conn.set(st.doc, 'status', 'To Reply')
+ webnotes.conn.set(st.doc, 'status', 'Open')
update_feed(st.doc)
return
@@ -54,7 +54,7 @@
d.save(1)
# update feed
- update_feed(d)
+ update_feed(d)
def get_support_mails():
@@ -62,3 +62,9 @@
Gets new emails from support inbox and updates / creates Support Ticket records
"""
SupportMailbox().get_messages()
+
+def auto_close_tickets():
+ """
+ Auto Closes Waiting for Customer Support Ticket after 15 days
+ """
+ webnotes.conn.sql("update `tabSupport Ticket` set status = 'Closed' where status = 'Waiting for Customer' and date_sub(curdate(),interval 15 Day) > modified")