diff --git a/data/master.sql.gz b/data/master.sql.gz index f3eaf3488a8..9f2ed7f0d47 100644 Binary files a/data/master.sql.gz and b/data/master.sql.gz differ diff --git a/erpnext/accounts/Module Def/Accounts/Accounts.txt b/erpnext/accounts/Module Def/Accounts/Accounts.txt index 0a6921a13c2..f9c36c823f9 100644 --- a/erpnext/accounts/Module Def/Accounts/Accounts.txt +++ b/erpnext/accounts/Module Def/Accounts/Accounts.txt @@ -5,7 +5,7 @@ { 'creation': '2010-09-25 10:50:37', 'docstatus': 0, - 'modified': '2011-09-27 12:44:04', + 'modified': '2011-12-07 16:18:28', 'modified_by': 'Administrator', 'owner': 'Administrator' }, @@ -179,6 +179,15 @@ 'doctype': 'Module Def Item' }, + # Module Def Item + { + 'description': 'Track C-Form received from customers', + 'display_name': 'C-Form', + 'doc_name': 'C-Form', + 'doc_type': 'Setup Forms', + 'doctype': 'Module Def Item' + }, + # Module Def Item { 'display_name': 'General Ledger', diff --git a/erpnext/accounts/Print Format/Sales Invoice Classic/Sales Invoice Classic.txt b/erpnext/accounts/Print Format/Sales Invoice Classic/Sales Invoice Classic.txt index 2fed0c4d9cf..d6255d71e7b 100644 --- a/erpnext/accounts/Print Format/Sales Invoice Classic/Sales Invoice Classic.txt +++ b/erpnext/accounts/Print Format/Sales Invoice Classic/Sales Invoice Classic.txt @@ -3,9 +3,9 @@ # These values are common in all dictionaries { - 'creation': '2011-11-15 17:30:44', + 'creation': '2011-12-13 11:02:59', 'docstatus': 0, - 'modified': '2011-11-16 13:46:05', + 'modified': '2011-12-13 13:31:22', 'modified_by': 'Administrator', 'owner': 'Administrator' }, @@ -14,7 +14,7 @@ { 'doc_type': 'Receivable Voucher', 'doctype': 'Print Format', - 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t

Invoice

\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Invoice Date
Due Date
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
Rounded Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n\n', + 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t

\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Invoice Date
Due Date
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
Rounded Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n', 'module': 'Accounts', 'name': '__common__', 'standard': 'Yes' diff --git a/erpnext/accounts/Print Format/Sales Invoice Modern/Sales Invoice Modern.txt b/erpnext/accounts/Print Format/Sales Invoice Modern/Sales Invoice Modern.txt index ea8a9110829..f7d2c6b3870 100644 --- a/erpnext/accounts/Print Format/Sales Invoice Modern/Sales Invoice Modern.txt +++ b/erpnext/accounts/Print Format/Sales Invoice Modern/Sales Invoice Modern.txt @@ -3,9 +3,9 @@ # These values are common in all dictionaries { - 'creation': '2011-11-15 17:30:44', + 'creation': '2011-12-13 11:02:59', 'docstatus': 0, - 'modified': '2011-11-16 13:44:58', + 'modified': '2011-12-13 13:37:39', 'modified_by': 'Administrator', 'owner': 'Administrator' }, @@ -14,7 +14,7 @@ { 'doc_type': 'Receivable Voucher', 'doctype': 'Print Format', - 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t

Invoice

\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Invoice No.
Invoice Date
Due Date
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
Rounded Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n\n', + 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Invoice No.
Invoice Date
Due Date
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
Rounded Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n', 'module': 'Accounts', 'name': '__common__', 'standard': 'Yes' diff --git a/erpnext/accounts/Print Format/Sales Invoice Spartan/Sales Invoice Spartan.txt b/erpnext/accounts/Print Format/Sales Invoice Spartan/Sales Invoice Spartan.txt index d466b73be0c..c24cde54648 100644 --- a/erpnext/accounts/Print Format/Sales Invoice Spartan/Sales Invoice Spartan.txt +++ b/erpnext/accounts/Print Format/Sales Invoice Spartan/Sales Invoice Spartan.txt @@ -3,9 +3,9 @@ # These values are common in all dictionaries { - 'creation': '2011-11-15 17:30:44', + 'creation': '2011-12-13 11:02:59', 'docstatus': 0, - 'modified': '2011-11-16 14:45:46', + 'modified': '2011-12-13 13:39:55', 'modified_by': 'Administrator', 'owner': 'Administrator' }, @@ -14,7 +14,7 @@ { 'doc_type': 'Receivable Voucher', 'doctype': 'Print Format', - 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t

Invoice

\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Invoice Date
Due Date
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
Rounded Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n\n\n', + 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t

\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Invoice Date
Due Date
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
Rounded Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n', 'module': 'Accounts', 'name': '__common__', 'standard': 'Yes' diff --git a/erpnext/accounts/doctype/c_form/__init__.py b/erpnext/accounts/doctype/c_form/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/accounts/doctype/c_form/c_form.js b/erpnext/accounts/doctype/c_form/c_form.js new file mode 100644 index 00000000000..6629de6f3bf --- /dev/null +++ b/erpnext/accounts/doctype/c_form/c_form.js @@ -0,0 +1,10 @@ +//c-form js file +// ----------------------------- +cur_frm.fields_dict.invoice_details.grid.get_field("invoice_no").get_query = function(doc) { + return 'SELECT `tabReceivable Voucher`.`name` FROM `tabReceivable Voucher` WHERE `tabReceivable Voucher`.`company` = "' +doc.company+'" AND `tabReceivable Voucher`.%(key)s LIKE "%s" AND `tabReceivable Voucher`.`customer` = "' + doc.customer + '" AND `tabReceivable Voucher`.`docstatus` = 1 and `tabReceivable Voucher`.`c_form_applicable` = "Yes" and ifnull(`tabReceivable Voucher`.c_form_no, "") = "" ORDER BY `tabReceivable Voucher`.`name` ASC LIMIT 50'; +} + +cur_frm.cscript.invoice_no = function(doc, cdt, cdn) { + var d = locals[cdt][cdn]; + get_server_fields('get_invoice_details', d.invoice_no, 'invoice_details', doc, cdt, cdn, 1); +} diff --git a/erpnext/accounts/doctype/c_form/c_form.py b/erpnext/accounts/doctype/c_form/c_form.py new file mode 100644 index 00000000000..7228f11a4fc --- /dev/null +++ b/erpnext/accounts/doctype/c_form/c_form.py @@ -0,0 +1,61 @@ +# Please edit this list and import only required elements +import webnotes +from webnotes.utils import add_days, cint, cstr, date_diff, default_fields, flt, getdate, now, nowdate +from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType +from webnotes.model.doclist import getlist, copy_doclist +from webnotes.model.code import get_obj +from webnotes import msgprint, errprint + +sql = webnotes.conn.sql +# ----------------------------------------------------------------------------------------- + + +class DocType: + def __init__(self,d,dl): + self.doc, self.doclist = d,dl + + def autoname(self): + self.doc.name = make_autoname(self.doc.naming_series + '.#####') + + + def on_update(self): + """ Update C-Form No on invoices""" + + if len(getlist(self.doclist, 'invoice_details')): + inv = "'" + "', '".join([d.invoice_no for d in getlist(self.doclist, 'invoice_details')]) + "'" + sql("""update `tabReceivable Voucher` set c_form_no = '%s', modified ='%s' + where name in (%s)"""%(self.doc.name, self.doc.modified, inv)) + sql("""update `tabReceivable Voucher` set c_form_no = '', modified = %s where name not + in (%s) and ifnull(c_form_no, '') = %s""", (self.doc.modified, self.doc.name, inv)) + else: + msgprint("Please enter atleast 1 invoice in the table below", raise_exception=1) + + + def get_invoice_details(self, invoice_no): + """ Pull details from invoices for referrence """ + + inv = sql("""select posting_date, territory, net_total, grand_total from + `tabReceivable Voucher` where name = %s""", invoice_no) + ret = { + 'invoice_date' : inv and getdate(inv[0][0]).strftime('%Y-%m-%d') or '', + 'territory' : inv and inv[0][1] or '', + 'net_total' : inv and flt(inv[0][2]) or '', + 'grand_total' : inv and flt(inv[0][3]) or '' + } + return ret + + + def validate_invoice(self): + """Validate invoice that c-form is applicable and no other c-form is + received for that""" + + for d in getlist(self.doclist, 'invoice_details'): + inv = sql("""select c_form_applicable, c_form_no from + `tabReceivable Voucher` where name = %s""", invoice_no) + if not inv: + msgprint("Invoice: %s is not exists in the system, please check." % d.invoice_no, raise_exception=1) + elif inv[0][0] != 'Yes': + msgprint("C-form is not applicable for Invoice: %s" % d.invoice_no, raise_exception=1) + elif inv[0][1] and inv[0][1] != self.doc.name: + msgprint("""Invoice %s is tagged in another C-form: %s. \nIf you want to change C-form no for this invoice, + please remove invoice no from the previous c-form and then try again""" % (d.invoice_no, inv[0][1]), raise_exception=1) diff --git a/erpnext/accounts/doctype/c_form/c_form.txt b/erpnext/accounts/doctype/c_form/c_form.txt new file mode 100644 index 00000000000..987bc9a7b37 --- /dev/null +++ b/erpnext/accounts/doctype/c_form/c_form.txt @@ -0,0 +1,190 @@ +# DocType, C-Form +[ + + # These values are common in all dictionaries + { + 'creation': '2011-12-07 16:16:16', + 'docstatus': 0, + 'modified': '2011-12-07 17:50:17', + 'modified_by': 'Administrator', + 'owner': 'Administrator' + }, + + # These values are common for all DocType + { + '_last_update': '1323255350', + 'colour': 'White:FFF', + 'doctype': 'DocType', + 'module': 'Accounts', + 'name': '__common__', + 'section_style': 'Simple', + 'show_in_menu': 0, + 'version': 11 + }, + + # These values are common for all DocField + { + 'doctype': 'DocField', + 'name': '__common__', + 'parent': 'C-Form', + 'parentfield': 'fields', + 'parenttype': 'DocType', + 'permlevel': 0 + }, + + # These values are common for all DocPerm + { + 'doctype': 'DocPerm', + 'name': '__common__', + 'parent': 'C-Form', + 'parentfield': 'permissions', + 'parenttype': 'DocType', + 'read': 1 + }, + + # DocType, C-Form + { + 'doctype': 'DocType', + 'name': 'C-Form' + }, + + # DocPerm + { + 'create': 1, + 'doctype': 'DocPerm', + 'permlevel': 0, + 'role': 'Accounts User', + 'write': 1 + }, + + # DocPerm + { + 'create': 1, + 'doctype': 'DocPerm', + 'permlevel': 0, + 'role': 'Accounts Manager', + 'submit': 0, + 'write': 1 + }, + + # DocPerm + { + 'doctype': 'DocPerm', + 'permlevel': 1, + 'role': 'All' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldtype': 'Column Break', + 'width': '50%' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'naming_series', + 'fieldtype': 'Select', + 'label': 'Series', + 'options': '\nC-FORM/', + 'reqd': 1 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'c_form_no', + 'fieldtype': 'Data', + 'label': 'C-Form No', + 'reqd': 1 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'received_date', + 'fieldtype': 'Date', + 'label': 'Received Date', + 'reqd': 1 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'customer', + 'fieldtype': 'Link', + 'label': 'Customer', + 'options': 'Customer', + 'reqd': 1 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldtype': 'Column Break', + 'width': '50%' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'company', + 'fieldtype': 'Select', + 'label': 'Company', + 'options': 'link:Company' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'fiscal_year', + 'fieldtype': 'Select', + 'label': 'Fiscal Year', + 'options': 'link:Fiscal Year', + 'reqd': 1 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'quarter', + 'fieldtype': 'Select', + 'label': 'Quarter', + 'options': '\nI\nII\nIII\nIV' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'total_amount', + 'fieldtype': 'Currency', + 'label': 'Total Amount', + 'reqd': 1 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'state', + 'fieldtype': 'Select', + 'label': 'State', + 'options': "link:State\ncountry='India'", + 'reqd': 1 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldtype': 'Section Break' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'invoice_details', + 'fieldtype': 'Table', + 'label': 'Invoice Details', + 'options': 'C-Form Invoice Detail' + } +] \ No newline at end of file diff --git a/erpnext/accounts/doctype/c_form_invoice_detail/__init__.py b/erpnext/accounts/doctype/c_form_invoice_detail/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/accounts/doctype/c_form_invoice_detail/c_form_invoice_detail.txt b/erpnext/accounts/doctype/c_form_invoice_detail/c_form_invoice_detail.txt new file mode 100644 index 00000000000..d6be6c0d4d3 --- /dev/null +++ b/erpnext/accounts/doctype/c_form_invoice_detail/c_form_invoice_detail.txt @@ -0,0 +1,91 @@ +# DocType, C-Form Invoice Detail +[ + + # These values are common in all dictionaries + { + 'creation': '2011-12-07 16:15:39', + 'docstatus': 0, + 'modified': '2011-12-07 16:21:55', + 'modified_by': 'Administrator', + 'owner': 'Administrator' + }, + + # These values are common for all DocType + { + 'colour': 'White:FFF', + 'doctype': 'DocType', + 'istable': 1, + 'module': 'Accounts', + 'name': '__common__', + 'section_style': 'Simple', + 'show_in_menu': 0, + 'version': 5 + }, + + # These values are common for all DocField + { + 'doctype': 'DocField', + 'name': '__common__', + 'parent': 'C-Form Invoice Detail', + 'parentfield': 'fields', + 'parenttype': 'DocType' + }, + + # DocType, C-Form Invoice Detail + { + 'doctype': 'DocType', + 'name': 'C-Form Invoice Detail' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'invoice_no', + 'fieldtype': 'Link', + 'label': 'Invoice No', + 'options': 'Receivable Voucher', + 'permlevel': 0, + 'width': '160px' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'invoice_date', + 'fieldtype': 'Date', + 'label': 'Invoice Date', + 'permlevel': 1, + 'width': '120px' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'territory', + 'fieldtype': 'Link', + 'label': 'Territory', + 'options': 'Territory', + 'permlevel': 1, + 'width': '120px' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'net_total', + 'fieldtype': 'Currency', + 'label': 'Net Total', + 'permlevel': 1, + 'width': '120px' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'grand_total', + 'fieldtype': 'Currency', + 'label': 'Grand Total', + 'permlevel': 1, + 'width': '120px' + } +] \ No newline at end of file diff --git a/erpnext/accounts/doctype/gl_control/gl_control.py b/erpnext/accounts/doctype/gl_control/gl_control.py index 01f31eb7ddc..bab86267c15 100644 --- a/erpnext/accounts/doctype/gl_control/gl_control.py +++ b/erpnext/accounts/doctype/gl_control/gl_control.py @@ -515,6 +515,7 @@ def manage_recurring_invoices(): send_notification(new_rv) + def create_new_invoice(prev_rv): # clone rv new_rv = clone(prev_rv) @@ -533,6 +534,61 @@ def create_new_invoice(prev_rv): return new_rv + def send_notification(new_rv): """Notify concerned persons about recurring invoice generation""" - pass + subject = "Invoice : " + new_rv.doc.name + + com = new_rv.doc.company # get_value('Control Panel', '', 'letter_head') + + hd = '''

%s

+

Invoice: %s

