Compare commits
137 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 | ||
|
|
5658fdfaed | ||
|
|
1c93dd0591 | ||
|
|
c910e0c614 | ||
|
|
6c3ac9587e | ||
|
|
316f78f859 | ||
|
|
5b2af6ad40 |
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.2'
|
||||
__version__ = '7.0.17'
|
||||
|
||||
def get_default_company(user=None):
|
||||
'''Get default company for user'''
|
||||
|
||||
@@ -251,8 +251,8 @@ class PaymentEntry(AccountsController):
|
||||
self.unallocated_amount = party_amount - self.total_allocated_amount
|
||||
|
||||
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 +267,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 +569,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 +673,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
|
||||
@@ -47,7 +47,7 @@
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2016-07-25 01:35:33.540019",
|
||||
"modified": "2016-07-25 05:24:22.726993",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Payment Gateway",
|
||||
@@ -95,7 +95,7 @@
|
||||
"write": 0
|
||||
}
|
||||
],
|
||||
"quick_entry": 0,
|
||||
"quick_entry": 1,
|
||||
"read_only": 1,
|
||||
"read_only_onload": 0,
|
||||
"sort_field": "modified",
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -3,12 +3,14 @@
|
||||
"allow_import": 1,
|
||||
"allow_rename": 1,
|
||||
"autoname": "naming_series:",
|
||||
"beta": 0,
|
||||
"creation": "2013-01-10 16:34:11",
|
||||
"custom": 0,
|
||||
"description": "Supplier of Goods or Services.",
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "Setup",
|
||||
"editable_grid": 0,
|
||||
"fields": [
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
@@ -705,16 +707,18 @@
|
||||
"icon": "icon-user",
|
||||
"idx": 370,
|
||||
"image_field": "image",
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
"in_dialog": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2016-04-28 17:36:44.742525",
|
||||
"modified": "2016-07-25 05:20:29.238820",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Buying",
|
||||
"name": "Supplier",
|
||||
"name_case": "Title Case",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
@@ -858,7 +862,7 @@
|
||||
"write": 0
|
||||
}
|
||||
],
|
||||
"quick_entry": 0,
|
||||
"quick_entry": 1,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0,
|
||||
"search_fields": "supplier_name, supplier_type",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import frappe, json
|
||||
from frappe.utils import cstr, cint, get_fullname
|
||||
from frappe.utils import cstr, cint, get_fullname, validate_email_add
|
||||
from frappe import msgprint, _
|
||||
from frappe.model.mapper import get_mapped_doc
|
||||
from erpnext.setup.utils import get_exchange_rate
|
||||
@@ -43,7 +43,7 @@ class Opportunity(TransactionBase):
|
||||
|
||||
def make_new_lead_if_required(self):
|
||||
"""Set lead against new opportunity"""
|
||||
if not (self.lead or self.customer) and self.contact_email:
|
||||
if not (self.lead or self.customer) and self.contact_email and validate_email_add(self.contact_email):
|
||||
lead_name = frappe.db.get_value("Lead", {"email_id": self.contact_email})
|
||||
if not lead_name:
|
||||
sender_name = get_fullname(self.contact_email)
|
||||
@@ -63,6 +63,7 @@ class Opportunity(TransactionBase):
|
||||
"email_id": self.contact_email,
|
||||
"lead_name": sender_name
|
||||
})
|
||||
|
||||
lead.insert(ignore_permissions=True)
|
||||
lead_name = lead.name
|
||||
|
||||
|
||||
@@ -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()
|
||||
@@ -430,3 +431,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/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/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: 99 KiB |
|
Before Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 109 KiB |
@@ -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.
|
||||
|
||||
@@ -1,30 +1,22 @@
|
||||
# Point of Sale Invoice
|
||||
|
||||
Point of Sale (POS) is the place where a retail transaction is completed. It
|
||||
is the point at which a customer makes a payment to the merchant in exchange
|
||||
for goods or services. For retail operations, the delivery of goods, accrual
|
||||
of sale and payment all happens in one event, that is usually called the
|
||||
“Point of Sale”.
|
||||
For retail operations, the delivery of goods, accrual of sale and payment all happens in one event, that is usually called the “Point of Sale” (POS).
|
||||
|
||||
You can make a Sales Invoice of type POS by checking on “Is POS”. When you
|
||||
check this, you will notice that some fields get hidden and some new ones
|
||||
emerge.
|
||||
<iframe width="660" height="371" src="https://www.youtube.com/embed/4WkelWkbP_c" frameborder="0" allowfullscreen></iframe>
|
||||
|
||||
> Tip: In retail, you may not create a separate Customer record for each
|
||||
customer. You can create a general Customer called “Walk-in Customer” and make
|
||||
all your transactions against this Customer record.
|
||||
###Offline POS
|
||||
|
||||
#### Setting Up POS
|
||||
POS transactions are generally quick, hence should have as less dependency as possible. In ERPNext, you can create POS Invoices even when not connected to the internet.
|
||||
|
||||
POS Invoices created in the offline mode will be saved locally in the browser. If internet connection is lost which creating POS Invoice, you will still be able can proceed forward. Once internet connection is available again, offline invoices will be synced, and pushed onto your ERPNext account. To learn more on how POS Invoices can be created when offline, [check here.](https://frappe.io/blog/blog/erpnext-features/offline-pos-in-erpnext-7)
|
||||
|
||||
#### POS Profile
|
||||
|
||||
In ERPNext all Sales and Purchase transactions, like Sales Invoice, Quotation, Sales Order, Purchase Order etc. can be edited via the POS. There two steps to Setup POS:
|
||||
|
||||
1. Enable POS View via (Setup > Customize > Feature Setup)
|
||||
2. Create a [POS Setting]({{docs_base_url}}/user/manual/en/setting-up/pos-setting.html) record
|
||||
|
||||
#### Switch to POS View
|
||||
|
||||
Open any sales / purchase transaction. Click on the Computer <i class="icon-desktop"></i> Icon.
|
||||
|
||||
#### Different sections of the POS
|
||||
|
||||
* Update Stock: If this is checked, Stock Ledger Entries will be made when you “Submit” this Sales Invoice thereby eliminating the need for a separate Delivery Note.
|
||||
@@ -32,17 +24,22 @@ Open any sales / purchase transaction. Click on the Computer <i class="icon-desk
|
||||
* Update Payment Details like your Bank / Cash Account, Paid amount etc.
|
||||
* If you are writing off certain amount. For example when you receive extra cash as a result of not having exact denomination of change, check on ‘Write off Outstanding Amount’ and set the Account.
|
||||
|
||||
|
||||
### Customer
|
||||
|
||||
You can select one of the existing Customer from the Customer master. If Customer doesn't exist in the Customer master, enter Customer Name in the POS Invoice view itself. On creation of POS Invoice, Customer will be auto-created in the Customer master.
|
||||
|
||||
<img class="screenshot" alt="POS Customer" src="{{docs_base_url}}/assets/img/accounts/pos-customer.png">
|
||||
|
||||
### Adding an Item
|
||||
|
||||
At the billing counter, the retailer needs to select Items which the consumer
|
||||
buys. In the POS interface you can select an Item by two methods. One, is by
|
||||
clicking on the Item image and the other, is through the Barcode / Serial No.
|
||||
At the billing counter, the retailer needs to select Items which the consumer buys. In the POS interface you can select an Item by two methods. One, is by clicking on the Item image and the other, is through the Barcode / Serial No.
|
||||
|
||||
**Select Item** \- To select a product click on the Item image and add it into the cart. A cart is an area that prepares a customer for checkout by allowing to edit product information, adjust taxes and add discounts.
|
||||
|
||||
**Barcode / Serial No** \- A Barcode / Serial No is an optical machine-readable representation of data relating to the object to which it is attached. Enter Barcode / Serial No in the box as shown in the image below and pause for a second, the item will be automatically added to the cart.
|
||||
|
||||

|
||||
<img class="screenshot" alt="POS Item" src="{{docs_base_url}}/assets/img/accounts/pos-item.png">
|
||||
|
||||
> Tip: To change the quantity of an Item, enter your desired quantity in the
|
||||
quantity box. These are mostly used if the same Item is purchased in bulk.
|
||||
@@ -52,18 +49,11 @@ in Search box.
|
||||
|
||||
### Removing an Item
|
||||
|
||||
There are two ways to remove an Item.
|
||||
Set Qty as zero to remove Item from the POS invoice. There are two ways to remove an Item.
|
||||
|
||||
* Select an Item by clicking on the row of that Item from Item cart. Then click on “Del” button. OR
|
||||
* If Item's Qty is 1, click on a minus sign to make it zero.
|
||||
|
||||
* Enter 0(zero) quantity of any item to delete that item.
|
||||
|
||||
To remove multiple Items together, select multiple rows & click on “Del”
|
||||
button.
|
||||
|
||||
> Delete button appears only when Items are selected.
|
||||
|
||||

|
||||
* Manually enter 0(zero) quantity.
|
||||
|
||||
### Make Payment
|
||||
|
||||
@@ -73,8 +63,8 @@ ready to make the Payment. Payment process is divided into 3 steps -
|
||||
1. Click on “Make Payment” to get the Payment window.
|
||||
2. Select your “Mode of Payment”.
|
||||
3. Click on “Pay” button to Save the document.
|
||||
|
||||

|
||||
|
||||
<img class="screenshot" alt="POS Payment" src="{{docs_base_url}}/assets/img/accounts/pos-payment.png">
|
||||
|
||||
Submit the document to finalise the record. After the document is submitted,
|
||||
you can either print or email it directly to the customer.
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
#Cheque Print Template
|
||||
|
||||
Business involves making payment to various parties like suppliers and employees. Payment can be made in various modes like cash, NEFT or cheque. If you are making a payment via cheque, you can also create a Print Format for printing Cheque from ERPNext based on the Payment Entry.
|
||||
|
||||
<img class="screenshot" alt="Sample Cheque" src="{{docs_base_url}}/assets/img/setup/print/sample-cheque.jpg">
|
||||
|
||||
Using the Cheque Print Template you can generate a new Print Format based. It will be created based the cheque format provided by your bank.
|
||||
|
||||
####Create New
|
||||
|
||||
To create a new Print Format based on the specific cheque’s format, go to:
|
||||
|
||||
`Account > Tools > Cheque Printing Template > New`
|
||||
|
||||
In the Cheque Print Template, for each value (say Payee, Date), exact co-ordinates are provided based on where that value should be printed on a cheque. Co-ordinates are provided in centi-meter.
|
||||
|
||||
<img class="screenshot" alt="Sample Cheque" src="{{docs_base_url}}/assets/img/setup/print/cheque-1.png">
|
||||
|
||||
####New Format via Scanning
|
||||
|
||||
To speed up creation of a new cheque printing format, you can upload scanned image of the cheque. Considering the scanned image for the cheque, system automatically updates co-ordinates for each value like party name, amount, date, amount in words etc.
|
||||
|
||||
<img class="screenshot" alt="Sample Cheque" src="{{docs_base_url}}/assets/img/setup/print/cheque-2.png">
|
||||
|
||||
####New format by manual entry
|
||||
You can manually provide the co-ordinate for each value based on where you want to to be printed on the cheque.
|
||||
|
||||
####Preview
|
||||
Based on co-ordinates provided for all the values, a preview be shown as to how the values will be printed on the cheque.
|
||||
|
||||
<img class="screenshot" alt="Sample Cheque" src="{{docs_base_url}}/assets/img/setup/print/cheque-3.png">
|
||||
|
||||
####New Print Format
|
||||
|
||||
If the preview looks promising, click on the button to create a new Print Format for printing cheque. Based on the values provided in the Cheque Print Template, the system will auto-generate an HTML script for the cheque’s Print Format.
|
||||
|
||||
<img class="screenshot" alt="Sample Cheque" src="{{docs_base_url}}/assets/img/setup/print/cheque-4.png">
|
||||
|
||||
####Printing Cheque
|
||||
|
||||
New print format generated for the cheque will be visible in the Payment Entry form. After creating the payment entry, you will be able to print transaction details on the cheque.
|
||||
|
||||
<img class="screenshot" alt="Sample Cheque" src="{{docs_base_url}}/assets/img/setup/print/cheque-5.gif">
|
||||
|
||||
|
||||
@@ -4,3 +4,4 @@ print-headings
|
||||
letter-head
|
||||
address-template
|
||||
terms-and-conditions
|
||||
cheque-print-template
|
||||
@@ -5,7 +5,9 @@ Social Login enables users to login to ERPNext via their Google, Facebook or Git
|
||||
Checkout the following Video Tutorials to understand how to enable social logins on ERPNext
|
||||
|
||||
* for FaceBook - https://www.youtube.com/watch?v=zC6Q6gIfiw8
|
||||
* for Google - https://www.youtube.com/watch?v=w_EAttrE9sw
|
||||
* for Google - https://www.youtube.com/watch?v=w_EAttrE9sw
|
||||
* for GitHub - https://www.youtube.com/watch?v=bG71DxxkVjQ
|
||||
|
||||
{next}
|
||||
For Google the *Authorized redirect URI* is [yoursite]/api/method/frappe.www.login.login_via_google
|
||||
|
||||
{next}
|
||||
|
||||
8
erpnext/hr/doctype/branch/branch.js
Normal file
@@ -0,0 +1,8 @@
|
||||
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
frappe.ui.form.on('Branch', {
|
||||
refresh: function(frm) {
|
||||
|
||||
}
|
||||
});
|
||||
@@ -3,11 +3,13 @@
|
||||
"allow_import": 1,
|
||||
"allow_rename": 1,
|
||||
"autoname": "field:branch",
|
||||
"beta": 0,
|
||||
"creation": "2013-01-10 16:34:13",
|
||||
"custom": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "Setup",
|
||||
"editable_grid": 0,
|
||||
"fields": [
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
@@ -17,6 +19,7 @@
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"label": "Branch",
|
||||
@@ -26,6 +29,7 @@
|
||||
"oldfieldtype": "Data",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@@ -38,13 +42,14 @@
|
||||
"hide_toolbar": 0,
|
||||
"icon": "icon-code-fork",
|
||||
"idx": 1,
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
"in_dialog": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2015-11-16 06:29:42.974184",
|
||||
"modified": "2016-07-25 05:24:26.534086",
|
||||
"modified_by": "Administrator",
|
||||
"module": "HR",
|
||||
"name": "Branch",
|
||||
@@ -91,6 +96,8 @@
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"quick_entry": 1,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0
|
||||
"read_only_onload": 0,
|
||||
"track_seen": 0
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
Type of salary deduction.
|
||||
|
||||
e.g. Tax paid on behalf of the employee that is deducted from the salary.
|
||||
@@ -1 +0,0 @@
|
||||
from __future__ import unicode_literals
|
||||
@@ -1,101 +0,0 @@
|
||||
{
|
||||
"allow_copy": 0,
|
||||
"allow_import": 1,
|
||||
"allow_rename": 1,
|
||||
"autoname": "field:deduction_name",
|
||||
"creation": "2013-01-22 16:50:30",
|
||||
"custom": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "Setup",
|
||||
"fields": [
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "deduction_name",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"label": "Name",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"oldfieldname": "deduction_name",
|
||||
"oldfieldtype": "Data",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "description",
|
||||
"fieldtype": "Small Text",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"label": "Description",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"oldfieldname": "description",
|
||||
"oldfieldtype": "Small Text",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0,
|
||||
"width": "300px"
|
||||
}
|
||||
],
|
||||
"hide_heading": 0,
|
||||
"hide_toolbar": 0,
|
||||
"icon": "icon-flag",
|
||||
"idx": 1,
|
||||
"in_create": 0,
|
||||
"in_dialog": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2015-11-16 06:29:44.572917",
|
||||
"modified_by": "Administrator",
|
||||
"module": "HR",
|
||||
"name": "Deduction Type",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 0,
|
||||
"cancel": 0,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 0,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "HR User",
|
||||
"set_user_permissions": 0,
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# License: GNU General Public License v3. See license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
|
||||
from frappe.model.document import Document
|
||||
|
||||
class DeductionType(Document):
|
||||
pass
|
||||
@@ -1,7 +0,0 @@
|
||||
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# License: GNU General Public License v3. See license.txt
|
||||
from __future__ import unicode_literals
|
||||
|
||||
|
||||
import frappe
|
||||
test_records = frappe.get_test_records('Deduction Type')
|
||||
@@ -1,10 +0,0 @@
|
||||
[
|
||||
{
|
||||
"doctype": "Deduction Type",
|
||||
"deduction_name": "_Test Professional Tax"
|
||||
},
|
||||
{
|
||||
"doctype": "Deduction Type",
|
||||
"deduction_name": "_Test TDS"
|
||||
}
|
||||
]
|
||||
8
erpnext/hr/doctype/department/department.js
Normal file
@@ -0,0 +1,8 @@
|
||||
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
frappe.ui.form.on('Department', {
|
||||
refresh: function(frm) {
|
||||
|
||||
}
|
||||
});
|
||||
@@ -3,11 +3,13 @@
|
||||
"allow_import": 1,
|
||||
"allow_rename": 1,
|
||||
"autoname": "field:department_name",
|
||||
"beta": 0,
|
||||
"creation": "2013-02-05 11:48:26",
|
||||
"custom": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "Setup",
|
||||
"editable_grid": 0,
|
||||
"fields": [
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
@@ -17,6 +19,7 @@
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"label": "Department",
|
||||
@@ -26,6 +29,7 @@
|
||||
"oldfieldtype": "Data",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@@ -42,6 +46,7 @@
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"label": "Leave Block List",
|
||||
@@ -50,6 +55,7 @@
|
||||
"options": "Leave Block List",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -62,13 +68,14 @@
|
||||
"hide_toolbar": 0,
|
||||
"icon": "icon-sitemap",
|
||||
"idx": 1,
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
"in_dialog": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2015-11-16 06:29:45.172261",
|
||||
"modified": "2016-08-01 12:44:43.338689",
|
||||
"modified_by": "Administrator",
|
||||
"module": "HR",
|
||||
"name": "Department",
|
||||
@@ -93,8 +100,31 @@
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 0,
|
||||
"cancel": 0,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Academics User",
|
||||
"set_user_permissions": 0,
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"quick_entry": 1,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0
|
||||
"read_only_onload": 0,
|
||||
"sort_order": "ASC",
|
||||
"track_seen": 0
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
Type of earning that is a part of the salary.
|
||||
|
||||
e.g. basic salary, bonus etc.
|
||||
@@ -1 +0,0 @@
|
||||
from __future__ import unicode_literals
|
||||
@@ -1,101 +0,0 @@
|
||||
{
|
||||
"allow_copy": 0,
|
||||
"allow_import": 1,
|
||||
"allow_rename": 1,
|
||||
"autoname": "field:earning_name",
|
||||
"creation": "2013-01-24 11:03:32",
|
||||
"custom": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "Setup",
|
||||
"fields": [
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "earning_name",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"label": "Name",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"oldfieldname": "earning_name",
|
||||
"oldfieldtype": "Data",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "description",
|
||||
"fieldtype": "Small Text",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"label": "Description",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"oldfieldname": "description",
|
||||
"oldfieldtype": "Small Text",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0,
|
||||
"width": "300px"
|
||||
}
|
||||
],
|
||||
"hide_heading": 0,
|
||||
"hide_toolbar": 0,
|
||||
"icon": "icon-flag",
|
||||
"idx": 1,
|
||||
"in_create": 0,
|
||||
"in_dialog": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2015-11-16 06:29:45.813984",
|
||||
"modified_by": "Administrator",
|
||||
"module": "HR",
|
||||
"name": "Earning Type",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 0,
|
||||
"cancel": 0,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 0,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "HR User",
|
||||
"set_user_permissions": 0,
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# License: GNU General Public License v3. See license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
|
||||
from frappe.model.document import Document
|
||||
|
||||
class EarningType(Document):
|
||||
pass
|
||||
@@ -1,7 +0,0 @@
|
||||
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# License: GNU General Public License v3. See license.txt
|
||||
from __future__ import unicode_literals
|
||||
|
||||
|
||||
import frappe
|
||||
test_records = frappe.get_test_records('Earning Type')
|
||||
@@ -1,12 +0,0 @@
|
||||
[
|
||||
{
|
||||
"doctype": "Earning Type",
|
||||
"earning_name": "_Test Basic Salary",
|
||||
"taxable": "Yes"
|
||||
},
|
||||
{
|
||||
"doctype": "Earning Type",
|
||||
"earning_name": "_Test Allowance",
|
||||
"taxable": "Yes"
|
||||
}
|
||||
]
|
||||
8
erpnext/hr/doctype/interest/interest.js
Normal file
@@ -0,0 +1,8 @@
|
||||
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
frappe.ui.form.on('Interest', {
|
||||
refresh: function(frm) {
|
||||
|
||||
}
|
||||
});
|
||||
144
erpnext/hr/doctype/interest/interest.json
Normal file
@@ -0,0 +1,144 @@
|
||||
{
|
||||
"allow_copy": 0,
|
||||
"allow_import": 1,
|
||||
"allow_rename": 0,
|
||||
"autoname": "field:interest",
|
||||
"beta": 0,
|
||||
"creation": "2016-07-25 07:12:33.600702",
|
||||
"custom": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "Setup",
|
||||
"editable_grid": 1,
|
||||
"fields": [
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "interest",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Interest",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
}
|
||||
],
|
||||
"hide_heading": 0,
|
||||
"hide_toolbar": 0,
|
||||
"idx": 0,
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
"in_dialog": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2016-08-01 05:47:29.479141",
|
||||
"modified_by": "Administrator",
|
||||
"module": "HR",
|
||||
"name": "Interest",
|
||||
"name_case": "",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 0,
|
||||
"cancel": 0,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Academics User",
|
||||
"set_user_permissions": 0,
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 0,
|
||||
"cancel": 0,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "HR Manager",
|
||||
"set_user_permissions": 0,
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 0,
|
||||
"cancel": 0,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "HR User",
|
||||
"set_user_permissions": 0,
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 0,
|
||||
"cancel": 0,
|
||||
"create": 0,
|
||||
"delete": 0,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Employee",
|
||||
"set_user_permissions": 0,
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"write": 0
|
||||
}
|
||||
],
|
||||
"quick_entry": 1,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0,
|
||||
"sort_field": "modified",
|
||||
"sort_order": "DESC",
|
||||
"track_seen": 0
|
||||
}
|
||||
@@ -1,10 +1,10 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2015, Frappe Technologies and contributors
|
||||
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
from frappe.model.document import Document
|
||||
|
||||
class FeeAmount(Document):
|
||||
class Interest(Document):
|
||||
pass
|
||||
12
erpnext/hr/doctype/interest/test_interest.py
Normal file
@@ -0,0 +1,12 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# See license.txt
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import frappe
|
||||
import unittest
|
||||
|
||||
# test_records = frappe.get_test_records('Interest')
|
||||
|
||||
class TestInterest(unittest.TestCase):
|
||||
pass
|
||||
8
erpnext/hr/doctype/offer_term/offer_term.js
Normal file
@@ -0,0 +1,8 @@
|
||||
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
frappe.ui.form.on('Offer Term', {
|
||||
refresh: function(frm) {
|
||||
|
||||
}
|
||||
});
|
||||
@@ -3,11 +3,13 @@
|
||||
"allow_import": 1,
|
||||
"allow_rename": 0,
|
||||
"autoname": "field:offer_term",
|
||||
"beta": 0,
|
||||
"creation": "2015-03-05 13:00:30.900471",
|
||||
"custom": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "Setup",
|
||||
"editable_grid": 0,
|
||||
"fields": [
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
@@ -17,6 +19,7 @@
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Offer Term",
|
||||
@@ -25,6 +28,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@@ -35,13 +39,15 @@
|
||||
],
|
||||
"hide_heading": 0,
|
||||
"hide_toolbar": 0,
|
||||
"idx": 0,
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
"in_dialog": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2015-11-16 06:29:50.848215",
|
||||
"modified": "2016-07-25 05:24:25.724664",
|
||||
"modified_by": "Administrator",
|
||||
"module": "HR",
|
||||
"name": "Offer Term",
|
||||
@@ -69,8 +75,10 @@
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"quick_entry": 1,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0,
|
||||
"sort_field": "modified",
|
||||
"sort_order": "DESC"
|
||||
"sort_order": "DESC",
|
||||
"track_seen": 0
|
||||
}
|
||||
@@ -61,11 +61,10 @@ class SalarySlip(TransactionBase):
|
||||
self.pull_sal_struct(ss_doc)
|
||||
|
||||
def set_time_sheet(self):
|
||||
if self.salary_slip_based_on_timesheet and not self.get('timesheets'):
|
||||
if self.salary_slip_based_on_timesheet:
|
||||
self.set("timesheets", [])
|
||||
|
||||
timesheets = frappe.db.sql(""" select * from `tabTimesheet` where employee = %(employee)s and (status = 'Submitted' or
|
||||
status = 'Billed')""", {'employee': self.employee}, as_dict=1)
|
||||
timesheets = frappe.db.sql(""" select * from `tabTimesheet` where employee = %(employee)s and start_date BETWEEN %(start_date)s AND %(end_date)s and (status = 'Submitted' or
|
||||
status = 'Billed')""", {'employee': self.employee, 'start_date': self.start_date, 'end_date': self.end_date}, as_dict=1)
|
||||
|
||||
for data in timesheets:
|
||||
self.append('timesheets', {
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
Deduction detail in parent Salary Slip.
|
||||
|
||||
e.g.
|
||||
|
||||
- Tax paid on employee's behalf
|
||||
@@ -1 +0,0 @@
|
||||
from __future__ import unicode_literals
|
||||
@@ -1,140 +0,0 @@
|
||||
{
|
||||
"allow_copy": 0,
|
||||
"allow_import": 0,
|
||||
"allow_rename": 0,
|
||||
"beta": 0,
|
||||
"creation": "2013-02-22 01:27:48",
|
||||
"custom": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "Setup",
|
||||
"editable_grid": 1,
|
||||
"fields": [
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "deduction_type",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"label": "Type",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"oldfieldname": "d_type",
|
||||
"oldfieldtype": "Data",
|
||||
"options": "Deduction Type",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"print_width": "200px",
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0,
|
||||
"width": "200px"
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "d_amount",
|
||||
"fieldtype": "Currency",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Default Amount",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"oldfieldname": "d_amount",
|
||||
"oldfieldtype": "Currency",
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "d_depends_on_lwp",
|
||||
"fieldtype": "Check",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Depends on Leave Without Pay",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "deduction_amount",
|
||||
"fieldtype": "Currency",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"label": "Amount",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
}
|
||||
],
|
||||
"hide_heading": 0,
|
||||
"hide_toolbar": 0,
|
||||
"idx": 1,
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
"in_dialog": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 1,
|
||||
"max_attachments": 0,
|
||||
"modified": "2016-07-11 03:28:07.000106",
|
||||
"modified_by": "Administrator",
|
||||
"module": "HR",
|
||||
"name": "Salary Slip Deduction",
|
||||
"owner": "Administrator",
|
||||
"permissions": [],
|
||||
"quick_entry": 1,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0,
|
||||
"sort_order": "ASC",
|
||||
"track_seen": 0
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# License: GNU General Public License v3. See license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
|
||||
from frappe.model.document import Document
|
||||
|
||||
class SalarySlipDeduction(Document):
|
||||
pass
|
||||
@@ -1,6 +0,0 @@
|
||||
Earning detail in parent Salary Slip.
|
||||
|
||||
e.g.
|
||||
|
||||
- Basic Salary
|
||||
- Performance Bonus
|
||||
@@ -1 +0,0 @@
|
||||
from __future__ import unicode_literals
|
||||
@@ -1,140 +0,0 @@
|
||||
{
|
||||
"allow_copy": 0,
|
||||
"allow_import": 0,
|
||||
"allow_rename": 0,
|
||||
"beta": 0,
|
||||
"creation": "2013-02-22 01:27:48",
|
||||
"custom": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "Setup",
|
||||
"editable_grid": 1,
|
||||
"fields": [
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "earning_type",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"label": "Type",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"oldfieldname": "e_type",
|
||||
"oldfieldtype": "Data",
|
||||
"options": "Earning Type",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"print_width": "",
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0,
|
||||
"width": "80px"
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "e_amount",
|
||||
"fieldtype": "Currency",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Default Amount",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"oldfieldname": "e_amount",
|
||||
"oldfieldtype": "Currency",
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "e_depends_on_lwp",
|
||||
"fieldtype": "Check",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Depends on Leave Without Pay",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "earning_amount",
|
||||
"fieldtype": "Currency",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"label": "Amount",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
}
|
||||
],
|
||||
"hide_heading": 0,
|
||||
"hide_toolbar": 0,
|
||||
"idx": 1,
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
"in_dialog": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 1,
|
||||
"max_attachments": 0,
|
||||
"modified": "2016-07-11 03:28:07.074773",
|
||||
"modified_by": "Administrator",
|
||||
"module": "HR",
|
||||
"name": "Salary Slip Earning",
|
||||
"owner": "Administrator",
|
||||
"permissions": [],
|
||||
"quick_entry": 1,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0,
|
||||
"sort_order": "ASC",
|
||||
"track_seen": 0
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# License: GNU General Public License v3. See license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
|
||||
from frappe.model.document import Document
|
||||
|
||||
class SalarySlipEarning(Document):
|
||||
pass
|
||||
@@ -1 +0,0 @@
|
||||
Deduction details in parent Salary Structure.
|
||||
@@ -1 +0,0 @@
|
||||
from __future__ import unicode_literals
|
||||
@@ -1,116 +0,0 @@
|
||||
{
|
||||
"allow_copy": 0,
|
||||
"allow_import": 0,
|
||||
"allow_rename": 0,
|
||||
"beta": 0,
|
||||
"creation": "2013-02-22 01:27:48",
|
||||
"custom": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "Setup",
|
||||
"editable_grid": 1,
|
||||
"fields": [
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "deduction_type",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"label": "Type",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"oldfieldname": "d_type",
|
||||
"oldfieldtype": "Select",
|
||||
"options": "Deduction Type",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"print_width": "200px",
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0,
|
||||
"width": "200px"
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "d_modified_amt",
|
||||
"fieldtype": "Currency",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"label": "Amount",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"oldfieldname": "d_modified_amt",
|
||||
"oldfieldtype": "Currency",
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "depend_on_lwp",
|
||||
"fieldtype": "Check",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Reduce Deduction for Leave Without Pay (LWP)",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"oldfieldname": "depend_on_lwp",
|
||||
"oldfieldtype": "Check",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
}
|
||||
],
|
||||
"hide_heading": 0,
|
||||
"hide_toolbar": 0,
|
||||
"idx": 1,
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
"in_dialog": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 1,
|
||||
"max_attachments": 0,
|
||||
"modified": "2016-07-11 03:28:07.217367",
|
||||
"modified_by": "Administrator",
|
||||
"module": "HR",
|
||||
"name": "Salary Structure Deduction",
|
||||
"owner": "Administrator",
|
||||
"permissions": [],
|
||||
"quick_entry": 1,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0,
|
||||
"track_seen": 0
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# License: GNU General Public License v3. See license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
|
||||
from frappe.model.document import Document
|
||||
|
||||
class SalaryStructureDeduction(Document):
|
||||
pass
|
||||
@@ -1 +0,0 @@
|
||||
Earning details in parent Salary Structure.
|
||||
@@ -1 +0,0 @@
|
||||
from __future__ import unicode_literals
|
||||
@@ -1,116 +0,0 @@
|
||||
{
|
||||
"allow_copy": 0,
|
||||
"allow_import": 0,
|
||||
"allow_rename": 0,
|
||||
"beta": 0,
|
||||
"creation": "2013-02-22 01:27:48",
|
||||
"custom": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"editable_grid": 1,
|
||||
"fields": [
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "earning_type",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"label": "Type",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"oldfieldname": "e_type",
|
||||
"oldfieldtype": "Data",
|
||||
"options": "Earning Type",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"print_width": "200px",
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0,
|
||||
"width": "200px"
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "modified_value",
|
||||
"fieldtype": "Currency",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"label": "Amount",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"oldfieldname": "modified_value",
|
||||
"oldfieldtype": "Currency",
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "depend_on_lwp",
|
||||
"fieldtype": "Check",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Reduce Earning for Leave Without Pay (LWP)",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"oldfieldname": "depend_on_lwp",
|
||||
"oldfieldtype": "Check",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
}
|
||||
],
|
||||
"hide_heading": 0,
|
||||
"hide_toolbar": 0,
|
||||
"idx": 1,
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
"in_dialog": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 1,
|
||||
"max_attachments": 0,
|
||||
"modified": "2016-07-11 03:28:07.283082",
|
||||
"modified_by": "Administrator",
|
||||
"module": "HR",
|
||||
"name": "Salary Structure Earning",
|
||||
"owner": "Administrator",
|
||||
"permissions": [],
|
||||
"quick_entry": 1,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0,
|
||||
"sort_order": "ASC",
|
||||
"track_seen": 0
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# License: GNU General Public License v3. See license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
|
||||
from frappe.model.document import Document
|
||||
|
||||
class SalaryStructureEarning(Document):
|
||||
pass
|
||||
@@ -58,7 +58,7 @@ class MaintenanceSchedule(TransactionBase):
|
||||
if no_email_sp:
|
||||
frappe.msgprint(
|
||||
frappe._("Setting Events to {0}, since the Employee attached to the below Sales Persons does not have a User ID{1}").format(
|
||||
doc.owner, "<br>"+no_email_sp.join("<br>")
|
||||
self.owner, "<br>"+no_email_sp.join("<br>")
|
||||
))
|
||||
|
||||
scheduled_date = frappe.db.sql("""select scheduled_date from
|
||||
@@ -153,7 +153,7 @@ class MaintenanceSchedule(TransactionBase):
|
||||
elif not d.sales_person:
|
||||
throw(_("Please select Incharge Person's name"))
|
||||
|
||||
if getdate(d.start_date) > getdate(d.end_date):
|
||||
if getdate(d.start_date) >= getdate(d.end_date):
|
||||
throw(_("Start date should be less than end date for Item {0}").format(d.item_code))
|
||||
|
||||
def validate_sales_order(self):
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2016-07-08 08:42:35.126397",
|
||||
"modified": "2016-07-25 05:24:23.398894",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Manufacturing",
|
||||
"name": "Operation",
|
||||
@@ -146,7 +146,7 @@
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"quick_entry": 0,
|
||||
"quick_entry": 1,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0,
|
||||
"sort_field": "modified",
|
||||
|
||||
@@ -112,8 +112,10 @@ class ProductionOrder(Document):
|
||||
|
||||
|
||||
def update_status(self, status=None):
|
||||
'''Update status of production order'''
|
||||
status = self.get_status()
|
||||
'''Update status of production order if unknown'''
|
||||
if not status:
|
||||
status = self.get_status()
|
||||
|
||||
if status != self.status:
|
||||
self.db_set("status", status)
|
||||
|
||||
@@ -538,7 +540,7 @@ def make_new_timesheet(source_name, target_doc=None):
|
||||
po = frappe.get_doc('Production Order', source_name)
|
||||
ts = po.make_time_logs(open_new=True)
|
||||
|
||||
if not ts.get('time_logs'):
|
||||
if not ts or not ts.get('time_logs'):
|
||||
frappe.throw(_("Already completed"))
|
||||
|
||||
return ts
|
||||
|
||||
@@ -451,10 +451,8 @@ class ProductionPlanningTool(Document):
|
||||
"company": self.company,
|
||||
"requested_by": frappe.session.user
|
||||
})
|
||||
if item_wrapper.default_bom:
|
||||
material_request.update({"material_request_type": "Manufacture"})
|
||||
else:
|
||||
material_request.update({"material_request_type": "Purchase"})
|
||||
material_request.update({"material_request_type": item_wrapper.default_material_request_type})
|
||||
|
||||
for sales_order, requested_qty in items_to_be_requested[item].items():
|
||||
material_request.append("items", {
|
||||
"doctype": "Material Request Item",
|
||||
|
||||
@@ -264,7 +264,6 @@ execute:frappe.delete_doc_if_exists("Web Form", "contact") #2016-03-10
|
||||
erpnext.patches.v6_20x.remove_fiscal_year_from_holiday_list
|
||||
erpnext.patches.v6_24.map_customer_address_to_shipping_address_on_po
|
||||
erpnext.patches.v6_27.fix_recurring_order_status
|
||||
erpnext.patches.v6_20x.remove_customer_supplier_roles
|
||||
erpnext.patches.v6_20x.update_product_bundle_description
|
||||
erpnext.patches.v7_0.update_party_status
|
||||
erpnext.patches.v7_0.update_item_projected
|
||||
@@ -279,7 +278,7 @@ execute:frappe.rename_doc("DocType", "Payments", "Sales Invoice Payment", force=
|
||||
erpnext.patches.v7_0.update_mins_to_first_response
|
||||
erpnext.patches.v6_20x.repost_valuation_rate_for_negative_inventory
|
||||
erpnext.patches.v7_0.system_settings_setup_complete
|
||||
erpnext.patches.v7_0.set_naming_series_for_timesheet
|
||||
erpnext.patches.v7_0.set_naming_series_for_timesheet #2016-07-27
|
||||
execute:frappe.reload_doc('projects', 'doctype', 'project')
|
||||
execute:frappe.reload_doc('projects', 'doctype', 'project_user')
|
||||
erpnext.patches.v7_0.convert_timelogbatch_to_timesheet
|
||||
@@ -300,4 +299,12 @@ execute:frappe.delete_doc_if_exists("DocType", "Payment Tool")
|
||||
execute:frappe.delete_doc_if_exists("DocType", "Payment Tool Detail")
|
||||
erpnext.patches.v7_0.setup_account_table_for_expense_claim_type_if_exists
|
||||
erpnext.patches.v7_0.migrate_schools_to_erpnext
|
||||
erpnext.patches.v6_20x.remove_customer_supplier_roles
|
||||
erpnext.patches.v7_0.remove_administrator_role_in_doctypes
|
||||
erpnext.patches.v7_0.rename_fee_amount_to_fee_component
|
||||
erpnext.patches.v7_0.calculate_total_costing_amount
|
||||
erpnext.patches.v7_0.fix_nonwarehouse_ledger_gl_entries_for_transactions
|
||||
erpnext.patches.v7_0.remove_old_earning_deduction_doctypes
|
||||
erpnext.patches.v7_0.make_guardian
|
||||
erpnext.patches.v7_0.update_refdoc_in_landed_cost_voucher
|
||||
execute:frappe.db.sql("update `tabItem` set default_material_request_type= case when default_bom is not null then 'Manufacture' else 'Purchase' end")
|
||||
|
||||
@@ -2,6 +2,11 @@ from __future__ import unicode_literals
|
||||
import frappe
|
||||
|
||||
def execute():
|
||||
frappe.reload_doc("buying", "doctype", "request_for_quotation_supplier")
|
||||
frappe.reload_doc("buying", "doctype", "request_for_quotation_item")
|
||||
frappe.reload_doc("buying", "doctype", "request_for_quotation")
|
||||
frappe.reload_doc("projects", "doctype", "timesheet")
|
||||
|
||||
for role in ('Customer', 'Supplier'):
|
||||
frappe.db.sql('''delete from `tabUserRole`
|
||||
where role=%s and parent in ("Administrator", "Guest")''', role)
|
||||
|
||||
16
erpnext/patches/v7_0/calculate_total_costing_amount.py
Normal file
@@ -0,0 +1,16 @@
|
||||
import frappe
|
||||
from frappe.utils import flt
|
||||
|
||||
def execute():
|
||||
frappe.reload_doc('projects', 'doctype', 'timesheet')
|
||||
|
||||
for data in frappe.get_all('Timesheet', fields=["name, total_costing_amount"],
|
||||
filters = [["docstatus", "<", "2"]]):
|
||||
if flt(data.total_costing_amount) == 0.0:
|
||||
ts = frappe.get_doc('Timesheet', data.name)
|
||||
ts.update_cost()
|
||||
ts.calculate_total_amounts()
|
||||
ts.flags.ignore_validate = True
|
||||
ts.flags.ignore_mandatory = True
|
||||
ts.flags.ignore_validate_update_after_submit = True
|
||||
ts.save()
|
||||
@@ -0,0 +1,52 @@
|
||||
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# License: GNU General Public License v3. See license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
|
||||
def execute():
|
||||
if not frappe.db.get_single_value("Accounts Settings", "auto_accounting_for_stock"):
|
||||
return
|
||||
|
||||
frappe.reload_doctype("Account")
|
||||
|
||||
warehouses = frappe.db.sql_list("""select name from tabAccount
|
||||
where account_type = 'Stock' and is_group = 0
|
||||
and (warehouse is null or warehouse = '')""")
|
||||
if warehouses:
|
||||
warehouses = set_warehouse_for_stock_account(warehouses)
|
||||
if not warehouses:
|
||||
return
|
||||
|
||||
stock_vouchers = frappe.db.sql("""select distinct sle.voucher_type, sle.voucher_no
|
||||
from `tabStock Ledger Entry` sle
|
||||
where sle.warehouse in (%s) and creation > '2016-05-01'
|
||||
and not exists(select name from `tabGL Entry`
|
||||
where account=sle.warehouse and voucher_type=sle.voucher_type and voucher_no=sle.voucher_no)
|
||||
order by sle.posting_date""" %
|
||||
', '.join(['%s']*len(warehouses)), tuple(warehouses))
|
||||
|
||||
rejected = []
|
||||
for voucher_type, voucher_no in stock_vouchers:
|
||||
try:
|
||||
frappe.db.sql("""delete from `tabGL Entry`
|
||||
where voucher_type=%s and voucher_no=%s""", (voucher_type, voucher_no))
|
||||
|
||||
voucher = frappe.get_doc(voucher_type, voucher_no)
|
||||
voucher.make_gl_entries()
|
||||
frappe.db.commit()
|
||||
except Exception, e:
|
||||
print frappe.get_traceback()
|
||||
rejected.append([voucher_type, voucher_no])
|
||||
frappe.db.rollback()
|
||||
|
||||
print rejected
|
||||
|
||||
def set_warehouse_for_stock_account(warehouse_account):
|
||||
for account in warehouse_account:
|
||||
if frappe.db.exists('Warehouse', account):
|
||||
frappe.db.set_value("Account", account, "warehouse", account)
|
||||
else:
|
||||
warehouse_account.remove(account)
|
||||
|
||||
return warehouse_account
|
||||
25
erpnext/patches/v7_0/make_guardian.py
Normal file
@@ -0,0 +1,25 @@
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
|
||||
def execute():
|
||||
if frappe.db.exists("DocType", "Student") and "father_name" in frappe.db.get_table_columns("Student"):
|
||||
frappe.reload_doc("schools", "doctype", "student")
|
||||
frappe.reload_doc("schools", "doctype", "guardian")
|
||||
frappe.reload_doc("schools", "doctype", "guardian_interest")
|
||||
frappe.reload_doc("hr", "doctype", "interest")
|
||||
|
||||
students = frappe.get_all("Student", fields=["name", "father_name", "father_email_id",
|
||||
"mother_name", "mother_email_id"])
|
||||
for stud in students:
|
||||
if stud.father_name:
|
||||
make_guardian(stud.father_name, stud.name, stud.father_email_id)
|
||||
if stud.mother_name:
|
||||
make_guardian(stud.mother_name, stud.name, stud.mother_email_id)
|
||||
|
||||
def make_guardian(name, student, email=None):
|
||||
frappe.get_doc({
|
||||
'doctype': 'Guardian',
|
||||
'guardian_name': name,
|
||||
'email': email,
|
||||
'student': student
|
||||
}).insert()
|
||||
@@ -0,0 +1,16 @@
|
||||
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
|
||||
# License: GNU General Public License v3. See license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
|
||||
def execute():
|
||||
if frappe.db.exists("DocType", "Salary Component"):
|
||||
for dt in ("Salary Structure Earning", "Salary Structure Deduction", "Salary Slip Earning",
|
||||
"Salary Slip Deduction", "Earning Type", "Deduction Type"):
|
||||
frappe.delete_doc("DocType", dt)
|
||||
|
||||
|
||||
for d in frappe.db.sql("""select name from `tabCustom Field`
|
||||
where dt in ('Salary Detail', 'Salary Component')"""):
|
||||
frappe.get_doc("Custom Field", d[0]).save()
|
||||
16
erpnext/patches/v7_0/rename_fee_amount_to_fee_component.py
Normal file
@@ -0,0 +1,16 @@
|
||||
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
|
||||
# License: GNU General Public License v3. See license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
|
||||
from frappe.model.utils.rename_field import rename_field
|
||||
|
||||
def execute():
|
||||
if frappe.db.exists("DocType", "Fee Amount"):
|
||||
frappe.rename_doc("DocType", "Fee Amount", "Fee Component")
|
||||
for dt in ("Fees", "Fee Structure"):
|
||||
frappe.reload_doctype(dt)
|
||||
rename_field(dt, "amount", "components")
|
||||
|
||||
|
||||
15
erpnext/patches/v7_0/update_refdoc_in_landed_cost_voucher.py
Normal file
@@ -0,0 +1,15 @@
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
|
||||
def execute():
|
||||
if "purchase_receipt" not in frappe.db.get_table_columns("Landed Cost Purchase Receipt"):
|
||||
return
|
||||
|
||||
frappe.reload_doctype("Landed Cost Purchase Receipt")
|
||||
|
||||
frappe.db.sql("""
|
||||
update `tabLanded Cost Purchase Receipt`
|
||||
set receipt_document_type = 'Purchase Receipt', receipt_document = purchase_receipt
|
||||
where (receipt_document is null or receipt_document = '')
|
||||
and (purchase_receipt is not null and purchase_receipt != '')
|
||||
""")
|
||||
@@ -15,7 +15,7 @@ frappe.ui.form.on('Homepage Featured Product', {
|
||||
method: 'frappe.client.get_value',
|
||||
args: {
|
||||
'doctype': 'Item',
|
||||
'filters': featured_product.item_code,
|
||||
'filters': {'name': featured_product.item_code},
|
||||
'fieldname': [
|
||||
'item_name',
|
||||
'web_long_description',
|
||||
|
||||
@@ -3,11 +3,13 @@
|
||||
"allow_import": 1,
|
||||
"allow_rename": 1,
|
||||
"autoname": "field:activity_type",
|
||||
"beta": 0,
|
||||
"creation": "2013-03-05 10:14:59",
|
||||
"custom": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "Setup",
|
||||
"editable_grid": 0,
|
||||
"fields": [
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
@@ -17,6 +19,7 @@
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Activity Type",
|
||||
@@ -24,6 +27,7 @@
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@@ -39,6 +43,7 @@
|
||||
"fieldtype": "Currency",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Default Costing Rate",
|
||||
@@ -47,6 +52,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -62,6 +68,7 @@
|
||||
"fieldtype": "Column Break",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"length": 0,
|
||||
@@ -69,6 +76,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -84,6 +92,7 @@
|
||||
"fieldtype": "Currency",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Default Billing Rate",
|
||||
@@ -92,6 +101,7 @@
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@@ -104,13 +114,14 @@
|
||||
"hide_toolbar": 0,
|
||||
"icon": "icon-flag",
|
||||
"idx": 1,
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
"in_dialog": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2015-11-16 06:29:41.673241",
|
||||
"modified": "2016-07-25 05:24:26.717981",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Projects",
|
||||
"name": "Activity Type",
|
||||
@@ -157,6 +168,8 @@
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"quick_entry": 1,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0
|
||||
"read_only_onload": 0,
|
||||
"track_seen": 0
|
||||
}
|
||||
@@ -5,11 +5,11 @@ cur_frm.add_fetch('employee', 'employee_name', 'employee_name');
|
||||
frappe.ui.form.on("Timesheet", {
|
||||
setup: function(frm) {
|
||||
frm.get_field('time_logs').grid.editable_fields = [
|
||||
{fieldname: 'billable', columns: 2},
|
||||
{fieldname: 'billable', columns: 1},
|
||||
{fieldname: 'activity_type', columns: 2},
|
||||
{fieldname: 'from_time', columns: 2},
|
||||
{fieldname: 'hours', columns: 2},
|
||||
{fieldname: 'to_time', columns: 2},
|
||||
{fieldname: 'from_time', columns: 3},
|
||||
{fieldname: 'hours', columns: 1},
|
||||
{fieldname: 'project', columns: 3}
|
||||
];
|
||||
|
||||
frm.fields_dict.employee.get_query = function() {
|
||||
@@ -22,7 +22,8 @@ frappe.ui.form.on("Timesheet", {
|
||||
child = locals[cdt][cdn];
|
||||
return{
|
||||
filters: {
|
||||
'project': child.project
|
||||
'project': child.project,
|
||||
'status': ["!=", "Closed"]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -30,15 +31,13 @@ frappe.ui.form.on("Timesheet", {
|
||||
|
||||
onload: function(frm){
|
||||
if (frm.doc.__islocal && frm.doc.time_logs) {
|
||||
frm.set_value("employee", "")
|
||||
calculate_time_and_amount(frm);
|
||||
}
|
||||
},
|
||||
|
||||
refresh: function(frm) {
|
||||
if(frm.doc.docstatus==1) {
|
||||
if(!frm.doc.sales_invoice && frm.doc.total_billing_amount > 0
|
||||
&& !frm.doc.production_order){
|
||||
if(!frm.doc.sales_invoice && frm.doc.total_billing_amount > 0){
|
||||
frm.add_custom_button(__("Make Sales Invoice"), function() { frm.trigger("make_invoice") },
|
||||
"icon-file-alt");
|
||||
}
|
||||
@@ -147,13 +146,16 @@ var calculate_time_and_amount = function(frm) {
|
||||
var tl = frm.doc.time_logs || [];
|
||||
total_hr = 0;
|
||||
total_billing_amount = 0;
|
||||
total_costing_amount = 0;
|
||||
for(var i=0; i<tl.length; i++) {
|
||||
if (tl[i].hours) {
|
||||
total_hr += tl[i].hours;
|
||||
total_billing_amount += tl[i].billing_amount;
|
||||
total_costing_amount += tl[i].costing_amount;
|
||||
}
|
||||
}
|
||||
|
||||
cur_frm.set_value("total_hours", total_hr);
|
||||
cur_frm.set_value("total_billing_amount", total_billing_amount);
|
||||
cur_frm.set_value("total_costing_amount", total_costing_amount);
|
||||
}
|
||||
@@ -157,7 +157,7 @@
|
||||
"no_copy": 1,
|
||||
"options": "Draft\nSubmitted\nBilled\nPayslip\nCompleted\nCancelled",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
@@ -478,7 +478,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"default": "0",
|
||||
"description": "updated via Time Logs",
|
||||
"description": "",
|
||||
"fieldname": "total_hours",
|
||||
"fieldtype": "Float",
|
||||
"hidden": 0,
|
||||
@@ -529,7 +529,7 @@
|
||||
"collapsible": 0,
|
||||
"default": "0",
|
||||
"depends_on": "",
|
||||
"description": "updated via Time Logs",
|
||||
"description": "",
|
||||
"fieldname": "total_billing_amount",
|
||||
"fieldtype": "Float",
|
||||
"hidden": 0,
|
||||
@@ -551,6 +551,31 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "total_costing_amount",
|
||||
"fieldtype": "Float",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Total Costing Amount",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
@@ -637,7 +662,7 @@
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2016-07-13 23:44:05.086570",
|
||||
"modified": "2016-07-26 00:01:56.055046",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Projects",
|
||||
"name": "Timesheet",
|
||||
|
||||