mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-20 05:29:18 +00:00
Merge branch 'master' of github.com:webnotes/erpnext
This commit is contained in:
@@ -1 +1 @@
|
|||||||
[{'doc_type': 'Journal Voucher', 'modified_by': 'nabin@webnotestech.com', 'name': 'Journal Voucher', 'parent': None, 'creation': '2009-03-12 12:09:24', 'modified': '2010-04-30 17:56:41', 'module': 'Accounts', 'doctype': 'GL Mapper', 'idx': None, 'parenttype': None, 'owner': 'Administrator', 'docstatus': 0, 'parentfield': None}, {'creation': '2009-03-12 12:09:24', 'voucher_type': 'parent:doctype', 'doctype': 'GL Mapper Detail', 'owner': 'Administrator', 'cost_center': 'cost_center', 'voucher_no': 'parent:name', 'modified_by': 'nabin@webnotestech.com', 'against_voucher': "value:d.against_voucher or d.against_invoice or ''", 'table_field': 'entries', 'transaction_date': 'parent:voucher_date', 'debit': 'debit', 'docstatus': 0, 'parent': 'Journal Voucher', 'company': 'parent:company', 'aging_date': 'parent:aging_date', 'fiscal_year': 'parent:fiscal_year', 'is_advance': 'is_advance', 'remarks': 'parent:remark', 'account': 'account', 'name': 'GLMDetail00001', 'idx': 1, 'against_voucher_type': "value:(d.against_voucher and 'Payable Voucher') or (d.against_invoice and 'Receivable Voucher') or ''", 'modified': '2010-04-30 17:56:41', 'against': 'against_account', 'credit': 'credit', 'parenttype': 'GL Mapper', 'is_opening': 'parent:is_opening', 'posting_date': 'parent:posting_date', 'parentfield': 'fields'}, {'creation': '2009-06-11 11:09:11', 'voucher_type': 'doctype', 'doctype': 'GL Mapper Detail', 'owner': 'Administrator', 'cost_center': '', 'voucher_no': 'name', 'modified_by': 'nabin@webnotestech.com', 'against_voucher': '', 'table_field': '', 'transaction_date': 'voucher_date', 'debit': 'value:0', 'docstatus': 0, 'parent': 'Journal Voucher', 'company': 'company', 'aging_date': 'aging_date', 'fiscal_year': 'fiscal_year', 'is_advance': '', 'remarks': 'remark', 'account': 'tax_code', 'name': 'GLMDetail00009', 'idx': 2, 'against_voucher_type': None, 'modified': '2010-04-30 17:56:41', 'against': 'supplier_account', 'credit': 'ded_amount', 'parenttype': 'GL Mapper', 'is_opening': 'is_opening', 'posting_date': 'posting_date', 'parentfield': 'fields'}]
|
[{'doc_type': 'Journal Voucher', 'modified_by': 'nabin@webnotestech.com', 'name': 'Journal Voucher', 'parent': None, 'creation': '2009-03-12 12:09:24', 'modified': '2010-04-30 17:56:41', 'module': 'Accounts', 'doctype': 'GL Mapper', 'idx': None, 'parenttype': None, 'owner': 'Administrator', 'docstatus': 0, 'parentfield': None}, {'creation': '2009-03-12 12:09:24', 'voucher_type': 'parent:doctype', 'doctype': 'GL Mapper Detail', 'owner': 'Administrator', 'cost_center': 'cost_center', 'voucher_no': 'parent:name', 'modified_by': 'nabin@webnotestech.com', 'against_voucher': "value:d.against_voucher or d.against_invoice or d.against_jv or ''", 'table_field': 'entries', 'transaction_date': 'parent:voucher_date', 'debit': 'debit', 'docstatus': 0, 'parent': 'Journal Voucher', 'company': 'parent:company', 'aging_date': 'parent:aging_date', 'fiscal_year': 'parent:fiscal_year', 'is_advance': 'is_advance', 'remarks': 'parent:remark', 'account': 'account', 'name': 'GLMDetail00001', 'idx': 1, 'against_voucher_type': "value:(d.against_voucher and 'Payable Voucher') or (d.against_invoice and 'Receivable Voucher') or (d.against_jv and 'Journal Voucher') or ''", 'modified': '2010-04-30 17:56:41', 'against': 'against_account', 'credit': 'credit', 'parenttype': 'GL Mapper', 'is_opening': 'parent:is_opening', 'posting_date': 'parent:posting_date', 'parentfield': 'fields'}, {'creation': '2009-06-11 11:09:11', 'voucher_type': 'doctype', 'doctype': 'GL Mapper Detail', 'owner': 'Administrator', 'cost_center': '', 'voucher_no': 'name', 'modified_by': 'nabin@webnotestech.com', 'against_voucher': '', 'table_field': '', 'transaction_date': 'voucher_date', 'debit': 'value:0', 'docstatus': 0, 'parent': 'Journal Voucher', 'company': 'company', 'aging_date': 'aging_date', 'fiscal_year': 'fiscal_year', 'is_advance': '', 'remarks': 'remark', 'account': 'tax_code', 'name': 'GLMDetail00009', 'idx': 2, 'against_voucher_type': None, 'modified': '2010-04-30 17:56:41', 'against': 'supplier_account', 'credit': 'ded_amount', 'parenttype': 'GL Mapper', 'is_opening': 'is_opening', 'posting_date': 'posting_date', 'parentfield': 'fields'}]
|
||||||
|
|||||||
@@ -645,20 +645,29 @@ class DocType(TransactionBase):
|
|||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# Repair Outstanding
|
# Repair Outstanding
|
||||||
#######################################################################
|
|
||||||
def repair_rv_outstanding(self):
|
def repair_rv_outstanding(self):
|
||||||
get_obj(dt = 'GL Control').repair_voucher_outstanding(self)
|
get_obj(dt = 'GL Control').repair_voucher_outstanding(self)
|
||||||
|
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------------
|
||||||
def on_update_after_submit(self):
|
def on_update_after_submit(self):
|
||||||
self.convert_into_recurring()
|
self.convert_into_recurring()
|
||||||
|
|
||||||
|
|
||||||
def convert_into_recurring(self):
|
def convert_into_recurring(self):
|
||||||
if self.doc.convert_into_recurring_invoice:
|
if self.doc.convert_into_recurring_invoice:
|
||||||
event = 'accounts.doctype.gl_control.gl_control.manage_recurring_invoices'
|
|
||||||
self.set_next_date()
|
self.set_next_date()
|
||||||
if not self.doc.recurring_id:
|
if not self.doc.recurring_id:
|
||||||
set(self.doc, 'recurring_id', make_autoname('RECINV/.#####'))
|
set(self.doc, 'recurring_id', make_autoname('RECINV/.#####'))
|
||||||
|
elif self.doc.recurring_id:
|
||||||
|
sql("""update `tabReceivable Voucher` set convert_into_recurring_invoice = 0 where recurring_id = %s""", self.doc.recurring_id)
|
||||||
|
|
||||||
|
self.manage_scheduler()
|
||||||
|
|
||||||
|
def manage_scheduler(self):
|
||||||
|
""" set/cancel event in scheduler """
|
||||||
|
event = 'accounts.doctype.gl_control.gl_control.manage_recurring_invoices'
|
||||||
|
|
||||||
if sql("select name from `tabReceivable Voucher` where ifnull(convert_into_recurring_invoice, 0) = 1 and next_date <= end_date"):
|
if sql("select name from `tabReceivable Voucher` where ifnull(convert_into_recurring_invoice, 0) = 1 and next_date <= end_date"):
|
||||||
if not self.check_event_exists(event):
|
if not self.check_event_exists(event):
|
||||||
@@ -666,9 +675,6 @@ class DocType(TransactionBase):
|
|||||||
else:
|
else:
|
||||||
cancel_event(event)
|
cancel_event(event)
|
||||||
|
|
||||||
elif self.doc.recurring_id:
|
|
||||||
sql("""update `tabReceivable Voucher` set convert_into_recurring_invoice = 0 where recurring_id = %s""", self.doc.recurring_id)
|
|
||||||
|
|
||||||
|
|
||||||
def check_event_exists(self, event):
|
def check_event_exists(self, event):
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
{
|
{
|
||||||
'creation': '2010-08-08 17:09:18',
|
'creation': '2010-08-08 17:09:18',
|
||||||
'docstatus': 0,
|
'docstatus': 0,
|
||||||
'modified': '2011-12-20 18:23:36',
|
'modified': '2011-12-22 19:04:07',
|
||||||
'modified_by': 'Administrator',
|
'modified_by': 'Administrator',
|
||||||
'owner': 'Administrator'
|
'owner': 'Administrator'
|
||||||
},
|
},
|
||||||
@@ -34,13 +34,12 @@
|
|||||||
'server_code_error': ' ',
|
'server_code_error': ' ',
|
||||||
'show_in_menu': 0,
|
'show_in_menu': 0,
|
||||||
'subject': 'To %(customer_name)s worth %(currency)s %(grand_total_export)s due on %(due_date)s | %(outstanding_amount)s outstanding',
|
'subject': 'To %(customer_name)s worth %(currency)s %(grand_total_export)s due on %(due_date)s | %(outstanding_amount)s outstanding',
|
||||||
'version': 391
|
'version': 392
|
||||||
},
|
},
|
||||||
|
|
||||||
# These values are common for all DocFormat
|
# These values are common for all DocFormat
|
||||||
{
|
{
|
||||||
'doctype': 'DocFormat',
|
'doctype': 'DocFormat',
|
||||||
'format': 'POS Invoice',
|
|
||||||
'name': '__common__',
|
'name': '__common__',
|
||||||
'parent': 'Receivable Voucher',
|
'parent': 'Receivable Voucher',
|
||||||
'parentfield': 'formats',
|
'parentfield': 'formats',
|
||||||
@@ -126,7 +125,32 @@
|
|||||||
|
|
||||||
# DocFormat
|
# DocFormat
|
||||||
{
|
{
|
||||||
'doctype': 'DocFormat'
|
'doctype': 'DocFormat',
|
||||||
|
'format': 'POS Invoice'
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocFormat
|
||||||
|
{
|
||||||
|
'doctype': 'DocFormat',
|
||||||
|
'format': 'POS Invoice'
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocFormat
|
||||||
|
{
|
||||||
|
'doctype': 'DocFormat',
|
||||||
|
'format': 'Sales Invoice Classic'
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocFormat
|
||||||
|
{
|
||||||
|
'doctype': 'DocFormat',
|
||||||
|
'format': 'Sales Invoice Modern'
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocFormat
|
||||||
|
{
|
||||||
|
'doctype': 'DocFormat',
|
||||||
|
'format': 'Sales Invoice Spartan'
|
||||||
},
|
},
|
||||||
|
|
||||||
# DocField
|
# DocField
|
||||||
@@ -477,6 +501,7 @@
|
|||||||
'label': 'Price List Currency',
|
'label': 'Price List Currency',
|
||||||
'options': 'link:Currency',
|
'options': 'link:Currency',
|
||||||
'permlevel': 0,
|
'permlevel': 0,
|
||||||
|
'print_hide': 1,
|
||||||
'reqd': 1
|
'reqd': 1
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -489,6 +514,7 @@
|
|||||||
'fieldtype': 'Currency',
|
'fieldtype': 'Currency',
|
||||||
'label': 'Price List Currency Conversion Rate',
|
'label': 'Price List Currency Conversion Rate',
|
||||||
'permlevel': 0,
|
'permlevel': 0,
|
||||||
|
'print_hide': 1,
|
||||||
'reqd': 1
|
'reqd': 1
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -248,7 +248,7 @@ class DocType(TransactionBase):
|
|||||||
raise Exception
|
raise Exception
|
||||||
|
|
||||||
# list criteria that should not repeat if item is stock item
|
# list criteria that should not repeat if item is stock item
|
||||||
e = [d.schedule_date, d.item_code, d.warehouse, d.uom, d.fields.has_key('prevdoc_docname') and d.prevdoc_docname or '', d.fields.has_key('prevdoc_detail_docname') and d.prevdoc_detail_docname or '', d.fields.has_key('batch_no') and d.batch_no or '']
|
e = [d.schedule_date, d.item_code, d.description, d.warehouse, d.uom, d.fields.has_key('prevdoc_docname') and d.prevdoc_docname or '', d.fields.has_key('prevdoc_detail_docname') and d.prevdoc_detail_docname or '', d.fields.has_key('batch_no') and d.batch_no or '']
|
||||||
|
|
||||||
# if is not stock item
|
# if is not stock item
|
||||||
f = [d.schedule_date, d.item_code, d.description]
|
f = [d.schedule_date, d.item_code, d.description]
|
||||||
@@ -258,16 +258,16 @@ class DocType(TransactionBase):
|
|||||||
if ch and ch[0][0] == 'Yes':
|
if ch and ch[0][0] == 'Yes':
|
||||||
# check for same items
|
# check for same items
|
||||||
if e in check_list:
|
if e in check_list:
|
||||||
msgprint("Item %s has been entered more than once with same schedule date, warehouse and uom." % d.item_code)
|
msgprint("""Item %s has been entered more than once with same description, schedule date, warehouse and uom.\n
|
||||||
raise Exception
|
Please change any of the field value to enter the item twice""" % d.item_code, raise_exception = 1)
|
||||||
else:
|
else:
|
||||||
check_list.append(e)
|
check_list.append(e)
|
||||||
|
|
||||||
elif ch and ch[0][0] == 'No':
|
elif ch and ch[0][0] == 'No':
|
||||||
# check for same items
|
# check for same items
|
||||||
if f in chk_dupl_itm:
|
if f in chk_dupl_itm:
|
||||||
msgprint("Item %s has been entered more than once." % d.item_code)
|
msgprint("""Item %s has been entered more than once with same description, schedule date.\n
|
||||||
raise Exception
|
Please change any of the field value to enter the item twice.""" % d.item_code, raise_exception = 1)
|
||||||
else:
|
else:
|
||||||
chk_dupl_itm.append(f)
|
chk_dupl_itm.append(f)
|
||||||
|
|
||||||
|
|||||||
3
erpnext/patches/print_hide_price_list.py
Normal file
3
erpnext/patches/print_hide_price_list.py
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
def execute():
|
||||||
|
import webnotes
|
||||||
|
webnotes.conn.sql("update `tabDocField` set print_hide = 1 where fieldname in ('price_list_currency', 'plc_conversion_rate')")
|
||||||
6
erpnext/patches/reload_gl_mapper.py
Normal file
6
erpnext/patches/reload_gl_mapper.py
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
def execute():
|
||||||
|
import webnotes
|
||||||
|
from webnotes.modules.module_manager import reload_doc
|
||||||
|
|
||||||
|
# reload jv gl mapper
|
||||||
|
reload_doc('accounts', 'GL Mapper', 'Journal Voucher')
|
||||||
15
erpnext/patches/update_gle_against_voucher_for_jv.py
Normal file
15
erpnext/patches/update_gle_against_voucher_for_jv.py
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
def execute():
|
||||||
|
import webnotes
|
||||||
|
from webnotes.model.code import get_obj
|
||||||
|
|
||||||
|
# select jv where against_jv exists
|
||||||
|
jv = webnotes.conn.sql("select distinct parent from `tabJournal Voucher Detail` where docstatus = 1 and ifnull(against_jv, '') != ''")
|
||||||
|
|
||||||
|
for d in jv:
|
||||||
|
jv_obj = get_obj('Journal Voucher', d[0], with_children=1)
|
||||||
|
|
||||||
|
# cancel
|
||||||
|
get_obj(dt='GL Control').make_gl_entries(jv_obj.doc, jv_obj.doclist, cancel =1, adv_adj = 1)
|
||||||
|
|
||||||
|
#re-submit
|
||||||
|
get_obj(dt='GL Control').make_gl_entries(jv_obj.doc, jv_obj.doclist, cancel =0, adv_adj = 1)
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
# Please edit this list and import only required elements
|
# Please edit this list and import only required elements
|
||||||
import webnotes
|
import webnotes
|
||||||
|
|
||||||
from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
|
from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, set_default, str_esc_quote, user_format, validate_email_add, add_days
|
||||||
from webnotes.model import db_exists
|
from webnotes.model import db_exists
|
||||||
from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
|
from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
|
||||||
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, is_testing, msgprint, errprint
|
from webnotes import session, form, is_testing, msgprint, errprint
|
||||||
|
from webnotes.utils.email_lib import sendmail
|
||||||
set = webnotes.conn.set
|
set = webnotes.conn.set
|
||||||
sql = webnotes.conn.sql
|
sql = webnotes.conn.sql
|
||||||
get_value = webnotes.conn.get_value
|
get_value = webnotes.conn.get_value
|
||||||
@@ -114,3 +114,31 @@ class DocType:
|
|||||||
else:
|
else:
|
||||||
sql("update `tabProject` set status = 'Completed' where name = %s", arg)
|
sql("update `tabProject` set status = 'Completed' where name = %s", arg)
|
||||||
return cstr('true')
|
return cstr('true')
|
||||||
|
|
||||||
|
|
||||||
|
def sent_reminder_task():
|
||||||
|
task_list = sql("""
|
||||||
|
select subject, allocated_to, project, exp_start_date, exp_end_date,
|
||||||
|
priority, status, name, senders_name, opening_date, review_date, description
|
||||||
|
from tabTicket
|
||||||
|
where task_email_notify=1
|
||||||
|
and sent_reminder=0
|
||||||
|
and status='Open'
|
||||||
|
and exp_start_date is not null""",as_dict=1)
|
||||||
|
for i in task_list:
|
||||||
|
if date_diff(i['exp_start_date'],nowdate()) ==2:
|
||||||
|
msg2="""<h2>Two days to complete: %(name)s</h2>
|
||||||
|
<p>This is a reminder for the task %(name)s has been assigned to you
|
||||||
|
by %(senders_name)s on %(opening_date)s</p>
|
||||||
|
<p><b>Project:</b> %(project)s</p>
|
||||||
|
<p><b>Expected Start Date:</b> %(exp_start_date)s</p>
|
||||||
|
<p><b>Expected End Date:</b> %(exp_end_date)s</p>
|
||||||
|
<p><b>Review Date:</b> %(review_date)s</p>
|
||||||
|
<p><b>Details:</b> %(description)s</p>
|
||||||
|
<p>If you have already completed this task, please update the system</p>
|
||||||
|
<p>Good Luck!</p>
|
||||||
|
<p>(This notification is autogenerated)</p>""" % i
|
||||||
|
sendmail(i['allocated_to'], sender='automail@webnotestech.com', msg=msg2,send_now=1, \
|
||||||
|
subject='A task has been assigned')
|
||||||
|
sql("update `tabTicket` set sent_reminder='1' where name='%(name)s' and allocated_to= '%(allocated_to)s'" % i)
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,14 @@
|
|||||||
# Please edit this list and import only required elements
|
# Please edit this list and import only required elements
|
||||||
import webnotes
|
import webnotes
|
||||||
|
|
||||||
from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
|
from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, set_default, str_esc_quote, user_format, validate_email_add
|
||||||
|
from webnotes.utils.email_lib import sendmail
|
||||||
from webnotes.model import db_exists
|
from webnotes.model import db_exists
|
||||||
from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
|
from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
|
||||||
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, is_testing, msgprint, errprint
|
from webnotes import session, form, is_testing, msgprint, errprint
|
||||||
|
|
||||||
sql = webnotes.conn.sql
|
sql = webnotes.conn.sql
|
||||||
set = webnotes.conn.set
|
set = webnotes.conn.set
|
||||||
get_value = webnotes.conn.get_value
|
get_value = webnotes.conn.get_value
|
||||||
@@ -68,22 +70,54 @@ class DocType:
|
|||||||
#--------------------------------------------
|
#--------------------------------------------
|
||||||
|
|
||||||
def on_update(self):
|
def on_update(self):
|
||||||
if (self.doc.status =='Open') and (self.doc.task_email_notify==1):
|
if self.doc.status =='Open' and self.doc.allocated_to:
|
||||||
msg2= 'A task %s has been assigned to you by %s on %s <br/> \
|
if self.doc.task_email_notify and (self.doc.allocated_to != self.doc.allocated_to_old):
|
||||||
Project:%s <br/> Review Date:%s <br /> Closing Date:%s <br /> Details %s' \
|
self.doc.sent_reminder = 0
|
||||||
%(self.doc.name,self.doc.senders_name,self.doc.opening_date,self.doc.project, \
|
self.doc.allocated_to_old = self.doc.allocated_to
|
||||||
self.doc.review_date,self.doc.closing_date,self.doc.description)
|
self.sent_notification()
|
||||||
sendmail(self.doc.allocated_to, sender='automail@webnotestech.com', \
|
if self.doc.exp_start_date:
|
||||||
subject='A task has been assigned', parts=[['text/plain',msg2]])
|
sql("delete from tabEvent where ref_type='Task' and ref_name=%s", self.doc.name)
|
||||||
pass
|
self.add_calendar_event()
|
||||||
|
else:
|
||||||
|
msgprint("An Expeted start date has not been set for this task.Please set a, 'Expected Start date'\
|
||||||
|
to add an event to allocated persons calender.You can save a task without this also.")
|
||||||
|
|
||||||
|
|
||||||
#validate before sending for approval
|
|
||||||
def validate_for_pending_review(self):
|
def validate_for_pending_review(self):
|
||||||
if not self.doc.allocated_to:
|
if not self.doc.allocated_to:
|
||||||
msgprint("Please enter allocated_to.")
|
msgprint("Please enter allocated_to.")
|
||||||
raise Exception
|
raise Exception
|
||||||
self.validate_with_timesheet_dates()
|
self.validate_with_timesheet_dates()
|
||||||
|
|
||||||
|
#Sent Notification
|
||||||
|
def sent_notification(self):
|
||||||
|
i = {
|
||||||
|
'name' : self.doc.name,
|
||||||
|
'senders_name': self.doc.allocated_to,
|
||||||
|
'opening_date': self.doc.opening_date,
|
||||||
|
'exp_start_date': self.doc.exp_start_date,
|
||||||
|
'exp_end_date' : self.doc.exp_end_date,
|
||||||
|
'project': self.doc.project,
|
||||||
|
'review_date': self.doc.review_date,
|
||||||
|
'description': self.doc.description
|
||||||
|
}
|
||||||
|
|
||||||
|
msg2="""<h2>%(name)s</h2>
|
||||||
|
<p>This is a Notification for the task %(name)s that has been assigned to you
|
||||||
|
by %(senders_name)s on %(opening_date)s</p>
|
||||||
|
<p><b>Project:</b> %(project)s</p>
|
||||||
|
<p><b>Review Date:</b> %(review_date)s</p>
|
||||||
|
<p><b>Expected Start Date:</b> %(exp_start_date)s</p>
|
||||||
|
<p><b>Expected End Date:</b> %(exp_end_date)s</p>
|
||||||
|
<p><b>Details:</b> %(description)s</p>
|
||||||
|
<p>You will also recieve another reminder 2 days before the commencement of the task</p>
|
||||||
|
<p>Good Luck!</p>
|
||||||
|
<p>(This notification is autogenerated)</p>""" % i
|
||||||
|
sendmail(self.doc.allocated_to, sender='automail@webnotestech.com', msg=msg2,send_now=1,\
|
||||||
|
subject='A task has been assigned')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#validate before closing task
|
#validate before closing task
|
||||||
def validate_for_closed(self):
|
def validate_for_closed(self):
|
||||||
self.check_non_submitted_timesheets()
|
self.check_non_submitted_timesheets()
|
||||||
@@ -137,12 +171,12 @@ class DocType:
|
|||||||
self.validate_for_pending_review()
|
self.validate_for_pending_review()
|
||||||
self.get_actual_total_hrs()
|
self.get_actual_total_hrs()
|
||||||
self.doc.review_date = nowdate()
|
self.doc.review_date = nowdate()
|
||||||
set(self.doc, 'status', 'Pending Review')
|
self.doc.status = 'Pending Review'
|
||||||
self.doc.save()
|
self.doc.save()
|
||||||
return cstr('true')
|
return cstr('true')
|
||||||
|
|
||||||
def reopen_task(self):
|
def reopen_task(self):
|
||||||
set(self.doc, 'status', 'Open')
|
self.doc.status = 'Open'
|
||||||
self.doc.save()
|
self.doc.save()
|
||||||
return cstr('true')
|
return cstr('true')
|
||||||
|
|
||||||
@@ -153,12 +187,18 @@ class DocType:
|
|||||||
else:
|
else:
|
||||||
self.validate_with_timesheet_dates()
|
self.validate_with_timesheet_dates()
|
||||||
self.validate_for_closed()
|
self.validate_for_closed()
|
||||||
|
|
||||||
self.doc.closing_date = nowdate()
|
self.doc.closing_date = nowdate()
|
||||||
set(self.doc, 'status', 'Closed')
|
self.doc.status = 'Closed'
|
||||||
set(self.doc, 'docstatus', 1)
|
self.doc.docstatus = 1
|
||||||
self.doc.save()
|
self.doc.save()
|
||||||
|
|
||||||
|
self.remove_event_from_calender()
|
||||||
return cstr('true')
|
return cstr('true')
|
||||||
|
|
||||||
|
def remove_event_from_calender(self):
|
||||||
|
sql("delete from tabEvent where ref_type='Task' and ref_name=%s", self.doc.name)
|
||||||
|
|
||||||
def cancel_task(self):
|
def cancel_task(self):
|
||||||
chk = sql("select distinct t1.name from `tabTimesheet` t1, `tabTimesheet Detail` t2 where t2.parent = t1.name and t2.task_id = %s and t1.status!='Cancelled'", self.doc.name)
|
chk = sql("select distinct t1.name from `tabTimesheet` t1, `tabTimesheet Detail` t2 where t2.parent = t1.name and t2.task_id = %s and t1.status!='Cancelled'", self.doc.name)
|
||||||
if chk:
|
if chk:
|
||||||
@@ -166,10 +206,21 @@ class DocType:
|
|||||||
msgprint("Timesheet(s) "+','.join(chk_lst)+" created against this task. Thus can not be cancelled")
|
msgprint("Timesheet(s) "+','.join(chk_lst)+" created against this task. Thus can not be cancelled")
|
||||||
raise Exception
|
raise Exception
|
||||||
else:
|
else:
|
||||||
set(self.doc, 'status', 'Cancelled')
|
self.doc.status = 'Cancelled'
|
||||||
set(self.doc, 'docstatus', 2)
|
self.doc.docstatus = 2
|
||||||
|
self.remove_event_from_calender()
|
||||||
self.doc.save()
|
self.doc.save()
|
||||||
return cstr('true')
|
return cstr('true')
|
||||||
|
|
||||||
def on_cancel(self):
|
|
||||||
self.cancel_task()
|
def add_calendar_event(self):
|
||||||
|
""" Add calendar event for task in calendar of Allocated person"""
|
||||||
|
event = Document('Event')
|
||||||
|
event.owner = self.doc.allocated_to
|
||||||
|
event.description = self.doc.name
|
||||||
|
event.event_date = self.doc.exp_start_date and self.doc.exp_start_date or ''
|
||||||
|
event.event_hour = self.doc.event_hour and self.doc.event_hour or '10:00'
|
||||||
|
event.event_type = 'Private'
|
||||||
|
event.ref_type = 'Task'
|
||||||
|
event.ref_name = self.doc.name
|
||||||
|
event.save(1)
|
||||||
|
|||||||
@@ -5,14 +5,14 @@
|
|||||||
{
|
{
|
||||||
'creation': '2011-01-28 17:52:35',
|
'creation': '2011-01-28 17:52:35',
|
||||||
'docstatus': 0,
|
'docstatus': 0,
|
||||||
'modified': '2011-12-21 16:32:30',
|
'modified': '2011-12-26 11:56:35',
|
||||||
'modified_by': 'Administrator',
|
'modified_by': 'Administrator',
|
||||||
'owner': 'Administrator'
|
'owner': 'Administrator'
|
||||||
},
|
},
|
||||||
|
|
||||||
# These values are common for all DocType
|
# These values are common for all DocType
|
||||||
{
|
{
|
||||||
'_last_update': '1324394580',
|
'_last_update': '1324880734',
|
||||||
'allow_trash': 1,
|
'allow_trash': 1,
|
||||||
'autoname': 'TIC/.####',
|
'autoname': 'TIC/.####',
|
||||||
'colour': 'White:FFF',
|
'colour': 'White:FFF',
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
'show_in_menu': 0,
|
'show_in_menu': 0,
|
||||||
'subject': '%(subject)s',
|
'subject': '%(subject)s',
|
||||||
'tag_fields': 'status',
|
'tag_fields': 'status',
|
||||||
'version': 247
|
'version': 254
|
||||||
},
|
},
|
||||||
|
|
||||||
# These values are common for all DocField
|
# These values are common for all DocField
|
||||||
@@ -137,15 +137,6 @@
|
|||||||
'trigger': 'Client'
|
'trigger': 'Client'
|
||||||
},
|
},
|
||||||
|
|
||||||
# DocField
|
|
||||||
{
|
|
||||||
'doctype': 'DocField',
|
|
||||||
'fieldname': 'task_email_notify',
|
|
||||||
'fieldtype': 'Check',
|
|
||||||
'label': 'Sent Mail Notification',
|
|
||||||
'permlevel': 0
|
|
||||||
},
|
|
||||||
|
|
||||||
# DocField
|
# DocField
|
||||||
{
|
{
|
||||||
'doctype': 'DocField',
|
'doctype': 'DocField',
|
||||||
@@ -249,6 +240,17 @@
|
|||||||
'width': '50%'
|
'width': '50%'
|
||||||
},
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
|
'doctype': 'DocField',
|
||||||
|
'fieldname': 'allocated_to_old',
|
||||||
|
'fieldtype': 'Link',
|
||||||
|
'hidden': 1,
|
||||||
|
'label': 'Allocated To Old',
|
||||||
|
'no_copy': 1,
|
||||||
|
'permlevel': 0
|
||||||
|
},
|
||||||
|
|
||||||
# DocField
|
# DocField
|
||||||
{
|
{
|
||||||
'colour': 'White:FFF',
|
'colour': 'White:FFF',
|
||||||
@@ -263,6 +265,15 @@
|
|||||||
'trigger': 'Client'
|
'trigger': 'Client'
|
||||||
},
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
|
'doctype': 'DocField',
|
||||||
|
'fieldname': 'task_email_notify',
|
||||||
|
'fieldtype': 'Check',
|
||||||
|
'label': 'Sent Mail Notification',
|
||||||
|
'permlevel': 0
|
||||||
|
},
|
||||||
|
|
||||||
# DocField
|
# DocField
|
||||||
{
|
{
|
||||||
'doctype': 'DocField',
|
'doctype': 'DocField',
|
||||||
@@ -275,6 +286,17 @@
|
|||||||
'permlevel': 0
|
'permlevel': 0
|
||||||
},
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
|
'doctype': 'DocField',
|
||||||
|
'fieldname': 'sent_reminder',
|
||||||
|
'fieldtype': 'Data',
|
||||||
|
'hidden': 1,
|
||||||
|
'label': 'Sent Reminder',
|
||||||
|
'no_copy': 1,
|
||||||
|
'permlevel': 0
|
||||||
|
},
|
||||||
|
|
||||||
# DocField
|
# DocField
|
||||||
{
|
{
|
||||||
'doctype': 'DocField',
|
'doctype': 'DocField',
|
||||||
|
|||||||
@@ -5,11 +5,20 @@
|
|||||||
{
|
{
|
||||||
'creation': '2010-08-08 17:09:17',
|
'creation': '2010-08-08 17:09:17',
|
||||||
'docstatus': 0,
|
'docstatus': 0,
|
||||||
'modified': '2011-12-20 14:01:09',
|
'modified': '2011-12-22 19:03:04',
|
||||||
'modified_by': 'Administrator',
|
'modified_by': 'Administrator',
|
||||||
'owner': 'Administrator'
|
'owner': 'Administrator'
|
||||||
},
|
},
|
||||||
|
|
||||||
|
# These values are common for all DocField
|
||||||
|
{
|
||||||
|
'doctype': 'DocField',
|
||||||
|
'name': '__common__',
|
||||||
|
'parent': 'Quotation',
|
||||||
|
'parentfield': 'fields',
|
||||||
|
'parenttype': 'DocType'
|
||||||
|
},
|
||||||
|
|
||||||
# These values are common for all DocType
|
# These values are common for all DocType
|
||||||
{
|
{
|
||||||
'_last_update': '1322549700',
|
'_last_update': '1322549700',
|
||||||
@@ -32,15 +41,15 @@
|
|||||||
'show_in_menu': 0,
|
'show_in_menu': 0,
|
||||||
'subject': 'To %(customer_name)s on %(transaction_date)s worth %(currency)s %(grand_total_export)s',
|
'subject': 'To %(customer_name)s on %(transaction_date)s worth %(currency)s %(grand_total_export)s',
|
||||||
'tag_fields': 'status',
|
'tag_fields': 'status',
|
||||||
'version': 597
|
'version': 598
|
||||||
},
|
},
|
||||||
|
|
||||||
# These values are common for all DocField
|
# These values are common for all DocFormat
|
||||||
{
|
{
|
||||||
'doctype': 'DocField',
|
'doctype': 'DocFormat',
|
||||||
'name': '__common__',
|
'name': '__common__',
|
||||||
'parent': 'Quotation',
|
'parent': 'Quotation',
|
||||||
'parentfield': 'fields',
|
'parentfield': 'formats',
|
||||||
'parenttype': 'DocType'
|
'parenttype': 'DocType'
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -169,6 +178,24 @@
|
|||||||
'role': 'Maintenance User'
|
'role': 'Maintenance User'
|
||||||
},
|
},
|
||||||
|
|
||||||
|
# DocFormat
|
||||||
|
{
|
||||||
|
'doctype': 'DocFormat',
|
||||||
|
'format': 'Quotation Classic'
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocFormat
|
||||||
|
{
|
||||||
|
'doctype': 'DocFormat',
|
||||||
|
'format': 'Quotation Modern'
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocFormat
|
||||||
|
{
|
||||||
|
'doctype': 'DocFormat',
|
||||||
|
'format': 'Quotation Spartan'
|
||||||
|
},
|
||||||
|
|
||||||
# DocField
|
# DocField
|
||||||
{
|
{
|
||||||
'colour': 'White:FFF',
|
'colour': 'White:FFF',
|
||||||
@@ -568,6 +595,7 @@
|
|||||||
'label': 'Price List Currency',
|
'label': 'Price List Currency',
|
||||||
'options': 'link:Currency',
|
'options': 'link:Currency',
|
||||||
'permlevel': 0,
|
'permlevel': 0,
|
||||||
|
'print_hide': 1,
|
||||||
'reqd': 1
|
'reqd': 1
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -580,6 +608,7 @@
|
|||||||
'fieldtype': 'Currency',
|
'fieldtype': 'Currency',
|
||||||
'label': 'Price List Currency Conversion Rate',
|
'label': 'Price List Currency Conversion Rate',
|
||||||
'permlevel': 0,
|
'permlevel': 0,
|
||||||
|
'print_hide': 1,
|
||||||
'reqd': 1
|
'reqd': 1
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -5,11 +5,20 @@
|
|||||||
{
|
{
|
||||||
'creation': '2010-08-08 17:09:21',
|
'creation': '2010-08-08 17:09:21',
|
||||||
'docstatus': 0,
|
'docstatus': 0,
|
||||||
'modified': '2011-12-20 12:55:02',
|
'modified': '2011-12-22 19:03:25',
|
||||||
'modified_by': 'Administrator',
|
'modified_by': 'Administrator',
|
||||||
'owner': 'Administrator'
|
'owner': 'Administrator'
|
||||||
},
|
},
|
||||||
|
|
||||||
|
# These values are common for all DocField
|
||||||
|
{
|
||||||
|
'doctype': 'DocField',
|
||||||
|
'name': '__common__',
|
||||||
|
'parent': 'Sales Order',
|
||||||
|
'parentfield': 'fields',
|
||||||
|
'parenttype': 'DocType'
|
||||||
|
},
|
||||||
|
|
||||||
# These values are common for all DocType
|
# These values are common for all DocType
|
||||||
{
|
{
|
||||||
'_last_update': '1324295218',
|
'_last_update': '1324295218',
|
||||||
@@ -29,15 +38,15 @@
|
|||||||
'show_in_menu': 0,
|
'show_in_menu': 0,
|
||||||
'subject': 'From %(customer_name)s on %(transaction_date)s worth %(currency)s %(grand_total_export)s | %(per_delivered)s% delivered | %(per_billed)s% billed',
|
'subject': 'From %(customer_name)s on %(transaction_date)s worth %(currency)s %(grand_total_export)s | %(per_delivered)s% delivered | %(per_billed)s% billed',
|
||||||
'tag_fields': 'delivery_status,billing_status',
|
'tag_fields': 'delivery_status,billing_status',
|
||||||
'version': 608
|
'version': 609
|
||||||
},
|
},
|
||||||
|
|
||||||
# These values are common for all DocField
|
# These values are common for all DocFormat
|
||||||
{
|
{
|
||||||
'doctype': 'DocField',
|
'doctype': 'DocFormat',
|
||||||
'name': '__common__',
|
'name': '__common__',
|
||||||
'parent': 'Sales Order',
|
'parent': 'Sales Order',
|
||||||
'parentfield': 'fields',
|
'parentfield': 'formats',
|
||||||
'parenttype': 'DocType'
|
'parenttype': 'DocType'
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -166,6 +175,24 @@
|
|||||||
'role': 'Maintenance User'
|
'role': 'Maintenance User'
|
||||||
},
|
},
|
||||||
|
|
||||||
|
# DocFormat
|
||||||
|
{
|
||||||
|
'doctype': 'DocFormat',
|
||||||
|
'format': 'Sales Order Classic'
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocFormat
|
||||||
|
{
|
||||||
|
'doctype': 'DocFormat',
|
||||||
|
'format': 'Sales Order Modern'
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocFormat
|
||||||
|
{
|
||||||
|
'doctype': 'DocFormat',
|
||||||
|
'format': 'Sales Order Spartan'
|
||||||
|
},
|
||||||
|
|
||||||
# DocField
|
# DocField
|
||||||
{
|
{
|
||||||
'colour': 'White:FFF',
|
'colour': 'White:FFF',
|
||||||
@@ -581,6 +608,7 @@
|
|||||||
'label': 'Price List Currency',
|
'label': 'Price List Currency',
|
||||||
'options': 'link:Currency',
|
'options': 'link:Currency',
|
||||||
'permlevel': 0,
|
'permlevel': 0,
|
||||||
|
'print_hide': 1,
|
||||||
'reqd': 1
|
'reqd': 1
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -593,6 +621,7 @@
|
|||||||
'fieldtype': 'Currency',
|
'fieldtype': 'Currency',
|
||||||
'label': 'Price List Currency Conversion Rate',
|
'label': 'Price List Currency Conversion Rate',
|
||||||
'permlevel': 0,
|
'permlevel': 0,
|
||||||
|
'print_hide': 1,
|
||||||
'reqd': 1
|
'reqd': 1
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
{
|
{
|
||||||
'creation': '2011-04-18 15:58:20',
|
'creation': '2011-04-18 15:58:20',
|
||||||
'docstatus': 0,
|
'docstatus': 0,
|
||||||
'modified': '2011-12-20 13:23:33',
|
'modified': '2011-12-22 19:03:44',
|
||||||
'modified_by': 'Administrator',
|
'modified_by': 'Administrator',
|
||||||
'owner': 'Administrator'
|
'owner': 'Administrator'
|
||||||
},
|
},
|
||||||
@@ -37,13 +37,12 @@
|
|||||||
'show_in_menu': 0,
|
'show_in_menu': 0,
|
||||||
'subject': 'To %(customer_name)s on %(transaction_date)s | %(per_billed)s% billed',
|
'subject': 'To %(customer_name)s on %(transaction_date)s | %(per_billed)s% billed',
|
||||||
'tag_fields': 'billing_status',
|
'tag_fields': 'billing_status',
|
||||||
'version': 459
|
'version': 460
|
||||||
},
|
},
|
||||||
|
|
||||||
# These values are common for all DocFormat
|
# These values are common for all DocFormat
|
||||||
{
|
{
|
||||||
'doctype': 'DocFormat',
|
'doctype': 'DocFormat',
|
||||||
'format': 'Delivery Note Packing List Wise',
|
|
||||||
'name': '__common__',
|
'name': '__common__',
|
||||||
'parent': 'Delivery Note',
|
'parent': 'Delivery Note',
|
||||||
'parentfield': 'formats',
|
'parentfield': 'formats',
|
||||||
@@ -143,7 +142,26 @@
|
|||||||
|
|
||||||
# DocFormat
|
# DocFormat
|
||||||
{
|
{
|
||||||
'doctype': 'DocFormat'
|
'doctype': 'DocFormat',
|
||||||
|
'format': 'Delivery Note Packing List Wise'
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocFormat
|
||||||
|
{
|
||||||
|
'doctype': 'DocFormat',
|
||||||
|
'format': 'Delivery Note Classic'
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocFormat
|
||||||
|
{
|
||||||
|
'doctype': 'DocFormat',
|
||||||
|
'format': 'Delivery Note Modern'
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocFormat
|
||||||
|
{
|
||||||
|
'doctype': 'DocFormat',
|
||||||
|
'format': 'Delivery Note Spartan'
|
||||||
},
|
},
|
||||||
|
|
||||||
# DocField
|
# DocField
|
||||||
@@ -567,6 +585,7 @@
|
|||||||
'label': 'Price List Currency',
|
'label': 'Price List Currency',
|
||||||
'options': 'link:Currency',
|
'options': 'link:Currency',
|
||||||
'permlevel': 0,
|
'permlevel': 0,
|
||||||
|
'print_hide': 1,
|
||||||
'reqd': 1
|
'reqd': 1
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -579,6 +598,7 @@
|
|||||||
'fieldtype': 'Currency',
|
'fieldtype': 'Currency',
|
||||||
'label': 'Price List Currency Conversion Rate',
|
'label': 'Price List Currency Conversion Rate',
|
||||||
'permlevel': 0,
|
'permlevel': 0,
|
||||||
|
'print_hide': 1,
|
||||||
'reqd': 1
|
'reqd': 1
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user