Merge branch 'develop' into pos-service-items
This commit is contained in:
commit
689e08aca3
27
.github/ISSUE_TEMPLATE/bug_report.yaml
vendored
27
.github/ISSUE_TEMPLATE/bug_report.yaml
vendored
@ -24,20 +24,6 @@ body:
|
|||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
|
||||||
- type: dropdown
|
|
||||||
id: version
|
|
||||||
attributes:
|
|
||||||
label: Version
|
|
||||||
description: Affected versions.
|
|
||||||
multiple: true
|
|
||||||
options:
|
|
||||||
- v12
|
|
||||||
- v13
|
|
||||||
- v14
|
|
||||||
- develop
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: dropdown
|
- type: dropdown
|
||||||
id: module
|
id: module
|
||||||
attributes:
|
attributes:
|
||||||
@ -86,7 +72,7 @@ body:
|
|||||||
- manual install
|
- manual install
|
||||||
- FrappeCloud
|
- FrappeCloud
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: false
|
||||||
|
|
||||||
- type: textarea
|
- type: textarea
|
||||||
id: logs
|
id: logs
|
||||||
@ -95,12 +81,7 @@ body:
|
|||||||
description: Please copy and paste any relevant log output. This will be automatically formatted.
|
description: Please copy and paste any relevant log output. This will be automatically formatted.
|
||||||
render: shell
|
render: shell
|
||||||
|
|
||||||
|
- type: markdown
|
||||||
- type: checkboxes
|
|
||||||
id: terms
|
|
||||||
attributes:
|
attributes:
|
||||||
label: Code of Conduct
|
value: |
|
||||||
description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/frappe/erpnext/blob/develop/CODE_OF_CONDUCT.md)
|
By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/frappe/erpnext/blob/develop/CODE_OF_CONDUCT.md)
|
||||||
options:
|
|
||||||
- label: I agree to follow this project's Code of Conduct
|
|
||||||
required: true
|
|
||||||
|
1
dev-requirements.txt
Normal file
1
dev-requirements.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
hypothesis~=6.31.0
|
@ -55,9 +55,9 @@ def set_perpetual_inventory(enable=1, company=None):
|
|||||||
company.enable_perpetual_inventory = enable
|
company.enable_perpetual_inventory = enable
|
||||||
company.save()
|
company.save()
|
||||||
|
|
||||||
def encode_company_abbr(name, company):
|
def encode_company_abbr(name, company=None, abbr=None):
|
||||||
'''Returns name encoded with company abbreviation'''
|
'''Returns name encoded with company abbreviation'''
|
||||||
company_abbr = frappe.get_cached_value('Company', company, "abbr")
|
company_abbr = abbr or frappe.get_cached_value('Company', company, "abbr")
|
||||||
parts = name.rsplit(" - ", 1)
|
parts = name.rsplit(" - ", 1)
|
||||||
|
|
||||||
if parts[-1].lower() != company_abbr.lower():
|
if parts[-1].lower() != company_abbr.lower():
|
||||||
|
@ -1,29 +0,0 @@
|
|||||||
QUnit.module('accounts');
|
|
||||||
|
|
||||||
QUnit.test("test account", function(assert) {
|
|
||||||
assert.expect(4);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => frappe.set_route('Tree', 'Account'),
|
|
||||||
() => frappe.timeout(3),
|
|
||||||
() => frappe.click_button('Expand All'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.click_link('Debtors'),
|
|
||||||
() => frappe.click_button('Edit'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.root_type=='Asset');
|
|
||||||
assert.ok(cur_frm.doc.report_type=='Balance Sheet');
|
|
||||||
assert.ok(cur_frm.doc.account_type=='Receivable');
|
|
||||||
},
|
|
||||||
() => frappe.click_button('Ledger'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
// check if general ledger report shown
|
|
||||||
assert.deepEqual(frappe.get_route(), ['query-report', 'General Ledger']);
|
|
||||||
window.history.back();
|
|
||||||
return frappe.timeout(1);
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,69 +0,0 @@
|
|||||||
QUnit.module('accounts');
|
|
||||||
|
|
||||||
QUnit.test("test account with number", function(assert) {
|
|
||||||
assert.expect(7);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => frappe.set_route('Tree', 'Account'),
|
|
||||||
() => frappe.click_link('Income'),
|
|
||||||
() => frappe.click_button('Add Child'),
|
|
||||||
() => frappe.timeout(.5),
|
|
||||||
() => {
|
|
||||||
cur_dialog.fields_dict.account_name.$input.val("Test Income");
|
|
||||||
cur_dialog.fields_dict.account_number.$input.val("4010");
|
|
||||||
},
|
|
||||||
() => frappe.click_button('Create New'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
assert.ok($('a:contains("4010 - Test Income"):visible').length!=0, "Account created with number");
|
|
||||||
},
|
|
||||||
() => frappe.click_link('4010 - Test Income'),
|
|
||||||
() => frappe.click_button('Edit'),
|
|
||||||
() => frappe.timeout(.5),
|
|
||||||
() => frappe.click_button('Update Account Number'),
|
|
||||||
() => frappe.timeout(.5),
|
|
||||||
() => {
|
|
||||||
cur_dialog.fields_dict.account_number.$input.val("4020");
|
|
||||||
},
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => cur_dialog.primary_action(),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => cur_frm.refresh_fields(),
|
|
||||||
() => frappe.timeout(.5),
|
|
||||||
() => {
|
|
||||||
var abbr = frappe.get_abbr(frappe.defaults.get_default("Company"));
|
|
||||||
var new_account = "4020 - Test Income - " + abbr;
|
|
||||||
assert.ok(cur_frm.doc.name==new_account, "Account renamed");
|
|
||||||
assert.ok(cur_frm.doc.account_name=="Test Income", "account name remained same");
|
|
||||||
assert.ok(cur_frm.doc.account_number=="4020", "Account number updated to 4020");
|
|
||||||
},
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.click_button('Menu'),
|
|
||||||
() => frappe.click_link('Rename'),
|
|
||||||
() => frappe.timeout(.5),
|
|
||||||
() => {
|
|
||||||
cur_dialog.fields_dict.new_name.$input.val("4030 - Test Income");
|
|
||||||
},
|
|
||||||
() => frappe.timeout(.5),
|
|
||||||
() => frappe.click_button("Rename"),
|
|
||||||
() => frappe.timeout(2),
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.account_name=="Test Income", "account name remained same");
|
|
||||||
assert.ok(cur_frm.doc.account_number=="4030", "Account number updated to 4030");
|
|
||||||
},
|
|
||||||
() => frappe.timeout(.5),
|
|
||||||
() => frappe.click_button('Chart of Accounts'),
|
|
||||||
() => frappe.timeout(.5),
|
|
||||||
() => frappe.click_button('Menu'),
|
|
||||||
() => frappe.click_link('Refresh'),
|
|
||||||
() => frappe.click_button('Expand All'),
|
|
||||||
() => frappe.click_link('4030 - Test Income'),
|
|
||||||
() => frappe.click_button('Delete'),
|
|
||||||
() => frappe.click_button('Yes'),
|
|
||||||
() => frappe.timeout(.5),
|
|
||||||
() => {
|
|
||||||
assert.ok($('a:contains("4030 - Test Account"):visible').length==0, "Account deleted");
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,46 +0,0 @@
|
|||||||
QUnit.module('accounts');
|
|
||||||
QUnit.test("test account", assert => {
|
|
||||||
assert.expect(3);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => frappe.set_route('Tree', 'Account'),
|
|
||||||
() => frappe.click_button('Expand All'),
|
|
||||||
() => frappe.click_link('Duties and Taxes - '+ frappe.get_abbr(frappe.defaults.get_default("Company"))),
|
|
||||||
() => {
|
|
||||||
if($('a:contains("CGST"):visible').length == 0){
|
|
||||||
return frappe.map_tax.make('CGST', 9);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
() => {
|
|
||||||
if($('a:contains("SGST"):visible').length == 0){
|
|
||||||
return frappe.map_tax.make('SGST', 9);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
() => {
|
|
||||||
if($('a:contains("IGST"):visible').length == 0){
|
|
||||||
return frappe.map_tax.make('IGST', 18);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
() => {
|
|
||||||
assert.ok($('a:contains("CGST"):visible').length!=0, "CGST Checked");
|
|
||||||
assert.ok($('a:contains("SGST"):visible').length!=0, "SGST Checked");
|
|
||||||
assert.ok($('a:contains("IGST"):visible').length!=0, "IGST Checked");
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
frappe.map_tax = {
|
|
||||||
make:function(text,rate){
|
|
||||||
return frappe.run_serially([
|
|
||||||
() => frappe.click_button('Add Child'),
|
|
||||||
() => frappe.timeout(0.2),
|
|
||||||
() => cur_dialog.set_value('account_name',text),
|
|
||||||
() => cur_dialog.set_value('account_type','Tax'),
|
|
||||||
() => cur_dialog.set_value('tax_rate',rate),
|
|
||||||
() => cur_dialog.set_value('account_currency','INR'),
|
|
||||||
() => frappe.click_button('Create New'),
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
};
|
|
@ -1,35 +0,0 @@
|
|||||||
QUnit.module('accounts');
|
|
||||||
|
|
||||||
QUnit.test("test: Accounts Settings doesn't allow negatives", function (assert) {
|
|
||||||
let done = assert.async();
|
|
||||||
|
|
||||||
assert.expect(2);
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
() => frappe.set_route('Form', 'Accounts Settings', 'Accounts Settings'),
|
|
||||||
() => frappe.timeout(2),
|
|
||||||
() => unchecked_if_checked(cur_frm, 'Allow Stale Exchange Rates', frappe.click_check),
|
|
||||||
() => cur_frm.set_value('stale_days', 0),
|
|
||||||
() => frappe.click_button('Save'),
|
|
||||||
() => frappe.timeout(2),
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_dialog);
|
|
||||||
},
|
|
||||||
() => frappe.click_button('Close'),
|
|
||||||
() => cur_frm.set_value('stale_days', -1),
|
|
||||||
() => frappe.click_button('Save'),
|
|
||||||
() => frappe.timeout(2),
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_dialog);
|
|
||||||
},
|
|
||||||
() => frappe.click_button('Close'),
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
const unchecked_if_checked = function(frm, field_name, fn){
|
|
||||||
if (frm.doc.allow_stale) {
|
|
||||||
return fn(field_name);
|
|
||||||
}
|
|
||||||
};
|
|
@ -218,6 +218,8 @@ def reconcile_vouchers(bank_transaction_name, vouchers):
|
|||||||
# updated clear date of all the vouchers based on the bank transaction
|
# updated clear date of all the vouchers based on the bank transaction
|
||||||
vouchers = json.loads(vouchers)
|
vouchers = json.loads(vouchers)
|
||||||
transaction = frappe.get_doc("Bank Transaction", bank_transaction_name)
|
transaction = frappe.get_doc("Bank Transaction", bank_transaction_name)
|
||||||
|
company_account = frappe.db.get_value('Bank Account', transaction.bank_account, 'account')
|
||||||
|
|
||||||
if transaction.unallocated_amount == 0:
|
if transaction.unallocated_amount == 0:
|
||||||
frappe.throw(_("This bank transaction is already fully reconciled"))
|
frappe.throw(_("This bank transaction is already fully reconciled"))
|
||||||
total_amount = 0
|
total_amount = 0
|
||||||
@ -226,7 +228,7 @@ def reconcile_vouchers(bank_transaction_name, vouchers):
|
|||||||
total_amount += get_paid_amount(frappe._dict({
|
total_amount += get_paid_amount(frappe._dict({
|
||||||
'payment_document': voucher['payment_doctype'],
|
'payment_document': voucher['payment_doctype'],
|
||||||
'payment_entry': voucher['payment_name'],
|
'payment_entry': voucher['payment_name'],
|
||||||
}), transaction.currency)
|
}), transaction.currency, company_account)
|
||||||
|
|
||||||
if total_amount > transaction.unallocated_amount:
|
if total_amount > transaction.unallocated_amount:
|
||||||
frappe.throw(_("The Sum Total of Amounts of All Selected Vouchers Should be Less than the Unallocated Amount of the Bank Transaction"))
|
frappe.throw(_("The Sum Total of Amounts of All Selected Vouchers Should be Less than the Unallocated Amount of the Bank Transaction"))
|
||||||
@ -261,7 +263,7 @@ def get_linked_payments(bank_transaction_name, document_types = None):
|
|||||||
return matching
|
return matching
|
||||||
|
|
||||||
def check_matching(bank_account, company, transaction, document_types):
|
def check_matching(bank_account, company, transaction, document_types):
|
||||||
# combine all types of vocuhers
|
# combine all types of vouchers
|
||||||
subquery = get_queries(bank_account, company, transaction, document_types)
|
subquery = get_queries(bank_account, company, transaction, document_types)
|
||||||
filters = {
|
filters = {
|
||||||
"amount": transaction.unallocated_amount,
|
"amount": transaction.unallocated_amount,
|
||||||
@ -343,13 +345,11 @@ def get_pe_matching_query(amount_condition, account_from_to, transaction):
|
|||||||
def get_je_matching_query(amount_condition, transaction):
|
def get_je_matching_query(amount_condition, transaction):
|
||||||
# get matching journal entry query
|
# get matching journal entry query
|
||||||
|
|
||||||
|
# We have mapping at the bank level
|
||||||
|
# So one bank could have both types of bank accounts like asset and liability
|
||||||
|
# So cr_or_dr should be judged only on basis of withdrawal and deposit and not account type
|
||||||
company_account = frappe.get_value("Bank Account", transaction.bank_account, "account")
|
company_account = frappe.get_value("Bank Account", transaction.bank_account, "account")
|
||||||
root_type = frappe.get_value("Account", company_account, "root_type")
|
cr_or_dr = "credit" if transaction.withdrawal > 0 else "debit"
|
||||||
|
|
||||||
if root_type == "Liability":
|
|
||||||
cr_or_dr = "debit" if transaction.withdrawal > 0 else "credit"
|
|
||||||
else:
|
|
||||||
cr_or_dr = "credit" if transaction.withdrawal > 0 else "debit"
|
|
||||||
|
|
||||||
return f"""
|
return f"""
|
||||||
|
|
||||||
|
@ -102,7 +102,7 @@ def get_total_allocated_amount(payment_entry):
|
|||||||
AND
|
AND
|
||||||
bt.docstatus = 1""", (payment_entry.payment_document, payment_entry.payment_entry), as_dict=True)
|
bt.docstatus = 1""", (payment_entry.payment_document, payment_entry.payment_entry), as_dict=True)
|
||||||
|
|
||||||
def get_paid_amount(payment_entry, currency):
|
def get_paid_amount(payment_entry, currency, bank_account):
|
||||||
if payment_entry.payment_document in ["Payment Entry", "Sales Invoice", "Purchase Invoice"]:
|
if payment_entry.payment_document in ["Payment Entry", "Sales Invoice", "Purchase Invoice"]:
|
||||||
|
|
||||||
paid_amount_field = "paid_amount"
|
paid_amount_field = "paid_amount"
|
||||||
@ -115,7 +115,7 @@ def get_paid_amount(payment_entry, currency):
|
|||||||
payment_entry.payment_entry, paid_amount_field)
|
payment_entry.payment_entry, paid_amount_field)
|
||||||
|
|
||||||
elif payment_entry.payment_document == "Journal Entry":
|
elif payment_entry.payment_document == "Journal Entry":
|
||||||
return frappe.db.get_value(payment_entry.payment_document, payment_entry.payment_entry, "total_credit")
|
return frappe.db.get_value('Journal Entry Account', {'parent': payment_entry.payment_entry, 'account': bank_account}, "sum(credit_in_account_currency)")
|
||||||
|
|
||||||
elif payment_entry.payment_document == "Expense Claim":
|
elif payment_entry.payment_document == "Expense Claim":
|
||||||
return frappe.db.get_value(payment_entry.payment_document, payment_entry.payment_entry, "total_amount_reimbursed")
|
return frappe.db.get_value(payment_entry.payment_document, payment_entry.payment_entry, "total_amount_reimbursed")
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
QUnit.module('Journal Entry');
|
|
||||||
|
|
||||||
QUnit.test("test journal entry", function(assert) {
|
|
||||||
assert.expect(2);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Journal Entry', [
|
|
||||||
{posting_date:frappe.datetime.add_days(frappe.datetime.nowdate(), 0)},
|
|
||||||
{accounts: [
|
|
||||||
[
|
|
||||||
{'account':'Debtors - '+frappe.get_abbr(frappe.defaults.get_default('Company'))},
|
|
||||||
{'party_type':'Customer'},
|
|
||||||
{'party':'Test Customer 1'},
|
|
||||||
{'credit_in_account_currency':1000},
|
|
||||||
{'is_advance':'Yes'},
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{'account':'HDFC - '+frappe.get_abbr(frappe.defaults.get_default('Company'))},
|
|
||||||
{'debit_in_account_currency':1000},
|
|
||||||
]
|
|
||||||
]},
|
|
||||||
{cheque_no:1234},
|
|
||||||
{cheque_date: frappe.datetime.add_days(frappe.datetime.nowdate(), -1)},
|
|
||||||
{user_remark: 'Test'},
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => {
|
|
||||||
// get_item_details
|
|
||||||
assert.ok(cur_frm.doc.total_debit==1000, "total debit correct");
|
|
||||||
assert.ok(cur_frm.doc.total_credit==1000, "total credit correct");
|
|
||||||
},
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -148,7 +148,7 @@ def make_company():
|
|||||||
company.company_name = "_Test Opening Invoice Company"
|
company.company_name = "_Test Opening Invoice Company"
|
||||||
company.abbr = "_TOIC"
|
company.abbr = "_TOIC"
|
||||||
company.default_currency = "INR"
|
company.default_currency = "INR"
|
||||||
company.country = "India"
|
company.country = "Pakistan"
|
||||||
company.insert()
|
company.insert()
|
||||||
return company
|
return company
|
||||||
|
|
||||||
|
@ -110,12 +110,13 @@
|
|||||||
"description": "Reference number of the invoice from the previous system",
|
"description": "Reference number of the invoice from the previous system",
|
||||||
"fieldname": "invoice_number",
|
"fieldname": "invoice_number",
|
||||||
"fieldtype": "Data",
|
"fieldtype": "Data",
|
||||||
|
"in_list_view": 1,
|
||||||
"label": "Invoice Number"
|
"label": "Invoice Number"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2021-12-13 18:15:41.295007",
|
"modified": "2021-12-17 19:25:06.053187",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Opening Invoice Creation Tool Item",
|
"name": "Opening Invoice Creation Tool Item",
|
||||||
|
@ -1,55 +0,0 @@
|
|||||||
QUnit.module('Payment Entry');
|
|
||||||
|
|
||||||
QUnit.test("test payment entry", function(assert) {
|
|
||||||
assert.expect(6);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Sales Invoice', [
|
|
||||||
{customer: 'Test Customer 1'},
|
|
||||||
{items: [
|
|
||||||
[
|
|
||||||
{'item_code': 'Test Product 1'},
|
|
||||||
{'qty': 1},
|
|
||||||
{'rate': 101},
|
|
||||||
]
|
|
||||||
]}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.tests.click_button('Close'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.click_button('Make'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.click_link('Payment'),
|
|
||||||
() => frappe.timeout(2),
|
|
||||||
() => {
|
|
||||||
assert.equal(frappe.get_route()[1], 'Payment Entry',
|
|
||||||
'made payment entry');
|
|
||||||
assert.equal(cur_frm.doc.party, 'Test Customer 1',
|
|
||||||
'customer set in payment entry');
|
|
||||||
assert.equal(cur_frm.doc.paid_amount, 101,
|
|
||||||
'paid amount set in payment entry');
|
|
||||||
assert.equal(cur_frm.doc.references[0].allocated_amount, 101,
|
|
||||||
'amount allocated against sales invoice');
|
|
||||||
},
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => cur_frm.set_value('paid_amount', 100),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
frappe.model.set_value("Payment Entry Reference", cur_frm.doc.references[0].name,
|
|
||||||
"allocated_amount", 101);
|
|
||||||
},
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.click_button('Write Off Difference Amount'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
assert.equal(cur_frm.doc.difference_amount, 0, 'difference amount is zero');
|
|
||||||
assert.equal(cur_frm.doc.deductions[0].amount, 1, 'Write off amount = 1');
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,60 +0,0 @@
|
|||||||
QUnit.module('Payment Entry');
|
|
||||||
|
|
||||||
QUnit.test("test payment entry", function(assert) {
|
|
||||||
assert.expect(7 );
|
|
||||||
let done = assert.async();
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Purchase Invoice', [
|
|
||||||
{supplier: 'Test Supplier'},
|
|
||||||
{bill_no: 'in1234'},
|
|
||||||
{items: [
|
|
||||||
[
|
|
||||||
{'qty': 2},
|
|
||||||
{'item_code': 'Test Product 1'},
|
|
||||||
{'rate':1000},
|
|
||||||
]
|
|
||||||
]},
|
|
||||||
{update_stock:1},
|
|
||||||
{supplier_address: 'Test1-Billing'},
|
|
||||||
{contact_person: 'Contact 3-Test Supplier'},
|
|
||||||
{tc_name: 'Test Term 1'},
|
|
||||||
{terms: 'This is just a Test'}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.click_button('Make'),
|
|
||||||
() => frappe.timeout(2),
|
|
||||||
() => frappe.click_link('Payment'),
|
|
||||||
() => frappe.timeout(3),
|
|
||||||
() => cur_frm.set_value('mode_of_payment','Cash'),
|
|
||||||
() => frappe.timeout(3),
|
|
||||||
() => {
|
|
||||||
assert.equal(frappe.get_route()[1], 'Payment Entry',
|
|
||||||
'made payment entry');
|
|
||||||
assert.equal(cur_frm.doc.party, 'Test Supplier',
|
|
||||||
'supplier set in payment entry');
|
|
||||||
assert.equal(cur_frm.doc.paid_amount, 2000,
|
|
||||||
'paid amount set in payment entry');
|
|
||||||
assert.equal(cur_frm.doc.references[0].allocated_amount, 2000,
|
|
||||||
'amount allocated against purchase invoice');
|
|
||||||
assert.equal(cur_frm.doc.references[0].bill_no, 'in1234',
|
|
||||||
'invoice number allocated against purchase invoice');
|
|
||||||
assert.equal(cur_frm.get_field('total_allocated_amount').value, 2000,
|
|
||||||
'correct amount allocated in Write Off');
|
|
||||||
assert.equal(cur_frm.get_field('unallocated_amount').value, 0,
|
|
||||||
'correct amount unallocated in Write Off');
|
|
||||||
},
|
|
||||||
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(3),
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,28 +0,0 @@
|
|||||||
QUnit.module('Accounts');
|
|
||||||
|
|
||||||
QUnit.test("test payment entry", function(assert) {
|
|
||||||
assert.expect(1);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Payment Entry', [
|
|
||||||
{payment_type:'Receive'},
|
|
||||||
{mode_of_payment:'Cash'},
|
|
||||||
{party_type:'Customer'},
|
|
||||||
{party:'Test Customer 3'},
|
|
||||||
{paid_amount:675},
|
|
||||||
{reference_no:123},
|
|
||||||
{reference_date: frappe.datetime.add_days(frappe.datetime.nowdate(), 0)},
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => {
|
|
||||||
// get_item_details
|
|
||||||
assert.ok(cur_frm.doc.total_allocated_amount==675, "Allocated AmountCorrect");
|
|
||||||
},
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,67 +0,0 @@
|
|||||||
QUnit.module('Payment Entry');
|
|
||||||
|
|
||||||
QUnit.test("test payment entry", function(assert) {
|
|
||||||
assert.expect(8);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Sales Invoice', [
|
|
||||||
{customer: 'Test Customer 1'},
|
|
||||||
{company: 'For Testing'},
|
|
||||||
{currency: 'INR'},
|
|
||||||
{selling_price_list: '_Test Price List'},
|
|
||||||
{items: [
|
|
||||||
[
|
|
||||||
{'qty': 1},
|
|
||||||
{'item_code': 'Test Product 1'},
|
|
||||||
]
|
|
||||||
]}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(1.5),
|
|
||||||
() => frappe.click_button('Close'),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => frappe.click_button('Make'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.click_link('Payment'),
|
|
||||||
() => frappe.timeout(2),
|
|
||||||
() => cur_frm.set_value("paid_to", "_Test Cash - FT"),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => {
|
|
||||||
assert.equal(frappe.get_route()[1], 'Payment Entry', 'made payment entry');
|
|
||||||
assert.equal(cur_frm.doc.party, 'Test Customer 1', 'customer set in payment entry');
|
|
||||||
assert.equal(cur_frm.doc.paid_from, 'Debtors - FT', 'customer account set in payment entry');
|
|
||||||
assert.equal(cur_frm.doc.paid_amount, 100, 'paid amount set in payment entry');
|
|
||||||
assert.equal(cur_frm.doc.references[0].allocated_amount, 100,
|
|
||||||
'amount allocated against sales invoice');
|
|
||||||
},
|
|
||||||
() => cur_frm.set_value('paid_amount', 95),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
frappe.model.set_value("Payment Entry Reference",
|
|
||||||
cur_frm.doc.references[0].name, "allocated_amount", 100);
|
|
||||||
},
|
|
||||||
() => frappe.timeout(.5),
|
|
||||||
() => {
|
|
||||||
assert.equal(cur_frm.doc.difference_amount, 5, 'difference amount is 5');
|
|
||||||
},
|
|
||||||
() => {
|
|
||||||
frappe.db.set_value("Company", "For Testing", "write_off_account", "_Test Write Off - FT");
|
|
||||||
frappe.timeout(1);
|
|
||||||
frappe.db.set_value("Company", "For Testing",
|
|
||||||
"exchange_gain_loss_account", "_Test Exchange Gain/Loss - FT");
|
|
||||||
},
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.click_button('Write Off Difference Amount'),
|
|
||||||
() => frappe.timeout(2),
|
|
||||||
() => {
|
|
||||||
assert.equal(cur_frm.doc.difference_amount, 0, 'difference amount is zero');
|
|
||||||
assert.equal(cur_frm.doc.deductions[0].amount, 5, 'Write off amount = 5');
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,28 +0,0 @@
|
|||||||
QUnit.module('Pricing Rule');
|
|
||||||
|
|
||||||
QUnit.test("test pricing rule", function(assert) {
|
|
||||||
assert.expect(2);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make("Pricing Rule", [
|
|
||||||
{title: 'Test Pricing Rule'},
|
|
||||||
{item_code:'Test Product 2'},
|
|
||||||
{selling:1},
|
|
||||||
{applicable_for:'Customer'},
|
|
||||||
{customer:'Test Customer 3'},
|
|
||||||
{currency: frappe.defaults.get_default("currency")}
|
|
||||||
{min_qty:1},
|
|
||||||
{max_qty:20},
|
|
||||||
{valid_upto: frappe.datetime.add_days(frappe.defaults.get_default("year_end_date"), 1)},
|
|
||||||
{discount_percentage:10},
|
|
||||||
{for_price_list:'Standard Selling'}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.item_code=='Test Product 2');
|
|
||||||
assert.ok(cur_frm.doc.customer=='Test Customer 3');
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,58 +0,0 @@
|
|||||||
QUnit.module('Pricing Rule');
|
|
||||||
|
|
||||||
QUnit.test("test pricing rule with different currency", function(assert) {
|
|
||||||
assert.expect(3);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make("Pricing Rule", [
|
|
||||||
{title: 'Test Pricing Rule 2'},
|
|
||||||
{apply_on: 'Item Code'},
|
|
||||||
{item_code:'Test Product 4'},
|
|
||||||
{selling:1},
|
|
||||||
{priority: 1},
|
|
||||||
{min_qty:1},
|
|
||||||
{max_qty:20},
|
|
||||||
{valid_upto: frappe.datetime.add_days(frappe.defaults.get_default("year_end_date"), 1)},
|
|
||||||
{margin_type: 'Amount'},
|
|
||||||
{margin_rate_or_amount: 20},
|
|
||||||
{rate_or_discount: 'Rate'},
|
|
||||||
{rate:200},
|
|
||||||
{currency:'USD'}
|
|
||||||
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.item_code=='Test Product 4');
|
|
||||||
},
|
|
||||||
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Sales Order', [
|
|
||||||
{customer: 'Test Customer 1'},
|
|
||||||
{currency: 'INR'},
|
|
||||||
{items: [
|
|
||||||
[
|
|
||||||
{'delivery_date': frappe.datetime.add_days(frappe.defaults.get_default("year_end_date"), 1)},
|
|
||||||
{'qty': 5},
|
|
||||||
{'item_code': "Test Product 4"}
|
|
||||||
]
|
|
||||||
]}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
() => {
|
|
||||||
// get_item_details
|
|
||||||
assert.ok(cur_frm.doc.items[0].pricing_rule=='Test Pricing Rule 2', "Pricing rule correct");
|
|
||||||
// margin not applied because different currency in pricing rule
|
|
||||||
assert.ok(cur_frm.doc.items[0].margin_type==null, "Margin correct");
|
|
||||||
},
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,56 +0,0 @@
|
|||||||
QUnit.module('Pricing Rule');
|
|
||||||
|
|
||||||
QUnit.test("test pricing rule with same currency", function(assert) {
|
|
||||||
assert.expect(4);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make("Pricing Rule", [
|
|
||||||
{title: 'Test Pricing Rule 1'},
|
|
||||||
{apply_on: 'Item Code'},
|
|
||||||
{item_code:'Test Product 4'},
|
|
||||||
{selling:1},
|
|
||||||
{min_qty:1},
|
|
||||||
{max_qty:20},
|
|
||||||
{valid_upto: frappe.datetime.add_days(frappe.defaults.get_default("year_end_date"), 1)},
|
|
||||||
{rate_or_discount: 'Rate'},
|
|
||||||
{rate:200},
|
|
||||||
{currency:'USD'}
|
|
||||||
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.item_code=='Test Product 4');
|
|
||||||
},
|
|
||||||
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Sales Order', [
|
|
||||||
{customer: 'Test Customer 1'},
|
|
||||||
{currency: 'USD'},
|
|
||||||
{items: [
|
|
||||||
[
|
|
||||||
{'delivery_date': frappe.datetime.add_days(frappe.defaults.get_default("year_end_date"), 1)},
|
|
||||||
{'qty': 5},
|
|
||||||
{'item_code': "Test Product 4"}
|
|
||||||
]
|
|
||||||
]}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
() => {
|
|
||||||
// get_item_details
|
|
||||||
assert.ok(cur_frm.doc.items[0].pricing_rule=='Test Pricing Rule 1', "Pricing rule correct");
|
|
||||||
assert.ok(cur_frm.doc.items[0].price_list_rate==200, "Item rate correct");
|
|
||||||
// get_total
|
|
||||||
assert.ok(cur_frm.doc.total== 1000, "Total correct");
|
|
||||||
},
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,74 +0,0 @@
|
|||||||
QUnit.module('Purchase Invoice');
|
|
||||||
|
|
||||||
QUnit.test("test purchase invoice", function(assert) {
|
|
||||||
assert.expect(9);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Purchase Invoice', [
|
|
||||||
{supplier: 'Test Supplier'},
|
|
||||||
{bill_no: 'in123'},
|
|
||||||
{items: [
|
|
||||||
[
|
|
||||||
{'qty': 5},
|
|
||||||
{'item_code': 'Test Product 1'},
|
|
||||||
{'rate':100},
|
|
||||||
]
|
|
||||||
]},
|
|
||||||
{update_stock:1},
|
|
||||||
{supplier_address: 'Test1-Billing'},
|
|
||||||
{contact_person: 'Contact 3-Test Supplier'},
|
|
||||||
{taxes_and_charges: 'TEST In State GST - FT'},
|
|
||||||
{tc_name: 'Test Term 1'},
|
|
||||||
{terms: 'This is Test'},
|
|
||||||
{payment_terms_template: '_Test Payment Term Template UI'}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => {
|
|
||||||
// get_item_details
|
|
||||||
assert.ok(cur_frm.doc.items[0].item_name=='Test Product 1', "Item name correct");
|
|
||||||
// get tax details
|
|
||||||
assert.ok(cur_frm.doc.taxes_and_charges=='TEST In State GST - FT', "Tax details correct");
|
|
||||||
// get tax account head details
|
|
||||||
assert.ok(cur_frm.doc.taxes[0].account_head=='CGST - '+frappe.get_abbr(frappe.defaults.get_default('Company')), " Account Head abbr correct");
|
|
||||||
// grand_total Calculated
|
|
||||||
assert.ok(cur_frm.doc.grand_total==590, "Grad Total correct");
|
|
||||||
|
|
||||||
assert.ok(cur_frm.doc.payment_terms_template, "Payment Terms Template is correct");
|
|
||||||
assert.ok(cur_frm.doc.payment_schedule.length > 0, "Payment Term Schedule is not empty");
|
|
||||||
|
|
||||||
},
|
|
||||||
() => {
|
|
||||||
let date = cur_frm.doc.due_date;
|
|
||||||
frappe.tests.set_control('due_date', frappe.datetime.add_days(date, 1));
|
|
||||||
frappe.timeout(0.5);
|
|
||||||
assert.ok(cur_dialog && cur_dialog.is_visible, 'Message is displayed to user');
|
|
||||||
},
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.tests.click_button('Close'),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => frappe.tests.set_form_values(cur_frm, [{'payment_terms_schedule': ''}]),
|
|
||||||
() => {
|
|
||||||
let date = cur_frm.doc.due_date;
|
|
||||||
frappe.tests.set_control('due_date', frappe.datetime.add_days(date, 1));
|
|
||||||
frappe.timeout(0.5);
|
|
||||||
assert.ok(cur_dialog && cur_dialog.is_visible, 'Message is displayed to user');
|
|
||||||
},
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.tests.click_button('Close'),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => frappe.tests.set_form_values(cur_frm, [{'payment_schedule': []}]),
|
|
||||||
() => {
|
|
||||||
let date = cur_frm.doc.due_date;
|
|
||||||
frappe.tests.set_control('due_date', frappe.datetime.add_days(date, 1));
|
|
||||||
frappe.timeout(0.5);
|
|
||||||
assert.ok(!cur_dialog, 'Message is not shown');
|
|
||||||
},
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -986,7 +986,7 @@ class TestPurchaseInvoice(unittest.TestCase):
|
|||||||
|
|
||||||
pi = make_purchase_invoice(item=item.name, qty=1, rate=100, do_not_save=True)
|
pi = make_purchase_invoice(item=item.name, qty=1, rate=100, do_not_save=True)
|
||||||
pi.set_posting_time = 1
|
pi.set_posting_time = 1
|
||||||
pi.posting_date = '2019-03-15'
|
pi.posting_date = '2019-01-10'
|
||||||
pi.items[0].enable_deferred_expense = 1
|
pi.items[0].enable_deferred_expense = 1
|
||||||
pi.items[0].service_start_date = "2019-01-10"
|
pi.items[0].service_start_date = "2019-01-10"
|
||||||
pi.items[0].service_end_date = "2019-03-15"
|
pi.items[0].service_end_date = "2019-03-15"
|
||||||
|
@ -1,28 +0,0 @@
|
|||||||
QUnit.module('Sales Taxes and Charges Template');
|
|
||||||
|
|
||||||
QUnit.test("test sales taxes and charges template", function(assert) {
|
|
||||||
assert.expect(2);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Purchase Taxes and Charges Template', [
|
|
||||||
{title: "TEST In State GST"},
|
|
||||||
{taxes:[
|
|
||||||
[
|
|
||||||
{charge_type:"On Net Total"},
|
|
||||||
{account_head:"CGST - "+frappe.get_abbr(frappe.defaults.get_default("Company")) }
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{charge_type:"On Net Total"},
|
|
||||||
{account_head:"SGST - "+frappe.get_abbr(frappe.defaults.get_default("Company")) }
|
|
||||||
]
|
|
||||||
]}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.title=='TEST In State GST');
|
|
||||||
assert.ok(cur_frm.doc.name=='TEST In State GST - FT');
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1049,6 +1049,8 @@ class SalesInvoice(SellingController):
|
|||||||
frappe.flags.is_reverse_depr_entry = False
|
frappe.flags.is_reverse_depr_entry = False
|
||||||
asset.flags.ignore_validate_update_after_submit = True
|
asset.flags.ignore_validate_update_after_submit = True
|
||||||
schedule.journal_entry = None
|
schedule.journal_entry = None
|
||||||
|
depreciation_amount = self.get_depreciation_amount_in_je(reverse_journal_entry)
|
||||||
|
asset.finance_books[0].value_after_depreciation += depreciation_amount
|
||||||
asset.save()
|
asset.save()
|
||||||
|
|
||||||
def get_posting_date_of_sales_invoice(self):
|
def get_posting_date_of_sales_invoice(self):
|
||||||
@ -1071,6 +1073,12 @@ class SalesInvoice(SellingController):
|
|||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def get_depreciation_amount_in_je(self, journal_entry):
|
||||||
|
if journal_entry.accounts[0].debit_in_account_currency:
|
||||||
|
return journal_entry.accounts[0].debit_in_account_currency
|
||||||
|
else:
|
||||||
|
return journal_entry.accounts[0].credit_in_account_currency
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def enable_discount_accounting(self):
|
def enable_discount_accounting(self):
|
||||||
if not hasattr(self, "_enable_discount_accounting"):
|
if not hasattr(self, "_enable_discount_accounting"):
|
||||||
|
@ -1,73 +0,0 @@
|
|||||||
QUnit.module('Sales Invoice');
|
|
||||||
|
|
||||||
QUnit.test("test sales Invoice", function(assert) {
|
|
||||||
assert.expect(9);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Sales Invoice', [
|
|
||||||
{customer: 'Test Customer 1'},
|
|
||||||
{items: [
|
|
||||||
[
|
|
||||||
{'qty': 5},
|
|
||||||
{'item_code': 'Test Product 1'},
|
|
||||||
]
|
|
||||||
]},
|
|
||||||
{update_stock:1},
|
|
||||||
{customer_address: 'Test1-Billing'},
|
|
||||||
{shipping_address_name: 'Test1-Shipping'},
|
|
||||||
{contact_person: 'Contact 1-Test Customer 1'},
|
|
||||||
{taxes_and_charges: 'TEST In State GST - FT'},
|
|
||||||
{tc_name: 'Test Term 1'},
|
|
||||||
{terms: 'This is Test'},
|
|
||||||
{payment_terms_template: '_Test Payment Term Template UI'}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => {
|
|
||||||
// get_item_details
|
|
||||||
assert.ok(cur_frm.doc.items[0].item_name=='Test Product 1', "Item name correct");
|
|
||||||
// get tax details
|
|
||||||
assert.ok(cur_frm.doc.taxes_and_charges=='TEST In State GST - FT', "Tax details correct");
|
|
||||||
// get tax account head details
|
|
||||||
assert.ok(cur_frm.doc.taxes[0].account_head=='CGST - '+frappe.get_abbr(frappe.defaults.get_default('Company')), " Account Head abbr correct");
|
|
||||||
// grand_total Calculated
|
|
||||||
assert.ok(cur_frm.doc.grand_total==590, "Grand Total correct");
|
|
||||||
|
|
||||||
assert.ok(cur_frm.doc.payment_terms_template, "Payment Terms Template is correct");
|
|
||||||
assert.ok(cur_frm.doc.payment_schedule.length > 0, "Payment Term Schedule is not empty");
|
|
||||||
|
|
||||||
},
|
|
||||||
() => {
|
|
||||||
let date = cur_frm.doc.due_date;
|
|
||||||
frappe.tests.set_control('due_date', frappe.datetime.add_days(date, 1));
|
|
||||||
frappe.timeout(0.5);
|
|
||||||
assert.ok(cur_dialog && cur_dialog.is_visible, 'Message is displayed to user');
|
|
||||||
},
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.tests.click_button('Close'),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => frappe.tests.set_form_values(cur_frm, [{'payment_terms_schedule': ''}]),
|
|
||||||
() => {
|
|
||||||
let date = cur_frm.doc.due_date;
|
|
||||||
frappe.tests.set_control('due_date', frappe.datetime.add_days(date, 1));
|
|
||||||
frappe.timeout(0.5);
|
|
||||||
assert.ok(cur_dialog && cur_dialog.is_visible, 'Message is displayed to user');
|
|
||||||
},
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.tests.click_button('Close'),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => frappe.tests.set_form_values(cur_frm, [{'payment_schedule': []}]),
|
|
||||||
() => {
|
|
||||||
let date = cur_frm.doc.due_date;
|
|
||||||
frappe.tests.set_control('due_date', frappe.datetime.add_days(date, 1));
|
|
||||||
frappe.timeout(0.5);
|
|
||||||
assert.ok(!cur_dialog, 'Message is not shown');
|
|
||||||
},
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,42 +0,0 @@
|
|||||||
QUnit.module('Sales Invoice');
|
|
||||||
|
|
||||||
QUnit.test("test sales Invoice", function(assert) {
|
|
||||||
assert.expect(4);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Sales Invoice', [
|
|
||||||
{customer: 'Test Customer 1'},
|
|
||||||
{items: [
|
|
||||||
[
|
|
||||||
{'qty': 5},
|
|
||||||
{'item_code': 'Test Product 1'},
|
|
||||||
]
|
|
||||||
]},
|
|
||||||
{update_stock:1},
|
|
||||||
{customer_address: 'Test1-Billing'},
|
|
||||||
{shipping_address_name: 'Test1-Shipping'},
|
|
||||||
{contact_person: 'Contact 1-Test Customer 1'},
|
|
||||||
{taxes_and_charges: 'TEST In State GST - FT'},
|
|
||||||
{tc_name: 'Test Term 1'},
|
|
||||||
{terms: 'This is Test'}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => {
|
|
||||||
// get_item_details
|
|
||||||
assert.ok(cur_frm.doc.items[0].item_name=='Test Product 1', "Item name correct");
|
|
||||||
// get tax details
|
|
||||||
assert.ok(cur_frm.doc.taxes_and_charges=='TEST In State GST - FT', "Tax details correct");
|
|
||||||
// get tax account head details
|
|
||||||
assert.ok(cur_frm.doc.taxes[0].account_head=='CGST - '+frappe.get_abbr(frappe.defaults.get_default('Company')), " Account Head abbr correct");
|
|
||||||
// grand_total Calculated
|
|
||||||
assert.ok(cur_frm.doc.grand_total==590, "Grad Total correct");
|
|
||||||
|
|
||||||
},
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,35 +0,0 @@
|
|||||||
QUnit.module('Accounts');
|
|
||||||
|
|
||||||
QUnit.test("test sales invoice with margin", function(assert) {
|
|
||||||
assert.expect(3);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Sales Invoice', [
|
|
||||||
{customer: 'Test Customer 1'},
|
|
||||||
{selling_price_list: 'Test-Selling-USD'},
|
|
||||||
{currency: 'USD'},
|
|
||||||
{items: [
|
|
||||||
[
|
|
||||||
{'item_code': 'Test Product 4'},
|
|
||||||
{'delivery_date': frappe.datetime.add_days(frappe.defaults.get_default("year_end_date"), 1)},
|
|
||||||
{'qty': 1},
|
|
||||||
{'margin_type': 'Percentage'},
|
|
||||||
{'margin_rate_or_amount': 20}
|
|
||||||
]
|
|
||||||
]}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.items[0].rate_with_margin == 240, "Margin rate correct");
|
|
||||||
assert.ok(cur_frm.doc.items[0].base_rate_with_margin == cur_frm.doc.conversion_rate * 240, "Base margin rate correct");
|
|
||||||
assert.ok(cur_frm.doc.total == 240, "Amount correct");
|
|
||||||
|
|
||||||
},
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,56 +0,0 @@
|
|||||||
QUnit.module('Sales Invoice');
|
|
||||||
|
|
||||||
QUnit.test("test sales Invoice with payment", function(assert) {
|
|
||||||
assert.expect(4);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Sales Invoice', [
|
|
||||||
{customer: 'Test Customer 1'},
|
|
||||||
{items: [
|
|
||||||
[
|
|
||||||
{'qty': 5},
|
|
||||||
{'item_code': 'Test Product 1'},
|
|
||||||
]
|
|
||||||
]},
|
|
||||||
{update_stock:1},
|
|
||||||
{customer_address: 'Test1-Billing'},
|
|
||||||
{shipping_address_name: 'Test1-Shipping'},
|
|
||||||
{contact_person: 'Contact 1-Test Customer 1'},
|
|
||||||
{taxes_and_charges: 'TEST In State GST - FT'},
|
|
||||||
{tc_name: 'Test Term 1'},
|
|
||||||
{terms: 'This is Test'},
|
|
||||||
{payment_terms_template: '_Test Payment Term Template UI'}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => {
|
|
||||||
// get_item_details
|
|
||||||
assert.ok(cur_frm.doc.items[0].item_name=='Test Product 1', "Item name correct");
|
|
||||||
// get tax details
|
|
||||||
assert.ok(cur_frm.doc.taxes_and_charges=='TEST In State GST - FT', "Tax details correct");
|
|
||||||
// grand_total Calculated
|
|
||||||
assert.ok(cur_frm.doc.grand_total==590, "Grad Total correct");
|
|
||||||
|
|
||||||
},
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(2),
|
|
||||||
() => frappe.tests.click_button('Close'),
|
|
||||||
() => frappe.tests.click_button('Make'),
|
|
||||||
() => frappe.tests.click_link('Payment'),
|
|
||||||
() => frappe.timeout(0.2),
|
|
||||||
() => { cur_frm.set_value('mode_of_payment','Cash');},
|
|
||||||
() => { cur_frm.set_value('paid_to','Cash - '+frappe.get_abbr(frappe.defaults.get_default('Company')));},
|
|
||||||
() => {cur_frm.set_value('reference_no','TEST1234');},
|
|
||||||
() => {cur_frm.set_value('reference_date',frappe.datetime.add_days(frappe.datetime.nowdate(), 0));},
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => {
|
|
||||||
// get payment details
|
|
||||||
assert.ok(cur_frm.doc.paid_amount==590, "Paid Amount Correct");
|
|
||||||
},
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,51 +0,0 @@
|
|||||||
QUnit.module('Sales Invoice');
|
|
||||||
|
|
||||||
QUnit.test("test sales Invoice with payment request", function(assert) {
|
|
||||||
assert.expect(4);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Sales Invoice', [
|
|
||||||
{customer: 'Test Customer 1'},
|
|
||||||
{items: [
|
|
||||||
[
|
|
||||||
{'qty': 5},
|
|
||||||
{'item_code': 'Test Product 1'},
|
|
||||||
]
|
|
||||||
]},
|
|
||||||
{update_stock:1},
|
|
||||||
{customer_address: 'Test1-Billing'},
|
|
||||||
{shipping_address_name: 'Test1-Shipping'},
|
|
||||||
{contact_person: 'Contact 1-Test Customer 1'},
|
|
||||||
{taxes_and_charges: 'TEST In State GST - FT'},
|
|
||||||
{tc_name: 'Test Term 1'},
|
|
||||||
{terms: 'This is Test'}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => {
|
|
||||||
// get_item_details
|
|
||||||
assert.ok(cur_frm.doc.items[0].item_name=='Test Product 1', "Item name correct");
|
|
||||||
// get tax details
|
|
||||||
assert.ok(cur_frm.doc.taxes_and_charges=='TEST In State GST - FT', "Tax details correct");
|
|
||||||
// grand_total Calculated
|
|
||||||
assert.ok(cur_frm.doc.grand_total==590, "Grad Total correct");
|
|
||||||
|
|
||||||
},
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(2),
|
|
||||||
() => frappe.tests.click_button('Close'),
|
|
||||||
() => frappe.tests.click_button('Make'),
|
|
||||||
() => frappe.tests.click_link('Payment Request'),
|
|
||||||
() => frappe.timeout(0.2),
|
|
||||||
() => { cur_frm.set_value('print_format','GST Tax Invoice');},
|
|
||||||
() => { cur_frm.set_value('email_to','test@gmail.com');},
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => {
|
|
||||||
// get payment details
|
|
||||||
assert.ok(cur_frm.doc.grand_total==590, "grand total Correct");
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,44 +0,0 @@
|
|||||||
QUnit.module('Sales Invoice');
|
|
||||||
|
|
||||||
QUnit.test("test sales Invoice with serialize item", function(assert) {
|
|
||||||
assert.expect(5);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Sales Invoice', [
|
|
||||||
{customer: 'Test Customer 1'},
|
|
||||||
{items: [
|
|
||||||
[
|
|
||||||
{'qty': 2},
|
|
||||||
{'item_code': 'Test Product 4'},
|
|
||||||
]
|
|
||||||
]},
|
|
||||||
{update_stock:1},
|
|
||||||
{customer_address: 'Test1-Billing'},
|
|
||||||
{shipping_address_name: 'Test1-Shipping'},
|
|
||||||
{contact_person: 'Contact 1-Test Customer 1'},
|
|
||||||
{taxes_and_charges: 'TEST In State GST - FT'},
|
|
||||||
{tc_name: 'Test Term 1'},
|
|
||||||
{terms: 'This is Test'}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => {
|
|
||||||
// get_item_details
|
|
||||||
assert.ok(cur_frm.doc.items[0].item_name=='Test Product 4', "Item name correct");
|
|
||||||
// get tax details
|
|
||||||
assert.ok(cur_frm.doc.taxes_and_charges=='TEST In State GST - FT', "Tax details correct");
|
|
||||||
// get tax account head details
|
|
||||||
assert.ok(cur_frm.doc.taxes[0].account_head=='CGST - '+frappe.get_abbr(frappe.defaults.get_default('Company')), " Account Head abbr correct");
|
|
||||||
// get batch number
|
|
||||||
assert.ok(cur_frm.doc.items[0].batch_no=='TEST-BATCH-001', " Batch Details correct");
|
|
||||||
// grand_total Calculated
|
|
||||||
assert.ok(cur_frm.doc.grand_total==218, "Grad Total correct");
|
|
||||||
|
|
||||||
},
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,28 +0,0 @@
|
|||||||
QUnit.module('Sales Taxes and Charges Template');
|
|
||||||
|
|
||||||
QUnit.test("test sales taxes and charges template", function(assert) {
|
|
||||||
assert.expect(2);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Sales Taxes and Charges Template', [
|
|
||||||
{title: "TEST In State GST"},
|
|
||||||
{taxes:[
|
|
||||||
[
|
|
||||||
{charge_type:"On Net Total"},
|
|
||||||
{account_head:"CGST - "+frappe.get_abbr(frappe.defaults.get_default("Company")) }
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{charge_type:"On Net Total"},
|
|
||||||
{account_head:"SGST - "+frappe.get_abbr(frappe.defaults.get_default("Company")) }
|
|
||||||
]
|
|
||||||
]}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.title=='TEST In State GST');
|
|
||||||
assert.ok(cur_frm.doc.name=='TEST In State GST - FT');
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,36 +0,0 @@
|
|||||||
QUnit.module('Shipping Rule');
|
|
||||||
|
|
||||||
QUnit.test("test Shipping Rule", function(assert) {
|
|
||||||
assert.expect(1);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make("Shipping Rule", [
|
|
||||||
{label: "Next Day Shipping"},
|
|
||||||
{shipping_rule_type: "Selling"},
|
|
||||||
{calculate_based_on: 'Net Total'},
|
|
||||||
{conditions:[
|
|
||||||
[
|
|
||||||
{from_value:1},
|
|
||||||
{to_value:200},
|
|
||||||
{shipping_amount:100}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{from_value:201},
|
|
||||||
{to_value:2000},
|
|
||||||
{shipping_amount:50}
|
|
||||||
],
|
|
||||||
]},
|
|
||||||
{countries:[
|
|
||||||
[
|
|
||||||
{country:'India'}
|
|
||||||
]
|
|
||||||
]},
|
|
||||||
{account:'Accounts Payable - '+frappe.get_abbr(frappe.defaults.get_default("Company"))},
|
|
||||||
{cost_center:'Main - '+frappe.get_abbr(frappe.defaults.get_default("Company"))}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => {assert.ok(cur_frm.doc.name=='Next Day Shipping');},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,36 +0,0 @@
|
|||||||
QUnit.module('Shipping Rule');
|
|
||||||
|
|
||||||
QUnit.test("test Shipping Rule", function(assert) {
|
|
||||||
assert.expect(1);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make("Shipping Rule", [
|
|
||||||
{label: "Two Day Shipping"},
|
|
||||||
{shipping_rule_type: "Buying"},
|
|
||||||
{fixed_shipping_amount: 0},
|
|
||||||
{conditions:[
|
|
||||||
[
|
|
||||||
{from_value:1},
|
|
||||||
{to_value:200},
|
|
||||||
{shipping_amount:100}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{from_value:201},
|
|
||||||
{to_value:3000},
|
|
||||||
{shipping_amount:200}
|
|
||||||
],
|
|
||||||
]},
|
|
||||||
{countries:[
|
|
||||||
[
|
|
||||||
{country:'India'}
|
|
||||||
]
|
|
||||||
]},
|
|
||||||
{account:'Accounts Payable - '+frappe.get_abbr(frappe.defaults.get_default("Company"))},
|
|
||||||
{cost_center:'Main - '+frappe.get_abbr(frappe.defaults.get_default("Company"))}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => {assert.ok(cur_frm.doc.name=='Two Day Shipping');},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,32 +0,0 @@
|
|||||||
/* eslint-disable */
|
|
||||||
// rename this file from _test_[name] to test_[name] to activate
|
|
||||||
// and remove above this line
|
|
||||||
|
|
||||||
QUnit.test("test: Subscription", function (assert) {
|
|
||||||
assert.expect(4);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
// insert a new Subscription
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make("Subscription", [
|
|
||||||
{reference_doctype: 'Sales Invoice'},
|
|
||||||
{reference_document: 'SINV-00004'},
|
|
||||||
{start_date: frappe.datetime.month_start()},
|
|
||||||
{end_date: frappe.datetime.month_end()},
|
|
||||||
{frequency: 'Weekly'}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => cur_frm.savesubmit(),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.click_button('Yes'),
|
|
||||||
() => frappe.timeout(2),
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.frequency.includes("Weekly"), "Set frequency Weekly");
|
|
||||||
assert.ok(cur_frm.doc.reference_doctype.includes("Sales Invoice"), "Set base doctype Sales Invoice");
|
|
||||||
assert.equal(cur_frm.doc.docstatus, 1, "Submitted subscription");
|
|
||||||
assert.equal(cur_frm.doc.next_schedule_date,
|
|
||||||
frappe.datetime.add_days(frappe.datetime.get_today(), 7), "Set schedule date");
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -370,7 +370,7 @@ def get_account_heads(root_type, companies, filters):
|
|||||||
accounts = get_accounts(root_type, filters)
|
accounts = get_accounts(root_type, filters)
|
||||||
|
|
||||||
if not accounts:
|
if not accounts:
|
||||||
return None, None
|
return None, None, None
|
||||||
|
|
||||||
accounts = update_parent_account_names(accounts)
|
accounts = update_parent_account_names(accounts)
|
||||||
|
|
||||||
|
@ -1,116 +0,0 @@
|
|||||||
/* eslint-disable */
|
|
||||||
// rename this file from _test_[name] to test_[name] to activate
|
|
||||||
// and remove above this line
|
|
||||||
|
|
||||||
QUnit.test("test: Crop", function (assert) {
|
|
||||||
let done = assert.async();
|
|
||||||
|
|
||||||
// number of asserts
|
|
||||||
assert.expect(2);
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
// insert a new Item
|
|
||||||
() => frappe.tests.make('Item', [
|
|
||||||
// values to be set
|
|
||||||
{item_code: 'Basil Seeds'},
|
|
||||||
{item_name: 'Basil Seeds'},
|
|
||||||
{item_group: 'Seed'}
|
|
||||||
]),
|
|
||||||
// insert a new Item
|
|
||||||
() => frappe.tests.make('Item', [
|
|
||||||
// values to be set
|
|
||||||
{item_code: 'Twigs'},
|
|
||||||
{item_name: 'Twigs'},
|
|
||||||
{item_group: 'By-product'}
|
|
||||||
]),
|
|
||||||
// insert a new Item
|
|
||||||
() => frappe.tests.make('Item', [
|
|
||||||
// values to be set
|
|
||||||
{item_code: 'Basil Leaves'},
|
|
||||||
{item_name: 'Basil Leaves'},
|
|
||||||
{item_group: 'Produce'}
|
|
||||||
]),
|
|
||||||
// insert a new Crop
|
|
||||||
() => frappe.tests.make('Crop', [
|
|
||||||
// values to be set
|
|
||||||
{title: 'Basil from seed'},
|
|
||||||
{crop_name: 'Basil'},
|
|
||||||
{scientific_name: 'Ocimum basilicum'},
|
|
||||||
{materials_required: [
|
|
||||||
[
|
|
||||||
{item_code: 'Basil Seeds'},
|
|
||||||
{qty: '25'},
|
|
||||||
{uom: 'Nos'},
|
|
||||||
{rate: '1'}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{item_code: 'Urea'},
|
|
||||||
{qty: '5'},
|
|
||||||
{uom: 'Kg'},
|
|
||||||
{rate: '10'}
|
|
||||||
]
|
|
||||||
]},
|
|
||||||
{byproducts: [
|
|
||||||
[
|
|
||||||
{item_code: 'Twigs'},
|
|
||||||
{qty: '25'},
|
|
||||||
{uom: 'Nos'},
|
|
||||||
{rate: '1'}
|
|
||||||
]
|
|
||||||
]},
|
|
||||||
{produce: [
|
|
||||||
[
|
|
||||||
{item_code: 'Basil Leaves'},
|
|
||||||
{qty: '100'},
|
|
||||||
{uom: 'Nos'},
|
|
||||||
{rate: '1'}
|
|
||||||
]
|
|
||||||
]},
|
|
||||||
{agriculture_task: [
|
|
||||||
[
|
|
||||||
{task_name: "Plough the field"},
|
|
||||||
{start_day: 1},
|
|
||||||
{end_day: 1},
|
|
||||||
{holiday_management: "Ignore holidays"}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{task_name: "Plant the seeds"},
|
|
||||||
{start_day: 2},
|
|
||||||
{end_day: 3},
|
|
||||||
{holiday_management: "Ignore holidays"}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{task_name: "Water the field"},
|
|
||||||
{start_day: 4},
|
|
||||||
{end_day: 4},
|
|
||||||
{holiday_management: "Ignore holidays"}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{task_name: "First harvest"},
|
|
||||||
{start_day: 8},
|
|
||||||
{end_day: 8},
|
|
||||||
{holiday_management: "Ignore holidays"}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{task_name: "Add the fertilizer"},
|
|
||||||
{start_day: 10},
|
|
||||||
{end_day: 12},
|
|
||||||
{holiday_management: "Ignore holidays"}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{task_name: "Final cut"},
|
|
||||||
{start_day: 15},
|
|
||||||
{end_day: 15},
|
|
||||||
{holiday_management: "Ignore holidays"}
|
|
||||||
]
|
|
||||||
]}
|
|
||||||
]),
|
|
||||||
// agriculture task list
|
|
||||||
() => {
|
|
||||||
assert.equal(cur_frm.doc.name, 'Basil from seed');
|
|
||||||
assert.equal(cur_frm.doc.period, 15);
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
|
|
||||||
});
|
|
@ -1,34 +0,0 @@
|
|||||||
/* eslint-disable */
|
|
||||||
// rename this file from _test_[name] to test_[name] to activate
|
|
||||||
// and remove above this line
|
|
||||||
|
|
||||||
QUnit.test("test: Crop Cycle", function (assert) {
|
|
||||||
let done = assert.async();
|
|
||||||
|
|
||||||
// number of asserts
|
|
||||||
assert.expect(1);
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
// insert a new Crop Cycle
|
|
||||||
() => frappe.tests.make('Crop Cycle', [
|
|
||||||
// values to be set
|
|
||||||
{title: 'Basil from seed 2017'},
|
|
||||||
{detected_disease: [
|
|
||||||
[
|
|
||||||
{start_date: '2017-11-21'},
|
|
||||||
{disease: 'Aphids'}
|
|
||||||
]
|
|
||||||
]},
|
|
||||||
{linked_land_unit: [
|
|
||||||
[
|
|
||||||
{land_unit: 'Basil Farm'}
|
|
||||||
]
|
|
||||||
]},
|
|
||||||
{crop: 'Basil from seed'},
|
|
||||||
{start_date: '2017-11-11'},
|
|
||||||
{cycle_type: 'Less than a year'}
|
|
||||||
]),
|
|
||||||
() => assert.equal(cur_frm.doc.name, 'Basil from seed 2017'),
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,38 +0,0 @@
|
|||||||
/* eslint-disable */
|
|
||||||
// rename this file from _test_[name] to test_[name] to activate
|
|
||||||
// and remove above this line
|
|
||||||
|
|
||||||
QUnit.test("test: Disease", function (assert) {
|
|
||||||
let done = assert.async();
|
|
||||||
|
|
||||||
// number of asserts
|
|
||||||
assert.expect(1);
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
// insert a new Disease
|
|
||||||
() => frappe.tests.make('Disease', [
|
|
||||||
// values to be set
|
|
||||||
{common_name: 'Aphids'},
|
|
||||||
{scientific_name: 'Aphidoidea'},
|
|
||||||
{treatment_task: [
|
|
||||||
[
|
|
||||||
{task_name: "Survey and find the aphid locations"},
|
|
||||||
{start_day: 1},
|
|
||||||
{end_day: 2},
|
|
||||||
{holiday_management: "Ignore holidays"}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{task_name: "Apply Pesticides"},
|
|
||||||
{start_day: 3},
|
|
||||||
{end_day: 3},
|
|
||||||
{holiday_management: "Ignore holidays"}
|
|
||||||
]
|
|
||||||
]}
|
|
||||||
]),
|
|
||||||
() => {
|
|
||||||
assert.equal(cur_frm.doc.treatment_period, 3);
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
|
|
||||||
});
|
|
@ -1,31 +0,0 @@
|
|||||||
/* eslint-disable */
|
|
||||||
// rename this file from _test_[name] to test_[name] to activate
|
|
||||||
// and remove above this line
|
|
||||||
|
|
||||||
QUnit.test("test: Fertilizer", function (assert) {
|
|
||||||
let done = assert.async();
|
|
||||||
|
|
||||||
// number of asserts
|
|
||||||
assert.expect(1);
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
// insert a new Item
|
|
||||||
() => frappe.tests.make('Item', [
|
|
||||||
// values to be set
|
|
||||||
{item_code: 'Urea'},
|
|
||||||
{item_name: 'Urea'},
|
|
||||||
{item_group: 'Fertilizer'}
|
|
||||||
]),
|
|
||||||
// insert a new Fertilizer
|
|
||||||
() => frappe.tests.make('Fertilizer', [
|
|
||||||
// values to be set
|
|
||||||
{fertilizer_name: 'Urea'},
|
|
||||||
{item: 'Urea'}
|
|
||||||
]),
|
|
||||||
() => {
|
|
||||||
assert.equal(cur_frm.doc.name, 'Urea');
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
|
|
||||||
});
|
|
@ -1,26 +0,0 @@
|
|||||||
/* eslint-disable */
|
|
||||||
// rename this file from _test_[name] to test_[name] to activate
|
|
||||||
// and remove above this line
|
|
||||||
|
|
||||||
QUnit.test("test: Soil Texture", function (assert) {
|
|
||||||
let done = assert.async();
|
|
||||||
|
|
||||||
// number of asserts
|
|
||||||
assert.expect(2);
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
// insert a new Soil Texture
|
|
||||||
() => frappe.tests.make('Soil Texture', [
|
|
||||||
// values to be set
|
|
||||||
{location: '{"type":"FeatureCollection","features":[{"type":"Feature","properties":{},"geometry":{"type":"Point","coordinates":[72.882185,19.076395]}}]}'},
|
|
||||||
{collection_datetime: '2017-11-08'},
|
|
||||||
{clay_composition: 20},
|
|
||||||
{sand_composition: 30}
|
|
||||||
]),
|
|
||||||
() => {
|
|
||||||
assert.equal(cur_frm.doc.silt_composition, 50);
|
|
||||||
assert.equal(cur_frm.doc.soil_type, 'Silt Loam');
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,25 +0,0 @@
|
|||||||
/* eslint-disable */
|
|
||||||
// rename this file from _test_[name] to test_[name] to activate
|
|
||||||
// and remove above this line
|
|
||||||
|
|
||||||
QUnit.test("test: Water Analysis", function (assert) {
|
|
||||||
let done = assert.async();
|
|
||||||
|
|
||||||
// number of asserts
|
|
||||||
assert.expect(1);
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
// insert a new Water Analysis
|
|
||||||
() => frappe.tests.make('Water Analysis', [
|
|
||||||
// values to be set
|
|
||||||
{location: '{"type":"FeatureCollection","features":[{"type":"Feature","properties":{},"geometry":{"type":"Point","coordinates":[72.882185,19.076395]}}]}'},
|
|
||||||
{collection_datetime: '2017-11-08 18:43:57'},
|
|
||||||
{laboratory_testing_datetime: '2017-11-10 18:43:57'}
|
|
||||||
]),
|
|
||||||
() => {
|
|
||||||
assert.equal(cur_frm.doc.result_datetime, '2017-11-10 18:43:57');
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
|
|
||||||
});
|
|
@ -1,80 +0,0 @@
|
|||||||
QUnit.module('Buying');
|
|
||||||
|
|
||||||
QUnit.test("test: purchase order", function(assert) {
|
|
||||||
assert.expect(16);
|
|
||||||
let done = assert.async();
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Purchase Order', [
|
|
||||||
{supplier: 'Test Supplier'},
|
|
||||||
{is_subcontracted: 'No'},
|
|
||||||
{currency: 'INR'},
|
|
||||||
{items: [
|
|
||||||
[
|
|
||||||
{"item_code": 'Test Product 4'},
|
|
||||||
{"schedule_date": frappe.datetime.add_days(frappe.datetime.now_date(), 2)},
|
|
||||||
{"expected_delivery_date": frappe.datetime.add_days(frappe.datetime.now_date(), 5)},
|
|
||||||
{"qty": 5},
|
|
||||||
{"uom": 'Unit'},
|
|
||||||
{"rate": 100},
|
|
||||||
{"warehouse": 'Stores - '+frappe.get_abbr(frappe.defaults.get_default("Company"))}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{"item_code": 'Test Product 1'},
|
|
||||||
{"schedule_date": frappe.datetime.add_days(frappe.datetime.now_date(), 1)},
|
|
||||||
{"expected_delivery_date": frappe.datetime.add_days(frappe.datetime.now_date(), 5)},
|
|
||||||
{"qty": 2},
|
|
||||||
{"uom": 'Unit'},
|
|
||||||
{"rate": 100},
|
|
||||||
{"warehouse": 'Stores - '+frappe.get_abbr(frappe.defaults.get_default("Company"))}
|
|
||||||
]
|
|
||||||
]},
|
|
||||||
|
|
||||||
{tc_name: 'Test Term 1'},
|
|
||||||
{terms: 'This is a term.'}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
|
|
||||||
() => {
|
|
||||||
// Get supplier details
|
|
||||||
assert.ok(cur_frm.doc.supplier_name == 'Test Supplier', "Supplier name correct");
|
|
||||||
assert.ok(cur_frm.doc.schedule_date == frappe.datetime.add_days(frappe.datetime.now_date(), 1), "Schedule Date correct");
|
|
||||||
assert.ok(cur_frm.doc.contact_email == 'test@supplier.com', "Contact email correct");
|
|
||||||
// Get item details
|
|
||||||
assert.ok(cur_frm.doc.items[0].item_name == 'Test Product 4', "Item name correct");
|
|
||||||
assert.ok(cur_frm.doc.items[0].description == 'Test Product 4', "Description correct");
|
|
||||||
assert.ok(cur_frm.doc.items[0].qty == 5, "Quantity correct");
|
|
||||||
assert.ok(cur_frm.doc.items[0].schedule_date == frappe.datetime.add_days(frappe.datetime.now_date(), 2), "Schedule Date correct");
|
|
||||||
|
|
||||||
assert.ok(cur_frm.doc.items[1].item_name == 'Test Product 1', "Item name correct");
|
|
||||||
assert.ok(cur_frm.doc.items[1].description == 'Test Product 1', "Description correct");
|
|
||||||
assert.ok(cur_frm.doc.items[1].qty == 2, "Quantity correct");
|
|
||||||
assert.ok(cur_frm.doc.items[1].schedule_date == cur_frm.doc.schedule_date, "Schedule Date correct");
|
|
||||||
// Calculate total
|
|
||||||
assert.ok(cur_frm.doc.total == 700, "Total correct");
|
|
||||||
// Get terms
|
|
||||||
assert.ok(cur_frm.doc.terms == 'This is a term.', "Terms correct");
|
|
||||||
},
|
|
||||||
|
|
||||||
() => cur_frm.print_doc(),
|
|
||||||
() => frappe.timeout(2),
|
|
||||||
() => {
|
|
||||||
assert.ok($('.btn-print-print').is(':visible'), "Print Format Available");
|
|
||||||
assert.ok($('div > div:nth-child(5) > div > div > table > tbody > tr > td:nth-child(4) > div').text().includes('Test Product 4'), "Print Preview Works");
|
|
||||||
},
|
|
||||||
|
|
||||||
() => cur_frm.print_doc(),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.status == 'To Receive and Bill', "Submitted successfully");
|
|
||||||
},
|
|
||||||
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,61 +0,0 @@
|
|||||||
QUnit.module('Buying');
|
|
||||||
|
|
||||||
QUnit.test("test: purchase order with get items", function(assert) {
|
|
||||||
assert.expect(4);
|
|
||||||
let done = assert.async();
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Purchase Order', [
|
|
||||||
{supplier: 'Test Supplier'},
|
|
||||||
{is_subcontracted: 'No'},
|
|
||||||
{buying_price_list: 'Test-Buying-USD'},
|
|
||||||
{currency: 'USD'},
|
|
||||||
{items: [
|
|
||||||
[
|
|
||||||
{"item_code": 'Test Product 4'},
|
|
||||||
{"qty": 5},
|
|
||||||
{"schedule_date": frappe.datetime.add_days(frappe.datetime.now_date(), 1)},
|
|
||||||
{"expected_delivery_date": frappe.datetime.add_days(frappe.datetime.now_date(), 5)},
|
|
||||||
{"warehouse": 'Stores - '+frappe.get_abbr(frappe.defaults.get_default("Company"))}
|
|
||||||
]
|
|
||||||
]}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.supplier_name == 'Test Supplier', "Supplier name correct");
|
|
||||||
},
|
|
||||||
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
() => frappe.click_button('Get items from'),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
|
|
||||||
() => frappe.click_link('Product Bundle'),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
|
|
||||||
() => cur_dialog.set_value('product_bundle', 'Computer'),
|
|
||||||
() => frappe.click_button('Get Items'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
|
|
||||||
// Check if items are fetched from Product Bundle
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.items[1].item_name == 'CPU', "Product bundle item 1 correct");
|
|
||||||
assert.ok(cur_frm.doc.items[2].item_name == 'Screen', "Product bundle item 2 correct");
|
|
||||||
assert.ok(cur_frm.doc.items[3].item_name == 'Keyboard', "Product bundle item 3 correct");
|
|
||||||
},
|
|
||||||
|
|
||||||
() => cur_frm.doc.items[1].warehouse = 'Stores - '+frappe.get_abbr(frappe.defaults.get_default("Company")),
|
|
||||||
() => cur_frm.doc.items[2].warehouse = 'Stores - '+frappe.get_abbr(frappe.defaults.get_default("Company")),
|
|
||||||
() => cur_frm.doc.items[3].warehouse = 'Stores - '+frappe.get_abbr(frappe.defaults.get_default("Company")),
|
|
||||||
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,74 +0,0 @@
|
|||||||
QUnit.module('Buying');
|
|
||||||
|
|
||||||
QUnit.test("test: purchase order receipt", function(assert) {
|
|
||||||
assert.expect(5);
|
|
||||||
let done = assert.async();
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Purchase Order', [
|
|
||||||
{supplier: 'Test Supplier'},
|
|
||||||
{is_subcontracted: 'No'},
|
|
||||||
{buying_price_list: 'Test-Buying-USD'},
|
|
||||||
{currency: 'USD'},
|
|
||||||
{items: [
|
|
||||||
[
|
|
||||||
{"item_code": 'Test Product 1'},
|
|
||||||
{"schedule_date": frappe.datetime.add_days(frappe.datetime.now_date(), 1)},
|
|
||||||
{"expected_delivery_date": frappe.datetime.add_days(frappe.datetime.now_date(), 5)},
|
|
||||||
{"qty": 5},
|
|
||||||
{"uom": 'Unit'},
|
|
||||||
{"rate": 100},
|
|
||||||
{"warehouse": 'Stores - '+frappe.get_abbr(frappe.defaults.get_default("Company"))}
|
|
||||||
]
|
|
||||||
]},
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
|
|
||||||
() => {
|
|
||||||
|
|
||||||
// Check supplier and item details
|
|
||||||
assert.ok(cur_frm.doc.supplier_name == 'Test Supplier', "Supplier name correct");
|
|
||||||
assert.ok(cur_frm.doc.items[0].item_name == 'Test Product 1', "Item name correct");
|
|
||||||
assert.ok(cur_frm.doc.items[0].description == 'Test Product 1', "Description correct");
|
|
||||||
assert.ok(cur_frm.doc.items[0].qty == 5, "Quantity correct");
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
|
|
||||||
() => frappe.timeout(1.5),
|
|
||||||
() => frappe.click_button('Close'),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
|
|
||||||
// Make Purchase Receipt
|
|
||||||
() => frappe.click_button('Make'),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
|
|
||||||
() => frappe.click_link('Receipt'),
|
|
||||||
() => frappe.timeout(2),
|
|
||||||
|
|
||||||
() => cur_frm.save(),
|
|
||||||
|
|
||||||
// Save and submit Purchase Receipt
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
|
|
||||||
// View Purchase order in Stock Ledger
|
|
||||||
() => frappe.click_button('View'),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
|
|
||||||
() => frappe.click_link('Stock Ledger'),
|
|
||||||
() => frappe.timeout(2),
|
|
||||||
() => {
|
|
||||||
assert.ok($('div.slick-cell.l2.r2 > a').text().includes('Test Product 1')
|
|
||||||
&& $('div.slick-cell.l9.r9 > div').text().includes(5), "Stock ledger entry correct");
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,47 +0,0 @@
|
|||||||
QUnit.module('Buying');
|
|
||||||
|
|
||||||
QUnit.test("test: purchase order with discount on grand total", function(assert) {
|
|
||||||
assert.expect(4);
|
|
||||||
let done = assert.async();
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Purchase Order', [
|
|
||||||
{supplier: 'Test Supplier'},
|
|
||||||
{is_subcontracted: 'No'},
|
|
||||||
{buying_price_list: 'Test-Buying-EUR'},
|
|
||||||
{currency: 'EUR'},
|
|
||||||
{items: [
|
|
||||||
[
|
|
||||||
{"item_code": 'Test Product 4'},
|
|
||||||
{"qty": 5},
|
|
||||||
{"uom": 'Unit'},
|
|
||||||
{"rate": 500 },
|
|
||||||
{"schedule_date": frappe.datetime.add_days(frappe.datetime.now_date(), 1)},
|
|
||||||
{"expected_delivery_date": frappe.datetime.add_days(frappe.datetime.now_date(), 5)},
|
|
||||||
{"warehouse": 'Stores - '+frappe.get_abbr(frappe.defaults.get_default("Company"))}
|
|
||||||
]
|
|
||||||
]},
|
|
||||||
{apply_discount_on: 'Grand Total'},
|
|
||||||
{additional_discount_percentage: 10}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.supplier_name == 'Test Supplier', "Supplier name correct");
|
|
||||||
assert.ok(cur_frm.doc.items[0].rate == 500, "Rate correct");
|
|
||||||
// Calculate total
|
|
||||||
assert.ok(cur_frm.doc.total == 2500, "Total correct");
|
|
||||||
// Calculate grand total after discount
|
|
||||||
assert.ok(cur_frm.doc.grand_total == 2250, "Grand total correct");
|
|
||||||
},
|
|
||||||
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,44 +0,0 @@
|
|||||||
QUnit.module('Buying');
|
|
||||||
|
|
||||||
QUnit.test("test: purchase order with item wise discount", function(assert) {
|
|
||||||
assert.expect(4);
|
|
||||||
let done = assert.async();
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Purchase Order', [
|
|
||||||
{supplier: 'Test Supplier'},
|
|
||||||
{is_subcontracted: 'No'},
|
|
||||||
{buying_price_list: 'Test-Buying-EUR'},
|
|
||||||
{currency: 'EUR'},
|
|
||||||
{items: [
|
|
||||||
[
|
|
||||||
{"item_code": 'Test Product 4'},
|
|
||||||
{"qty": 5},
|
|
||||||
{"uom": 'Unit'},
|
|
||||||
{"schedule_date": frappe.datetime.add_days(frappe.datetime.now_date(), 1)},
|
|
||||||
{"expected_delivery_date": frappe.datetime.add_days(frappe.datetime.now_date(), 5)},
|
|
||||||
{"warehouse": 'Stores - '+frappe.get_abbr(frappe.defaults.get_default("Company"))},
|
|
||||||
{"discount_percentage": 20}
|
|
||||||
]
|
|
||||||
]}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.supplier_name == 'Test Supplier', "Supplier name correct");
|
|
||||||
assert.ok(cur_frm.doc.items[0].discount_percentage == 20, "Discount correct");
|
|
||||||
// Calculate totals after discount
|
|
||||||
assert.ok(cur_frm.doc.total == 2000, "Total correct");
|
|
||||||
assert.ok(cur_frm.doc.grand_total == 2000, "Grand total correct");
|
|
||||||
},
|
|
||||||
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,39 +0,0 @@
|
|||||||
QUnit.module('Buying');
|
|
||||||
|
|
||||||
QUnit.test("test: purchase order with multi UOM", function(assert) {
|
|
||||||
assert.expect(3);
|
|
||||||
let done = assert.async();
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Purchase Order', [
|
|
||||||
{supplier: 'Test Supplier'},
|
|
||||||
{is_subcontracted: 'No'},
|
|
||||||
{items: [
|
|
||||||
[
|
|
||||||
{"item_code": 'Test Product 4'},
|
|
||||||
{"qty": 5},
|
|
||||||
{"uom": 'Unit'},
|
|
||||||
{"rate": 100},
|
|
||||||
{"schedule_date": frappe.datetime.add_days(frappe.datetime.now_date(), 1)},
|
|
||||||
{"expected_delivery_date": frappe.datetime.add_days(frappe.datetime.now_date(), 5)},
|
|
||||||
{"warehouse": 'Stores - '+frappe.get_abbr(frappe.defaults.get_default("Company"))}
|
|
||||||
]
|
|
||||||
]}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.supplier_name == 'Test Supplier', "Supplier name correct");
|
|
||||||
assert.ok(cur_frm.doc.items[0].item_name == 'Test Product 4', "Item name correct");
|
|
||||||
assert.ok(cur_frm.doc.items[0].uom == 'Unit', "Multi UOM correct");
|
|
||||||
},
|
|
||||||
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,43 +0,0 @@
|
|||||||
QUnit.module('Buying');
|
|
||||||
|
|
||||||
QUnit.test("test: purchase order with shipping rule", function(assert) {
|
|
||||||
assert.expect(3);
|
|
||||||
let done = assert.async();
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Purchase Order', [
|
|
||||||
{supplier: 'Test Supplier'},
|
|
||||||
{is_subcontracted: 'No'},
|
|
||||||
{buying_price_list: 'Test-Buying-USD'},
|
|
||||||
{currency: 'USD'},
|
|
||||||
{"schedule_date": frappe.datetime.add_days(frappe.datetime.now_date(), 1)},
|
|
||||||
{items: [
|
|
||||||
[
|
|
||||||
{"item_code": 'Test Product 4'},
|
|
||||||
{"qty": 5},
|
|
||||||
{"uom": 'Unit'},
|
|
||||||
{"rate": 500 },
|
|
||||||
{"schedule_date": frappe.datetime.add_days(frappe.datetime.now_date(), 1)},
|
|
||||||
{"expected_delivery_date": frappe.datetime.add_days(frappe.datetime.now_date(), 5)},
|
|
||||||
{"warehouse": 'Stores - '+frappe.get_abbr(frappe.defaults.get_default("Company"))}
|
|
||||||
]
|
|
||||||
]},
|
|
||||||
|
|
||||||
{shipping_rule:'Two Day Shipping'}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
|
|
||||||
() => {
|
|
||||||
// Check grand total
|
|
||||||
assert.ok(cur_frm.doc.total_taxes_and_charges == 200, "Taxes and charges correct");
|
|
||||||
assert.ok(cur_frm.doc.grand_total == 2700, "Grand total correct");
|
|
||||||
},
|
|
||||||
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,44 +0,0 @@
|
|||||||
QUnit.module('Buying');
|
|
||||||
|
|
||||||
QUnit.test("test: purchase order with taxes and charges", function(assert) {
|
|
||||||
assert.expect(3);
|
|
||||||
let done = assert.async();
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Purchase Order', [
|
|
||||||
{supplier: 'Test Supplier'},
|
|
||||||
{is_subcontracted: 'No'},
|
|
||||||
{buying_price_list: 'Test-Buying-USD'},
|
|
||||||
{currency: 'USD'},
|
|
||||||
{"schedule_date": frappe.datetime.add_days(frappe.datetime.now_date(), 1)},
|
|
||||||
{items: [
|
|
||||||
[
|
|
||||||
{"item_code": 'Test Product 4'},
|
|
||||||
{"qty": 5},
|
|
||||||
{"uom": 'Unit'},
|
|
||||||
{"rate": 500 },
|
|
||||||
{"schedule_date": frappe.datetime.add_days(frappe.datetime.now_date(), 1)},
|
|
||||||
{"expected_delivery_date": frappe.datetime.add_days(frappe.datetime.now_date(), 5)},
|
|
||||||
{"warehouse": 'Stores - '+frappe.get_abbr(frappe.defaults.get_default("Company"))}
|
|
||||||
]
|
|
||||||
]},
|
|
||||||
|
|
||||||
{taxes_and_charges: 'TEST In State GST - FT'}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
|
|
||||||
() => {
|
|
||||||
// Check taxes and calculate grand total
|
|
||||||
assert.ok(cur_frm.doc.taxes[1].account_head=='SGST - '+frappe.get_abbr(frappe.defaults.get_default('Company')), "Account Head abbr correct");
|
|
||||||
assert.ok(cur_frm.doc.total_taxes_and_charges == 225, "Taxes and charges correct");
|
|
||||||
assert.ok(cur_frm.doc.grand_total == 2725, "Grand total correct");
|
|
||||||
},
|
|
||||||
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,76 +0,0 @@
|
|||||||
QUnit.module('Buying');
|
|
||||||
|
|
||||||
QUnit.test("test: request_for_quotation", function(assert) {
|
|
||||||
assert.expect(14);
|
|
||||||
let done = assert.async();
|
|
||||||
let date;
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
date = frappe.datetime.add_days(frappe.datetime.now_date(), 10);
|
|
||||||
return frappe.tests.make('Request for Quotation', [
|
|
||||||
{transaction_date: date},
|
|
||||||
{suppliers: [
|
|
||||||
[
|
|
||||||
{"supplier": 'Test Supplier'},
|
|
||||||
{"email_id": 'test@supplier.com'}
|
|
||||||
]
|
|
||||||
]},
|
|
||||||
{items: [
|
|
||||||
[
|
|
||||||
{"item_code": 'Test Product 4'},
|
|
||||||
{"qty": 5},
|
|
||||||
{"schedule_date": frappe.datetime.add_days(frappe.datetime.now_date(),20)},
|
|
||||||
{"warehouse": 'All Warehouses - '+frappe.get_abbr(frappe.defaults.get_default("Company"))}
|
|
||||||
]
|
|
||||||
]},
|
|
||||||
{message_for_supplier: 'Please supply the specified items at the best possible rates'},
|
|
||||||
{tc_name: 'Test Term 1'}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => frappe.timeout(3),
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.transaction_date == date, "Date correct");
|
|
||||||
assert.ok(cur_frm.doc.company == cur_frm.doc.company, "Company correct");
|
|
||||||
assert.ok(cur_frm.doc.suppliers[0].supplier_name == 'Test Supplier', "Supplier name correct");
|
|
||||||
assert.ok(cur_frm.doc.suppliers[0].contact == 'Contact 3-Test Supplier', "Contact correct");
|
|
||||||
assert.ok(cur_frm.doc.suppliers[0].email_id == 'test@supplier.com', "Email id correct");
|
|
||||||
assert.ok(cur_frm.doc.items[0].item_name == 'Test Product 4', "Item Name correct");
|
|
||||||
assert.ok(cur_frm.doc.items[0].warehouse == 'All Warehouses - '+frappe.get_abbr(frappe.defaults.get_default("Company")), "Warehouse correct");
|
|
||||||
assert.ok(cur_frm.doc.message_for_supplier == 'Please supply the specified items at the best possible rates', "Reply correct");
|
|
||||||
assert.ok(cur_frm.doc.tc_name == 'Test Term 1', "Term name correct");
|
|
||||||
},
|
|
||||||
() => frappe.timeout(3),
|
|
||||||
() => cur_frm.print_doc(),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
assert.ok($('.btn-print-print').is(':visible'), "Print Format Available");
|
|
||||||
assert.ok($('.section-break+ .section-break .column-break:nth-child(1) .value').text().includes("Test Product 4"), "Print Preview Works");
|
|
||||||
},
|
|
||||||
() => cur_frm.print_doc(),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.click_button('Get items from'),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
() => frappe.click_link('Material Request'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.click_button('Get Items'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.items[1].item_name == 'Test Product 1', "Getting items from material requests work");
|
|
||||||
},
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.docstatus == 1, "Quotation request submitted");
|
|
||||||
},
|
|
||||||
() => frappe.click_button('Send Supplier Emails'),
|
|
||||||
() => frappe.timeout(6),
|
|
||||||
() => {
|
|
||||||
assert.ok($('div.modal.fade.in > div.modal-dialog > div > div.modal-body.ui-front > div.msgprint').text().includes("Email sent to supplier Test Supplier"), "Send emails working");
|
|
||||||
},
|
|
||||||
() => frappe.click_button('Close'),
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,128 +0,0 @@
|
|||||||
QUnit.module('buying');
|
|
||||||
|
|
||||||
QUnit.test("Test: Request for Quotation", function (assert) {
|
|
||||||
assert.expect(5);
|
|
||||||
let done = assert.async();
|
|
||||||
let rfq_name = "";
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
// Go to RFQ list
|
|
||||||
() => frappe.set_route("List", "Request for Quotation"),
|
|
||||||
// Create a new RFQ
|
|
||||||
() => frappe.new_doc("Request for Quotation"),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => cur_frm.set_value("transaction_date", "04-04-2017"),
|
|
||||||
() => cur_frm.set_value("company", "For Testing"),
|
|
||||||
// Add Suppliers
|
|
||||||
() => {
|
|
||||||
cur_frm.fields_dict.suppliers.grid.grid_rows[0].toggle_view();
|
|
||||||
},
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
cur_frm.fields_dict.suppliers.grid.grid_rows[0].doc.supplier = "_Test Supplier";
|
|
||||||
frappe.click_check('Send Email');
|
|
||||||
cur_frm.cur_grid.frm.script_manager.trigger('supplier');
|
|
||||||
},
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
cur_frm.cur_grid.toggle_view();
|
|
||||||
},
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.click_button('Add Row',0),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
cur_frm.fields_dict.suppliers.grid.grid_rows[1].toggle_view();
|
|
||||||
},
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
cur_frm.fields_dict.suppliers.grid.grid_rows[1].doc.supplier = "_Test Supplier 1";
|
|
||||||
frappe.click_check('Send Email');
|
|
||||||
cur_frm.cur_grid.frm.script_manager.trigger('supplier');
|
|
||||||
},
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
cur_frm.cur_grid.toggle_view();
|
|
||||||
},
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
// Add Item
|
|
||||||
() => {
|
|
||||||
cur_frm.fields_dict.items.grid.grid_rows[0].toggle_view();
|
|
||||||
},
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
cur_frm.fields_dict.items.grid.grid_rows[0].doc.item_code = "_Test Item";
|
|
||||||
frappe.set_control('item_code',"_Test Item");
|
|
||||||
frappe.set_control('qty',5);
|
|
||||||
frappe.set_control('schedule_date', "05-05-2017");
|
|
||||||
cur_frm.cur_grid.frm.script_manager.trigger('supplier');
|
|
||||||
},
|
|
||||||
() => frappe.timeout(2),
|
|
||||||
() => {
|
|
||||||
cur_frm.cur_grid.toggle_view();
|
|
||||||
},
|
|
||||||
() => frappe.timeout(2),
|
|
||||||
() => {
|
|
||||||
cur_frm.fields_dict.items.grid.grid_rows[0].doc.warehouse = "_Test Warehouse - FT";
|
|
||||||
},
|
|
||||||
() => frappe.click_button('Save'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.click_button('Submit'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.click_button('Yes'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.click_button('Menu'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.click_link('Reload'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
assert.equal(cur_frm.doc.docstatus, 1);
|
|
||||||
rfq_name = cur_frm.doc.name;
|
|
||||||
assert.ok(cur_frm.fields_dict.suppliers.grid.grid_rows[0].doc.quote_status == "Pending");
|
|
||||||
assert.ok(cur_frm.fields_dict.suppliers.grid.grid_rows[1].doc.quote_status == "Pending");
|
|
||||||
},
|
|
||||||
() => {
|
|
||||||
cur_frm.fields_dict.suppliers.grid.grid_rows[0].toggle_view();
|
|
||||||
},
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
cur_frm.cur_grid.toggle_view();
|
|
||||||
},
|
|
||||||
() => frappe.click_button('Update'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
|
|
||||||
() => frappe.click_button('Supplier Quotation'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.click_link('Make'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
frappe.set_control('supplier',"_Test Supplier 1");
|
|
||||||
},
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.click_button('Make Supplier Quotation'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => cur_frm.set_value("company", "For Testing"),
|
|
||||||
() => cur_frm.fields_dict.items.grid.grid_rows[0].doc.rate = 4.99,
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.click_button('Save'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.click_button('Submit'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.click_button('Yes'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.set_route("List", "Request for Quotation"),
|
|
||||||
() => frappe.timeout(2),
|
|
||||||
() => frappe.set_route("List", "Request for Quotation"),
|
|
||||||
() => frappe.timeout(2),
|
|
||||||
() => frappe.click_link(rfq_name),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.click_button('Menu'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.click_link('Reload'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.fields_dict.suppliers.grid.grid_rows[1].doc.quote_status == "Received");
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,77 +0,0 @@
|
|||||||
QUnit.module('Buying');
|
|
||||||
|
|
||||||
QUnit.test("test: supplier", function(assert) {
|
|
||||||
assert.expect(6);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Supplier', [
|
|
||||||
{supplier_name: 'Test Supplier'},
|
|
||||||
{supplier_group: 'Hardware'},
|
|
||||||
{country: 'India'},
|
|
||||||
{default_currency: 'INR'},
|
|
||||||
{accounts: [
|
|
||||||
[
|
|
||||||
{'company': "For Testing"},
|
|
||||||
{'account': "Creditors - FT"}
|
|
||||||
]]
|
|
||||||
}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.click_button('New Address'),
|
|
||||||
() => {
|
|
||||||
return frappe.tests.set_form_values(cur_frm, [
|
|
||||||
{address_title:"Test3"},
|
|
||||||
{address_type: "Billing"},
|
|
||||||
{address_line1: "Billing Street 3"},
|
|
||||||
{city: "Billing City 3"},
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.timeout(2),
|
|
||||||
() => frappe.click_button('New Address'),
|
|
||||||
() => {
|
|
||||||
return frappe.tests.set_form_values(cur_frm, [
|
|
||||||
{address_title:"Test3"},
|
|
||||||
{address_type: "Shipping"},
|
|
||||||
{address_line1: "Shipping Street 3"},
|
|
||||||
{city: "Shipping City 3"},
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.timeout(2),
|
|
||||||
() => frappe.click_button('New Address'),
|
|
||||||
() => {
|
|
||||||
return frappe.tests.set_form_values(cur_frm, [
|
|
||||||
{address_title:"Test3"},
|
|
||||||
{address_type: "Warehouse"},
|
|
||||||
{address_line1: "Warehouse Street 3"},
|
|
||||||
{city: "Warehouse City 3"},
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.timeout(2),
|
|
||||||
() => frappe.click_button('New Contact'),
|
|
||||||
() => {
|
|
||||||
return frappe.tests.set_form_values(cur_frm, [
|
|
||||||
{first_name: "Contact 3"},
|
|
||||||
{email_id: "test@supplier.com"}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.set_route('Form', 'Supplier', 'Test Supplier'),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.supplier_name == 'Test Supplier', "Name correct");
|
|
||||||
assert.ok(cur_frm.doc.supplier_group == 'Hardware', "Type correct");
|
|
||||||
assert.ok(cur_frm.doc.default_currency == 'INR', "Currency correct");
|
|
||||||
assert.ok(cur_frm.doc.accounts[0].account == 'Creditors - '+frappe.get_abbr('For Testing'), " Account Head abbr correct");
|
|
||||||
assert.ok($('.address-box:nth-child(3) p').text().includes('Shipping City 3'), "Address correct");
|
|
||||||
assert.ok($('.col-sm-6+ .col-sm-6 .h6').text().includes('Contact 3'), "Contact correct");
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,74 +0,0 @@
|
|||||||
QUnit.module('Buying');
|
|
||||||
|
|
||||||
QUnit.test("test: supplier quotation", function(assert) {
|
|
||||||
assert.expect(11);
|
|
||||||
let done = assert.async();
|
|
||||||
let date;
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
date = frappe.datetime.add_days(frappe.datetime.now_date(), 10);
|
|
||||||
return frappe.tests.make('Supplier Quotation', [
|
|
||||||
{supplier: 'Test Supplier'},
|
|
||||||
{transaction_date: date},
|
|
||||||
{currency: 'INR'},
|
|
||||||
{items: [
|
|
||||||
[
|
|
||||||
{"item_code": 'Test Product 4'},
|
|
||||||
{"qty": 5},
|
|
||||||
{"uom": 'Unit'},
|
|
||||||
{"rate": 200},
|
|
||||||
{"warehouse": 'All Warehouses - '+frappe.get_abbr(frappe.defaults.get_default("Company"))}
|
|
||||||
]
|
|
||||||
]},
|
|
||||||
{apply_discount_on: 'Grand Total'},
|
|
||||||
{additional_discount_percentage: 10},
|
|
||||||
{tc_name: 'Test Term 1'},
|
|
||||||
{terms: 'This is a term'}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => frappe.timeout(3),
|
|
||||||
() => {
|
|
||||||
// Get Supplier details
|
|
||||||
assert.ok(cur_frm.doc.supplier == 'Test Supplier', "Supplier correct");
|
|
||||||
assert.ok(cur_frm.doc.company == cur_frm.doc.company, "Company correct");
|
|
||||||
// Get Contact details
|
|
||||||
assert.ok(cur_frm.doc.contact_person == 'Contact 3-Test Supplier', "Conatct correct");
|
|
||||||
assert.ok(cur_frm.doc.contact_email == 'test@supplier.com', "Email correct");
|
|
||||||
// Get uom
|
|
||||||
assert.ok(cur_frm.doc.items[0].uom == 'Unit', "Multi uom correct");
|
|
||||||
assert.ok(cur_frm.doc.total == 1000, "Total correct");
|
|
||||||
// Calculate total after discount
|
|
||||||
assert.ok(cur_frm.doc.grand_total == 900, "Grand total correct");
|
|
||||||
// Get terms
|
|
||||||
assert.ok(cur_frm.doc.tc_name == 'Test Term 1', "Terms correct");
|
|
||||||
},
|
|
||||||
|
|
||||||
() => cur_frm.print_doc(),
|
|
||||||
() => frappe.timeout(2),
|
|
||||||
() => {
|
|
||||||
assert.ok($('.btn-print-print').is(':visible'), "Print Format Available");
|
|
||||||
assert.ok($("table > tbody > tr > td:nth-child(3) > div").text().includes("Test Product 4"), "Print Preview Works As Expected");
|
|
||||||
},
|
|
||||||
() => cur_frm.print_doc(),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.click_button('Get items from'),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
() => frappe.click_link('Material Request'),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
() => frappe.click_button('Get Items'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
// Get item from Material Requests
|
|
||||||
assert.ok(cur_frm.doc.items[1].item_name == 'Test Product 1', "Getting items from material requests work");
|
|
||||||
},
|
|
||||||
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,34 +0,0 @@
|
|||||||
QUnit.module('Buying');
|
|
||||||
|
|
||||||
QUnit.test("test: supplier quotation with item wise discount", function(assert){
|
|
||||||
assert.expect(2);
|
|
||||||
let done = assert.async();
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Supplier Quotation', [
|
|
||||||
{supplier: 'Test Supplier'},
|
|
||||||
{company: 'For Testing'},
|
|
||||||
{items: [
|
|
||||||
[
|
|
||||||
{"item_code": 'Test Product 4'},
|
|
||||||
{"qty": 5},
|
|
||||||
{"uom": 'Unit'},
|
|
||||||
{"warehouse": 'All Warehouses - FT'},
|
|
||||||
{'discount_percentage': 10},
|
|
||||||
]
|
|
||||||
]}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.total == 900, "Total correct");
|
|
||||||
assert.ok(cur_frm.doc.grand_total == 900, "Grand total correct");
|
|
||||||
},
|
|
||||||
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,37 +0,0 @@
|
|||||||
QUnit.module('Buying');
|
|
||||||
|
|
||||||
QUnit.test("test: supplier quotation with taxes and charges", function(assert) {
|
|
||||||
assert.expect(3);
|
|
||||||
let done = assert.async();
|
|
||||||
let supplier_quotation_name;
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Supplier Quotation', [
|
|
||||||
{supplier: 'Test Supplier'},
|
|
||||||
{items: [
|
|
||||||
[
|
|
||||||
{"item_code": 'Test Product 4'},
|
|
||||||
{"qty": 5},
|
|
||||||
{"rate": 100},
|
|
||||||
{"warehouse": 'Stores - '+frappe.get_abbr(frappe.defaults.get_default('Company'))},
|
|
||||||
]
|
|
||||||
]},
|
|
||||||
{taxes_and_charges:'TEST In State GST - FT'},
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => {supplier_quotation_name = cur_frm.doc.name;},
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.taxes[0].account_head=='CGST - '+frappe.get_abbr(frappe.defaults.get_default('Company')), " Account Head abbr correct");
|
|
||||||
assert.ok(cur_frm.doc.total_taxes_and_charges == 45, "Taxes and charges correct");
|
|
||||||
assert.ok(cur_frm.doc.grand_total == 545, "Grand total correct");
|
|
||||||
},
|
|
||||||
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -184,6 +184,8 @@ class AccountsController(TransactionBase):
|
|||||||
frappe.throw(_("Row #{0}: Service Start Date cannot be greater than Service End Date").format(d.idx))
|
frappe.throw(_("Row #{0}: Service Start Date cannot be greater than Service End Date").format(d.idx))
|
||||||
elif getdate(self.posting_date) > getdate(d.service_end_date):
|
elif getdate(self.posting_date) > getdate(d.service_end_date):
|
||||||
frappe.throw(_("Row #{0}: Service End Date cannot be before Invoice Posting Date").format(d.idx))
|
frappe.throw(_("Row #{0}: Service End Date cannot be before Invoice Posting Date").format(d.idx))
|
||||||
|
elif getdate(self.posting_date) > getdate(d.service_start_date):
|
||||||
|
frappe.throw(_("Row #{0}: Service Start Date cannot be before Invoice Posting Date").format(d.idx))
|
||||||
|
|
||||||
def validate_invoice_documents_schedule(self):
|
def validate_invoice_documents_schedule(self):
|
||||||
self.validate_payment_schedule_dates()
|
self.validate_payment_schedule_dates()
|
||||||
|
@ -8,7 +8,6 @@ from frappe.contacts.address_and_contact import load_address_and_contact
|
|||||||
from frappe.email.inbox import link_communication_to_document
|
from frappe.email.inbox import link_communication_to_document
|
||||||
from frappe.model.mapper import get_mapped_doc
|
from frappe.model.mapper import get_mapped_doc
|
||||||
from frappe.utils import (
|
from frappe.utils import (
|
||||||
cint,
|
|
||||||
comma_and,
|
comma_and,
|
||||||
cstr,
|
cstr,
|
||||||
get_link_to_form,
|
get_link_to_form,
|
||||||
@ -39,11 +38,7 @@ class Lead(SellingController):
|
|||||||
self.check_email_id_is_unique()
|
self.check_email_id_is_unique()
|
||||||
self.validate_email_id()
|
self.validate_email_id()
|
||||||
self.validate_contact_date()
|
self.validate_contact_date()
|
||||||
self._prev = frappe._dict({
|
self.set_prev()
|
||||||
"contact_date": frappe.db.get_value("Lead", self.name, "contact_date") if (not cint(self.is_new())) else None,
|
|
||||||
"ends_on": frappe.db.get_value("Lead", self.name, "ends_on") if (not cint(self.is_new())) else None,
|
|
||||||
"contact_by": frappe.db.get_value("Lead", self.name, "contact_by") if (not cint(self.is_new())) else None,
|
|
||||||
})
|
|
||||||
|
|
||||||
def set_full_name(self):
|
def set_full_name(self):
|
||||||
if self.first_name:
|
if self.first_name:
|
||||||
@ -75,6 +70,16 @@ class Lead(SellingController):
|
|||||||
self.add_calendar_event()
|
self.add_calendar_event()
|
||||||
self.update_prospects()
|
self.update_prospects()
|
||||||
|
|
||||||
|
def set_prev(self):
|
||||||
|
if self.is_new():
|
||||||
|
self._prev = frappe._dict({
|
||||||
|
"contact_date": None,
|
||||||
|
"ends_on": None,
|
||||||
|
"contact_by": None
|
||||||
|
})
|
||||||
|
else:
|
||||||
|
self._prev = frappe.db.get_value("Lead", self.name, ["contact_date", "ends_on", "contact_by"], as_dict=1)
|
||||||
|
|
||||||
def before_insert(self):
|
def before_insert(self):
|
||||||
self.contact_doc = self.create_contact()
|
self.contact_doc = self.create_contact()
|
||||||
|
|
||||||
|
@ -23,6 +23,17 @@ class TestLead(unittest.TestCase):
|
|||||||
customer.customer_group = "_Test Customer Group"
|
customer.customer_group = "_Test Customer Group"
|
||||||
customer.insert()
|
customer.insert()
|
||||||
|
|
||||||
|
#check whether lead contact is carried forward to the customer.
|
||||||
|
contact = frappe.db.get_value('Dynamic Link', {
|
||||||
|
"parenttype": "Contact",
|
||||||
|
"link_doctype": "Lead",
|
||||||
|
"link_name": customer.lead_name,
|
||||||
|
}, "parent")
|
||||||
|
|
||||||
|
if contact:
|
||||||
|
contact_doc = frappe.get_doc("Contact", contact)
|
||||||
|
self.assertEqual(contact_doc.has_link(customer.doctype, customer.name), True)
|
||||||
|
|
||||||
def test_make_customer_from_organization(self):
|
def test_make_customer_from_organization(self):
|
||||||
from erpnext.crm.doctype.lead.lead import make_customer
|
from erpnext.crm.doctype.lead.lead import make_customer
|
||||||
|
|
||||||
|
@ -1,43 +0,0 @@
|
|||||||
QUnit.module("sales");
|
|
||||||
|
|
||||||
QUnit.test("test: lead", function (assert) {
|
|
||||||
assert.expect(4);
|
|
||||||
let done = assert.async();
|
|
||||||
let lead_name = frappe.utils.get_random(10);
|
|
||||||
frappe.run_serially([
|
|
||||||
// test lead creation
|
|
||||||
() => frappe.set_route("List", "Lead"),
|
|
||||||
() => frappe.new_doc("Lead"),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => cur_frm.set_value("lead_name", lead_name),
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.lead_name.includes(lead_name),
|
|
||||||
'name correctly set');
|
|
||||||
frappe.lead_name = cur_frm.doc.name;
|
|
||||||
},
|
|
||||||
// create address and contact
|
|
||||||
() => frappe.click_link('Address & Contact'),
|
|
||||||
() => frappe.click_button('New Address'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.set_control('address_line1', 'Gateway'),
|
|
||||||
() => frappe.set_control('city', 'Mumbai'),
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.timeout(3),
|
|
||||||
() => assert.equal(frappe.get_route()[1], 'Lead',
|
|
||||||
'back to lead form'),
|
|
||||||
() => frappe.click_link('Address & Contact'),
|
|
||||||
() => assert.ok($('.address-box').text().includes('Mumbai'),
|
|
||||||
'city is seen in address box'),
|
|
||||||
|
|
||||||
// make opportunity
|
|
||||||
() => frappe.click_button('Make'),
|
|
||||||
() => frappe.click_link('Opportunity'),
|
|
||||||
() => frappe.timeout(2),
|
|
||||||
() => assert.equal(cur_frm.doc.lead, frappe.lead_name,
|
|
||||||
'lead name correctly mapped'),
|
|
||||||
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,55 +0,0 @@
|
|||||||
QUnit.module("sales");
|
|
||||||
|
|
||||||
QUnit.test("test: lead", function (assert) {
|
|
||||||
assert.expect(5);
|
|
||||||
let done = assert.async();
|
|
||||||
let lead_name = frappe.utils.get_random(10);
|
|
||||||
frappe.run_serially([
|
|
||||||
// test lead creation
|
|
||||||
() => frappe.set_route("List", "Lead"),
|
|
||||||
() => frappe.new_doc("Lead"),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => cur_frm.set_value("company_name", lead_name),
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.lead_name.includes(lead_name),
|
|
||||||
'name correctly set');
|
|
||||||
frappe.lead_name = cur_frm.doc.name;
|
|
||||||
},
|
|
||||||
// create address and contact
|
|
||||||
() => frappe.click_link('Address & Contact'),
|
|
||||||
() => frappe.click_button('New Address'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.set_control('address_line1', 'Gateway'),
|
|
||||||
() => frappe.set_control('city', 'Mumbai'),
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.timeout(3),
|
|
||||||
() => assert.equal(frappe.get_route()[1], 'Lead',
|
|
||||||
'back to lead form'),
|
|
||||||
() => frappe.click_link('Address & Contact'),
|
|
||||||
() => assert.ok($('.address-box').text().includes('Mumbai'),
|
|
||||||
'city is seen in address box'),
|
|
||||||
|
|
||||||
() => frappe.click_button('New Contact'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.set_control('first_name', 'John'),
|
|
||||||
() => frappe.set_control('last_name', 'Doe'),
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.timeout(3),
|
|
||||||
() => frappe.set_route('Form', 'Lead', cur_frm.doc.links[0].link_name),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.click_link('Address & Contact'),
|
|
||||||
() => assert.ok($('.address-box').text().includes('John'),
|
|
||||||
'contact is seen in contact box'),
|
|
||||||
|
|
||||||
// make customer
|
|
||||||
() => frappe.click_button('Make'),
|
|
||||||
() => frappe.click_link('Customer'),
|
|
||||||
() => frappe.timeout(2),
|
|
||||||
() => assert.equal(cur_frm.doc.lead_name, frappe.lead_name,
|
|
||||||
'lead name correctly mapped'),
|
|
||||||
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,56 +0,0 @@
|
|||||||
QUnit.test("test: opportunity", function (assert) {
|
|
||||||
assert.expect(8);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => frappe.set_route('List', 'Opportunity'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.click_button('New'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => cur_frm.set_value('opportunity_from', 'Customer'),
|
|
||||||
() => cur_frm.set_value('customer', 'Test Customer 1'),
|
|
||||||
|
|
||||||
// check items
|
|
||||||
() => cur_frm.set_value('with_items', 1),
|
|
||||||
() => frappe.tests.set_grid_values(cur_frm, 'items', [
|
|
||||||
[
|
|
||||||
{item_code:'Test Product 1'},
|
|
||||||
{qty: 4}
|
|
||||||
]
|
|
||||||
]),
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
assert.notOk(cur_frm.is_new(), 'saved');
|
|
||||||
frappe.opportunity_name = cur_frm.doc.name;
|
|
||||||
},
|
|
||||||
|
|
||||||
// close and re-open
|
|
||||||
() => frappe.click_button('Close'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => assert.equal(cur_frm.doc.status, 'Closed',
|
|
||||||
'closed'),
|
|
||||||
|
|
||||||
() => frappe.click_button('Reopen'),
|
|
||||||
() => assert.equal(cur_frm.doc.status, 'Open',
|
|
||||||
'reopened'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
|
|
||||||
// make quotation
|
|
||||||
() => frappe.click_button('Make'),
|
|
||||||
() => frappe.click_link('Quotation', 1),
|
|
||||||
() => frappe.timeout(2),
|
|
||||||
() => {
|
|
||||||
assert.equal(frappe.get_route()[1], 'Quotation',
|
|
||||||
'made quotation');
|
|
||||||
assert.equal(cur_frm.doc.customer, 'Test Customer 1',
|
|
||||||
'customer set in quotation');
|
|
||||||
assert.equal(cur_frm.doc.items[0].item_code, 'Test Product 1',
|
|
||||||
'item set in quotation');
|
|
||||||
assert.equal(cur_frm.doc.items[0].qty, 4,
|
|
||||||
'qty set in quotation');
|
|
||||||
assert.equal(cur_frm.doc.items[0].prevdoc_docname, frappe.opportunity_name,
|
|
||||||
'opportunity set in quotation');
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,24 +0,0 @@
|
|||||||
// Testing Setup Module in Education
|
|
||||||
QUnit.module('education');
|
|
||||||
|
|
||||||
QUnit.test('Test: Academic Term', function(assert){
|
|
||||||
assert.expect(4);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Academic Term', [
|
|
||||||
{academic_year: '2016-17'},
|
|
||||||
{term_name: "Semester 1"},
|
|
||||||
{term_start_date: '2016-07-20'},
|
|
||||||
{term_end_date:'2017-06-20'},
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.academic_year=='2016-17');
|
|
||||||
assert.ok(cur_frm.doc.term_name=='Semester 1');
|
|
||||||
assert.ok(cur_frm.doc.term_start_date=='2016-07-20');
|
|
||||||
assert.ok(cur_frm.doc.term_end_date=='2017-06-20');
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,16 +0,0 @@
|
|||||||
// Education Assessment module
|
|
||||||
QUnit.module('education');
|
|
||||||
|
|
||||||
QUnit.test('Test: Assessment Criteria', function(assert){
|
|
||||||
assert.expect(0);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Assessment Criteria', [
|
|
||||||
{assessment_criteria: 'Pass'},
|
|
||||||
{assessment_criteria_group: 'Reservation'}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,15 +0,0 @@
|
|||||||
// Education Assessment module
|
|
||||||
QUnit.module('education');
|
|
||||||
|
|
||||||
QUnit.test('Test: Assessment Criteria Group', function(assert){
|
|
||||||
assert.expect(0);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Assessment Criteria Group', [
|
|
||||||
{assessment_criteria_group: 'Reservation'}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,65 +0,0 @@
|
|||||||
// Education Assessment module
|
|
||||||
QUnit.module('education');
|
|
||||||
|
|
||||||
QUnit.test('Test: Assessment Group', function(assert){
|
|
||||||
assert.expect(4);
|
|
||||||
let done = assert.async();
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
() => frappe.set_route('Tree', 'Assessment Group'),
|
|
||||||
|
|
||||||
// Checking adding child without selecting any Node
|
|
||||||
() => frappe.tests.click_button('New'),
|
|
||||||
() => frappe.timeout(0.2),
|
|
||||||
() => {assert.equal($(`.msgprint`).text(), "Select a group node first.", "Error message success");},
|
|
||||||
() => frappe.tests.click_button('Close'),
|
|
||||||
() => frappe.timeout(0.2),
|
|
||||||
|
|
||||||
// Creating child nodes
|
|
||||||
() => frappe.tests.click_link('All Assessment Groups'),
|
|
||||||
() => frappe.map_group.make('Assessment-group-1'),
|
|
||||||
() => frappe.map_group.make('Assessment-group-4', "All Assessment Groups", 1),
|
|
||||||
() => frappe.tests.click_link('Assessment-group-4'),
|
|
||||||
() => frappe.map_group.make('Assessment-group-5', "Assessment-group-3", 0),
|
|
||||||
|
|
||||||
// Checking Edit button
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => frappe.tests.click_link('Assessment-group-1'),
|
|
||||||
() => frappe.tests.click_button('Edit'),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => {assert.deepEqual(frappe.get_route(), ["Form", "Assessment Group", "Assessment-group-1"], "Edit route checks");},
|
|
||||||
|
|
||||||
// Deleting child Node
|
|
||||||
() => frappe.set_route('Tree', 'Assessment Group'),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => frappe.tests.click_link('Assessment-group-1'),
|
|
||||||
() => frappe.tests.click_button('Delete'),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
|
|
||||||
// Checking Collapse and Expand button
|
|
||||||
() => frappe.timeout(2),
|
|
||||||
() => frappe.tests.click_link('Assessment-group-4'),
|
|
||||||
() => frappe.click_button('Collapse'),
|
|
||||||
() => frappe.tests.click_link('All Assessment Groups'),
|
|
||||||
() => frappe.click_button('Collapse'),
|
|
||||||
() => {assert.ok($('.opened').size() == 0, 'Collapsed');},
|
|
||||||
() => frappe.click_button('Expand'),
|
|
||||||
() => {assert.ok($('.opened').size() > 0, 'Expanded');},
|
|
||||||
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
||||||
|
|
||||||
frappe.map_group = {
|
|
||||||
make:function(assessment_group_name, parent_assessment_group = 'All Assessment Groups', is_group = 0){
|
|
||||||
return frappe.run_serially([
|
|
||||||
() => frappe.click_button('Add Child'),
|
|
||||||
() => frappe.timeout(0.2),
|
|
||||||
() => cur_dialog.set_value('is_group', is_group),
|
|
||||||
() => cur_dialog.set_value('assessment_group_name', assessment_group_name),
|
|
||||||
() => cur_dialog.set_value('parent_assessment_group', parent_assessment_group),
|
|
||||||
() => frappe.click_button('Create New'),
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
};
|
|
@ -1,54 +0,0 @@
|
|||||||
// Testing Assessment Module in education
|
|
||||||
QUnit.module('education');
|
|
||||||
|
|
||||||
QUnit.test('Test: Assessment Plan', function(assert){
|
|
||||||
assert.expect(6);
|
|
||||||
let done = assert.async();
|
|
||||||
let room_name, instructor_name, assessment_name;
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
() => frappe.db.get_value('Room', {'room_name': 'Room 1'}, 'name'),
|
|
||||||
(room) => {room_name = room.message.name;}, // Fetching Room name
|
|
||||||
() => frappe.db.get_value('Instructor', {'instructor_name': 'Instructor 1'}, 'name'),
|
|
||||||
(instructor) => {instructor_name = instructor.message.name;}, // Fetching Instructor name
|
|
||||||
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Assessment Plan', [
|
|
||||||
{assessment_name: "Test-Mid-Term"},
|
|
||||||
{assessment_group: 'Assessment-group-5'},
|
|
||||||
{maximum_assessment_score: 100},
|
|
||||||
{student_group: 'test-course-wise-group-2'},
|
|
||||||
{course: 'Test_Sub'},
|
|
||||||
{grading_scale: 'GTU'},
|
|
||||||
{schedule_date: frappe.datetime.nowdate()},
|
|
||||||
{room: room_name},
|
|
||||||
{examiner: instructor_name},
|
|
||||||
{supervisor: instructor_name},
|
|
||||||
{from_time: "12:30:00"},
|
|
||||||
{to_time: "2:30:00"}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
|
|
||||||
() => {
|
|
||||||
assessment_name = cur_frm.doc.name; // Storing the name of current Assessment Plan
|
|
||||||
assert.equal(cur_frm.doc.assessment_criteria[0].assessment_criteria, 'Pass', 'Assessment Criteria auto-filled correctly');
|
|
||||||
assert.equal(cur_frm.doc.assessment_criteria[0].maximum_score, 100, 'Maximum score correctly set');
|
|
||||||
}, // Checking if the table was auto-filled upon selecting appropriate fields
|
|
||||||
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => {assert.equal(cur_frm.doc.docstatus, 1, "Assessment Plan submitted successfully");},
|
|
||||||
|
|
||||||
() => frappe.click_button('Assessment Result'), // Checking out Assessment Result button option
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => {
|
|
||||||
assert.deepEqual(frappe.get_route(), ["Form", "Assessment Result Tool"], 'Assessment Result properly linked');
|
|
||||||
assert.equal(cur_frm.doc.assessment_plan, assessment_name, 'Assessment correctly set');
|
|
||||||
assert.equal(cur_frm.doc.student_group, 'test-course-wise-group-2', 'Course for Assessment correctly set');
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,73 +0,0 @@
|
|||||||
// Education Assessment module
|
|
||||||
QUnit.module('education');
|
|
||||||
|
|
||||||
QUnit.test('Test: Assessment Result', function(assert){
|
|
||||||
assert.expect(25);
|
|
||||||
let done = assert.async();
|
|
||||||
let student_list = [];
|
|
||||||
let assessment_name;
|
|
||||||
let tasks = []
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
// Saving Assessment Plan name
|
|
||||||
() => frappe.db.get_value('Assessment Plan', {'assessment_name': 'Test-Mid-Term'}, 'name'),
|
|
||||||
(assessment_plan) => {assessment_name = assessment_plan.message.name;},
|
|
||||||
// Fetching list of Student for which Result is supposed to be set
|
|
||||||
() => frappe.set_route('Form', 'Assessment Plan', assessment_name),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.tests.click_button('Assessment Result'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => cur_frm.refresh(),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
$("tbody tr").each( function(i, input){
|
|
||||||
student_list.push($(input).data().student);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
// Looping through each student in the list and setting up their score
|
|
||||||
() => {
|
|
||||||
student_list.forEach(index => {
|
|
||||||
tasks.push(
|
|
||||||
() => frappe.set_route('List', 'Assessment Result', 'List'),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => frappe.tests.click_button('New'),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => cur_frm.set_value('student', index),
|
|
||||||
() => cur_frm.set_value('assessment_plan', assessment_name),
|
|
||||||
() => frappe.timeout(0.2),
|
|
||||||
() => cur_frm.doc.details[0].score = (39 + (15 * student_list.indexOf(index))),
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
|
|
||||||
() => frappe.db.get_value('Assessment Plan', {'name': 'ASP00001'}, ['grading_scale', 'maximum_assessment_score']),
|
|
||||||
(assessment_plan) => {
|
|
||||||
assert.equal(cur_frm.doc.grading_scale, assessment_plan.message.grading_scale, 'Grading scale correctly fetched');
|
|
||||||
assert.equal(cur_frm.doc.maximum_score, assessment_plan.message.maximum_assessment_score, 'Maximum score correctly fetched');
|
|
||||||
|
|
||||||
frappe.call({
|
|
||||||
method: "erpnext.education.api.get_grade",
|
|
||||||
args: {
|
|
||||||
"grading_scale": assessment_plan.message.grading_scale,
|
|
||||||
"percentage": cur_frm.doc.total_score
|
|
||||||
},
|
|
||||||
callback: function(r){
|
|
||||||
assert.equal(cur_frm.doc.grade, r.message, "Grade correctly calculated");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => {assert.equal();},
|
|
||||||
() => {assert.equal(cur_frm.doc.docstatus, 1, "Submitted successfully");},
|
|
||||||
);
|
|
||||||
});
|
|
||||||
return frappe.run_serially(tasks);
|
|
||||||
},
|
|
||||||
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,29 +0,0 @@
|
|||||||
// Education Assessment module
|
|
||||||
QUnit.module('education');
|
|
||||||
|
|
||||||
QUnit.test('Test: Assessment Result Tool', function(assert){
|
|
||||||
assert.expect(1);
|
|
||||||
let done = assert.async();
|
|
||||||
let i, count = 0, assessment_name;
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
// Saving Assessment Plan name
|
|
||||||
() => frappe.db.get_value('Assessment Plan', {'assessment_name': 'Test-Mid-Term'}, 'name'),
|
|
||||||
(assessment_plan) => {assessment_name = assessment_plan.message.name;},
|
|
||||||
|
|
||||||
() => frappe.set_route('Form', 'Assessment Plan', assessment_name),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.tests.click_button('Assessment Result'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => cur_frm.refresh(),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
for(i = 2; i < $('tbody tr').size() * 4; i = (i + 4)){
|
|
||||||
if(($(`tbody td:eq("${i}")`) != "") && ($(`tbody td:eq("${i+1}")`) != ""))
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
assert.equal($('tbody tr').size(), count, 'All grades correctly displayed');
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,36 +0,0 @@
|
|||||||
// Testing Setup Module in education
|
|
||||||
QUnit.module('education');
|
|
||||||
|
|
||||||
QUnit.test('test course', function(assert) {
|
|
||||||
assert.expect(8);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Course', [
|
|
||||||
{course_name: 'Test_Subject'},
|
|
||||||
{course_code: 'Test_Sub'},
|
|
||||||
{department: 'Test Department'},
|
|
||||||
{course_abbreviation: 'Test_Sub'},
|
|
||||||
{course_intro: 'Test Subject Intro'},
|
|
||||||
{default_grading_scale: 'GTU'},
|
|
||||||
{assessment_criteria: [
|
|
||||||
[
|
|
||||||
{assessment_criteria: 'Pass'},
|
|
||||||
{weightage: 100}
|
|
||||||
]
|
|
||||||
]}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.course_name == 'Test_Subject', 'Course name correctly set');
|
|
||||||
assert.ok(cur_frm.doc.course_code == 'Test_Sub', 'Course code correctly set');
|
|
||||||
assert.ok(cur_frm.doc.department == 'Test Department', 'Department selected correctly');
|
|
||||||
assert.ok(cur_frm.doc.course_abbreviation == 'Test_Sub');
|
|
||||||
assert.ok(cur_frm.doc.course_intro == 'Test Subject Intro');
|
|
||||||
assert.ok(cur_frm.doc.default_grading_scale == 'GTU', 'Grading scale selected correctly');
|
|
||||||
assert.ok(cur_frm.doc.assessment_criteria[0].assessment_criteria == 'Pass', 'Assessment criteria selected correctly');
|
|
||||||
assert.ok(cur_frm.doc.assessment_criteria[0].weightage == '100');
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,31 +0,0 @@
|
|||||||
/* eslint-disable */
|
|
||||||
// rename this file from _test_[name] to test_[name] to activate
|
|
||||||
// and remove above this line
|
|
||||||
|
|
||||||
// Testing Setup Module in Education
|
|
||||||
QUnit.module('education');
|
|
||||||
|
|
||||||
QUnit.test("test: Education Settings", function (assert) {
|
|
||||||
let done = assert.async();
|
|
||||||
|
|
||||||
assert.expect(3);
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
() => frappe.set_route("List", "Education Settings"),
|
|
||||||
() => frappe.timeout(0.4),
|
|
||||||
() => {
|
|
||||||
return frappe.tests.set_form_values(cur_frm, [
|
|
||||||
{current_academic_year: '2016-17'},
|
|
||||||
{current_academic_term: '2016-17 (Semester 1)'},
|
|
||||||
{attendance_freeze_date: '2016-07-20'}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => {
|
|
||||||
cur_frm.save();
|
|
||||||
assert.ok(cur_frm.doc.current_academic_year=="2016-17");
|
|
||||||
assert.ok(cur_frm.doc.current_academic_term=="2016-17 (Semester 1)");
|
|
||||||
assert.ok(cur_frm.doc.attendance_freeze_date=="2016-07-20");
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,31 +0,0 @@
|
|||||||
/* eslint-disable */
|
|
||||||
// rename this file from _test_[name] to test_[name] to activate
|
|
||||||
// and remove above this line
|
|
||||||
|
|
||||||
QUnit.test("test: Fees", function (assert) {
|
|
||||||
let done = assert.async();
|
|
||||||
|
|
||||||
// number of asserts
|
|
||||||
assert.expect(1);
|
|
||||||
|
|
||||||
frappe.run_serially('Fees', [
|
|
||||||
|
|
||||||
// insert a new Fees
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Fees', [
|
|
||||||
{student: 'STUD00001'},
|
|
||||||
{due_date: frappe.datetime.get_today()},
|
|
||||||
{fee_structure: 'FS00001'}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => {
|
|
||||||
assert.equal(cur_frm.doc.grand_total===cur_frm.doc.outstanding_amount);
|
|
||||||
},
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
|
|
||||||
});
|
|
@ -1,102 +0,0 @@
|
|||||||
// Education Assessment module
|
|
||||||
QUnit.module('education');
|
|
||||||
|
|
||||||
QUnit.test('Test: Grading Scale', function(assert){
|
|
||||||
assert.expect(3);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Grading Scale', [
|
|
||||||
{grading_scale_name: 'GTU'},
|
|
||||||
{description: 'The score will be set according to 100 based system.'},
|
|
||||||
{intervals: [
|
|
||||||
[
|
|
||||||
{grade_code: 'AA'},
|
|
||||||
{threshold: '95'},
|
|
||||||
{grade_description: 'First Class + Distinction'}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{grade_code: 'AB'},
|
|
||||||
{threshold: '90'},
|
|
||||||
{grade_description: 'First Class'}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{grade_code: 'BB'},
|
|
||||||
{threshold: '80'},
|
|
||||||
{grade_description: 'Distinction'}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{grade_code: 'BC'},
|
|
||||||
{threshold: '70'},
|
|
||||||
{grade_description: 'Second Class'}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{grade_code: 'CC'},
|
|
||||||
{threshold: '60'},
|
|
||||||
{grade_description: 'Third Class'}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{grade_code: 'CD'},
|
|
||||||
{threshold: '50'},
|
|
||||||
{grade_description: 'Average'}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{grade_code: 'DD'},
|
|
||||||
{threshold: '40'},
|
|
||||||
{grade_description: 'Pass'}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{grade_code: 'FF'},
|
|
||||||
{threshold: '0'},
|
|
||||||
{grade_description: 'Fail'}
|
|
||||||
],
|
|
||||||
]}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Grading Scale', [
|
|
||||||
{grading_scale_name: 'GTU-2'},
|
|
||||||
{description: 'The score will be set according to 100 based system.'},
|
|
||||||
{intervals: [
|
|
||||||
[
|
|
||||||
{grade_code: 'AA'},
|
|
||||||
{threshold: '90'},
|
|
||||||
{grade_description: 'Distinction'}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{grade_code: 'FF'},
|
|
||||||
{threshold: '0'},
|
|
||||||
{grade_description: 'Fail'}
|
|
||||||
]
|
|
||||||
]}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
|
|
||||||
() => {
|
|
||||||
let grading_scale = ['GTU', 'GTU-2'];
|
|
||||||
let tasks = [];
|
|
||||||
grading_scale.forEach(index => {
|
|
||||||
tasks.push(
|
|
||||||
() => frappe.set_route('Form', 'Grading Scale', index),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => {assert.equal(cur_frm.doc.docstatus, 1, 'Submitted successfully');}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
return frappe.run_serially(tasks);
|
|
||||||
},
|
|
||||||
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.set_route('Form', 'Grading Scale','GTU-2'),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => frappe.tests.click_button('Cancel'),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => {assert.equal(cur_frm.doc.docstatus, 2, 'Cancelled successfully');},
|
|
||||||
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,34 +0,0 @@
|
|||||||
// Testing Student Module in education
|
|
||||||
QUnit.module('education');
|
|
||||||
|
|
||||||
QUnit.test('Test: Guardian', function(assert){
|
|
||||||
assert.expect(9);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Guardian', [
|
|
||||||
{guardian_name: 'Test Guardian'},
|
|
||||||
{email_address: 'guardian@testmail.com'},
|
|
||||||
{mobile_number: 9898980000},
|
|
||||||
{alternate_number: 8989890000},
|
|
||||||
{date_of_birth: '1982-07-22'},
|
|
||||||
{education: 'Testing'},
|
|
||||||
{occupation: 'Testing'},
|
|
||||||
{designation: 'Testing'},
|
|
||||||
{work_address: 'Testing address'}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.guardian_name == 'Test Guardian');
|
|
||||||
assert.ok(cur_frm.doc.email_address == 'guardian@testmail.com');
|
|
||||||
assert.ok(cur_frm.doc.mobile_number == 9898980000);
|
|
||||||
assert.ok(cur_frm.doc.alternate_number == 8989890000);
|
|
||||||
assert.ok(cur_frm.doc.date_of_birth == '1982-07-22');
|
|
||||||
assert.ok(cur_frm.doc.education == 'Testing');
|
|
||||||
assert.ok(cur_frm.doc.occupation == 'Testing');
|
|
||||||
assert.ok(cur_frm.doc.designation == 'Testing');
|
|
||||||
assert.ok(cur_frm.doc.work_address == 'Testing address');
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,20 +0,0 @@
|
|||||||
// Testing Setup Module in education
|
|
||||||
QUnit.module('education');
|
|
||||||
|
|
||||||
QUnit.test('Test: Instructor', function(assert){
|
|
||||||
assert.expect(2);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make("Instructor", [
|
|
||||||
{instructor_name: 'Instructor 1'},
|
|
||||||
{department: 'Test Department'}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.instructor_name == 'Instructor 1');
|
|
||||||
assert.ok(cur_frm.doc.department = 'Test Department');
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,34 +0,0 @@
|
|||||||
// Testing Setup Module in education
|
|
||||||
QUnit.module('education');
|
|
||||||
|
|
||||||
QUnit.test('Test: Program', function(assert){
|
|
||||||
assert.expect(6);
|
|
||||||
let done = assert.async();
|
|
||||||
let fee_structure_code;
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Program', [
|
|
||||||
{program_name: 'Standard Test'},
|
|
||||||
{program_code: 'Standard Test'},
|
|
||||||
{department: 'Test Department'},
|
|
||||||
{program_abbreviation: 'Standard Test'},
|
|
||||||
{courses: [
|
|
||||||
[
|
|
||||||
{course: 'Test_Sub'},
|
|
||||||
{required: true}
|
|
||||||
]
|
|
||||||
]}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.program_name == 'Standard Test');
|
|
||||||
assert.ok(cur_frm.doc.program_code == 'Standard Test');
|
|
||||||
assert.ok(cur_frm.doc.department == 'Test Department');
|
|
||||||
assert.ok(cur_frm.doc.program_abbreviation == 'Standard Test');
|
|
||||||
assert.ok(cur_frm.doc.courses[0].course == 'Test_Sub');
|
|
||||||
assert.ok(cur_frm.doc.courses[0].required == true);
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,22 +0,0 @@
|
|||||||
// Testing Setup Module in Education
|
|
||||||
QUnit.module('education');
|
|
||||||
|
|
||||||
QUnit.test('Test: Room', function(assert){
|
|
||||||
assert.expect(3);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Room', [
|
|
||||||
{room_name: 'Room 1'},
|
|
||||||
{room_number: '1'},
|
|
||||||
{seating_capacity: '60'},
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.room_name == 'Room 1');
|
|
||||||
assert.ok(cur_frm.doc.room_number = '1');
|
|
||||||
assert.ok(cur_frm.doc.seating_capacity = '60');
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,40 +0,0 @@
|
|||||||
// Testing Admission Module in Education
|
|
||||||
QUnit.module('education');
|
|
||||||
|
|
||||||
QUnit.test('Test: Student Admission', function(assert) {
|
|
||||||
assert.expect(10);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Student Admission', [
|
|
||||||
{academic_year: '2016-17'},
|
|
||||||
{admission_start_date: '2016-04-20'},
|
|
||||||
{admission_end_date: '2016-05-31'},
|
|
||||||
{title: '2016-17 Admissions'},
|
|
||||||
{enable_admission_application: 1},
|
|
||||||
{introduction: 'Test intro'},
|
|
||||||
{program_details: [
|
|
||||||
[
|
|
||||||
{'program': 'Standard Test'},
|
|
||||||
{'application_fee': 1000},
|
|
||||||
{'applicant_naming_series': 'AP'},
|
|
||||||
]
|
|
||||||
]}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.academic_year == '2016-17');
|
|
||||||
assert.ok(cur_frm.doc.admission_start_date == '2016-04-20');
|
|
||||||
assert.ok(cur_frm.doc.admission_end_date == '2016-05-31');
|
|
||||||
assert.ok(cur_frm.doc.title == '2016-17 Admissions');
|
|
||||||
assert.ok(cur_frm.doc.enable_admission_application == 1);
|
|
||||||
assert.ok(cur_frm.doc.introduction == 'Test intro');
|
|
||||||
assert.ok(cur_frm.doc.program_details[0].program == 'Standard Test', 'Program correctly selected');
|
|
||||||
assert.ok(cur_frm.doc.program_details[0].application_fee == 1000);
|
|
||||||
assert.ok(cur_frm.doc.program_details[0].applicant_naming_series == 'AP');
|
|
||||||
assert.ok(cur_frm.doc.route == 'admissions/2016-17-Admissions', "Route successfully set");
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,95 +0,0 @@
|
|||||||
// Testing Admission module in Education
|
|
||||||
QUnit.module('education');
|
|
||||||
|
|
||||||
QUnit.test('Test: Student Applicant', function(assert){
|
|
||||||
assert.expect(24);
|
|
||||||
let done = assert.async();
|
|
||||||
let guradian_auto_code;
|
|
||||||
let guardian_name;
|
|
||||||
frappe.run_serially([
|
|
||||||
() => frappe.set_route('List', 'Guardian'),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => {$(`a:contains("Test Guardian"):visible`)[0].click();},
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
guardian_name = cur_frm.doc.guardian_name;
|
|
||||||
guradian_auto_code = frappe.get_route()[2];
|
|
||||||
},
|
|
||||||
// Testing data entry for Student Applicant
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Student Applicant',[
|
|
||||||
{first_name: 'Fname'},
|
|
||||||
{middle_name: 'Mname'},
|
|
||||||
{last_name: 'Lname'},
|
|
||||||
{program: 'Standard Test'},
|
|
||||||
{student_admission: '2016-17 Admissions'},
|
|
||||||
{academic_year: '2016-17'},
|
|
||||||
{date_of_birth: '1995-07-20'},
|
|
||||||
{student_email_id: 'test@testmail.com'},
|
|
||||||
{gender: 'Male'},
|
|
||||||
{student_mobile_number: '9898980000'},
|
|
||||||
{blood_group: 'O+'},
|
|
||||||
{address_line_1: 'Test appt, Test Society,'},
|
|
||||||
{address_line_2: 'Test district, Test city.'},
|
|
||||||
{city: 'Test'},
|
|
||||||
{state: 'Test'},
|
|
||||||
{pincode: '400086'}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
// Entry in Guardian child table
|
|
||||||
() => $('a:contains("Guardian Details"):visible').click(),
|
|
||||||
() => $('.btn:contains("Add Row"):visible').click(),
|
|
||||||
() => {
|
|
||||||
cur_frm.get_field("guardians").grid.grid_rows[0].doc.guardian = guradian_auto_code;
|
|
||||||
cur_frm.get_field("guardians").grid.grid_rows[0].doc.relation = "Father";
|
|
||||||
cur_frm.get_field("guardians").grid.grid_rows[0].doc.guardian_name = guardian_name;
|
|
||||||
$('a:contains("Guardian Details"):visible').click();
|
|
||||||
},
|
|
||||||
// Entry in Sibling child table
|
|
||||||
() => $('a:contains("Sibling Details"):visible').click(),
|
|
||||||
() => $('.btn:contains("Add Row"):visible').click(),
|
|
||||||
() => {
|
|
||||||
cur_frm.get_field("siblings").grid.grid_rows[0].doc.full_name = "Test Name";
|
|
||||||
cur_frm.get_field("siblings").grid.grid_rows[0].doc.gender = "Male";
|
|
||||||
cur_frm.get_field("siblings").grid.grid_rows[0].doc.institution = "Test Institution";
|
|
||||||
cur_frm.get_field("siblings").grid.grid_rows[0].doc.program = "Test Program";
|
|
||||||
cur_frm.get_field("siblings").grid.grid_rows[0].doc.date_of_birth = "1995-07-20";
|
|
||||||
$('span.hidden-xs.octicon.octicon-triangle-up').click();
|
|
||||||
cur_frm.save();
|
|
||||||
},
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.first_name == 'Fname');
|
|
||||||
assert.ok(cur_frm.doc.middle_name == 'Mname');
|
|
||||||
assert.ok(cur_frm.doc.last_name == 'Lname');
|
|
||||||
assert.ok(cur_frm.doc.program == 'Standard Test', 'Program selected correctly');
|
|
||||||
assert.ok(cur_frm.doc.student_admission == '2016-17 Admissions', 'Student Admission entry correctly selected');
|
|
||||||
assert.ok(cur_frm.doc.academic_year == '2016-17');
|
|
||||||
assert.ok(cur_frm.doc.date_of_birth == '1995-07-20');
|
|
||||||
assert.ok(cur_frm.doc.student_email_id == 'test@testmail.com');
|
|
||||||
assert.ok(cur_frm.doc.gender == 'Male');
|
|
||||||
assert.ok(cur_frm.doc.student_mobile_number == '9898980000');
|
|
||||||
assert.ok(cur_frm.doc.blood_group == 'O+');
|
|
||||||
assert.ok(cur_frm.doc.address_line_1 == 'Test appt, Test Society,');
|
|
||||||
assert.ok(cur_frm.doc.address_line_2 == 'Test district, Test city.');
|
|
||||||
assert.ok(cur_frm.doc.city == 'Test');
|
|
||||||
assert.ok(cur_frm.doc.state == 'Test');
|
|
||||||
assert.ok(cur_frm.doc.pincode == '400086');
|
|
||||||
},
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => $('a:contains("Guardian Details"):visible').click(),
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.get_field("guardians").grid.grid_rows[0].doc.guardian == guradian_auto_code, 'Guardian correctly selected from dropdown');
|
|
||||||
assert.ok(cur_frm.get_field("guardians").grid.grid_rows[0].doc.relation == 'Father');
|
|
||||||
assert.ok(cur_frm.get_field("guardians").grid.grid_rows[0].doc.guardian_name == guardian_name, 'Guardian name was correctly retrieved');
|
|
||||||
},
|
|
||||||
() => $('a:contains("Sibling Details"):visible').click(),
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.get_field("siblings").grid.grid_rows[0].doc.full_name == 'Test Name');
|
|
||||||
assert.ok(cur_frm.get_field("siblings").grid.grid_rows[0].doc.gender == 'Male');
|
|
||||||
assert.ok(cur_frm.get_field("siblings").grid.grid_rows[0].doc.institution == 'Test Institution');
|
|
||||||
assert.ok(cur_frm.get_field("siblings").grid.grid_rows[0].doc.program == 'Test Program');
|
|
||||||
assert.ok(cur_frm.get_field("siblings").grid.grid_rows[0].doc.date_of_birth == '1995-07-20');
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,87 +0,0 @@
|
|||||||
QUnit.module('Admission');
|
|
||||||
|
|
||||||
QUnit.test('Make Students', function(assert){
|
|
||||||
assert.expect(0);
|
|
||||||
let done = assert.async();
|
|
||||||
let tasks = [];
|
|
||||||
let loop = [1,2,3,4];
|
|
||||||
let fname;
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
// Making School House to be used in this test and later
|
|
||||||
() => frappe.set_route('Form', 'School House/New School House'),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => cur_frm.doc.house_name = 'Test_house',
|
|
||||||
() => cur_frm.save(),
|
|
||||||
|
|
||||||
// Making Student Applicant entries
|
|
||||||
() => {
|
|
||||||
loop.forEach(index => {
|
|
||||||
tasks.push(() => {
|
|
||||||
fname = "Fname" + index;
|
|
||||||
|
|
||||||
return frappe.tests.make('Student Applicant', [
|
|
||||||
{first_name: fname},
|
|
||||||
{middle_name: "Mname"},
|
|
||||||
{last_name: "Lname"},
|
|
||||||
{program: "Standard Test"},
|
|
||||||
{student_admission: "2016-17 Admissions"},
|
|
||||||
{date_of_birth: '1995-08-20'},
|
|
||||||
{student_email_id: ('test' + (index+3) + '@testmail.com')},
|
|
||||||
{gender: 'Male'},
|
|
||||||
{student_mobile_number: (9898980000 + index)},
|
|
||||||
{blood_group: 'O+'},
|
|
||||||
{address_line_1: 'Test appt, Test Society,'},
|
|
||||||
{address_line_2: 'Test district, Test city.'},
|
|
||||||
{city: 'Test'},
|
|
||||||
{state: 'Test'},
|
|
||||||
{pincode: '395007'}
|
|
||||||
]);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
return frappe.run_serially(tasks);
|
|
||||||
},
|
|
||||||
|
|
||||||
// Using Program Enrollment Tool to enroll all dummy student at once
|
|
||||||
() => frappe.set_route('Form', 'Program Enrollment Tool'),
|
|
||||||
() => {
|
|
||||||
cur_frm.set_value("get_students_from", "Student Applicants");
|
|
||||||
cur_frm.set_value("academic_year", "2016-17");
|
|
||||||
cur_frm.set_value("program", "Standard Test");
|
|
||||||
},
|
|
||||||
() => frappe.tests.click_button("Get Students"),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.tests.click_button("Enroll Students"),
|
|
||||||
() => frappe.timeout(1.5),
|
|
||||||
() => frappe.tests.click_button("Close"),
|
|
||||||
|
|
||||||
// Submitting required data for each enrolled Student
|
|
||||||
() => {
|
|
||||||
tasks = [];
|
|
||||||
loop.forEach(index => {
|
|
||||||
tasks.push(
|
|
||||||
() => {fname = "Fname" + index + " Mname Lname";},
|
|
||||||
() => frappe.set_route('List', 'Program Enrollment/List'),
|
|
||||||
() => frappe.timeout(0.6),
|
|
||||||
() => frappe.tests.click_link(fname),
|
|
||||||
() => frappe.timeout(0.4),
|
|
||||||
() => {
|
|
||||||
cur_frm.set_value('program', 'Standard Test');
|
|
||||||
cur_frm.set_value('student_category', 'Reservation');
|
|
||||||
cur_frm.set_value('student_batch_name', 'A');
|
|
||||||
cur_frm.set_value('academic_year', '2016-17');
|
|
||||||
cur_frm.set_value('academic_term', '2016-17 (Semester 1)');
|
|
||||||
cur_frm.set_value('school_house', 'Test_house');
|
|
||||||
},
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(0.5)
|
|
||||||
);
|
|
||||||
});
|
|
||||||
return frappe.run_serially(tasks);
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,110 +0,0 @@
|
|||||||
// Testing Admission module in Education
|
|
||||||
QUnit.module('education');
|
|
||||||
|
|
||||||
QUnit.test('test student applicant', function(assert){
|
|
||||||
assert.expect(11);
|
|
||||||
let done = assert.async();
|
|
||||||
let testing_status;
|
|
||||||
frappe.run_serially([
|
|
||||||
() => frappe.set_route('List', 'Student Applicant'),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => {$(`a:contains("Fname Mname Lname"):visible`)[0].click();},
|
|
||||||
|
|
||||||
// Checking different options
|
|
||||||
// 1. Moving forward with Submit
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => {
|
|
||||||
testing_status = $('span.indicator.orange').text();
|
|
||||||
assert.ok(testing_status.indexOf('Submit this document to confirm') == -1); // checking if submit has been successfull
|
|
||||||
},
|
|
||||||
|
|
||||||
// 2. Cancelling the Submit request
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => frappe.tests.click_button('Cancel'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => {
|
|
||||||
testing_status = $('h1.editable-title').text();
|
|
||||||
assert.ok(testing_status.indexOf('Cancelled') != -1); // checking if cancel request has been successfull
|
|
||||||
},
|
|
||||||
|
|
||||||
// 3. Checking Amend option
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => frappe.tests.click_button('Amend'),
|
|
||||||
() => cur_frm.doc.student_email_id = "test2@testmail.com", // updating email id since same id again is not allowed
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'), // Submitting again after amend
|
|
||||||
() => {
|
|
||||||
testing_status = $('span.indicator.orange').text();
|
|
||||||
assert.ok(testing_status.indexOf('Submit this document to confirm') == -1); // checking if submit has been successfull after amend
|
|
||||||
},
|
|
||||||
|
|
||||||
// Checking different Application status option
|
|
||||||
() => {
|
|
||||||
testing_status = $('h1.editable-title').text();
|
|
||||||
assert.ok(testing_status.indexOf('Applied') != -1); // checking if Applied has been successfull
|
|
||||||
},
|
|
||||||
() => cur_frm.set_value('application_status', "Rejected"), // Rejected Status
|
|
||||||
() => frappe.tests.click_button('Update'),
|
|
||||||
() => {
|
|
||||||
testing_status = $('h1.editable-title').text();
|
|
||||||
assert.ok(testing_status.indexOf('Rejected') != -1); // checking if Rejected has been successfull
|
|
||||||
},
|
|
||||||
() => cur_frm.set_value('application_status', "Admitted"), // Admitted Status
|
|
||||||
() => frappe.tests.click_button('Update'),
|
|
||||||
() => {
|
|
||||||
testing_status = $('h1.editable-title').text();
|
|
||||||
assert.ok(testing_status.indexOf('Admitted') != -1); // checking if Admitted has been successfull
|
|
||||||
},
|
|
||||||
() => cur_frm.set_value('application_status', "Approved"), // Approved Status
|
|
||||||
() => frappe.tests.click_button('Update'),
|
|
||||||
() => {
|
|
||||||
testing_status = $('h1.editable-title').text();
|
|
||||||
assert.ok(testing_status.indexOf('Approved') != -1); // checking if Approved has been successfull
|
|
||||||
},
|
|
||||||
|
|
||||||
// Clicking on Enroll button should add the applicant's entry in Student doctype, and take you to Program Enrollment page
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => frappe.tests.click_button('Enroll'),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => {
|
|
||||||
assert.ok(frappe.get_route()[0] == 'Form'); // Checking if the current page is Program Enrollment page or not
|
|
||||||
assert.ok(frappe.get_route()[1] == 'Program Enrollment');
|
|
||||||
},
|
|
||||||
|
|
||||||
// Routing to Student List to check if the Applicant's entry has been made or not
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => frappe.set_route('List', 'Student'),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => {$(`a:contains("Fname Mname Lname"):visible`)[0].click();},
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => {assert.ok(($(`h1.editable-title`).text()).indexOf('Enabled') != -1, 'Student entry successfully created');}, // Checking if the Student entry has been enabled
|
|
||||||
// Enrolling the Student into a Program
|
|
||||||
() => {$('.form-documents .row:nth-child(1) .col-xs-6:nth-child(1) .octicon-plus').click();},
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => cur_frm.set_value('program', 'Standard Test'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
cur_frm.set_value('student_category', 'Reservation');
|
|
||||||
cur_frm.set_value('student_batch_name', 'A');
|
|
||||||
cur_frm.set_value('academic_year', '2016-17');
|
|
||||||
cur_frm.set_value('academic_term', '2016-17 (Semester 1)');
|
|
||||||
cur_frm.set_value('school_house', 'Test_house');
|
|
||||||
},
|
|
||||||
() => cur_frm.save(),
|
|
||||||
|
|
||||||
// Submitting Program Enrollment form for our Test Student
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.docstatus == 1, "Program enrollment successfully submitted");
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,31 +0,0 @@
|
|||||||
// Testing Attendance Module in Education
|
|
||||||
QUnit.module('education');
|
|
||||||
|
|
||||||
QUnit.test('Test: Student Attendance', function(assert){
|
|
||||||
assert.expect(2);
|
|
||||||
let done = assert.async();
|
|
||||||
let student_code;
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
() => frappe.db.get_value('Student', {'student_email_id': 'test2@testmail.com'}, 'name'),
|
|
||||||
(student) => {student_code = student.message.name;}, // fetching student code from db
|
|
||||||
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Student Attendance', [
|
|
||||||
{student: student_code},
|
|
||||||
{date: frappe.datetime.nowdate()},
|
|
||||||
{student_group: "test-batch-wise-group-2"},
|
|
||||||
{status: "Absent"}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => {assert.equal(cur_frm.doc.status, "Absent", "Attendance correctly saved");},
|
|
||||||
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => cur_frm.set_value("status", "Present"),
|
|
||||||
() => {assert.equal(cur_frm.doc.status, "Present", "Attendance correctly saved");},
|
|
||||||
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,85 +0,0 @@
|
|||||||
// Testing Attendance Module in Education
|
|
||||||
QUnit.module('education');
|
|
||||||
|
|
||||||
QUnit.test('Test: Student Attendace Tool', function(assert){
|
|
||||||
assert.expect(10);
|
|
||||||
let done = assert.async();
|
|
||||||
let i, count = 0;
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
() => frappe.timeout(0.2),
|
|
||||||
() => frappe.set_route('Form', 'Student Attendance Tool'),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
|
|
||||||
() => {
|
|
||||||
if(cur_frm.doc.based_on == 'Student Group' || cur_frm.doc.based_on == 'Course Schedule'){
|
|
||||||
cur_frm.doc.based_on = 'Student Group';
|
|
||||||
assert.equal(1, 1, 'Attendance basis correctly set');
|
|
||||||
cur_frm.set_value("group_based_on", 'Batch');
|
|
||||||
cur_frm.set_value("student_group", "test-batch-wise-group");
|
|
||||||
cur_frm.set_value("date", frappe.datetime.nowdate());
|
|
||||||
}
|
|
||||||
},
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => {
|
|
||||||
assert.equal($('input.students-check').size(), 5, "Student list based on batch correctly fetched");
|
|
||||||
assert.equal(frappe.datetime.nowdate(), cur_frm.doc.date, 'Current date correctly set');
|
|
||||||
|
|
||||||
cur_frm.set_value("student_group", "test-batch-wise-group-2");
|
|
||||||
assert.equal($('input.students-check').size(), 5, "Student list based on batch 2 correctly fetched");
|
|
||||||
|
|
||||||
cur_frm.set_value("group_based_on", 'Course');
|
|
||||||
|
|
||||||
cur_frm.set_value("student_group", "test-course-wise-group");
|
|
||||||
assert.equal($('input.students-check').size(), 5, "Student list based on course correctly fetched");
|
|
||||||
|
|
||||||
cur_frm.set_value("student_group", "test-course-wise-group-2");
|
|
||||||
assert.equal($('input.students-check').size(), 5, "Student list based on course 2 correctly fetched");
|
|
||||||
},
|
|
||||||
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.tests.click_button('Check all'), // Marking all Student as checked
|
|
||||||
() => {
|
|
||||||
for(i = 0; i < $('input.students-check').size(); i++){
|
|
||||||
if($('input.students-check')[i].checked == true)
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(count == $('input.students-check').size())
|
|
||||||
assert.equal($('input.students-check').size(), count, "All students marked checked");
|
|
||||||
},
|
|
||||||
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.tests.click_button('Uncheck all'), // Marking all Student as unchecked
|
|
||||||
() => {
|
|
||||||
count = 0;
|
|
||||||
for(i = 0; i < $('input.students-check').size(); i++){
|
|
||||||
if(!($('input.students-check')[i].checked))
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(count == $('input.students-check').size())
|
|
||||||
assert.equal($('input.students-check').size(), count, "All students marked checked");
|
|
||||||
},
|
|
||||||
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.tests.click_button('Check all'),
|
|
||||||
() => frappe.tests.click_button('Mark Attendance'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
assert.equal($('.msgprint').text(), "Attendance has been marked successfully.", "Attendance successfully marked");
|
|
||||||
frappe.tests.click_button('Close');
|
|
||||||
},
|
|
||||||
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.set_route('List', 'Student Attendance/List'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
assert.equal(cur_list.data.length, count, "Attendance list created");
|
|
||||||
},
|
|
||||||
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,19 +0,0 @@
|
|||||||
// Testing Setup Module in Education
|
|
||||||
QUnit.module('education');
|
|
||||||
|
|
||||||
QUnit.test('Test: Student Batch Name', function(assert){
|
|
||||||
assert.expect(1);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Student Batch Name', [
|
|
||||||
{batch_name: 'A'}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.batch_name=='A');
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,19 +0,0 @@
|
|||||||
// Testing Setup Module in Education
|
|
||||||
QUnit.module('education');
|
|
||||||
|
|
||||||
QUnit.test('Test: Student Category', function(assert){
|
|
||||||
assert.expect(1);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Student Category', [
|
|
||||||
{category: 'Reservation'}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.doc.name=='Reservation');
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,56 +0,0 @@
|
|||||||
// Testing Student Module in Education
|
|
||||||
QUnit.module('education');
|
|
||||||
|
|
||||||
QUnit.test('Test: Student Group', function(assert){
|
|
||||||
assert.expect(2);
|
|
||||||
let done = assert.async();
|
|
||||||
let group_based_on = ["test-batch-wise-group", "test-course-wise-group"];
|
|
||||||
let tasks = [];
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
// Creating a Batch and Course based group
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Student Group', [
|
|
||||||
{academic_year: '2016-17'},
|
|
||||||
{academic_term: '2016-17 (Semester 1)'},
|
|
||||||
{program: "Standard Test"},
|
|
||||||
{group_based_on: 'Batch'},
|
|
||||||
{student_group_name: group_based_on[0]},
|
|
||||||
{max_strength: 10},
|
|
||||||
{batch: 'A'}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Student Group', [
|
|
||||||
{academic_year: '2016-17'},
|
|
||||||
{academic_term: '2016-17 (Semester 1)'},
|
|
||||||
{program: "Standard Test"},
|
|
||||||
{group_based_on: 'Course'},
|
|
||||||
{student_group_name: group_based_on[1]},
|
|
||||||
{max_strength: 10},
|
|
||||||
{batch: 'A'},
|
|
||||||
{course: 'Test_Sub'},
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
|
|
||||||
// Populating the created group with Students
|
|
||||||
() => {
|
|
||||||
tasks = [];
|
|
||||||
group_based_on.forEach(index => {
|
|
||||||
tasks.push(
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => frappe.set_route("Form", ('Student Group/' + index)),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => frappe.tests.click_button('Get Students'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
assert.equal(cur_frm.doc.students.length, 5, 'Successfully fetched list of students');
|
|
||||||
},
|
|
||||||
);
|
|
||||||
});
|
|
||||||
return frappe.run_serially(tasks);
|
|
||||||
},
|
|
||||||
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,84 +0,0 @@
|
|||||||
QUnit.module('education');
|
|
||||||
|
|
||||||
QUnit.test('Test: Student Group Creation Tool', function(assert){
|
|
||||||
assert.expect(5);
|
|
||||||
let done = assert.async();
|
|
||||||
let instructor_code;
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
// Saving Instructor code beforehand
|
|
||||||
() => frappe.db.get_value('Instructor', {'instructor_name': 'Instructor 1'}, 'name'),
|
|
||||||
(instructor) => {instructor_code = instructor.message.name;},
|
|
||||||
|
|
||||||
// Setting up the creation tool to generate and save Student Group
|
|
||||||
() => frappe.set_route('Form', 'Student Group Creation Tool'),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => {
|
|
||||||
cur_frm.set_value("academic_year", "2016-17");
|
|
||||||
cur_frm.set_value("academic_term", "2016-17 (Semester 1)");
|
|
||||||
cur_frm.set_value("program", "Standard Test");
|
|
||||||
frappe.tests.click_button('Get Courses');
|
|
||||||
},
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
let no_of_courses = $('input.grid-row-check.pull-left').size() - 1;
|
|
||||||
assert.equal(cur_frm.doc.courses.length, no_of_courses, 'Successfully created groups using the tool');
|
|
||||||
},
|
|
||||||
|
|
||||||
() => {
|
|
||||||
let d, grid, grid_row;
|
|
||||||
|
|
||||||
for(d = 0; d < cur_frm.doc.courses.length; d++)
|
|
||||||
{
|
|
||||||
grid = cur_frm.get_field("courses").grid;
|
|
||||||
grid_row = grid.get_row(d).toggle_view(true);
|
|
||||||
if(grid_row.doc.student_group_name == 'Standard Test/A/2016-17 (Semester 1)'){
|
|
||||||
grid_row.doc.max_strength = 10;
|
|
||||||
grid_row.doc.student_group_name = "test-batch-wise-group-2";
|
|
||||||
$(`.octicon.octicon-triangle-up`).click();
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
else if(grid_row.doc.student_group_name == 'Test_Sub/Standard Test/2016-17 (Semester 1)'){
|
|
||||||
grid_row.doc.max_strength = 10;
|
|
||||||
grid_row.doc.student_group_name = "test-course-wise-group-2";
|
|
||||||
$(`.octicon.octicon-triangle-up`).click();
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
// Generating Student Group
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => frappe.tests.click_button("Create Student Groups"),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => frappe.tests.click_button("Close"),
|
|
||||||
|
|
||||||
// Goin to the generated group to set up student and instructor list
|
|
||||||
() => {
|
|
||||||
let group_name = ['Student Group/test-batch-wise-group-2', 'Student Group/test-course-wise-group-2'];
|
|
||||||
let tasks = [];
|
|
||||||
group_name.forEach(index => {
|
|
||||||
tasks.push(
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.set_route("Form", index),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => {
|
|
||||||
assert.equal(cur_frm.doc.students.length, 5, 'Successfully fetched list of students');
|
|
||||||
},
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => {
|
|
||||||
d = cur_frm.add_child('instructors');
|
|
||||||
d.instructor = instructor_code;
|
|
||||||
cur_frm.save();
|
|
||||||
},
|
|
||||||
() => {
|
|
||||||
assert.equal(cur_frm.doc.instructors.length, 1, 'Instructor detail stored successfully');
|
|
||||||
},
|
|
||||||
);
|
|
||||||
});
|
|
||||||
return frappe.run_serially(tasks);
|
|
||||||
},
|
|
||||||
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,69 +0,0 @@
|
|||||||
// Testing Attendance Module in Education
|
|
||||||
QUnit.module('education');
|
|
||||||
|
|
||||||
QUnit.test('Test: Student Leave Application', function(assert){
|
|
||||||
assert.expect(4);
|
|
||||||
let done = assert.async();
|
|
||||||
let student_code;
|
|
||||||
let leave_code;
|
|
||||||
frappe.run_serially([
|
|
||||||
() => frappe.db.get_value('Student', {'student_email_id': 'test2@testmail.com'}, 'name'),
|
|
||||||
(student) => {student_code = student.message.name;}, // fetching student code from db
|
|
||||||
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Student Leave Application', [
|
|
||||||
{student: student_code},
|
|
||||||
{from_date: '2017-08-02'},
|
|
||||||
{to_date: '2017-08-04'},
|
|
||||||
{mark_as_present: 0},
|
|
||||||
{reason: "Sick Leave."}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => frappe.tests.click_button('Submit'), // Submitting the leave application
|
|
||||||
() => frappe.timeout(0.7),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(0.7),
|
|
||||||
() => {
|
|
||||||
assert.equal(cur_frm.doc.docstatus, 1, "Submitted leave application");
|
|
||||||
leave_code = frappe.get_route()[2];
|
|
||||||
},
|
|
||||||
() => frappe.tests.click_button('Cancel'), // Cancelling the leave application
|
|
||||||
() => frappe.timeout(0.7),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {assert.equal(cur_frm.doc.docstatus, 2, "Cancelled leave application");},
|
|
||||||
() => frappe.tests.click_button('Amend'), // Amending the leave application
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
cur_frm.doc.mark_as_present = 1;
|
|
||||||
cur_frm.save();
|
|
||||||
},
|
|
||||||
() => frappe.timeout(0.7),
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.timeout(0.7),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(0.7),
|
|
||||||
() => {assert.equal(cur_frm.doc.amended_from, leave_code, "Amended successfully");},
|
|
||||||
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Student Leave Application', [
|
|
||||||
{student: student_code},
|
|
||||||
{from_date: '2017-08-07'},
|
|
||||||
{to_date: '2017-08-09'},
|
|
||||||
{mark_as_present: 0},
|
|
||||||
{reason: "Sick Leave."}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => frappe.tests.click_button('Submit'),
|
|
||||||
() => frappe.timeout(0.7),
|
|
||||||
() => frappe.tests.click_button('Yes'),
|
|
||||||
() => frappe.timeout(0.7),
|
|
||||||
() => {
|
|
||||||
assert.equal(cur_frm.doc.docstatus, 1, "Submitted leave application");
|
|
||||||
leave_code = frappe.get_route()[2];
|
|
||||||
},
|
|
||||||
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,35 +0,0 @@
|
|||||||
// Testing Student Module in Education
|
|
||||||
QUnit.module('education');
|
|
||||||
|
|
||||||
QUnit.test('Test: Student Log', function(assert){
|
|
||||||
assert.expect(9);
|
|
||||||
let done = assert.async();
|
|
||||||
let student_code;
|
|
||||||
frappe.run_serially([
|
|
||||||
() => frappe.db.get_value('Student', {'student_email_id': 'test2@testmail.com'}, 'name'),
|
|
||||||
(student) => {student_code = student.message.name;},
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make("Student Log", [
|
|
||||||
{student: student_code},
|
|
||||||
{academic_year: '2016-17'},
|
|
||||||
{academic_term: '2016-17 (Semester 1)'},
|
|
||||||
{program: "Standard Test"},
|
|
||||||
{date: '2017-07-31'},
|
|
||||||
{student_batch: 'A'},
|
|
||||||
{log: 'This is Test log.'}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => {
|
|
||||||
assert.equal(cur_frm.doc.student, student_code, 'Student code was fetched properly');
|
|
||||||
assert.equal(cur_frm.doc.student_name, 'Fname Mname Lname', 'Student name was correctly auto-fetched');
|
|
||||||
assert.equal(cur_frm.doc.type, 'General', 'Default type selected');
|
|
||||||
assert.equal(cur_frm.doc.academic_year, '2016-17');
|
|
||||||
assert.equal(cur_frm.doc.academic_term, '2016-17 (Semester 1)');
|
|
||||||
assert.equal(cur_frm.doc.program, 'Standard Test', 'Program correctly selected');
|
|
||||||
assert.equal(cur_frm.doc.student_batch, 'A');
|
|
||||||
assert.equal(cur_frm.doc.date, '2017-07-31');
|
|
||||||
assert.equal(cur_frm.doc.log, 'This is Test log.');
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,78 +0,0 @@
|
|||||||
{
|
|
||||||
"charts": [],
|
|
||||||
"content": "[{\"type\": \"header\", \"data\": {\"text\": \"Reports & Masters\", \"level\": 4, \"col\": 12}}, {\"type\": \"card\", \"data\": {\"card_name\": \"Integrations Settings\", \"col\": 4}}]",
|
|
||||||
"creation": "2020-07-31 10:38:54.021237",
|
|
||||||
"docstatus": 0,
|
|
||||||
"doctype": "Workspace",
|
|
||||||
"for_user": "",
|
|
||||||
"hide_custom": 0,
|
|
||||||
"icon": "setting",
|
|
||||||
"idx": 0,
|
|
||||||
"label": "ERPNext Integrations Settings",
|
|
||||||
"links": [
|
|
||||||
{
|
|
||||||
"hidden": 0,
|
|
||||||
"is_query_report": 0,
|
|
||||||
"label": "Integrations Settings",
|
|
||||||
"link_count": 0,
|
|
||||||
"onboard": 0,
|
|
||||||
"type": "Card Break"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"dependencies": "",
|
|
||||||
"hidden": 0,
|
|
||||||
"is_query_report": 0,
|
|
||||||
"label": "Woocommerce Settings",
|
|
||||||
"link_count": 0,
|
|
||||||
"link_to": "Woocommerce Settings",
|
|
||||||
"link_type": "DocType",
|
|
||||||
"onboard": 0,
|
|
||||||
"type": "Link"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"dependencies": "",
|
|
||||||
"hidden": 0,
|
|
||||||
"is_query_report": 0,
|
|
||||||
"label": "Amazon MWS Settings",
|
|
||||||
"link_count": 0,
|
|
||||||
"link_to": "Amazon MWS Settings",
|
|
||||||
"link_type": "DocType",
|
|
||||||
"onboard": 0,
|
|
||||||
"type": "Link"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"dependencies": "",
|
|
||||||
"hidden": 0,
|
|
||||||
"is_query_report": 0,
|
|
||||||
"label": "Plaid Settings",
|
|
||||||
"link_count": 0,
|
|
||||||
"link_to": "Plaid Settings",
|
|
||||||
"link_type": "DocType",
|
|
||||||
"onboard": 0,
|
|
||||||
"type": "Link"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"dependencies": "",
|
|
||||||
"hidden": 0,
|
|
||||||
"is_query_report": 0,
|
|
||||||
"label": "Exotel Settings",
|
|
||||||
"link_count": 0,
|
|
||||||
"link_to": "Exotel Settings",
|
|
||||||
"link_type": "DocType",
|
|
||||||
"onboard": 0,
|
|
||||||
"type": "Link"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"modified": "2021-11-23 04:30:33.106991",
|
|
||||||
"modified_by": "Administrator",
|
|
||||||
"module": "ERPNext Integrations",
|
|
||||||
"name": "ERPNext Integrations Settings",
|
|
||||||
"owner": "Administrator",
|
|
||||||
"parent_page": "",
|
|
||||||
"public": 1,
|
|
||||||
"restrict_to_domain": "",
|
|
||||||
"roles": [],
|
|
||||||
"sequence_id": 11,
|
|
||||||
"shortcuts": [],
|
|
||||||
"title": "ERPNext Integrations Settings"
|
|
||||||
}
|
|
@ -374,7 +374,7 @@ scheduler_events = {
|
|||||||
"erpnext.selling.doctype.quotation.quotation.set_expired_status",
|
"erpnext.selling.doctype.quotation.quotation.set_expired_status",
|
||||||
"erpnext.buying.doctype.supplier_quotation.supplier_quotation.set_expired_status",
|
"erpnext.buying.doctype.supplier_quotation.supplier_quotation.set_expired_status",
|
||||||
"erpnext.accounts.doctype.process_statement_of_accounts.process_statement_of_accounts.send_auto_email",
|
"erpnext.accounts.doctype.process_statement_of_accounts.process_statement_of_accounts.send_auto_email",
|
||||||
"erpnext.non_profit.doctype.membership.membership.set_expired_status"
|
"erpnext.non_profit.doctype.membership.membership.set_expired_status",
|
||||||
"erpnext.hr.doctype.interview.interview.send_daily_feedback_reminder"
|
"erpnext.hr.doctype.interview.interview.send_daily_feedback_reminder"
|
||||||
],
|
],
|
||||||
"daily_long": [
|
"daily_long": [
|
||||||
|
@ -12,14 +12,15 @@ class AppointmentLetter(Document):
|
|||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_appointment_letter_details(template):
|
def get_appointment_letter_details(template):
|
||||||
body = []
|
body = []
|
||||||
intro= frappe.get_list("Appointment Letter Template",
|
intro = frappe.get_list('Appointment Letter Template',
|
||||||
fields = ['introduction', 'closing_notes'],
|
fields=['introduction', 'closing_notes'],
|
||||||
filters={'name': template
|
filters={'name': template}
|
||||||
})[0]
|
)[0]
|
||||||
content = frappe.get_list("Appointment Letter content",
|
content = frappe.get_all('Appointment Letter content',
|
||||||
fields = ['title', 'description'],
|
fields=['title', 'description'],
|
||||||
filters={'parent': template
|
filters={'parent': template},
|
||||||
})
|
order_by='idx'
|
||||||
|
)
|
||||||
body.append(intro)
|
body.append(intro)
|
||||||
body.append({'description': content})
|
body.append({'description': content})
|
||||||
return body
|
return body
|
||||||
|
@ -1,57 +0,0 @@
|
|||||||
QUnit.module('hr');
|
|
||||||
|
|
||||||
QUnit.test("Test: Expense Claim [HR]", function (assert) {
|
|
||||||
assert.expect(3);
|
|
||||||
let done = assert.async();
|
|
||||||
let employee_name;
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
// Creating Appraisal
|
|
||||||
() => frappe.set_route('List','Appraisal','List'),
|
|
||||||
() => frappe.timeout(0.3),
|
|
||||||
() => frappe.click_button('Make a new Appraisal'),
|
|
||||||
() => {
|
|
||||||
cur_frm.set_value('kra_template','Test Appraisal 1'),
|
|
||||||
cur_frm.set_value('start_date','2017-08-21'),
|
|
||||||
cur_frm.set_value('end_date','2017-09-21');
|
|
||||||
},
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.model.set_value('Appraisal Goal','New Appraisal Goal 1','score',4),
|
|
||||||
() => frappe.model.set_value('Appraisal Goal','New Appraisal Goal 1','score_earned',2),
|
|
||||||
() => frappe.model.set_value('Appraisal Goal','New Appraisal Goal 2','score',4),
|
|
||||||
() => frappe.model.set_value('Appraisal Goal','New Appraisal Goal 2','score_earned',2),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.db.get_value('Employee', {'employee_name': 'Test Employee 1'}, 'name'),
|
|
||||||
(r) => {
|
|
||||||
employee_name = r.message.name;
|
|
||||||
},
|
|
||||||
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => cur_frm.set_value('employee',employee_name),
|
|
||||||
() => cur_frm.set_value('employee_name','Test Employee 1'),
|
|
||||||
() => cur_frm.set_value('company','For Testing'),
|
|
||||||
() => frappe.click_button('Calculate Total Score'),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => cur_frm.save(),
|
|
||||||
|
|
||||||
// Submitting the Appraisal
|
|
||||||
() => frappe.click_button('Submit'),
|
|
||||||
() => frappe.click_button('Yes'),
|
|
||||||
() => frappe.timeout(3),
|
|
||||||
|
|
||||||
// Checking if the appraisal is correctly set for the employee
|
|
||||||
() => {
|
|
||||||
assert.equal('Submitted',cur_frm.get_field('status').value,
|
|
||||||
'Appraisal is submitted');
|
|
||||||
|
|
||||||
assert.equal('Test Employee 1',cur_frm.get_field('employee_name').value,
|
|
||||||
'Appraisal is created for correct employee');
|
|
||||||
|
|
||||||
assert.equal(4,cur_frm.get_field('total_score').value,
|
|
||||||
'Total score is correctly calculated');
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,29 +0,0 @@
|
|||||||
QUnit.module('hr');
|
|
||||||
QUnit.test("Test: Appraisal Template [HR]", function (assert) {
|
|
||||||
assert.expect(1);
|
|
||||||
let done = assert.async();
|
|
||||||
frappe.run_serially([
|
|
||||||
// Job Opening creation
|
|
||||||
() => {
|
|
||||||
frappe.tests.make('Appraisal Template', [
|
|
||||||
{ kra_title: 'Test Appraisal 1'},
|
|
||||||
{ description: 'This is just a test'},
|
|
||||||
{ goals: [
|
|
||||||
[
|
|
||||||
{ kra: 'Design'},
|
|
||||||
{ per_weightage: 50}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{ kra: 'Code creation'},
|
|
||||||
{ per_weightage: 50}
|
|
||||||
]
|
|
||||||
]},
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => frappe.timeout(10),
|
|
||||||
() => {
|
|
||||||
assert.equal('Test Appraisal 1',cur_frm.doc.kra_title, 'Appraisal name correctly set');
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,39 +0,0 @@
|
|||||||
QUnit.module('hr');
|
|
||||||
|
|
||||||
QUnit.test("Test: Attendance [HR]", function (assert) {
|
|
||||||
assert.expect(4);
|
|
||||||
let done = assert.async();
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
// test attendance creation for one employee
|
|
||||||
() => frappe.set_route("List", "Attendance", "List"),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => frappe.new_doc("Attendance"),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => assert.equal("Attendance", cur_frm.doctype,
|
|
||||||
"Form for new Attendance opened successfully."),
|
|
||||||
// set values in form
|
|
||||||
() => cur_frm.set_value("company", "For Testing"),
|
|
||||||
() => {
|
|
||||||
frappe.db.get_value('Employee', {'employee_name':'Test Employee 1'}, 'name', function(r) {
|
|
||||||
cur_frm.set_value("employee", r.name)
|
|
||||||
});
|
|
||||||
},
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
// check docstatus of attendance before submit [Draft]
|
|
||||||
() => assert.equal("0", cur_frm.doc.docstatus,
|
|
||||||
"attendance is currently drafted"),
|
|
||||||
// check docstatus of attendance after submit [Present]
|
|
||||||
() => cur_frm.savesubmit(),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => frappe.click_button('Yes'),
|
|
||||||
() => assert.equal("1", cur_frm.doc.docstatus,
|
|
||||||
"attendance is saved after submit"),
|
|
||||||
// check if auto filled date is present day
|
|
||||||
() => assert.equal(frappe.datetime.nowdate(), cur_frm.doc.attendance_date,
|
|
||||||
"attendance for Present day is marked"),
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -6,6 +6,15 @@ frappe.ui.form.on('Department', {
|
|||||||
frm.set_query("parent_department", function(){
|
frm.set_query("parent_department", function(){
|
||||||
return {"filters": [["Department", "is_group", "=", 1]]};
|
return {"filters": [["Department", "is_group", "=", 1]]};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
frm.set_query("payroll_cost_center", function() {
|
||||||
|
return {
|
||||||
|
filters: {
|
||||||
|
"company": frm.doc.company,
|
||||||
|
"is_group": 0
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
},
|
},
|
||||||
refresh: function(frm) {
|
refresh: function(frm) {
|
||||||
// read-only for root department
|
// read-only for root department
|
||||||
|
@ -47,6 +47,15 @@ frappe.ui.form.on('Employee', {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
frm.set_query("payroll_cost_center", function() {
|
||||||
|
return {
|
||||||
|
filters: {
|
||||||
|
"company": frm.doc.company,
|
||||||
|
"is_group": 0
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
},
|
},
|
||||||
onload: function (frm) {
|
onload: function (frm) {
|
||||||
frm.set_query("department", function() {
|
frm.set_query("department", function() {
|
||||||
|
@ -68,12 +68,18 @@ class Employee(NestedSet):
|
|||||||
self.employee_name = ' '.join(filter(lambda x: x, [self.first_name, self.middle_name, self.last_name]))
|
self.employee_name = ' '.join(filter(lambda x: x, [self.first_name, self.middle_name, self.last_name]))
|
||||||
|
|
||||||
def validate_user_details(self):
|
def validate_user_details(self):
|
||||||
data = frappe.db.get_value('User',
|
if self.user_id:
|
||||||
self.user_id, ['enabled', 'user_image'], as_dict=1)
|
data = frappe.db.get_value('User',
|
||||||
if data.get("user_image") and self.image == '':
|
self.user_id, ['enabled', 'user_image'], as_dict=1)
|
||||||
self.image = data.get("user_image")
|
|
||||||
self.validate_for_enabled_user_id(data.get("enabled", 0))
|
if not data:
|
||||||
self.validate_duplicate_user_id()
|
self.user_id = None
|
||||||
|
return
|
||||||
|
|
||||||
|
if data.get("user_image") and self.image == '':
|
||||||
|
self.image = data.get("user_image")
|
||||||
|
self.validate_for_enabled_user_id(data.get("enabled", 0))
|
||||||
|
self.validate_duplicate_user_id()
|
||||||
|
|
||||||
def update_nsm_model(self):
|
def update_nsm_model(self):
|
||||||
frappe.utils.nestedset.update_nsm(self)
|
frappe.utils.nestedset.update_nsm(self)
|
||||||
|
@ -1,40 +0,0 @@
|
|||||||
QUnit.module('hr');
|
|
||||||
|
|
||||||
QUnit.test("Test: Employee [HR]", function (assert) {
|
|
||||||
assert.expect(4);
|
|
||||||
let done = assert.async();
|
|
||||||
// let today_date = frappe.datetime.nowdate();
|
|
||||||
let employee_creation = (name, joining_date, birth_date) => {
|
|
||||||
frappe.run_serially([
|
|
||||||
// test employee creation
|
|
||||||
() => {
|
|
||||||
frappe.tests.make('Employee', [
|
|
||||||
{ employee_name: name},
|
|
||||||
{ salutation: 'Mr'},
|
|
||||||
{ company: 'For Testing'},
|
|
||||||
{ date_of_joining: joining_date},
|
|
||||||
{ date_of_birth: birth_date},
|
|
||||||
{ employment_type: 'Test Employment Type'},
|
|
||||||
{ holiday_list: 'Test Holiday List'},
|
|
||||||
{ branch: 'Test Branch'},
|
|
||||||
{ department: 'Test Department'},
|
|
||||||
{ designation: 'Test Designation'}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => frappe.timeout(2),
|
|
||||||
() => {
|
|
||||||
assert.ok(cur_frm.get_field('employee_name').value==name,
|
|
||||||
'Name of an Employee is correctly set');
|
|
||||||
assert.ok(cur_frm.get_field('gender').value=='Male',
|
|
||||||
'Gender of an Employee is correctly set');
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
};
|
|
||||||
frappe.run_serially([
|
|
||||||
() => employee_creation('Test Employee 1','2017-04-01','1992-02-02'),
|
|
||||||
() => frappe.timeout(10),
|
|
||||||
() => employee_creation('Test Employee 3','2017-04-01','1992-02-02'),
|
|
||||||
() => frappe.timeout(10),
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,61 +0,0 @@
|
|||||||
QUnit.module('hr');
|
|
||||||
|
|
||||||
QUnit.test("Test: Employee attendance tool [HR]", function (assert) {
|
|
||||||
assert.expect(2);
|
|
||||||
let done = assert.async();
|
|
||||||
let today_date = frappe.datetime.nowdate();
|
|
||||||
let date_of_attendance = frappe.datetime.add_days(today_date, -2); // previous day
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
// create employee
|
|
||||||
() => {
|
|
||||||
return frappe.tests.make('Employee', [
|
|
||||||
{salutation: "Mr"},
|
|
||||||
{employee_name: "Test Employee 2"},
|
|
||||||
{company: "For Testing"},
|
|
||||||
{date_of_joining: frappe.datetime.add_months(today_date, -2)}, // joined 2 month from now
|
|
||||||
{date_of_birth: frappe.datetime.add_months(today_date, -240)}, // age is 20 years
|
|
||||||
{employment_type: "Test Employment type"},
|
|
||||||
{holiday_list: "Test Holiday list"},
|
|
||||||
{branch: "Test Branch"},
|
|
||||||
{department: "Test Department"},
|
|
||||||
{designation: "Test Designation"}
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
() => frappe.set_route("Form", "Employee Attendance Tool"),
|
|
||||||
() => frappe.timeout(0.5),
|
|
||||||
() => assert.equal("Employee Attendance Tool", cur_frm.doctype,
|
|
||||||
"Form for Employee Attendance Tool opened successfully."),
|
|
||||||
// set values in form
|
|
||||||
() => cur_frm.set_value("date", date_of_attendance),
|
|
||||||
() => cur_frm.set_value("branch", "Test Branch"),
|
|
||||||
() => cur_frm.set_value("department", "Test Department"),
|
|
||||||
() => cur_frm.set_value("company", "For Testing"),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.click_button('Check all'),
|
|
||||||
() => frappe.click_button('Mark Present'),
|
|
||||||
// check if attendance is marked
|
|
||||||
() => frappe.set_route("List", "Attendance", "List"),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => {
|
|
||||||
return frappe.call({
|
|
||||||
method: "frappe.client.get_list",
|
|
||||||
args: {
|
|
||||||
doctype: "Employee",
|
|
||||||
filters: {
|
|
||||||
"branch": "Test Branch",
|
|
||||||
"department": "Test Department",
|
|
||||||
"company": "For Testing",
|
|
||||||
"status": "Active"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
callback: function(r) {
|
|
||||||
let marked_attendance = cur_list.data.filter(d => d.attendance_date == date_of_attendance);
|
|
||||||
assert.equal(marked_attendance.length, r.message.length,
|
|
||||||
'all the attendance are marked for correct date');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -1,22 +0,0 @@
|
|||||||
QUnit.module('hr');
|
|
||||||
|
|
||||||
QUnit.test("Test: Employment type [HR]", function (assert) {
|
|
||||||
assert.expect(1);
|
|
||||||
let done = assert.async();
|
|
||||||
|
|
||||||
frappe.run_serially([
|
|
||||||
// test employment type creation
|
|
||||||
() => frappe.set_route("List", "Employment Type", "List"),
|
|
||||||
() => frappe.new_doc("Employment Type"),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => frappe.quick_entry.dialog.$wrapper.find('.edit-full').click(),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => cur_frm.set_value("employee_type_name", "Test Employment type"),
|
|
||||||
// save form
|
|
||||||
() => cur_frm.save(),
|
|
||||||
() => frappe.timeout(1),
|
|
||||||
() => assert.equal("Test Employment type", cur_frm.doc.employee_type_name,
|
|
||||||
'name of employment type correctly saved'),
|
|
||||||
() => done()
|
|
||||||
]);
|
|
||||||
});
|
|
@ -171,7 +171,7 @@ frappe.ui.form.on("Expense Claim", {
|
|||||||
['docstatus', '=', 1],
|
['docstatus', '=', 1],
|
||||||
['employee', '=', frm.doc.employee],
|
['employee', '=', frm.doc.employee],
|
||||||
['paid_amount', '>', 0],
|
['paid_amount', '>', 0],
|
||||||
['paid_amount', '>', 'claimed_amount']
|
['status', '!=', 'Claimed']
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user