Compare commits
85 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c9501eb460 | ||
|
|
d908b99b00 | ||
|
|
6646960e31 | ||
|
|
185c247286 | ||
|
|
a56121a342 | ||
|
|
cc054a5bbc | ||
|
|
aa12d30d5a | ||
|
|
399a4bf201 | ||
|
|
70be24d6f0 | ||
|
|
6ddbb8820a | ||
|
|
6252e935a0 | ||
|
|
5bbc68df8b | ||
|
|
88fff46ab4 | ||
|
|
f44b5152d2 | ||
|
|
ec2d09c557 | ||
|
|
722b22a834 | ||
|
|
08e2105b09 | ||
|
|
11d565b07c | ||
|
|
a2c9d13f68 | ||
|
|
508542d4d9 | ||
|
|
50ff8471e0 | ||
|
|
78b8cdc3c1 | ||
|
|
2275cd15e6 | ||
|
|
d217387400 | ||
|
|
b9376641af | ||
|
|
ee018b5ae1 | ||
|
|
acf85dffc5 | ||
|
|
660f3ed0d6 | ||
|
|
d5c83122f2 | ||
|
|
2777f23ace | ||
|
|
ae65172dca | ||
|
|
d261d40c7e | ||
|
|
4b231c2692 | ||
|
|
7e27e32e92 | ||
|
|
ed1b8cfe3f | ||
|
|
99d4ff4a29 | ||
|
|
595dbd6dea | ||
|
|
f979b18ddb | ||
|
|
3ef6e7847e | ||
|
|
2dba3b5e25 | ||
|
|
2cb8c6a867 | ||
|
|
be3aee973c | ||
|
|
c30c342bdf | ||
|
|
f02a0d4d24 | ||
|
|
44f85fed26 | ||
|
|
cd6c00d505 | ||
|
|
e6cd228288 | ||
|
|
ec14c81ebd | ||
|
|
8793b823af | ||
|
|
537301a210 | ||
|
|
f1d8fc3d51 | ||
|
|
20b4666e89 | ||
|
|
84969bdb2d | ||
|
|
705384d8fe | ||
|
|
2123e02eda | ||
|
|
b77a1057ce | ||
|
|
93b1f2ad72 | ||
|
|
9a433ffca1 | ||
|
|
c1162796c5 | ||
|
|
82446bf83e | ||
|
|
c72f8976aa | ||
|
|
c49a3425ef | ||
|
|
50b2278eda | ||
|
|
e1d85f2467 | ||
|
|
3962cded76 | ||
|
|
66360f694e | ||
|
|
5dba950afa | ||
|
|
6a3f51bee2 | ||
|
|
efe1ab742f | ||
|
|
4d32d5301a | ||
|
|
58bc00f954 | ||
|
|
155074479b | ||
|
|
fa1775b6a6 | ||
|
|
764e6ef210 | ||
|
|
f2d89987f5 | ||
|
|
06c92a782a | ||
|
|
f43e49f378 | ||
|
|
ea5ad84c5e | ||
|
|
46f328cbda | ||
|
|
1b9a01b6c3 | ||
|
|
e8ab7b8898 | ||
|
|
ae921ce2c8 | ||
|
|
590d2d524b | ||
|
|
fe11e71084 | ||
|
|
2c76aec119 |
@@ -2,7 +2,7 @@
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
|
||||
__version__ = '7.0.17'
|
||||
__version__ = '7.0.24'
|
||||
|
||||
def get_default_company(user=None):
|
||||
'''Get default company for user'''
|
||||
|
||||
@@ -47,7 +47,7 @@ cur_frm.cscript.account_type = function(doc, cdt, cdn) {
|
||||
|
||||
cur_frm.cscript.add_toolbar_buttons = function(doc) {
|
||||
cur_frm.add_custom_button(__('Chart of Accounts'),
|
||||
function() { frappe.set_route("Tree", "Account"); }, __("View"))
|
||||
function() { frappe.set_route("Tree", "Account"); });
|
||||
|
||||
if (doc.is_group == 1) {
|
||||
cur_frm.add_custom_button(__('Group to Non-Group'),
|
||||
@@ -61,7 +61,7 @@ cur_frm.cscript.add_toolbar_buttons = function(doc) {
|
||||
"company": doc.company
|
||||
};
|
||||
frappe.set_route("query-report", "General Ledger");
|
||||
}, __("View"));
|
||||
});
|
||||
|
||||
cur_frm.add_custom_button(__('Non-Group to Group'),
|
||||
function() { cur_frm.cscript.convert_to_group(); }, 'icon-retweet', 'btn-default')
|
||||
|
||||
@@ -772,6 +772,9 @@ def get_account_balance_and_party_type(account, date, company, debit=None, credi
|
||||
company_currency = get_company_currency(company)
|
||||
account_details = frappe.db.get_value("Account", account, ["account_type", "account_currency"], as_dict=1)
|
||||
|
||||
if not account_details:
|
||||
return
|
||||
|
||||
if account_details.account_type == "Receivable":
|
||||
party_type = "Customer"
|
||||
elif account_details.account_type == "Payable":
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
|
||||
// For license information, please see license.txt
|
||||
{% include "erpnext/public/js/controllers/accounts.js" %}
|
||||
|
||||
frappe.ui.form.on('Payment Entry', {
|
||||
onload: function(frm) {
|
||||
@@ -95,13 +96,13 @@ frappe.ui.form.on('Payment Entry', {
|
||||
frm.doc.paid_to_account_currency != company_currency &&
|
||||
frm.doc.paid_from_account_currency != frm.doc.paid_to_account_currency));
|
||||
|
||||
frm.toggle_display("base_paid_amount", frm.doc.paid_from_account_currency != company_currency);
|
||||
frm.toggle_display("base_paid_amount", frm.doc.paid_from_account_currency != company_currency);
|
||||
|
||||
frm.toggle_display("base_received_amount", (frm.doc.paid_to_account_currency != company_currency &&
|
||||
frm.doc.paid_from_account_currency != frm.doc.paid_to_account_currency));
|
||||
|
||||
frm.toggle_display("received_amount",
|
||||
frm.doc.paid_from_account_currency != frm.doc.paid_to_account_currency)
|
||||
frm.toggle_display("received_amount", (frm.doc.payment_type=="Internal Transfer" ||
|
||||
frm.doc.paid_from_account_currency != frm.doc.paid_to_account_currency))
|
||||
|
||||
frm.toggle_display(["base_total_allocated_amount"],
|
||||
(frm.doc.paid_amount && frm.doc.received_amount && frm.doc.base_total_allocated_amount &&
|
||||
@@ -257,22 +258,6 @@ frappe.ui.form.on('Payment Entry', {
|
||||
}
|
||||
},
|
||||
|
||||
mode_of_payment: function(frm) {
|
||||
return frappe.call({
|
||||
method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.get_bank_cash_account",
|
||||
args: {
|
||||
"mode_of_payment": frm.doc.mode_of_payment,
|
||||
"company": frm.doc.company
|
||||
},
|
||||
callback: function(r, rt) {
|
||||
if(r.message) {
|
||||
var payment_account_field = frm.doc.payment_type == "Receive" ? "paid_to" : "paid_from";
|
||||
frm.set_value(payment_account_field, r.message['account']);
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
paid_from: function(frm) {
|
||||
if(frm.set_party_account_based_on_party) return;
|
||||
|
||||
@@ -414,10 +399,7 @@ frappe.ui.form.on('Payment Entry', {
|
||||
|
||||
paid_amount: function(frm) {
|
||||
frm.set_value("base_paid_amount", flt(frm.doc.paid_amount) * flt(frm.doc.source_exchange_rate));
|
||||
|
||||
frm.trigger("reset_received_amount");
|
||||
|
||||
frm.set_paid_amount_based_on_received_amount = false;
|
||||
},
|
||||
|
||||
received_amount: function(frm) {
|
||||
@@ -436,22 +418,19 @@ frappe.ui.form.on('Payment Entry', {
|
||||
frm.events.allocate_party_amount_against_ref_docs(frm, frm.doc.received_amount);
|
||||
else
|
||||
frm.events.set_difference_amount(frm);
|
||||
|
||||
frm.set_paid_amount_based_on_received_amount = false;
|
||||
},
|
||||
|
||||
reset_received_amount: function(frm) {
|
||||
if(!frm.set_paid_amount_based_on_received_amount &&
|
||||
(frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency)) {
|
||||
|
||||
// var total_deductions = frappe.utils.sum($.map(frm.doc.deductions || [],
|
||||
// function(d) { return d.amount}));
|
||||
//
|
||||
// var received_amount = frm.doc.paid_amount +
|
||||
// flt(total_deductions) / flt(frm.doc.source_exchange_rate);
|
||||
//
|
||||
frm.set_value("received_amount", frm.doc.paid_amount);
|
||||
frm.set_value("target_exchange_rate", frm.doc.source_exchange_rate);
|
||||
frm.set_value("base_received_amount", frm.doc.base_paid_amount);
|
||||
}
|
||||
|
||||
if(frm.doc.payment_type == "Receive")
|
||||
frm.events.allocate_party_amount_against_ref_docs(frm, frm.doc.paid_amount);
|
||||
else
|
||||
@@ -607,11 +586,18 @@ frappe.ui.form.on('Payment Entry', {
|
||||
if(frm.doc.party) {
|
||||
var party_amount = frm.doc.payment_type=="Receive" ?
|
||||
frm.doc.paid_amount : frm.doc.received_amount;
|
||||
|
||||
var total_deductions = frappe.utils.sum($.map(frm.doc.deductions || [],
|
||||
function(d) { return flt(d.amount) }));
|
||||
|
||||
if(frm.doc.total_allocated_amount < party_amount)
|
||||
unallocated_amount = party_amount - frm.doc.total_allocated_amount;
|
||||
if(frm.doc.total_allocated_amount < party_amount) {
|
||||
if(frm.doc.payment_type == "Receive") {
|
||||
unallocated_amount = party_amount - (frm.doc.total_allocated_amount - total_deductions);
|
||||
} else {
|
||||
unallocated_amount = party_amount - (frm.doc.total_allocated_amount + total_deductions);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
frm.set_value("unallocated_amount", unallocated_amount);
|
||||
|
||||
var difference_amount = 0;
|
||||
|
||||
@@ -247,8 +247,13 @@ class PaymentEntry(AccountsController):
|
||||
if self.party:
|
||||
party_amount = self.paid_amount if self.payment_type=="Receive" else self.received_amount
|
||||
|
||||
total_deductions = sum([flt(d.amount) for d in self.get("deductions")])
|
||||
|
||||
if self.total_allocated_amount < party_amount:
|
||||
self.unallocated_amount = party_amount - self.total_allocated_amount
|
||||
if self.payment_type == "Receive":
|
||||
self.unallocated_amount = party_amount - (self.total_allocated_amount - total_deductions)
|
||||
else:
|
||||
self.unallocated_amount = party_amount - (self.total_allocated_amount + total_deductions)
|
||||
|
||||
def set_difference_amount(self):
|
||||
base_unallocated_amount = flt(self.unallocated_amount) * (flt(self.source_exchange_rate)
|
||||
|
||||
@@ -1,21 +1,37 @@
|
||||
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
// License: GNU General Public License v3. See license.txt
|
||||
|
||||
|
||||
//========================== On Load =================================================
|
||||
cur_frm.cscript.onload = function(doc, cdt, cdn) {
|
||||
if (!doc.transaction_date) doc.transaction_date = dateutil.obj_to_str(new Date());
|
||||
}
|
||||
|
||||
|
||||
// ***************** Get Account Head *****************
|
||||
cur_frm.fields_dict['closing_account_head'].get_query = function(doc, cdt, cdn) {
|
||||
return {
|
||||
filters: [
|
||||
['Account', 'company', '=', doc.company],
|
||||
['Account', 'is_group', '=', '0'],
|
||||
['Account', 'freeze_account', '=', 'No'],
|
||||
['Account', 'root_type', 'in', 'Liability, Equity']
|
||||
]
|
||||
frappe.ui.form.on('Period Closing Voucher', {
|
||||
onload: function(frm) {
|
||||
if (!frm.doc.transaction_date) frm.doc.transaction_date = dateutil.obj_to_str(new Date());
|
||||
},
|
||||
|
||||
setup: function(frm) {
|
||||
frm.set_query("closing_account_head", function() {
|
||||
return {
|
||||
filters: [
|
||||
['Account', 'company', '=', frm.doc.company],
|
||||
['Account', 'is_group', '=', '0'],
|
||||
['Account', 'freeze_account', '=', 'No'],
|
||||
['Account', 'root_type', 'in', 'Liability, Equity']
|
||||
]
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
refresh: function(frm) {
|
||||
if(frm.doc.docstatus==1) {
|
||||
frm.add_custom_button(__('Ledger'), function() {
|
||||
frappe.route_options = {
|
||||
"voucher_no": frm.doc.name,
|
||||
"from_date": frm.doc.posting_date,
|
||||
"to_date": frm.doc.posting_date,
|
||||
"company": frm.doc.company,
|
||||
group_by_voucher: 0
|
||||
};
|
||||
frappe.set_route("query-report", "General Ledger");
|
||||
}, "icon-table");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
@@ -55,9 +55,8 @@ class TestPeriodClosingVoucher(unittest.TestCase):
|
||||
if random_expense_account:
|
||||
# Check posted value for teh above random_expense_account
|
||||
gle_for_random_expense_account = frappe.db.sql("""
|
||||
select debit - credit as amount,
|
||||
debit_in_account_currency - credit_in_account_currency
|
||||
as amount_in_account_currency
|
||||
select sum(debit - credit) as amount,
|
||||
sum(debit_in_account_currency - credit_in_account_currency) as amount_in_account_currency
|
||||
from `tabGL Entry`
|
||||
where voucher_type='Period Closing Voucher' and voucher_no=%s and account =%s""",
|
||||
(pcv.name, random_expense_account[0].account), as_dict=True)
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
// License: GNU General Public License v3. See license.txt
|
||||
|
||||
{% include "erpnext/public/js/controllers/accounts.js" %}
|
||||
|
||||
frappe.ui.form.on("POS Profile", "onload", function(frm) {
|
||||
frm.set_query("selling_price_list", function() {
|
||||
return { filters: { selling: 1 } };
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
"custom": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"editable_grid": 0,
|
||||
"fields": [
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
@@ -832,7 +833,7 @@
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2016-06-13 21:20:13.805101",
|
||||
"modified": "2016-08-06 17:05:59.990031",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "POS Profile",
|
||||
@@ -879,7 +880,7 @@
|
||||
"write": 0
|
||||
}
|
||||
],
|
||||
"quick_entry": 1,
|
||||
"quick_entry": 0,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0,
|
||||
"sort_field": "modified",
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "Document",
|
||||
"editable_grid": 0,
|
||||
"fields": [
|
||||
{
|
||||
"allow_on_submit": 1,
|
||||
@@ -117,6 +118,33 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"description": "",
|
||||
"fieldname": "bill_no",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 1,
|
||||
"in_list_view": 0,
|
||||
"label": "Supplier Invoice No",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"oldfieldname": "bill_no",
|
||||
"oldfieldtype": "Data",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
@@ -142,6 +170,32 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"default": "0",
|
||||
"fieldname": "is_return",
|
||||
"fieldtype": "Check",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Is Return",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
@@ -198,19 +252,18 @@
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"description": "",
|
||||
"fieldname": "bill_no",
|
||||
"fieldtype": "Data",
|
||||
"fieldname": "bill_date",
|
||||
"fieldtype": "Date",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 1,
|
||||
"in_list_view": 0,
|
||||
"label": "Supplier Invoice No",
|
||||
"label": "Supplier Invoice Date",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"oldfieldname": "bill_no",
|
||||
"oldfieldtype": "Data",
|
||||
"oldfieldname": "bill_date",
|
||||
"oldfieldtype": "Date",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
@@ -225,17 +278,17 @@
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "bill_date",
|
||||
"fieldname": "due_date",
|
||||
"fieldtype": "Date",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 1,
|
||||
"in_list_view": 0,
|
||||
"label": "Supplier Invoice Date",
|
||||
"label": "Due Date",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"oldfieldname": "bill_date",
|
||||
"oldfieldname": "due_date",
|
||||
"oldfieldtype": "Date",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
@@ -299,32 +352,6 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"default": "0",
|
||||
"fieldname": "is_return",
|
||||
"fieldtype": "Check",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Is Return",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
@@ -2497,32 +2524,6 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "due_date",
|
||||
"fieldtype": "Date",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 1,
|
||||
"in_list_view": 0,
|
||||
"label": "Due Date",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"oldfieldname": "due_date",
|
||||
"oldfieldtype": "Date",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
@@ -3031,7 +3032,7 @@
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"menu_index": 0,
|
||||
"modified": "2016-06-30 13:40:39.440648",
|
||||
"modified": "2016-08-10 02:45:28.746569",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Purchase Invoice",
|
||||
|
||||
@@ -301,7 +301,7 @@ class PurchaseInvoice(BuyingController):
|
||||
asset.flags.ignore_validate_update_after_submit = True
|
||||
asset.save()
|
||||
|
||||
def make_gl_entries(self, repost_future_gle=False):
|
||||
def make_gl_entries(self, repost_future_gle=True):
|
||||
self.auto_accounting_for_stock = \
|
||||
cint(frappe.defaults.get_global_default("auto_accounting_for_stock"))
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ def update_multi_mode_option(doc, pos_profile):
|
||||
|
||||
def get_mode_of_payment(doc):
|
||||
return frappe.db.sql(""" select mpa.default_account, mpa.parent, mp.type as type from `tabMode of Payment Account` mpa,
|
||||
`tabMode of Payment` mp where mpa.parent = mp.name and company = %(company)s""", {'company': doc.company}, as_dict=1)
|
||||
`tabMode of Payment` mp where mpa.parent = mp.name and mpa.company = %(company)s""", {'company': doc.company}, as_dict=1)
|
||||
|
||||
def update_tax_table(doc):
|
||||
taxes = get_taxes_and_charges('Sales Taxes and Charges Template', doc.taxes_and_charges)
|
||||
@@ -108,13 +108,14 @@ def get_items(doc, pos_profile):
|
||||
|
||||
item.price_list_rate = frappe.db.get_value('Item Price', {'item_code': item.name,
|
||||
'price_list': doc.selling_price_list}, 'price_list_rate') or 0
|
||||
item.default_warehouse = pos_profile.get('warehouse') or item.default_warehouse or None
|
||||
item.default_warehouse = pos_profile.get('warehouse') or \
|
||||
get_item_warehouse_for_company(doc.company, item.default_warehouse) or None
|
||||
item.expense_account = pos_profile.get('expense_account') or item.expense_account
|
||||
item.income_account = pos_profile.get('income_account') or item_doc.income_account
|
||||
item.cost_center = pos_profile.get('cost_center') or item_doc.selling_cost_center
|
||||
item.actual_qty = frappe.db.get_value('Bin', {'item_code': item.name,
|
||||
'warehouse': item.default_warehouse}, 'actual_qty') or 0
|
||||
item.serial_nos = get_serial_nos(item, pos_profile)
|
||||
item.serial_nos = get_serial_nos(item, pos_profile, doc.company)
|
||||
item.batch_nos = frappe.db.sql_list("""select name from `tabBatch` where ifnull(expiry_date, '4000-10-10') > curdate()
|
||||
and item = %(item_code)s""", {'item_code': item.item_code})
|
||||
|
||||
@@ -122,13 +123,19 @@ def get_items(doc, pos_profile):
|
||||
|
||||
return item_list
|
||||
|
||||
def get_serial_nos(item, pos_profile):
|
||||
def get_item_warehouse_for_company(company, warehouse):
|
||||
if frappe.db.get_value('Warehouse', warehouse, 'company') != company:
|
||||
warehouse = None
|
||||
return warehouse
|
||||
|
||||
def get_serial_nos(item, pos_profile, company):
|
||||
cond = "1=1"
|
||||
if pos_profile.get('update_stock') and pos_profile.get('warehouse'):
|
||||
cond = "warehouse = '{0}'".format(pos_profile.get('warehouse'))
|
||||
|
||||
serial_nos = frappe.db.sql("""select name, warehouse from `tabSerial No` where {0}
|
||||
and item_code = %(item_code)s""".format(cond), {'item_code': item.item_code}, as_dict=1)
|
||||
and item_code = %(item_code)s and company = %(company)s
|
||||
""".format(cond), {'item_code': item.item_code, 'company': company}, as_dict=1)
|
||||
|
||||
serial_no_list = {}
|
||||
for serial_no in serial_nos:
|
||||
@@ -214,9 +221,9 @@ def submit_invoice(si_doc, name):
|
||||
save_invoice(e, si_doc, name)
|
||||
|
||||
def save_invoice(e, si_doc, name):
|
||||
si_doc.docstatus = 0
|
||||
si_doc.name = ''
|
||||
si_doc.save(ignore_permissions=True)
|
||||
if not frappe.db.exists('Sales Invoice', {'offline_pos_name': name}):
|
||||
si_doc.flags.ignore_mandatory = True
|
||||
si_doc.insert()
|
||||
make_scheduler_log(e, si_doc.name)
|
||||
|
||||
def make_scheduler_log(e, sales_invoice):
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "",
|
||||
"editable_grid": 0,
|
||||
"fields": [
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
@@ -1135,7 +1136,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "2",
|
||||
"print_hide": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
@@ -3676,7 +3677,7 @@
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"menu_index": 0,
|
||||
"modified": "2016-07-07 13:40:27.977803",
|
||||
"modified": "2016-08-03 11:50:49.680278",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Sales Invoice",
|
||||
|
||||
@@ -177,6 +177,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
|
||||
doc = JSON.parse(localStorage.getItem('doc'))
|
||||
if(this.frm.doc.payments.length == 0){
|
||||
this.frm.doc.payments = doc.payments;
|
||||
this.calculate_outstanding_amount();
|
||||
}
|
||||
|
||||
if(this.frm.doc.customer){
|
||||
@@ -869,6 +870,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
|
||||
for(key in data){
|
||||
if(data[key].docstatus == 1 && index < 50){
|
||||
index++
|
||||
data[key].docstatus = 0;
|
||||
return data
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,10 +52,10 @@ class ReceivablePayableReport(object):
|
||||
if not "range3" in self.filters:
|
||||
self.filters["range3"] = "90"
|
||||
|
||||
for label in ("0-{range1}".format(**self.filters),
|
||||
"{range1}-{range2}".format(**self.filters),
|
||||
"{range2}-{range3}".format(**self.filters),
|
||||
"{range3}-{above}".format(range3=self.filters.range3, above=_("Above"))):
|
||||
for label in ("0-{range1}".format(range1=self.filters["range1"]),
|
||||
"{range1}-{range2}".format(range1=self.filters["range1"]+1, range2=self.filters["range2"]),
|
||||
"{range2}-{range3}".format(range2=self.filters["range2"]+1, range3=self.filters["range3"]),
|
||||
"{range3}-{above}".format(range3=self.filters["range3"] + 1, above=_("Above"))):
|
||||
columns.append({
|
||||
"label": label,
|
||||
"fieldtype": "Currency",
|
||||
|
||||
@@ -25,6 +25,9 @@ def execute(filters=None):
|
||||
return columns, res
|
||||
|
||||
def validate_filters(filters, account_details):
|
||||
if not filters.get('company'):
|
||||
frappe.throw(_('{0} is mandatory').format(_('Company')))
|
||||
|
||||
if filters.get("account") and not account_details.get(filters.account):
|
||||
frappe.throw(_("Account {0} does not exists").format(filters.account))
|
||||
|
||||
@@ -87,7 +90,7 @@ def get_columns(filters):
|
||||
columns += [
|
||||
_("Voucher Type") + "::120", _("Voucher No") + ":Dynamic Link/"+_("Voucher Type")+":160",
|
||||
_("Against Account") + "::120", _("Party Type") + "::80", _("Party") + "::150",
|
||||
_("Project") + ":Link/Project:100", _("Cost Center") + ":Link/Cost Center:100",
|
||||
_("Project") + ":Link/Project:100", _("Cost Center") + ":Link/Cost Center:100",
|
||||
_("Remarks") + "::400"
|
||||
]
|
||||
|
||||
@@ -111,7 +114,7 @@ def get_gl_entries(filters):
|
||||
if filters.get("group_by_voucher") else "group by name"
|
||||
|
||||
gl_entries = frappe.db.sql("""
|
||||
select
|
||||
select
|
||||
posting_date, account, party_type, party,
|
||||
sum(debit) as debit, sum(credit) as credit,
|
||||
voucher_type, voucher_no, cost_center, project,
|
||||
|
||||
@@ -30,7 +30,7 @@ frappe.ui.form.on("Request for Quotation",{
|
||||
},
|
||||
|
||||
onload: function(frm) {
|
||||
frm.add_fetch('standard_reply', 'response', 'response');
|
||||
frm.add_fetch('standard_reply', 'response', 'message_for_supplier');
|
||||
|
||||
if(!frm.doc.message_for_supplier) {
|
||||
frm.set_value("message_for_supplier", __("Please supply the specified items at the best possible rates"))
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "Document",
|
||||
"editable_grid": 0,
|
||||
"fields": [
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
@@ -296,7 +297,7 @@
|
||||
"options": "Standard Reply",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
@@ -638,7 +639,7 @@
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2016-06-30 01:57:49.233065",
|
||||
"modified": "2016-08-01 08:45:39.777405",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Buying",
|
||||
"name": "Request for Quotation",
|
||||
|
||||
@@ -0,0 +1,132 @@
|
||||
|
||||
<head>
|
||||
|
||||
|
||||
<link href="/assets/frappe/css/c3.min.css" rel="stylesheet" type="text/css">
|
||||
|
||||
|
||||
<script type="text/javascript" src="/assets/frappe/js/lib/d3.min.js"></script>
|
||||
<script type="text/javascript" src="/assets/frappe/js/lib/c3.min.js"></script>
|
||||
<script type="text/javascript">
|
||||
|
||||
onReady("#chart_div", function() {
|
||||
var chartData = [];
|
||||
{% var q = 0; %}
|
||||
{% for(var j=0, m=data.length+1; j<m; j++) { %}
|
||||
|
||||
var tempData{%=j%} = [];
|
||||
|
||||
{% for(var i=1, l=report.columns.length; i<l; i++) { %}
|
||||
{% if(__(report.columns[i].label) != __("Quotation")) { %}
|
||||
|
||||
{% if(j == 0) { %}
|
||||
{% if(i == 1) { %}
|
||||
tempData{%=j%}[{%=i%}-1] = \"x\";
|
||||
{% } else { %}
|
||||
|
||||
tempData{%=j%}[{%=i%}-1] = Math.log(parseInt(\"{%= report.columns[i].label %}\".replace(\"Qty: \",\"\"))) / Math.LN10;
|
||||
{% } %}
|
||||
{% } else { %}
|
||||
{% if(i == 1) { %}
|
||||
tempData{%=j%}[{%=i%}-1] = \"{%= data[j-1][report.columns[i].field] %} \";
|
||||
{% } else { %}
|
||||
tempData{%=j%}[{%=i%}-1] = {% if(data[j-1][report.columns[i].field] == "") { if (i > 2) { %}
|
||||
tempData{%=j%}[{%=i%}-2]
|
||||
{% } else { %}
|
||||
0
|
||||
{% } } else { %}
|
||||
{%= data[j-1][report.columns[i].field] %}
|
||||
{% } %};
|
||||
{% } %};
|
||||
{% } %}
|
||||
{% } else { %}
|
||||
{% if(j == 0) { %}
|
||||
{% if(i < l-1) { %}
|
||||
tempData{%=j%}[{%=i%}-1] = Math.log(parseInt(\"{%= report.columns[i+1].label %}\".replace(\"Qty: \",\"\"))-1) / Math.LN10;
|
||||
{% } else { %}
|
||||
tempData{%=j%}[{%=i%}-1] = Math.log(2*parseInt(\"{%= report.columns[i-1].label %}\".replace(\"Qty: \",\"\"))) / Math.LN10;
|
||||
{% } %}
|
||||
{% } else { %}
|
||||
|
||||
tempData{%=j%}[{%=i%}-1] = tempData{%=j%}[{%=i%}-2];
|
||||
{% } %}
|
||||
|
||||
{% } %}
|
||||
|
||||
{% } %}
|
||||
chartData[{%=j%}] = tempData{%=j%};
|
||||
{% } %}
|
||||
console.log(chartData);
|
||||
|
||||
hold = {
|
||||
bindto: "#chart_div" ,data: {
|
||||
x: "x",
|
||||
columns: chartData
|
||||
},
|
||||
axis: {
|
||||
x: {
|
||||
tick: {
|
||||
format: function (x22) { return Math.pow(10,x22).toFixed(0); },
|
||||
culling: {
|
||||
max: {%=report.columns.length%} / 2
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
},
|
||||
point: {
|
||||
show: false
|
||||
}
|
||||
};
|
||||
console.log(hold);
|
||||
var chart = c3.generate(hold);
|
||||
});
|
||||
|
||||
function onReady(selector, callback) {
|
||||
var intervalID = window.setInterval(function() {
|
||||
if (document.querySelector(selector) !== undefined) {
|
||||
window.clearInterval(intervalID);
|
||||
callback.call(this);
|
||||
}
|
||||
}, 500);}
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<div style="margin-bottom: 7px;" class="text-center">
|
||||
{%= frappe.boot.letter_heads[frappe.defaults.get_default("letter_head")] %}
|
||||
</div>
|
||||
<h2 class="text-center">{%= __(report.report_name) %}</h2>
|
||||
<h4 class="text-center">{%= filters.item %} </h4>
|
||||
|
||||
<hr>
|
||||
<table class="table table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
{% for(var i=0, l=report.columns.length; i<l; i++) { %}
|
||||
<th style="width: 15%">{%= report.columns[i].label %}</th>
|
||||
{% } %}
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
{% for(var i=0, l=data.length; i<l; i++) { %}
|
||||
<tr>
|
||||
|
||||
{% for(var j=0,m=report.columns.length; j<m; j++) { %}
|
||||
<td style="width: 15%">{%= data[i][report.columns[j].field] %}</td>
|
||||
{% } %}
|
||||
|
||||
</tr>
|
||||
{% } %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4 class="text-center"> Analysis Chart </h4>
|
||||
<div id="chart_div"></div>
|
||||
|
||||
|
||||
|
||||
<p class="text-right text-muted">Printed On {%= dateutil.str_to_user(dateutil.get_datetime_as_string()) %}</p>
|
||||
@@ -2,6 +2,8 @@
|
||||
# For license information, please see license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
from erpnext.setup.utils import get_exchange_rate
|
||||
|
||||
import frappe
|
||||
|
||||
def execute(filters=None):
|
||||
@@ -22,6 +24,7 @@ def get_quote_list(item, qty_list):
|
||||
if item:
|
||||
price_data = []
|
||||
suppliers = []
|
||||
company_currency = frappe.db.get_default("currency")
|
||||
# Get the list of suppliers
|
||||
for root in frappe.db.sql("""select parent, qty, rate from `tabSupplier Quotation Item` where item_code=%s and docstatus < 2""", item, as_dict=1):
|
||||
for splr in frappe.db.sql("""SELECT supplier from `tabSupplier Quotation` where name =%s and docstatus < 2""", root.parent, as_dict=1):
|
||||
@@ -35,6 +38,9 @@ def get_quote_list(item, qty_list):
|
||||
|
||||
#Add a row for each supplier
|
||||
for root in set(suppliers):
|
||||
supplier_currency = frappe.db.get_value("Supplier",root,"default_currency")
|
||||
exg = get_exchange_rate(supplier_currency,company_currency)
|
||||
|
||||
row = frappe._dict({
|
||||
"supplier_name": root
|
||||
})
|
||||
@@ -42,7 +48,7 @@ def get_quote_list(item, qty_list):
|
||||
# Get the quantity for this row
|
||||
for item_price in price_data:
|
||||
if str(item_price.qty) == col.key and item_price.supplier == root:
|
||||
row[col.key] = item_price.rate
|
||||
row[col.key] = item_price.rate * exg
|
||||
row[col.key + "QUOTE"] = item_price.parent
|
||||
break
|
||||
else:
|
||||
|
||||
@@ -229,12 +229,12 @@ def get_data():
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"module_name": "Examination",
|
||||
"module_name": "Assessment",
|
||||
"color": "#8a70be",
|
||||
"icon": "icon-file-text-alt",
|
||||
"label": _("Examination"),
|
||||
"link": "List/Examination",
|
||||
"_doctype": "Examination",
|
||||
"label": _("Assessment"),
|
||||
"link": "List/Assessment",
|
||||
"_doctype": "Assessment",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
@@ -261,7 +261,7 @@ def get_data():
|
||||
"icon": "icon-map-marker",
|
||||
"label": _("Room"),
|
||||
"link": "List/Room",
|
||||
"_doctype": "Examination",
|
||||
"_doctype": "Room",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
|
||||
@@ -12,7 +12,7 @@ You can create Custom Form, Fields, Scripts and can also create your own Apps
|
||||
to extend ERPNext functionality.
|
||||
|
||||
ERPNext is Open Source under the GNU General Public Licence v3 and has been
|
||||
listed as one of the Best Open Source Softwares in the world by my online
|
||||
listed as one of the Best Open Source Softwares in the world by many online
|
||||
blogs."""
|
||||
|
||||
docs_version = "6.x.x"
|
||||
|
||||
@@ -61,7 +61,11 @@ def get_data():
|
||||
},
|
||||
{
|
||||
"type": "doctype",
|
||||
"name": "Examination"
|
||||
"name": "Assessment"
|
||||
},
|
||||
{
|
||||
"type": "doctype",
|
||||
"name": "Assessment Group"
|
||||
},
|
||||
{
|
||||
"type": "doctype",
|
||||
|
||||
@@ -38,6 +38,7 @@ class StockController(AccountsController):
|
||||
|
||||
gl_list = []
|
||||
warehouse_with_no_account = []
|
||||
|
||||
for detail in voucher_details:
|
||||
sle_list = sle_map.get(detail.name)
|
||||
if sle_list:
|
||||
@@ -266,10 +267,9 @@ def update_gl_entries_after(posting_date, posting_time, for_warehouses=None, for
|
||||
voucher_obj = frappe.get_doc(voucher_type, voucher_no)
|
||||
expected_gle = voucher_obj.get_gl_entries(warehouse_account)
|
||||
if expected_gle:
|
||||
if not existing_gle or not compare_existing_and_expected_gle(existing_gle,
|
||||
expected_gle):
|
||||
_delete_gl_entries(voucher_type, voucher_no)
|
||||
voucher_obj.make_gl_entries(repost_future_gle=False)
|
||||
if not existing_gle or not compare_existing_and_expected_gle(existing_gle, expected_gle):
|
||||
_delete_gl_entries(voucher_type, voucher_no)
|
||||
voucher_obj.make_gl_entries(repost_future_gle=False)
|
||||
else:
|
||||
_delete_gl_entries(voucher_type, voucher_no)
|
||||
|
||||
|
||||
@@ -38,7 +38,8 @@ class Lead(SellingController):
|
||||
frappe.throw(_("Campaign Name is required"))
|
||||
|
||||
if self.email_id:
|
||||
validate_email_add(self.email_id, True)
|
||||
if not self.flags.ignore_email_validation:
|
||||
validate_email_add(self.email_id, True)
|
||||
|
||||
if self.email_id == self.lead_owner:
|
||||
# Lead Owner cannot be same as the Lead
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import frappe, json
|
||||
from frappe.utils import cstr, cint, get_fullname, validate_email_add
|
||||
from frappe.utils import cstr, cint, get_fullname
|
||||
from frappe import msgprint, _
|
||||
from frappe.model.mapper import get_mapped_doc
|
||||
from erpnext.setup.utils import get_exchange_rate
|
||||
@@ -43,7 +43,7 @@ class Opportunity(TransactionBase):
|
||||
|
||||
def make_new_lead_if_required(self):
|
||||
"""Set lead against new opportunity"""
|
||||
if not (self.lead or self.customer) and self.contact_email and validate_email_add(self.contact_email):
|
||||
if not (self.lead or self.customer) and self.contact_email:
|
||||
lead_name = frappe.db.get_value("Lead", {"email_id": self.contact_email})
|
||||
if not lead_name:
|
||||
sender_name = get_fullname(self.contact_email)
|
||||
@@ -64,6 +64,7 @@ class Opportunity(TransactionBase):
|
||||
"lead_name": sender_name
|
||||
})
|
||||
|
||||
lead.flags.ignore_email_validation = True
|
||||
lead.insert(ignore_permissions=True)
|
||||
lead_name = lead.name
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ def simulate():
|
||||
if not runs_for:
|
||||
runs_for = frappe.utils.date_diff(frappe.utils.nowdate(), current_date)
|
||||
# runs_for = 100
|
||||
|
||||
|
||||
fixed_asset.work()
|
||||
|
||||
for i in xrange(runs_for):
|
||||
@@ -72,9 +72,6 @@ def simulate():
|
||||
stock.work()
|
||||
accounts.work()
|
||||
projects.run_projects(current_date)
|
||||
# run_stock()
|
||||
# run_accounts()
|
||||
# run_projects()
|
||||
# run_messages()
|
||||
|
||||
current_date = frappe.utils.add_days(current_date, 1)
|
||||
|
||||
@@ -212,7 +212,7 @@ def setup_user():
|
||||
user = frappe.new_doc("User")
|
||||
user.update(u)
|
||||
user.flags.no_welcome_mail
|
||||
user.password = 'demo'
|
||||
user.new_password = 'demo'
|
||||
user.insert()
|
||||
|
||||
def import_json(doctype, submit=False, values=None):
|
||||
@@ -377,6 +377,12 @@ def setup_budget():
|
||||
|
||||
|
||||
def setup_user_roles():
|
||||
user = frappe.get_doc('User', 'demo@erpnext.com')
|
||||
user.add_roles('HR User', 'HR Manager', 'Accounts User', 'Accounts Manager',
|
||||
'Stock User', 'Stock Manager', 'Sales User', 'Sales Manager', 'Purchase User',
|
||||
'Purchase Manager', 'Projects User', 'Manufacturing User', 'Manufacturing Manager',
|
||||
'Support Team')
|
||||
|
||||
if not frappe.db.get_global('demo_hr_user'):
|
||||
user = frappe.get_doc('User', 'CharmaineGaudreau@example.com')
|
||||
user.add_roles('HR User', 'HR Manager', 'Accounts User')
|
||||
@@ -439,7 +445,7 @@ def setup_leave_allocation():
|
||||
for leave_type in leave_types:
|
||||
if not leave_type.max_days_allowed:
|
||||
leave_type.max_days_allowed = 10
|
||||
|
||||
|
||||
leave_allocation = frappe.get_doc({
|
||||
"doctype": "Leave Allocation",
|
||||
"employee": employee.name,
|
||||
@@ -450,4 +456,4 @@ def setup_leave_allocation():
|
||||
})
|
||||
leave_allocation.insert()
|
||||
leave_allocation.submit()
|
||||
frappe.db.commit()
|
||||
frappe.db.commit()
|
||||
|
||||
BIN
erpnext/docs/assets/img/accounts/opening-2.png
Normal file
|
After Width: | Height: | Size: 89 KiB |
BIN
erpnext/docs/assets/img/accounts/opening-3.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
erpnext/docs/assets/img/accounts/opening-4.png
Normal file
|
After Width: | Height: | Size: 88 KiB |
BIN
erpnext/docs/assets/img/accounts/opening-5.png
Normal file
|
After Width: | Height: | Size: 105 KiB |
BIN
erpnext/docs/assets/img/accounts/opening-6.png
Normal file
|
After Width: | Height: | Size: 105 KiB |
BIN
erpnext/docs/assets/img/accounts/opening-7.png
Normal file
|
After Width: | Height: | Size: 70 KiB |
BIN
erpnext/docs/assets/img/accounts/perpetual-1.png
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/assign-1.png
Normal file
|
After Width: | Height: | Size: 67 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/assign-2.png
Normal file
|
After Width: | Height: | Size: 82 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/assign-3.png
Normal file
|
After Width: | Height: | Size: 82 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/assign-4.png
Normal file
|
After Width: | Height: | Size: 61 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/calendar-1.png
Normal file
|
After Width: | Height: | Size: 70 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/calendar-2.gif
Normal file
|
After Width: | Height: | Size: 136 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/calendar-3.png
Normal file
|
After Width: | Height: | Size: 67 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/calendar-4.png
Normal file
|
After Width: | Height: | Size: 74 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/calendar-5.png
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/calendar-6.png
Normal file
|
After Width: | Height: | Size: 68 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/calendar-7.png
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/chat-1.png
Normal file
|
After Width: | Height: | Size: 86 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/chat-2.png
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/comments-1.png
Normal file
|
After Width: | Height: | Size: 80 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/note-1.png
Normal file
|
After Width: | Height: | Size: 79 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/share-1.gif
Normal file
|
After Width: | Height: | Size: 252 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/tags-1.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/tags-2.png
Normal file
|
After Width: | Height: | Size: 78 KiB |
0
erpnext/docs/assets/img/schools/fees/__init__.py
Normal file
BIN
erpnext/docs/assets/img/schools/fees/fee-category.png
Normal file
|
After Width: | Height: | Size: 73 KiB |
BIN
erpnext/docs/assets/img/schools/fees/fee-structure.png
Normal file
|
After Width: | Height: | Size: 77 KiB |
BIN
erpnext/docs/assets/img/schools/fees/fees-section.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
erpnext/docs/assets/img/schools/fees/fees.png
Normal file
|
After Width: | Height: | Size: 104 KiB |
BIN
erpnext/docs/assets/img/schools/home.png
Normal file
|
After Width: | Height: | Size: 58 KiB |
|
After Width: | Height: | Size: 76 KiB |
BIN
erpnext/docs/assets/img/schools/schedule/course-schedule-att.png
Normal file
|
After Width: | Height: | Size: 101 KiB |
BIN
erpnext/docs/assets/img/schools/schedule/course-schedule.png
Normal file
|
After Width: | Height: | Size: 112 KiB |
BIN
erpnext/docs/assets/img/schools/schedule/examination.png
Normal file
|
After Width: | Height: | Size: 75 KiB |
BIN
erpnext/docs/assets/img/schools/schedule/schedule-section.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
erpnext/docs/assets/img/schools/schedule/scheduling-tool.png
Normal file
|
After Width: | Height: | Size: 85 KiB |
BIN
erpnext/docs/assets/img/schools/schedule/student-attendance.png
Normal file
|
After Width: | Height: | Size: 54 KiB |
0
erpnext/docs/assets/img/schools/setup/__init__.py
Normal file
BIN
erpnext/docs/assets/img/schools/setup/academic-term.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
erpnext/docs/assets/img/schools/setup/academic-year.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
erpnext/docs/assets/img/schools/setup/course.png
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
erpnext/docs/assets/img/schools/setup/instructor.png
Normal file
|
After Width: | Height: | Size: 106 KiB |
BIN
erpnext/docs/assets/img/schools/setup/program.png
Normal file
|
After Width: | Height: | Size: 119 KiB |
BIN
erpnext/docs/assets/img/schools/setup/room.png
Normal file
|
After Width: | Height: | Size: 55 KiB |
BIN
erpnext/docs/assets/img/schools/setup/setup-section.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
0
erpnext/docs/assets/img/schools/student/__init__.py
Normal file
BIN
erpnext/docs/assets/img/schools/student/program-enrollment.png
Normal file
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 72 KiB |
BIN
erpnext/docs/assets/img/schools/student/student-applicant.png
Normal file
|
After Width: | Height: | Size: 158 KiB |
|
After Width: | Height: | Size: 87 KiB |
BIN
erpnext/docs/assets/img/schools/student/student-group.png
Normal file
|
After Width: | Height: | Size: 102 KiB |
BIN
erpnext/docs/assets/img/schools/student/student-section.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
erpnext/docs/assets/img/schools/student/student.png
Normal file
|
After Width: | Height: | Size: 124 KiB |
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 5.9 KiB |
|
Before Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 6.6 KiB |