Compare commits
154 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c1162796c5 | ||
|
|
82446bf83e | ||
|
|
c72f8976aa | ||
|
|
c49a3425ef | ||
|
|
e1d85f2467 | ||
|
|
3962cded76 | ||
|
|
66360f694e | ||
|
|
5dba950afa | ||
|
|
6a3f51bee2 | ||
|
|
efe1ab742f | ||
|
|
4d32d5301a | ||
|
|
58bc00f954 | ||
|
|
155074479b | ||
|
|
fa1775b6a6 | ||
|
|
764e6ef210 | ||
|
|
f2d89987f5 | ||
|
|
06c92a782a | ||
|
|
f43e49f378 | ||
|
|
ea5ad84c5e | ||
|
|
46f328cbda | ||
|
|
1b9a01b6c3 | ||
|
|
e8ab7b8898 | ||
|
|
ae921ce2c8 | ||
|
|
b77ad7c31d | ||
|
|
cc13a9f2f6 | ||
|
|
97c74f9f8f | ||
|
|
e1e6468b33 | ||
|
|
6620e2a494 | ||
|
|
08aadb853c | ||
|
|
3bb1a421f0 | ||
|
|
afc0bbc8ff | ||
|
|
8869430a81 | ||
|
|
7f031d1bfd | ||
|
|
5b1ebc5c54 | ||
|
|
5bb2f56b47 | ||
|
|
1e3e6865ce | ||
|
|
94542e104c | ||
|
|
90bf69aa52 | ||
|
|
3b8109780f | ||
|
|
f863055b91 | ||
|
|
3aac12d56b | ||
|
|
ed75667f64 | ||
|
|
16a0fef759 | ||
|
|
08aec855c4 | ||
|
|
e96b3ce725 | ||
|
|
60e9f84c8a | ||
|
|
1ffa76ba5c | ||
|
|
798f3897a3 | ||
|
|
e810ea3a2f | ||
|
|
29a8a93aa1 | ||
|
|
53133dbd4d | ||
|
|
cd339b2ecf | ||
|
|
c9d04ab1fc | ||
|
|
6f84026c24 | ||
|
|
24f45af27e | ||
|
|
3c364dd5b8 | ||
|
|
185110159e | ||
|
|
5940dc1a8e | ||
|
|
3e78558357 | ||
|
|
74dbd168c2 | ||
|
|
1d7bd0efb8 | ||
|
|
de745e1df6 | ||
|
|
77dd190cc8 | ||
|
|
ddde4bec39 | ||
|
|
9ed1891440 | ||
|
|
dfcf55d010 | ||
|
|
66126ffc7a | ||
|
|
7c52d09dc2 | ||
|
|
a88dec8775 | ||
|
|
86a477d07e | ||
|
|
bc691dccba | ||
|
|
e9674f8866 | ||
|
|
84306ccc4c | ||
|
|
feed313a66 | ||
|
|
62658fde45 | ||
|
|
981f6ea34e | ||
|
|
ba1c34eef3 | ||
|
|
3e001b5fac | ||
|
|
6201068f8f | ||
|
|
9421a109cf | ||
|
|
26005c25b2 | ||
|
|
180e43585f | ||
|
|
05cc36a864 | ||
|
|
1e5c251ce2 | ||
|
|
95c2ba9736 | ||
|
|
69e0441041 | ||
|
|
db0e57cdce | ||
|
|
51a593b0b5 | ||
|
|
cc8fb1a8d6 | ||
|
|
1892520324 | ||
|
|
3bf486c5c6 | ||
|
|
6b8024a834 | ||
|
|
33b10a0405 | ||
|
|
7bae70a993 | ||
|
|
e7d0639edc | ||
|
|
0d5e208f8c | ||
|
|
a163299991 | ||
|
|
acff41ddd2 | ||
|
|
e72ff9377a | ||
|
|
a948407460 | ||
|
|
ee70f26131 | ||
|
|
142b6187b3 | ||
|
|
14384c2787 | ||
|
|
7357902802 | ||
|
|
fa97b3cac7 | ||
|
|
95f53cca44 | ||
|
|
949ceb18fc | ||
|
|
7590b8fff1 | ||
|
|
5a8b7ca7be | ||
|
|
98151ce5b2 | ||
|
|
380dbb044f | ||
|
|
ee75d41da0 | ||
|
|
e26a42dc7a | ||
|
|
b2c9848886 | ||
|
|
b4bf757a15 | ||
|
|
fc49c2c5f9 | ||
|
|
384f0b18c0 | ||
|
|
2a2346422d | ||
|
|
548ea777a9 | ||
|
|
67047fbb06 | ||
|
|
10007ab4df | ||
|
|
444bedcd20 | ||
|
|
2af5dfa9cc | ||
|
|
4bc0f7d105 | ||
|
|
3642f987c7 | ||
|
|
07e5758a94 | ||
|
|
e326ae95ef | ||
|
|
5f59a0a00f | ||
|
|
fd288f36ec | ||
|
|
19cb34ce40 | ||
|
|
5342ec5055 | ||
|
|
593d2e3146 | ||
|
|
c4afd63e50 | ||
|
|
6fe4a336f1 | ||
|
|
154be9b693 | ||
|
|
d46235ed83 | ||
|
|
17a9940f00 | ||
|
|
4d3e8da4a2 | ||
|
|
d4d1f1b036 | ||
|
|
9b542f303c | ||
|
|
21a5658fdf | ||
|
|
0540d52449 | ||
|
|
8a9daece7e | ||
|
|
c85aa3d9c5 | ||
|
|
5662ad6d96 | ||
|
|
859843687e | ||
|
|
40cf3db0b1 | ||
|
|
26cf01aaba | ||
|
|
eac602304c | ||
|
|
ce1c63f776 | ||
|
|
95b550dd8f | ||
|
|
bb78f1ac16 | ||
|
|
feea2e3dec | ||
|
|
7dae3e1ed4 |
15
.travis.yml
@@ -1,4 +1,5 @@
|
||||
language: python
|
||||
dist: trusty
|
||||
|
||||
python:
|
||||
- "2.7"
|
||||
@@ -11,10 +12,14 @@ before_install:
|
||||
- "sh -e /etc/init.d/xvfb start"
|
||||
|
||||
install:
|
||||
- sudo apt-get purge -y mysql-common
|
||||
- wget https://raw.githubusercontent.com/frappe/bench/master/install_scripts/setup_frappe.sh
|
||||
- sudo bash setup_frappe.sh --skip-setup-bench --mysql-root-password travis --bench-branch develop
|
||||
- sudo pip install --upgrade pip
|
||||
- sudo apt-get purge -y mysql-common mysql-server mysql-client
|
||||
# - wget https://raw.githubusercontent.com/frappe/bench/master/install_scripts/setup_frappe.sh
|
||||
# - sudo bash setup_frappe.sh --skip-setup-bench --mysql-root-password travis --bench-branch develop
|
||||
- wget https://raw.githubusercontent.com/frappe/bench/master/playbooks/install.py
|
||||
- sudo python install.py --develop --user travis --without-bench-setup
|
||||
- sudo pip install -e ~/bench
|
||||
|
||||
# - sudo pip install --upgrade pip
|
||||
- rm $TRAVIS_BUILD_DIR/.git/shallow
|
||||
- bash $TRAVIS_BUILD_DIR/travis/bench_init.sh
|
||||
- cp -r $TRAVIS_BUILD_DIR/test_sites/test_site ~/frappe-bench/sites/
|
||||
@@ -30,7 +35,7 @@ script:
|
||||
- bench --verbose run-tests --driver Firefox
|
||||
|
||||
before_script:
|
||||
- mysql -e 'create database test_frappe'
|
||||
- mysql -u root -ptravis -e 'create database test_frappe'
|
||||
- echo "USE mysql;\nCREATE USER 'test_frappe'@'localhost' IDENTIFIED BY 'test_frappe';\nFLUSH PRIVILEGES;\n" | mysql -u root -ptravis
|
||||
- echo "USE mysql;\nGRANT ALL PRIVILEGES ON \`test_frappe\`.* TO 'test_frappe'@'localhost';\n" | mysql -u root -ptravis
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
|
||||
__version__ = '7.0.3'
|
||||
__version__ = '7.0.19'
|
||||
|
||||
def get_default_company(user=None):
|
||||
'''Get default company for user'''
|
||||
|
||||
@@ -95,13 +95,13 @@ frappe.ui.form.on('Payment Entry', {
|
||||
frm.doc.paid_to_account_currency != company_currency &&
|
||||
frm.doc.paid_from_account_currency != frm.doc.paid_to_account_currency));
|
||||
|
||||
frm.toggle_display("base_paid_amount", frm.doc.paid_from_account_currency != company_currency);
|
||||
frm.toggle_display("base_paid_amount", frm.doc.paid_from_account_currency != company_currency);
|
||||
|
||||
frm.toggle_display("base_received_amount", (frm.doc.paid_to_account_currency != company_currency &&
|
||||
frm.doc.paid_from_account_currency != frm.doc.paid_to_account_currency));
|
||||
|
||||
frm.toggle_display("received_amount",
|
||||
frm.doc.paid_from_account_currency != frm.doc.paid_to_account_currency)
|
||||
frm.toggle_display("received_amount", (frm.doc.payment_type=="Internal Transfer" ||
|
||||
frm.doc.paid_from_account_currency != frm.doc.paid_to_account_currency))
|
||||
|
||||
frm.toggle_display(["base_total_allocated_amount"],
|
||||
(frm.doc.paid_amount && frm.doc.received_amount && frm.doc.base_total_allocated_amount &&
|
||||
@@ -414,10 +414,7 @@ frappe.ui.form.on('Payment Entry', {
|
||||
|
||||
paid_amount: function(frm) {
|
||||
frm.set_value("base_paid_amount", flt(frm.doc.paid_amount) * flt(frm.doc.source_exchange_rate));
|
||||
|
||||
frm.trigger("reset_received_amount");
|
||||
|
||||
frm.set_paid_amount_based_on_received_amount = false;
|
||||
},
|
||||
|
||||
received_amount: function(frm) {
|
||||
@@ -436,22 +433,19 @@ frappe.ui.form.on('Payment Entry', {
|
||||
frm.events.allocate_party_amount_against_ref_docs(frm, frm.doc.received_amount);
|
||||
else
|
||||
frm.events.set_difference_amount(frm);
|
||||
|
||||
frm.set_paid_amount_based_on_received_amount = false;
|
||||
},
|
||||
|
||||
reset_received_amount: function(frm) {
|
||||
if(!frm.set_paid_amount_based_on_received_amount &&
|
||||
(frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency)) {
|
||||
|
||||
// var total_deductions = frappe.utils.sum($.map(frm.doc.deductions || [],
|
||||
// function(d) { return d.amount}));
|
||||
//
|
||||
// var received_amount = frm.doc.paid_amount +
|
||||
// flt(total_deductions) / flt(frm.doc.source_exchange_rate);
|
||||
//
|
||||
frm.set_value("received_amount", frm.doc.paid_amount);
|
||||
frm.set_value("target_exchange_rate", frm.doc.source_exchange_rate);
|
||||
frm.set_value("base_received_amount", frm.doc.base_paid_amount);
|
||||
}
|
||||
|
||||
if(frm.doc.payment_type == "Receive")
|
||||
frm.events.allocate_party_amount_against_ref_docs(frm, frm.doc.paid_amount);
|
||||
else
|
||||
@@ -607,11 +601,18 @@ frappe.ui.form.on('Payment Entry', {
|
||||
if(frm.doc.party) {
|
||||
var party_amount = frm.doc.payment_type=="Receive" ?
|
||||
frm.doc.paid_amount : frm.doc.received_amount;
|
||||
|
||||
var total_deductions = frappe.utils.sum($.map(frm.doc.deductions || [],
|
||||
function(d) { return flt(d.amount) }));
|
||||
|
||||
if(frm.doc.total_allocated_amount < party_amount)
|
||||
unallocated_amount = party_amount - frm.doc.total_allocated_amount;
|
||||
if(frm.doc.total_allocated_amount < party_amount) {
|
||||
if(frm.doc.payment_type == "Receive") {
|
||||
unallocated_amount = party_amount - (frm.doc.total_allocated_amount - total_deductions);
|
||||
} else {
|
||||
unallocated_amount = party_amount - (frm.doc.total_allocated_amount + total_deductions);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
frm.set_value("unallocated_amount", unallocated_amount);
|
||||
|
||||
var difference_amount = 0;
|
||||
|
||||
@@ -247,12 +247,17 @@ class PaymentEntry(AccountsController):
|
||||
if self.party:
|
||||
party_amount = self.paid_amount if self.payment_type=="Receive" else self.received_amount
|
||||
|
||||
total_deductions = sum([flt(d.amount) for d in self.get("deductions")])
|
||||
|
||||
if self.total_allocated_amount < party_amount:
|
||||
self.unallocated_amount = party_amount - self.total_allocated_amount
|
||||
if self.payment_type == "Receive":
|
||||
self.unallocated_amount = party_amount - (self.total_allocated_amount - total_deductions)
|
||||
else:
|
||||
self.unallocated_amount = party_amount - (self.total_allocated_amount + total_deductions)
|
||||
|
||||
def set_difference_amount(self):
|
||||
base_unallocated_amount = flt(self.unallocated_amount) * \
|
||||
(self.source_exchange_rate if self.payment_type=="Receive" else self.target_exchange_rate)
|
||||
base_unallocated_amount = flt(self.unallocated_amount) * (flt(self.source_exchange_rate)
|
||||
if self.payment_type=="Receive" else flt(self.target_exchange_rate))
|
||||
|
||||
base_party_amount = flt(self.base_total_allocated_amount) + flt(base_unallocated_amount)
|
||||
|
||||
@@ -267,6 +272,8 @@ class PaymentEntry(AccountsController):
|
||||
if d.amount:
|
||||
self.difference_amount -= flt(d.amount)
|
||||
|
||||
self.difference_amount = flt(self.difference_amount, self.precision("difference_amount"))
|
||||
|
||||
def clear_unallocated_reference_document_rows(self):
|
||||
self.set("references", self.get("references", {"allocated_amount": ["not in", [0, None, ""]]}))
|
||||
|
||||
@@ -567,10 +574,9 @@ def get_company_defaults(company):
|
||||
@frappe.whitelist()
|
||||
def get_reference_details(reference_doctype, reference_name, party_account_currency):
|
||||
total_amount = outstanding_amount = exchange_rate = None
|
||||
ref_doc = frappe.get_doc(reference_doctype, reference_name)
|
||||
|
||||
if reference_doctype != "Journal Entry":
|
||||
ref_doc = frappe.get_doc(reference_doctype, reference_name)
|
||||
|
||||
if party_account_currency == ref_doc.company_currency:
|
||||
total_amount = ref_doc.base_grand_total
|
||||
exchange_rate = 1
|
||||
@@ -672,7 +678,7 @@ def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount=
|
||||
|
||||
pe.setup_party_account_field()
|
||||
pe.set_missing_values()
|
||||
if bank:
|
||||
if party_account and bank:
|
||||
pe.set_exchange_rate()
|
||||
pe.set_amounts()
|
||||
return pe
|
||||
@@ -20,7 +20,7 @@ def get_pos_data():
|
||||
if pos_profile.get('name'):
|
||||
pos_profile = frappe.get_doc('POS Profile', pos_profile.get('name'))
|
||||
else:
|
||||
frappe.msgprint('<a href="#Form/POS Profile/New POS Profile">'
|
||||
frappe.msgprint('<a href="#List/POS Profile">'
|
||||
+ _("Welcome to POS: Create your POS Profile") + '</a>');
|
||||
|
||||
update_pos_profile_data(doc, pos_profile)
|
||||
@@ -115,7 +115,7 @@ def get_items(doc, pos_profile):
|
||||
item.actual_qty = frappe.db.get_value('Bin', {'item_code': item.name,
|
||||
'warehouse': item.default_warehouse}, 'actual_qty') or 0
|
||||
item.serial_nos = get_serial_nos(item, pos_profile)
|
||||
item.batch_nos = frappe.db.sql_list("""select name from `tabBatch` where expiry_date > curdate()
|
||||
item.batch_nos = frappe.db.sql_list("""select name from `tabBatch` where ifnull(expiry_date, '4000-10-10') > curdate()
|
||||
and item = %(item_code)s""", {'item_code': item.item_code})
|
||||
|
||||
item_list.append(item)
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "",
|
||||
"editable_grid": 0,
|
||||
"fields": [
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
@@ -1135,7 +1136,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "2",
|
||||
"print_hide": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
@@ -3676,7 +3677,7 @@
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"menu_index": 0,
|
||||
"modified": "2016-07-07 13:40:27.977803",
|
||||
"modified": "2016-08-03 11:50:49.680278",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Sales Invoice",
|
||||
|
||||
@@ -87,15 +87,6 @@ class SalesInvoice(SellingController):
|
||||
def before_save(self):
|
||||
set_account_for_mode_of_payment(self)
|
||||
|
||||
def update_change_amount(self):
|
||||
self.base_paid_amount = 0.0
|
||||
if self.paid_amount:
|
||||
self.base_paid_amount = flt(self.paid_amount * self.conversion_rate, self.precision("base_paid_amount"))
|
||||
self.change_amount = self.base_change_amount = 0.0
|
||||
if self.paid_amount > self.grand_total:
|
||||
self.change_amount = flt(self.paid_amount - self.grand_total, self.precision("change_amount"))
|
||||
self.base_change_amount = flt(self.change_amount * self.conversion_rate, self.precision("base_change_amount"))
|
||||
|
||||
def on_submit(self):
|
||||
if not self.recurring_id:
|
||||
frappe.get_doc('Authorization Control').validate_approving_authority(self.doctype,
|
||||
@@ -110,6 +101,7 @@ class SalesInvoice(SellingController):
|
||||
self.update_status_updater_args()
|
||||
self.update_prevdoc_status()
|
||||
self.update_billing_status_in_dn()
|
||||
self.clear_unallocated_mode_of_payments()
|
||||
|
||||
# Updating stock ledger should always be called after updating prevdoc status,
|
||||
# because updating reserved qty in bin depends upon updated delivered qty in SO
|
||||
@@ -296,6 +288,12 @@ class SalesInvoice(SellingController):
|
||||
frappe.throw(_("Debit To account must be a Receivable account"))
|
||||
|
||||
self.party_account_currency = account.account_currency
|
||||
|
||||
def clear_unallocated_mode_of_payments(self):
|
||||
self.set("payments", self.get("payments", {"amount": ["not in", [0, None, ""]]}))
|
||||
|
||||
frappe.db.sql("""delete from `tabSales Invoice Payment` where parent = %s
|
||||
and amount = 0""", self.name)
|
||||
|
||||
def validate_with_previous_doc(self):
|
||||
super(SalesInvoice, self).validate_with_previous_doc({
|
||||
@@ -504,6 +502,7 @@ class SalesInvoice(SellingController):
|
||||
gl_entries = merge_similar_entries(gl_entries)
|
||||
|
||||
self.make_pos_gl_entries(gl_entries)
|
||||
self.make_gle_for_change(gl_entries)
|
||||
|
||||
self.make_write_off_gl_entry(gl_entries)
|
||||
|
||||
@@ -578,27 +577,24 @@ class SalesInvoice(SellingController):
|
||||
|
||||
def make_pos_gl_entries(self, gl_entries):
|
||||
if cint(self.is_pos) and self.paid_amount:
|
||||
# POS, make payment entries
|
||||
gl_entries.append(
|
||||
self.get_gl_dict({
|
||||
"account": self.debit_to,
|
||||
"party_type": "Customer",
|
||||
"party": self.customer,
|
||||
"against": self.cash_bank_account,
|
||||
"credit": flt(self.base_paid_amount - self.base_change_amount),
|
||||
"credit_in_account_currency": flt(self.base_paid_amount - self.base_change_amount) \
|
||||
if self.party_account_currency==self.company_currency else flt(self.paid_amount - self.change_amount),
|
||||
"against_voucher": self.return_against if cint(self.is_return) else self.name,
|
||||
"against_voucher_type": self.doctype,
|
||||
}, self.party_account_currency)
|
||||
)
|
||||
|
||||
cash_account = ''
|
||||
for payment_mode in self.payments:
|
||||
if payment_mode.type == 'Cash':
|
||||
cash_account = payment_mode.account
|
||||
|
||||
if payment_mode.base_amount > 0:
|
||||
# POS, make payment entries
|
||||
gl_entries.append(
|
||||
self.get_gl_dict({
|
||||
"account": self.debit_to,
|
||||
"party_type": "Customer",
|
||||
"party": self.customer,
|
||||
"against": payment_mode.account,
|
||||
"credit": payment_mode.base_amount,
|
||||
"credit_in_account_currency": payment_mode.base_amount \
|
||||
if self.party_account_currency==self.company_currency \
|
||||
else payment_mode.amount,
|
||||
"against_voucher": self.return_against if cint(self.is_return) else self.name,
|
||||
"against_voucher_type": self.doctype,
|
||||
}, self.party_account_currency)
|
||||
)
|
||||
|
||||
payment_mode_account_currency = get_account_currency(payment_mode.account)
|
||||
gl_entries.append(
|
||||
self.get_gl_dict({
|
||||
@@ -609,20 +605,44 @@ class SalesInvoice(SellingController):
|
||||
if payment_mode_account_currency==self.company_currency else payment_mode.amount
|
||||
}, payment_mode_account_currency)
|
||||
)
|
||||
|
||||
if self.change_amount:
|
||||
cash_account = cash_account or self.payments[0].account
|
||||
cash_account_currency = get_account_currency(cash_account)
|
||||
|
||||
def make_gle_for_change(self, gl_entries):
|
||||
if cint(self.is_pos) and self.change_amount:
|
||||
cash_account = self.get_cash_account()
|
||||
if cash_account:
|
||||
gl_entries.append(
|
||||
self.get_gl_dict({
|
||||
"account": self.debit_to,
|
||||
"party_type": "Customer",
|
||||
"party": self.customer,
|
||||
"against": cash_account,
|
||||
"debit": flt(self.base_change_amount),
|
||||
"debit_in_account_currency": flt(self.base_change_amount) \
|
||||
if self.party_account_currency==self.company_currency else flt(self.change_amount),
|
||||
"against_voucher": self.return_against if cint(self.is_return) else self.name,
|
||||
"against_voucher_type": self.doctype
|
||||
}, self.party_account_currency)
|
||||
)
|
||||
|
||||
gl_entries.append(
|
||||
self.get_gl_dict({
|
||||
"account": cash_account,
|
||||
"against": self.customer,
|
||||
"credit": self.base_change_amount,
|
||||
"credit_in_account_currency": self.base_change_amount \
|
||||
if payment_mode_account_currency==self.company_currency else self.change_amount
|
||||
}, payment_mode_account_currency)
|
||||
"credit": self.base_change_amount
|
||||
})
|
||||
)
|
||||
|
||||
|
||||
|
||||
def get_cash_account(self):
|
||||
cash_account = [d.account for d in self.payments if d.type=="Cash"]
|
||||
if cash_account:
|
||||
cash_account = cash_account[0]
|
||||
else:
|
||||
cash_account = frappe.db.get_value("Account",
|
||||
filters={"company": self.company, "account_type": "Cash", "is_group": 0})
|
||||
|
||||
return cash_account
|
||||
|
||||
def make_write_off_gl_entry(self, gl_entries):
|
||||
# write off entries, applicable if only pos
|
||||
if self.write_off_account and self.write_off_amount:
|
||||
|
||||
@@ -503,7 +503,8 @@ class TestSalesInvoice(unittest.TestCase):
|
||||
[pos["taxes"][1]["account_head"], 0.0, 50.0],
|
||||
[stock_in_hand, 0.0, abs(sle.stock_value_difference)],
|
||||
[pos["items"][0]["expense_account"], abs(sle.stock_value_difference), 0.0],
|
||||
[si.debit_to, 0.0, si.paid_amount],
|
||||
[si.debit_to, 0.0, 300.0],
|
||||
[si.debit_to, 0.0, cash_amount],
|
||||
["_Test Bank - _TC", 300.0, 0.0],
|
||||
["Cash - _TC", cash_amount, 0.0]
|
||||
])
|
||||
|
||||
@@ -69,13 +69,13 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
|
||||
var me = this;
|
||||
// navigator.onLine
|
||||
this.connection_status = false;
|
||||
this.page.set_indicator("Offline", "grey")
|
||||
this.page.set_indicator(__("Offline"), "grey")
|
||||
frappe.call({
|
||||
method:"frappe.handler.ping",
|
||||
callback: function(r){
|
||||
if(r.message){
|
||||
me.connection_status = true;
|
||||
me.page.set_indicator("Online", "green")
|
||||
me.page.set_indicator(__("Online"), "green")
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -278,7 +278,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
|
||||
"fieldtype": "Data",
|
||||
"label": "Item",
|
||||
"fieldname": "pos_item",
|
||||
"placeholder": "Search Item"
|
||||
"placeholder": __("Search Item")
|
||||
},
|
||||
parent: this.wrapper.find(".search-area"),
|
||||
only_input: true,
|
||||
@@ -423,16 +423,16 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
|
||||
|
||||
if(key){
|
||||
return $.grep(window.items, function(item){
|
||||
if( (item.item_code.toLowerCase().match(key)) ||
|
||||
(item.item_name.toLowerCase().match(key)) || (item.item_group.toLowerCase().match(key)) ){
|
||||
if(in_list(item.batch_nos, me.search.$input.val())){
|
||||
return me.item_batch_no[item.item_code] = me.search.$input.val()
|
||||
} else if((item.item_code.toLowerCase().match(key)) ||
|
||||
(item.item_name.toLowerCase().match(key)) || (item.item_group.toLowerCase().match(key))){
|
||||
return true
|
||||
}else if(item.barcode == me.search.$input.val()){
|
||||
return item.barcode == me.search.$input.val();
|
||||
} else if (in_list(Object.keys(item.serial_nos), me.search.$input.val())){
|
||||
me.item_serial_no[item.item_code] = [me.search.$input.val(), item.serial_nos[me.search.$input.val()]]
|
||||
return true
|
||||
} else if(in_list(item.batch_nos, me.search.$input.val())){
|
||||
return me.item_batch_no[item.item_code] = me.search.$input.val()
|
||||
}
|
||||
})
|
||||
}else{
|
||||
|
||||
@@ -1 +1 @@
|
||||
{% include "erpnext/accounts/report/accounts_receivable/accounts_receivable.html" %}
|
||||
{% include "accounts/report/accounts_receivable/accounts_receivable.html" %}
|
||||
|
||||
@@ -1 +1 @@
|
||||
{% include "erpnext/accounts/report/accounts_receivable/accounts_receivable.html" %}
|
||||
{% include "accounts/report/accounts_receivable/accounts_receivable.html" %}
|
||||
|
||||
@@ -1 +1 @@
|
||||
{% include "erpnext/accounts/report/accounts_receivable/accounts_receivable.html" %}
|
||||
{% include "accounts/report/accounts_receivable/accounts_receivable.html" %}
|
||||
|
||||
@@ -1 +1 @@
|
||||
{% include "erpnext/accounts/report/financial_statements.html" %}
|
||||
{% include "accounts/report/financial_statements.html" %}
|
||||
|
||||
@@ -1 +1 @@
|
||||
{% include "erpnext/accounts/report/financial_statements.html" %}
|
||||
{% include "accounts/report/financial_statements.html" %}
|
||||
|
||||
@@ -1 +1 @@
|
||||
{% include "erpnext/accounts/report/financial_statements.html" %}
|
||||
{% include "accounts/report/financial_statements.html" %}
|
||||
|
||||
@@ -87,7 +87,7 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({
|
||||
|
||||
refresh: function(doc) {
|
||||
this.frm.toggle_display("supplier_name",
|
||||
(this.supplier_name && this.frm.doc.supplier_name!==this.frm.doc.supplier));
|
||||
(this.frm.doc.supplier_name && this.frm.doc.supplier_name!==this.frm.doc.supplier));
|
||||
|
||||
if(this.frm.docstatus==0 &&
|
||||
(this.frm.doctype==="Purchase Order" || this.frm.doctype==="Material Request")) {
|
||||
|
||||
@@ -3,10 +3,12 @@
|
||||
"allow_import": 0,
|
||||
"allow_rename": 0,
|
||||
"autoname": "naming_series:",
|
||||
"beta": 0,
|
||||
"creation": "2013-04-30 13:13:03",
|
||||
"custom": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"editable_grid": 1,
|
||||
"fields": [
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
@@ -16,6 +18,7 @@
|
||||
"fieldtype": "Select",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Series",
|
||||
@@ -24,6 +27,7 @@
|
||||
"options": "QI-",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@@ -40,6 +44,7 @@
|
||||
"fieldtype": "Date",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 1,
|
||||
"in_list_view": 1,
|
||||
"label": "Report Date",
|
||||
@@ -49,6 +54,7 @@
|
||||
"oldfieldtype": "Date",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@@ -64,6 +70,7 @@
|
||||
"fieldtype": "Column Break",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"length": 0,
|
||||
@@ -71,6 +78,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -86,6 +94,7 @@
|
||||
"fieldtype": "Select",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 1,
|
||||
"in_list_view": 1,
|
||||
"label": "Inspection Type",
|
||||
@@ -96,6 +105,7 @@
|
||||
"options": "\nIncoming\nOutgoing\nIn Process",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@@ -111,6 +121,7 @@
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 1,
|
||||
"in_list_view": 0,
|
||||
"label": "Purchase Receipt No",
|
||||
@@ -121,6 +132,7 @@
|
||||
"options": "Purchase Receipt",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -136,6 +148,7 @@
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 1,
|
||||
"in_list_view": 0,
|
||||
"label": "Delivery Note No",
|
||||
@@ -146,6 +159,7 @@
|
||||
"options": "Delivery Note",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -161,6 +175,7 @@
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"length": 0,
|
||||
@@ -168,6 +183,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -183,6 +199,7 @@
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 1,
|
||||
"in_list_view": 1,
|
||||
"label": "Item Code",
|
||||
@@ -193,6 +210,7 @@
|
||||
"options": "Item",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@@ -208,6 +226,7 @@
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Item Serial No",
|
||||
@@ -218,6 +237,7 @@
|
||||
"options": "Serial No",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -233,6 +253,7 @@
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Batch No",
|
||||
@@ -243,6 +264,7 @@
|
||||
"options": "Batch",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -258,6 +280,7 @@
|
||||
"fieldtype": "Float",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Sample Size",
|
||||
@@ -267,6 +290,7 @@
|
||||
"oldfieldtype": "Currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@@ -282,6 +306,7 @@
|
||||
"fieldtype": "Column Break",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"length": 0,
|
||||
@@ -289,6 +314,7 @@
|
||||
"oldfieldtype": "Column Break",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -305,6 +331,7 @@
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Item Name",
|
||||
@@ -313,6 +340,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -328,6 +356,7 @@
|
||||
"fieldtype": "Small Text",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 1,
|
||||
"in_list_view": 0,
|
||||
"label": "Description",
|
||||
@@ -337,6 +366,7 @@
|
||||
"oldfieldtype": "Small Text",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -353,6 +383,7 @@
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"length": 0,
|
||||
@@ -360,6 +391,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -376,6 +408,7 @@
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Inspected By",
|
||||
@@ -386,6 +419,7 @@
|
||||
"options": "User",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@@ -401,6 +435,7 @@
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Verified By",
|
||||
@@ -410,6 +445,7 @@
|
||||
"oldfieldtype": "Data",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -425,6 +461,7 @@
|
||||
"fieldtype": "Column Break",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"length": 0,
|
||||
@@ -432,6 +469,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -447,6 +485,7 @@
|
||||
"fieldtype": "Text",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Remarks",
|
||||
@@ -456,6 +495,7 @@
|
||||
"oldfieldtype": "Text",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -471,6 +511,7 @@
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 1,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Amended From",
|
||||
@@ -481,6 +522,7 @@
|
||||
"options": "Quality Inspection",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -496,6 +538,7 @@
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "",
|
||||
@@ -505,6 +548,7 @@
|
||||
"options": "Simple",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -520,6 +564,7 @@
|
||||
"fieldtype": "Button",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Get Specification Details",
|
||||
@@ -528,6 +573,7 @@
|
||||
"options": "get_item_specification_details",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -543,6 +589,7 @@
|
||||
"fieldtype": "Table",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Readings",
|
||||
@@ -553,6 +600,7 @@
|
||||
"options": "Quality Inspection Reading",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -565,13 +613,14 @@
|
||||
"hide_toolbar": 0,
|
||||
"icon": "icon-search",
|
||||
"idx": 1,
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
"in_dialog": 0,
|
||||
"is_submittable": 1,
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2015-11-16 06:29:54.786379",
|
||||
"modified": "2016-07-31 11:42:40.498926",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Buying",
|
||||
"name": "Quality Inspection",
|
||||
@@ -598,7 +647,10 @@
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"quick_entry": 0,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0,
|
||||
"search_fields": "item_code, report_date, purchase_receipt_no, delivery_note_no"
|
||||
"search_fields": "item_code, report_date, purchase_receipt_no, delivery_note_no",
|
||||
"sort_order": "ASC",
|
||||
"track_seen": 0
|
||||
}
|
||||
@@ -26,6 +26,12 @@ def get_data():
|
||||
"name": "Payment Entry",
|
||||
"description": _("Bank/Cash transactions against party or for internal transfer")
|
||||
},
|
||||
{
|
||||
"type": "page",
|
||||
"name": "pos",
|
||||
"label": _("POS"),
|
||||
"description": _("Point of Sale")
|
||||
},
|
||||
{
|
||||
"type": "report",
|
||||
"name": "Accounts Receivable",
|
||||
|
||||
@@ -12,7 +12,7 @@ You can create Custom Form, Fields, Scripts and can also create your own Apps
|
||||
to extend ERPNext functionality.
|
||||
|
||||
ERPNext is Open Source under the GNU General Public Licence v3 and has been
|
||||
listed as one of the Best Open Source Softwares in the world by my online
|
||||
listed as one of the Best Open Source Softwares in the world by many online
|
||||
blogs."""
|
||||
|
||||
docs_version = "6.x.x"
|
||||
|
||||
@@ -11,6 +11,10 @@ def get_data():
|
||||
"type": "doctype",
|
||||
"name": "Student"
|
||||
},
|
||||
{
|
||||
"type": "doctype",
|
||||
"name": "Student Log"
|
||||
},
|
||||
{
|
||||
"type": "doctype",
|
||||
"name": "Student Batch"
|
||||
|
||||
@@ -167,9 +167,7 @@ def make_return_doc(doctype, source_name, target_doc=None):
|
||||
target_doc.qty = -1* source_doc.qty
|
||||
if doctype == "Purchase Receipt":
|
||||
target_doc.received_qty = -1* source_doc.qty
|
||||
target_doc.prevdoc_doctype = source_doc.prevdoc_doctype
|
||||
target_doc.prevdoc_docname = source_doc.prevdoc_docname
|
||||
target_doc.prevdoc_detail_docname = source_doc.prevdoc_detail_docname
|
||||
target_doc.purchase_order = source_doc.purchase_order
|
||||
elif doctype == "Purchase Invoice":
|
||||
target_doc.received_qty = -1* source_doc.qty
|
||||
target_doc.purchase_order = source_doc.purchase_order
|
||||
|
||||
@@ -440,33 +440,32 @@ class calculate_taxes_and_totals(object):
|
||||
paid_amount = self.doc.paid_amount \
|
||||
if self.doc.party_account_currency == self.doc.currency else self.doc.base_paid_amount
|
||||
|
||||
self.doc.outstanding_amount = 0
|
||||
if total_amount_to_pay > paid_amount:
|
||||
self.doc.outstanding_amount = flt(total_amount_to_pay - flt(paid_amount),
|
||||
self.doc.precision("outstanding_amount"))
|
||||
self.change_amount()
|
||||
self.calculate_change_amount()
|
||||
|
||||
self.doc.outstanding_amount = flt(total_amount_to_pay - flt(paid_amount) +
|
||||
flt(self.doc.change_amount), self.doc.precision("outstanding_amount"))
|
||||
|
||||
elif self.doc.doctype == "Purchase Invoice":
|
||||
self.doc.outstanding_amount = flt(total_amount_to_pay, self.doc.precision("outstanding_amount"))
|
||||
|
||||
def calculate_paid_amount(self):
|
||||
paid_amount = base_paid_amount = 0.0
|
||||
for payment in self.doc.get('payments'):
|
||||
payment.base_amount = flt(payment.amount * self.doc.conversion_rate)
|
||||
paid_amount += payment.amount
|
||||
base_paid_amount += payment.base_amount
|
||||
if flt(payment.amount) > 0:
|
||||
payment.base_amount = flt(payment.amount * self.doc.conversion_rate)
|
||||
paid_amount += payment.amount
|
||||
base_paid_amount += payment.base_amount
|
||||
|
||||
self.doc.paid_amount = flt(paid_amount, self.doc.precision("paid_amount"))
|
||||
self.doc.base_paid_amount = flt(base_paid_amount, self.doc.precision("base_paid_amount"))
|
||||
|
||||
def change_amount(self):
|
||||
change_amount = 0.0
|
||||
def calculate_change_amount(self):
|
||||
self.doc.change_amount = 0.0
|
||||
if self.doc.paid_amount > self.doc.grand_total:
|
||||
change_amount = flt(self.doc.paid_amount - self.doc.grand_total,
|
||||
self.doc.precision("change_amount"))
|
||||
self.doc.change_amount = flt(self.doc.paid_amount - self.doc.grand_total +
|
||||
self.doc.write_off_amount, self.doc.precision("change_amount"))
|
||||
|
||||
self.doc.change_amount = change_amount;
|
||||
self.doc.base_change_amount = flt(change_amount * self.doc.conversion_rate,
|
||||
self.doc.base_change_amount = flt(self.doc.change_amount * self.doc.conversion_rate,
|
||||
self.doc.precision("base_change_amount"))
|
||||
|
||||
def calculate_margin(self, item):
|
||||
|
||||
@@ -38,7 +38,8 @@ class Lead(SellingController):
|
||||
frappe.throw(_("Campaign Name is required"))
|
||||
|
||||
if self.email_id:
|
||||
validate_email_add(self.email_id, True)
|
||||
if not self.flags.ignore_email_validation:
|
||||
validate_email_add(self.email_id, True)
|
||||
|
||||
if self.email_id == self.lead_owner:
|
||||
# Lead Owner cannot be same as the Lead
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "Document",
|
||||
"editable_grid": 1,
|
||||
"fields": [
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
@@ -266,7 +267,7 @@
|
||||
"no_copy": 1,
|
||||
"oldfieldname": "status",
|
||||
"oldfieldtype": "Select",
|
||||
"options": "Open\nQuotation\nLost\nReplied\nClosed",
|
||||
"options": "Open\nQuotation\nConverted\nLost\nReplied\nClosed",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
@@ -1001,7 +1002,7 @@
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2016-06-14 15:50:55.080217",
|
||||
"modified": "2016-07-28 15:58:06.614493",
|
||||
"modified_by": "Administrator",
|
||||
"module": "CRM",
|
||||
"name": "Opportunity",
|
||||
|
||||
@@ -63,6 +63,8 @@ class Opportunity(TransactionBase):
|
||||
"email_id": self.contact_email,
|
||||
"lead_name": sender_name
|
||||
})
|
||||
|
||||
lead.flags.ignore_email_validation = True
|
||||
lead.insert(ignore_permissions=True)
|
||||
lead_name = lead.name
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ def simulate():
|
||||
if not runs_for:
|
||||
runs_for = frappe.utils.date_diff(frappe.utils.nowdate(), current_date)
|
||||
# runs_for = 100
|
||||
|
||||
|
||||
fixed_asset.work()
|
||||
|
||||
for i in xrange(runs_for):
|
||||
@@ -72,9 +72,6 @@ def simulate():
|
||||
stock.work()
|
||||
accounts.work()
|
||||
projects.run_projects(current_date)
|
||||
# run_stock()
|
||||
# run_accounts()
|
||||
# run_projects()
|
||||
# run_messages()
|
||||
|
||||
current_date = frappe.utils.add_days(current_date, 1)
|
||||
|
||||
@@ -32,6 +32,7 @@ def setup_data():
|
||||
setup_employee()
|
||||
setup_salary_structure()
|
||||
setup_salary_structure_for_timesheet()
|
||||
setup_leave_allocation()
|
||||
setup_mode_of_payment()
|
||||
setup_account_to_expense_type()
|
||||
setup_user_roles()
|
||||
@@ -211,7 +212,7 @@ def setup_user():
|
||||
user = frappe.new_doc("User")
|
||||
user.update(u)
|
||||
user.flags.no_welcome_mail
|
||||
user.password = 'demo'
|
||||
user.new_password = 'demo'
|
||||
user.insert()
|
||||
|
||||
def import_json(doctype, submit=False, values=None):
|
||||
@@ -376,6 +377,12 @@ def setup_budget():
|
||||
|
||||
|
||||
def setup_user_roles():
|
||||
user = frappe.get_doc('User', 'demo@erpnext.com')
|
||||
user.add_roles('HR User', 'HR Manager', 'Accounts User', 'Accounts Manager',
|
||||
'Stock User', 'Stock Manager', 'Sales User', 'Sales Manager', 'Purchase User',
|
||||
'Purchase Manager', 'Projects User', 'Manufacturing User', 'Manufacturing Manager',
|
||||
'Support Team')
|
||||
|
||||
if not frappe.db.get_global('demo_hr_user'):
|
||||
user = frappe.get_doc('User', 'CharmaineGaudreau@example.com')
|
||||
user.add_roles('HR User', 'HR Manager', 'Accounts User')
|
||||
@@ -430,3 +437,23 @@ def setup_pos_profile():
|
||||
})
|
||||
|
||||
pos.insert()
|
||||
|
||||
def setup_leave_allocation():
|
||||
year = now_datetime().year
|
||||
for employee in frappe.get_all('Employee', fields=['name']):
|
||||
leave_types = frappe.get_all("Leave Type", fields=['name', 'max_days_allowed'])
|
||||
for leave_type in leave_types:
|
||||
if not leave_type.max_days_allowed:
|
||||
leave_type.max_days_allowed = 10
|
||||
|
||||
leave_allocation = frappe.get_doc({
|
||||
"doctype": "Leave Allocation",
|
||||
"employee": employee.name,
|
||||
"from_date": "{0}-01-01".format(year),
|
||||
"to_date": "{0}-12-31".format(year),
|
||||
"leave_type": leave_type.name,
|
||||
"new_leaves_allocated": random.randint(1, int(leave_type.max_days_allowed))
|
||||
})
|
||||
leave_allocation.insert()
|
||||
leave_allocation.submit()
|
||||
frappe.db.commit()
|
||||
|
||||
@@ -1,15 +1,19 @@
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
import random
|
||||
from frappe.utils import random_string
|
||||
from frappe.utils import random_string, add_days
|
||||
from erpnext.projects.doctype.timesheet.test_timesheet import make_timesheet
|
||||
from erpnext.projects.doctype.timesheet.timesheet import make_salary_slip, make_sales_invoice
|
||||
from frappe.utils.make_random import how_many, get_random
|
||||
from erpnext.hr.doctype.expense_claim.expense_claim import get_expense_approver, make_bank_entry
|
||||
from erpnext.hr.doctype.leave_application.leave_application import get_leave_balance_on, OverlapError
|
||||
|
||||
def work():
|
||||
frappe.set_user(frappe.db.get_global('demo_hr_user'))
|
||||
year, month = frappe.flags.current_date.strftime("%Y-%m").split("-")
|
||||
|
||||
mark_attendance()
|
||||
make_leave_application()
|
||||
|
||||
# process payroll
|
||||
if not frappe.db.get_value("Salary Slip", {"month": month, "fiscal_year": year}):
|
||||
@@ -123,4 +127,53 @@ def make_sales_invoice_for_timesheet(name):
|
||||
sales_invoice.calculate_taxes_and_totals()
|
||||
sales_invoice.insert()
|
||||
sales_invoice.submit()
|
||||
frappe.db.commit()
|
||||
frappe.db.commit()
|
||||
|
||||
def make_leave_application():
|
||||
allocated_leaves = frappe.get_all("Leave Allocation", fields=['employee', 'leave_type'])
|
||||
|
||||
for allocated_leave in allocated_leaves:
|
||||
leave_balance = get_leave_balance_on(allocated_leave.employee, allocated_leave.leave_type, frappe.flags.current_date,
|
||||
consider_all_leaves_in_the_allocation_period=True)
|
||||
if leave_balance != 0:
|
||||
if leave_balance == 1:
|
||||
to_date = frappe.flags.current_date
|
||||
else:
|
||||
to_date = add_days(frappe.flags.current_date, random.randint(0, leave_balance-1))
|
||||
|
||||
leave_application = frappe.get_doc({
|
||||
"doctype": "Leave Application",
|
||||
"employee": allocated_leave.employee,
|
||||
"from_date": frappe.flags.current_date,
|
||||
"to_date": to_date,
|
||||
"leave_type": allocated_leave.leave_type,
|
||||
"status": "Approved"
|
||||
})
|
||||
try:
|
||||
leave_application.insert()
|
||||
leave_application.submit()
|
||||
frappe.db.commit()
|
||||
except (OverlapError):
|
||||
frappe.db.rollback()
|
||||
|
||||
def mark_attendance():
|
||||
att_date = frappe.flags.current_date
|
||||
for employee in frappe.get_all('Employee', fields=['name'], filters = {'status': 'Active'}):
|
||||
|
||||
if not frappe.db.get_value("Attendance", {"employee": employee.name, "att_date": att_date}):
|
||||
attendance = frappe.get_doc({
|
||||
"doctype": "Attendance",
|
||||
"employee": employee.name,
|
||||
"att_date": att_date
|
||||
})
|
||||
leave = frappe.db.sql("""select name from `tabLeave Application`
|
||||
where employee = %s and %s between from_date and to_date and status = 'Approved'
|
||||
and docstatus = 1""", (employee.name, att_date))
|
||||
|
||||
if leave:
|
||||
attendance.status = "Absent"
|
||||
else:
|
||||
attendance.status = "Present"
|
||||
attendance.save()
|
||||
attendance.submit()
|
||||
frappe.db.commit()
|
||||
@@ -7,6 +7,8 @@ import frappe, random
|
||||
from frappe.desk import query_report
|
||||
from erpnext.stock.stock_ledger import NegativeStockError
|
||||
from erpnext.stock.doctype.serial_no.serial_no import SerialNoRequiredError, SerialNoQtyError
|
||||
from erpnext.stock.doctype.delivery_note.delivery_note import make_sales_return
|
||||
from erpnext.stock.doctype.purchase_receipt.purchase_receipt import make_purchase_return
|
||||
|
||||
def work():
|
||||
frappe.set_user(frappe.db.get_global('demo_manufacturing_user'))
|
||||
@@ -15,6 +17,8 @@ def work():
|
||||
make_delivery_note()
|
||||
make_stock_reconciliation()
|
||||
submit_draft_stock_entries()
|
||||
make_sales_return_records()
|
||||
make_purchase_return_records()
|
||||
|
||||
def make_purchase_receipt():
|
||||
if random.random() < 0.6:
|
||||
@@ -95,3 +99,26 @@ def submit_draft_stock_entries():
|
||||
OperationsNotCompleteError):
|
||||
frappe.db.rollback()
|
||||
|
||||
def make_sales_return_records():
|
||||
for data in frappe.get_all('Delivery Note', fields=["name"], filters={"docstatus": 1}):
|
||||
if random.random() < 0.2:
|
||||
print "dn"
|
||||
try:
|
||||
dn = make_sales_return(data.name)
|
||||
dn.insert()
|
||||
dn.submit()
|
||||
frappe.db.commit()
|
||||
except Exception, e:
|
||||
frappe.db.rollback()
|
||||
|
||||
def make_purchase_return_records():
|
||||
for data in frappe.get_all('Purchase Receipt', fields=["name"], filters={"docstatus": 1}):
|
||||
if random.random() < 0.2:
|
||||
print "purchase"
|
||||
try:
|
||||
pr = make_purchase_return(data.name)
|
||||
pr.insert()
|
||||
pr.submit()
|
||||
frappe.db.commit()
|
||||
except Exception, e:
|
||||
frappe.db.rollback()
|
||||
|
||||
BIN
erpnext/docs/assets/img/accounts/asset-item.png
Normal file
|
After Width: | Height: | Size: 68 KiB |
BIN
erpnext/docs/assets/img/accounts/opening-2.png
Normal file
|
After Width: | Height: | Size: 89 KiB |
BIN
erpnext/docs/assets/img/accounts/opening-3.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
erpnext/docs/assets/img/accounts/opening-4.png
Normal file
|
After Width: | Height: | Size: 88 KiB |
BIN
erpnext/docs/assets/img/accounts/opening-5.png
Normal file
|
After Width: | Height: | Size: 105 KiB |
BIN
erpnext/docs/assets/img/accounts/opening-6.png
Normal file
|
After Width: | Height: | Size: 105 KiB |
BIN
erpnext/docs/assets/img/accounts/opening-7.png
Normal file
|
After Width: | Height: | Size: 70 KiB |
BIN
erpnext/docs/assets/img/accounts/perpetual-1.png
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
erpnext/docs/assets/img/accounts/pos-customer.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
erpnext/docs/assets/img/accounts/pos-item.png
Normal file
|
After Width: | Height: | Size: 143 KiB |
BIN
erpnext/docs/assets/img/accounts/pos-payment.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/assign-1.png
Normal file
|
After Width: | Height: | Size: 67 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/assign-2.png
Normal file
|
After Width: | Height: | Size: 82 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/assign-3.png
Normal file
|
After Width: | Height: | Size: 82 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/assign-4.png
Normal file
|
After Width: | Height: | Size: 61 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/calendar-1.png
Normal file
|
After Width: | Height: | Size: 70 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/calendar-2.gif
Normal file
|
After Width: | Height: | Size: 136 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/calendar-3.png
Normal file
|
After Width: | Height: | Size: 67 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/calendar-4.png
Normal file
|
After Width: | Height: | Size: 74 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/calendar-5.png
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/calendar-6.png
Normal file
|
After Width: | Height: | Size: 68 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/calendar-7.png
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/chat-1.png
Normal file
|
After Width: | Height: | Size: 86 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/chat-2.png
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/comments-1.png
Normal file
|
After Width: | Height: | Size: 80 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/note-1.png
Normal file
|
After Width: | Height: | Size: 79 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/share-1.gif
Normal file
|
After Width: | Height: | Size: 252 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/tags-1.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
BIN
erpnext/docs/assets/img/collaboration-tools/tags-2.png
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
erpnext/docs/assets/img/setup/print/cheque-1.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
erpnext/docs/assets/img/setup/print/cheque-2.png
Normal file
|
After Width: | Height: | Size: 60 KiB |
BIN
erpnext/docs/assets/img/setup/print/cheque-3.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
erpnext/docs/assets/img/setup/print/cheque-4.png
Normal file
|
After Width: | Height: | Size: 119 KiB |
BIN
erpnext/docs/assets/img/setup/print/cheque-5.gif
Normal file
|
After Width: | Height: | Size: 146 KiB |
BIN
erpnext/docs/assets/img/setup/print/sample-cheque.jpg
Normal file
|
After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 5.9 KiB |
|
Before Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 6.6 KiB |
|
Before Width: | Height: | Size: 9.5 KiB |
|
Before Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 109 KiB |
|
Before Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 125 KiB |
@@ -38,7 +38,7 @@ You can create Custom Form, Fields, Scripts and can also create your own Apps
|
||||
to extend ERPNext functionality.</p>
|
||||
|
||||
<p>ERPNext is Open Source under the GNU General Public Licence v3 and has been
|
||||
listed as one of the Best Open Source Softwares in the world by my online
|
||||
listed as one of the Best Open Source Softwares in the world by many online
|
||||
blogs.</p>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -1,21 +1,19 @@
|
||||
journal-entry
|
||||
sales-invoice
|
||||
purchase-invoice
|
||||
payment-request
|
||||
chart-of-accounts
|
||||
opening-accounts
|
||||
sales-invoice
|
||||
point-of-sale-pos-invoice
|
||||
purchase-invoice
|
||||
journal-entry
|
||||
payment-entry
|
||||
multi-currency-accounting
|
||||
advance-payment-entry
|
||||
payment-request
|
||||
credit-limit
|
||||
opening-entry
|
||||
accounting-reports
|
||||
accounting-entries
|
||||
managing-fixed-assets
|
||||
budgeting
|
||||
opening-accounts
|
||||
item-wise-tax
|
||||
point-of-sale-pos-invoice
|
||||
multi-currency-accounting
|
||||
item-wise-taxation
|
||||
recurring-orders-and-invoices
|
||||
pricing-rule
|
||||
tools
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
Taxes selected in the Tax and Other Charges in transactions are applied on all the items. If you need different taxes applied on items selected in the same transaction, you should setup you item and tax master as explained in the steps below.
|
||||
|
||||
####Step 1: Mention Tax Applicable in the Item master
|
||||
@@ -2,30 +2,33 @@ In ERPNext, you can maintain fixed asset records like Computers, Furnitures, Car
|
||||
|
||||
## Asset Category
|
||||
|
||||
To start first you should create an Asset Category, depending on the type of assets. For example, all your desktops and laptops can be part of an Asset Category named "Computers". Here, you can set default depreciation method, periodicity and depreciation related accounts, which will be applicable to all the assets under the category.
|
||||
Based on the type of assets, create Asset Category. For example, all your desktops and laptops can be part of an Asset Category named "Computers". Here you can set default depreciation method, periodicity and depreciation related accounts, which will be applicable to all the assets under the category.
|
||||
|
||||
<img class="screenshot" alt="Asset Category" src="{{docs_base_url}}/assets/img/accounts/asset-category.png">
|
||||
|
||||
> **Note:** You can also set default depreciation related Accounts and Cost Centers in Company.
|
||||
|
||||
> **Note:** You can also set default depreciation related Accounts and Cost Centers in Company master.
|
||||
|
||||
## Asset
|
||||
|
||||
Next step will be creating the fixed asset record. Asset record is the heart of fixed asset management, all the activities like purchasing, depreciation, scrapping or sales are managed against it.
|
||||
Asset master is the heart of fixed asset management feature. All the transactions related to Asset like purchasing, sales, depreciation, scrapping will be managed from the Asset master.
|
||||
|
||||
<img class="screenshot" alt="Asset" src="{{docs_base_url}}/assets/img/accounts/asset.png">
|
||||
|
||||
Explanation of the fields:
|
||||
|
||||
1. Asset Category: The category of assets it belongs to.
|
||||
2. Is Existing Asset: Check if the asset is being carried forward from the previous Fiscal Year. The existing assets which are partially / fully depreciated can also be created/maintained for the future reference.
|
||||
3. Status: The options are - Draft, Submitted, Partially Depreciated, Fully Depreciated, Sold and Scrapped.
|
||||
4. Warehouse: Set the location of the asset.
|
||||
5. Gross Purchase Amount: The purchase cost of the asset
|
||||
6. Expected Value After Useful Life: Useful Life is the time period over in which the company expects that the asset will be productive. After that period, either the asset is scrapped or sold. In case it is sold, mention the estimated value here. This value is also known as Salvage Value, Scrap Value or Residual Value.
|
||||
7. Opening Accumulated Depreciation: The accumulated depreciation amount which has already been booked for an existing asset.
|
||||
8. Current Value (After Depreciation): In case you are creating record of an existing asset which has already been partially/fully depreciated, mention the currect value of the asset. In case of new asset, mention the purchase amount or leave it blank.
|
||||
9. Depreciation Method: There are two options: Straight Line and Double Declining Balance.
|
||||
1. Item Code: An Item for the Asset must be a non-stock item, with "Is Asset" field checked.
|
||||
|
||||
<img class="screenshot" alt="Asset Item" src="{{docs_base_url}}/assets/img/accounts/asset-item.png">
|
||||
|
||||
2. Asset Category: The category of assets it belongs to.
|
||||
3. Is Existing Asset: Check if the asset is being carried forward from the previous Fiscal Year. The existing assets which are partially / fully depreciated can also be created/maintained for the future reference.
|
||||
4. Status: The options are - Draft, Submitted, Partially Depreciated, Fully Depreciated, Sold and Scrapped.
|
||||
5. Warehouse: Set the location of the asset.
|
||||
6. Gross Purchase Amount: The purchase cost of the asset.
|
||||
7. Expected Value After Useful Life: Useful Life is the time period over in which the company expects that the asset will be productive. After that period, either the asset is scrapped or sold. In case it is sold, mention the estimated value here. This value is also known as Salvage Value, Scrap Value or Residual Value.
|
||||
8. Opening Accumulated Depreciation: The accumulated depreciation amount which has already been booked for an existing asset.
|
||||
9. Current Value (After Depreciation): In case you are creating record of an existing asset which has already been partially/fully depreciated, mention the current value of the asset. In case of new asset, mention the purchase amount or leave it blank.
|
||||
10. Depreciation Method: There are two options: Straight Line and Double Declining Balance.
|
||||
- Straight Line: This method spreads the cost of the fixed asset evenly over its useful life.
|
||||
- Double Declining Method: An accelerated method of depreciation, it results in higher depreciation expense in the earlier years of ownership.
|
||||
10. Total Number of Depreciations: The total number of depreciations during the useful life. In case of existing assets which are partially depreciated, mention the number of pending depreciations.
|
||||
@@ -52,16 +55,16 @@ For better visibility, net value of the asset on different depreciation dates ar
|
||||
|
||||
## Purchase an Asset
|
||||
|
||||
For purchasing a new asset, create and submit the asset record with all the depreciation settings. Then create a Purchase Invoice via "Make Purchase Invoice" button. On clicking the button, system will load a new Purchase Invoice form with pre-loaded items table. It will also set proper fixed asset account (defined in teh Asset Category) in the Expense Account field. You need to select Supplier and other necessary details and submit the Purchase Invoice.
|
||||
For purchasing a new asset, create and submit the asset record with all the depreciation settings. Then create a Purchase Invoice via "Make Purchase Invoice" button. On clicking the button, system will load a new Purchase Invoice form with pre-loaded items table. It will also set proper fixed asset account (defined in the Asset Category) in the Expense Account field. You need to select Supplier and other necessary details and submit the Purchase Invoice.
|
||||
|
||||
<img class="screenshot" alt="Asset" src="{{docs_base_url}}/assets/img/accounts/asset-purchase-invoice.png">
|
||||
|
||||
On submission of the invoice, the "Fixed Asset Account" will be debited and payable account will be credited. It also updates purchase date, supplier and Purchase Invoice no in the Asset record.
|
||||
On submission of the invoice, the "Fixed Asset Account" will be debited and payable account will be credited. It also updates purchase date, supplier and Purchase Invoice no. in the Asset master.
|
||||
|
||||
|
||||
## Sale an Asset
|
||||
|
||||
To sale an asset, open the asset record and create a Sales Invoice using "Sale Asset" button. On submission of the Sales Invoice, following entries will take place:
|
||||
To sale an asset, open the asset record and create a Sales Invoice by clicking on "Sale Asset". On submission of the Sales Invoice, following entries will take place:
|
||||
|
||||
- "Receivable Account" (Debtors) will be debited by the sales amount.
|
||||
- "Fixed Asset Account" will be credited by the purchase amount of asset.
|
||||
|
||||