Compare commits

...

36 Commits

Author SHA1 Message Date
gavin
49b0afccbd Merge pull request #21213 from gavindsouza/freeze-v10
chore(v10): pin python dependencies
2020-06-15 10:27:53 +05:30
Gavin D'souza
1183d3e1bc chore(travis): update and install setuptools and pip 2020-04-09 20:22:20 +05:30
Gavin D'souza
f876f4c2b2 chore: allow sudo in travis runs 2020-04-09 17:50:33 +05:30
Gavin D'souza
ac4a3057cf fix: travis add pip3 addon 2020-04-09 17:40:25 +05:30
Gavin D'souza
999216e727 fix: update easy install script usage 2020-04-09 15:17:41 +05:30
Gavin D'souza
a5fa29f256 chore: pin python dependencies 2020-04-09 10:44:34 +05:30
Deepesh Garg
1fddde0c0e fix: Account type in Handling Difference in Inventory account (#19678)
* fix: Account type in Handling Difference in Inventory account

* fix: Add Stock Adjustment account

* fix: Rename account to stock adjustment
2019-11-28 18:29:46 +05:30
Mangesh-Khairnar
e269aa9781 fix(bin): update requested qty in bin (#18314) 2019-07-15 14:07:50 +05:30
Aditya Hase
30be1181ea fix(error-report): Do not send error reports to support@erpnext.com (#17864) 2019-06-06 11:16:01 +05:30
Shivam Mishra
5a1b778cd2 Merge pull request #17793 from adityahase/remove-manifest-v10
perf: Remove MANIFEST.in
2019-05-29 15:31:19 +05:30
Aditya Hase
6dcc3a7596 perf: Remove MANIFEST.in
Faster pip install -e erpnext

https://stackoverflow.com/questions/24727709/do-python-projects-need-a-manifest-in-and-what-should-be-in-it

https://github.com/frappe/frappe/pull/7360
2019-05-29 15:15:51 +05:30
Shivam Mishra
3657b2b0a4 fix: Task status fix (#17498) 2019-05-06 14:52:30 +05:30
Nabin Hait
cd701e3e6f Merge pull request #17149 from hrwX/gst_patch
fix(India): run patch for GST custom fields
2019-05-03 09:26:04 +05:30
Nabin Hait
55e54ef6a1 skip the patch for outside India 2019-05-02 21:56:44 +05:30
Nabin Hait
fb12805435 Merge pull request #17345 from deepeshgarg007/delivery_note_v10
fix: Make button not appearing in delivery note
2019-04-23 18:41:33 +05:30
deepeshgarg007
d21f1c0ce2 fix: Make button not appearing in delivery note 2019-04-23 17:56:05 +05:30
Saurabh
60b6f79349 Merge pull request #17303 from sahil28297/new_v10_site_sync
fix(site_sync): return more data in level
2019-04-22 12:01:35 +05:30
Sahil Khan
9366449cb4 fix: import iteritems 2019-04-22 11:07:18 +05:30
Sahil Khan
d12ede8510 fix: syntax error 2019-04-22 10:11:35 +05:30
Deepesh Garg
63f1eded95 fix: Datatype fix for balance in account currency (#17314) 2019-04-20 20:41:17 +05:30
Sahil Khan
a34f459065 fix: refactor level 2019-04-20 14:29:11 +05:30
Sahil Khan
ff1bd34e4c fix(site_sync): return more data in level 2019-04-19 16:36:40 +05:30
sahil28297
6e63de447a Merge pull request #17247 from frappe/revert-17227-v10_site_sync
Revert "feat(site_sync): return erpnext data"
2019-04-16 13:23:48 +05:30
sahil28297
d7ae52cd49 Revert "feat(site_sync): return erpnext data" 2019-04-16 13:23:16 +05:30
Nabin Hait
57646ec7de Merge pull request #17240 from hrwX/delivery_note_fix
fix(Delivery Note): Show get items even if note has been amended
2019-04-16 13:21:30 +05:30
Himanshu
d492db4ccb fix: let user delete the elements of items 2019-04-16 13:16:19 +05:30
Nabin Hait
16651241e8 Merge pull request #17227 from sahil28297/v10_site_sync
feat(site_sync): return erpnext data
2019-04-16 12:43:15 +05:30
Himanshu Warekar
e87e6d07ba fix: show get items even if note has been amended 2019-04-16 11:43:25 +05:30
Sahil Khan
a75973e9e5 feat(site_sync): return erpnext data 2019-04-14 18:45:31 +05:30
Himanshu Warekar
4802fc018b fix: run patch for gst 2019-04-05 17:01:19 +05:30
Nabin Hait
e012e2207a Merge pull request #17103 from hrwX/hsn_v10
fix(India): HSN Code
2019-04-05 15:52:01 +05:30
Himanshu Warekar
b7e0ae68ca fix: run gst patch 2019-04-04 11:17:15 +05:30
Himanshu Warekar
0e971f5088 Merge branch 'v10.x.x' of https://github.com/frappe/erpnext into hsn_v10 2019-04-04 11:16:44 +05:30
Nabin Hait
79936fa949 map supplier warehouse from PR to PI 2019-04-01 21:50:20 +05:30
Himanshu Warekar
203a712071 fix(India): HSN Code 2019-04-01 20:03:13 +05:30
Himanshu
c4bdefe666 fix(Leave Balance Report): return correct total number of leaves (#17009)
* fix: return correct total nuber of leaves

* Use ORM for query
2019-03-26 17:00:20 +05:30
17 changed files with 365 additions and 330 deletions

View File

@@ -1,5 +1,12 @@
language: python language: python
dist: trusty
dist: xenial
addons:
apt:
packages:
- "python3"
- "python3-pip"
python: python:
- "2.7" - "2.7"
@@ -9,14 +16,13 @@ services:
install: install:
- pip install flake8==3.3.0 - pip install flake8==3.3.0
- flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics - sudo -H python3 -m pip install --upgrade setuptools pip
- sudo rm /etc/apt/sources.list.d/docker.list
- sudo apt-get install hhvm && rm -rf /home/travis/.kiex/ - sudo apt-get install hhvm && rm -rf /home/travis/.kiex/
- sudo apt-get purge -y mysql-common mysql-server mysql-client - sudo apt-get purge -y mysql-common mysql-server mysql-client
- nvm install v7.10.0 - nvm install v7.10.0
- wget https://raw.githubusercontent.com/frappe/bench/master/playbooks/install.py - wget https://raw.githubusercontent.com/frappe/bench/master/playbooks/install.py
- sudo python install.py --develop --user travis --without-bench-setup - sudo python3 install.py --develop --user travis --without-bench-setup
- sudo pip install -e ~/bench - sudo python3 -m pip install -e ~/bench
- rm $TRAVIS_BUILD_DIR/.git/shallow - rm $TRAVIS_BUILD_DIR/.git/shallow
- bash $TRAVIS_BUILD_DIR/travis/bench_init.sh - bash $TRAVIS_BUILD_DIR/travis/bench_init.sh

View File

@@ -1,20 +0,0 @@
include MANIFEST.in
include requirements.txt
include *.json
include *.md
include *.py
include *.txt
include .travis.yml
recursive-include erpnext *.txt
recursive-include erpnext *.css
recursive-include erpnext *.csv
recursive-include erpnext *.html
recursive-include erpnext *.ico
recursive-include erpnext *.js
recursive-include erpnext *.json
recursive-include erpnext *.md
recursive-include erpnext *.png
recursive-include erpnext *.py
recursive-include erpnext *.svg
recursive-include erpnext/public *
recursive-exclude * *.pyc

View File

@@ -1,465 +1,466 @@
{ {
"country_code": "ae", "country_code": "ae",
"name": "U.A.E - Chart of Accounts", "name": "U.A.E - Chart of Accounts",
"tree": { "tree": {
"Assets": { "Assets": {
"Current Assets": { "Current Assets": {
"Accounts Receivable": { "Accounts Receivable": {
"Corporate Credit Cards": { "Corporate Credit Cards": {
"account_type": "Receivable" "account_type": "Receivable"
}, },
"Other Receivable": { "Other Receivable": {
"Accrued Rebates Due from Suppliers": { "Accrued Rebates Due from Suppliers": {
"account_type": "Receivable" "account_type": "Receivable"
}, },
"Accured Income from Suppliers": { "Accrued Income from Suppliers": {
"account_type": "Receivable" "account_type": "Receivable"
}, },
"Other Debtors": { "Other Debtors": {
"account_type": "Receivable" "account_type": "Receivable"
}, },
"account_type": "Receivable" "account_type": "Receivable"
}, },
"Post Dated Cheques Received": { "Post Dated Cheques Received": {
"account_type": "Receivable" "account_type": "Receivable"
}, },
"Staff Receivable": { "Staff Receivable": {
"account_type": "Receivable" "account_type": "Receivable"
}, },
"Trade Receivable": { "Trade Receivable": {
"account_type": "Receivable" "account_type": "Receivable"
}, },
"Trade in Opening Fees": { "Trade in Opening Fees": {
"account_type": "Receivable" "account_type": "Receivable"
}, },
"account_type": "Receivable" "account_type": "Receivable"
}, },
"Cash in Hand & Banks": { "Cash in Hand & Banks": {
"Banks": { "Banks": {
"Bank Margin On LC & LG": {}, "Bank Margin On LC & LG": {},
"Banks Blocked Deposits": {}, "Banks Blocked Deposits": {},
"Banks Call Deposit Accounts": {}, "Banks Call Deposit Accounts": {},
"Banks Current Accounts": { "Banks Current Accounts": {
"account_type": "Bank" "account_type": "Bank"
}, },
"account_type": "Bank" "account_type": "Bank"
}, },
"Cash in Hand": { "Cash in Hand": {
"Cash in Safe": { "Cash in Safe": {
"Main Safe": { "Main Safe": {
"account_type": "Cash" "account_type": "Cash"
}, },
"Main Safe - Foreign Currency": { "Main Safe - Foreign Currency": {
"account_type": "Cash" "account_type": "Cash"
} }
}, },
"Petty Cash": { "Petty Cash": {
"Petty Cash - Admininistration": { "Petty Cash - Admininistration": {
"account_type": "Cash" "account_type": "Cash"
}, },
"Petty Cash - Others": { "Petty Cash - Others": {
"account_type": "Cash" "account_type": "Cash"
} }
}, },
"account_type": "Cash" "account_type": "Cash"
}, },
"Cash in Transit": { "Cash in Transit": {
"Credit Cards": { "Credit Cards": {
"Gateway Credit Cards": { "Gateway Credit Cards": {
"account_type": "Bank" "account_type": "Bank"
}, },
"Manual Visa & Master Cards": { "Manual Visa & Master Cards": {
"account_type": "Bank" "account_type": "Bank"
}, },
"PayPal Account": { "PayPal Account": {
"account_type": "Bank" "account_type": "Bank"
}, },
"Visa & Master Credit Cards": { "Visa & Master Credit Cards": {
"account_type": "Bank" "account_type": "Bank"
} }
} }
} }
}, },
"Inventory": { "Inventory": {
"Consigned Stock": { "Consigned Stock": {
"Handling Difference in Inventory": { "Handling Difference in Inventory": {},
"account_type": "Stock Adjustment" "Items Delivered to Customs on temporary Base": {}
}, },
"Items Delivered to Customs on temprary Base": {}
},
"Stock in Hand": { "Stock in Hand": {
"account_type": "Stock" "account_type": "Stock"
} }
}, },
"Perliminary and Preoperating Expenses": { "Preliminary and Preoperating Expenses": {
"Preoperating Expenses": {} "Preoperating Expenses": {}
}, },
"Prepayments & Deposits": { "Prepayments & Deposits": {
"Deposits": { "Deposits": {
"Deposit - Office Rent": {}, "Deposit - Office Rent": {},
"Deposit Others": {}, "Deposit Others": {},
"Deposit to Immigration (Visa)": {}, "Deposit to Immigration (Visa)": {},
"Deposits - Customs": {} "Deposits - Customs": {}
}, },
"Prepaid Taxes": { "Prepaid Taxes": {
"Sales Taxes Receivables": {}, "Sales Taxes Receivables": {},
"Withholding Tax Receivables": {} "Withholding Tax Receivables": {}
}, },
"Prepayments": { "Prepayments": {
"Other Prepayments": {}, "Other Prepayments": {},
"PrePaid Advertisement Expenses": {}, "PrePaid Advertisement Expenses": {},
"Prepaid Bank Guarantee": {}, "Prepaid Bank Guarantee": {},
"Prepaid Consultancy Fees": {}, "Prepaid Consultancy Fees": {},
"Prepaid Employees Housing": {}, "Prepaid Employees Housing": {},
"Prepaid Finance charge for Loans": {}, "Prepaid Finance charge for Loans": {},
"Prepaid Legal Fees": {}, "Prepaid Legal Fees": {},
"Prepaid License Fees": {}, "Prepaid License Fees": {},
"Prepaid Life Insurance": {}, "Prepaid Life Insurance": {},
"Prepaid Maintenance": {}, "Prepaid Maintenance": {},
"Prepaid Medical Insurance": {}, "Prepaid Medical Insurance": {},
"Prepaid Office Rent": {}, "Prepaid Office Rent": {},
"Prepaid Other Insurance": {}, "Prepaid Other Insurance": {},
"Prepaid Schooling Fees": {}, "Prepaid Schooling Fees": {},
"Prepaid Site Hosting Fees": {}, "Prepaid Site Hosting Fees": {},
"Prepaid Sponsorship Fees": {} "Prepaid Sponsorship Fees": {}
} }
} }
}, },
"Long Term Assets": { "Long Term Assets": {
"Fixed Assets": { "Fixed Assets": {
"Accumulated Depreciation": { "Accumulated Depreciation": {
"Acc. Depreciation of Motor Vehicles": { "Acc. Depreciation of Motor Vehicles": {
"account_type": "Accumulated Depreciation" "account_type": "Accumulated Depreciation"
}, },
"Acc. Deprn.Computer Hardware & Software": { "Acc. Deprn.Computer Hardware & Software": {
"account_type": "Accumulated Depreciation" "account_type": "Accumulated Depreciation"
}, },
"Acc.Deprn.of Furniture & Office Equipment": { "Acc.Deprn.of Furniture & Office Equipment": {
"account_type": "Accumulated Depreciation" "account_type": "Accumulated Depreciation"
}, },
"Amortisation on Leasehold Improvement": { "Amortisation on Leasehold Improvement": {
"account_type": "Accumulated Depreciation" "account_type": "Accumulated Depreciation"
}, },
"account_type": "Accumulated Depreciation" "account_type": "Accumulated Depreciation"
}, },
"Fixed Assets (Cost Price)": { "Fixed Assets (Cost Price)": {
"Computer Hardware & Software": { "Computer Hardware & Software": {
"account_type": "Fixed Asset" "account_type": "Fixed Asset"
}, },
"Furniture and Equipment": { "Furniture and Equipment": {
"account_type": "Fixed Asset" "account_type": "Fixed Asset"
}, },
"Leasehold Improvement": {}, "Leasehold Improvement": {},
"Motor Vehicules": { "Motor Vehicles": {
"account_type": "Fixed Asset" "account_type": "Fixed Asset"
}, },
"Work In Progrees": {}, "Work In Progress": {},
"account_type": "Fixed Asset" "account_type": "Fixed Asset"
} }
}, },
"Intangible Assets": { "Intangible Assets": {
"Computer Card Renewal": {}, "Computer Card Renewal": {},
"Dispoal of Outlets": {}, "Disposal of Outlets": {},
"Registration of Trademarks": {} "Registration of Trademarks": {}
}, },
"Intercompany Accounts": {}, "Intercompany Accounts": {},
"Investments": { "Investments": {
"Investments in Subsidiaries": {} "Investments in Subsidiaries": {}
} }
}, },
"root_type": "Asset" "root_type": "Asset"
}, },
"Closing And Temporary Accounts": { "Closing And Temporary Accounts": {
"Closing Accounts": { "Closing Accounts": {
"Closing Account": {} "Closing Account": {}
}, },
"root_type": "Liability" "root_type": "Liability"
}, },
"Expenses": { "Expenses": {
"Commercial Expenses": { "Commercial Expenses": {
"Consultancy Fees": {}, "Consultancy Fees": {},
"Provision for Doubtful Debts": {} "Provision for Doubtful Debts": {}
}, },
"Cost of Sale": { "Cost of Sale": {
"Cost Of Goods Sold": { "Cost Of Goods Sold": {
"Cost Of Goods Sold I/C Sales": {}, "Cost Of Goods Sold I/C Sales": {},
"Cost of Goods Sold in Trading": { "Cost of Goods Sold in Trading": {
"account_type": "Cost of Goods Sold" "account_type": "Cost of Goods Sold"
}, },
"account_type": "Cost of Goods Sold" "account_type": "Cost of Goods Sold"
}, },
"Expenses Included In Valuation": { "Expenses Included In Valuation": {
"account_type": "Expenses Included In Valuation" "account_type": "Expenses Included In Valuation"
},
"Stock Adjustment": {
"account_type": "Stock Adjustment"
} }
}, },
"Depreciation": { "Depreciation": {
"Depreciation & Amortization": { "Depreciation & Amortization": {
"Amortization on Leasehold Improvement": {}, "Amortization on Leasehold Improvement": {},
"Depreciation Of Computer Hard & Soft": { "Depreciation Of Computer Hard & Soft": {
"account_type": "Depreciation" "account_type": "Depreciation"
}, },
"Depreciation Of Furniture & Office Equipment\n\t\t\t": { "Depreciation Of Furniture & Office Equipment\n\t\t\t": {
"account_type": "Depreciation" "account_type": "Depreciation"
}, },
"Depreciation Of Motor Vehicles": { "Depreciation Of Motor Vehicles": {
"account_type": "Depreciation" "account_type": "Depreciation"
} }
} }
}, },
"Direct Expenses": { "Direct Expenses": {
"Financial Charges": { "Financial Charges": {
"Air Miles Card Charges": {}, "Air Miles Card Charges": {},
"Amex Credit Cards Charges": {}, "Amex Credit Cards Charges": {},
"Bank Finance & Loan Charges": {}, "Bank Finance & Loan Charges": {},
"Credit Card Charges": {}, "Credit Card Charges": {},
"Credit Card Swipe Charges": {}, "Credit Card Swipe Charges": {},
"PayPal Charges": {} "PayPal Charges": {}
} }
}, },
"MISC Charges": { "MISC Charges": {
"Other Charges": { "Other Charges": {
"Captial Loss": { "Capital Loss": {
"Disposal of Business Branch": {}, "Disposal of Business Branch": {},
"Loss On Fixed Assets Disposal": {}, "Loss On Fixed Assets Disposal": {},
"Loss on Difference on Exchange": {} "Loss on Difference on Exchange": {}
}, },
"Other Non Operating Exp": { "Other Non Operating Exp": {
"Other Non Operating Expenses": {} "Other Non Operating Expenses": {}
}, },
"Previous Year Adjustments": { "Previous Year Adjustments": {
"Previous Year Adjustments Account": {} "Previous Year Adjustments Account": {}
}, },
"Royalty Fees": { "Royalty Fees": {
"Royalty to Parent Co.": {} "Royalty to Parent Co.": {}
}, },
"Tax / Zakat Expenses": { "Tax / Zakat Expenses": {
"Income Tax": { "Income Tax": {
"account_type": "Tax" "account_type": "Tax"
}, },
"Zakat": {}, "Zakat": {},
"account_type": "Tax" "account_type": "Tax"
} }
} }
}, },
"Share Resources": { "Share Resources": {
"Share Resource Expenses Account": {} "Share Resource Expenses Account": {}
}, },
"Store Operating Expenses": { "Store Operating Expenses": {
"Selling, General & Admin Expenses": { "Selling, General & Admin Expenses": {
"Advertising Expenses": { "Advertising Expenses": {
"Other - Advertising Expenses": {} "Other - Advertising Expenses": {}
}, },
"Bank & Finance Charges": { "Bank & Finance Charges": {
"Other Bank Charges": {} "Other Bank Charges": {}
}, },
"Communications": { "Communications": {
"Courrier": {}, "Courier": {},
"Others - Communication": {}, "Others - Communication": {},
"Telephone": {}, "Telephone": {},
"Web Site Hosting Fees": {} "Web Site Hosting Fees": {}
}, },
"Office & Various Expenses": { "Office & Various Expenses": {
"Cleaning": {}, "Cleaning": {},
"Convoyance Expenses": {}, "Conveyance Expenses": {},
"Gifts & Donations": {}, "Gifts & Donations": {},
"Insurance": {}, "Insurance": {},
"Kitchen and Buffet Expenses": {}, "Kitchen and Buffet Expenses": {},
"Maintenance": {}, "Maintenance": {},
"Others - Office Various Expenses": {}, "Others - Office Various Expenses": {},
"Security & Guard": {}, "Security & Guard": {},
"Stationary From Suppliers": {}, "Stationary From Suppliers": {},
"Stationary Out Of Stock": {}, "Stationary Out Of Stock": {},
"Subscriptions": {}, "Subscriptions": {},
"Training": {}, "Training": {},
"Vehicle Expenses": {} "Vehicle Expenses": {}
}, },
"Personnel Cost": { "Personnel Cost": {
"Basic Salary": {}, "Basic Salary": {},
"End Of Service Indemnity": {}, "End Of Service Indemnity": {},
"Housing Allowance": {}, "Housing Allowance": {},
"Leave Salary": {}, "Leave Salary": {},
"Leave Ticket": {}, "Leave Ticket": {},
"Life Insurance": {}, "Life Insurance": {},
"Medical Insurance": {}, "Medical Insurance": {},
"Personnel Cost Others": {}, "Personnel Cost Others": {},
"Sales Commission": {}, "Sales Commission": {},
"Staff School Allowances": {}, "Staff School Allowances": {},
"Transportation Allowance": {}, "Transportation Allowance": {},
"Uniform": {}, "Uniform": {},
"Visa Expenses": {} "Visa Expenses": {}
}, },
"Professional & Legal Fees": { "Professional & Legal Fees": {
"Audit Fees": {}, "Audit Fees": {},
"Legal fees": {}, "Legal fees": {},
"Others - Professional Fees": {}, "Others - Professional Fees": {},
"Sponsorship Fees": {}, "Sponsorship Fees": {},
"Trade License Fees": {} "Trade License Fees": {}
}, },
"Provision & Write Off": { "Provision & Write Off": {
"Amortisation of Preoperating Expenses": {}, "Amortisation of Preoperating Expenses": {},
"Cash Shortage": {}, "Cash Shortage": {},
"Others - Provision & Write off": {}, "Others - Provision & Write off": {},
"Write Off Inventory": {}, "Write Off Inventory": {},
"Write Off Receivables & Payables": {} "Write Off Receivables & Payables": {}
}, },
"Rent Expenses": { "Rent Expenses": {
"Office Rent": {}, "Office Rent": {},
"Warehouse Rent": {} "Warehouse Rent": {}
}, },
"Travel Expenses": { "Travel Expenses": {
"Air tickets": {}, "Air tickets": {},
"Hotel": {}, "Hotel": {},
"Meals": {}, "Meals": {},
"Others": {}, "Others": {},
"Per Diem": {} "Per Diem": {}
}, },
"Utilities": { "Utilities": {
"Other Utility Cahrges": {}, "Other Utility Cahrges": {},
"Water & Electricity": {} "Water & Electricity": {}
} }
} }
}, },
"root_type": "Expense" "root_type": "Expense"
}, },
"Liabilities": { "Liabilities": {
"Current Liabilities": { "Current Liabilities": {
"Accounts Payable": { "Accounts Payable": {
"Payables": { "Payables": {
"Advance Paybale to Suppliers": { "Advance Paybale to Suppliers": {
"account_type": "Payable" "account_type": "Payable"
}, },
"Consigned Payable": { "Consigned Payable": {
"account_type": "Payable" "account_type": "Payable"
}, },
"Other Payable": { "Other Payable": {
"account_type": "Payable" "account_type": "Payable"
}, },
"Post Dated Cheques Paid": { "Post Dated Cheques Paid": {
"account_type": "Payable" "account_type": "Payable"
}, },
"Staff Payable": {}, "Staff Payable": {},
"Suppliers Price Protection": { "Suppliers Price Protection": {
"account_type": "Payable" "account_type": "Payable"
}, },
"Trade Payable": { "Trade Payable": {
"account_type": "Payable" "account_type": "Payable"
}, },
"account_type": "Payable" "account_type": "Payable"
} }
}, },
"Accruals & Provisions": { "Accruals & Provisions": {
"Accruals": { "Accruals": {
"Accrued Personnel Cost": { "Accrued Personnel Cost": {
"Accrued - Commissions": {}, "Accrued - Commissions": {},
"Accrued - Leave Salary": {}, "Accrued - Leave Salary": {},
"Accrued - Leave Tickets": {}, "Accrued - Leave Tickets": {},
"Accrued - Salaries": {}, "Accrued - Salaries": {},
"Accrued Other Personnel Cost": {}, "Accrued Other Personnel Cost": {},
"Accrued Salaries Increment": {}, "Accrued Salaries Increment": {},
"Accrued-Staff Bonus": {} "Accrued-Staff Bonus": {}
} }
}, },
"Accrued Expenses": { "Accrued Expenses": {
"Accrued Other Expenses": { "Accrued Other Expenses": {
"Accrued - Audit Fees": {}, "Accrued - Audit Fees": {},
"Accrued - Office Rent": {}, "Accrued - Office Rent": {},
"Accrued - Sponsorship": {}, "Accrued - Sponsorship": {},
"Accrued - Telephone": {}, "Accrued - Telephone": {},
"Accrued - Utilities": {}, "Accrued - Utilities": {},
"Accrued Others": {} "Accrued Others": {}
} }
}, },
"Other Current Liabilities": { "Other Current Liabilities": {
"Accrued Dubai Customs": {}, "Accrued Dubai Customs": {},
"Deferred income": {}, "Deferred income": {},
"Shipping & Handling": {} "Shipping & Handling": {}
}, },
"Provisions": { "Provisions": {
"Tax Payables": { "Tax Payables": {
"Income Tax Payable": {}, "Income Tax Payable": {},
"Sales Tax Payable": {}, "Sales Tax Payable": {},
"Withholding Tax Payable": {} "Withholding Tax Payable": {}
} }
}, },
"Short Term Loan": {} "Short Term Loan": {}
}, },
"Duties and Taxes": { "Duties and Taxes": {
"account_type": "Tax", "account_type": "Tax",
"is_group": 1 "is_group": 1
}, },
"Reservations & Credit Notes": { "Reservations & Credit Notes": {
"Credit Notes": { "Credit Notes": {
"Credit Notes to Customers": {}, "Credit Notes to Customers": {},
"Reservations": {} "Reservations": {}
} }
}, },
"Stock Liabilities": { "Stock Liabilities": {
"Stock Received But Not Billed": { "Stock Received But Not Billed": {
"account_type": "Stock Received But Not Billed" "account_type": "Stock Received But Not Billed"
} }
}, },
"Unearned Income": {} "Unearned Income": {}
}, },
"Long Term Liabilities": { "Long Term Liabilities": {
"Long Term Loans & Provisions": {} "Long Term Loans & Provisions": {}
}, },
"root_type": "Liability" "root_type": "Liability"
}, },
"Revenue": { "Revenue": {
"Direct Revenue": { "Direct Revenue": {
"Other Direct Revenue": { "Other Direct Revenue": {
"Other Revenue - Operating": { "Other Revenue - Operating": {
"Advertising Income": {}, "Advertising Income": {},
"Branding Income": {}, "Branding Income": {},
"Early Setmt Margin from Suppliers": {}, "Early Setmt Margin from Suppliers": {},
"Marketing Rebate from Suppliers": {}, "Marketing Rebate from Suppliers": {},
"Rebate from Suppliers": {}, "Rebate from Suppliers": {},
"Service Income": {}, "Service Income": {},
"Space Rental Income": {} "Space Rental Income": {}
} }
} }
}, },
"Indirect Revenue": { "Indirect Revenue": {
"Other Indirect Revenue": { "Other Indirect Revenue": {
"Capital Gain": {}, "Capital Gain": {},
"Excess In Till": {}, "Excess In Till": {},
"Gain On Difference Of Exchange": {}, "Gain On Difference Of Exchange": {},
"Management Consultancy Fees": {}, "Management Consultancy Fees": {},
"Other Income": {} "Other Income": {}
}, },
"Other Revenue - Non Operating": { "Other Revenue - Non Operating": {
"Interest Revenue": {}, "Interest Revenue": {},
"Interest from FD": {}, "Interest from FD": {},
"Products Listing Fees from Suppliers": {}, "Products Listing Fees from Suppliers": {},
"Trade Opening Fees from suppliers": {} "Trade Opening Fees from suppliers": {}
} }
}, },
"Sales": { "Sales": {
"Sales from Other Regions": { "Sales from Other Regions": {
"Sales from Other Region": {} "Sales from Other Region": {}
}, },
"Sales of same region": { "Sales of same region": {
"Management Consultancy Fees 1": {}, "Management Consultancy Fees 1": {},
"Sales Account": {}, "Sales Account": {},
"Sales of I/C": {} "Sales of I/C": {}
} }
}, },
"root_type": "Income" "root_type": "Income"
}, },
"Share Holder Equity": { "Share Holder Equity": {
"Capital": { "Capital": {
"Contributed Capital": {}, "Contributed Capital": {},
"Share Capital": {}, "Share Capital": {},
"Shareholders Current A/c": {}, "Shareholders Current A/c": {},
"Sub Ordinated Loan": {}, "Sub Ordinated Loan": {},
"Treasury Stocks": {} "Treasury Stocks": {}
}, },
"Retained Earnings": { "Retained Earnings": {
"Current Year Results": {}, "Current Year Results": {},
"Dividends Paid": {}, "Dividends Paid": {},
"Previous Years Results": {} "Previous Years Results": {}
}, },
"account_type": "Equity", "account_type": "Equity",
"root_type": "Equity" "root_type": "Equity"
} }
} }

View File

@@ -216,7 +216,7 @@ def get_accountwise_gle(filters, gl_entries, gle_map):
if gle.posting_date < from_date or cstr(gle.is_opening) == "Yes": if gle.posting_date < from_date or cstr(gle.is_opening) == "Yes":
update_value_in_dict(gle_map[gle.account].totals, 'opening', gle) update_value_in_dict(gle_map[gle.account].totals, 'opening', gle)
update_value_in_dict(totals, 'opening', gle) update_value_in_dict(totals, 'opening', gle)
update_value_in_dict(gle_map[gle.account].totals, 'closing', gle) update_value_in_dict(gle_map[gle.account].totals, 'closing', gle)
update_value_in_dict(totals, 'closing', gle) update_value_in_dict(totals, 'closing', gle)
@@ -323,7 +323,7 @@ def get_columns(filters):
{ {
"label": _("Balance") + " (" + filters.account_currency + ")", "label": _("Balance") + " (" + filters.account_currency + ")",
"fieldname": "balance_in_account_currency", "fieldname": "balance_in_account_currency",
"fieldtype": "Data", "fieldtype": "Float",
"width": 100 "width": 100
} }
]) ])

View File

@@ -13,8 +13,6 @@ source_link = "https://github.com/frappe/erpnext"
develop_version = '10.x.x-develop' develop_version = '10.x.x-develop'
error_report_email = "support@erpnext.com"
app_include_js = "assets/js/erpnext.min.js" app_include_js = "assets/js/erpnext.min.js"
app_include_css = "assets/css/erpnext.css" app_include_css = "assets/css/erpnext.css"
web_include_js = "assets/js/erpnext-web.min.js" web_include_js = "assets/js/erpnext-web.min.js"

View File

@@ -381,6 +381,19 @@ def get_leave_balance_on(employee, leave_type, date, allocation_records=None,
return flt(allocation.total_leaves_allocated) - flt(leaves_taken) return flt(allocation.total_leaves_allocated) - flt(leaves_taken)
def get_total_allocated_leaves(employee, leave_type, date):
filters= {
'from_date': ['<=', date],
'to_date': ['>=', date],
'docstatus': 1,
'leave_type': leave_type,
'employee': employee
}
leave_allocation_records = frappe.db.get_all('Leave Allocation', filters=filters, fields=['total_leaves_allocated'])
return flt(leave_allocation_records[0]['total_leaves_allocated']) if leave_allocation_records else flt(0)
def get_approved_leaves_for_period(employee, leave_type, from_date, to_date): def get_approved_leaves_for_period(employee, leave_type, from_date, to_date):
leave_applications = frappe.db.sql(""" leave_applications = frappe.db.sql("""
select employee, leave_type, from_date, to_date, total_leave_days select employee, leave_type, from_date, to_date, total_leave_days

View File

@@ -5,21 +5,21 @@ from __future__ import unicode_literals
import frappe import frappe
from frappe import _ from frappe import _
from erpnext.hr.doctype.leave_application.leave_application \ from erpnext.hr.doctype.leave_application.leave_application \
import get_leave_allocation_records, get_leave_balance_on, get_approved_leaves_for_period import get_leave_allocation_records, get_leave_balance_on, get_approved_leaves_for_period, get_total_allocated_leaves
def execute(filters=None): def execute(filters=None):
leave_types = frappe.db.sql_list("select name from `tabLeave Type` order by name asc") leave_types = frappe.db.sql_list("select name from `tabLeave Type` order by name asc")
columns = get_columns(leave_types) columns = get_columns(leave_types)
data = get_data(filters, leave_types) data = get_data(filters, leave_types)
return columns, data return columns, data
def get_columns(leave_types): def get_columns(leave_types):
columns = [ columns = [
_("Employee") + ":Link/Employee:150", _("Employee") + ":Link/Employee:150",
_("Employee Name") + "::200", _("Employee Name") + "::200",
_("Department") +"::150" _("Department") +"::150"
] ]
@@ -27,18 +27,18 @@ def get_columns(leave_types):
columns.append(_(leave_type) + " " + _("Opening") + ":Float:160") columns.append(_(leave_type) + " " + _("Opening") + ":Float:160")
columns.append(_(leave_type) + " " + _("Taken") + ":Float:160") columns.append(_(leave_type) + " " + _("Taken") + ":Float:160")
columns.append(_(leave_type) + " " + _("Balance") + ":Float:160") columns.append(_(leave_type) + " " + _("Balance") + ":Float:160")
return columns return columns
def get_data(filters, leave_types): def get_data(filters, leave_types):
user = frappe.session.user user = frappe.session.user
allocation_records_based_on_to_date = get_leave_allocation_records(filters.to_date) allocation_records_based_on_to_date = get_leave_allocation_records(filters.to_date)
allocation_records_based_on_from_date = get_leave_allocation_records(filters.from_date) allocation_records_based_on_from_date = get_leave_allocation_records(filters.from_date)
active_employees = frappe.get_all("Employee", active_employees = frappe.get_all("Employee",
filters = { "status": "Active", "company": filters.company}, filters = { "status": "Active", "company": filters.company},
fields = ["name", "employee_name", "department", "user_id"]) fields = ["name", "employee_name", "department", "user_id"])
data = [] data = []
for employee in active_employees: for employee in active_employees:
leave_approvers = [l.leave_approver for l in frappe.db.sql("""select leave_approver from `tabEmployee Leave Approver` where parent = %s""", leave_approvers = [l.leave_approver for l in frappe.db.sql("""select leave_approver from `tabEmployee Leave Approver` where parent = %s""",
@@ -52,15 +52,14 @@ def get_data(filters, leave_types):
filters.from_date, filters.to_date) filters.from_date, filters.to_date)
# opening balance # opening balance
opening = get_leave_balance_on(employee.name, leave_type, filters.from_date, opening = get_total_allocated_leaves(employee.name, leave_type, filters.to_date)
allocation_records_based_on_from_date.get(employee.name, frappe._dict()))
# closing balance # closing balance
closing = get_leave_balance_on(employee.name, leave_type, filters.to_date, closing = get_leave_balance_on(employee.name, leave_type, filters.to_date,
allocation_records_based_on_to_date.get(employee.name, frappe._dict())) allocation_records_based_on_to_date.get(employee.name, frappe._dict()))
row += [opening, leaves_taken, closing] row += [opening, leaves_taken, closing]
data.append(row) data.append(row)
return data return data

View File

@@ -411,7 +411,7 @@ erpnext.patches.v8_0.save_system_settings
erpnext.patches.v8_1.delete_deprecated_reports erpnext.patches.v8_1.delete_deprecated_reports
erpnext.patches.v9_0.remove_subscription_module erpnext.patches.v9_0.remove_subscription_module
erpnext.patches.v8_7.make_subscription_from_recurring_data erpnext.patches.v8_7.make_subscription_from_recurring_data
erpnext.patches.v8_1.setup_gst_india #2017-06-27 erpnext.patches.v8_1.setup_gst_india #2019-04-04
execute:frappe.reload_doc('regional', 'doctype', 'gst_hsn_code') execute:frappe.reload_doc('regional', 'doctype', 'gst_hsn_code')
erpnext.patches.v8_1.removed_roles_from_gst_report_non_indian_account erpnext.patches.v8_1.removed_roles_from_gst_report_non_indian_account
erpnext.patches.v8_1.gst_fixes #2017-07-06 erpnext.patches.v8_1.gst_fixes #2017-07-06
@@ -498,6 +498,7 @@ erpnext.patches.v10_0.update_hub_connector_domain
erpnext.patches.v10_0.set_student_party_type erpnext.patches.v10_0.set_student_party_type
erpnext.patches.v10_0.update_project_in_sle erpnext.patches.v10_0.update_project_in_sle
erpnext.patches.v10_0.fix_reserved_qty_for_sub_contract erpnext.patches.v10_0.fix_reserved_qty_for_sub_contract
erpnext.patches.v10_0.repost_requested_qty_for_non_stock_uom_items
erpnext.patches.v10_0.taxes_issue_with_pos erpnext.patches.v10_0.taxes_issue_with_pos
erpnext.patches.v10_0.set_qty_in_transactions_based_on_serial_no_input erpnext.patches.v10_0.set_qty_in_transactions_based_on_serial_no_input
erpnext.patches.v10_0.show_leaves_of_all_department_members_in_calendar erpnext.patches.v10_0.show_leaves_of_all_department_members_in_calendar
@@ -508,4 +509,5 @@ erpnext.patches.v10_0.recalculate_gross_margin_for_project
erpnext.patches.v10_0.delete_hub_documents erpnext.patches.v10_0.delete_hub_documents
erpnext.patches.v10_0.update_user_image_in_employee erpnext.patches.v10_0.update_user_image_in_employee
erpnext.patches.v10_0.repost_gle_for_purchase_receipts_with_rejected_items erpnext.patches.v10_0.repost_gle_for_purchase_receipts_with_rejected_items
erpnext.patches.v10_0.allow_operators_in_supplier_scorecard erpnext.patches.v10_0.allow_operators_in_supplier_scorecard
erpnext.patches.v10_0.gst_hsn_fixes

View File

@@ -0,0 +1,18 @@
import frappe
from erpnext.regional.india.setup import setup
from frappe.custom.doctype.custom_field.custom_field import create_custom_fields
def execute():
company = frappe.get_all('Company', filters = {'country': 'India'})
if not company:
return
hsn_sac_field = dict(fieldname='gst_hsn_code', label='HSN/SAC',
fieldtype='Data', options='item_code.gst_hsn_code', insert_after='description',
allow_on_submit=1, print_hide=1)
custom_fields = {
'Material Request Item': [hsn_sac_field]
}
create_custom_fields(custom_fields)

View File

@@ -0,0 +1,21 @@
# Copyright (c) 2019, 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():
from erpnext.stock.stock_balance import update_bin_qty, get_indented_qty
count=0
for item_code, warehouse in frappe.db.sql("""select distinct item_code, warehouse
from `tabMaterial Request Item` where docstatus = 1 and stock_uom<>uom"""):
try:
count += 1
update_bin_qty(item_code, warehouse, {
"indented_qty": get_indented_qty(item_code, warehouse),
})
if count % 200 == 0:
frappe.db.commit()
except:
frappe.db.rollback()

View File

@@ -143,6 +143,13 @@ class Task(NestedSet):
self.update_nsm_model() self.update_nsm_model()
def update_status(self):
if self.status not in ('Cancelled', 'Closed') and self.exp_end_date:
from datetime import datetime
if self.exp_end_date < datetime.now().date():
self.db_set('status', 'Overdue')
self.update_project()
@frappe.whitelist() @frappe.whitelist()
def check_if_child_exists(name): def check_if_child_exists(name):
return frappe.db.sql("""select name from `tabTask` return frappe.db.sql("""select name from `tabTask`
@@ -168,10 +175,9 @@ def set_multiple_status(names, status):
task.save() task.save()
def set_tasks_as_overdue(): def set_tasks_as_overdue():
frappe.db.sql("""update tabTask set `status`='Overdue' tasks = frappe.get_all("Task", filters={'status':['not in',['Cancelled', 'Closed']]})
where exp_end_date is not null for task in tasks:
and exp_end_date < CURDATE() frappe.get_doc("Task", task.name).update_status()
and `status` not in ('Closed', 'Cancelled')""")
@frappe.whitelist() @frappe.whitelist()
def get_children(doctype, parent, task=None, project=None, is_root=False): def get_children(doctype, parent, task=None, project=None, is_root=False):

View File

@@ -180,7 +180,8 @@ def make_custom_fields():
'Sales Invoice Item': [hsn_sac_field], 'Sales Invoice Item': [hsn_sac_field],
'Purchase Order Item': [hsn_sac_field], 'Purchase Order Item': [hsn_sac_field],
'Purchase Receipt Item': [hsn_sac_field], 'Purchase Receipt Item': [hsn_sac_field],
'Purchase Invoice Item': [hsn_sac_field] 'Purchase Invoice Item': [hsn_sac_field],
'Material Request Item': [hsn_sac_field]
} }
create_custom_fields(custom_fields) create_custom_fields(custom_fields)

View File

@@ -93,6 +93,29 @@ erpnext.stock.DeliveryNoteController = erpnext.selling.SellingController.extend(
refresh: function(doc, dt, dn) { refresh: function(doc, dt, dn) {
var me = this; var me = this;
this._super(); this._super();
if((!doc.is_return) && (doc.status!="Closed" || this.frm.is_new())) {
if (this.frm.doc.docstatus===0) {
this.frm.add_custom_button(__('Sales Order'),
function() {
erpnext.utils.map_current_doc({
method: "erpnext.selling.doctype.sales_order.sales_order.make_delivery_note",
source_doctype: "Sales Order",
target: me.frm,
setters: {
customer: me.frm.doc.customer || undefined,
},
get_query_filters: {
docstatus: 1,
status: ["!=", "Closed"],
per_delivered: ["<", 99.99],
company: me.frm.doc.company,
project: me.frm.doc.project || undefined,
}
})
}, __("Get items from"));
}
}
if (!doc.is_return && doc.status!="Closed") { if (!doc.is_return && doc.status!="Closed") {
if(flt(doc.per_installed, 2) < 100 && doc.docstatus==1) if(flt(doc.per_installed, 2) < 100 && doc.docstatus==1)
this.frm.add_custom_button(__('Installation Note'), function() { this.frm.add_custom_button(__('Installation Note'), function() {
@@ -114,27 +137,6 @@ erpnext.stock.DeliveryNoteController = erpnext.selling.SellingController.extend(
if (!doc.__islocal && doc.docstatus==1) { if (!doc.__islocal && doc.docstatus==1) {
this.frm.page.set_inner_btn_group_as_primary(__("Make")); this.frm.page.set_inner_btn_group_as_primary(__("Make"));
} }
if (this.frm.doc.docstatus===0) {
this.frm.add_custom_button(__('Sales Order'),
function() {
erpnext.utils.map_current_doc({
method: "erpnext.selling.doctype.sales_order.sales_order.make_delivery_note",
source_doctype: "Sales Order",
target: me.frm,
setters: {
customer: me.frm.doc.customer || undefined,
},
get_query_filters: {
docstatus: 1,
status: ["!=", "Closed"],
per_delivered: ["<", 99.99],
company: me.frm.doc.company,
project: me.frm.doc.project || undefined,
}
})
}, __("Get items from"));
}
} }
if (doc.docstatus==1) { if (doc.docstatus==1) {

View File

@@ -381,6 +381,9 @@ def make_purchase_invoice(source_name, target_doc=None):
doclist = get_mapped_doc("Purchase Receipt", source_name, { doclist = get_mapped_doc("Purchase Receipt", source_name, {
"Purchase Receipt": { "Purchase Receipt": {
"doctype": "Purchase Invoice", "doctype": "Purchase Invoice",
"field_map": {
"supplier_warehouse": "supplier_warehouse"
},
"validation": { "validation": {
"docstatus": ["=", 1], "docstatus": ["=", 1],
}, },

View File

@@ -110,7 +110,7 @@ def get_reserved_qty(item_code, warehouse):
return flt(reserved_qty[0][0]) if reserved_qty else 0 return flt(reserved_qty[0][0]) if reserved_qty else 0
def get_indented_qty(item_code, warehouse): def get_indented_qty(item_code, warehouse):
indented_qty = frappe.db.sql("""select sum(mr_item.qty - mr_item.ordered_qty) indented_qty = frappe.db.sql("""select sum((mr_item.qty - mr_item.ordered_qty) * mr_item.conversion_factor)
from `tabMaterial Request Item` mr_item, `tabMaterial Request` mr from `tabMaterial Request Item` mr_item, `tabMaterial Request` mr
where mr_item.item_code=%s and mr_item.warehouse=%s where mr_item.item_code=%s and mr_item.warehouse=%s
and mr_item.qty > mr_item.ordered_qty and mr_item.parent=mr.name and mr_item.qty > mr_item.ordered_qty and mr_item.parent=mr.name

View File

@@ -4,50 +4,35 @@
import frappe, erpnext import frappe, erpnext
from frappe import _ from frappe import _
from six import iteritems
def get_level(): def get_level():
activation_level = 0 activation_level = 0
sales_data = []
doctypes = {"Item": 5, "Customer": 5, "Sales Order": 2, "Sales Invoice": 2, "Purchase Order": 2, "Employee": 3, "Lead": 3, "Quotation": 3,
"Payment Entry": 2, "User": 5, "Student": 5, "Instructor": 5, "BOM": 3, "Journal Entry": 3, "Stock Entry": 3}
for doctype, min_count in iteritems(doctypes):
count = frappe.db.count(doctype)
if count > min_count:
activation_level += 1
sales_data.append({doctype: count})
if frappe.db.get_single_value('System Settings', 'setup_complete'): if frappe.db.get_single_value('System Settings', 'setup_complete'):
activation_level = 1
if frappe.db.count('Item') > 5:
activation_level += 1 activation_level += 1
if frappe.db.count('Customer') > 5: communication_number = frappe.db.count('Communication', dict(communication_medium='Email'))
activation_level += 1 if communication_number > 10:
if frappe.db.count('Sales Order') > 2:
activation_level += 1
if frappe.db.count('Purchase Order') > 2:
activation_level += 1
if frappe.db.count('Employee') > 3:
activation_level += 1
if frappe.db.count('Lead') > 3:
activation_level += 1
if frappe.db.count('Payment Entry') > 2:
activation_level += 1
if frappe.db.count('Communication', dict(communication_medium='Email')) > 10:
activation_level += 1
if frappe.db.count('User') > 5:
activation_level += 1
if frappe.db.count('Student') > 5:
activation_level += 1
if frappe.db.count('Instructor') > 5:
activation_level += 1 activation_level += 1
sales_data.append({"Communication": communication_number})
# recent login # recent login
if frappe.db.sql('select name from tabUser where last_login > date_sub(now(), interval 2 day) limit 1'): if frappe.db.sql('select name from tabUser where last_login > date_sub(now(), interval 2 day) limit 1'):
activation_level += 1 activation_level += 1
return activation_level level = {"activation_level": activation_level, "sales_data": sales_data}
return level
def get_help_messages(): def get_help_messages():
'''Returns help messages to be shown on Desktop''' '''Returns help messages to be shown on Desktop'''

View File

@@ -1,4 +1,4 @@
frappe frappe
unidecode Unidecode==1.1.1
pygithub PyGithub==1.43.8
googlemaps googlemaps==3.0.2