+ + + + + +
Customer
%s
%s
Invoice Date: %s
Due Date: %s
+ ''' % (com, new_rv.doc.name, new_rv.doc.customer, new_rv.doc.address_display, new_rv.doc.posting_date, new_rv.doc.due_date) + + + tbl = ''' + + + + + + + + ''' + for d in getlist(new_rv.doclist, 'entries'): + tbl += '' + tbl += '
ItemDescriptionQtyRateAmount
' + d.item_code +'' + d.description+'' + cstr(d.qty) +'' + cstr(d.basic_rate) +'' + cstr(d.amount) +'
' + + totals =''' + + + + + + +
+ + + + + + + + + + +
Net Total: %s
Total Tax: %s
Grand Total: %s
In Words: %s
+
Terms:
%s
+ ''' % (new_rv.doc.net_total, new_rv.doc.total_tax,new_rv.doc.grand_total, new_rv.doc.in_words,new_rv.doc.terms) + + + msg = hd + tbl + totals + from webnotes.utils.email_lib import sendmail + sendmail(recipients = [new_rv.doc.email_notification_address], \ + sender=new_rv.doc.owner, subject=subject, parts=[['text/plain', msg]]) diff --git a/erpnext/accounts/doctype/payable_voucher/payable_voucher.js b/erpnext/accounts/doctype/payable_voucher/payable_voucher.js index ca79387e3d3..41722d57f78 100644 --- a/erpnext/accounts/doctype/payable_voucher/payable_voucher.js +++ b/erpnext/accounts/doctype/payable_voucher/payable_voucher.js @@ -66,7 +66,7 @@ cur_frm.cscript.supplier = function(doc,dt,dn) { get_server_fields('get_default_values', args, 'entries', doc, el[i].doctype, el[i].name, 1); } } - cur_frm.cscript.calc_total(doc); + cur_frm.cscript.calc_amount(doc, 1); } if(doc.supplier) get_server_fields('get_default_supplier_address', JSON.stringify({supplier: doc.supplier}),'', doc, dt, dn, 1,callback); diff --git a/erpnext/accounts/doctype/pv_detail/pv_detail.txt b/erpnext/accounts/doctype/pv_detail/pv_detail.txt index f14b44b01e5..e1181b0bb32 100755 --- a/erpnext/accounts/doctype/pv_detail/pv_detail.txt +++ b/erpnext/accounts/doctype/pv_detail/pv_detail.txt @@ -5,7 +5,7 @@ { 'creation': '2010-08-08 17:09:17', 'docstatus': 0, - 'modified': '2011-12-13 12:06:35', + 'modified': '2011-12-14 10:44:21', 'modified_by': 'Administrator', 'owner': 'Administrator' }, @@ -14,6 +14,7 @@ { 'autoname': 'EVD.######', 'colour': 'White:FFF', + 'default_print_format': 'Standard', 'doctype': 'DocType', 'istable': 1, 'module': 'Accounts', @@ -21,7 +22,7 @@ 'section_style': 'Tray', 'server_code_error': ' ', 'show_in_menu': 0, - 'version': 39 + 'version': 42 }, # These values are common for all DocField @@ -70,18 +71,6 @@ 'search_index': 0 }, - # DocField - { - 'doctype': 'DocField', - 'fieldname': 'brand', - 'fieldtype': 'Data', - 'label': 'Brand', - 'oldfieldname': 'brand', - 'oldfieldtype': 'Data', - 'permlevel': 0, - 'print_hide': 1 - }, - # DocField { 'doctype': 'DocField', @@ -94,21 +83,6 @@ 'width': '300px' }, - # DocField - { - 'doctype': 'DocField', - 'fieldname': 'item_group', - 'fieldtype': 'Link', - 'in_filter': 1, - 'label': 'Item Group', - 'oldfieldname': 'item_group', - 'oldfieldtype': 'Link', - 'options': 'Item Group', - 'permlevel': 1, - 'print_hide': 1, - 'search_index': 1 - }, - # DocField { 'doctype': 'DocField', @@ -123,6 +97,52 @@ 'trigger': 'Client' }, + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'import_ref_rate', + 'fieldtype': 'Currency', + 'label': 'Ref Rate ', + 'permlevel': 0, + 'trigger': 'Client' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'discount_rate', + 'fieldtype': 'Currency', + 'label': 'Discount %', + 'permlevel': 0, + 'trigger': 'Client' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'import_rate', + 'fieldtype': 'Currency', + 'label': 'Rate ', + 'oldfieldname': 'import_rate', + 'oldfieldtype': 'Currency', + 'permlevel': 0, + 'print_hide': 0, + 'reqd': 1, + 'trigger': 'Client' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'import_amount', + 'fieldtype': 'Currency', + 'label': 'Amount', + 'oldfieldname': 'import_amount', + 'oldfieldtype': 'Currency', + 'permlevel': 1, + 'reqd': 1 + }, + # DocField { 'doctype': 'DocField', @@ -160,52 +180,6 @@ 'reqd': 1 }, - # DocField - { - 'doctype': 'DocField', - 'fieldname': 'discount_rate', - 'fieldtype': 'Currency', - 'label': 'Discount %', - 'permlevel': 0, - 'trigger': 'Client' - }, - - # DocField - { - 'doctype': 'DocField', - 'fieldname': 'import_ref_rate', - 'fieldtype': 'Currency', - 'label': 'Ref Rate ', - 'permlevel': 0, - 'trigger': 'Client' - }, - - # DocField - { - 'doctype': 'DocField', - 'fieldname': 'import_rate', - 'fieldtype': 'Currency', - 'label': 'Rate ', - 'oldfieldname': 'import_rate', - 'oldfieldtype': 'Currency', - 'permlevel': 0, - 'print_hide': 0, - 'reqd': 1, - 'trigger': 'Client' - }, - - # DocField - { - 'doctype': 'DocField', - 'fieldname': 'import_amount', - 'fieldtype': 'Currency', - 'label': 'Amount', - 'oldfieldname': 'import_amount', - 'oldfieldtype': 'Currency', - 'permlevel': 1, - 'reqd': 1 - }, - # DocField { 'colour': 'White:FFF', @@ -239,6 +213,46 @@ 'width': '120px' }, + # DocField + { + 'colour': 'White:FFF', + 'doctype': 'DocField', + 'fieldname': 'project_name', + 'fieldtype': 'Link', + 'in_filter': 1, + 'label': 'Project Name', + 'options': 'Project', + 'permlevel': 0, + 'print_hide': 1 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'brand', + 'fieldtype': 'Data', + 'label': 'Brand', + 'oldfieldname': 'brand', + 'oldfieldtype': 'Data', + 'permlevel': 0, + 'print_hide': 1 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'item_group', + 'fieldtype': 'Link', + 'in_filter': 1, + 'label': 'Item Group', + 'oldfieldname': 'item_group', + 'oldfieldtype': 'Link', + 'options': 'Item Group', + 'permlevel': 1, + 'print_hide': 1, + 'search_index': 1 + }, + # DocField { 'doctype': 'DocField', diff --git a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.js b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.js index 363da2ec573..12b57d94546 100644 --- a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.js +++ b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.js @@ -67,6 +67,12 @@ cur_frm.cscript.hide_fields = function(doc, cdt, cdn) { } } } + + // India related fields + var cp = locals['Control Panel']['Control Panel']; + if (cp.country == 'India') unhide_field(['c_form_applicable', 'c_form_no']); + else hide_field(['c_form_applicable', 'c_form_no']); + } diff --git a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.py b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.py index 13ed8d3c5e2..57d8c55facc 100644 --- a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.py +++ b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.py @@ -397,6 +397,14 @@ class DocType(TransactionBase): if flt(self.doc.write_off_amount) and not self.doc.write_off_account: msgprint("Please enter Write Off Account", raise_exception=1) + + def validate_c_form(self): + """ Blank C-form no if C-form applicable marked as 'No'""" + if self.doc.amended_from and self.doc.c_form_applicable == 'No' and self.doc.c_form_no: + sql("""delete from `tabC-Form Invoice Detail` where invoice_no = %s + and parent = %s""", (self.doc.amended_from, self.doc.c_form_no)) + + set(self.doc, 'c_form_no', '') # VALIDATE # ==================================================================================== @@ -432,6 +440,7 @@ class DocType(TransactionBase): self.clear_advances() # Set against account self.set_against_income_account() + self.validate_c_form() # *************************************************** ON SUBMIT ********************************************** @@ -554,10 +563,21 @@ class DocType(TransactionBase): if not cint(self.doc.is_pos) == 1: self.update_against_document_in_jv() - + + self.update_c_form() + # on submit notification # get_obj('Notification Control').notify_contact('Sales Invoice', self.doc.doctype,self.doc.name, self.doc.email_id, self.doc.contact_person) - + + + def update_c_form(self): + """Update amended id in C-form""" + if self.doc.c_form_no and self.doc.amended_from: + sql("""update `tabC-Form Invoice Detail` set invoice_no = %s, + invoice_date = %s, territory = %s, net_total = %s, + grand_total = %s where invoice_no = %s and parent = %s""", (self.doc.name, self.doc.amended_from, self.doc.c_form_no)) + + # *************************************************** ON CANCEL ********************************************** # Check Next Document's docstatus diff --git a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.txt b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.txt index e2fc0c6416e..eedb01c5dd5 100644 --- a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.txt +++ b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.txt @@ -5,7 +5,7 @@ { 'creation': '2010-08-08 17:09:18', 'docstatus': 0, - 'modified': '2011-12-06 13:17:26', + 'modified': '2011-12-08 16:28:22', 'modified_by': 'Administrator', 'owner': 'Administrator' }, @@ -21,7 +21,7 @@ # These values are common for all DocType { - '_last_update': '1323156733', + '_last_update': '1323341785', 'change_log': '1. Change in pull_details method dt.-26-06-2009', 'colour': 'White:FFF', 'default_print_format': 'Standard', @@ -34,7 +34,7 @@ 'server_code_error': ' ', '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', - 'version': 383 + 'version': 388 }, # These values are common for all DocFormat @@ -971,6 +971,31 @@ 'permlevel': 0 }, + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'c_form_applicable', + 'fieldtype': 'Select', + 'label': 'C-Form Applicable', + 'no_copy': 1, + 'options': 'No\nYes', + 'permlevel': 0, + 'print_hide': 1, + 'report_hide': 0 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'c_form_no', + 'fieldtype': 'Link', + 'label': 'C-Form No', + 'no_copy': 1, + 'options': 'C-Form', + 'permlevel': 1, + 'print_hide': 1 + }, + # DocField { 'doctype': 'DocField', diff --git a/erpnext/accounts/page/accounts_browser/accounts_browser.js b/erpnext/accounts/page/accounts_browser/accounts_browser.js index 38acfc9dc29..2a2435b0ad3 100644 --- a/erpnext/accounts/page/accounts_browser/accounts_browser.js +++ b/erpnext/accounts/page/accounts_browser/accounts_browser.js @@ -124,7 +124,7 @@ pscript.make_ac_tree = function() { var imgsrc=null; var has_children = true; if(cl[i].group_or_ledger=='Ledger') { - var imgsrc = 'images/icons/page.gif'; + var imgsrc = 'lib/images/icons/page.gif'; has_children = false; } var t = tree.addNode(n, cl[i].account_name, imgsrc,tree.std_onclick, has_children ? tree.std_onexp : null); @@ -137,7 +137,7 @@ pscript.make_ac_tree = function() { var imgsrc=null; var has_children = true; if(cl[i].group_or_ledger=='Ledger') { - var imgsrc = 'images/icons/page.gif'; + var imgsrc = 'lib/images/icons/page.gif'; has_children = false; } var t = tree.addNode(n, cl[i].cost_center_name, imgsrc,tree.std_onclick, has_children ? tree.std_onexp : null); @@ -254,7 +254,7 @@ pscript.make_group_area = function(type) { // refresh ref_btn = $a(pscript.group_area, 'div', '', {fontSize: '14px',marginBottom: '8px', marginTop: '24px', fontWeight: 'bold'}); - ref_btn.innerHTML = 'Refresh Tree'; + ref_btn.innerHTML = 'Refresh Tree'; ref_btn.onclick= function() { pscript.cur_node.clear_child_nodes(); pscript.cur_node.expand(); @@ -312,7 +312,7 @@ pscript.make_ledger_area = function() { //General ledger report link pscript.gl_rep = $a(pscript.ledger_area, 'div','', {fontSize: '14px',marginBottom: '8px', fontWeight: 'bold'}); - pscript.gl_rep.innerHTML = 'Open Ledger'; + pscript.gl_rep.innerHTML = 'Open Ledger'; pscript.gl_rep.onclick = function(){ pscript.make_report('gl'); } //Budget report link diff --git a/erpnext/buying/Print Format/Purchase Order Classic/Purchase Order Classic.txt b/erpnext/buying/Print Format/Purchase Order Classic/Purchase Order Classic.txt index bd10b2d3289..604d2d81788 100644 --- a/erpnext/buying/Print Format/Purchase Order Classic/Purchase Order Classic.txt +++ b/erpnext/buying/Print Format/Purchase Order Classic/Purchase Order Classic.txt @@ -3,9 +3,9 @@ # These values are common in all dictionaries { - 'creation': '2011-11-15 17:30:44', + 'creation': '2011-12-13 11:02:59', 'docstatus': 0, - 'modified': '2011-11-15 17:30:44', + 'modified': '2011-12-13 13:51:41', 'modified_by': 'Administrator', 'owner': 'Administrator' }, @@ -14,7 +14,7 @@ { 'doc_type': 'Purchase Order', 'doctype': 'Print Format', - 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t

Purchase Order

\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Purchase Order Date
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n\n', + 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t

\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Purchase Order Date
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n', 'module': 'Buying', 'name': '__common__', 'standard': 'Yes' diff --git a/erpnext/buying/Print Format/Purchase Order Modern/Purchase Order Modern.txt b/erpnext/buying/Print Format/Purchase Order Modern/Purchase Order Modern.txt index 94c5a3f1d81..f5cafe43351 100644 --- a/erpnext/buying/Print Format/Purchase Order Modern/Purchase Order Modern.txt +++ b/erpnext/buying/Print Format/Purchase Order Modern/Purchase Order Modern.txt @@ -3,9 +3,9 @@ # These values are common in all dictionaries { - 'creation': '2011-11-15 17:30:45', + 'creation': '2011-12-13 11:02:59', 'docstatus': 0, - 'modified': '2011-11-15 17:30:45', + 'modified': '2011-12-13 13:53:52', 'modified_by': 'Administrator', 'owner': 'Administrator' }, @@ -14,7 +14,7 @@ { 'doc_type': 'Purchase Order', 'doctype': 'Print Format', - 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t

Purchase Order

\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Purchase Order No.
Purchase Order Date
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n\n', + 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Purchase Order No.
Purchase Order Date
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n', 'module': 'Buying', 'name': '__common__', 'standard': 'Yes' diff --git a/erpnext/buying/Print Format/Purchase Order Spartan/Purchase Order Spartan.txt b/erpnext/buying/Print Format/Purchase Order Spartan/Purchase Order Spartan.txt index adb397ab807..70d6961f4d7 100644 --- a/erpnext/buying/Print Format/Purchase Order Spartan/Purchase Order Spartan.txt +++ b/erpnext/buying/Print Format/Purchase Order Spartan/Purchase Order Spartan.txt @@ -3,9 +3,9 @@ # These values are common in all dictionaries { - 'creation': '2011-11-15 17:30:45', + 'creation': '2011-12-13 11:02:59', 'docstatus': 0, - 'modified': '2011-11-16 14:45:05', + 'modified': '2011-12-13 13:55:23', 'modified_by': 'Administrator', 'owner': 'Administrator' }, @@ -14,7 +14,7 @@ { 'doc_type': 'Purchase Order', 'doctype': 'Print Format', - 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t

Purchase Order

\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Purchase Order Date
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n\n\n', + 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t

\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Purchase Order Date
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n', 'module': 'Buying', 'name': '__common__', 'standard': 'Yes' diff --git a/erpnext/buying/doctype/po_detail/po_detail.txt b/erpnext/buying/doctype/po_detail/po_detail.txt index c8d831b8dc4..1512666b03f 100755 --- a/erpnext/buying/doctype/po_detail/po_detail.txt +++ b/erpnext/buying/doctype/po_detail/po_detail.txt @@ -5,7 +5,7 @@ { 'creation': '2010-08-08 17:09:12', 'docstatus': 0, - 'modified': '2011-12-13 13:02:05', + 'modified': '2011-12-14 10:49:46', 'modified_by': 'Administrator', 'owner': 'Administrator' }, @@ -14,6 +14,7 @@ { 'autoname': 'POD/.#####', 'colour': 'White:FFF', + 'default_print_format': 'Standard', 'doctype': 'DocType', 'istable': 1, 'module': 'Buying', @@ -21,7 +22,7 @@ 'section_style': 'Tray', 'server_code_error': ' ', 'show_in_menu': 0, - 'version': 59 + 'version': 60 }, # These values are common for all DocField @@ -104,6 +105,7 @@ # DocField { + 'default': '0.00', 'doctype': 'DocField', 'fieldname': 'qty', 'fieldtype': 'Currency', @@ -119,40 +121,12 @@ # DocField { 'doctype': 'DocField', - 'fieldname': 'purchase_rate', + 'fieldname': 'import_ref_rate', 'fieldtype': 'Currency', - 'label': 'Rate (Default Curr.) *', - 'oldfieldname': 'purchase_rate', - 'oldfieldtype': 'Currency', - 'permlevel': 0, - 'print_hide': 1, - 'reqd': 1, - 'trigger': 'Client', - 'width': '100px' - }, - - # DocField - { - 'doctype': 'DocField', - 'fieldname': 'purchase_ref_rate', - 'fieldtype': 'Currency', - 'label': 'Ref Rate *', + 'label': 'Ref Rate ', 'permlevel': 0 }, - # DocField - { - 'doctype': 'DocField', - 'fieldname': 'amount', - 'fieldtype': 'Currency', - 'label': 'Amount (Default Curr.)', - 'oldfieldname': 'amount', - 'oldfieldtype': 'Currency', - 'permlevel': 1, - 'print_hide': 1, - 'reqd': 1 - }, - # DocField { 'doctype': 'DocField', @@ -177,15 +151,6 @@ 'trigger': 'Client' }, - # DocField - { - 'doctype': 'DocField', - 'fieldname': 'import_ref_rate', - 'fieldtype': 'Currency', - 'label': 'Ref Rate ', - 'permlevel': 0 - }, - # DocField { 'doctype': 'DocField', @@ -200,19 +165,42 @@ # DocField { 'doctype': 'DocField', - 'fieldname': 'uom', - 'fieldtype': 'Link', - 'label': 'UOM', - 'oldfieldname': 'uom', - 'oldfieldtype': 'Link', - 'options': 'UOM', + 'fieldname': 'purchase_ref_rate', + 'fieldtype': 'Currency', + 'label': 'Ref Rate *', + 'permlevel': 0 + }, + + # DocField + { + 'default': '0.00', + 'doctype': 'DocField', + 'fieldname': 'purchase_rate', + 'fieldtype': 'Currency', + 'label': 'Rate (Default Curr.) *', + 'oldfieldname': 'purchase_rate', + 'oldfieldtype': 'Currency', 'permlevel': 0, - 'print_hide': 0, + 'print_hide': 1, 'reqd': 1, 'trigger': 'Client', 'width': '100px' }, + # DocField + { + 'default': '0.00', + 'doctype': 'DocField', + 'fieldname': 'amount', + 'fieldtype': 'Currency', + 'label': 'Amount (Default Curr.)', + 'oldfieldname': 'amount', + 'oldfieldtype': 'Currency', + 'permlevel': 1, + 'print_hide': 1, + 'reqd': 1 + }, + # DocField { 'doctype': 'DocField', @@ -229,6 +217,35 @@ 'trigger': 'Client' }, + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'project_name', + 'fieldtype': 'Link', + 'in_filter': 1, + 'label': 'Project Name', + 'options': 'Project', + 'permlevel': 0, + 'print_hide': 1, + 'report_hide': 0 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'uom', + 'fieldtype': 'Link', + 'label': 'UOM', + 'oldfieldname': 'uom', + 'oldfieldtype': 'Link', + 'options': 'UOM', + 'permlevel': 0, + 'print_hide': 0, + 'reqd': 1, + 'trigger': 'Client', + 'width': '100px' + }, + # DocField { 'colour': 'White:FFF', @@ -246,21 +263,6 @@ 'width': '100px' }, - # DocField - { - 'colour': 'White:FFF', - 'doctype': 'DocField', - 'fieldname': 'prevdoc_doctype', - 'fieldtype': 'Data', - 'hidden': 1, - 'label': 'Prevdoc DocType', - 'no_copy': 0, - 'oldfieldname': 'prevdoc_doctype', - 'oldfieldtype': 'Data', - 'permlevel': 1, - 'print_hide': 1 - }, - # DocField { 'doctype': 'DocField', @@ -276,6 +278,21 @@ 'width': '100px' }, + # DocField + { + 'colour': 'White:FFF', + 'doctype': 'DocField', + 'fieldname': 'prevdoc_doctype', + 'fieldtype': 'Data', + 'hidden': 1, + 'label': 'Prevdoc DocType', + 'no_copy': 0, + 'oldfieldname': 'prevdoc_doctype', + 'oldfieldtype': 'Data', + 'permlevel': 1, + 'print_hide': 1 + }, + # DocField { 'colour': 'White:FFF', @@ -359,6 +376,7 @@ # DocField { + 'colour': 'White:FFF', 'doctype': 'DocField', 'fieldname': 'stock_qty', 'fieldtype': 'Currency', @@ -367,7 +385,7 @@ 'no_copy': 1, 'oldfieldname': 'stock_qty', 'oldfieldtype': 'Currency', - 'permlevel': 0, + 'permlevel': 1, 'print_hide': 1, 'trigger': 'Client', 'width': '100px' @@ -389,6 +407,7 @@ # DocField { + 'default': '0.00', 'doctype': 'DocField', 'fieldname': 'billed_qty', 'fieldtype': 'Currency', diff --git a/erpnext/buying/doctype/supplier/supplier.txt b/erpnext/buying/doctype/supplier/supplier.txt index a7a08c3a07d..08348987f1d 100644 --- a/erpnext/buying/doctype/supplier/supplier.txt +++ b/erpnext/buying/doctype/supplier/supplier.txt @@ -333,4 +333,4 @@ 'oldfieldtype': 'Small Text', 'permlevel': 1 } -] \ No newline at end of file +] diff --git a/erpnext/home/page/dashboard/dashboard.js b/erpnext/home/page/dashboard/dashboard.js index 08be0af675c..aac42a3e3b8 100644 --- a/erpnext/home/page/dashboard/dashboard.js +++ b/erpnext/home/page/dashboard/dashboard.js @@ -10,8 +10,20 @@ pscript.onload_dashboard = function() { pscript.dashboard_settings = { company: sys_defaults.company, - start: dateutil.obj_to_str(dateutil.add_days(new Date(), -180)), - end: dateutil.obj_to_str(new Date()), + start: (function() { + var start_date = dateutil.add_days(new Date(), -180); + var year_start_date = dateutil.str_to_obj(sys_defaults.year_start_date); + if (start_date < year_start_date) { start_date = year_start_date; } + console.log(start_date); + return dateutil.obj_to_str(start_date); + })(), + end: (function() { + var end_date = new Date(); + var year_end_date = dateutil.str_to_obj(sys_defaults.year_end_date); + if (end_date > year_end_date) { end_date = year_end_date; } + console.log(end_date); + return dateutil.obj_to_str(end_date); + })(), interval: 30 } diff --git a/erpnext/home/page/dashboard/dashboard.py b/erpnext/home/page/dashboard/dashboard.py index 9ead6d688d5..c2378d3155e 100644 --- a/erpnext/home/page/dashboard/dashboard.py +++ b/erpnext/home/page/dashboard/dashboard.py @@ -133,19 +133,27 @@ class DashboardWidget: webnotes.msgprint('Wrongly defined account: ' + acc) print acc raise e - - return self.glc.get_as_on_balance(acc, self.get_fiscal_year(start), start, debit_or_credit, lft, rgt) + + fiscal_year = self.get_fiscal_year(start) + if fiscal_year: + return self.glc.get_as_on_balance(acc, fiscal_year, start, debit_or_credit, lft, rgt) + else: + webnotes.msgprint('Please select the START DATE and END DATE such that\ + they fall within fiscal year(s) as defined in\ + Setup > System > Fiscal Year.', raise_exception=1) + def get_fiscal_year(self, dt): """ get fiscal year from date """ import webnotes - return webnotes.conn.sql(""" + fiscal_year = webnotes.conn.sql(""" select name from `tabFiscal Year` where year_start_date <= %s and DATE_ADD(year_start_date, INTERVAL 1 YEAR) >= %s - """, (dt, dt))[0][0] + """, (dt, dt)) + return fiscal_year and (fiscal_year[0] and fiscal_year[0][0]) or None def get_creation_trend(self, doctype, start, end): """ @@ -257,4 +265,4 @@ if __name__=='__main__': "start": "2011-05-01", "end": "2011-08-01", "interval": "7" - }""") \ No newline at end of file + }""") diff --git a/erpnext/home/page/my_company/my_company.js b/erpnext/home/page/my_company/my_company.js index e88c45897c9..6a905501ebf 100644 --- a/erpnext/home/page/my_company/my_company.js +++ b/erpnext/home/page/my_company/my_company.js @@ -42,13 +42,48 @@ pscript.myc_show_erpnext_message = function() { // Add user dialog and server call // pscript.myc_add_user = function() { + var fields = [{ + fieldtype: 'Data', + fieldname: 'user', + reqd: 1, + label: 'Email Id of the user to add' + }]; + console.log(pscript.is_erpnext_saas); + + if(pscript.is_erpnext_saas==0) { + fields = fields.concat([ + { + fieldtype: 'Data', + fieldname: 'first_name', + reqd: 1, + label: 'First Name' + }, + { + fieldtype: 'Data', + fieldname: 'last_name', + reqd: 1, + label: 'Last Name' + }, + { + fieldtype: 'Data', + fieldname: 'password', + reqd: 1, + label: 'Password' + }]); + } + + fields.push({ + fieldtype: 'Button', + label: 'Add', + fieldname: 'add' + }); + + console.log(fields); + var d = new wn.widgets.Dialog({ title: 'Add User', width: 400, - fields: [ - {fieldtype:'Data', fieldname:'user',reqd:1,label:'Email Id of the user to add'}, - {fieldtype:'Button', label:'Add', fieldname:'add'} - ] + fields: fields }); d.make(); d.fields_dict.add.input.onclick = function() { diff --git a/erpnext/home/page/my_company/my_company.py b/erpnext/home/page/my_company/my_company.py index c96d99871df..ad0089dc14e 100644 --- a/erpnext/home/page/my_company/my_company.py +++ b/erpnext/home/page/my_company/my_company.py @@ -57,14 +57,15 @@ def add_user(args): from server_tools.gateway_utils import add_user_gateway add_user_gateway(args['user']) - add_profile(args['user']) + add_profile(args) # # add profile record # -def add_profile(email): +def add_profile(args): from webnotes.utils import validate_email_add from webnotes.model.doc import Document + email = args['user'] sql = webnotes.conn.sql @@ -83,9 +84,17 @@ def add_profile(email): pr = Document('Profile') pr.name = email pr.email = email - pr.enabled=1 - pr.user_type='System User' - pr.save(1) + pr.first_name = args.get('first_name') + pr.last_name = args.get('last_name') + pr.enabled = 1 + pr.user_type = 'System User' + pr.save(1) + + if args.get('password'): + sql(""" + UPDATE tabProfile + SET password = PASSWORD(%s) + WHERE name = %s""", (args.get('password'), email)) # # post comment diff --git a/erpnext/patches/Discount_purchase_cycle.py b/erpnext/patches/Discount_purchase_cycle.py index 8c41d5dd27b..34fd49827fd 100755 --- a/erpnext/patches/Discount_purchase_cycle.py +++ b/erpnext/patches/Discount_purchase_cycle.py @@ -5,5 +5,10 @@ def execute(): reload_doc('accounts', 'doctype', 'pv_detail') reload_doc('buying', 'doctype', 'po_detail') reload_doc('stock', 'doctype', 'purchase_receipt_detail') - if webnotes.conn.sql("select name from 'tabDocField` where parent = 'PO Detail' and fieldname = 'discount'"): + if webnotes.conn.sql("select name from `tabDocField` where parent = 'PO Detail' and fieldname = 'discount'"): webnotes.conn.sql("update `tabPO Detail` set discount_rate=discount") + + # Features setup + reload_doc('setup', 'doctype', 'features_setup') + from webnotes.model.code import get_obj + get_obj('Features Setup').validate() diff --git a/erpnext/patches/c_form_patch.py b/erpnext/patches/c_form_patch.py new file mode 100644 index 00000000000..0f8fa22d686 --- /dev/null +++ b/erpnext/patches/c_form_patch.py @@ -0,0 +1,12 @@ +def execute(): + import webnotes + from webnotes.modules.module_manager import reload_doc + + reload_doc('accounts', 'doctype', 'receivable_voucher') + reload_doc('accounts', 'doctype', 'c_form') + reload_doc('accounts', 'doctype', 'c_form_invoice_detail') + reload_doc('accounts', 'Module Def', 'Accounts') + + sql = webnotes.conn.sql + sql("update `tabReceivable Voucher` set c_form_applicable = 'Yes' where c_form_applicable = 'Y'") + sql("update `tabReceivable Voucher` set c_form_applicable = 'No' where c_form_applicable = 'N'") diff --git a/erpnext/patches/deploy_email_digest.py b/erpnext/patches/deploy_email_digest.py new file mode 100644 index 00000000000..1dd97e32498 --- /dev/null +++ b/erpnext/patches/deploy_email_digest.py @@ -0,0 +1,75 @@ +import webnotes + +def execute(): + """ + * Reload email_digest doctype + * Create default email digest + """ + from webnotes.modules.module_manager import reload_doc + + # Minor fix in print_format doctype + #reload_doc('core', 'doctype', 'print_format') + + reload_doc('setup', 'doctype', 'email_digest') + + global create_default_email_digest + create_default_email_digest() + + +def create_default_email_digest(): + """ + * Weekly Digest + * For all companies + * Recipients: System Managers + * Full content + * Disabled by default + """ + from webnotes.model.doc import Document + companies_list = webnotes.conn.sql("SELECT company_name FROM `tabCompany`", as_list=1) + global get_system_managers + system_managers = get_system_managers() + for company in companies_list: + if company and company[0]: + edigest = Document('Email Digest') + edigest.name = "Default Weekly Digest - " + company[0] + edigest.company = company[0] + edigest.frequency = 'Weekly' + edigest.recipient_list = system_managers + edigest.new_leads = 1 + edigest.new_enquiries = 1 + edigest.new_quotations = 1 + edigest.new_sales_orders = 1 + edigest.new_purchase_orders = 1 + edigest.new_transactions = 1 + edigest.payables = 1 + edigest.payments = 1 + edigest.expenses_booked = 1 + edigest.invoiced_amount = 1 + edigest.collections = 1 + edigest.income = 1 + edigest.bank_balance = 1 + exists = webnotes.conn.sql("""\ + SELECT name FROM `tabEmail Digest` + WHERE name = %s""", edigest.name) + if (exists and exists[0]) and exists[0][0]: + continue + else: + edigest.save(1) + + +def get_system_managers(): + """ + Returns a string of system managers' email addresses separated by \n + """ + system_managers_list = webnotes.conn.sql("""\ + SELECT DISTINCT p.name + FROM tabUserRole ur, tabProfile p + WHERE + ur.parent = p.name AND + ur.role='System Manager' AND + p.docstatus<2 AND + p.enabled=1 AND + p.name not in ('Administrator', 'Guest')""", as_list=1) + + return "\n".join([sysman[0] for sysman in system_managers_list]) + diff --git a/erpnext/patches/employeewise_balance_leave_report.py b/erpnext/patches/employeewise_balance_leave_report.py index 6af236484ea..59c59408a1a 100644 --- a/erpnext/patches/employeewise_balance_leave_report.py +++ b/erpnext/patches/employeewise_balance_leave_report.py @@ -6,7 +6,9 @@ """ def execute(): from webnotes.model.doc import Document + from webnotes.modules.module_manager import reload_doc + reload_doc('hr', 'search_criteria', 'employeewise_balance_leave_report') d = Document('Search Criteria', 'employeewise_balance_leave_report') d.criteria_name = 'Employee Leave Balance Report' d.description = 'Employeewise Balance Leave Report' - d.save() \ No newline at end of file + d.save() diff --git a/erpnext/patches/install_print_formats.py b/erpnext/patches/install_print_formats.py index 3b5627bba06..40a008ecfc9 100644 --- a/erpnext/patches/install_print_formats.py +++ b/erpnext/patches/install_print_formats.py @@ -53,7 +53,7 @@ def execute(): Install print formats """ from webnotes.modules.module_manager import reload_doc - #reload_doc('core', 'doctype', 'print_format') + reload_doc('core', 'doctype', 'print_format') #copy_doctype_to_pfs() global pf_to_install diff --git a/erpnext/patches/patch.py b/erpnext/patches/patch.py index 7e8a083d4db..4e32c02e2ce 100644 --- a/erpnext/patches/patch.py +++ b/erpnext/patches/patch.py @@ -6,6 +6,7 @@ last_patch = 388 #------------------------------------------- def execute(patch_no): + return import webnotes from webnotes.modules.module_manager import reload_doc diff --git a/erpnext/patches/print_formats/DeliveryNoteClassic.html b/erpnext/patches/print_formats/DeliveryNoteClassic.html index 0db80b9daba..64475d64d48 100644 --- a/erpnext/patches/print_formats/DeliveryNoteClassic.html +++ b/erpnext/patches/print_formats/DeliveryNoteClassic.html @@ -112,16 +112,25 @@ null, { 'description' : function(data_row) { - if(data_row.serial_no) { - return ( - data_row.description + - '
Serial No.:' + - ((data_row.serial_no.indexOf('\n')>-1)?'
':' ') + - data_row.serial_no + '
' - ); - } else { - return data_row.description; + var to_append = '' + if(data_row.adj_rate){ + to_append = '
Discount: ' + + data_row.adj_rate + '%
'; + if(data_row.description.indexOf(to_append)==-1) { + data_row.description = data_row.description + to_append; + } } + + if(data_row.serial_no) { + to_append = '
Serial No.:' + + ((data_row.serial_no.indexOf('\n')>-1)?'
':' ') + + data_row.serial_no + '
'; + if(data_row.description.indexOf(to_append)==-1) { + data_row.description = data_row.description + to_append; + } + } + + return data_row.description; } } ); @@ -176,7 +185,7 @@ --> - + diff --git a/erpnext/patches/print_formats/DeliveryNoteModern.html b/erpnext/patches/print_formats/DeliveryNoteModern.html index 634bea0c350..375a8a6a1e1 100644 --- a/erpnext/patches/print_formats/DeliveryNoteModern.html +++ b/erpnext/patches/print_formats/DeliveryNoteModern.html @@ -135,16 +135,25 @@ null, { 'description' : function(data_row) { - if(data_row.serial_no) { - return ( - data_row.description + - '
Serial No.:' + - ((data_row.serial_no.indexOf('\n')>-1)?'
':' ') + - data_row.serial_no + '
' - ); - } else { - return data_row.description; + var to_append = '' + if(data_row.adj_rate){ + to_append = '
Discount: ' + + data_row.adj_rate + '%
'; + if(data_row.description.indexOf(to_append)==-1) { + data_row.description = data_row.description + to_append; + } } + + if(data_row.serial_no) { + to_append = '
Serial No.:' + + ((data_row.serial_no.indexOf('\n')>-1)?'
':' ') + + data_row.serial_no + '
'; + if(data_row.description.indexOf(to_append)==-1) { + data_row.description = data_row.description + to_append; + } + } + + return data_row.description; } } ); @@ -199,7 +208,7 @@ -->

Delivery Note

- + @@ -303,4 +312,3 @@

Delivery Note

- diff --git a/erpnext/patches/print_formats/DeliveryNoteSpartan.html b/erpnext/patches/print_formats/DeliveryNoteSpartan.html index 4be12c456c4..5426f134b6c 100644 --- a/erpnext/patches/print_formats/DeliveryNoteSpartan.html +++ b/erpnext/patches/print_formats/DeliveryNoteSpartan.html @@ -134,16 +134,25 @@ null, { 'description' : function(data_row) { - if(data_row.serial_no) { - return ( - data_row.description + - '
Serial No.:' + - ((data_row.serial_no.indexOf('\n')>-1)?'
':' ') + - data_row.serial_no + '
' - ); - } else { - return data_row.description; + var to_append = '' + if(data_row.adj_rate){ + to_append = '
Discount: ' + + data_row.adj_rate + '%
'; + if(data_row.description.indexOf(to_append)==-1) { + data_row.description = data_row.description + to_append; + } } + + if(data_row.serial_no) { + to_append = '
Serial No.:' + + ((data_row.serial_no.indexOf('\n')>-1)?'
':' ') + + data_row.serial_no + '
'; + if(data_row.description.indexOf(to_append)==-1) { + data_row.description = data_row.description + to_append; + } + } + + return data_row.description; } } ); @@ -198,7 +207,7 @@ --> - + @@ -298,5 +307,3 @@

Delivery Note

- - diff --git a/erpnext/patches/print_formats/PurchaseOrderClassic.html b/erpnext/patches/print_formats/PurchaseOrderClassic.html index 0e51c6148aa..e9a9ff8dae7 100644 --- a/erpnext/patches/print_formats/PurchaseOrderClassic.html +++ b/erpnext/patches/print_formats/PurchaseOrderClassic.html @@ -160,7 +160,7 @@ --> - + @@ -246,4 +246,3 @@

Purchase Order

- diff --git a/erpnext/patches/print_formats/PurchaseOrderModern.html b/erpnext/patches/print_formats/PurchaseOrderModern.html index b159242aded..73b607b4ade 100644 --- a/erpnext/patches/print_formats/PurchaseOrderModern.html +++ b/erpnext/patches/print_formats/PurchaseOrderModern.html @@ -183,7 +183,7 @@ --> - + @@ -273,4 +273,3 @@

Purchase Order

- diff --git a/erpnext/patches/print_formats/PurchaseOrderSpartan.html b/erpnext/patches/print_formats/PurchaseOrderSpartan.html index b1c1cd5bc1a..9058e0c5889 100644 --- a/erpnext/patches/print_formats/PurchaseOrderSpartan.html +++ b/erpnext/patches/print_formats/PurchaseOrderSpartan.html @@ -182,7 +182,7 @@ --> - + @@ -268,5 +268,3 @@

Purchase Order

- - diff --git a/erpnext/patches/print_formats/QuotationClassic.html b/erpnext/patches/print_formats/QuotationClassic.html index 2dd24fadd7e..a522ec626ec 100644 --- a/erpnext/patches/print_formats/QuotationClassic.html +++ b/erpnext/patches/print_formats/QuotationClassic.html @@ -107,7 +107,22 @@ [// Here specify the column widths '3%', '10%', '15%', '32%', '5%', '5%', '15%', '15%' - ] + ], + null, + null, + { + 'description' : function(data_row) { + if(data_row.adj_rate) { + var to_append = '
Discount: ' + + data_row.adj_rate + '%
'; + if(data_row.description.indexOf(to_append)==-1) { + return data_row.description + to_append; + } else { return data_row.description; } + } else { + return data_row.description; + } + } + } ); // This code takes care of page breaks @@ -160,7 +175,9 @@ --> - + @@ -253,4 +270,3 @@

Quotation

+ +

- diff --git a/erpnext/patches/print_formats/QuotationModern.html b/erpnext/patches/print_formats/QuotationModern.html index 83103b00f91..33db0aa34fa 100644 --- a/erpnext/patches/print_formats/QuotationModern.html +++ b/erpnext/patches/print_formats/QuotationModern.html @@ -130,7 +130,22 @@ [// Here specify the column widths '3%', '10%', '15%', '32%', '5%', '5%', '15%', '15%' - ] + ], + null, + null, + { + 'description' : function(data_row) { + if(data_row.adj_rate) { + var to_append = '
Discount: ' + + data_row.adj_rate + '%
'; + if(data_row.description.indexOf(to_append)==-1) { + return data_row.description + to_append; + } else { return data_row.description; } + } else { + return data_row.description; + } + } + } ); // This code takes care of page breaks @@ -183,7 +198,7 @@ --> - + @@ -280,4 +295,3 @@

Quotation

- diff --git a/erpnext/patches/print_formats/QuotationSpartan.html b/erpnext/patches/print_formats/QuotationSpartan.html index e6afe4d9d36..72ed0f71a59 100644 --- a/erpnext/patches/print_formats/QuotationSpartan.html +++ b/erpnext/patches/print_formats/QuotationSpartan.html @@ -129,7 +129,22 @@ [// Here specify the column widths '3%', '10%', '15%', '32%', '5%', '5%', '15%', '15%' - ] + ], + null, + null, + { + 'description' : function(data_row) { + if(data_row.adj_rate) { + var to_append = '
Discount: ' + + data_row.adj_rate + '%
'; + if(data_row.description.indexOf(to_append)==-1) { + return data_row.description + to_append; + } else { return data_row.description; } + } else { + return data_row.description; + } + } + } ); // This code takes care of page breaks @@ -182,7 +197,7 @@ --> - + @@ -275,5 +290,3 @@

Quotation

- - diff --git a/erpnext/patches/print_formats/SalesInvoiceClassic.html b/erpnext/patches/print_formats/SalesInvoiceClassic.html index dc0d092e8d7..79da6437119 100644 --- a/erpnext/patches/print_formats/SalesInvoiceClassic.html +++ b/erpnext/patches/print_formats/SalesInvoiceClassic.html @@ -107,7 +107,22 @@ [// Here specify the column widths '3%', '20%', '37%', '5%', '5%', '15%', '15%' - ] + ], + null, + null, + { + 'description' : function(data_row) { + if(data_row.adj_rate) { + var to_append = '
Discount: ' + + data_row.adj_rate + '%
'; + if(data_row.description.indexOf(to_append)==-1) { + return data_row.description + to_append; + } else { return data_row.description; } + } else { + return data_row.description; + } + } + } ); // This code takes care of page breaks @@ -128,7 +143,6 @@ print_other_charges: function(parent) { - console.log(parent); var oc = getchildren('RV Tax Detail', doc.name, 'other_charges'); var rows = '\n'; for(var i=0; i
- + @@ -258,4 +272,3 @@

Invoice

- diff --git a/erpnext/patches/print_formats/SalesInvoiceModern.html b/erpnext/patches/print_formats/SalesInvoiceModern.html index bdffa1cbd9e..3173c55140a 100644 --- a/erpnext/patches/print_formats/SalesInvoiceModern.html +++ b/erpnext/patches/print_formats/SalesInvoiceModern.html @@ -130,7 +130,22 @@ [// Here specify the column widths '3%', '20%', '37%', '5%', '5%', '15%', '15%' - ] + ], + null, + null, + { + 'description' : function(data_row) { + if(data_row.adj_rate) { + var to_append = '
Discount: ' + + data_row.adj_rate + '%
'; + if(data_row.description.indexOf(to_append)==-1) { + return data_row.description + to_append; + } else { return data_row.description; } + } else { + return data_row.description; + } + } + } ); // This code takes care of page breaks @@ -151,7 +166,6 @@ print_other_charges: function(parent) { - console.log(parent); var oc = getchildren('RV Tax Detail', doc.name, 'other_charges'); var rows = '\n'; for(var i=0; i
- + @@ -285,4 +299,3 @@

Invoice

- diff --git a/erpnext/patches/print_formats/SalesInvoiceSpartan.html b/erpnext/patches/print_formats/SalesInvoiceSpartan.html index 6358a424554..b76c49ec7d5 100644 --- a/erpnext/patches/print_formats/SalesInvoiceSpartan.html +++ b/erpnext/patches/print_formats/SalesInvoiceSpartan.html @@ -129,7 +129,22 @@ [// Here specify the column widths '3%', '20%', '37%', '5%', '5%', '15%', '15%' - ] + ], + null, + null, + { + 'description' : function(data_row) { + if(data_row.adj_rate) { + var to_append = '
Discount: ' + + data_row.adj_rate + '%
'; + if(data_row.description.indexOf(to_append)==-1) { + return data_row.description + to_append; + } else { return data_row.description; } + } else { + return data_row.description; + } + } + } ); // This code takes care of page breaks @@ -150,7 +165,6 @@ print_other_charges: function(parent) { - console.log(parent); var oc = getchildren('RV Tax Detail', doc.name, 'other_charges'); var rows = '\n'; for(var i=0; i
- + @@ -280,5 +294,3 @@

Invoice

- - diff --git a/erpnext/patches/print_formats/SalesOrderClassic.html b/erpnext/patches/print_formats/SalesOrderClassic.html index fcf104ebf03..21d8d46c450 100644 --- a/erpnext/patches/print_formats/SalesOrderClassic.html +++ b/erpnext/patches/print_formats/SalesOrderClassic.html @@ -107,7 +107,22 @@ [// Here specify the column widths '3%', '20%', '37%', '5%', '5%', '15%', '15%' - ] + ], + null, + null, + { + 'description' : function(data_row) { + if(data_row.adj_rate) { + var to_append = '
Discount: ' + + data_row.adj_rate + '%
'; + if(data_row.description.indexOf(to_append)==-1) { + return data_row.description + to_append; + } else { return data_row.description; } + } else { + return data_row.description; + } + } + } ); // This code takes care of page breaks @@ -160,7 +175,7 @@ --> - + @@ -257,4 +272,3 @@

Sales Order

- diff --git a/erpnext/patches/print_formats/SalesOrderModern.html b/erpnext/patches/print_formats/SalesOrderModern.html index 7013e5d3f92..48b60f7c81d 100644 --- a/erpnext/patches/print_formats/SalesOrderModern.html +++ b/erpnext/patches/print_formats/SalesOrderModern.html @@ -130,7 +130,22 @@ [// Here specify the column widths '3%', '20%', '37%', '5%', '5%', '15%', '15%' - ] + ], + null, + null, + { + 'description' : function(data_row) { + if(data_row.adj_rate) { + var to_append = '
Discount: ' + + data_row.adj_rate + '%
'; + if(data_row.description.indexOf(to_append)==-1) { + return data_row.description + to_append; + } else { return data_row.description; } + } else { + return data_row.description; + } + } + } ); // This code takes care of page breaks @@ -183,7 +198,7 @@ --> - + @@ -284,4 +299,3 @@

Sales Order

- diff --git a/erpnext/patches/print_formats/SalesOrderSpartan.html b/erpnext/patches/print_formats/SalesOrderSpartan.html index 59ed6a7d364..b3fce740cc2 100644 --- a/erpnext/patches/print_formats/SalesOrderSpartan.html +++ b/erpnext/patches/print_formats/SalesOrderSpartan.html @@ -129,7 +129,22 @@ [// Here specify the column widths '3%', '20%', '37%', '5%', '5%', '15%', '15%' - ] + ], + null, + null, + { + 'description' : function(data_row) { + if(data_row.adj_rate) { + var to_append = '
Discount: ' + + data_row.adj_rate + '%
'; + if(data_row.description.indexOf(to_append)==-1) { + return data_row.description + to_append; + } else { return data_row.description; } + } else { + return data_row.description; + } + } + } ); // This code takes care of page breaks @@ -182,7 +197,7 @@ --> - + @@ -279,5 +294,3 @@

Sales Order

- - diff --git a/erpnext/patches/reload_email_digest.py b/erpnext/patches/reload_email_digest.py new file mode 100644 index 00000000000..2890254eda6 --- /dev/null +++ b/erpnext/patches/reload_email_digest.py @@ -0,0 +1,3 @@ +def execute(): + from webnotes.modules.module_manager import reload_doc + reload_doc('Setup', 'DocType', 'Email Digest') diff --git a/erpnext/patches/reload_employeewise_balance_leave_report.py b/erpnext/patches/reload_employeewise_balance_leave_report.py new file mode 100644 index 00000000000..b03b44b22b1 --- /dev/null +++ b/erpnext/patches/reload_employeewise_balance_leave_report.py @@ -0,0 +1,4 @@ +def execute(): + import webnotes + from webnotes.modules.module_manager import reload_doc + reload_doc('hr', 'search_criteria', 'employeewise_balance_leave_report') diff --git a/erpnext/patches/reload_project_task.py b/erpnext/patches/reload_project_task.py new file mode 100644 index 00000000000..019a177652e --- /dev/null +++ b/erpnext/patches/reload_project_task.py @@ -0,0 +1,7 @@ +""" + Reload Task Doctype of Project Module +""" +def execute(): + from webnotes.modules.module_manager import reload_doc + reload_doc('Projects', 'DocType', 'Ticket') + diff --git a/erpnext/patches/reload_rv.py b/erpnext/patches/reload_rv.py index 5f3bc210ae0..7b47b4c0d6a 100644 --- a/erpnext/patches/reload_rv.py +++ b/erpnext/patches/reload_rv.py @@ -5,4 +5,5 @@ def execute(): reload_doc('accounts', 'doctype', 'receivable_voucher') + reload_doc('setup', 'doctype', 'features_setup') get_obj('Features setup').validate() diff --git a/erpnext/patches/remove_duplicate_table_mapper_detail.py b/erpnext/patches/remove_duplicate_table_mapper_detail.py new file mode 100644 index 00000000000..aaddd9943cf --- /dev/null +++ b/erpnext/patches/remove_duplicate_table_mapper_detail.py @@ -0,0 +1,22 @@ +""" + Removes duplicate entries created in +""" +import webnotes +def execute(): + res = webnotes.conn.sql("""\ + SELECT a.name + FROM + `tabTable Mapper Detail` a, + `tabTable Mapper Detail` b + WHERE + a.parent = b.parent AND + a.from_table = b.from_table AND + a.to_table = b.to_table AND + a.from_field = b.from_field AND + a.to_field = b.to_field AND + a.name < b.name""") + if res and len(res)>0: + name_string = ", ".join(["'" + str(r[0]) + "'" for r in res]) + res = webnotes.conn.sql("""\ + DELETE FROM `tabTable Mapper Detail` + WHERE name IN (%s)""" % name_string) diff --git a/erpnext/patches/remove_extra_button_from_email_digest.py b/erpnext/patches/remove_extra_button_from_email_digest.py new file mode 100644 index 00000000000..7005db9729f --- /dev/null +++ b/erpnext/patches/remove_extra_button_from_email_digest.py @@ -0,0 +1,8 @@ +def execute(): + import webnotes + webnotes.conn.sql(""" + DELETE FROM tabDocField + WHERE parent = 'Email Digest' + AND label = 'Add Recipients' + AND fieldtype = 'Button'""") + diff --git a/erpnext/patches/remove_old_cp_email_settings.py b/erpnext/patches/remove_old_cp_email_settings.py new file mode 100644 index 00000000000..5736c9cb6fd --- /dev/null +++ b/erpnext/patches/remove_old_cp_email_settings.py @@ -0,0 +1,15 @@ +def execute(): + """ + remove control panel email settings if automail.webnotestech.com + """ + from webnotes.model.doc import Document + cp = Document('Control Panel', 'Control Panel') + if cp: + if cp.outgoing_mail_server == 'mail.webnotestech.com': + cp.outgoing_mail_server = None; + cp.mail_login = None; + cp.mail_password = None; + cp.mail_port = None; + cp.auto_email_id = 'automail@erpnext.com' + cp.save() + diff --git a/erpnext/patches/remove_page_break_from_defaults.py b/erpnext/patches/remove_page_break_from_defaults.py new file mode 100644 index 00000000000..8d842e3b733 --- /dev/null +++ b/erpnext/patches/remove_page_break_from_defaults.py @@ -0,0 +1,3 @@ +def execute(): + import webnotes + webnotes.conn.sql("""delete from `tabDefaultValue` where defkey in ('page_break', 'projects', 'packing_details', 'discounts', 'brands', 'item_batch_nos', 'after_sales_installations', 'item_searial_nos', 'item_group_in_details', 'exports', 'imports', 'item_advanced', 'sales_extras', 'more_info', 'quality', 'manufacturing', 'pos', 'item_serial_nos', 'purchase_discounts', 'recurring_invoice') and parent = 'Control Panel'""") diff --git a/erpnext/projects/doctype/ticket/ticket.py b/erpnext/projects/doctype/ticket/ticket.py index 091267a71b9..b048425ebda 100644 --- a/erpnext/projects/doctype/ticket/ticket.py +++ b/erpnext/projects/doctype/ticket/ticket.py @@ -10,6 +10,7 @@ from webnotes import session, form, is_testing, msgprint, errprint sql = webnotes.conn.sql set = webnotes.conn.set get_value = webnotes.conn.get_value + # ----------------------------------------------------------------------------------------- diff --git a/erpnext/selling/Print Format/Quotation Classic/Quotation Classic.txt b/erpnext/selling/Print Format/Quotation Classic/Quotation Classic.txt index a20d15fad1f..0650f30abf6 100644 --- a/erpnext/selling/Print Format/Quotation Classic/Quotation Classic.txt +++ b/erpnext/selling/Print Format/Quotation Classic/Quotation Classic.txt @@ -3,9 +3,9 @@ # These values are common in all dictionaries { - 'creation': '2011-11-15 17:30:44', + 'creation': '2011-12-13 11:02:59', 'docstatus': 0, - 'modified': '2011-11-16 12:30:36', + 'modified': '2011-12-13 12:12:22', 'modified_by': 'Administrator', 'owner': 'Administrator' }, @@ -14,7 +14,7 @@ { 'doc_type': 'Quotation', 'doctype': 'Print Format', - 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t

Quotation

\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Quotation Date
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
Rounded Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n\n', + 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t
\n\t\t\t\t\t\n\t\t\t

\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Quotation Date
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
Rounded Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n', 'module': 'Selling', 'name': '__common__', 'standard': 'Yes' diff --git a/erpnext/selling/Print Format/Quotation Modern/Quotation Modern.txt b/erpnext/selling/Print Format/Quotation Modern/Quotation Modern.txt index f5c02af8f84..89d2e20d63d 100644 --- a/erpnext/selling/Print Format/Quotation Modern/Quotation Modern.txt +++ b/erpnext/selling/Print Format/Quotation Modern/Quotation Modern.txt @@ -3,9 +3,9 @@ # These values are common in all dictionaries { - 'creation': '2011-11-15 17:30:44', + 'creation': '2011-12-13 11:02:59', 'docstatus': 0, - 'modified': '2011-11-16 12:30:57', + 'modified': '2011-12-13 12:20:42', 'modified_by': 'Administrator', 'owner': 'Administrator' }, @@ -14,7 +14,7 @@ { 'doc_type': 'Quotation', 'doctype': 'Print Format', - 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t

Quotation

\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Quotation No.
Quotation Date
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
Rounded Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n\n', + 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Quotation No.
Quotation Date
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
Rounded Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n', 'module': 'Selling', 'name': '__common__', 'standard': 'Yes' diff --git a/erpnext/selling/Print Format/Quotation Spartan/Quotation Spartan.txt b/erpnext/selling/Print Format/Quotation Spartan/Quotation Spartan.txt index d253d01b7c0..258060efec4 100644 --- a/erpnext/selling/Print Format/Quotation Spartan/Quotation Spartan.txt +++ b/erpnext/selling/Print Format/Quotation Spartan/Quotation Spartan.txt @@ -3,9 +3,9 @@ # These values are common in all dictionaries { - 'creation': '2011-11-16 13:27:17', + 'creation': '2011-12-13 11:02:59', 'docstatus': 0, - 'modified': '2011-11-16 14:45:26', + 'modified': '2011-12-13 12:24:23', 'modified_by': 'Administrator', 'owner': 'Administrator' }, @@ -14,7 +14,7 @@ { 'doc_type': 'Quotation', 'doctype': 'Print Format', - 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t

Quotation

\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Quotation Date
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
Rounded Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n\n\n', + 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t

\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Quotation Date
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
Rounded Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n', 'module': 'Selling', 'name': '__common__', 'standard': 'Yes' diff --git a/erpnext/selling/Print Format/Sales Order Classic/Sales Order Classic.txt b/erpnext/selling/Print Format/Sales Order Classic/Sales Order Classic.txt index 28a9d685b70..7d99371ccbc 100644 --- a/erpnext/selling/Print Format/Sales Order Classic/Sales Order Classic.txt +++ b/erpnext/selling/Print Format/Sales Order Classic/Sales Order Classic.txt @@ -3,9 +3,9 @@ # These values are common in all dictionaries { - 'creation': '2011-11-15 17:30:44', + 'creation': '2011-12-13 11:02:59', 'docstatus': 0, - 'modified': '2011-11-15 17:30:44', + 'modified': '2011-12-13 12:30:15', 'modified_by': 'Administrator', 'owner': 'Administrator' }, @@ -14,7 +14,7 @@ { 'doc_type': 'Sales Order', 'doctype': 'Print Format', - 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t

Sales Order

\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Sales Order Date
Delivery Date
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
Rounded Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n\n', + 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t

\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Sales Order Date
Delivery Date
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
Rounded Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n', 'module': 'Selling', 'name': '__common__', 'standard': 'Yes' diff --git a/erpnext/selling/Print Format/Sales Order Modern/Sales Order Modern.txt b/erpnext/selling/Print Format/Sales Order Modern/Sales Order Modern.txt index 80ab0cbd1a4..aaf8c194c50 100644 --- a/erpnext/selling/Print Format/Sales Order Modern/Sales Order Modern.txt +++ b/erpnext/selling/Print Format/Sales Order Modern/Sales Order Modern.txt @@ -3,9 +3,9 @@ # These values are common in all dictionaries { - 'creation': '2011-11-15 17:30:44', + 'creation': '2011-12-13 11:02:59', 'docstatus': 0, - 'modified': '2011-11-15 17:30:44', + 'modified': '2011-12-13 12:36:06', 'modified_by': 'Administrator', 'owner': 'Administrator' }, @@ -14,7 +14,7 @@ { 'doc_type': 'Sales Order', 'doctype': 'Print Format', - 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t

Sales Order

\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Sales Order No.
Sales Order Date
Delivery Date
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
Rounded Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n\n', + 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Sales Order No.
Sales Order Date
Delivery Date
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
Rounded Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n', 'module': 'Selling', 'name': '__common__', 'standard': 'Yes' diff --git a/erpnext/selling/Print Format/Sales Order Spartan/Sales Order Spartan.txt b/erpnext/selling/Print Format/Sales Order Spartan/Sales Order Spartan.txt index 37d8aedd522..14df2e7c4aa 100644 --- a/erpnext/selling/Print Format/Sales Order Spartan/Sales Order Spartan.txt +++ b/erpnext/selling/Print Format/Sales Order Spartan/Sales Order Spartan.txt @@ -3,9 +3,9 @@ # These values are common in all dictionaries { - 'creation': '2011-11-15 17:30:44', + 'creation': '2011-12-13 11:02:59', 'docstatus': 0, - 'modified': '2011-11-16 14:46:00', + 'modified': '2011-12-13 12:42:52', 'modified_by': 'Administrator', 'owner': 'Administrator' }, @@ -14,7 +14,7 @@ { 'doc_type': 'Sales Order', 'doctype': 'Print Format', - 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t

Sales Order

\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Sales Order Date
Delivery Date
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
Rounded Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n\n\n', + 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t

\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Sales Order Date
Delivery Date
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
Rounded Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n', 'module': 'Selling', 'name': '__common__', 'standard': 'Yes' diff --git a/erpnext/selling/page/sales_browser/sales_browser.js b/erpnext/selling/page/sales_browser/sales_browser.js index a24c9421d07..c0c4542ba4a 100644 --- a/erpnext/selling/page/sales_browser/sales_browser.js +++ b/erpnext/selling/page/sales_browser/sales_browser.js @@ -139,7 +139,7 @@ SalesBrowser.prototype.make_tree = function() { var has_children = true; if(cl[i].is_group=='No') { - var imgsrc = 'images/icons/page.gif'; + var imgsrc = 'lib/images/icons/page.gif'; has_children = false; } var t = me.tree.addNode(n, cl[i].name, imgsrc,me.tree.std_onclick, has_children ? me.tree.std_onexp : null); @@ -219,7 +219,7 @@ SalesBrowser.prototype.first_level_node = function(){ var has_children = true; if(cl[i].is_group=='No') { - var imgsrc = 'images/icons/page.gif'; + var imgsrc = 'lib/images/icons/page.gif'; has_children = false; } me.tree_area.innerHTML = ''; @@ -418,4 +418,4 @@ MakeDialog.prototype.make_args = function(){ else if(this.cls_obj.sel == 'Sales Person') return {'node_title':nt,'sales_person_name':nm,'parent_sales_person':pnm,'is_group':grp,'old_parent':old_prt} -} \ No newline at end of file +} diff --git a/erpnext/setup/doctype/customer_group/customer_group.py b/erpnext/setup/doctype/customer_group/customer_group.py index ae74797c7c3..4537876cf40 100644 --- a/erpnext/setup/doctype/customer_group/customer_group.py +++ b/erpnext/setup/doctype/customer_group/customer_group.py @@ -39,7 +39,5 @@ class DocType: def validate(self): - r = sql("select name from `tabCustomer Group` where name = '%s' and docstatus = 2"%(self.doc.customer_group_name)) - if r: - msgprint("%s record is trashed. To untrash please go to Setup & click on Trash."%(self.doc.customer_group_name)) - raise Exception \ No newline at end of file + if sql("select name from `tabCustomer Group` where name = %s and docstatus = 2", (self.doc.customer_group_name)): + msgprint("%s record is trashed. To untrash please go to Setup & click on Trash."%(self.doc.customer_group_name), raise_exception = 1) diff --git a/erpnext/setup/doctype/email_digest/email_digest.css b/erpnext/setup/doctype/email_digest/email_digest.css new file mode 100644 index 00000000000..0654dec254f --- /dev/null +++ b/erpnext/setup/doctype/email_digest/email_digest.css @@ -0,0 +1,10 @@ +table.profile-list { + text-align: left; + margin: auto; + line-height: 250%; +} + +div.dialog-div { + text-align: 'center'; + width: 100%; +} diff --git a/erpnext/setup/doctype/email_digest/email_digest.js b/erpnext/setup/doctype/email_digest/email_digest.js new file mode 100644 index 00000000000..728c8b4b7d2 --- /dev/null +++ b/erpnext/setup/doctype/email_digest/email_digest.js @@ -0,0 +1,104 @@ +cur_frm.cscript.refresh = function(doc, dt, dn) { + doc = locals[dt][dn]; + var save_msg = "You must Save the form before proceeding"; + var err_msg = "There was an error. One probable reason could be that you haven't saved the form. Please contact support@erpnext.com if the problem persists." + + cur_frm.add_custom_button('View Now', function() { + if(doc.__unsaved != 1) { + $c_obj(make_doclist(dt, dn), 'get', '', function(r, rt) { + if(r.exc) { + msgprint(err_msg); + console.log(r.exc); + } else { + //console.log(arguments); + var d = new wn.widgets.Dialog({ + title: 'Email Digest: ' + dn, + width: 800 + }); + + $a(d.body, 'div', '', '', r['message'][1]); + + d.show(); + } + }); + } else { + msgprint(save_msg); + } + }, 1); + cur_frm.add_custom_button('Send Now', function() { + if(doc.__unsaved != 1) { + $c_obj(make_doclist(dt, dn), 'send', '', function(r, rt) { + if(r.exc) { + msgprint(err_msg); + console.log(r.exc); + } else { + //console.log(arguments); + msgprint('Message Sent'); + } + }); + } else { + msgprint(save_msg); + } + }, 1); +} + +cur_frm.cscript['Add/Remove Recipients'] = function(doc, dt, dn) { + // Get profile list + $c_obj(make_doclist(dt, dn), 'get_profiles', '', function(r, rt) { + if(r.exc) { + msgprint(r.exc); + } else { + // Open a dialog and display checkboxes against email addresses + doc = locals[dt][dn]; + var d = new wn.widgets.Dialog({ + title: 'Add/Remove Recipients', + width: 400 + }); + var dialog_div = $a(d.body, 'div', 'dialog-div', '', ''); + var tab = make_table(dialog_div, r.profile_list.length+2, 2, '', ['15%', '85%']); + tab.className = 'profile-list'; + var add_or_update = 'Add'; + $.each(r.profile_list, function(i, v) { + var check = $a_input($td(tab, i+1, 0), 'checkbox'); + check.value = v.name; + if(v.checked==1) { + check.checked = 1; + add_or_update = 'Update'; + } + if(v.enabled==0) { + v.name = "" + v.name + " (disabled user)" + } + var profile = $a($td(tab, i+1, 1), 'span', '', '', v.name); + //profile.onclick = function() { check.checked = !check.checked; } + }); + + // Display add recipients button + if(r.profile_list.length>15) { + $btn($td(tab, 0, 1), add_or_update + ' Recipients', function() { + cur_frm.cscript.add_to_rec_list(doc, tab, r.profile_list.length); + }); + } + $btn($td(tab, r.profile_list.length+1, 1), add_or_update + ' Recipients', function() { + cur_frm.cscript.add_to_rec_list(doc, tab, r.profile_list.length); + }); + + cur_frm.rec_dialog = d; + d.show(); + } + }); +} + +cur_frm.cscript.add_to_rec_list = function(doc, tab, length) { + // add checked profiles to list of recipients + var rec_list = []; + for(var i = 1; i <= length; i++) { + var input = $($td(tab, i, 0)).find('input'); + if(input.is(':checked')) { + rec_list.push(input.attr('value')); + } + } + doc.recipient_list = rec_list.join('\n'); + //console.log(doc.recipient_list); + cur_frm.rec_dialog.hide(); + cur_frm.refresh_fields(); +} diff --git a/erpnext/setup/doctype/email_digest/email_digest.py b/erpnext/setup/doctype/email_digest/email_digest.py new file mode 100644 index 00000000000..5b760245e25 --- /dev/null +++ b/erpnext/setup/doctype/email_digest/email_digest.py @@ -0,0 +1,739 @@ +import webnotes + +class DocType: + def __init__(self, doc, doclist=[]): + self.doc, self.doclist = doc, doclist + self.sending = False + + + def get_profiles(self): + """ + Get a list of profiles + """ + import webnotes + profile_list = webnotes.conn.sql(""" + SELECT name, enabled FROM tabProfile + WHERE docstatus=0 AND name NOT IN ('Administrator', 'Guest') + ORDER BY enabled DESC, name ASC""", as_dict=1) + if self.doc.recipient_list: + recipient_list = self.doc.recipient_list.split("\n") + else: + recipient_list = [] + for p in profile_list: + if p['name'] in recipient_list: p['checked'] = 1 + else: p['checked'] = 0 + webnotes.response['profile_list'] = profile_list + + + def get_standard_data(self): + """ + Executes standard queries + """ + res = {} + query_dict = { + + 'invoiced_amount': self.generate_gle_query({ + 'type': 'invoiced_amount', + 'field': 'debit', + 'master_type': 'Customer', + }), + + 'payables': self.generate_gle_query({ + 'type': 'payables', + 'field': 'credit', + 'master_type': 'Supplier', + }), + + 'collections': self.generate_gle_query({ + 'type': 'collections', + 'field': 'credit', + 'master_type': 'Customer', + }), + + 'payments': self.generate_gle_query({ + 'type': 'payments', + 'field': 'debit', + 'master_type': 'Supplier', + }), + + 'income': self.generate_gle_query({ + 'type': 'income', + 'debit_or_credit': 'Credit' + }), + + 'expenses_booked': self.generate_gle_query({ + 'type': 'expenses_booked', + 'debit_or_credit': 'Debit' + }), + + 'bank_balance': self.generate_gle_query({ + 'type': 'bank_balance' + }), + + 'new_leads': self.generate_new_type_query({ + 'type': 'new_leads', + 'doctype': 'Lead' + }), + + 'new_enquiries': self.generate_new_type_query({ + 'type': 'new_enquiries', + 'doctype': 'Enquiry' + }), + + 'new_quotations': self.generate_new_type_query({ + 'type': 'new_quotations', + 'doctype': 'Quotation', + 'sum_col': 'grand_total' + }), + + 'new_sales_orders': self.generate_new_type_query({ + 'type': 'new_sales_orders', + 'doctype': 'Receivable Voucher', + 'sum_col': 'grand_total' + }), + + 'new_purchase_orders': self.generate_new_type_query({ + 'type': 'new_purchase_orders', + 'doctype': 'Purchase Order', + 'sum_col': 'grand_total' + }), + + 'new_transactions': self.generate_new_type_query({ + 'type': 'new_transactions', + 'doctype': 'Feed' + }), + + 'stock_below_rl': "" + } + + result = {} + + for query in query_dict.keys(): + if self.doc.fields[query] and query_dict[query]: + #webnotes.msgprint(query) + res = webnotes.conn.sql(query_dict[query], as_dict=1) + if query == 'income': + for r in res: + r['value'] = float(r['credit'] - r['debit']) + elif query in ['expenses_booked', 'bank_balance']: + for r in res: + r['value'] = float(r['debit'] - r['credit']) + #webnotes.msgprint(query) + #webnotes.msgprint(res) + result[query] = (res and len(res)==1) and res[0] or (res and res or None) + + return result + + + def generate_gle_query(self, args): + """ + Returns generated query string based 'tabGL Entry' and 'tabAccount' + """ + self.process_args(args) + + query = None + + if args['type'] in ['invoiced_amount', 'payables']: + query = """ + SELECT + IFNULL(SUM(IFNULL(gle.%(field)s, 0)), 0) AS '%(field)s', + %(common_select)s + FROM + %(common_from)s + WHERE + %(common_where)s AND + ac.master_type = '%(master_type)s' AND + %(start_date_condition)s AND + %(end_date_condition)s""" % args + + elif args['type'] in ['collections', 'payments']: + args['bc_accounts_regex'] = self.get_bc_accounts_regex() + if args['bc_accounts_regex']: + query = """ + SELECT + IFNULL(SUM(IFNULL(gle.%(field)s, 0)), 0) AS '%(field)s', + %(common_select)s + FROM + %(common_from)s + WHERE + %(common_where)s AND + ac.master_type = '%(master_type)s' AND + gle.against REGEXP '%(bc_accounts_regex)s' AND + %(start_date_condition)s AND + %(end_date_condition)s""" % args + + elif args['type'] in ['income', 'expenses_booked']: + query = """ + SELECT + IFNULL(SUM(IFNULL(gle.debit, 0)), 0) AS 'debit', + IFNULL(SUM(IFNULL(gle.credit, 0)), 0) AS 'credit', + %(common_select)s + FROM + %(common_from)s + WHERE + %(common_where)s AND + ac.is_pl_account = 'Yes' AND + ac.debit_or_credit = '%(debit_or_credit)s' AND + %(start_date_condition)s AND + %(end_date_condition)s""" % args + + elif args['type'] == 'bank_balance': + query = """ + SELECT + ac.account_name AS 'name', + IFNULL(SUM(IFNULL(gle.debit, 0)), 0) AS 'debit', + IFNULL(SUM(IFNULL(gle.credit, 0)), 0) AS 'credit', + %(common_select)s + FROM + %(common_from)s + WHERE + %(common_where)s AND + ac.account_type = 'Bank or Cash' AND + %(end_date_condition)s + GROUP BY + ac.account_name""" % args + + return query + + + def process_args(self, args): + """ + Adds common conditions in dictionary "args" + """ + start_date, end_date = self.get_start_end_dates() + + if 'new' in args['type']: + args.update({ + 'company': self.doc.company, + 'start_date': start_date, + 'end_date': end_date, + 'sum_if_reqd': '' + }) + if args['type'] in ['new_quotations', 'new_sales_orders', 'new_purchase_orders']: + args['sum_if_reqd'] = "IFNULL(SUM(IFNULL(%(sum_col)s, 0)), 0) AS '%(sum_col)s'," % args + + if args['type'] == 'new_transactions': + args['company_condition'] = '' + else: + args['company_condition'] = "company = '%(company)s' AND" % args + + else: + args.update({ + 'common_select': "COUNT(*) AS 'count'", + + 'common_from': "`tabGL Entry` gle, `tabAccount` ac", + + 'common_where': """ + gle.company = '%s' AND + gle.account = ac.name AND + ac.docstatus < 2 AND + IFNULL(gle.is_cancelled, 'No') = 'No'""" % self.doc.company, + + 'start_date_condition': "gle.posting_date >= '%s'" % start_date, + + 'end_date_condition': "gle.posting_date <= '%s'" % end_date + }) + + + def get_start_end_dates(self): + """ + Returns start and end date depending on the frequency of email digest + """ + from datetime import datetime, date, timedelta + today = datetime.now().date() + year, month, day = today.year, today.month, today.day + + if self.doc.frequency == 'Daily': + if self.sending: + start_date = end_date = today - timedelta(days=1) + else: + start_date = end_date = today + + elif self.doc.frequency == 'Weekly': + if self.sending: + start_date = today - timedelta(days=today.weekday(), weeks=1) + end_date = start_date + timedelta(days=6) + else: + start_date = today - timedelta(days=today.weekday()) + end_date = start_date + timedelta(days=6) + + else: + import calendar + + if self.sending: + if month == 1: + year = year - 1 + prev_month = 12 + else: + prev_month = month - 1 + start_date = date(year, prev_month, 1) + last_day = calendar.monthrange(year, prev_month)[1] + end_date = date(year, prev_month, last_day) + else: + start_date = date(year, month, 1) + last_day = calendar.monthrange(year, month)[1] + end_date = date(year, month, last_day) + + return start_date, end_date + + + def generate_new_type_query(self, args): + """ + Returns generated query string for calculating new transactions created + """ + self.process_args(args) + + query = """ + SELECT + %(sum_if_reqd)s + COUNT(*) AS 'count' + FROM + `tab%(doctype)s` + WHERE + docstatus < 2 AND + %(company_condition)s + creation >= '%(start_date)s' AND + creation <= '%(end_date)s'""" % args + + return query + + + def get_bc_accounts_regex(self): + """ + Returns a regular expression of 'Bank or Cash' type account list + """ + bc_account_list = webnotes.conn.sql(""" + SELECT name + FROM `tabAccount` + WHERE account_type = 'Bank or Cash'""", as_list=1) + + if bc_account_list: + return '(' + '|'.join([ac[0] for ac in bc_account_list]) + ')' + + + def get(self): + """ + * Execute Query + * Prepare Email Body from Print Format + """ + result, email_body = self.execute_queries() + #webnotes.msgprint(result) + #webnotes.msgprint(email_body) + return result, email_body + + + def execute_queries(self): + """ + * If standard==1, execute get_standard_data + * If standard==0, execute python code in custom_code field + """ + result = {} + if int(self.doc.use_standard)==1: + result = self.get_standard_data() + email_body = self.get_standard_body(result) + else: + result, email_body = self.execute_custom_code(self.doc) + + #webnotes.msgprint(result) + + return result, email_body + + + def execute_custom_code(self, doc): + """ + Execute custom python code + """ + pass + + + def send(self): + """ + * Execute get method + * Send email to recipients + """ + self.sending = True + result, email_body = self.get() + recipient_list = self.doc.recipient_list.split("\n") + + # before sending, check if user is disabled or not + # do not send if disabled + profile_list = webnotes.conn.sql("SELECT name, enabled FROM tabProfile", as_dict=1) + for profile in profile_list: + if profile['name'] in recipient_list and profile['enabled'] == 0: + del recipient_list[recipient_list.index(profile['name'])] + + from webnotes.utils.email_lib import sendmail + try: + sendmail( + recipients=recipient_list, + sender='notifications+email_digest@erpnext.com', + reply_to='support@erpnext.com', + subject=self.doc.frequency + ' Digest', + msg=email_body, + from_defs=1 + ) + except Exception, e: + webnotes.msgprint('There was a problem in sending your email. Please contact support@erpnext.com') + #webnotes.errprint(webnotes.getTraceback()) + + + def on_update(self): + """ + + """ + import webnotes + args = { + 'db_name': webnotes.conn.get_value('Control Panel', '', 'account_id'), + 'event': 'setup.doctype.email_digest.email_digest.send' + } + from webnotes.utils.scheduler import Scheduler + #print "before scheduler" + sch = Scheduler() + sch.connect() + + + if self.doc.enabled == 1: + # Create scheduler entry + res = sch.conn.sql(""" + SELECT * FROM Event + WHERE + db_name = %(db_name)s AND + event = %(event)s + """, args) + + if not (res and res[0]): + args['next_execution'] = self.get_next_execution() + + sch.conn.sql(""" + INSERT INTO Event (db_name, event, `interval`, next_execution, recurring) + VALUES (%(db_name)s, %(event)s, 86400, %(next_execution)s, 1) + """, args) + + else: + # delete scheduler entry + sch.clear(args['db_name'], args['event']) + #print "after on update" + + + def get_next_sending(self): + """ + + """ + # Get TimeZone + # Get System TimeZone + import time + from pytz import timezone + import datetime + import webnotes.defs + cp = webnotes.model.doc.Document('Control Panel','Control Panel') + app_tz = timezone(cp.time_zone) + server_tz = timezone(getattr(webnotes.defs, 'system_timezone')) + + start_date, end_date = self.get_start_end_dates() + + new_date = end_date + datetime.timedelta(days=1) + new_time = datetime.time(hour=6) + + naive_dt = datetime.datetime.combine(new_date, new_time) + app_dt = app_tz.localize(naive_dt) + server_dt = server_tz.normalize(app_dt.astimezone(server_tz)) + + res = { + 'app_dt': app_dt.replace(tzinfo=None), + 'app_tz': app_tz, + 'server_dt': server_dt.replace(tzinfo=None), + 'server_tz': server_tz + } + + from webnotes.utils import formatdate + str_date = formatdate(str(res['app_dt'].date())) + str_time = res['app_dt'].time().strftime('%I:%M') + + self.doc.next_send = str_date + " at about " + str_time + + return res + + + def get_next_execution(self): + """ + + """ + from datetime import datetime, timedelta + dt_args = self.get_next_sending() + server_dt = dt_args['server_dt'] + now_dt = datetime.now(dt_args['server_tz']) + if now_dt.time() <= server_dt.time(): + next_date = now_dt.date() + else: + next_date = now_dt.date() + timedelta(days=1) + + next_time = server_dt.time() + + return datetime.combine(next_date, next_time) + + + def onload(self): + """ + + """ + self.get_next_sending() + + + def get_standard_body(self, result): + """ + Generate email body depending on the result + """ + from webnotes.utils import fmt_money + from webnotes.model.doc import Document + company = Document('Company', self.doc.company) + currency = company.default_currency + + def table(args): + if type(args['body']) == type(''): + table_body = """\ + + """ + \ + args['body'] + \ + """\ + + """ + + elif type(args['body'] == type([])): + body_rows = [] + for rows in args['body']: + for r in rows: + body_rows.append("""\ + + """ \ + + r + """\ + + """) + + body_rows.append("
") + + table_body = "" + "".join(body_rows) + "" + + table_head = """\ + + """ \ + + args['head'] + """\ + + """ + + return "" \ + + table_head \ + + table_body \ + + "
" + + currency_amount_str = "%s %s" + + body_dict = { + + 'invoiced_amount': { + 'table': 'invoiced_amount' in result and table({ + 'head': 'Invoiced Amount', + 'body': currency_amount_str \ + % (currency, fmt_money(result['invoiced_amount']['debit'])) + }), + 'idx': 300 + }, + + 'payables': { + 'table': 'payables' in result and table({ + 'head': 'Payables', + 'body': currency_amount_str \ + % (currency, fmt_money(result['payables']['credit'])) + }), + 'idx': 200 + }, + + 'collections': { + 'table': 'collections' in result and table({ + 'head': 'Collections', + 'body': currency_amount_str \ + % (currency, fmt_money(result['collections']['credit'])) + }), + 'idx': 301 + }, + + 'payments': { + 'table': 'payments' in result and table({ + 'head': 'Payments', + 'body': currency_amount_str \ + % (currency, fmt_money(result['payments']['debit'])) + }), + 'idx': 201 + }, + + 'income': { + 'table': 'income' in result and table({ + 'head': 'Income', + 'body': currency_amount_str \ + % (currency, fmt_money(result['income']['value'])) + }), + 'idx': 302 + }, + + 'expenses_booked': { + 'table': 'expenses_booked' in result and table({ + 'head': 'Expenses Booked', + 'body': currency_amount_str \ + % (currency, fmt_money(result['expenses_booked']['value'])) + }), + 'idx': 202 + }, + + 'bank_balance': { + 'table': 'bank_balance' in result and table({ + 'head': 'Bank Balance', + 'body': [ + [ + "%s" % bank['name'], + currency_amount_str % (currency, fmt_money(bank['value'])) + ] for bank in result['bank_balance'] + ] + }), + 'idx': 400 + }, + + 'new_leads': { + 'table': 'new_leads' in result and table({ + 'head': 'New Leads', + 'body': '%s' % result['new_leads']['count'] + }), + 'idx': 100 + }, + + 'new_enquiries': { + 'table': 'new_enquiries' in result and table({ + 'head': 'New Enquiries', + 'body': '%s' % result['new_enquiries']['count'] + }), + 'idx': 101 + }, + + 'new_quotations': { + 'table': 'new_quotations' in result and table({ + 'head': 'New Quotations', + 'body': '%s' % result['new_quotations']['count'] + }), + 'idx': 102 + }, + + 'new_sales_orders': { + 'table': 'new_sales_orders' in result and table({ + 'head': 'New Sales Orders', + 'body': '%s' % result['new_sales_orders']['count'] + }), + 'idx': 103 + }, + + 'new_purchase_orders': { + 'table': 'new_purchase_orders' in result and table({ + 'head': 'New Purchase Orders', + 'body': '%s' % result['new_purchase_orders']['count'] + }), + 'idx': 104 + }, + + 'new_transactions': { + 'table': 'new_transactions' in result and table({ + 'head': 'New Transactions', + 'body': '%s' % result['new_transactions']['count'] + }), + 'idx': 105 + } + + #'stock_below_rl': + } + + table_list = [] + + # Sort these keys depending on idx value + bd_keys = sorted(body_dict, key=lambda x: body_dict[x]['idx']) + + for k in bd_keys: + if self.doc.fields[k]: + if k in result: + table_list.append(body_dict[k]['table']) + elif k in ['collections', 'payments']: + table_list.append(\ + "
[" + \ + k.capitalize() + \ + "]
Missing: Ledger of type 'Bank or Cash'\ +
") + + i = 0 + result = [] + op_len = len(table_list) + while(True): + if i>=op_len: + break + elif (op_len - i) == 1: + result.append("""\ + + %s + + """ % (table_list[i])) + else: + result.append("""\ + + %s + %s + """ % (table_list[i], table_list[i+1])) + + i = i + 2 + + from webnotes.utils import formatdate + start_date, end_date = self.get_start_end_dates() + digest_daterange = self.doc.frequency=='Daily' \ + and formatdate(str(start_date)) \ + or (formatdate(str(start_date)) + " to " + (formatdate(str(end_date)))) + + email_body = """ +
+
+

%s

+

%s

+

%s

+
+ """ \ + % ((self.doc.frequency + " Digest"), \ + digest_daterange, self.doc.company) \ + + "".join(result) + """\ +

+
""" + + return email_body + + +def send(): + """ + + """ + edigest_list = webnotes.conn.sql(""" + SELECT name FROM `tabEmail Digest` + WHERE enabled=1 + """, as_list=1) + + from webnotes.model.code import get_obj + from datetime import datetime, timedelta + now = datetime.now() + now_date = now.date() + now_time = (now + timedelta(hours=2)).time() + + for ed in edigest_list: + if ed[0]: + ed_obj = get_obj('Email Digest', ed[0]) + ed_obj.sending = True + dt_dict = ed_obj.get_next_sending() + send_date = dt_dict['server_dt'].date() + send_time = dt_dict['server_dt'].time() + + if (now_date == send_date) and (send_time <= now_time): + #webnotes.msgprint('sending ' + ed_obj.doc.name) + ed_obj.send() + #else: + # webnotes.msgprint('not sending ' + ed_obj.doc.name) diff --git a/erpnext/setup/doctype/email_digest/email_digest.txt b/erpnext/setup/doctype/email_digest/email_digest.txt index 026caa7d6e7..3d8de7b8f7a 100644 --- a/erpnext/setup/doctype/email_digest/email_digest.txt +++ b/erpnext/setup/doctype/email_digest/email_digest.txt @@ -3,24 +3,25 @@ # These values are common in all dictionaries { - 'creation': '2011-07-27 14:23:09', + 'creation': '2011-12-12 10:41:40', 'docstatus': 0, - 'modified': '2011-07-27 17:32:27', + 'modified': '2011-12-15 13:53:08', 'modified_by': 'Administrator', 'owner': 'Administrator' }, # These values are common for all DocType { - '_last_update': '1311760331', + '_last_update': '1323353260', + 'autoname': 'Prompt', 'colour': 'White:FFF', 'doctype': 'DocType', - 'issingle': 1, + 'document_type': 'System', 'module': 'Setup', 'name': '__common__', 'section_style': 'Simple', 'show_in_menu': 0, - 'version': 4 + 'version': 79 }, # These values are common for all DocField @@ -29,23 +30,18 @@ 'name': '__common__', 'parent': 'Email Digest', 'parentfield': 'fields', - 'parenttype': 'DocType', - 'permlevel': 0 + 'parenttype': 'DocType' }, # These values are common for all DocPerm { - 'create': 1, 'doctype': 'DocPerm', - 'idx': 1, 'name': '__common__', 'parent': 'Email Digest', 'parentfield': 'permissions', 'parenttype': 'DocType', - 'permlevel': 0, 'read': 1, - 'role': 'Administrator', - 'write': 1 + 'role': 'System Manager' }, # DocType, Email Digest @@ -56,34 +52,290 @@ # DocPerm { - 'doctype': 'DocPerm' + 'cancel': 1, + 'create': 1, + 'doctype': 'DocPerm', + 'permlevel': 0, + 'write': 1 + }, + + # DocPerm + { + 'doctype': 'DocPerm', + 'permlevel': 1 }, # DocField { 'doctype': 'DocField', - 'fieldtype': 'HTML', - 'idx': 1, - 'label': 'Body' + 'fieldtype': 'Section Break', + 'label': 'Settings', + 'permlevel': 0 }, # DocField { 'doctype': 'DocField', - 'fieldname': 'content_config', - 'fieldtype': 'Text', + 'fieldtype': 'Column Break', + 'permlevel': 0 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'enabled', + 'fieldtype': 'Check', + 'label': 'Enabled', + 'permlevel': 0 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'company', + 'fieldtype': 'Select', + 'label': 'For Company', + 'options': 'link:Company', + 'permlevel': 0, + 'reqd': 1 + }, + + # DocField + { + 'allow_on_submit': 0, + 'doctype': 'DocField', + 'fieldname': 'frequency', + 'fieldtype': 'Select', + 'label': 'How frequently?', + 'options': '\nDaily\nWeekly\nMonthly', + 'permlevel': 0, + 'reqd': 1 + }, + + # DocField + { + 'depends_on': 'eval:doc.enabled', + 'doctype': 'DocField', + 'fieldname': 'next_send', + 'fieldtype': 'Data', + 'label': 'Next email will be sent on:', + 'permlevel': 1 + }, + + # DocField + { + 'default': '1', + 'doctype': 'DocField', + 'fieldname': 'use_standard', + 'fieldtype': 'Check', 'hidden': 1, - 'idx': 2, - 'label': 'Content Config' + 'label': 'Use standard?', + 'permlevel': 0, + 'search_index': 0 }, # DocField { 'doctype': 'DocField', - 'fieldname': 'email_config', + 'fieldtype': 'Column Break', + 'permlevel': 0 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldtype': 'Button', + 'label': 'Add/Remove Recipients', + 'permlevel': 0, + 'trigger': 'Client' + }, + + # DocField + { + 'description': 'Note: Email will not be sent to disabled users', + 'doctype': 'DocField', + 'fieldname': 'recipient_list', 'fieldtype': 'Text', + 'label': 'Recipients', + 'permlevel': 1, + 'reqd': 1 + }, + + # DocField + { + 'depends_on': 'eval:doc.use_standard', + 'doctype': 'DocField', + 'fieldtype': 'Section Break', + 'label': 'Select Digest Content', + 'permlevel': 0 + }, + + # DocField + { + 'depends_on': 'eval:doc.use_standard', + 'doctype': 'DocField', + 'fieldname': 'new_leads', + 'fieldtype': 'Check', + 'label': 'New Leads', + 'permlevel': 0 + }, + + # DocField + { + 'depends_on': 'eval:doc.use_standard', + 'doctype': 'DocField', + 'fieldname': 'new_enquiries', + 'fieldtype': 'Check', + 'label': 'New Enquiries', + 'permlevel': 0 + }, + + # DocField + { + 'depends_on': 'eval:doc.use_standard', + 'doctype': 'DocField', + 'fieldname': 'new_quotations', + 'fieldtype': 'Check', + 'label': 'New Quotations', + 'permlevel': 0 + }, + + # DocField + { + 'depends_on': 'eval:doc.use_standard', + 'doctype': 'DocField', + 'fieldname': 'new_sales_orders', + 'fieldtype': 'Check', + 'label': 'New Sales Orders', + 'permlevel': 0 + }, + + # DocField + { + 'depends_on': 'eval:doc.use_standard', + 'doctype': 'DocField', + 'fieldname': 'new_purchase_orders', + 'fieldtype': 'Check', + 'label': 'New Purchase Orders', + 'permlevel': 0 + }, + + # DocField + { + 'depends_on': 'eval:doc.use_standard', + 'doctype': 'DocField', + 'fieldname': 'new_transactions', + 'fieldtype': 'Check', + 'label': 'New Transactions', + 'permlevel': 0 + }, + + # DocField + { + 'depends_on': 'eval:doc.use_standard', + 'doctype': 'DocField', + 'fieldname': 'payables', + 'fieldtype': 'Check', + 'label': 'Payables', + 'permlevel': 0 + }, + + # DocField + { + 'depends_on': 'eval:doc.use_standard', + 'doctype': 'DocField', + 'fieldname': 'payments', + 'fieldtype': 'Check', + 'label': 'Payments', + 'permlevel': 0 + }, + + # DocField + { + 'depends_on': 'eval:doc.use_standard', + 'doctype': 'DocField', + 'fieldname': 'expenses_booked', + 'fieldtype': 'Check', + 'label': 'Expenses Booked', + 'permlevel': 0 + }, + + # DocField + { + 'depends_on': 'eval:doc.use_standard', + 'doctype': 'DocField', + 'fieldname': 'invoiced_amount', + 'fieldtype': 'Check', + 'label': 'Invoiced Amount (Receivables)', + 'permlevel': 0 + }, + + # DocField + { + 'depends_on': 'eval:doc.use_standard', + 'doctype': 'DocField', + 'fieldname': 'collections', + 'fieldtype': 'Check', + 'label': 'Collections', + 'permlevel': 0 + }, + + # DocField + { + 'depends_on': 'eval:doc.use_standard', + 'doctype': 'DocField', + 'fieldname': 'income', + 'fieldtype': 'Check', + 'label': 'Income', + 'permlevel': 0 + }, + + # DocField + { + 'depends_on': 'eval:doc.use_standard', + 'doctype': 'DocField', + 'fieldname': 'bank_balance', + 'fieldtype': 'Check', + 'label': 'Bank Balance', + 'permlevel': 0 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'stock_below_rl', + 'fieldtype': 'Check', 'hidden': 1, - 'idx': 3, - 'label': 'Email Config' + 'label': 'Stock Items below re-order level', + 'permlevel': 0 + }, + + # DocField + { + 'depends_on': 'eval:!doc.use_standard', + 'doctype': 'DocField', + 'fieldtype': 'Section Break', + 'label': 'Enter Custom Code', + 'permlevel': 0 + }, + + # DocField + { + 'depends_on': 'eval:!doc.use_standard', + 'doctype': 'DocField', + 'fieldname': 'custom_code', + 'fieldtype': 'Code', + 'label': 'Custom Python Code', + 'permlevel': 0 + }, + + # DocField + { + 'depends_on': 'eval:!doc.use_standard', + 'doctype': 'DocField', + 'fieldname': 'email_template', + 'fieldtype': 'Code', + 'label': 'Email Template', + 'permlevel': 0 } ] \ No newline at end of file diff --git a/erpnext/setup/doctype/features_setup/features_setup.py b/erpnext/setup/doctype/features_setup/features_setup.py index f12d2824fd3..3a549d9e32f 100644 --- a/erpnext/setup/doctype/features_setup/features_setup.py +++ b/erpnext/setup/doctype/features_setup/features_setup.py @@ -8,7 +8,6 @@ class DocType: """ from webnotes.model import default_fields from webnotes.utils import set_default - for key in self.doc.fields: if key not in default_fields: set_default(key, self.doc.fields[key]) diff --git a/erpnext/setup/doctype/features_setup/features_setup.txt b/erpnext/setup/doctype/features_setup/features_setup.txt index d0f02d576d4..a7c6fe81eec 100644 --- a/erpnext/setup/doctype/features_setup/features_setup.txt +++ b/erpnext/setup/doctype/features_setup/features_setup.txt @@ -5,14 +5,14 @@ { 'creation': '2011-09-07 11:59:05', 'docstatus': 0, - 'modified': '2011-12-06 18:48:53', + 'modified': '2011-12-14 11:05:55', 'modified_by': 'Administrator', 'owner': 'Administrator' }, # These values are common for all DocType { - '_last_update': '1323176623', + '_last_update': '1323840127', 'colour': 'White:FFF', 'default_print_format': 'Standard', 'doctype': 'DocType', @@ -22,7 +22,7 @@ 'name_case': 'Title Case', 'section_style': 'Simple', 'show_in_menu': 1, - 'version': 24 + 'version': 26 }, # These values are common for all DocField @@ -179,7 +179,17 @@ 'doctype': 'DocField', 'fieldname': 'fs_discounts', 'fieldtype': 'Check', - 'label': 'Discounts' + 'label': 'Sales Discounts' + }, + + # DocField + { + 'colour': 'White:FFF', + 'description': 'Discount Fields will be available in Purchase Order, Purchase Receipt, Purchase Invoice', + 'doctype': 'DocField', + 'fieldname': 'fs_purchase_discounts', + 'fieldtype': 'Check', + 'label': 'Purchase Discounts' }, # DocField diff --git a/erpnext/setup/doctype/personalize/personalize.py b/erpnext/setup/doctype/personalize/personalize.py index 3264546337d..dc9ad66fd42 100644 --- a/erpnext/setup/doctype/personalize/personalize.py +++ b/erpnext/setup/doctype/personalize/personalize.py @@ -14,7 +14,8 @@ class DocType: # on update # def validate(self): - if self.doc.file_list and self.doc.set_from_attachment: + from webnotes.utils import cint + if self.doc.file_list and cint(self.doc.set_from_attachment): self.set_html_from_image() # update control panel - so it loads new letter directly diff --git a/erpnext/setup/page/setup/setup.js b/erpnext/setup/page/setup/setup.js index 92ba9db025c..f536c701c64 100644 --- a/erpnext/setup/page/setup/setup.js +++ b/erpnext/setup/page/setup/setup.js @@ -161,6 +161,7 @@ SetupData = function(cnty){ ['Custom Field',1,'Custom Field','dt'+NEWLINE+'label'+NEWLINE+'fieldtype'+NEWLINE+'options','Add and manage custom fields on forms'], ['Email Settings',3,'Email Settings','','Outgoing email server and address'], ['Notification Settings',3,'Notification Control','','Automatic emails set at selected events'], + ['Email Digest', 1, 'Email Digest', '', 'Schedule Daily / Weekly / Monthly Summary e-mails'], ['Company',1,'Company','id'+NEWLINE+'is_active'+NEWLINE+'email','Manage list of companies'], ['Fiscal Year',1,'Fiscal Year','id'+NEWLINE+'company'+NEWLINE+'is_active'+NEWLINE+'year','Manage list of fiscal years'], ['Personalize',3,'Personalize','','Set your banner'], @@ -168,7 +169,7 @@ SetupData = function(cnty){ ['Import Data',2,'Import Data','','Import data from CSV files'], ['Manage Users',2,'My Company','','Add / remove users and manage their roles'], ['Web Forms',2,'Webforms','', 'Code to embed forms in yor website'], - ['Permissions Manager',2,'Permission Engine','', 'Manage all permissions from one tool (beta)'], + ['Permissions Manager',2,'Permission Engine','', 'Manage all permissions from one tool'], //['Property Setter',1,'Property Setter','', 'Customize properties of a Form (DocType) or Field'], ['Customize Form View',3,'DocLayer','', 'Customize properties of a Form (DocType) or Field'], ['Print Formats', 1, 'Print Format', '', 'Manage Print Formats'], diff --git a/erpnext/startup/startup.js b/erpnext/startup/startup.js index 291265b3bd2..07c1629f836 100644 --- a/erpnext/startup/startup.js +++ b/erpnext/startup/startup.js @@ -572,6 +572,11 @@ pscript.feature_dict = { 'Receivable Voucher': {'entries':['adj_rate']}, 'Sales Order': {'sales_order_details':['adj_rate','ref_rate']} }, + 'fs_purchase_discounts': { + 'Purchase Order': {'po_details':['purchase_ref_rate', 'discount_rate', 'import_ref_rate']}, + 'Purchase Receipt': {'purchase_receipt_details':['purchase_ref_rate', 'discount_rate', 'import_ref_rate']}, + 'Payable Voucher': {'entries':['purchase_ref_rate', 'discount_rate', 'import_ref_rate']} + }, 'fs_brands': { 'Delivery Note': {'delivery_note_details':['brand']}, 'Indent': {'indent_details':['brand']}, diff --git a/erpnext/stock/Print Format/Delivery Note Classic/Delivery Note Classic.txt b/erpnext/stock/Print Format/Delivery Note Classic/Delivery Note Classic.txt index 6b815c0f73a..aa90475e806 100644 --- a/erpnext/stock/Print Format/Delivery Note Classic/Delivery Note Classic.txt +++ b/erpnext/stock/Print Format/Delivery Note Classic/Delivery Note Classic.txt @@ -3,9 +3,9 @@ # These values are common in all dictionaries { - 'creation': '2011-11-15 17:30:44', + 'creation': '2011-12-13 11:02:59', 'docstatus': 0, - 'modified': '2011-11-15 17:30:44', + 'modified': '2011-12-13 13:11:24', 'modified_by': 'Administrator', 'owner': 'Administrator' }, @@ -14,7 +14,7 @@ { 'doc_type': 'Delivery Note', 'doctype': 'Print Format', - 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t

Delivery Note

\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Delivery Note Date
Sales Order No.\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t()\n\t\t\t\t\t\t
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
Rounded Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n\n', + 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t

\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Delivery Note Date
Sales Order No.\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t()\n\t\t\t\t\t\t
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
Rounded Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n\n', 'module': 'Stock', 'name': '__common__', 'standard': 'Yes' diff --git a/erpnext/stock/Print Format/Delivery Note Modern/Delivery Note Modern.txt b/erpnext/stock/Print Format/Delivery Note Modern/Delivery Note Modern.txt index 9b86f5be723..1b10b1631a8 100644 --- a/erpnext/stock/Print Format/Delivery Note Modern/Delivery Note Modern.txt +++ b/erpnext/stock/Print Format/Delivery Note Modern/Delivery Note Modern.txt @@ -3,9 +3,9 @@ # These values are common in all dictionaries { - 'creation': '2011-11-15 17:30:44', + 'creation': '2011-12-13 11:02:59', 'docstatus': 0, - 'modified': '2011-11-15 17:30:44', + 'modified': '2011-12-13 13:20:50', 'modified_by': 'Administrator', 'owner': 'Administrator' }, @@ -14,7 +14,7 @@ { 'doc_type': 'Delivery Note', 'doctype': 'Print Format', - 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t

Delivery Note

\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Delivery Note No.
Delivery Note Date
Sales Order No.\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t()\n\t\t\t\t\t\t
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
Rounded Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n\n', + 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Delivery Note No.
Delivery Note Date
Sales Order No.\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t()\n\t\t\t\t\t\t
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
Rounded Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n', 'module': 'Stock', 'name': '__common__', 'standard': 'Yes' diff --git a/erpnext/stock/Print Format/Delivery Note Spartan/Delivery Note Spartan.txt b/erpnext/stock/Print Format/Delivery Note Spartan/Delivery Note Spartan.txt index f8e989c3a2d..b0931075be0 100644 --- a/erpnext/stock/Print Format/Delivery Note Spartan/Delivery Note Spartan.txt +++ b/erpnext/stock/Print Format/Delivery Note Spartan/Delivery Note Spartan.txt @@ -3,9 +3,9 @@ # These values are common in all dictionaries { - 'creation': '2011-11-15 17:30:44', + 'creation': '2011-12-13 11:02:59', 'docstatus': 0, - 'modified': '2011-11-16 14:43:28', + 'modified': '2011-12-13 13:22:53', 'modified_by': 'Administrator', 'owner': 'Administrator' }, @@ -14,7 +14,7 @@ { 'doc_type': 'Delivery Note', 'doctype': 'Print Format', - 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t

Delivery Note

\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Delivery Note Date
Sales Order No.\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t()\n\t\t\t\t\t\t
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
Rounded Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n\n\n', + 'html': '\n\n\n\n\n\n\n\n\n\n\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t

\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Name
Address
Contact
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
Delivery Note Date
Sales Order No.\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t()\n\t\t\t\t\t\t
\n
\n
\n\t\n\t\n
\n
\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t
\n\t\t\t\t\tTerms, Conditions & Other Information:
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
Net Total
Grand Total
Rounded Total
\n\t\t\t\t\t
In Words
\n\t\t\t\t\t\n\t\t\t\t
\n
\n', 'module': 'Stock', 'name': '__common__', 'standard': 'Yes' diff --git a/erpnext/stock/doctype/purchase_receipt_detail/purchase_receipt_detail.txt b/erpnext/stock/doctype/purchase_receipt_detail/purchase_receipt_detail.txt index afe8d997c80..9aacefdb24d 100755 --- a/erpnext/stock/doctype/purchase_receipt_detail/purchase_receipt_detail.txt +++ b/erpnext/stock/doctype/purchase_receipt_detail/purchase_receipt_detail.txt @@ -5,7 +5,7 @@ { 'creation': '2010-08-08 17:09:16', 'docstatus': 0, - 'modified': '2011-12-13 13:03:11', + 'modified': '2011-12-14 10:50:00', 'modified_by': 'Administrator', 'owner': 'Administrator' }, @@ -14,6 +14,7 @@ { 'autoname': 'GRND/.#######', 'colour': 'White:FFF', + 'default_print_format': 'Standard', 'doctype': 'DocType', 'istable': 1, 'module': 'Stock', @@ -21,7 +22,7 @@ 'section_style': 'Tray', 'server_code_error': ' ', 'show_in_menu': 0, - 'version': 71 + 'version': 73 }, # These values are common for all DocField @@ -99,6 +100,20 @@ 'width': '100px' }, + # DocField + { + 'default': '0.00', + 'doctype': 'DocField', + 'fieldname': 'qty', + 'fieldtype': 'Currency', + 'label': 'Accepted Quantity', + 'oldfieldname': 'qty', + 'oldfieldtype': 'Currency', + 'permlevel': 0, + 'trigger': 'Client', + 'width': '100px' + }, + # DocField { 'default': '0.00', @@ -117,18 +132,49 @@ # DocField { + 'doctype': 'DocField', + 'fieldname': 'import_ref_rate', + 'fieldtype': 'Currency', + 'label': 'Ref Rate ', + 'permlevel': 0 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'discount_rate', + 'fieldtype': 'Currency', + 'label': 'Discount %', + 'permlevel': 0 + }, + + # DocField + { + 'colour': 'White:FFF', 'default': '0.00', 'doctype': 'DocField', - 'fieldname': 'qty', + 'fieldname': 'import_rate', 'fieldtype': 'Currency', - 'label': 'Accepted Quantity', - 'oldfieldname': 'qty', + 'label': 'Rate', + 'oldfieldname': 'import_rate', 'oldfieldtype': 'Currency', 'permlevel': 0, + 'print_hide': 0, 'trigger': 'Client', 'width': '100px' }, + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'import_amount', + 'fieldtype': 'Currency', + 'label': 'Amount', + 'oldfieldname': 'import_amount', + 'oldfieldtype': 'Currency', + 'permlevel': 1 + }, + # DocField { 'doctype': 'DocField', @@ -141,6 +187,7 @@ # DocField { 'colour': 'White:FFF', + 'default': '0.00', 'doctype': 'DocField', 'fieldname': 'purchase_rate', 'fieldtype': 'Currency', @@ -156,6 +203,7 @@ # DocField { + 'default': '0.00', 'doctype': 'DocField', 'fieldname': 'amount', 'fieldtype': 'Currency', @@ -169,6 +217,21 @@ 'width': '100px' }, + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'warehouse', + 'fieldtype': 'Link', + 'hidden': 0, + 'label': 'Accepted Warehouse', + 'oldfieldname': 'warehouse', + 'oldfieldtype': 'Link', + 'options': 'Warehouse', + 'permlevel': 0, + 'print_hide': 0, + 'width': '100px' + }, + # DocField { 'colour': 'White:FFF', @@ -185,50 +248,6 @@ 'width': '100px' }, - # DocField - { - 'doctype': 'DocField', - 'fieldname': 'discount_rate', - 'fieldtype': 'Currency', - 'label': 'Discount %', - 'permlevel': 0 - }, - - # DocField - { - 'colour': 'White:FFF', - 'doctype': 'DocField', - 'fieldname': 'import_rate', - 'fieldtype': 'Currency', - 'label': 'Rate', - 'oldfieldname': 'import_rate', - 'oldfieldtype': 'Currency', - 'permlevel': 0, - 'print_hide': 0, - 'trigger': 'Client', - 'width': '100px' - }, - - # DocField - { - 'doctype': 'DocField', - 'fieldname': 'import_ref_rate', - 'fieldtype': 'Currency', - 'label': 'Ref Rate ', - 'permlevel': 0 - }, - - # DocField - { - 'doctype': 'DocField', - 'fieldname': 'import_amount', - 'fieldtype': 'Currency', - 'label': 'Amount', - 'oldfieldname': 'import_amount', - 'oldfieldtype': 'Currency', - 'permlevel': 1 - }, - # DocField { 'doctype': 'DocField', @@ -244,21 +263,6 @@ 'width': '100px' }, - # DocField - { - 'doctype': 'DocField', - 'fieldname': 'warehouse', - 'fieldtype': 'Link', - 'hidden': 0, - 'label': 'Accepted Warehouse', - 'oldfieldname': 'warehouse', - 'oldfieldtype': 'Link', - 'options': 'Warehouse', - 'permlevel': 0, - 'print_hide': 0, - 'width': '100px' - }, - # DocField { 'doctype': 'DocField', @@ -290,6 +294,50 @@ 'width': '100px' }, + # DocField + { + 'colour': 'White:FFF', + 'doctype': 'DocField', + 'fieldname': 'schedule_date', + 'fieldtype': 'Date', + 'label': 'Schedule date', + 'no_copy': 1, + 'oldfieldname': 'schedule_date', + 'oldfieldtype': 'Date', + 'permlevel': 0, + 'print_hide': 1, + 'report_hide': 0, + 'reqd': 1 + }, + + # DocField + { + 'colour': 'White:FFF', + 'doctype': 'DocField', + 'fieldname': 'project_name', + 'fieldtype': 'Link', + 'in_filter': 1, + 'label': 'Project Name', + 'options': 'Project', + 'permlevel': 0, + 'print_hide': 1 + }, + + # DocField + { + 'colour': 'White:FFF', + 'doctype': 'DocField', + 'fieldname': 'qa_no', + 'fieldtype': 'Link', + 'label': 'QA No', + 'no_copy': 1, + 'oldfieldname': 'qa_no', + 'oldfieldtype': 'Link', + 'options': 'QA Inspection Report', + 'permlevel': 0, + 'print_hide': 1 + }, + # DocField { 'doctype': 'DocField', @@ -320,28 +368,13 @@ 'search_index': 1 }, - # DocField - { - 'colour': 'White:FFF', - 'doctype': 'DocField', - 'fieldname': 'schedule_date', - 'fieldtype': 'Date', - 'label': 'Schedule date', - 'no_copy': 1, - 'oldfieldname': 'schedule_date', - 'oldfieldtype': 'Date', - 'permlevel': 0, - 'print_hide': 1, - 'report_hide': 0, - 'reqd': 1 - }, - # DocField { 'colour': 'White:FFF', 'doctype': 'DocField', 'fieldname': 'serial_no', 'fieldtype': 'Text', + 'in_filter': 1, 'label': 'Serial No', 'no_copy': 1, 'oldfieldname': 'serial_no', @@ -366,21 +399,6 @@ 'trigger': 'Client' }, - # DocField - { - 'colour': 'White:FFF', - 'doctype': 'DocField', - 'fieldname': 'qa_no', - 'fieldtype': 'Link', - 'label': 'QA No', - 'no_copy': 1, - 'oldfieldname': 'qa_no', - 'oldfieldtype': 'Link', - 'options': 'QA Inspection Report', - 'permlevel': 0, - 'print_hide': 1 - }, - # DocField { 'doctype': 'DocField', @@ -460,6 +478,7 @@ # DocField { + 'colour': 'White:FFF', 'doctype': 'DocField', 'fieldname': 'item_tax_amount', 'fieldtype': 'Currency', @@ -510,6 +529,7 @@ # DocField { + 'colour': 'White:FFF', 'doctype': 'DocField', 'fieldname': 'valuation_rate', 'fieldtype': 'Currency', @@ -519,13 +539,14 @@ 'no_copy': 1, 'oldfieldname': 'valuation_rate', 'oldfieldtype': 'Currency', - 'permlevel': 0, + 'permlevel': 1, 'print_hide': 1, 'width': '80px' }, # DocField { + 'colour': 'White:FFF', 'description': 'Tax detail table fetched from item master as a string and stored in this field.\nUsed for Purchase Other Charges', 'doctype': 'DocField', 'fieldname': 'item_tax_rate', diff --git a/index.html b/index.html index db7c228009a..72b5ec25668 100644 --- a/index.html +++ b/index.html @@ -3,7 +3,7 @@ ERPNext -