Compare commits
186 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f456eb6254 | ||
|
|
408a8e804c | ||
|
|
e0b39b860f | ||
|
|
fde7febf0d | ||
|
|
eebf194468 | ||
|
|
6f701b3b6a | ||
|
|
8147f74e4e | ||
|
|
dc65dc3778 | ||
|
|
a7fb9216c9 | ||
|
|
81b98261ae | ||
|
|
c20072e940 | ||
|
|
e4c2ebfc57 | ||
|
|
587c061550 | ||
|
|
40a9f6f8e9 | ||
|
|
f0b0464cce | ||
|
|
4e803af0e6 | ||
|
|
4ccd8d3326 | ||
|
|
9768467d53 | ||
|
|
59de1e23bc | ||
|
|
f19b1e0c6b | ||
|
|
d33a3a295f | ||
|
|
f749302d25 | ||
|
|
9c47efb592 | ||
|
|
ea61046e8d | ||
|
|
3f671ea60f | ||
|
|
c1a7c3b08b | ||
|
|
d1225661d2 | ||
|
|
302eee9406 | ||
|
|
b434464b1c | ||
|
|
aabeb38c15 | ||
|
|
fe93ea56b6 | ||
|
|
b301603740 | ||
|
|
d7ba759844 | ||
|
|
8efe58bd3c | ||
|
|
6609938483 | ||
|
|
84662f2db5 | ||
|
|
da975f5a76 | ||
|
|
f34c96bf7a | ||
|
|
0f96f8e68f | ||
|
|
991962b6fd | ||
|
|
c481e27d88 | ||
|
|
56e04e0727 | ||
|
|
2244ac4d52 | ||
|
|
024b537b7f | ||
|
|
e4ee5c3f1c | ||
|
|
4b3d99d39a | ||
|
|
47a10f5a39 | ||
|
|
ecb39a5b63 | ||
|
|
39c8c9e7b0 | ||
|
|
4e7cc93af9 | ||
|
|
f8cb1a916e | ||
|
|
ab2e75e98e | ||
|
|
354892b1c6 | ||
|
|
abe69afd69 | ||
|
|
c72a89aaf8 | ||
|
|
873d98be2d | ||
|
|
f1d06b02e7 | ||
|
|
675276b802 | ||
|
|
3ed3a2d176 | ||
|
|
9e95e780da | ||
|
|
de58657537 | ||
|
|
015fa7a1d1 | ||
|
|
1ff3a6cdb8 | ||
|
|
7620efc9ad | ||
|
|
7778b480fd | ||
|
|
a17d7cea34 | ||
|
|
a9cafcb8ae | ||
|
|
bdfd0d1ff9 | ||
|
|
afc8b1a087 | ||
|
|
6c1773025b | ||
|
|
1b7d66fab6 | ||
|
|
e24365f1f4 | ||
|
|
fd334bf451 | ||
|
|
5515b1ea7f | ||
|
|
96d67f5153 | ||
|
|
8a00319962 | ||
|
|
c6136e4801 | ||
|
|
0938b5dec6 | ||
|
|
88f8fcb32e | ||
|
|
f40ce616a7 | ||
|
|
b02788b915 | ||
|
|
b094ee45d7 | ||
|
|
de0c87757a | ||
|
|
5604f987f2 | ||
|
|
9d14f0f36a | ||
|
|
a74468b353 | ||
|
|
35f81b24f1 | ||
|
|
40431cbf89 | ||
|
|
5529f14aaf | ||
|
|
54c31b498b | ||
|
|
899dba9022 | ||
|
|
7d8fa8089a | ||
|
|
ac86c5b6d1 | ||
|
|
ecc3f312b9 | ||
|
|
b65b5f43a7 | ||
|
|
c3270d7504 | ||
|
|
ea909ace01 | ||
|
|
f64d11da3c | ||
|
|
95225be93d | ||
|
|
e5d169b8d2 | ||
|
|
da4e3fb366 | ||
|
|
13ce150149 | ||
|
|
a04489a72b | ||
|
|
35cd88b09b | ||
|
|
ff56566506 | ||
|
|
01ad94bfad | ||
|
|
cfe3c54ca0 | ||
|
|
2f6a20a93a | ||
|
|
5d1543f241 | ||
|
|
c56650c773 | ||
|
|
cb11f27558 | ||
|
|
98be98816c | ||
|
|
ca2c297f72 | ||
|
|
387e1e21cb | ||
|
|
d6e49150a8 | ||
|
|
49a2729663 | ||
|
|
06baf20edd | ||
|
|
13553c2bf0 | ||
|
|
f638c1acd5 | ||
|
|
e4c659386a | ||
|
|
cd7a1661c6 | ||
|
|
96962e2101 | ||
|
|
7eedebc970 | ||
|
|
437e34accb | ||
|
|
0f2137be18 | ||
|
|
f87a622ef0 | ||
|
|
07722b835c | ||
|
|
3cd7a45c1b | ||
|
|
90b5174256 | ||
|
|
bffad26226 | ||
|
|
a578f3e23a | ||
|
|
870dd43268 | ||
|
|
ad0bd4ca92 | ||
|
|
eba480e15a | ||
|
|
4b83403a63 | ||
|
|
22c9e42f4d | ||
|
|
6ddc487fb6 | ||
|
|
3a34cadcb2 | ||
|
|
b71d1a4c7f | ||
|
|
bef80bab0d | ||
|
|
190210394c | ||
|
|
5cafcf66b0 | ||
|
|
d71e50c9fc | ||
|
|
35ebe1bf78 | ||
|
|
b14cc0417d | ||
|
|
399a3097e8 | ||
|
|
c8f5c3cdbe | ||
|
|
e83d506319 | ||
|
|
690bcd7b66 | ||
|
|
f18d285eab | ||
|
|
7887ccb441 | ||
|
|
d57b57a21d | ||
|
|
9fc0a8cbf8 | ||
|
|
5cc0531d27 | ||
|
|
0e5cdc8495 | ||
|
|
b80d892eab | ||
|
|
185af03fb2 | ||
|
|
abcbbc63d8 | ||
|
|
6871c74ce1 | ||
|
|
d0a44ca85c | ||
|
|
83db3e3ddb | ||
|
|
cc11045fd3 | ||
|
|
1b5afe737f | ||
|
|
3d65d9602e | ||
|
|
9440d080d4 | ||
|
|
9269c86339 | ||
|
|
7c82d616c9 | ||
|
|
f227379d2f | ||
|
|
eba88919c1 | ||
|
|
3408432b50 | ||
|
|
a0949158b7 | ||
|
|
ea91d2aaf1 | ||
|
|
de992abf83 | ||
|
|
5d8635a8dc | ||
|
|
7e911bae95 | ||
|
|
0676cf6d3f | ||
|
|
b74ae7aa31 | ||
|
|
0ad7db3bbd | ||
|
|
db74e316d2 | ||
|
|
1897360e4b | ||
|
|
e7fb957415 | ||
|
|
2f4567fa3c | ||
|
|
0a7abc188e | ||
|
|
5eeef7f065 | ||
|
|
7d36875d6f | ||
|
|
2fa718705a |
@@ -16,8 +16,9 @@ install:
|
||||
- sudo apt-get install mariadb-server mariadb-common libmariadbclient-dev
|
||||
- ./ci/fix-mariadb.sh
|
||||
|
||||
- wget http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.1/wkhtmltox-0.12.1_linux-precise-amd64.deb
|
||||
- sudo dpkg -i wkhtmltox-0.12.1_linux-precise-amd64.deb
|
||||
- sudo apt-get install xfonts-75dpi xfonts-base -y
|
||||
- wget http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.2.1/wkhtmltox-0.12.2.1_linux-precise-amd64.deb
|
||||
- sudo dpkg -i wkhtmltox-0.12.2.1_linux-precise-amd64.deb
|
||||
- CFLAGS=-O0 pip install git+https://github.com/frappe/frappe.git@develop
|
||||
- CFLAGS=-O0 pip install --editable .
|
||||
|
||||
|
||||
29
README.md
29
README.md
@@ -1,34 +1,33 @@
|
||||
# ERPNext - Open Source ERP for small, medium sized businesses [](https://travis-ci.org/frappe/erpnext)
|
||||
# ERPNext - Open source ERP for small and medium-size business [](https://travis-ci.org/frappe/erpnext)
|
||||
|
||||
[](https://gitter.im/frappe/erpnext?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||
|
||||
[https://erpnext.com](https://erpnext.com)
|
||||
|
||||
Includes Accounting, Inventory, CRM, Sales, Purchase, Projects, HRMS. Built on Python / MariaDB.
|
||||
Includes: Accounting, Inventory, CRM, Sales, Purchase, Projects, HRMS. Requires MariaDB.
|
||||
|
||||
ERPNext is built on [frappe](https://github.com/frappe/frappe) Python Framework.
|
||||
ERPNext is built on the [Frappe](https://github.com/frappe/frappe) Framework, a full-stack web app framework in Python & Javascript.
|
||||
|
||||
- [User Guide](http://erpnext.org/user-guide.html)
|
||||
- [User Guide](https://erpnext.com/user-guide)
|
||||
- [Getting Help](http://erpnext.org/getting-help.html)
|
||||
- [Developer Forum](http://groups.google.com/group/erpnext-developer-forum)
|
||||
- [User Forum](http://groups.google.com/group/erpnext-user-forum)
|
||||
- [Discussion Forum](https://discuss.frappe.io/)
|
||||
|
||||
---
|
||||
|
||||
### Install
|
||||
### Full Install
|
||||
|
||||
Use the bench, https://github.com/frappe/bench
|
||||
The Easy Way install script for bench will install all dependencies (e.g. MariaDB). See https://github.com/frappe/bench
|
||||
|
||||
### Admin Login
|
||||
New passwords will be created for the ERPNext "Administrator" user, the MariaDB root user, and the frappe user (the script displays the passwords and saves them to ~/frappe_passwords.txt).
|
||||
|
||||
1. go to "/login"
|
||||
1. Administrator user name: "Administrator"
|
||||
1. Administrator password: "admin"
|
||||
### Virtual Image
|
||||
|
||||
### Download and Install
|
||||
|
||||
##### Virtual Image:
|
||||
You can download a virtual image to run ERPNext in a virtual machine on your local system.
|
||||
|
||||
- [ERPNext Download](http://erpnext.com/download)
|
||||
|
||||
System and user credentials are listed on the download page.
|
||||
|
||||
---
|
||||
|
||||
## License
|
||||
|
||||
@@ -1 +1 @@
|
||||
__version__ = '4.11.2'
|
||||
__version__ = '4.20.1'
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
from frappe.utils import flt, cstr, cint, getdate, add_days, formatdate
|
||||
from frappe.utils import flt, cstr, cint, getdate
|
||||
from frappe import msgprint, throw, _
|
||||
from frappe.model.document import Document
|
||||
|
||||
@@ -176,15 +176,7 @@ class Account(Document):
|
||||
frappe.throw(_("Due Date cannot be before Posting Date"))
|
||||
|
||||
elif credit_days is not None and diff > credit_days:
|
||||
is_credit_controller = frappe.db.get_value("Accounts Settings", None,
|
||||
"credit_controller") in frappe.user.get_roles()
|
||||
|
||||
if is_credit_controller:
|
||||
msgprint(_("Note: Due Date exceeds the allowed credit days by {0} day(s)").format(
|
||||
diff - credit_days))
|
||||
else:
|
||||
max_due_date = formatdate(add_days(posting_date, credit_days))
|
||||
frappe.throw(_("Due Date cannot be after {0}").format(max_due_date))
|
||||
msgprint(_("Note: Due Date exceeds the allowed credit days by {0} day(s)").format(diff - credit_days))
|
||||
|
||||
def validate_trash(self):
|
||||
"""checks gl entries and if child exists"""
|
||||
|
||||
@@ -800,7 +800,8 @@
|
||||
"fieldtype": "Date",
|
||||
"label": "From Date",
|
||||
"no_copy": 1,
|
||||
"permlevel": 0
|
||||
"permlevel": 0,
|
||||
"print_hide": 1
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 1,
|
||||
@@ -810,7 +811,8 @@
|
||||
"fieldtype": "Date",
|
||||
"label": "To Date",
|
||||
"no_copy": 1,
|
||||
"permlevel": 0
|
||||
"permlevel": 0,
|
||||
"print_hide": 1
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 1,
|
||||
@@ -878,7 +880,7 @@
|
||||
"icon": "icon-file-text",
|
||||
"idx": 1,
|
||||
"is_submittable": 1,
|
||||
"modified": "2014-10-08 14:23:20.234176",
|
||||
"modified": "2014-11-27 17:28:20.133701",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Purchase Invoice",
|
||||
|
||||
@@ -114,7 +114,7 @@ erpnext.POS = Class.extend({
|
||||
});
|
||||
|
||||
this.wrapper.find('input.discount-amount').on("change", function() {
|
||||
frappe.model.set_value(me.frm.doctype, me.frm.docname, "discount_amount", this.value);
|
||||
frappe.model.set_value(me.frm.doctype, me.frm.docname, "discount_amount", flt(this.value));
|
||||
});
|
||||
|
||||
this.call_function("remove-items", function() {me.remove_selected_items();});
|
||||
@@ -233,6 +233,11 @@ erpnext.POS = Class.extend({
|
||||
},
|
||||
make_item_list: function() {
|
||||
var me = this;
|
||||
if(!this.price_list) {
|
||||
msgprint(__("Price List not found or disabled"));
|
||||
return;
|
||||
}
|
||||
|
||||
me.item_timeout = null;
|
||||
frappe.call({
|
||||
method: 'erpnext.accounts.doctype.sales_invoice.pos.get_items',
|
||||
@@ -487,7 +492,7 @@ erpnext.POS = Class.extend({
|
||||
});
|
||||
|
||||
me.refresh_delete_btn();
|
||||
if(me.frm.doc[this.party]) {
|
||||
if(me.frm.doc[this.party.toLowerCase()]) {
|
||||
this.barcode.$input.focus();
|
||||
} else {
|
||||
this.party_field.$input.focus();
|
||||
|
||||
@@ -225,8 +225,7 @@ $.extend(cur_frm.cscript, new erpnext.accounts.SalesInvoiceController({frm: cur_
|
||||
// Hide Fields
|
||||
// ------------
|
||||
cur_frm.cscript.hide_fields = function(doc) {
|
||||
par_flds = ['project_name', 'due_date', 'is_opening', 'source', 'total_advance', 'gross_profit',
|
||||
'gross_profit_percent', 'get_advances_received',
|
||||
par_flds = ['project_name', 'due_date', 'is_opening', 'source', 'total_advance', 'get_advances_received',
|
||||
'advance_adjustment_details', 'sales_partner', 'commission_rate',
|
||||
'total_commission', 'advances', 'from_date', 'to_date'];
|
||||
|
||||
|
||||
@@ -422,6 +422,15 @@
|
||||
"fieldtype": "Section Break",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "other_charges_total_export",
|
||||
"fieldtype": "Currency",
|
||||
"label": "Total Taxes and Charges",
|
||||
"options": "currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "other_charges_total",
|
||||
"fieldtype": "Currency",
|
||||
@@ -438,23 +447,24 @@
|
||||
"fieldtype": "Column Break",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "other_charges_total_export",
|
||||
"fieldtype": "Currency",
|
||||
"label": "Total Taxes and Charges",
|
||||
"options": "currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "discount_amount",
|
||||
"fieldtype": "Currency",
|
||||
"label": "Discount Amount",
|
||||
"options": "Company:company:default_currency",
|
||||
"options": "currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "base_discount_amount",
|
||||
"fieldtype": "Currency",
|
||||
"label": "Discount Amount (Company Currency)",
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "totals",
|
||||
"fieldtype": "Section Break",
|
||||
@@ -568,27 +578,6 @@
|
||||
"print_hide": 0,
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "gross_profit",
|
||||
"fieldtype": "Currency",
|
||||
"label": "Gross Profit",
|
||||
"oldfieldname": "gross_profit",
|
||||
"oldfieldtype": "Currency",
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "gross_profit_percent",
|
||||
"fieldtype": "Float",
|
||||
"label": "Gross Profit (%)",
|
||||
"oldfieldname": "gross_profit_percent",
|
||||
"oldfieldtype": "Currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "advances",
|
||||
"fieldtype": "Section Break",
|
||||
@@ -1213,7 +1202,7 @@
|
||||
"icon": "icon-file-text",
|
||||
"idx": 1,
|
||||
"is_submittable": 1,
|
||||
"modified": "2014-10-10 16:54:22.284284",
|
||||
"modified": "2015-01-12 17:34:36.353241",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Sales Invoice",
|
||||
|
||||
@@ -1,155 +1,156 @@
|
||||
{
|
||||
"autoname": "INVTD.######",
|
||||
"creation": "2013-04-24 11:39:32",
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"autoname": "INVTD.######",
|
||||
"creation": "2013-04-24 11:39:32",
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"fields": [
|
||||
{
|
||||
"fieldname": "charge_type",
|
||||
"fieldtype": "Select",
|
||||
"in_list_view": 1,
|
||||
"label": "Type",
|
||||
"oldfieldname": "charge_type",
|
||||
"oldfieldtype": "Select",
|
||||
"options": "\nActual\nOn Net Total\nOn Previous Row Amount\nOn Previous Row Total",
|
||||
"permlevel": 0,
|
||||
"fieldname": "charge_type",
|
||||
"fieldtype": "Select",
|
||||
"in_list_view": 1,
|
||||
"label": "Type",
|
||||
"oldfieldname": "charge_type",
|
||||
"oldfieldtype": "Select",
|
||||
"options": "\nActual\nOn Net Total\nOn Previous Row Amount\nOn Previous Row Total",
|
||||
"permlevel": 0,
|
||||
"reqd": 1
|
||||
},
|
||||
},
|
||||
{
|
||||
"depends_on": "eval:[\"On Previous Row Amount\", \"On Previous Row Total\"].indexOf(doc.charge_type)!==-1",
|
||||
"fieldname": "row_id",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"label": "Reference Row #",
|
||||
"oldfieldname": "row_id",
|
||||
"oldfieldtype": "Data",
|
||||
"depends_on": "eval:[\"On Previous Row Amount\", \"On Previous Row Total\"].indexOf(doc.charge_type)!==-1",
|
||||
"fieldname": "row_id",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"label": "Reference Row #",
|
||||
"oldfieldname": "row_id",
|
||||
"oldfieldtype": "Data",
|
||||
"permlevel": 0
|
||||
},
|
||||
},
|
||||
{
|
||||
"fieldname": "description",
|
||||
"fieldtype": "Small Text",
|
||||
"in_list_view": 1,
|
||||
"label": "Description",
|
||||
"oldfieldname": "description",
|
||||
"oldfieldtype": "Small Text",
|
||||
"permlevel": 0,
|
||||
"print_width": "300px",
|
||||
"reqd": 1,
|
||||
"fieldname": "description",
|
||||
"fieldtype": "Small Text",
|
||||
"in_list_view": 1,
|
||||
"label": "Description",
|
||||
"oldfieldname": "description",
|
||||
"oldfieldtype": "Small Text",
|
||||
"permlevel": 0,
|
||||
"print_width": "300px",
|
||||
"reqd": 1,
|
||||
"width": "300px"
|
||||
},
|
||||
},
|
||||
{
|
||||
"fieldname": "col_break_1",
|
||||
"fieldtype": "Column Break",
|
||||
"permlevel": 0,
|
||||
"fieldname": "col_break_1",
|
||||
"fieldtype": "Column Break",
|
||||
"permlevel": 0,
|
||||
"width": "50%"
|
||||
},
|
||||
},
|
||||
{
|
||||
"fieldname": "account_head",
|
||||
"fieldtype": "Link",
|
||||
"in_list_view": 0,
|
||||
"label": "Account Head",
|
||||
"oldfieldname": "account_head",
|
||||
"oldfieldtype": "Link",
|
||||
"options": "Account",
|
||||
"permlevel": 0,
|
||||
"reqd": 1,
|
||||
"fieldname": "account_head",
|
||||
"fieldtype": "Link",
|
||||
"in_list_view": 0,
|
||||
"label": "Account Head",
|
||||
"oldfieldname": "account_head",
|
||||
"oldfieldtype": "Link",
|
||||
"options": "Account",
|
||||
"permlevel": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 1
|
||||
},
|
||||
},
|
||||
{
|
||||
"default": ":Company",
|
||||
"fieldname": "cost_center",
|
||||
"fieldtype": "Link",
|
||||
"in_list_view": 0,
|
||||
"label": "Cost Center",
|
||||
"oldfieldname": "cost_center_other_charges",
|
||||
"oldfieldtype": "Link",
|
||||
"options": "Cost Center",
|
||||
"default": ":Company",
|
||||
"fieldname": "cost_center",
|
||||
"fieldtype": "Link",
|
||||
"in_list_view": 0,
|
||||
"label": "Cost Center",
|
||||
"oldfieldname": "cost_center_other_charges",
|
||||
"oldfieldtype": "Link",
|
||||
"options": "Cost Center",
|
||||
"permlevel": 0
|
||||
},
|
||||
},
|
||||
{
|
||||
"fieldname": "rate",
|
||||
"fieldtype": "Float",
|
||||
"in_list_view": 1,
|
||||
"label": "Rate",
|
||||
"oldfieldname": "rate",
|
||||
"oldfieldtype": "Currency",
|
||||
"permlevel": 0,
|
||||
"fieldname": "rate",
|
||||
"fieldtype": "Float",
|
||||
"in_list_view": 1,
|
||||
"label": "Rate",
|
||||
"oldfieldname": "rate",
|
||||
"oldfieldtype": "Currency",
|
||||
"permlevel": 0,
|
||||
"reqd": 1
|
||||
},
|
||||
},
|
||||
{
|
||||
"fieldname": "tax_amount",
|
||||
"fieldtype": "Currency",
|
||||
"in_list_view": 1,
|
||||
"label": "Amount",
|
||||
"oldfieldname": "tax_amount",
|
||||
"oldfieldtype": "Currency",
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"read_only": 1,
|
||||
"fieldname": "tax_amount",
|
||||
"fieldtype": "Currency",
|
||||
"in_list_view": 1,
|
||||
"label": "Amount",
|
||||
"oldfieldname": "tax_amount",
|
||||
"oldfieldtype": "Currency",
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"read_only": 1,
|
||||
"reqd": 0
|
||||
},
|
||||
},
|
||||
{
|
||||
"fieldname": "total",
|
||||
"fieldtype": "Currency",
|
||||
"label": "Total",
|
||||
"oldfieldname": "total",
|
||||
"oldfieldtype": "Currency",
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"fieldname": "total",
|
||||
"fieldtype": "Currency",
|
||||
"label": "Total",
|
||||
"oldfieldname": "total",
|
||||
"oldfieldtype": "Currency",
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"read_only": 1
|
||||
},
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"description": "If checked, the tax amount will be considered as already included in the Print Rate / Print Amount",
|
||||
"fieldname": "included_in_print_rate",
|
||||
"fieldtype": "Check",
|
||||
"label": "Is this Tax included in Basic Rate?",
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_width": "150px",
|
||||
"report_hide": 1,
|
||||
"allow_on_submit": 0,
|
||||
"description": "If checked, the tax amount will be considered as already included in the Print Rate / Print Amount",
|
||||
"fieldname": "included_in_print_rate",
|
||||
"fieldtype": "Check",
|
||||
"label": "Is this Tax included in Basic Rate?",
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_width": "150px",
|
||||
"report_hide": 1,
|
||||
"width": "150px"
|
||||
},
|
||||
},
|
||||
{
|
||||
"fieldname": "tax_amount_after_discount_amount",
|
||||
"fieldtype": "Currency",
|
||||
"hidden": 1,
|
||||
"label": "Tax Amount After Discount Amount",
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"depends_on": "eval:parent.discount_amount",
|
||||
"fieldname": "tax_amount_after_discount_amount",
|
||||
"fieldtype": "Currency",
|
||||
"hidden": 0,
|
||||
"label": "Tax Amount After Discount Amount",
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"read_only": 1
|
||||
},
|
||||
},
|
||||
{
|
||||
"fieldname": "item_wise_tax_detail",
|
||||
"fieldtype": "Small Text",
|
||||
"hidden": 1,
|
||||
"label": "Item Wise Tax Detail",
|
||||
"oldfieldname": "item_wise_tax_detail",
|
||||
"oldfieldtype": "Small Text",
|
||||
"permlevel": 0,
|
||||
"fieldname": "item_wise_tax_detail",
|
||||
"fieldtype": "Small Text",
|
||||
"hidden": 1,
|
||||
"label": "Item Wise Tax Detail",
|
||||
"oldfieldname": "item_wise_tax_detail",
|
||||
"oldfieldtype": "Small Text",
|
||||
"permlevel": 0,
|
||||
"read_only": 1
|
||||
},
|
||||
},
|
||||
{
|
||||
"fieldname": "parenttype",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 1,
|
||||
"in_filter": 1,
|
||||
"label": "Parenttype",
|
||||
"oldfieldname": "parenttype",
|
||||
"oldfieldtype": "Data",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"fieldname": "parenttype",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 1,
|
||||
"in_filter": 1,
|
||||
"label": "Parenttype",
|
||||
"oldfieldname": "parenttype",
|
||||
"oldfieldtype": "Data",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"search_index": 1
|
||||
}
|
||||
],
|
||||
"hide_heading": 1,
|
||||
"idx": 1,
|
||||
"istable": 1,
|
||||
"modified": "2014-05-30 03:43:39.740638",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Sales Taxes and Charges",
|
||||
"owner": "Administrator",
|
||||
],
|
||||
"hide_heading": 1,
|
||||
"idx": 1,
|
||||
"istable": 1,
|
||||
"modified": "2014-12-10 12:26:41.222471",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Sales Taxes and Charges",
|
||||
"owner": "Administrator",
|
||||
"permissions": []
|
||||
}
|
||||
}
|
||||
@@ -46,17 +46,17 @@ cur_frm.pformat.other_charges= function(doc){
|
||||
var new_val = flt(val)/flt(doc.conversion_rate);
|
||||
return new_val;
|
||||
}
|
||||
|
||||
|
||||
function print_hide(fieldname) {
|
||||
var doc_field = frappe.meta.get_docfield(doc.doctype, fieldname, doc.name);
|
||||
return doc_field.print_hide;
|
||||
}
|
||||
|
||||
|
||||
out ='';
|
||||
if (!doc.print_without_amount) {
|
||||
var cl = doc.other_charges || [];
|
||||
|
||||
// outer table
|
||||
// outer table
|
||||
var out='<div><table class="noborder" style="width:100%"><tr><td style="width: 60%"></td><td>';
|
||||
|
||||
// main table
|
||||
@@ -77,12 +77,12 @@ cur_frm.pformat.other_charges= function(doc){
|
||||
|
||||
// Discount Amount
|
||||
if(!print_hide('discount_amount') && doc.discount_amount)
|
||||
out += make_row('Discount Amount', convert_rate(doc.discount_amount), 0);
|
||||
out += make_row('Discount Amount', doc.discount_amount, 0);
|
||||
|
||||
// grand total
|
||||
if(!print_hide('grand_total_export'))
|
||||
out += make_row('Grand Total', doc.grand_total_export, 1);
|
||||
|
||||
|
||||
if(!print_hide('rounded_total_export'))
|
||||
out += make_row('Rounded Total', doc.rounded_total_export, 1);
|
||||
|
||||
@@ -92,7 +92,7 @@ cur_frm.pformat.other_charges= function(doc){
|
||||
out += '<table><tr><td style="width:25%;"><b>In Words</b></td>';
|
||||
out += '<td style="width:50%;">' + doc.in_words_export + '</td></tr>';
|
||||
}
|
||||
out += '</table></td></tr></table></div>';
|
||||
out += '</table></td></tr></table></div>';
|
||||
}
|
||||
return out;
|
||||
}
|
||||
@@ -139,14 +139,14 @@ cur_frm.fields_dict['other_charges'].grid.get_field("account_head").get_query =
|
||||
"account_type": ["Tax", "Chargeable", "Income Account"],
|
||||
"company": doc.company
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cur_frm.fields_dict['other_charges'].grid.get_field("cost_center").get_query = function(doc) {
|
||||
return{
|
||||
'company': doc.company,
|
||||
'group_or_ledger': "Ledger"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cur_frm.cscript.rate = function(doc, cdt, cdn) {
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
"doc_type": "Journal Voucher",
|
||||
"docstatus": 0,
|
||||
"doctype": "Print Format",
|
||||
"html": "<div style=\"position: relative\">\n\n\t{%- from \"templates/print_formats/standard_macros.html\" import add_header -%}\n<div class=\"page-break\">\n {%- if not doc.get(\"print_heading\") and not doc.get(\"select_print_heading\") \n and doc.set(\"select_print_heading\", _(\"Payment Advice\")) -%}{%- endif -%}\n {{ add_header(0, 1, doc, letter_head, no_letterhead) }}\n\n{%- for label, value in (\n (_(\"Voucher Date\"), frappe.utils.formatdate(doc.voucher_date)),\n (_(\"Reference / Cheque No.\"), doc.cheque_no),\n (_(\"Reference / Cheque Date\"), frappe.utils.formatdate(doc.cheque_date))\n ) -%}\n <div class=\"row\">\n <div class=\"col-sm-4\"><label class=\"text-right\">{{ label }}</label></div>\n <div class=\"col-sm-8\">{{ value }}</div>\n </div>\n{%- endfor -%}\n\t<hr>\n\t<p>{{ _(\"This amount is in full / part settlement of the listed bills\") }}:</p>\n{%- for label, value in (\n (_(\"Amount\"), \"<strong>\" + (doc.total_amount or \"\") + \"</strong><br>\" + (doc.total_amount_in_words or \"\") + \"<br>\"),\n (_(\"References\"), doc.remark)\n ) -%}\n <div class=\"row\">\n <div class=\"col-sm-4\"><label class=\"text-right\">{{ label }}</label></div>\n <div class=\"col-sm-8\">{{ value }}</div>\n </div>\n {%- endfor -%}\n <hr>\n\t<div style=\"position: absolute; top: 14cm; left: 0cm;\">\n\t\tPrepared By</div>\n\t<div style=\"position: absolute; top: 14cm; left: 5.5cm;\">\n\t\tAuthorised Signatory</div>\n\t<div style=\"position: absolute; top: 14cm; left: 11cm;\">\n\t\tReceived Payment as Above</div>\n\t<div style=\"position: absolute; top: 16.4cm; left: 5.9cm;\">\n\t\t<strong>_____________</strong></div>\n\t<div style=\"position: absolute; top: 16.7cm; left: 6cm;\">\n\t\t<strong>A/C Payee</strong></div>\n\t<div style=\"position: absolute; top: 16.7cm; left: 5.9cm;\">\n\t\t<strong>_____________</strong></div>\n\t<div style=\"position: absolute; top: 16.9cm; left: 12cm;\">\n\t\t{{ frappe.utils.formatdate(doc.cheque_date) }}</div>\n\t<div style=\"position: absolute; top: 17.9cm; left: 1cm;\">\n\t\t{{ doc.pay_to_recd_from }}</div>\n\t<div style=\"position: absolute; top: 18.6cm; left: 1cm; width: 7cm;\">\n\t\t{{ doc.total_amount_in_words }}</div>\n\t<div style=\"position: absolute; top: 19.7cm; left: 12cm;\">\n\t\t{{ doc.total_amount }}</div>\n</div>",
|
||||
"html": "<div style=\"position: relative\">\n\n\t{%- from \"templates/print_formats/standard_macros.html\" import add_header -%}\n<div class=\"page-break\">\n {%- if not doc.get(\"print_heading\") and not doc.get(\"select_print_heading\") \n and doc.set(\"select_print_heading\", _(\"Payment Advice\")) -%}{%- endif -%}\n {{ add_header(0, 1, doc, letter_head, no_letterhead) }}\n\n{%- for label, value in (\n (_(\"Voucher Date\"), frappe.utils.formatdate(doc.voucher_date)),\n (_(\"Reference / Cheque No.\"), doc.cheque_no),\n (_(\"Reference / Cheque Date\"), frappe.utils.formatdate(doc.cheque_date))\n ) -%}\n <div class=\"row\">\n <div class=\"col-xs-4\"><label class=\"text-right\">{{ label }}</label></div>\n <div class=\"col-xs-8\">{{ value }}</div>\n </div>\n{%- endfor -%}\n\t<hr>\n\t<p>{{ _(\"This amount is in full / part settlement of the listed bills\") }}:</p>\n{%- for label, value in (\n (_(\"Amount\"), \"<strong>\" + (doc.total_amount or \"\") + \"</strong><br>\" + (doc.total_amount_in_words or \"\") + \"<br>\"),\n (_(\"References\"), doc.remark)\n ) -%}\n <div class=\"row\">\n <div class=\"col-xs-4\"><label class=\"text-right\">{{ label }}</label></div>\n <div class=\"col-xs-8\">{{ value }}</div>\n </div>\n {%- endfor -%}\n <hr>\n\t<div style=\"position: absolute; top: 14cm; left: 0cm;\">\n\t\tPrepared By</div>\n\t<div style=\"position: absolute; top: 14cm; left: 5.5cm;\">\n\t\tAuthorised Signatory</div>\n\t<div style=\"position: absolute; top: 14cm; left: 11cm;\">\n\t\tReceived Payment as Above</div>\n\t<div style=\"position: absolute; top: 16.4cm; left: 5.9cm;\">\n\t\t<strong>_____________</strong></div>\n\t<div style=\"position: absolute; top: 16.7cm; left: 6cm;\">\n\t\t<strong>A/C Payee</strong></div>\n\t<div style=\"position: absolute; top: 16.7cm; left: 5.9cm;\">\n\t\t<strong>_____________</strong></div>\n\t<div style=\"position: absolute; top: 16.9cm; left: 12cm;\">\n\t\t{{ frappe.utils.formatdate(doc.cheque_date) }}</div>\n\t<div style=\"position: absolute; top: 17.9cm; left: 1cm;\">\n\t\t{{ doc.pay_to_recd_from }}</div>\n\t<div style=\"position: absolute; top: 18.6cm; left: 1cm; width: 7cm;\">\n\t\t{{ doc.total_amount_in_words }}</div>\n\t<div style=\"position: absolute; top: 19.7cm; left: 12cm;\">\n\t\t{{ doc.total_amount }}</div>\n</div>",
|
||||
"idx": 1,
|
||||
"modified": "2014-09-09 03:27:13.708596",
|
||||
"modified": "2015-01-12 11:03:17.032512",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Cheque Printing Format",
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
"doc_type": "Journal Voucher",
|
||||
"docstatus": 0,
|
||||
"doctype": "Print Format",
|
||||
"html": "{%- from \"templates/print_formats/standard_macros.html\" import add_header -%}\n\n<div class=\"page-break\">\n {%- if not doc.get(\"print_heading\") and not doc.get(\"select_print_heading\") \n and doc.set(\"select_print_heading\", _(\"Credit Note\")) -%}{%- endif -%}\n {{ add_header(0, 1, doc, letter_head, no_letterhead) }}\n\n {%- for label, value in (\n (_(\"Credit To\"), doc.pay_to_recd_from),\n (_(\"Date\"), frappe.utils.formatdate(doc.voucher_date)),\n (_(\"Amount\"), \"<strong>\" + frappe.utils.cstr(doc.total_amount) + \"</strong><br>\" + (doc.total_amount_in_words or \"\") + \"<br>\"),\n (_(\"Remarks\"), doc.remark)\n ) -%}\n\n <div class=\"row\">\n <div class=\"col-sm-3\"><label class=\"text-right\">{{ label }}</label></div>\n <div class=\"col-sm-9\">{{ value }}</div>\n </div>\n\n {%- endfor -%}\n\n <hr>\n <br>\n <p class=\"strong\">\n {{ _(\"For\") }} {{ doc.company }},<br>\n <br>\n <br>\n <br>\n {{ _(\"Authorized Signatory\") }}\n </p>\n</div>\n\n\n",
|
||||
"html": "{%- from \"templates/print_formats/standard_macros.html\" import add_header -%}\n\n<div class=\"page-break\">\n {%- if not doc.get(\"print_heading\") and not doc.get(\"select_print_heading\") \n and doc.set(\"select_print_heading\", _(\"Credit Note\")) -%}{%- endif -%}\n {{ add_header(0, 1, doc, letter_head, no_letterhead) }}\n\n {%- for label, value in (\n (_(\"Credit To\"), doc.pay_to_recd_from),\n (_(\"Date\"), frappe.utils.formatdate(doc.voucher_date)),\n (_(\"Amount\"), \"<strong>\" + frappe.utils.cstr(doc.total_amount) + \"</strong><br>\" + (doc.total_amount_in_words or \"\") + \"<br>\"),\n (_(\"Remarks\"), doc.remark)\n ) -%}\n\n <div class=\"row\">\n <div class=\"col-xs-3\"><label class=\"text-right\">{{ label }}</label></div>\n <div class=\"col-xs-9\">{{ value }}</div>\n </div>\n\n {%- endfor -%}\n\n <hr>\n <br>\n <p class=\"strong\">\n {{ _(\"For\") }} {{ doc.company }},<br>\n <br>\n <br>\n <br>\n {{ _(\"Authorized Signatory\") }}\n </p>\n</div>\n\n\n",
|
||||
"idx": 2,
|
||||
"modified": "2014-10-17 17:20:02.740340",
|
||||
"modified": "2015-01-12 11:02:25.716825",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Credit Note",
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
{
|
||||
"creation": "2012-05-01 12:46:31",
|
||||
"doc_type": "Journal Voucher",
|
||||
"docstatus": 0,
|
||||
"doctype": "Print Format",
|
||||
"html": "{%- from \"templates/print_formats/standard_macros.html\" import add_header -%}\n<div class=\"page-break\">\n {%- if not doc.get(\"print_heading\") and not doc.get(\"select_print_heading\") \n and doc.set(\"select_print_heading\", _(\"Payment Receipt Note\")) -%}{%- endif -%}\n {{ add_header(0, 1, doc, letter_head, no_letterhead) }}\n\n {%- for label, value in (\n (_(\"Received On\"), frappe.utils.formatdate(doc.voucher_date)),\n (_(\"Received From\"), doc.pay_to_recd_from),\n (_(\"Amount\"), \"<strong>\" + doc.total_amount or 0 + \"</strong><br>\" + (doc.total_amount_in_words or \"\") + \"<br>\"),\n (_(\"Remarks\"), doc.remark)\n ) -%}\n <div class=\"row\">\n <div class=\"col-sm-3\"><label class=\"text-right\">{{ label }}</label></div>\n <div class=\"col-sm-9\">{{ value }}</div>\n </div>\n\n {%- endfor -%}\n\n <hr>\n <br>\n <p class=\"strong\">\n {{ _(\"For\") }} {{ doc.company }},<br>\n <br>\n <br>\n <br>\n {{ _(\"Authorized Signatory\") }}\n </p>\n</div>\n\n",
|
||||
"idx": 1,
|
||||
"modified": "2014-11-04 11:25:57.560873",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Payment Receipt Voucher",
|
||||
"owner": "Administrator",
|
||||
"print_format_type": "Server",
|
||||
"creation": "2012-05-01 12:46:31",
|
||||
"doc_type": "Journal Voucher",
|
||||
"docstatus": 0,
|
||||
"doctype": "Print Format",
|
||||
"html": "{%- from \"templates/print_formats/standard_macros.html\" import add_header -%}\n<div class=\"page-break\">\n {%- if not doc.get(\"print_heading\") and not doc.get(\"select_print_heading\") \n and doc.set(\"select_print_heading\", _(\"Payment Receipt Note\")) -%}{%- endif -%}\n {{ add_header(0, 1, doc, letter_head, no_letterhead) }}\n\n {%- for label, value in (\n (_(\"Received On\"), frappe.utils.formatdate(doc.voucher_date)),\n (_(\"Received From\"), doc.pay_to_recd_from),\n (_(\"Amount\"), \"<strong>\" + frappe.utils.cstr(doc.total_amount or 0) + \"</strong><br>\" + (doc.total_amount_in_words or \"\") + \"<br>\"),\n (_(\"Remarks\"), doc.remark)\n ) -%}\n <div class=\"row\">\n <div class=\"col-xs-3\"><label class=\"text-right\">{{ label }}</label></div>\n <div class=\"col-xs-9\">{{ value }}</div>\n </div>\n\n {%- endfor -%}\n\n <hr>\n <br>\n <p class=\"strong\">\n {{ _(\"For\") }} {{ doc.company }},<br>\n <br>\n <br>\n <br>\n {{ _(\"Authorized Signatory\") }}\n </p>\n</div>\n\n",
|
||||
"idx": 1,
|
||||
"modified": "2015-01-16 11:03:22.893209",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Payment Receipt Voucher",
|
||||
"owner": "Administrator",
|
||||
"print_format_type": "Server",
|
||||
"standard": "Yes"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
"doc_type": "Sales Invoice",
|
||||
"docstatus": 0,
|
||||
"doctype": "Print Format",
|
||||
"html": "<style>\n\t.print-format table, .print-format tr, \n\t.print-format td, .print-format div, .print-format p {\n\t\tfont-family: Monospace;\n\t\tline-height: 200%;\n\t\tvertical-align: middle;\n\t}\n\t@media screen {\n\t\t.print-format {\n\t\t\twidth: 4in;\n\t\t\tpadding: 0.25in;\n\t\t\tmin-height: 8in;\n\t\t}\n\t}\n</style>\n\n<p class=\"text-center\">\n\t{{ doc.company }}<br>\n\t{{ doc.select_print_heading or _(\"Invoice\") }}<br>\n</p>\n<p>\n\t<b>{{ _(\"Receipt No\") }}:</b> {{ doc.name }}<br>\n\t<b>{{ _(\"Date\") }}:</b> {{ doc.get_formatted(\"posting_date\") }}<br>\n\t<b>{{ _(\"Customer\") }}:</b> {{ doc.customer_name }}\n</p>\n\n<hr>\n<table class=\"table table-condensed cart no-border\">\n\t<thead>\n\t\t<tr>\n\t\t\t<th width=\"60%\">{{ _(\"Item\") }}</b></th>\n\t\t\t<th width=\"10%\" class=\"text-right\">{{ _(\"Qty\") }}</th>\n\t\t\t<th width=\"30%\" class=\"text-right\">{{ _(\"Rate\") }}</th>\n\t\t</tr>\n\t</thead>\n\t<tbody>\n\t\t{%- for item in doc.entries -%}\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\t{{ item.item_code }}\n\t\t\t\t{%- if item.item_name != item.item_code -%}\n\t\t\t\t\t<br>{{ item.item_name }}{%- endif -%}\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">{{ item.qty }}</td>\n\t\t\t<td class=\"text-right\">{{ item.amount }}</td>\n\t\t</tr>\n\t\t{%- endfor -%}\n\t</tbody>\n</table>\n<table class=\"table table-condensed no-border\">\n\t<tbody>\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 70%\">\n\t\t\t\t{{ _(\"Net Total\") }}\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ doc.get_formatted(\"net_total_export\") }}\n\t\t\t</td>\n\t\t</tr>\n\t\t{%- for row in doc.other_charges -%}\n\t\t{%- if not row.included_in_print_rate -%}\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 70%\">\n\t\t\t\t{{ row.description }}\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ row.get_formatted(\"tax_amount\", doc) }}\n\t\t\t</td>\n\t\t</tr>\n\t\t{%- endif -%}\n\t\t{%- endfor -%}\n\t\t{%- if doc.discount_amount -%}\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 70%\">\n\t\t\t\t{{ _(\"Discount\") }}\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ doc.get_formatted(\"discount_amount\") }}\n\t\t\t</td>\n\t\t</tr>\n\t\t{%- endif -%}\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 70%\">\n\t\t\t\t<b>{{ _(\"Grand Total\") }}</b>\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ doc.get_formatted(\"grand_total_export\") }}\n\t\t\t</td>\n\t\t</tr>\n\t</tbody>\n</table>\n{% if doc.get(\"other_charges\", filters={\"included_in_print_rate\": 1}) %}\n<hr>\n<p><b>Taxes Included:</b></p>\n<table class=\"table table-condensed no-border\">\n\t<tbody>\n\t\t{%- for row in doc.other_charges -%}\n\t\t{%- if row.included_in_print_rate -%}\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 70%\">\n\t\t\t\t{{ row.description }}\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ row.get_formatted(\"tax_amount\", doc) }}\n\t\t\t</td>\n\t\t<tr>\n\t\t{%- endif -%}\n\t\t{%- endfor -%}\n\t</tbody>\n</table>\n{%- endif -%}\n<hr>\n<p>{{ doc.terms or \"\" }}</p>\n<p class=\"text-center\">{{ _(\"Thank you, please visit again.\") }}</p>",
|
||||
"html": "<style>\n\t.print-format table, .print-format tr, \n\t.print-format td, .print-format div, .print-format p {\n\t\tfont-family: Monospace;\n\t\tline-height: 200%;\n\t\tvertical-align: middle;\n\t}\n\t@media screen {\n\t\t.print-format {\n\t\t\twidth: 4in;\n\t\t\tpadding: 0.25in;\n\t\t\tmin-height: 8in;\n\t\t}\n\t}\n</style>\n\n<p class=\"text-center\">\n\t{{ doc.company }}<br>\n\t{{ doc.select_print_heading or _(\"Invoice\") }}<br>\n</p>\n<p>\n\t<b>{{ _(\"Receipt No\") }}:</b> {{ doc.name }}<br>\n\t<b>{{ _(\"Date\") }}:</b> {{ doc.get_formatted(\"posting_date\") }}<br>\n\t<b>{{ _(\"Customer\") }}:</b> {{ doc.customer_name }}\n</p>\n\n<hr>\n<table class=\"table table-condensed cart no-border\">\n\t<thead>\n\t\t<tr>\n\t\t\t<th width=\"60%\">{{ _(\"Item\") }}</b></th>\n\t\t\t<th width=\"10%\" class=\"text-right\">{{ _(\"Qty\") }}</th>\n\t\t\t<th width=\"30%\" class=\"text-right\">{{ _(\"Rate\") }}</th>\n\t\t</tr>\n\t</thead>\n\t<tbody>\n\t\t{%- for item in doc.entries -%}\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\t{{ item.item_code }}\n\t\t\t\t{%- if item.item_name != item.item_code -%}\n\t\t\t\t\t<br>{{ item.item_name }}{%- endif -%}\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">{{ item.qty }}</td>\n\t\t\t<td class=\"text-right\">{{ item.amount }}</td>\n\t\t</tr>\n\t\t{%- endfor -%}\n\t</tbody>\n</table>\n<table class=\"table table-condensed no-border\">\n\t<tbody>\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 70%\">\n\t\t\t\t{{ _(\"Net Total\") }}\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ doc.get_formatted(\"net_total_export\") }}\n\t\t\t</td>\n\t\t</tr>\n\t\t{%- for row in doc.other_charges -%}\n\t\t{%- if not row.included_in_print_rate -%}\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 70%\">\n\t\t\t\t{{ row.description }}\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ row.get_formatted(\"tax_amount\", doc) }}\n\t\t\t</td>\n\t\t</tr>\n\t\t{%- endif -%}\n\t\t{%- endfor -%}\n\t\t{%- if doc.discount_amount -%}\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 70%\">\n\t\t\t\t{{ _(\"Discount\") }}\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ doc.get_formatted(\"discount_amount\") }}\n\t\t\t</td>\n\t\t</tr>\n\t\t{%- endif -%}\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 70%\">\n\t\t\t\t<b>{{ _(\"Grand Total\") }}</b>\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ doc.get_formatted(\"grand_total_export\") }}\n\t\t\t</td>\n\t\t</tr>\n\t</tbody>\n</table>\n{% if doc.get(\"other_charges\", filters={\"included_in_print_rate\": 1}) %}\n<hr>\n<p><b>Taxes Included:</b></p>\n<table class=\"table table-condensed no-border\">\n\t<tbody>\n\t\t{%- for row in doc.other_charges -%}\n\t\t{%- if row.included_in_print_rate -%}\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 70%\">\n\t\t\t\t{{ row.description }}\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ row.get_formatted(\"tax_amount_after_discount_amount\", doc) }}\n\t\t\t</td>\n\t\t<tr>\n\t\t{%- endif -%}\n\t\t{%- endfor -%}\n\t</tbody>\n</table>\n{%- endif -%}\n<hr>\n<p>{{ doc.terms or \"\" }}</p>\n<p class=\"text-center\">{{ _(\"Thank you, please visit again.\") }}</p>",
|
||||
"idx": 1,
|
||||
"modified": "2014-07-22 02:08:26.603223",
|
||||
"modified": "2014-12-10 12:37:10.854370",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "POS Invoice",
|
||||
|
||||
@@ -13,17 +13,17 @@ class AccountsReceivableReport(object):
|
||||
self.age_as_on = getdate(nowdate()) \
|
||||
if self.filters.report_date > getdate(nowdate()) \
|
||||
else self.filters.report_date
|
||||
|
||||
|
||||
def run(self):
|
||||
customer_naming_by = frappe.db.get_value("Selling Settings", None, "cust_master_name")
|
||||
return self.get_columns(customer_naming_by), self.get_data(customer_naming_by)
|
||||
|
||||
|
||||
def get_columns(self, customer_naming_by):
|
||||
columns = [
|
||||
_("Posting Date") + ":Date:80", _("Account") + ":Link/Account:150",
|
||||
_("Voucher Type") + "::110", _("Voucher No") + ":Dynamic Link/Voucher Type:120",
|
||||
_("Due Date") + ":Date:80",
|
||||
_("Invoiced Amount") + ":Currency:100", _("Payment Received") + ":Currency:100",
|
||||
_("Due Date") + ":Date:80",
|
||||
_("Invoiced Amount") + ":Currency:100", _("Payment Received") + ":Currency:100",
|
||||
_("Outstanding Amount") + ":Currency:100", _("Age") + ":Int:50", "0-30:Currency:100",
|
||||
"30-60:Currency:100", "60-90:Currency:100", _("90-Above") + ":Currency:100",
|
||||
_("Customer") + ":Link/Customer:200"
|
||||
@@ -69,27 +69,27 @@ class AccountsReceivableReport(object):
|
||||
# returns a distinct list
|
||||
return list(set([(e.voucher_type, e.voucher_no) for e in self.get_gl_entries()
|
||||
if getdate(e.posting_date) > report_date]))
|
||||
|
||||
|
||||
def get_entries_till(self, report_date):
|
||||
# returns a generator
|
||||
return (e for e in self.get_gl_entries()
|
||||
return (e for e in self.get_gl_entries()
|
||||
if getdate(e.posting_date) <= report_date)
|
||||
|
||||
|
||||
def is_receivable(self, gle, future_vouchers):
|
||||
return (
|
||||
# advance
|
||||
(not gle.against_voucher) or
|
||||
(not gle.against_voucher) or
|
||||
|
||||
# against sales order
|
||||
(gle.against_voucher_type == "Sales Order") or
|
||||
|
||||
|
||||
# sales invoice
|
||||
(gle.against_voucher==gle.voucher_no and gle.debit > 0) or
|
||||
|
||||
(gle.against_voucher==gle.voucher_no and gle.debit > 0) or
|
||||
|
||||
# entries adjusted with future vouchers
|
||||
((gle.against_voucher_type, gle.against_voucher) in future_vouchers)
|
||||
)
|
||||
|
||||
|
||||
def get_outstanding_amount(self, gle, report_date):
|
||||
payment_received = 0.0
|
||||
for e in self.get_gl_entries_for(gle.account, gle.voucher_type, gle.voucher_no):
|
||||
@@ -97,7 +97,7 @@ class AccountsReceivableReport(object):
|
||||
payment_received += (flt(e.credit) - flt(e.debit))
|
||||
|
||||
return flt(gle.debit) - flt(gle.credit) - payment_received
|
||||
|
||||
|
||||
def get_customer(self, account):
|
||||
return self.get_account_map().get(account, {}).get("customer") or ""
|
||||
|
||||
@@ -106,25 +106,25 @@ class AccountsReceivableReport(object):
|
||||
|
||||
def get_territory(self, account):
|
||||
return self.get_account_map().get(account, {}).get("territory") or ""
|
||||
|
||||
|
||||
def get_account_map(self):
|
||||
if not hasattr(self, "account_map"):
|
||||
self.account_map = dict(((r.name, r) for r in frappe.db.sql("""select
|
||||
self.account_map = dict(((r.name, r) for r in frappe.db.sql("""select
|
||||
acc.name, cust.name as customer, cust.customer_name, cust.territory
|
||||
from `tabAccount` acc left join `tabCustomer` cust
|
||||
from `tabAccount` acc left join `tabCustomer` cust
|
||||
on cust.name=acc.master_name where acc.master_type="Customer" """, as_dict=True)))
|
||||
|
||||
|
||||
return self.account_map
|
||||
|
||||
|
||||
def get_due_date(self, gle):
|
||||
if not hasattr(self, "invoice_due_date_map"):
|
||||
# TODO can be restricted to posting date
|
||||
self.invoice_due_date_map = dict(frappe.db.sql("""select name, due_date
|
||||
from `tabSales Invoice` where docstatus=1"""))
|
||||
|
||||
|
||||
return gle.voucher_type == "Sales Invoice" \
|
||||
and self.invoice_due_date_map.get(gle.voucher_no) or ""
|
||||
|
||||
|
||||
def get_gl_entries(self):
|
||||
if not hasattr(self, "gl_entries"):
|
||||
conditions, values = self.prepare_conditions()
|
||||
@@ -132,15 +132,15 @@ class AccountsReceivableReport(object):
|
||||
where docstatus < 2 {0} order by posting_date, account""".format(conditions),
|
||||
values, as_dict=True)
|
||||
return self.gl_entries
|
||||
|
||||
|
||||
def prepare_conditions(self):
|
||||
conditions = [""]
|
||||
values = {}
|
||||
|
||||
|
||||
if self.filters.company:
|
||||
conditions.append("company=%(company)s")
|
||||
values["company"] = self.filters.company
|
||||
|
||||
|
||||
if self.filters.account:
|
||||
conditions.append("account=%(account)s")
|
||||
values["account"] = self.filters.account
|
||||
@@ -149,11 +149,11 @@ class AccountsReceivableReport(object):
|
||||
if not account_map:
|
||||
frappe.throw(_("No Customer Accounts found."))
|
||||
else:
|
||||
accounts_list = ['"{0}"'.format(ac) for ac in account_map]
|
||||
accounts_list = ["'{0}'".format(frappe.db.escape(ac)) for ac in account_map]
|
||||
conditions.append("account in ({0})".format(", ".join(accounts_list)))
|
||||
|
||||
|
||||
return " and ".join(conditions), values
|
||||
|
||||
|
||||
def get_gl_entries_for(self, account, against_voucher_type, against_voucher):
|
||||
if not hasattr(self, "gl_entries_map"):
|
||||
self.gl_entries_map = {}
|
||||
@@ -163,7 +163,7 @@ class AccountsReceivableReport(object):
|
||||
.setdefault(gle.against_voucher_type, {})\
|
||||
.setdefault(gle.against_voucher, [])\
|
||||
.append(gle)
|
||||
|
||||
|
||||
return self.gl_entries_map.get(account, {})\
|
||||
.get(against_voucher_type, {})\
|
||||
.get(against_voucher, [])
|
||||
@@ -176,15 +176,15 @@ def get_ageing_data(age_as_on, entry_date, outstanding_amount):
|
||||
outstanding_range = [0.0, 0.0, 0.0, 0.0]
|
||||
if not (age_as_on and entry_date):
|
||||
return [0] + outstanding_range
|
||||
|
||||
|
||||
age = (getdate(age_as_on) - getdate(entry_date)).days or 0
|
||||
index = None
|
||||
for i, days in enumerate([30, 60, 90]):
|
||||
if age <= days:
|
||||
index = i
|
||||
break
|
||||
|
||||
|
||||
if index is None: index = 3
|
||||
outstanding_range[index] = outstanding_amount
|
||||
|
||||
|
||||
return [age] + outstanding_range
|
||||
|
||||
@@ -28,7 +28,7 @@ def get_fiscal_years(date=None, fiscal_year=None, label="Date", verbose=1):
|
||||
from `tabFiscal Year` where %s order by year_start_date desc""" % cond)
|
||||
|
||||
if not fy:
|
||||
error_msg = _("""{0} {1} not in any Fiscal Year""").format(label, formatdate(date))
|
||||
error_msg = _("""{0} {1} not in any Fiscal Year. For more details check {2}.""").format(label, formatdate(date), "https://erpnext.com/kb/accounts/fiscal-year-error")
|
||||
if verbose: frappe.msgprint(error_msg)
|
||||
raise FiscalYearError, error_msg
|
||||
|
||||
|
||||
@@ -71,7 +71,7 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({
|
||||
},
|
||||
|
||||
contact_person: function() {
|
||||
this.supplier_address();
|
||||
erpnext.utils.get_contact_details(this.frm);
|
||||
},
|
||||
|
||||
buying_price_list: function() {
|
||||
@@ -211,7 +211,8 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({
|
||||
var tax_count = this.frm.tax_doclist.length;
|
||||
this.frm.doc.grand_total = flt(tax_count ?
|
||||
this.frm.tax_doclist[tax_count - 1].total : this.frm.doc.net_total);
|
||||
this.frm.doc.grand_total_import = flt(this.frm.doc.grand_total / this.frm.doc.conversion_rate);
|
||||
this.frm.doc.grand_total_import = flt(tax_count ?
|
||||
flt(this.frm.doc.grand_total / this.frm.doc.conversion_rate) : this.frm.doc.net_total_import);
|
||||
|
||||
this.frm.doc.total_tax = flt(this.frm.doc.grand_total - this.frm.doc.net_total,
|
||||
precision("total_tax"));
|
||||
|
||||
@@ -685,7 +685,8 @@
|
||||
"label": "Recurring Type",
|
||||
"no_copy": 1,
|
||||
"options": "Monthly\nQuarterly\nHalf-yearly\nYearly",
|
||||
"permlevel": 0
|
||||
"permlevel": 0,
|
||||
"print_hide": 1
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 1,
|
||||
@@ -695,7 +696,8 @@
|
||||
"fieldtype": "Date",
|
||||
"label": "From Date",
|
||||
"no_copy": 1,
|
||||
"permlevel": 0
|
||||
"permlevel": 0,
|
||||
"print_hide": 1
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 1,
|
||||
@@ -705,7 +707,8 @@
|
||||
"fieldtype": "Date",
|
||||
"label": "To Date",
|
||||
"no_copy": 1,
|
||||
"permlevel": 0
|
||||
"permlevel": 0,
|
||||
"print_hide": 1
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 1,
|
||||
@@ -772,7 +775,7 @@
|
||||
"icon": "icon-file-text",
|
||||
"idx": 1,
|
||||
"is_submittable": 1,
|
||||
"modified": "2014-10-08 14:23:29.718779",
|
||||
"modified": "2014-11-27 17:27:38.839440",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Buying",
|
||||
"name": "Purchase Order",
|
||||
|
||||
@@ -247,7 +247,7 @@ def make_purchase_invoice(source_name, target_doc=None):
|
||||
def update_item(obj, target, source_parent):
|
||||
target.amount = flt(obj.amount) - flt(obj.billed_amt)
|
||||
target.base_amount = target.amount * flt(source_parent.conversion_rate)
|
||||
target.qty = target.amount / flt(obj.rate) if flt(obj.rate) else flt(obj.qty)
|
||||
target.qty = target.amount / flt(obj.rate) if (flt(obj.rate) and flt(obj.billed_amt)) else flt(obj.qty)
|
||||
|
||||
doc = get_mapped_doc("Purchase Order", source_name, {
|
||||
"Purchase Order": {
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
|
||||
// License: GNU General Public License v3. See license.txt
|
||||
|
||||
{% include 'setup/doctype/contact_control/contact_control.js' %};
|
||||
|
||||
cur_frm.cscript.refresh = function(doc, dt, dn) {
|
||||
cur_frm.cscript.make_dashboard(doc);
|
||||
|
||||
@@ -17,9 +15,8 @@ cur_frm.cscript.refresh = function(doc, dt, dn) {
|
||||
}
|
||||
else{
|
||||
unhide_field(['address_html','contact_html']);
|
||||
// make lists
|
||||
cur_frm.cscript.make_address(doc,dt,dn);
|
||||
cur_frm.cscript.make_contact(doc,dt,dn);
|
||||
|
||||
erpnext.utils.render_address_and_contact(cur_frm)
|
||||
|
||||
cur_frm.communication_view = new frappe.views.CommunicationList({
|
||||
parent: cur_frm.fields_dict.communication_html.wrapper,
|
||||
@@ -60,45 +57,6 @@ cur_frm.cscript.make_dashboard = function(doc) {
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
cur_frm.cscript.make_address = function() {
|
||||
if(!cur_frm.address_list) {
|
||||
cur_frm.address_list = new frappe.ui.Listing({
|
||||
parent: cur_frm.fields_dict['address_html'].wrapper,
|
||||
page_length: 5,
|
||||
new_doctype: "Address",
|
||||
get_query: function() {
|
||||
return "select name, address_type, address_line1, address_line2, city, state, country, pincode, fax, email_id, phone, is_primary_address, is_shipping_address from tabAddress where supplier='" +
|
||||
cur_frm.doc.name.replace(/'/g, "\\'") + "' and docstatus != 2 order by is_primary_address desc"
|
||||
},
|
||||
as_dict: 1,
|
||||
no_results_message: __('No addresses created'),
|
||||
render_row: cur_frm.cscript.render_address_row,
|
||||
});
|
||||
// note: render_address_row is defined in contact_control.js
|
||||
}
|
||||
cur_frm.address_list.run();
|
||||
}
|
||||
|
||||
cur_frm.cscript.make_contact = function() {
|
||||
if(!cur_frm.contact_list) {
|
||||
cur_frm.contact_list = new frappe.ui.Listing({
|
||||
parent: cur_frm.fields_dict['contact_html'].wrapper,
|
||||
page_length: 5,
|
||||
new_doctype: "Contact",
|
||||
get_query: function() {
|
||||
return "select name, first_name, last_name, email_id, phone, mobile_no, department, designation, is_primary_contact from tabContact where supplier='" +
|
||||
cur_frm.doc.name.replace(/'/g, "\\'") + "' and docstatus != 2 order by is_primary_contact desc"
|
||||
},
|
||||
as_dict: 1,
|
||||
no_results_message: __('No contacts created'),
|
||||
render_row: cur_frm.cscript.render_contact_row,
|
||||
});
|
||||
// note: render_contact_row is defined in contact_control.js
|
||||
}
|
||||
cur_frm.contact_list.run();
|
||||
}
|
||||
|
||||
cur_frm.fields_dict['default_price_list'].get_query = function(doc, cdt, cdn) {
|
||||
return{
|
||||
filters:{'buying': 1}
|
||||
|
||||
@@ -9,10 +9,14 @@ from frappe.utils import cint
|
||||
from frappe import msgprint, _
|
||||
from frappe.model.naming import make_autoname
|
||||
from erpnext.accounts.party import create_party_account
|
||||
from erpnext.utilities.address_and_contact import load_address_and_contact
|
||||
|
||||
from erpnext.utilities.transaction_base import TransactionBase
|
||||
|
||||
class Supplier(TransactionBase):
|
||||
def onload(self):
|
||||
"""Load address and contacts in `__onload`"""
|
||||
load_address_and_contact(self, "supplier")
|
||||
|
||||
def autoname(self):
|
||||
supp_master_name = frappe.defaults.get_global_default('supp_master_name')
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -119,6 +119,10 @@ class AccountsController(TransactionBase):
|
||||
item.get(fieldname) is None and value is not None:
|
||||
item.set(fieldname, value)
|
||||
|
||||
if fieldname == "cost_center" and item.meta.get_field("cost_center") \
|
||||
and not item.get("cost_center") and value is not None:
|
||||
item.set(fieldname, value)
|
||||
|
||||
if ret.get("pricing_rule"):
|
||||
for field in ["base_price_list_rate", "price_list_rate",
|
||||
"discount_percentage", "base_rate", "rate"]:
|
||||
@@ -291,7 +295,7 @@ class AccountsController(TransactionBase):
|
||||
self.precision("tax_amount", tax))
|
||||
|
||||
def adjust_discount_amount_loss(self, tax):
|
||||
discount_amount_loss = self.grand_total - flt(self.discount_amount) - tax.total
|
||||
discount_amount_loss = self.grand_total - flt(self.base_discount_amount) - tax.total
|
||||
tax.tax_amount_after_discount_amount = flt(tax.tax_amount_after_discount_amount +
|
||||
discount_amount_loss, self.precision("tax_amount", tax))
|
||||
tax.total = flt(tax.total + discount_amount_loss, self.precision("total", tax))
|
||||
@@ -437,7 +441,7 @@ class AccountsController(TransactionBase):
|
||||
for order, jv_list in order_jv_map.items():
|
||||
for jv in jv_list:
|
||||
if not advance_jv_against_si or jv not in advance_jv_against_si:
|
||||
frappe.throw(_("Journal Voucher {0} is linked against Order {1}, hence it must be fetched as advance in Invoice as well.")
|
||||
frappe.msgprint(_("Journal Voucher {0} is linked against Order {1}, check if it should be pulled as advance in this invoice.")
|
||||
.format(jv, order))
|
||||
|
||||
|
||||
@@ -467,7 +471,7 @@ class AccountsController(TransactionBase):
|
||||
max_allowed_amt = flt(ref_amt * (100 + tolerance) / 100)
|
||||
|
||||
if total_billed_amt - max_allowed_amt > 0.01:
|
||||
frappe.throw(_("Cannot overbill for Item {0} in row {0} more than {1}. To allow overbilling, please set in Stock Settings").format(item.item_code, item.idx, max_allowed_amt))
|
||||
frappe.throw(_("Cannot overbill for Item {0} in row {1} more than {2}. To allow overbilling, please set in Stock Settings").format(item.item_code, item.idx, max_allowed_amt))
|
||||
|
||||
def get_company_default(self, fieldname):
|
||||
from erpnext.accounts.utils import get_company_default
|
||||
|
||||
@@ -111,7 +111,8 @@ class BuyingController(StockController):
|
||||
|
||||
def calculate_totals(self):
|
||||
self.grand_total = flt(self.tax_doclist[-1].total if self.tax_doclist else self.net_total)
|
||||
self.grand_total_import = flt(self.grand_total / self.conversion_rate)
|
||||
self.grand_total_import = flt(self.grand_total / self.conversion_rate) \
|
||||
if self.tax_doclist else self.net_total_import
|
||||
|
||||
self.total_tax = flt(self.grand_total - self.net_total, self.precision("total_tax"))
|
||||
|
||||
|
||||
@@ -124,10 +124,7 @@ def send_notification(new_rv):
|
||||
frappe.sendmail(new_rv.notification_email_address,
|
||||
subject= _("New {0}: #{1}").format(new_rv.doctype, new_rv.name),
|
||||
message = _("Please find attached {0} #{1}").format(new_rv.doctype, new_rv.name),
|
||||
attachments = [{
|
||||
"fname": new_rv.name + ".pdf",
|
||||
"fcontent": frappe.get_print_format(new_rv.doctype, new_rv.name, as_pdf=True)
|
||||
}])
|
||||
attachments = [frappe.attach_print(new_rv.doctype, new_rv.name, file_name=new_rv.name)])
|
||||
|
||||
def notify_errors(doc, doctype, party, owner):
|
||||
from frappe.utils.user import get_system_managers
|
||||
|
||||
@@ -233,16 +233,20 @@ class SellingController(StockController):
|
||||
|
||||
def apply_discount_amount(self):
|
||||
if self.discount_amount:
|
||||
self.base_discount_amount = flt(self.discount_amount * self.conversion_rate, self.precision("base_discount_amount"))
|
||||
|
||||
grand_total_for_discount_amount = self.get_grand_total_for_discount_amount()
|
||||
|
||||
if grand_total_for_discount_amount:
|
||||
# calculate item amount after Discount Amount
|
||||
for item in self.item_doclist:
|
||||
distributed_amount = flt(self.discount_amount) * item.base_amount / grand_total_for_discount_amount
|
||||
distributed_amount = flt(self.base_discount_amount) * item.base_amount / grand_total_for_discount_amount
|
||||
item.base_amount = flt(item.base_amount - distributed_amount, self.precision("base_amount", item))
|
||||
|
||||
self.discount_amount_applied = True
|
||||
self._calculate_taxes_and_totals()
|
||||
else:
|
||||
self.base_discount_amount = 0
|
||||
|
||||
def get_grand_total_for_discount_amount(self):
|
||||
actual_taxes_dict = {}
|
||||
|
||||
@@ -167,7 +167,7 @@ class StockController(AccountsController):
|
||||
else:
|
||||
is_expense_account = frappe.db.get_value("Account",
|
||||
item.get("expense_account"), "report_type")=="Profit and Loss"
|
||||
if self.doctype not in ("Purchase Receipt", "Stock Reconciliation") and not is_expense_account:
|
||||
if self.doctype not in ("Purchase Receipt", "Stock Reconciliation", "Stock Entry") and not is_expense_account:
|
||||
frappe.throw(_("Expense / Difference account ({0}) must be a 'Profit or Loss' account")
|
||||
.format(item.get("expense_account")))
|
||||
if is_expense_account and not item.get("cost_center"):
|
||||
@@ -197,9 +197,9 @@ class StockController(AccountsController):
|
||||
sl_dict.update(args)
|
||||
return sl_dict
|
||||
|
||||
def make_sl_entries(self, sl_entries, is_amended=None):
|
||||
def make_sl_entries(self, sl_entries, is_amended=None, allow_negative_stock=False):
|
||||
from erpnext.stock.stock_ledger import make_sl_entries
|
||||
make_sl_entries(sl_entries, is_amended)
|
||||
make_sl_entries(sl_entries, is_amended, allow_negative_stock)
|
||||
|
||||
def make_gl_entries_on_cancel(self):
|
||||
if frappe.db.sql("""select name from `tabGL Entry` where voucher_type=%s
|
||||
@@ -245,7 +245,7 @@ def compare_existing_and_expected_gle(existing_gle, expected_gle):
|
||||
for entry in expected_gle:
|
||||
for e in existing_gle:
|
||||
if entry.account==e.account and entry.against_account==e.against_account \
|
||||
and entry.cost_center==e.cost_center \
|
||||
and (not entry.cost_center or not e.cost_center or entry.cost_center==e.cost_center) \
|
||||
and (entry.debit != e.debit or entry.credit != e.credit):
|
||||
matched = False
|
||||
break
|
||||
|
||||
@@ -4,7 +4,7 @@ app_publisher = "Web Notes Technologies Pvt. Ltd. and Contributors"
|
||||
app_description = "Open Source Enterprise Resource Planning for Small and Midsized Organizations"
|
||||
app_icon = "icon-th"
|
||||
app_color = "#e74c3c"
|
||||
app_version = "4.11.2"
|
||||
app_version = "4.20.1"
|
||||
|
||||
error_report_email = "support@erpnext.com"
|
||||
|
||||
|
||||
@@ -1,9 +1,21 @@
|
||||
{
|
||||
"autoname": "EXP.######",
|
||||
"autoname": "naming_series:",
|
||||
"creation": "2013-01-10 16:34:14",
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"fields": [
|
||||
{
|
||||
"default": "EXP",
|
||||
"fieldname": "naming_series",
|
||||
"fieldtype": "Select",
|
||||
"label": "Series",
|
||||
"no_copy": 1,
|
||||
"options": "EXP",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"default": "Draft",
|
||||
"depends_on": "eval:!doc.__islocal",
|
||||
@@ -190,7 +202,7 @@
|
||||
"icon": "icon-money",
|
||||
"idx": 1,
|
||||
"is_submittable": 1,
|
||||
"modified": "2014-08-27 07:08:48.454580",
|
||||
"modified": "2014-11-24 18:25:53.038826",
|
||||
"modified_by": "Administrator",
|
||||
"module": "HR",
|
||||
"name": "Expense Claim",
|
||||
|
||||
@@ -33,7 +33,7 @@ cur_frm.cscript.refresh = function(doc, dt, dn) {
|
||||
cur_frm.set_intro(__("You are the Leave Approver for this record. Please Update the 'Status' and Save"));
|
||||
cur_frm.toggle_enable("status", true);
|
||||
} else {
|
||||
cur_frm.set_intro(__("This Leave Application is pending approval. Only the Leave Apporver can update status."))
|
||||
cur_frm.set_intro(__("This Leave Application is pending approval. Only the Leave Approver can update status."))
|
||||
cur_frm.toggle_enable("status", false);
|
||||
if(!doc.__islocal) {
|
||||
cur_frm.frm_head.appframe.set_title_right("");
|
||||
@@ -118,3 +118,18 @@ cur_frm.cscript.calculate_total_days = function(doc, dt, dn) {
|
||||
}
|
||||
|
||||
cur_frm.fields_dict.employee.get_query = erpnext.queries.employee;
|
||||
|
||||
frappe.ui.form.on("Leave Application", "leave_approver", function(frm) {
|
||||
frappe.call({
|
||||
"method": "frappe.client.get",
|
||||
args: {
|
||||
doctype: "User",
|
||||
name: frm.doc.leave_approver
|
||||
},
|
||||
callback: function (data) {
|
||||
frappe.model.set_value(frm.doctype, frm.docname, "leave_approver_name",
|
||||
data.message.first_name
|
||||
+ (data.message.last_name ? (" " + data.message.last_name) : ""))
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
@@ -24,6 +24,13 @@
|
||||
"options": "User",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "leave_approver_name",
|
||||
"fieldtype": "Read Only",
|
||||
"label": "Leave Approver Name",
|
||||
"permlevel": 0,
|
||||
"precision": ""
|
||||
},
|
||||
{
|
||||
"fieldname": "leave_type",
|
||||
"fieldtype": "Link",
|
||||
@@ -184,7 +191,7 @@
|
||||
"idx": 1,
|
||||
"is_submittable": 1,
|
||||
"max_attachments": 3,
|
||||
"modified": "2014-09-09 05:35:31.531651",
|
||||
"modified": "2014-12-09 16:33:29.626849",
|
||||
"modified_by": "Administrator",
|
||||
"module": "HR",
|
||||
"name": "Leave Application",
|
||||
|
||||
@@ -203,13 +203,15 @@ class LeaveApplication(Document):
|
||||
def get_holidays(leave_app):
|
||||
tot_hol = frappe.db.sql("""select count(*) from `tabHoliday` h1, `tabHoliday List` h2, `tabEmployee` e1
|
||||
where e1.name = %s and h1.parent = h2.name and e1.holiday_list = h2.name
|
||||
and h1.holiday_date between %s and %s""", (leave_app.employee, leave_app.from_date, leave_app.to_date))
|
||||
and h1.holiday_date between %s and %s""", (leave_app.employee, leave_app.from_date,
|
||||
leave_app.to_date))[0][0]
|
||||
# below line is needed. If an employee hasn't been assigned with any holiday list then above will return 0 rows.
|
||||
if not tot_hol:
|
||||
tot_hol = frappe.db.sql("""select count(*) from `tabHoliday` h1, `tabHoliday List` h2
|
||||
where h1.parent = h2.name and h1.holiday_date between %s and %s
|
||||
and ifnull(h2.is_default,0) = 1 and h2.fiscal_year = %s""",
|
||||
(leave_app.from_date, leave_app.to_date, leave_app.fiscal_year))
|
||||
return tot_hol and flt(tot_hol[0][0]) or 0
|
||||
(leave_app.from_date, leave_app.to_date, leave_app.fiscal_year))[0][0]
|
||||
return tot_hol
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_total_leave_days(leave_app):
|
||||
|
||||
@@ -156,7 +156,7 @@ class SalarySlip(TransactionBase):
|
||||
/ cint(self.total_days_in_month), 2)
|
||||
elif not self.payment_days:
|
||||
d.e_modified_amount = 0
|
||||
else:
|
||||
elif not d.e_modified_amount:
|
||||
d.e_modified_amount = d.e_amount
|
||||
self.gross_pay += flt(d.e_modified_amount)
|
||||
|
||||
@@ -168,7 +168,7 @@ class SalarySlip(TransactionBase):
|
||||
/ cint(self.total_days_in_month), 2)
|
||||
elif not self.payment_days:
|
||||
d.d_modified_amount = 0
|
||||
else:
|
||||
elif not d.d_modified_amount:
|
||||
d.d_modified_amount = d.d_amount
|
||||
|
||||
self.total_deduction += flt(d.d_modified_amount)
|
||||
@@ -191,9 +191,6 @@ class SalarySlip(TransactionBase):
|
||||
if receiver:
|
||||
subj = 'Salary Slip - ' + cstr(self.month) +'/'+cstr(self.fiscal_year)
|
||||
sendmail([receiver], subject=subj, msg = _("Please see attachment"),
|
||||
attachments=[{
|
||||
"fname": self.name + ".pdf",
|
||||
"fcontent": frappe.get_print_format(self.doctype, self.name, as_pdf = True)
|
||||
}])
|
||||
attachments=[frappe.attach_print(self.doctype, self.name, file_name=self.name)])
|
||||
else:
|
||||
msgprint(_("Company Email ID not found, hence mail not sent"))
|
||||
|
||||
@@ -83,6 +83,7 @@ cur_frm.cscript.hour_rate = function(doc, dt, dn) {
|
||||
|
||||
|
||||
cur_frm.cscript.time_in_mins = cur_frm.cscript.hour_rate;
|
||||
cur_frm.cscript.fixed_cycle_cost = cur_frm.cscript.hour_rate;
|
||||
|
||||
cur_frm.cscript.item_code = function(doc, cdt, cdn) {
|
||||
get_bom_material_detail(doc, cdt, cdn);
|
||||
|
||||
@@ -8,6 +8,8 @@ from frappe.utils import cint, cstr, flt
|
||||
from frappe import _
|
||||
from frappe.model.document import Document
|
||||
|
||||
from operator import itemgetter
|
||||
|
||||
class BOM(Document):
|
||||
|
||||
def autoname(self):
|
||||
@@ -57,6 +59,9 @@ class BOM(Document):
|
||||
last_purchase_rate, is_manufactured_item
|
||||
from `tabItem` where name=%s""", item_code, as_dict = 1)
|
||||
|
||||
if not item:
|
||||
frappe.throw(_("Item: {0} does not exist in the system").format(item_code))
|
||||
|
||||
return item
|
||||
|
||||
def validate_rm_item(self, item):
|
||||
@@ -285,7 +290,10 @@ class BOM(Document):
|
||||
if not d.hour_rate:
|
||||
d.hour_rate = flt(w[0])
|
||||
|
||||
fixed_cost += flt(w[1])
|
||||
if d.fixed_cycle_cost == None:
|
||||
d.fixed_cycle_cost= flt(w[1])
|
||||
|
||||
fixed_cost += d.fixed_cycle_cost
|
||||
|
||||
if d.hour_rate and d.time_in_mins:
|
||||
d.operating_cost = flt(d.hour_rate) * flt(d.time_in_mins) / 60.0
|
||||
@@ -354,7 +362,7 @@ class BOM(Document):
|
||||
"Add items to Flat BOM table"
|
||||
frappe.db.sql("""delete from `tabBOM Explosion Item` where parent=%s""", self.name)
|
||||
self.set('flat_bom_details', [])
|
||||
for d in self.cur_exploded_items:
|
||||
for d in sorted(self.cur_exploded_items, key=itemgetter(0)):
|
||||
ch = self.append('flat_bom_details', {})
|
||||
for i in self.cur_exploded_items[d].keys():
|
||||
ch.set(i, self.cur_exploded_items[d][i])
|
||||
|
||||
@@ -10,7 +10,7 @@ from erpnext.manufacturing.doctype.production_order.production_order import make
|
||||
from erpnext.stock.doctype.stock_entry import test_stock_entry
|
||||
|
||||
class TestProductionOrder(unittest.TestCase):
|
||||
def test_planned_qty(self):
|
||||
def check_planned_qty(self):
|
||||
set_perpetual_inventory(0)
|
||||
|
||||
planned0 = frappe.db.get_value("Bin", {"item_code": "_Test FG Item", "warehouse": "_Test Warehouse 1 - _TC"}, "planned_qty") or 0
|
||||
@@ -27,11 +27,15 @@ class TestProductionOrder(unittest.TestCase):
|
||||
s = frappe.get_doc(make_stock_entry(pro_doc.name, "Material Transfer", 4))
|
||||
for d in s.get("mtn_details"):
|
||||
d.s_warehouse = "Stores - _TC"
|
||||
s.fiscal_year = "_Test Fiscal Year 2013"
|
||||
s.posting_date = "2013-01-02"
|
||||
s.insert()
|
||||
s.submit()
|
||||
|
||||
# from wip to fg
|
||||
s = frappe.get_doc(make_stock_entry(pro_doc.name, "Manufacture", 4))
|
||||
s.fiscal_year = "_Test Fiscal Year 2013"
|
||||
s.posting_date = "2013-01-03"
|
||||
s.insert()
|
||||
s.submit()
|
||||
|
||||
@@ -44,12 +48,14 @@ class TestProductionOrder(unittest.TestCase):
|
||||
|
||||
def test_over_production(self):
|
||||
from erpnext.manufacturing.doctype.production_order.production_order import StockOverProductionError
|
||||
pro_doc = self.test_planned_qty()
|
||||
pro_doc = self.check_planned_qty()
|
||||
|
||||
test_stock_entry.make_stock_entry("_Test Item", None, "_Test Warehouse - _TC", 100, 100)
|
||||
test_stock_entry.make_stock_entry("_Test Item Home Desktop 100", None, "_Test Warehouse - _TC", 100, 100)
|
||||
|
||||
s = frappe.get_doc(make_stock_entry(pro_doc.name, "Manufacture", 7))
|
||||
s.fiscal_year = "_Test Fiscal Year 2013"
|
||||
s.posting_date = "2013-01-04"
|
||||
s.insert()
|
||||
|
||||
self.assertRaises(StockOverProductionError, s.submit)
|
||||
|
||||
@@ -24,6 +24,13 @@ cur_frm.cscript.item_code = function(doc,cdt,cdn) {
|
||||
}
|
||||
}
|
||||
|
||||
cur_frm.cscript.raise_purchase_request = function(doc, cdt, cdn) {
|
||||
return frappe.call({
|
||||
method: "raise_purchase_request",
|
||||
doc:doc
|
||||
})
|
||||
}
|
||||
|
||||
cur_frm.cscript.download_materials_required = function(doc, cdt, cdn) {
|
||||
return $c_obj(doc, 'validate_data', '', function(r, rt) {
|
||||
if (!r['exc'])
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"creation": "2013-01-21 12:03:47.000000",
|
||||
"creation": "2013-01-21 12:03:47",
|
||||
"default_print_format": "Standard",
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
@@ -20,6 +20,7 @@
|
||||
{
|
||||
"fieldname": "fg_item",
|
||||
"fieldtype": "Link",
|
||||
"in_list_view": 1,
|
||||
"label": "Filter based on item",
|
||||
"options": "Item",
|
||||
"permlevel": 0
|
||||
@@ -27,6 +28,7 @@
|
||||
{
|
||||
"fieldname": "customer",
|
||||
"fieldtype": "Link",
|
||||
"in_list_view": 1,
|
||||
"label": "Filter based on customer",
|
||||
"options": "Customer",
|
||||
"permlevel": 0
|
||||
@@ -34,6 +36,7 @@
|
||||
{
|
||||
"fieldname": "company",
|
||||
"fieldtype": "Link",
|
||||
"in_list_view": 1,
|
||||
"label": "Company",
|
||||
"options": "Company",
|
||||
"permlevel": 0,
|
||||
@@ -140,7 +143,7 @@
|
||||
"fieldname": "raise_purchase_request",
|
||||
"fieldtype": "Button",
|
||||
"label": "Create Material Requests",
|
||||
"options": "raise_purchase_request",
|
||||
"options": "",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
@@ -155,7 +158,7 @@
|
||||
"idx": 1,
|
||||
"in_create": 1,
|
||||
"issingle": 1,
|
||||
"modified": "2013-12-20 19:23:25.000000",
|
||||
"modified": "2015-01-11 21:53:21.253556",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Manufacturing",
|
||||
"name": "Production Planning Tool",
|
||||
|
||||
@@ -88,3 +88,8 @@ execute:frappe.delete_doc("DocType", "Purchase Request Item")
|
||||
erpnext.patches.v4_2.recalculate_bom_cost
|
||||
erpnext.patches.v4_2.fix_gl_entries_for_stock_transactions
|
||||
erpnext.patches.v4_2.update_requested_and_ordered_qty
|
||||
execute:frappe.delete_doc("DocType", "Contact Control")
|
||||
erpnext.patches.v4_2.recalculate_bom_costs
|
||||
erpnext.patches.v4_2.discount_amount
|
||||
erpnext.patches.v4_2.update_landed_cost_voucher
|
||||
erpnext.patches.v4_2.set_item_has_batch
|
||||
|
||||
@@ -6,6 +6,7 @@ import frappe
|
||||
|
||||
def execute():
|
||||
reference_date = guess_reference_date()
|
||||
frappe.reload_doc('accounts', 'doctype', 'journal_voucher_detail')
|
||||
for name in frappe.db.sql_list("""select name from `tabJournal Voucher`
|
||||
where date(creation)>=%s""", reference_date):
|
||||
jv = frappe.get_doc("Journal Voucher", name)
|
||||
|
||||
12
erpnext/patches/v4_2/discount_amount.py
Normal file
12
erpnext/patches/v4_2/discount_amount.py
Normal file
@@ -0,0 +1,12 @@
|
||||
# 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.modules import scrub, get_doctype_module
|
||||
|
||||
def execute():
|
||||
for dt in ["Quotation", "Sales Order", "Delivery Note", "Sales Invoice"]:
|
||||
frappe.reload_doc(get_doctype_module(dt), "doctype", scrub(dt))
|
||||
frappe.db.sql("""update `tab{0}` set base_discount_amount=discount_amount,
|
||||
discount_amount=discount_amount/conversion_rate""".format(dt))
|
||||
19
erpnext/patches/v4_2/recalculate_bom_costs.py
Normal file
19
erpnext/patches/v4_2/recalculate_bom_costs.py
Normal file
@@ -0,0 +1,19 @@
|
||||
# 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():
|
||||
frappe.reload_doc('manufacturing', 'doctype', 'bom_operation')
|
||||
for d in frappe.db.sql("""select bom.name from `tabBOM` bom where bom.docstatus < 2 and
|
||||
exists(select bom_op.name from `tabBOM Operation` bom_op where
|
||||
bom.name = bom_op.parent and bom_op.fixed_cycle_cost IS NOT NULL)""", as_dict=1):
|
||||
try:
|
||||
bom = frappe.get_doc('BOM', d.name)
|
||||
bom.ignore_validate_update_after_submit = True
|
||||
bom.calculate_cost()
|
||||
bom.save()
|
||||
frappe.db.commit()
|
||||
except:
|
||||
frappe.db.rollback()
|
||||
65
erpnext/patches/v4_2/set_item_has_batch.py
Normal file
65
erpnext/patches/v4_2/set_item_has_batch.py
Normal file
@@ -0,0 +1,65 @@
|
||||
# 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():
|
||||
frappe.db.sql("update tabItem set has_batch_no = 'No' where ifnull(has_batch_no, '') = ''")
|
||||
frappe.db.sql("update tabItem set has_serial_no = 'No' where ifnull(has_serial_no, '') = ''")
|
||||
|
||||
item_list = frappe.db.sql("""select name, has_batch_no, has_serial_no from tabItem
|
||||
where ifnull(is_stock_item, 'No') = 'Yes'""", as_dict=1)
|
||||
|
||||
sle_count = get_sle_count()
|
||||
sle_with_batch = get_sle_with_batch()
|
||||
sle_with_serial = get_sle_with_serial()
|
||||
|
||||
batch_items = get_items_with_batch()
|
||||
serialized_items = get_items_with_serial()
|
||||
|
||||
for d in item_list:
|
||||
if d.has_batch_no == 'Yes':
|
||||
if d.name not in batch_items and sle_count.get(d.name) and sle_count.get(d.name) != sle_with_batch.get(d.name):
|
||||
frappe.db.set_value("Item", d.name, "has_batch_no", "No")
|
||||
else:
|
||||
if d.name in batch_items or (sle_count.get(d.name) and sle_count.get(d.name) == sle_with_batch.get(d.name)):
|
||||
frappe.db.set_value("Item", d.name, "has_batch_no", "Yes")
|
||||
|
||||
if d.has_serial_no == 'Yes':
|
||||
if d.name not in serialized_items and sle_count.get(d.name) and sle_count.get(d.name) != sle_with_serial.get(d.name):
|
||||
frappe.db.set_value("Item", d.name, "has_serial_no", "No")
|
||||
else:
|
||||
if d.name in serialized_items or (sle_count.get(d.name) and sle_count.get(d.name) == sle_with_serial.get(d.name)):
|
||||
frappe.db.set_value("Item", d.name, "has_serial_no", "Yes")
|
||||
|
||||
|
||||
def get_sle_count():
|
||||
sle_count = {}
|
||||
for d in frappe.db.sql("""select item_code, count(name) as cnt from `tabStock Ledger Entry` group by item_code""", as_dict=1):
|
||||
sle_count.setdefault(d.item_code, d.cnt)
|
||||
|
||||
return sle_count
|
||||
|
||||
def get_sle_with_batch():
|
||||
sle_with_batch = {}
|
||||
for d in frappe.db.sql("""select item_code, count(name) as cnt from `tabStock Ledger Entry`
|
||||
where ifnull(batch_no, '') != '' group by item_code""", as_dict=1):
|
||||
sle_with_batch.setdefault(d.item_code, d.cnt)
|
||||
|
||||
return sle_with_batch
|
||||
|
||||
|
||||
def get_sle_with_serial():
|
||||
sle_with_serial = {}
|
||||
for d in frappe.db.sql("""select item_code, count(name) as cnt from `tabStock Ledger Entry`
|
||||
where ifnull(serial_no, '') != '' group by item_code""", as_dict=1):
|
||||
sle_with_serial.setdefault(d.item_code, d.cnt)
|
||||
|
||||
return sle_with_serial
|
||||
|
||||
def get_items_with_batch():
|
||||
return frappe.db.sql_list("select item from tabBatch")
|
||||
|
||||
def get_items_with_serial():
|
||||
return frappe.db.sql_list("select item_code from `tabSerial No`")
|
||||
10
erpnext/patches/v4_2/update_landed_cost_voucher.py
Normal file
10
erpnext/patches/v4_2/update_landed_cost_voucher.py
Normal file
@@ -0,0 +1,10 @@
|
||||
# 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():
|
||||
frappe.reload_doc("stock", "doctype", "landed_cost_voucher")
|
||||
frappe.db.sql("""update `tabLanded Cost Voucher` set distribute_charges_based_on = 'Amount'
|
||||
where docstatus=1""")
|
||||
@@ -16,6 +16,15 @@ class TestTimeLog(unittest.TestCase):
|
||||
self.assertRaises(OverlapError, ts.insert)
|
||||
|
||||
frappe.db.sql("delete from `tabTime Log`")
|
||||
|
||||
def test_negative_hours(self):
|
||||
frappe.db.sql("delete from `tabTime Log`")
|
||||
test_time_log = frappe.new_doc("Time Log")
|
||||
test_time_log.activity_type = "Communication"
|
||||
test_time_log.from_time = "2013-01-01 11:00:00.000000"
|
||||
test_time_log.to_time = "2013-01-01 10:00:00.000000"
|
||||
self.assertRaises(frappe.ValidationError, test_time_log.save)
|
||||
frappe.db.sql("delete from `tabTime Log`")
|
||||
|
||||
test_records = frappe.get_test_records('Time Log')
|
||||
test_ignore = ["Time Log Batch", "Sales Invoice"]
|
||||
|
||||
@@ -19,10 +19,12 @@ class TimeLog(Document):
|
||||
self.set_status()
|
||||
self.validate_overlap()
|
||||
self.calculate_total_hours()
|
||||
|
||||
|
||||
def calculate_total_hours(self):
|
||||
from frappe.utils import time_diff_in_hours
|
||||
self.hours = time_diff_in_hours(self.to_time, self.from_time)
|
||||
if self.hours < 0:
|
||||
frappe.throw(_("'From Time' cannot be later than 'To Time'"))
|
||||
|
||||
def set_status(self):
|
||||
self.status = {
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
"public/js/feature_setup.js",
|
||||
"public/js/utils.js",
|
||||
"public/js/queries.js",
|
||||
"public/js/utils/party.js"
|
||||
"public/js/utils/party.js",
|
||||
"public/js/templates/address_list.html",
|
||||
"public/js/templates/contact_list.html"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -108,6 +108,7 @@ erpnext.StockAnalytics = erpnext.StockGridReport.extend({
|
||||
// otherwise, only reset values
|
||||
$.each(this.data, function(i, d) {
|
||||
me.reset_item_values(d);
|
||||
d["closing_qty_value"] = 0;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
20
erpnext/public/js/templates/address_list.html
Normal file
20
erpnext/public/js/templates/address_list.html
Normal file
@@ -0,0 +1,20 @@
|
||||
<p><button class="btn btn-sm btn-default btn-address">
|
||||
<i class="icon-plus"></i> New Address</button></p>
|
||||
{% for(var i=0, l=addr_list.length; i<l; i++) { %}
|
||||
<hr>
|
||||
<a href="#Form/Address/{%= addr_list[i].name %}" class="btn btn-sm btn-default pull-right">
|
||||
{%= __("Edit") %}</a>
|
||||
<p><b>{%= i+1 %}. {%= addr_list[i].address_type %}</b></p>
|
||||
<div style="padding-left: 15px;">
|
||||
<div>
|
||||
{% if(addr_list[i].is_primary_address) { %}<span class="label label-info">
|
||||
{%= __("Primary") %}</span>{% } %}
|
||||
{% if(addr_list[i].is_shipping_address) { %}<span class="label label-default">
|
||||
{%= __("Shipping") %}</span>{% } %}
|
||||
</div>
|
||||
<p style="margin-top: 5px;">{%= addr_list[i].display %}</p>
|
||||
</div>
|
||||
{% } %}
|
||||
{% if(!addr_list.length) { %}
|
||||
<p class="text-muted">{%= __("No address added yet.") %}</p>
|
||||
{% } %}
|
||||
28
erpnext/public/js/templates/contact_list.html
Normal file
28
erpnext/public/js/templates/contact_list.html
Normal file
@@ -0,0 +1,28 @@
|
||||
<p><button class="btn btn-sm btn-default btn-contact">
|
||||
<i class="icon-plus"></i> New Contact</button></p>
|
||||
{% for(var i=0, l=contact_list.length; i<l; i++) { %}
|
||||
<hr>
|
||||
<a href="#Form/Contact/{%= contact_list[i].name %}" class="btn btn-sm btn-default pull-right">
|
||||
{%= __("Edit") %}</a>
|
||||
<p><b>{%= i+1 %}. {%= contact_list[i].first_name %} {%= contact_list[i].last_name %}</b></p>
|
||||
<div style="padding-left: 15px;">
|
||||
<div>
|
||||
{% if(contact_list[i].is_primary_contact) { %}<span class="label label-info">
|
||||
{%= __("Primary") %}</span>{% } %}
|
||||
</div>
|
||||
<p style="padding-top: 5px;">
|
||||
{% if(contact_list[i].phone) { %}
|
||||
{%= __("Phone") %}: {%= contact_list[i].phone %}<br>
|
||||
{% } %}
|
||||
{% if(contact_list[i].mobile_no) { %}
|
||||
{%= __("Mobile No.") %}: {%= contact_list[i].mobile_no %}<br>
|
||||
{% } %}
|
||||
{% if(contact_list[i].email_id) { %}
|
||||
{%= __("Email ID") %}: {%= contact_list[i].email_id %}
|
||||
{% } %}
|
||||
</p>
|
||||
</div>
|
||||
{% } %}
|
||||
{% if(!contact_list.length) { %}
|
||||
<p class="text-muted">{%= __("No contacts added yet.") %}</p>
|
||||
{% } %}
|
||||
@@ -402,20 +402,32 @@ erpnext.TransactionController = erpnext.stock.StockController.extend({
|
||||
},
|
||||
|
||||
_set_values_for_item_list: function(children) {
|
||||
var me = this;
|
||||
var price_list_rate_changed = false;
|
||||
$.each(children, function(i, d) {
|
||||
var existing_pricing_rule = frappe.model.get_value(d.doctype, d.name, "pricing_rule");
|
||||
$.each(d, function(k, v) {
|
||||
if (["doctype", "name"].indexOf(k)===-1) {
|
||||
if(k=="price_list_rate") {
|
||||
if(flt(v) != flt(d.price_list_rate)) price_list_rate_changed = true;
|
||||
}
|
||||
frappe.model.set_value(d.doctype, d.name, k, v);
|
||||
}
|
||||
});
|
||||
// if pricing rule set as blank from an existing value, apply price_list
|
||||
if(!me.frm.doc.ignore_pricing_rule && existing_pricing_rule && !d.pricing_rule) {
|
||||
me.apply_price_list(frappe.get_doc(d.doctype, d.name));
|
||||
}
|
||||
|
||||
if(!price_list_rate_changed) me.calculate_taxes_and_totals();
|
||||
});
|
||||
},
|
||||
|
||||
apply_price_list: function() {
|
||||
apply_price_list: function(item) {
|
||||
var me = this;
|
||||
return this.frm.call({
|
||||
method: "erpnext.stock.get_item_details.apply_price_list",
|
||||
args: { args: this._get_args() },
|
||||
args: { args: this._get_args(item) },
|
||||
callback: function(r) {
|
||||
if (!r.exc) {
|
||||
me.in_apply_price_list = true;
|
||||
@@ -722,7 +734,7 @@ erpnext.TransactionController = erpnext.stock.StockController.extend({
|
||||
},
|
||||
|
||||
adjust_discount_amount_loss: function(tax) {
|
||||
var discount_amount_loss = this.frm.doc.grand_total - flt(this.frm.doc.discount_amount) - tax.total;
|
||||
var discount_amount_loss = this.frm.doc.grand_total - flt(this.frm.doc.base_discount_amount) - tax.total;
|
||||
tax.tax_amount_after_discount_amount = flt(tax.tax_amount_after_discount_amount +
|
||||
discount_amount_loss, precision("tax_amount", tax));
|
||||
tax.total = flt(tax.total + discount_amount_loss, precision("total", tax));
|
||||
@@ -736,8 +748,7 @@ erpnext.TransactionController = erpnext.stock.StockController.extend({
|
||||
// distribute the tax amount proportionally to each item row
|
||||
var actual = flt(tax.rate, precision("tax_amount", tax));
|
||||
current_tax_amount = this.frm.doc.net_total ?
|
||||
((item.base_amount / this.frm.doc.net_total) * actual) :
|
||||
0.0;
|
||||
((item.base_amount / this.frm.doc.net_total) * actual) : 0.0;
|
||||
|
||||
} else if(tax.charge_type == "On Net Total") {
|
||||
current_tax_amount = (tax_rate / 100.0) * item.base_amount;
|
||||
|
||||
@@ -81,5 +81,28 @@ $.extend(erpnext, {
|
||||
|
||||
d.show();
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
erpnext.utils = {
|
||||
render_address_and_contact: function(frm) {
|
||||
// render address
|
||||
$(frm.fields_dict['address_html'].wrapper)
|
||||
.html(frappe.render(frappe.templates.address_list,
|
||||
cur_frm.doc.__onload))
|
||||
.find(".btn-address").on("click", function() {
|
||||
new_doc("Address");
|
||||
});
|
||||
|
||||
// render contact
|
||||
if(frm.fields_dict['contact_html']) {
|
||||
$(frm.fields_dict['contact_html'].wrapper)
|
||||
.html(frappe.render(frappe.templates.contact_list,
|
||||
cur_frm.doc.__onload))
|
||||
.find(".btn-contact").on("click", function() {
|
||||
new_doc("Contact");
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
|
||||
// License: GNU General Public License v3. See license.txt
|
||||
|
||||
{% include 'setup/doctype/contact_control/contact_control.js' %};
|
||||
|
||||
cur_frm.cscript.onload = function(doc, dt, dn) {
|
||||
cur_frm.cscript.load_defaults(doc, dt, dn);
|
||||
}
|
||||
@@ -32,8 +30,8 @@ cur_frm.cscript.refresh = function(doc, dt, dn) {
|
||||
}else{
|
||||
unhide_field(['address_html','contact_html']);
|
||||
// make lists
|
||||
cur_frm.cscript.make_address(doc, dt, dn);
|
||||
cur_frm.cscript.make_contact(doc, dt, dn);
|
||||
|
||||
erpnext.utils.render_address_and_contact(cur_frm)
|
||||
|
||||
cur_frm.communication_view = new frappe.views.CommunicationList({
|
||||
parent: cur_frm.fields_dict.communication_html.wrapper,
|
||||
@@ -79,44 +77,6 @@ cur_frm.cscript.setup_dashboard = function(doc) {
|
||||
});
|
||||
}
|
||||
|
||||
cur_frm.cscript.make_address = function() {
|
||||
if(!cur_frm.address_list) {
|
||||
cur_frm.address_list = new frappe.ui.Listing({
|
||||
parent: cur_frm.fields_dict['address_html'].wrapper,
|
||||
page_length: 5,
|
||||
new_doctype: "Address",
|
||||
get_query: function() {
|
||||
return "select name, address_type, address_line1, address_line2, city, state, country, pincode, fax, email_id, phone, is_primary_address, is_shipping_address from tabAddress where customer='" +
|
||||
cur_frm.doc.name.replace(/'/g, "\\'") + "' and docstatus != 2 order by is_primary_address desc"
|
||||
},
|
||||
as_dict: 1,
|
||||
no_results_message: __('No addresses created'),
|
||||
render_row: cur_frm.cscript.render_address_row,
|
||||
});
|
||||
// note: render_address_row is defined in contact_control.js
|
||||
}
|
||||
cur_frm.address_list.run();
|
||||
}
|
||||
|
||||
cur_frm.cscript.make_contact = function() {
|
||||
if(!cur_frm.contact_list) {
|
||||
cur_frm.contact_list = new frappe.ui.Listing({
|
||||
parent: cur_frm.fields_dict['contact_html'].wrapper,
|
||||
page_length: 5,
|
||||
new_doctype: "Contact",
|
||||
get_query: function() {
|
||||
return "select name, first_name, last_name, email_id, phone, mobile_no, department, designation, is_primary_contact from tabContact where customer='" +
|
||||
cur_frm.doc.name.replace(/'/g, "\\'") + "' and docstatus != 2 order by is_primary_contact desc"
|
||||
},
|
||||
as_dict: 1,
|
||||
no_results_message: __('No contacts created'),
|
||||
render_row: cur_frm.cscript.render_contact_row,
|
||||
});
|
||||
// note: render_contact_row is defined in contact_control.js
|
||||
}
|
||||
cur_frm.contact_list.run();
|
||||
}
|
||||
|
||||
cur_frm.fields_dict['customer_group'].get_query = function(doc, dt, dn) {
|
||||
return{
|
||||
filters:{'is_group': 'No'}
|
||||
|
||||
@@ -7,11 +7,14 @@ from frappe.model.naming import make_autoname
|
||||
from frappe import msgprint, _
|
||||
import frappe.defaults
|
||||
|
||||
|
||||
from erpnext.utilities.transaction_base import TransactionBase
|
||||
from erpnext.utilities.address_and_contact import load_address_and_contact
|
||||
from erpnext.accounts.party import create_party_account
|
||||
|
||||
class Customer(TransactionBase):
|
||||
def onload(self):
|
||||
"""Load address and contacts in `__onload`"""
|
||||
load_address_and_contact(self, "customer")
|
||||
|
||||
def autoname(self):
|
||||
cust_master_name = frappe.defaults.get_global_default('cust_master_name')
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
|
||||
// License: GNU General Public License v3. See license.txt
|
||||
|
||||
{% include 'setup/doctype/contact_control/contact_control.js' %};
|
||||
|
||||
frappe.provide("erpnext");
|
||||
erpnext.LeadController = frappe.ui.form.Controller.extend({
|
||||
setup: function() {
|
||||
@@ -42,33 +40,10 @@ erpnext.LeadController = frappe.ui.form.Controller.extend({
|
||||
});
|
||||
|
||||
if(!this.frm.doc.__islocal) {
|
||||
this.make_address_list();
|
||||
erpnext.utils.render_address_and_contact(cur_frm);
|
||||
}
|
||||
},
|
||||
|
||||
make_address_list: function() {
|
||||
var me = this;
|
||||
if(!this.frm.address_list) {
|
||||
this.frm.address_list = new frappe.ui.Listing({
|
||||
parent: this.frm.fields_dict['address_html'].wrapper,
|
||||
page_length: 5,
|
||||
new_doctype: "Address",
|
||||
get_query: function() {
|
||||
return 'select name, address_type, address_line1, address_line2, \
|
||||
city, state, country, pincode, fax, email_id, phone, \
|
||||
is_primary_address, is_shipping_address from tabAddress \
|
||||
where lead="'+me.frm.doc.name+'" and docstatus != 2 \
|
||||
order by is_primary_address, is_shipping_address desc'
|
||||
},
|
||||
as_dict: 1,
|
||||
no_results_message: __('No addresses created'),
|
||||
render_row: this.render_address_row,
|
||||
});
|
||||
// note: render_address_row is defined in contact_control.js
|
||||
}
|
||||
this.frm.address_list.run();
|
||||
},
|
||||
|
||||
create_customer: function() {
|
||||
frappe.model.open_mapped_doc({
|
||||
method: "erpnext.selling.doctype.lead.lead.make_customer",
|
||||
|
||||
@@ -160,7 +160,7 @@
|
||||
"allow_on_submit": 0,
|
||||
"description": "Add to calendar on this date",
|
||||
"fieldname": "contact_date",
|
||||
"fieldtype": "Date",
|
||||
"fieldtype": "Datetime",
|
||||
"in_filter": 1,
|
||||
"label": "Next Contact Date",
|
||||
"no_copy": 1,
|
||||
@@ -368,7 +368,7 @@
|
||||
],
|
||||
"icon": "icon-user",
|
||||
"idx": 1,
|
||||
"modified": "2014-08-12 05:22:18.801092",
|
||||
"modified": "2014-12-01 08:22:23.286314",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Selling",
|
||||
"name": "Lead",
|
||||
|
||||
@@ -9,11 +9,13 @@ from frappe import session
|
||||
from frappe.model.mapper import get_mapped_doc
|
||||
|
||||
from erpnext.controllers.selling_controller import SellingController
|
||||
from erpnext.utilities.address_and_contact import load_address_and_contact
|
||||
|
||||
class Lead(SellingController):
|
||||
def onload(self):
|
||||
customer = frappe.db.get_value("Customer", {"lead_name": self.name})
|
||||
self.get("__onload").is_customer = customer
|
||||
load_address_and_contact(self, "lead")
|
||||
|
||||
def validate(self):
|
||||
self._prev = frappe._dict({
|
||||
@@ -43,6 +45,7 @@ class Lead(SellingController):
|
||||
def add_calendar_event(self, opts=None, force=False):
|
||||
super(Lead, self).add_calendar_event({
|
||||
"owner": self.lead_owner,
|
||||
"starts_on": self.contact_date,
|
||||
"subject": ('Contact ' + cstr(self.lead_name)),
|
||||
"description": ('Contact ' + cstr(self.lead_name)) + \
|
||||
(self.contact_by and ('. By : ' + cstr(self.contact_by)) or '')
|
||||
|
||||
@@ -35,8 +35,6 @@ erpnext.selling.Opportunity = frappe.ui.form.Controller.extend({
|
||||
});
|
||||
}
|
||||
|
||||
if(this.frm.doc.customer && !this.frm.doc.customer_name) cur_frm.cscript.customer(this.frm.doc);
|
||||
|
||||
this.setup_queries();
|
||||
},
|
||||
|
||||
|
||||
@@ -47,6 +47,7 @@
|
||||
"in_filter": 1,
|
||||
"in_list_view": 1,
|
||||
"label": "Customer",
|
||||
"no_copy": 1,
|
||||
"oldfieldname": "customer",
|
||||
"oldfieldtype": "Link",
|
||||
"options": "Customer",
|
||||
@@ -372,7 +373,7 @@
|
||||
{
|
||||
"description": "Your sales person will get a reminder on this date to contact the customer",
|
||||
"fieldname": "contact_date",
|
||||
"fieldtype": "Date",
|
||||
"fieldtype": "Datetime",
|
||||
"label": "Next Contact Date",
|
||||
"oldfieldname": "contact_date",
|
||||
"oldfieldtype": "Date",
|
||||
@@ -416,7 +417,7 @@
|
||||
"icon": "icon-info-sign",
|
||||
"idx": 1,
|
||||
"is_submittable": 1,
|
||||
"modified": "2014-08-12 05:21:51.282397",
|
||||
"modified": "2014-12-19 10:49:20.695720",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Selling",
|
||||
"name": "Opportunity",
|
||||
|
||||
@@ -57,6 +57,7 @@ class Opportunity(TransactionBase):
|
||||
opts = frappe._dict()
|
||||
|
||||
opts.description = ""
|
||||
opts.contact_date = self.contact_date
|
||||
|
||||
if self.customer:
|
||||
if self.contact_person:
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
"enquiry_from": "Lead",
|
||||
"enquiry_type": "Sales",
|
||||
"lead": "_T-Lead-00001",
|
||||
"transaction_date": "2013-12-12",
|
||||
"fiscal_year": "_Test Fiscal Year 2013",
|
||||
"enquiry_details": [{
|
||||
"item_name": "Test Item",
|
||||
"description": "Some description"
|
||||
|
||||
@@ -405,6 +405,15 @@
|
||||
"fieldtype": "Section Break",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "other_charges_total_export",
|
||||
"fieldtype": "Currency",
|
||||
"label": "Taxes and Charges Total",
|
||||
"options": "currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "other_charges_total",
|
||||
"fieldtype": "Currency",
|
||||
@@ -421,22 +430,23 @@
|
||||
"fieldtype": "Column Break",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "other_charges_total_export",
|
||||
"fieldtype": "Currency",
|
||||
"label": "Taxes and Charges Total",
|
||||
"options": "currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "discount_amount",
|
||||
"fieldtype": "Currency",
|
||||
"label": "Discount Amount",
|
||||
"options": "Company:company:default_currency",
|
||||
"options": "currency",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "base_discount_amount",
|
||||
"fieldtype": "Currency",
|
||||
"label": "Discount Amount (Company Currency)",
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "totals",
|
||||
"fieldtype": "Section Break",
|
||||
@@ -713,7 +723,7 @@
|
||||
"no_copy": 1,
|
||||
"oldfieldname": "status",
|
||||
"oldfieldtype": "Select",
|
||||
"options": "Draft\nSubmitted\nOrdered\nLost\nCancelled",
|
||||
"options": "Draft\nSubmitted\nOrdered\nLost\nCancelled\nOpen\nReplied",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"read_only": 1,
|
||||
@@ -832,7 +842,7 @@
|
||||
"idx": 1,
|
||||
"is_submittable": 1,
|
||||
"max_attachments": 1,
|
||||
"modified": "2014-09-09 05:35:33.413559",
|
||||
"modified": "2015-01-21 11:24:08.210880",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Selling",
|
||||
"name": "Quotation",
|
||||
|
||||
@@ -175,6 +175,7 @@
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"label": "PO No",
|
||||
"no_copy": 0,
|
||||
"oldfieldname": "po_no",
|
||||
"oldfieldtype": "Data",
|
||||
"permlevel": 0,
|
||||
@@ -419,11 +420,6 @@
|
||||
"print_hide": 1,
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_46",
|
||||
"fieldtype": "Column Break",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "other_charges_total",
|
||||
"fieldtype": "Currency",
|
||||
@@ -436,12 +432,28 @@
|
||||
"read_only": 1,
|
||||
"width": "150px"
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_46",
|
||||
"fieldtype": "Column Break",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "discount_amount",
|
||||
"fieldtype": "Currency",
|
||||
"label": "Discount Amount",
|
||||
"options": "currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "base_discount_amount",
|
||||
"fieldtype": "Currency",
|
||||
"label": "Discount Amount (Company Currency)",
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "totals",
|
||||
@@ -489,14 +501,6 @@
|
||||
"read_only": 1,
|
||||
"width": "200px"
|
||||
},
|
||||
{
|
||||
"fieldname": "advance_paid",
|
||||
"fieldtype": "Currency",
|
||||
"label": "Advance Paid",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break3",
|
||||
"fieldtype": "Column Break",
|
||||
@@ -541,6 +545,15 @@
|
||||
"read_only": 1,
|
||||
"width": "200px"
|
||||
},
|
||||
{
|
||||
"fieldname": "advance_paid",
|
||||
"fieldtype": "Currency",
|
||||
"label": "Advance Paid",
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "view_details",
|
||||
"fieldtype": "Fold",
|
||||
@@ -1020,7 +1033,7 @@
|
||||
"idx": 1,
|
||||
"is_submittable": 1,
|
||||
"issingle": 0,
|
||||
"modified": "2014-10-08 14:22:44.717108",
|
||||
"modified": "2015-01-12 15:16:51.611467",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Selling",
|
||||
"name": "Sales Order",
|
||||
|
||||
@@ -157,7 +157,7 @@ class SalesOrder(SellingController):
|
||||
|
||||
self.check_credit(self.grand_total)
|
||||
|
||||
frappe.get_doc('Authorization Control').validate_approving_authority(self.doctype, self.grand_total, self)
|
||||
frappe.get_doc('Authorization Control').validate_approving_authority(self.doctype, self.company, self.grand_total, self)
|
||||
|
||||
self.update_prevdoc_status('submit')
|
||||
frappe.db.set(self, 'status', 'Submitted')
|
||||
@@ -275,6 +275,14 @@ def make_material_request(source_name, target_doc=None):
|
||||
@frappe.whitelist()
|
||||
def make_delivery_note(source_name, target_doc=None):
|
||||
def set_missing_values(source, target):
|
||||
if source.po_no:
|
||||
if target.po_no:
|
||||
target_po_no = target.po_no.split(", ")
|
||||
target_po_no.append(source.po_no)
|
||||
target.po_no = ", ".join(list(set(target_po_no))) if len(target_po_no) > 1 else target_po_no[0]
|
||||
else:
|
||||
target.po_no = source.po_no
|
||||
|
||||
target.ignore_pricing_rule = 1
|
||||
target.run_method("set_missing_values")
|
||||
target.run_method("calculate_taxes_and_totals")
|
||||
@@ -329,7 +337,7 @@ def make_sales_invoice(source_name, target_doc=None):
|
||||
def update_item(source, target, source_parent):
|
||||
target.amount = flt(source.amount) - flt(source.billed_amt)
|
||||
target.base_amount = target.amount * flt(source_parent.conversion_rate)
|
||||
target.qty = source.rate and target.amount / flt(source.rate) or source.qty
|
||||
target.qty = target.amount / flt(source.rate) if (source.rate and source.billed_amt) else source.qty
|
||||
|
||||
doclist = get_mapped_doc("Sales Order", source_name, {
|
||||
"Sales Order": {
|
||||
@@ -357,17 +365,6 @@ def make_sales_invoice(source_name, target_doc=None):
|
||||
}
|
||||
}, target_doc, postprocess)
|
||||
|
||||
def set_advance_vouchers(source, target):
|
||||
advance_voucher_list = []
|
||||
|
||||
advance_voucher = frappe.db.sql("""
|
||||
select
|
||||
t1.name as voucher_no, t1.posting_date, t1.remark, t2.account,
|
||||
t2.name as voucher_detail_no, {amount_query} as payment_amount, t2.is_advance
|
||||
from
|
||||
`tabJournal Voucher` t1, `tabJournal Voucher Detail` t2
|
||||
""")
|
||||
|
||||
return doclist
|
||||
|
||||
@frappe.whitelist()
|
||||
|
||||
@@ -8,19 +8,22 @@ frappe.query_reports["Customer Acquisition and Loyalty"] = {
|
||||
"label": __("Company"),
|
||||
"fieldtype": "Link",
|
||||
"options": "Company",
|
||||
"default": frappe.defaults.get_user_default("company")
|
||||
"default": frappe.defaults.get_user_default("company"),
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname":"from_date",
|
||||
"label": __("From Date"),
|
||||
"fieldtype": "Date",
|
||||
"default": frappe.defaults.get_user_default("year_start_date")
|
||||
"default": frappe.defaults.get_user_default("year_start_date"),
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname":"to_date",
|
||||
"label": __("To Date"),
|
||||
"fieldtype": "Date",
|
||||
"default": frappe.defaults.get_user_default("year_end_date")
|
||||
"default": frappe.defaults.get_user_default("year_end_date"),
|
||||
"reqd": 1
|
||||
},
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -362,17 +362,22 @@ erpnext.selling.SellingController = erpnext.TransactionController.extend({
|
||||
var distributed_amount = 0.0;
|
||||
|
||||
if (this.frm.doc.discount_amount) {
|
||||
this.frm.set_value("base_discount_amount",
|
||||
flt(this.frm.doc.discount_amount * this.frm.doc.conversion_rate, precision("base_discount_amount")))
|
||||
|
||||
var grand_total_for_discount_amount = this.get_grand_total_for_discount_amount();
|
||||
// calculate item amount after Discount Amount
|
||||
if (grand_total_for_discount_amount) {
|
||||
$.each(this.frm.item_doclist, function(i, item) {
|
||||
distributed_amount = flt(me.frm.doc.discount_amount) * item.base_amount / grand_total_for_discount_amount;
|
||||
distributed_amount = flt(me.frm.doc.base_discount_amount) * item.base_amount / grand_total_for_discount_amount;
|
||||
item.base_amount = flt(item.base_amount - distributed_amount, precision("base_amount", item));
|
||||
});
|
||||
|
||||
this.discount_amount_applied = true;
|
||||
this._calculate_taxes_and_totals();
|
||||
}
|
||||
} else {
|
||||
this.frm.set_value("base_discount_amount", 0);
|
||||
}
|
||||
},
|
||||
|
||||
@@ -506,12 +511,12 @@ erpnext.selling.SellingController = erpnext.TransactionController.extend({
|
||||
}
|
||||
});
|
||||
};
|
||||
setup_field_label_map(["net_total", "other_charges_total", "grand_total",
|
||||
setup_field_label_map(["net_total", "other_charges_total", "base_discount_amount", "grand_total",
|
||||
"rounded_total", "in_words",
|
||||
"outstanding_amount", "total_advance", "paid_amount", "write_off_amount"],
|
||||
company_currency);
|
||||
|
||||
setup_field_label_map(["net_total_export", "other_charges_total_export", "grand_total_export",
|
||||
setup_field_label_map(["net_total_export", "other_charges_total_export", "discount_amount", "grand_total_export",
|
||||
"rounded_total_export", "in_words_export"], this.frm.doc.currency);
|
||||
|
||||
cur_frm.set_df_property("conversion_rate", "description", "1 " + this.frm.doc.currency
|
||||
@@ -524,7 +529,7 @@ erpnext.selling.SellingController = erpnext.TransactionController.extend({
|
||||
|
||||
// toggle fields
|
||||
this.frm.toggle_display(["conversion_rate", "net_total", "other_charges_total",
|
||||
"grand_total", "rounded_total", "in_words"],
|
||||
"grand_total", "rounded_total", "in_words", "base_discount_amount"],
|
||||
this.frm.doc.currency != company_currency);
|
||||
|
||||
this.frm.toggle_display(["plc_conversion_rate", "price_list_currency"],
|
||||
|
||||
@@ -98,9 +98,12 @@ class AuthorizationControl(TransactionBase):
|
||||
if doc_obj:
|
||||
price_list_rate, base_rate = 0, 0
|
||||
for d in doc_obj.get(doc_obj.fname):
|
||||
if d.base_price_list_rate and d.base_rate:
|
||||
price_list_rate += flt(d.base_price_list_rate)
|
||||
if d.base_rate:
|
||||
price_list_rate += flt(d.base_price_list_rate) or flt(d.base_rate)
|
||||
base_rate += flt(d.base_rate)
|
||||
if doc_obj.get("discount_amount"):
|
||||
base_rate -= flt(doc_obj.discount_amount)
|
||||
|
||||
if price_list_rate: av_dis = 100 - flt(base_rate * 100 / price_list_rate)
|
||||
|
||||
final_based_on = ['Grand Total','Average Discount','Customerwise Discount','Itemwise Discount']
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
[To deprecate] Common scripts for Contacts.
|
||||
@@ -1 +0,0 @@
|
||||
from __future__ import unicode_literals
|
||||
@@ -1,161 +0,0 @@
|
||||
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
|
||||
// License: GNU General Public License v3. See license.txt
|
||||
|
||||
if(cur_frm.fields_dict['territory']) {
|
||||
cur_frm.fields_dict['territory'].get_query = function(doc, dt, dn) {
|
||||
return {
|
||||
filters: {
|
||||
'is_group': "No"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cur_frm.cscript.render_contact_row = function(wrapper, data) {
|
||||
// prepare data
|
||||
data.fullname = (data.first_name || '')
|
||||
+ (data.last_name ? ' ' + data.last_name : '');
|
||||
data.primary = data.is_primary_contact ? ' [Primary]' : '';
|
||||
|
||||
// prepare description
|
||||
var description = [];
|
||||
$.each([
|
||||
['phone', 'Tel'],
|
||||
['mobile_no', 'Mobile'],
|
||||
['email_id', 'Email'],
|
||||
['department', 'Department'],
|
||||
['designation', 'Designation']],
|
||||
function(i, v) {
|
||||
if(v[0] && data[v[0]]) {
|
||||
description.push(repl('<h6>%(label)s:</h6> %(value)s', {
|
||||
label: v[1],
|
||||
value: data[v[0]],
|
||||
}));
|
||||
}
|
||||
});
|
||||
data.description = description.join('<br />');
|
||||
|
||||
cur_frm.cscript.render_row_in_wrapper(wrapper, data, 'Contact');
|
||||
}
|
||||
|
||||
cur_frm.cscript.render_address_row = function(wrapper, data) {
|
||||
// prepare data
|
||||
data.fullname = data.address_type;
|
||||
data.primary = '';
|
||||
if (data.is_primary_address) data.primary += ' [Preferred for Billing]';
|
||||
if (data.is_shipping_address) data.primary += ' [Preferred for Shipping]';
|
||||
|
||||
// prepare address
|
||||
var address = [];
|
||||
$.each(['address_line1', 'address_line2', 'city', 'state', 'country', 'pincode'],
|
||||
function(i, v) {
|
||||
if(data[v]) address.push(data[v]);
|
||||
});
|
||||
|
||||
data.address = address.join('<br />');
|
||||
data.address = "<p class='address-list'>" + data.address + "</p>";
|
||||
|
||||
// prepare description
|
||||
var description = [];
|
||||
$.each([
|
||||
['address', 'Address'],
|
||||
['phone', 'Tel'],
|
||||
['fax', 'Fax'],
|
||||
['email_id', 'Email']],
|
||||
function(i, v) {
|
||||
if(data[v[0]]) {
|
||||
description.push(repl('<h6>%(label)s:</h6> %(value)s', {
|
||||
label: v[1],
|
||||
value: data[v[0]],
|
||||
}));
|
||||
}
|
||||
});
|
||||
data.description = description.join('<br />');
|
||||
|
||||
cur_frm.cscript.render_row_in_wrapper(wrapper, data, 'Address');
|
||||
|
||||
$(wrapper).find('p.address-list').css({
|
||||
'padding-left': '10px',
|
||||
'margin-bottom': '-10px'
|
||||
});
|
||||
}
|
||||
|
||||
cur_frm.cscript.render_row_in_wrapper = function(wrapper, data, doctype) {
|
||||
// render
|
||||
var $wrapper = $(wrapper);
|
||||
|
||||
data.doctype = doctype.toLowerCase();
|
||||
|
||||
$wrapper.append(repl("\
|
||||
<h4><a class='link_type'>%(fullname)s</a>%(primary)s</h4>\
|
||||
<div class='description'>\
|
||||
<p>%(description)s</p>\
|
||||
<p><a class='delete link_type'>delete this %(doctype)s</a></p>\
|
||||
</div>", data));
|
||||
|
||||
// make link
|
||||
$wrapper.find('h4 a.link_type').click(function() {
|
||||
loaddoc(doctype, data.name);
|
||||
});
|
||||
|
||||
// css
|
||||
$wrapper.css({ 'margin': '0px' });
|
||||
$wrapper.find('div.description').css({
|
||||
'padding': '5px 2px',
|
||||
'line-height': '150%',
|
||||
});
|
||||
$wrapper.find('h6').css({ 'display': 'inline-block' });
|
||||
|
||||
// show delete
|
||||
var $delete_doc = $wrapper.find('a.delete');
|
||||
if (frappe.model.can_delete(doctype))
|
||||
$delete_doc.toggle(true);
|
||||
else
|
||||
$delete_doc.toggle(false);
|
||||
|
||||
$delete_doc.css({ 'padding-left': '0px' });
|
||||
|
||||
$delete_doc.click(function() {
|
||||
cur_frm.cscript.delete_doc(doctype, data.name);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
cur_frm.cscript.delete_doc = function(doctype, name) {
|
||||
// confirm deletion
|
||||
var go_ahead = confirm(__("Delete {0} {1}?", [doctype, name]));
|
||||
if (!go_ahead) return;
|
||||
|
||||
frappe.model.delete_doc(doctype, name, function(r) {
|
||||
if (!r.exc) {
|
||||
var list_name = doctype.toLowerCase() + '_list';
|
||||
cur_frm[list_name].run();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Render List
|
||||
cur_frm.cscript.render_list = function(doc, doctype, wrapper, ListView, make_new_doc) {
|
||||
frappe.model.with_doctype(doctype, function(r) {
|
||||
if((r && r['403']) || frappe.boot.user.all_read.indexOf(doctype)===-1) {
|
||||
return;
|
||||
}
|
||||
var RecordListView = frappe.views.RecordListView.extend({
|
||||
default_docstatus: ['0', '1', '2'],
|
||||
default_filters: [
|
||||
[doctype, doc.doctype.toLowerCase().replace(" ", "_"), '=', doc.name],
|
||||
],
|
||||
});
|
||||
|
||||
if (make_new_doc) {
|
||||
RecordListView = RecordListView.extend({
|
||||
make_new_doc: make_new_doc,
|
||||
});
|
||||
}
|
||||
|
||||
var record_list_view = new RecordListView(doctype, wrapper, ListView);
|
||||
if (!cur_frm[doctype.toLowerCase().replace(" ", "_") + "_list"]) {
|
||||
cur_frm[doctype.toLowerCase().replace(" ", "_") + "_list"] = record_list_view;
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -1,48 +0,0 @@
|
||||
{
|
||||
"creation": "2012-03-27 14:36:19.000000",
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"fields": [
|
||||
{
|
||||
"fieldname": "header",
|
||||
"fieldtype": "Text",
|
||||
"in_list_view": 1,
|
||||
"label": "Header",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "customer_intro",
|
||||
"fieldtype": "Text",
|
||||
"in_list_view": 1,
|
||||
"label": "Customer Intro",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "supplier_intro",
|
||||
"fieldtype": "Text",
|
||||
"in_list_view": 1,
|
||||
"label": "Supplier Intro",
|
||||
"permlevel": 0
|
||||
}
|
||||
],
|
||||
"idx": 1,
|
||||
"in_create": 1,
|
||||
"issingle": 1,
|
||||
"modified": "2013-12-20 19:23:02.000000",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Setup",
|
||||
"name": "Contact Control",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"create": 0,
|
||||
"email": 1,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"role": "System Manager",
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"read_only": 1
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
# 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.document import Document
|
||||
|
||||
class ContactControl(Document):
|
||||
pass
|
||||
@@ -1,12 +1,6 @@
|
||||
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
|
||||
// License: GNU General Public License v3. See license.txt
|
||||
|
||||
{% include 'setup/doctype/contact_control/contact_control.js' %};
|
||||
|
||||
cur_frm.cscript.onload = function(doc,dt,dn){
|
||||
|
||||
}
|
||||
|
||||
cur_frm.cscript.refresh = function(doc,dt,dn){
|
||||
|
||||
if(doc.__islocal){
|
||||
@@ -15,8 +9,8 @@ cur_frm.cscript.refresh = function(doc,dt,dn){
|
||||
else{
|
||||
unhide_field(['address_html', 'contact_html']);
|
||||
// make lists
|
||||
cur_frm.cscript.make_address(doc,dt,dn);
|
||||
cur_frm.cscript.make_contact(doc,dt,dn);
|
||||
|
||||
erpnext.utils.render_address_and_contact(cur_frm)
|
||||
|
||||
if (doc.show_in_website) {
|
||||
cur_frm.set_intro(__("Published on website at: {0}",
|
||||
@@ -25,57 +19,6 @@ cur_frm.cscript.refresh = function(doc,dt,dn){
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
cur_frm.cscript.make_address = function() {
|
||||
if(!cur_frm.address_list) {
|
||||
cur_frm.address_list = new frappe.ui.Listing({
|
||||
parent: cur_frm.fields_dict['address_html'].wrapper,
|
||||
page_length: 2,
|
||||
new_doctype: "Address",
|
||||
custom_new_doc: function(doctype) {
|
||||
var address = frappe.model.make_new_doc_and_get_name('Address');
|
||||
address = locals['Address'][address];
|
||||
address.sales_partner = cur_frm.doc.name;
|
||||
address.address_title = cur_frm.doc.name;
|
||||
address.address_type = "Office";
|
||||
frappe.set_route("Form", "Address", address.name);
|
||||
},
|
||||
get_query: function() {
|
||||
return "select name, address_type, address_line1, address_line2, city, state, country, pincode, fax, email_id, phone, is_primary_address, is_shipping_address from tabAddress where sales_partner='" +
|
||||
cur_frm.doc.name.replace(/'/g, "\\'") + "' and docstatus != 2 order by is_primary_address desc"
|
||||
},
|
||||
as_dict: 1,
|
||||
no_results_message: __('No addresses created'),
|
||||
render_row: cur_frm.cscript.render_address_row,
|
||||
});
|
||||
}
|
||||
cur_frm.address_list.run();
|
||||
}
|
||||
|
||||
cur_frm.cscript.make_contact = function() {
|
||||
if(!cur_frm.contact_list) {
|
||||
cur_frm.contact_list = new frappe.ui.Listing({
|
||||
parent: cur_frm.fields_dict['contact_html'].wrapper,
|
||||
page_length: 2,
|
||||
new_doctype: "Contact",
|
||||
custom_new_doc: function(doctype) {
|
||||
var contact = frappe.model.make_new_doc_and_get_name('Contact');
|
||||
contact = locals['Contact'][contact];
|
||||
contact.sales_partner = cur_frm.doc.name;
|
||||
frappe.set_route("Form", "Contact", contact.name);
|
||||
},
|
||||
get_query: function() {
|
||||
return "select name, first_name, last_name, email_id, phone, mobile_no, department, designation, is_primary_contact from tabContact where sales_partner='" +
|
||||
cur_frm.doc.name.replace(/'/g, "\\'") + "' and docstatus != 2 order by is_primary_contact desc"
|
||||
},
|
||||
as_dict: 1,
|
||||
no_results_message: __('No contacts created'),
|
||||
render_row: cur_frm.cscript.render_contact_row,
|
||||
});
|
||||
}
|
||||
cur_frm.contact_list.run();
|
||||
}
|
||||
|
||||
cur_frm.fields_dict['partner_target_details'].grid.get_field("item_group").get_query = function(doc, dt, dn) {
|
||||
return{
|
||||
filters:{ 'is_group': "No" }
|
||||
|
||||
@@ -5,11 +5,16 @@ from __future__ import unicode_literals
|
||||
import frappe
|
||||
from frappe.utils import cstr, filter_strip_join
|
||||
from frappe.website.website_generator import WebsiteGenerator
|
||||
from erpnext.utilities.address_and_contact import load_address_and_contact
|
||||
|
||||
class SalesPartner(WebsiteGenerator):
|
||||
page_title_field = "partner_name"
|
||||
condition_field = "show_in_website"
|
||||
template = "templates/generators/sales_partner.html"
|
||||
def onload(self):
|
||||
"""Load address and contacts in `__onload`"""
|
||||
load_address_and_contact(self, "sales_partner")
|
||||
|
||||
def autoname(self):
|
||||
self.name = self.partner_name
|
||||
|
||||
|
||||
@@ -59,15 +59,31 @@ frappe.pages['setup-wizard'].onload = function(wrapper) {
|
||||
title: __("Select Your Language"),
|
||||
icon: "icon-globe",
|
||||
fields: [
|
||||
{"fieldname": "language", "label": __("Language"), "fieldtype": "Select",
|
||||
options: ["english", "العربية", "deutsch", "ελληνικά", "español", "français", "हिंदी", "hrvatski",
|
||||
"italiano", "nederlands", "polski", "português brasileiro", "português", "српски", "தமிழ்",
|
||||
"ไทย", "中国(简体)", "中國(繁體)"], reqd:1},
|
||||
{
|
||||
"fieldname": "language", "label": __("Language"), "fieldtype": "Select",
|
||||
reqd:1
|
||||
},
|
||||
],
|
||||
help: __("Welcome to ERPNext. Please select your language to begin the Setup Wizard."),
|
||||
onload: function(slide) {
|
||||
var me = this;
|
||||
|
||||
if (!this.language_list) {
|
||||
frappe.call({
|
||||
method: "erpnext.setup.page.setup_wizard.setup_wizard.load_languages",
|
||||
callback: function(r) {
|
||||
me.language_list = r.message;
|
||||
slide.get_input("language")
|
||||
.add_options(r.message)
|
||||
.val("english");
|
||||
}
|
||||
})
|
||||
} else {
|
||||
slide.get_input("language").add_options(this.language_list);
|
||||
}
|
||||
|
||||
slide.get_input("language").on("change", function() {
|
||||
var lang = $(this).val();
|
||||
var lang = $(this).val() || "english";
|
||||
frappe._messages = {};
|
||||
frappe.call({
|
||||
method: "erpnext.setup.page.setup_wizard.setup_wizard.load_messages",
|
||||
|
||||
@@ -434,4 +434,6 @@ def load_messages(language):
|
||||
send_translations(m)
|
||||
return lang
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def load_languages():
|
||||
return sorted(get_lang_dict().keys())
|
||||
|
||||
@@ -23,7 +23,7 @@ class Bin(Document):
|
||||
if (not getattr(self, f, None)) or (not self.get(f)):
|
||||
self.set(f, 0.0)
|
||||
|
||||
def update_stock(self, args):
|
||||
def update_stock(self, args, allow_negative_stock=False):
|
||||
self.update_qty(args)
|
||||
|
||||
if args.get("actual_qty") or args.get("voucher_type") == "Stock Reconciliation":
|
||||
@@ -38,7 +38,7 @@ class Bin(Document):
|
||||
"warehouse": self.warehouse,
|
||||
"posting_date": args.get("posting_date"),
|
||||
"posting_time": args.get("posting_time")
|
||||
})
|
||||
}, allow_negative_stock=allow_negative_stock)
|
||||
|
||||
def update_qty(self, args):
|
||||
# update the stock values (for current quantities)
|
||||
|
||||
@@ -178,7 +178,7 @@
|
||||
{
|
||||
"fieldname": "po_no",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 1,
|
||||
"hidden": 0,
|
||||
"label": "Customer's Purchase Order No",
|
||||
"no_copy": 0,
|
||||
"oldfieldname": "po_no",
|
||||
@@ -434,6 +434,15 @@
|
||||
"fieldtype": "Section Break",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "other_charges_total_export",
|
||||
"fieldtype": "Currency",
|
||||
"label": "Taxes and Charges Total",
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "other_charges_total",
|
||||
"fieldtype": "Currency",
|
||||
@@ -452,22 +461,23 @@
|
||||
"fieldtype": "Column Break",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "other_charges_total_export",
|
||||
"fieldtype": "Currency",
|
||||
"label": "Taxes and Charges Total",
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "discount_amount",
|
||||
"fieldtype": "Currency",
|
||||
"label": "Discount Amount",
|
||||
"options": "Company:company:default_currency",
|
||||
"options": "currency",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "base_discount_amount",
|
||||
"fieldtype": "Currency",
|
||||
"label": "Discount Amount (Company Currency)",
|
||||
"options": "Company:company:default_currency",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "totals",
|
||||
"fieldtype": "Section Break",
|
||||
@@ -1013,7 +1023,7 @@
|
||||
"idx": 1,
|
||||
"in_create": 0,
|
||||
"is_submittable": 1,
|
||||
"modified": "2014-09-09 05:35:30.700911",
|
||||
"modified": "2015-01-12 16:56:39.975961",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Stock",
|
||||
"name": "Delivery Note",
|
||||
|
||||
@@ -229,7 +229,7 @@ class Item(WebsiteGenerator):
|
||||
if not frappe.db.exists("Item", newdn):
|
||||
frappe.throw(_("Item {0} does not exist").format(newdn))
|
||||
|
||||
field_list = ["stock_uom", "is_stock_item", "has_serial_no", "has_batch_no"]
|
||||
field_list = ["stock_uom", "is_stock_item", "has_serial_no", "has_batch_no", "is_manufactured_item"]
|
||||
new_properties = [cstr(d) for d in frappe.db.get_value("Item", newdn, field_list)]
|
||||
if new_properties != [cstr(self.get(fld)) for fld in field_list]:
|
||||
frappe.throw(_("To merge, following properties must be same for both items")
|
||||
|
||||
@@ -18,17 +18,6 @@
|
||||
"permlevel": 0,
|
||||
"width": "50%"
|
||||
},
|
||||
{
|
||||
"fieldname": "account",
|
||||
"fieldtype": "Link",
|
||||
"in_list_view": 1,
|
||||
"label": "Account",
|
||||
"options": "Account",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"read_only": 0,
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "amount",
|
||||
"fieldtype": "Currency",
|
||||
@@ -40,7 +29,7 @@
|
||||
}
|
||||
],
|
||||
"istable": 1,
|
||||
"modified": "2014-08-08 13:12:02.594698",
|
||||
"modified": "2015-01-21 11:51:33.964438",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Stock",
|
||||
"name": "Landed Cost Taxes and Charges",
|
||||
|
||||
@@ -5,10 +5,10 @@
|
||||
frappe.provide("erpnext.stock");
|
||||
frappe.require("assets/erpnext/js/controllers/stock_controller.js");
|
||||
|
||||
erpnext.stock.LandedCostVoucher = erpnext.stock.StockController.extend({
|
||||
erpnext.stock.LandedCostVoucher = erpnext.stock.StockController.extend({
|
||||
setup: function() {
|
||||
var me = this;
|
||||
this.frm.fields_dict.landed_cost_purchase_receipts.grid.get_field('purchase_receipt').get_query =
|
||||
this.frm.fields_dict.landed_cost_purchase_receipts.grid.get_field('purchase_receipt').get_query =
|
||||
function() {
|
||||
if(!me.frm.doc.company) msgprint(__("Please enter company first"));
|
||||
return {
|
||||
@@ -18,53 +18,44 @@ erpnext.stock.LandedCostVoucher = erpnext.stock.StockController.extend({
|
||||
]
|
||||
}
|
||||
};
|
||||
|
||||
this.frm.fields_dict.landed_cost_taxes_and_charges.grid.get_field('account').get_query = function() {
|
||||
if(!me.frm.doc.company) msgprint(__("Please enter company first"));
|
||||
return {
|
||||
filters:[
|
||||
['Account', 'group_or_ledger', '=', 'Ledger'],
|
||||
['Account', 'account_type', 'in', ['Tax', 'Chargeable', 'Expense Account']],
|
||||
['Account', 'company', '=', me.frm.doc.company]
|
||||
]
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
this.frm.add_fetch("purchase_receipt", "supplier", "supplier");
|
||||
this.frm.add_fetch("purchase_receipt", "posting_date", "posting_date");
|
||||
this.frm.add_fetch("purchase_receipt", "grand_total", "grand_total");
|
||||
|
||||
},
|
||||
|
||||
|
||||
},
|
||||
|
||||
refresh: function() {
|
||||
var help_content = ['<table class="table table-bordered" style="background-color: #f9f9f9;">',
|
||||
'<tr><td>',
|
||||
'<h4><i class="icon-hand-right"></i> ',
|
||||
__('Notes'),
|
||||
':</h4>',
|
||||
'<ul>',
|
||||
'<li>',
|
||||
__("Charges will be distributed proportionately based on item amount"),
|
||||
'</li>',
|
||||
'<li>',
|
||||
__("Remove item if charges is not applicable to that item"),
|
||||
'</li>',
|
||||
'<li>',
|
||||
__("Charges are updated in Purchase Receipt against each item"),
|
||||
'</li>',
|
||||
'<li>',
|
||||
__("Item valuation rate is recalculated considering landed cost voucher amount"),
|
||||
'</li>',
|
||||
'<li>',
|
||||
__("Stock Ledger Entries and GL Entries are reposted for the selected Purchase Receipts"),
|
||||
'</li>',
|
||||
'</ul>',
|
||||
'</td></tr>',
|
||||
'</table>'].join("\n");
|
||||
var help_content = [
|
||||
'<br><br>',
|
||||
'<table class="table table-bordered" style="background-color: #f9f9f9;">',
|
||||
'<tr><td>',
|
||||
'<h4><i class="icon-hand-right"></i> ',
|
||||
__('Notes'),
|
||||
':</h4>',
|
||||
'<ul>',
|
||||
'<li>',
|
||||
__("Charges will be distributed proportionately based on item qty or amount, as per your selection"),
|
||||
'</li>',
|
||||
'<li>',
|
||||
__("Remove item if charges is not applicable to that item"),
|
||||
'</li>',
|
||||
'<li>',
|
||||
__("Charges are updated in Purchase Receipt against each item"),
|
||||
'</li>',
|
||||
'<li>',
|
||||
__("Item valuation rate is recalculated considering landed cost voucher amount"),
|
||||
'</li>',
|
||||
'<li>',
|
||||
__("Stock Ledger Entries and GL Entries are reposted for the selected Purchase Receipts"),
|
||||
'</li>',
|
||||
'</ul>',
|
||||
'</td></tr>',
|
||||
'</table>'].join("\n");
|
||||
|
||||
set_field_options("landed_cost_help", help_content);
|
||||
},
|
||||
|
||||
|
||||
get_items_from_purchase_receipts: function() {
|
||||
var me = this;
|
||||
if(!this.frm.doc.landed_cost_purchase_receipts.length) {
|
||||
@@ -75,13 +66,13 @@ erpnext.stock.LandedCostVoucher = erpnext.stock.StockController.extend({
|
||||
method: "get_items_from_purchase_receipts"
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
},
|
||||
|
||||
amount: function() {
|
||||
this.set_total_taxes_and_charges();
|
||||
this.set_applicable_charges_for_item();
|
||||
},
|
||||
|
||||
|
||||
set_total_taxes_and_charges: function() {
|
||||
total_taxes_and_charges = 0.0;
|
||||
$.each(this.frm.doc.landed_cost_taxes_and_charges, function(i, d) {
|
||||
@@ -89,7 +80,7 @@ erpnext.stock.LandedCostVoucher = erpnext.stock.StockController.extend({
|
||||
});
|
||||
cur_frm.set_value("total_taxes_and_charges", total_taxes_and_charges);
|
||||
},
|
||||
|
||||
|
||||
set_applicable_charges_for_item: function() {
|
||||
var me = this;
|
||||
if(this.frm.doc.landed_cost_taxes_and_charges.length) {
|
||||
@@ -97,14 +88,14 @@ erpnext.stock.LandedCostVoucher = erpnext.stock.StockController.extend({
|
||||
$.each(this.frm.doc.landed_cost_items, function(i, d) {
|
||||
total_item_cost += flt(d.amount)
|
||||
});
|
||||
|
||||
|
||||
$.each(this.frm.doc.landed_cost_items, function(i, item) {
|
||||
item.applicable_charges = flt(item.amount) * flt(me.frm.doc.total_taxes_and_charges) / flt(total_item_cost)
|
||||
});
|
||||
refresh_field("landed_cost_items");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
|
||||
cur_frm.script_manager.make(erpnext.stock.LandedCostVoucher);
|
||||
cur_frm.script_manager.make(erpnext.stock.LandedCostVoucher);
|
||||
|
||||
@@ -44,6 +44,13 @@
|
||||
"options": "Landed Cost Taxes and Charges",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "sec_break1",
|
||||
"fieldtype": "Section Break",
|
||||
"options": "Simple",
|
||||
"permlevel": 0,
|
||||
"precision": ""
|
||||
},
|
||||
{
|
||||
"fieldname": "total_taxes_and_charges",
|
||||
"fieldtype": "Currency",
|
||||
@@ -53,13 +60,6 @@
|
||||
"read_only": 1,
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "landed_cost_help",
|
||||
"fieldtype": "HTML",
|
||||
"label": "Landed Cost Help",
|
||||
"options": "",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "amended_from",
|
||||
"fieldtype": "Link",
|
||||
@@ -69,11 +69,40 @@
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "col_break1",
|
||||
"fieldtype": "Column Break",
|
||||
"permlevel": 0,
|
||||
"precision": ""
|
||||
},
|
||||
{
|
||||
"default": "Amount",
|
||||
"fieldname": "distribute_charges_based_on",
|
||||
"fieldtype": "Select",
|
||||
"label": "Distribute Charges Based On",
|
||||
"options": "\nQty\nAmount",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "sec_break2",
|
||||
"fieldtype": "Section Break",
|
||||
"permlevel": 0,
|
||||
"precision": ""
|
||||
},
|
||||
{
|
||||
"fieldname": "landed_cost_help",
|
||||
"fieldtype": "HTML",
|
||||
"label": "Landed Cost Help",
|
||||
"options": "",
|
||||
"permlevel": 0
|
||||
}
|
||||
],
|
||||
"icon": "icon-usd",
|
||||
"is_submittable": 1,
|
||||
"modified": "2014-09-01 12:05:46.834513",
|
||||
"modified": "2015-01-21 11:56:37.698326",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Stock",
|
||||
"name": "Landed Cost Voucher",
|
||||
|
||||
@@ -7,9 +7,6 @@ from frappe import _
|
||||
from frappe.utils import flt
|
||||
from frappe.model.document import Document
|
||||
|
||||
from erpnext.stock.utils import get_valuation_method
|
||||
from erpnext.stock.stock_ledger import get_previous_sle
|
||||
|
||||
class LandedCostVoucher(Document):
|
||||
def get_items_from_purchase_receipts(self):
|
||||
self.set("landed_cost_items", [])
|
||||
@@ -69,10 +66,11 @@ class LandedCostVoucher(Document):
|
||||
self.total_taxes_and_charges = sum([flt(d.amount) for d in self.get("landed_cost_taxes_and_charges")])
|
||||
|
||||
def set_applicable_charges_for_item(self):
|
||||
total_item_cost = sum([flt(d.amount) for d in self.get("landed_cost_items")])
|
||||
based_on = self.distribute_charges_based_on.lower()
|
||||
total = sum([flt(d.get(based_on)) for d in self.get("landed_cost_items")])
|
||||
|
||||
for item in self.get("landed_cost_items"):
|
||||
item.applicable_charges = flt(item.amount) * flt(self.total_taxes_and_charges) / flt(total_item_cost)
|
||||
item.applicable_charges = flt(item.get(based_on)) * flt(self.total_taxes_and_charges) / flt(total)
|
||||
|
||||
def on_submit(self):
|
||||
self.update_landed_cost()
|
||||
@@ -92,12 +90,12 @@ class LandedCostVoucher(Document):
|
||||
pr.update_valuation_rate("purchase_receipt_details")
|
||||
|
||||
# save will update landed_cost_voucher_amount and voucher_amount in PR,
|
||||
# as those fields are ellowed to edit after submit
|
||||
# as those fields are allowed to edit after submit
|
||||
pr.save()
|
||||
|
||||
# update stock & gl entries for cancelled state of PR
|
||||
pr.docstatus = 2
|
||||
pr.update_stock_ledger()
|
||||
pr.update_stock_ledger(allow_negative_stock=True)
|
||||
pr.make_gl_entries_on_cancel()
|
||||
|
||||
# update stock & gl entries for submit state of PR
|
||||
|
||||
@@ -27,7 +27,7 @@ def get_bin_qty(item, warehouse):
|
||||
where item_code = %s and warehouse = %s""", (item, warehouse), as_dict = 1)
|
||||
return det and det[0] or ''
|
||||
|
||||
def update_packing_list_item(obj, packing_item_code, qty, warehouse, line, packing_list_idx):
|
||||
def update_packing_list_item(obj, packing_item_code, qty, warehouse, line):
|
||||
bin = get_bin_qty(packing_item_code, warehouse)
|
||||
item = get_packing_item_details(packing_item_code)
|
||||
|
||||
@@ -54,9 +54,7 @@ def update_packing_list_item(obj, packing_item_code, qty, warehouse, line, packi
|
||||
pi.warehouse = warehouse
|
||||
if not pi.batch_no:
|
||||
pi.batch_no = cstr(line.get("batch_no"))
|
||||
pi.idx = packing_list_idx
|
||||
|
||||
packing_list_idx += 1
|
||||
|
||||
|
||||
def make_packing_list(obj, item_table_fieldname):
|
||||
@@ -64,13 +62,11 @@ def make_packing_list(obj, item_table_fieldname):
|
||||
|
||||
if obj.get("_action") and obj._action == "update_after_submit": return
|
||||
|
||||
packing_list_idx = 0
|
||||
parent_items = []
|
||||
for d in obj.get(item_table_fieldname):
|
||||
if frappe.db.get_value("Sales BOM", {"new_item_code": d.item_code}):
|
||||
for i in get_sales_bom_items(d.item_code):
|
||||
update_packing_list_item(obj, i['item_code'], flt(i['qty'])*flt(d.qty),
|
||||
d.warehouse, d, packing_list_idx)
|
||||
update_packing_list_item(obj, i['item_code'], flt(i['qty'])*flt(d.qty), d.warehouse, d)
|
||||
|
||||
if [d.item_code, d.name] not in parent_items:
|
||||
parent_items.append([d.item_code, d.name])
|
||||
|
||||
@@ -166,4 +166,4 @@ def item_details(doctype, txt, searchfield, start, page_len, filters):
|
||||
and %s like "%s" %s
|
||||
limit %s, %s """ % ("%s", searchfield, "%s",
|
||||
get_match_cond(doctype), "%s", "%s"),
|
||||
(filters["delivery_note"], "%%%s%%" % txt, start, page_len))
|
||||
((filters or {}).get("delivery_note"), "%%%s%%" % txt, start, page_len))
|
||||
|
||||
@@ -129,7 +129,7 @@ class PurchaseReceipt(BuyingController):
|
||||
if not d.prevdoc_docname:
|
||||
frappe.throw(_("Purchase Order number required for Item {0}").format(d.item_code))
|
||||
|
||||
def update_stock_ledger(self):
|
||||
def update_stock_ledger(self, allow_negative_stock=False):
|
||||
sl_entries = []
|
||||
stock_items = self.get_stock_items()
|
||||
|
||||
@@ -153,7 +153,7 @@ class PurchaseReceipt(BuyingController):
|
||||
}))
|
||||
|
||||
self.bk_flush_supp_wh(sl_entries)
|
||||
self.make_sl_entries(sl_entries)
|
||||
self.make_sl_entries(sl_entries, allow_negative_stock=allow_negative_stock)
|
||||
|
||||
def update_ordered_qty(self):
|
||||
po_map = {}
|
||||
|
||||
@@ -253,8 +253,9 @@ def update_serial_nos(sle, item_det):
|
||||
from frappe.model.naming import make_autoname
|
||||
serial_nos = []
|
||||
for i in xrange(cint(sle.actual_qty)):
|
||||
serial_nos.append(make_autoname(item_det.serial_no_series))
|
||||
serial_nos.append(make_autoname(item_det.serial_no_series, "Serial No"))
|
||||
frappe.db.set(sle, "serial_no", "\n".join(serial_nos))
|
||||
validate_serial_no(sle, item_det)
|
||||
|
||||
if sle.serial_no:
|
||||
serial_nos = get_serial_nos(sle.serial_no)
|
||||
|
||||
@@ -45,7 +45,6 @@ class StockEntry(StockController):
|
||||
self.validate_warehouse(pro_obj)
|
||||
self.validate_production_order()
|
||||
self.get_stock_and_rate()
|
||||
self.validate_incoming_rate()
|
||||
self.validate_bom()
|
||||
self.validate_finished_goods()
|
||||
self.validate_return_reference_doc()
|
||||
@@ -190,16 +189,10 @@ class StockEntry(StockController):
|
||||
+ self.production_order + ":" + ", ".join(other_ste), DuplicateEntryForProductionOrderError)
|
||||
|
||||
def validate_valuation_rate(self):
|
||||
if self.purpose in ["Manufacture", "Repack"]:
|
||||
valuation_at_source, valuation_at_target = 0, 0
|
||||
for d in self.get("mtn_details"):
|
||||
if d.s_warehouse and not d.t_warehouse:
|
||||
valuation_at_source += flt(d.amount)
|
||||
if d.t_warehouse and not d.s_warehouse:
|
||||
valuation_at_target += flt(d.amount)
|
||||
for d in self.get('mtn_details'):
|
||||
if d.t_warehouse:
|
||||
self.validate_value("incoming_rate", ">", 0, d, raise_exception=IncorrectValuationRateError)
|
||||
|
||||
if valuation_at_target < valuation_at_source:
|
||||
frappe.throw(_("Total valuation for manufactured or repacked item(s) can not be less than total valuation of raw materials"))
|
||||
|
||||
def set_total_amount(self):
|
||||
self.total_amount = sum([flt(item.amount) for item in self.get("mtn_details")])
|
||||
@@ -241,7 +234,7 @@ class StockEntry(StockController):
|
||||
incoming_rate = flt(self.get_incoming_rate(args), self.precision("incoming_rate", d))
|
||||
if incoming_rate > 0:
|
||||
d.incoming_rate = incoming_rate
|
||||
d.amount = flt(d.transfer_qty) * flt(d.incoming_rate)
|
||||
d.amount = flt(flt(d.transfer_qty) * flt(d.incoming_rate), self.precision("amount", d))
|
||||
if not d.t_warehouse:
|
||||
raw_material_cost += flt(d.amount)
|
||||
|
||||
@@ -255,8 +248,9 @@ class StockEntry(StockController):
|
||||
if d.bom_no:
|
||||
bom = frappe.db.get_value("BOM", d.bom_no, ["operating_cost", "quantity"], as_dict=1)
|
||||
operation_cost_per_unit = flt(bom.operating_cost) / flt(bom.quantity)
|
||||
d.incoming_rate = operation_cost_per_unit + (raw_material_cost + flt(self.total_fixed_cost)) / flt(d.transfer_qty)
|
||||
d.amount = flt(d.transfer_qty) * flt(d.incoming_rate)
|
||||
d.incoming_rate = flt(operation_cost_per_unit +
|
||||
(raw_material_cost + flt(self.total_fixed_cost)) / flt(d.transfer_qty), self.precision("incoming_rate", d))
|
||||
d.amount = flt(flt(d.transfer_qty) * flt(d.incoming_rate), self.precision("transfer_qty", d))
|
||||
break
|
||||
|
||||
def get_incoming_rate(self, args):
|
||||
@@ -280,11 +274,6 @@ class StockEntry(StockController):
|
||||
|
||||
return incoming_rate
|
||||
|
||||
def validate_incoming_rate(self):
|
||||
for d in self.get('mtn_details'):
|
||||
if d.t_warehouse:
|
||||
self.validate_value("incoming_rate", ">", 0, d, raise_exception=IncorrectValuationRateError)
|
||||
|
||||
def validate_bom(self):
|
||||
for d in self.get('mtn_details'):
|
||||
if d.bom_no and not frappe.db.sql("""select name from `tabBOM`
|
||||
|
||||
@@ -936,6 +936,8 @@ def make_stock_entry(item, source, target, qty, incoming_rate=None):
|
||||
"incoming_rate": incoming_rate,
|
||||
"conversion_factor": 1.0
|
||||
})
|
||||
s.posting_date= "2013-01-01"
|
||||
s.fiscal_year= "_Test Fiscal Year 2013"
|
||||
s.insert()
|
||||
s.submit()
|
||||
return s
|
||||
|
||||
@@ -32,16 +32,15 @@ class StockLedgerEntry(Document):
|
||||
|
||||
#check for item quantity available in stock
|
||||
def actual_amt_check(self):
|
||||
if self.batch_no:
|
||||
if self.batch_no and not self.get("allow_negative_stock"):
|
||||
batch_bal_after_transaction = flt(frappe.db.sql("""select sum(actual_qty)
|
||||
from `tabStock Ledger Entry`
|
||||
where warehouse=%s and item_code=%s and batch_no=%s""",
|
||||
(self.warehouse, self.item_code, self.batch_no))[0][0])
|
||||
|
||||
if batch_bal_after_transaction < 0:
|
||||
frappe.throw(_("Negative balance in Batch {0} for Item {1} at Warehouse {2} on {3} {4}").format(\
|
||||
batch_bal_after_transaction - self.actual_qty, self.item_code, self.warehouse,
|
||||
formatdate(self.posting_date), self.posting_time))
|
||||
frappe.throw(_("Stock balance in Batch {0} will become negative {1} for Item {2} at Warehouse {3}")
|
||||
.format(self.batch_no, batch_bal_after_transaction, self.item_code, self.warehouse))
|
||||
|
||||
def validate_mandatory(self):
|
||||
mandatory = ['warehouse','posting_date','voucher_type','voucher_no','company']
|
||||
|
||||
@@ -153,8 +153,8 @@ class StockReconciliation(StockController):
|
||||
if row.valuation_rate in ("", None):
|
||||
row.valuation_rate = previous_sle.get("valuation_rate")
|
||||
|
||||
# if row.qty and not row.valuation_rate:
|
||||
# frappe.throw(_("Valuation Rate required for Item {0}").format(row.item_code))
|
||||
if row.qty and not row.valuation_rate:
|
||||
frappe.throw(_("Valuation Rate required for Item {0}").format(row.item_code))
|
||||
|
||||
self.insert_entries(row)
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
from frappe import _, throw
|
||||
from frappe.utils import flt, cint, add_days
|
||||
from frappe.utils import flt, cint, add_days, cstr
|
||||
import json
|
||||
from erpnext.accounts.doctype.pricing_rule.pricing_rule import get_pricing_rule_for_item
|
||||
from erpnext.setup.utils import get_exchange_rate
|
||||
@@ -140,7 +140,7 @@ def get_basic_details(args, item_doc):
|
||||
|
||||
"item_code": item.name,
|
||||
"item_name": item.item_name,
|
||||
"description": item.description_html or item.description,
|
||||
"description": cstr(item.description_html).strip() or cstr(item.description).strip(),
|
||||
"warehouse": user_default_warehouse or args.warehouse or item.default_warehouse,
|
||||
"income_account": (item.income_account
|
||||
or args.income_account
|
||||
|
||||
@@ -14,7 +14,7 @@ class NegativeStockError(frappe.ValidationError): pass
|
||||
_exceptions = frappe.local('stockledger_exceptions')
|
||||
# _exceptions = []
|
||||
|
||||
def make_sl_entries(sl_entries, is_amended=None):
|
||||
def make_sl_entries(sl_entries, is_amended=None, allow_negative_stock=False):
|
||||
if sl_entries:
|
||||
from erpnext.stock.utils import update_bin
|
||||
|
||||
@@ -28,14 +28,14 @@ def make_sl_entries(sl_entries, is_amended=None):
|
||||
sle['actual_qty'] = -flt(sle['actual_qty'])
|
||||
|
||||
if sle.get("actual_qty") or sle.get("voucher_type")=="Stock Reconciliation":
|
||||
sle_id = make_entry(sle)
|
||||
sle_id = make_entry(sle, allow_negative_stock)
|
||||
|
||||
args = sle.copy()
|
||||
args.update({
|
||||
"sle_id": sle_id,
|
||||
"is_amended": is_amended
|
||||
})
|
||||
update_bin(args)
|
||||
update_bin(args, allow_negative_stock)
|
||||
|
||||
if cancel:
|
||||
delete_cancelled_entry(sl_entries[0].get('voucher_type'), sl_entries[0].get('voucher_no'))
|
||||
@@ -46,10 +46,11 @@ def set_as_cancel(voucher_type, voucher_no):
|
||||
where voucher_no=%s and voucher_type=%s""",
|
||||
(now(), frappe.session.user, voucher_type, voucher_no))
|
||||
|
||||
def make_entry(args):
|
||||
def make_entry(args, allow_negative_stock=False):
|
||||
args.update({"doctype": "Stock Ledger Entry"})
|
||||
sle = frappe.get_doc(args)
|
||||
sle.ignore_permissions = 1
|
||||
sle.allow_negative_stock=allow_negative_stock
|
||||
sle.insert()
|
||||
sle.submit()
|
||||
return sle.name
|
||||
@@ -58,7 +59,7 @@ def delete_cancelled_entry(voucher_type, voucher_no):
|
||||
frappe.db.sql("""delete from `tabStock Ledger Entry`
|
||||
where voucher_type=%s and voucher_no=%s""", (voucher_type, voucher_no))
|
||||
|
||||
def update_entries_after(args, allow_zero_rate=False, verbose=1):
|
||||
def update_entries_after(args, allow_zero_rate=False, allow_negative_stock=False, verbose=1):
|
||||
"""
|
||||
update valution rate and qty after transaction
|
||||
from the current time-bucket onwards
|
||||
@@ -73,6 +74,9 @@ def update_entries_after(args, allow_zero_rate=False, verbose=1):
|
||||
if not _exceptions:
|
||||
frappe.local.stockledger_exceptions = []
|
||||
|
||||
if not allow_negative_stock:
|
||||
allow_negative_stock = cint(frappe.db.get_default("allow_negative_stock"))
|
||||
|
||||
previous_sle = get_sle_before_datetime(args)
|
||||
|
||||
qty_after_transaction = flt(previous_sle.get("qty_after_transaction"))
|
||||
@@ -87,7 +91,7 @@ def update_entries_after(args, allow_zero_rate=False, verbose=1):
|
||||
stock_value_difference = 0.0
|
||||
|
||||
for sle in entries_to_fix:
|
||||
if sle.serial_no or not cint(frappe.db.get_default("allow_negative_stock")):
|
||||
if sle.serial_no or not allow_negative_stock:
|
||||
# validate negative stock for serialized items, fifo valuation
|
||||
# or when negative stock is not allowed for moving average
|
||||
if not validate_negative_stock(qty_after_transaction, sle):
|
||||
|
||||
@@ -52,11 +52,11 @@ def get_bin(item_code, warehouse):
|
||||
bin_obj.ignore_permissions = True
|
||||
return bin_obj
|
||||
|
||||
def update_bin(args):
|
||||
def update_bin(args, allow_negative_stock=False):
|
||||
is_stock_item = frappe.db.get_value('Item', args.get("item_code"), 'is_stock_item')
|
||||
if is_stock_item == 'Yes':
|
||||
bin = get_bin(args.get("item_code"), args.get("warehouse"))
|
||||
bin.update_stock(args)
|
||||
bin.update_stock(args, allow_negative_stock)
|
||||
return bin
|
||||
else:
|
||||
frappe.msgprint(_("Item {0} ignored since it is not a stock item").format(args.get("item_code")))
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<div class="col-xs-5 text-right">
|
||||
<label>{{ charge.get_formatted("description") }}</label></div>
|
||||
<div class="col-xs-7 text-right">
|
||||
{{ frappe.format_value(charge.tax_amount / doc.conversion_rate,
|
||||
{{ frappe.format_value(frappe.utils.flt(charge.tax_amount) / doc.conversion_rate,
|
||||
table_meta.get_field("tax_amount"), doc, currency=doc.currency) }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -85,7 +85,7 @@ Accounting,المحاسبة
|
||||
"Accounting entry frozen up to this date, nobody can do / modify entry except role specified below.",قيد محاسبي المجمدة تصل إلى هذا التاريخ، لا أحد يمكن أن تفعل / تعديل إدخال باستثناء دور المحددة أدناه.
|
||||
Accounting journal entries.,المحاسبة إدخالات دفتر اليومية.
|
||||
Accounts,حسابات
|
||||
Accounts Browser,متصفح الحسابات
|
||||
Accounts Browser,متصفح الحسابات
|
||||
Accounts Frozen Upto,حسابات مجمدة حتي
|
||||
Accounts Payable,ذمم دائنة
|
||||
Accounts Receivable,حسابات القبض
|
||||
@@ -253,8 +253,8 @@ Approving Role,الموافقة على دور
|
||||
Approving Role cannot be same as role the rule is Applicable To,الموافقة دور لا يمكن أن يكون نفس دور القاعدة تنطبق على
|
||||
Approving User,الموافقة العضو
|
||||
Approving User cannot be same as user the rule is Applicable To,الموافقة العضو لا يمكن أن يكون نفس المستخدم القاعدة تنطبق على
|
||||
Are you sure you want to STOP ,
|
||||
Are you sure you want to UNSTOP ,
|
||||
Are you sure you want to STOP ,Are you sure you want to STOP
|
||||
Are you sure you want to UNSTOP ,Are you sure you want to UNSTOP
|
||||
Arrear Amount,متأخرات المبلغ
|
||||
"As Production Order can be made for this item, it must be a stock item.",كما يمكن أن يتم ترتيب الإنتاج لهذا البند، يجب أن يكون بند الأوراق المالية .
|
||||
As per Stock UOM,وفقا للأوراق UOM
|
||||
@@ -283,7 +283,7 @@ Auto Accounting For Stock Settings,السيارات المحاسبة المال
|
||||
Auto Material Request,السيارات مادة طلب
|
||||
Auto-raise Material Request if quantity goes below re-order level in a warehouse,لصناعة السيارات في رفع طلب المواد إذا كمية يذهب دون مستوى إعادة الطلب في مستودع
|
||||
Automatically compose message on submission of transactions.,يؤلف تلقائيا رسالة على تقديم المعاملات.
|
||||
Automatically extract Job Applicants from a mail box ,
|
||||
Automatically extract Job Applicants from a mail box ,Automatically extract Job Applicants from a mail box
|
||||
Automatically extract Leads from a mail box e.g.,استخراج الشراء تلقائيا من صندوق البريد على سبيل المثال
|
||||
Automatically updated via Stock Entry of type Manufacture/Repack,تحديثها تلقائيا عن طريق إدخال الأسهم الصنع نوع / أعد حزم
|
||||
Automotive,السيارات
|
||||
@@ -410,8 +410,8 @@ Buying Settings,إعدادات الشراء
|
||||
"Buying must be checked, if Applicable For is selected as {0}",يجب أن يتم التحقق الشراء، إذا تم تحديد مطبق للك {0}
|
||||
C-Form,نموذج C-
|
||||
C-Form Applicable,C-نموذج قابل للتطبيق
|
||||
C-Form Invoice Detail, تفاصيل الفاتورة نموذج - س
|
||||
C-Form No,رقم النموذج - س
|
||||
C-Form Invoice Detail, تفاصيل الفاتورة نموذج - س
|
||||
C-Form No,رقم النموذج - س
|
||||
C-Form records,سجلات النموذج - س
|
||||
CENVAT Capital Goods,CENVAT السلع الرأسمالية
|
||||
CENVAT Edu Cess,CENVAT ايدو سيس
|
||||
@@ -510,8 +510,8 @@ Clearance Date,إزالة التاريخ
|
||||
Clearance Date not mentioned,إزالة التاريخ لم يرد ذكرها
|
||||
Clearance date cannot be before check date in row {0},تاريخ التخليص لا يمكن أن يكون قبل تاريخ الاختيار في الصف {0}
|
||||
Click on 'Make Sales Invoice' button to create a new Sales Invoice.,انقر على 'جعل مبيعات الفاتورة "الزر لإنشاء فاتورة مبيعات جديدة.
|
||||
Click on a link to get options to expand get options ,
|
||||
Client,عميل
|
||||
Click on a link to get options to expand get options ,Click on a link to get options to expand get options
|
||||
Client,عميل
|
||||
Close Balance Sheet and book Profit or Loss.,وثيقة الميزانية العمومية و كتاب الربح أو الخسارة .
|
||||
Closed,مغلق
|
||||
Closing (Cr),إغلاق (الكروم)
|
||||
@@ -840,13 +840,13 @@ Distributor,موزع
|
||||
Divorced,المطلقات
|
||||
Do Not Contact,عدم الاتصال
|
||||
Do not show any symbol like $ etc next to currencies.,لا تظهر أي رمز مثل $ الخ بجانب العملات.
|
||||
Do really want to unstop production order: ,
|
||||
Do you really want to STOP ,
|
||||
Do really want to unstop production order: ,Do really want to unstop production order:
|
||||
Do you really want to STOP ,Do you really want to STOP
|
||||
Do you really want to STOP this Material Request?,هل تريد حقا لوقف هذا طلب المواد ؟
|
||||
Do you really want to Submit all Salary Slip for month {0} and year {1},هل تريد حقا لتقديم كل زلة الرواتب ل شهر {0} و السنة {1}
|
||||
Do you really want to UNSTOP ,
|
||||
Do you really want to UNSTOP ,Do you really want to UNSTOP
|
||||
Do you really want to UNSTOP this Material Request?,هل تريد حقا أن نزع السدادة هذا طلب المواد ؟
|
||||
Do you really want to stop production order: ,
|
||||
Do you really want to stop production order: ,Do you really want to stop production order:
|
||||
Doc Name,اسم الوثيقة
|
||||
Doc Type,نوع الوثيقة
|
||||
Document Description,وصف الوثيقة
|
||||
@@ -898,7 +898,7 @@ Electronics,إلكترونيات
|
||||
Email,البريد الإلكتروني
|
||||
Email Digest,البريد الإلكتروني دايجست
|
||||
Email Digest Settings,البريد الإلكتروني إعدادات دايجست
|
||||
Email Digest: ,
|
||||
Email Digest: ,Email Digest:
|
||||
Email Id,البريد الإلكتروني معرف
|
||||
"Email Id where a job applicant will email e.g. ""jobs@example.com""",معرف البريد الإلكتروني حيث طالب العمل سوف البريد الإلكتروني على سبيل المثال "jobs@example.com"
|
||||
Email Notifications,إشعارات البريد الإلكتروني
|
||||
@@ -958,7 +958,7 @@ Enter url parameter for receiver nos,أدخل عنوان URL لمعلمة NOS ا
|
||||
Entertainment & Leisure,الترفيه وترفيهية
|
||||
Entertainment Expenses,مصاريف الترفيه
|
||||
Entries,مقالات
|
||||
Entries against ,
|
||||
Entries against ,Entries against
|
||||
Entries are not allowed against this Fiscal Year if the year is closed.,لا يسمح مقالات ضد السنة المالية الحالية إذا تم إغلاق السنة.
|
||||
Equity,إنصاف
|
||||
Error: {0} > {1},الخطأ: {0} > {1}
|
||||
@@ -1477,20 +1477,20 @@ Landed Cost Wizard,هبطت تكلفة معالج
|
||||
Landed Cost updated successfully,تحديث تكلفة هبطت بنجاح
|
||||
Language,لغة
|
||||
Last Name,اسم العائلة
|
||||
Last Purchase Rate,مشاركة الشراء قيم
|
||||
Last Purchase Rate,أخر سعر توريد
|
||||
Latest,آخر
|
||||
Lead,قيادة
|
||||
Lead Details,تفاصيل اعلان
|
||||
Lead Id,رقم الرصاص
|
||||
Lead Name,يؤدي اسم
|
||||
Lead Owner,يؤدي المالك
|
||||
Lead Source,تؤدي المصدر
|
||||
Lead Status,تؤدي الحالة
|
||||
Lead Time Date,تؤدي تاريخ الوقت
|
||||
Lead Time Days,يؤدي يوما مرة
|
||||
Lead,مبادرة بيع
|
||||
Lead Details,تفاصيل مبادرة بيع
|
||||
Lead Id,معرف مبادرة البيع
|
||||
Lead Name,اسم مبادرة البيع
|
||||
Lead Owner,مسئول مبادرة البيع
|
||||
Lead Source,مصدر مبادرة البيع
|
||||
Lead Status,حالة مبادرة البيع
|
||||
Lead Time Date,تاريخ و وقت مبادرة البيع
|
||||
Lead Time Days,يوم ووقت مبادرة البيع
|
||||
Lead Time days is number of days by which this item is expected in your warehouse. This days is fetched in Material Request when you select this item.,يؤدي الوقت هو أيام عدد الأيام التي من المتوقع هذا البند في المستودع الخاص بك. يتم إحضار هذه الأيام في طلب المواد عند اختيار هذا البند.
|
||||
Lead Type,يؤدي النوع
|
||||
Lead must be set if Opportunity is made from Lead,يجب تعيين الرصاص إذا تم الفرص من الرصاص
|
||||
Lead Type,نوع مبادرة البيع
|
||||
Lead must be set if Opportunity is made from Lead,يجب تحديد مبادرة البيع اذ كانة فرصة البيع من مبادرة بيع
|
||||
Leave Allocation,ترك توزيع
|
||||
Leave Allocation Tool,ترك أداة تخصيص
|
||||
Leave Application,ترك التطبيق
|
||||
@@ -1573,7 +1573,7 @@ Maintenance Visit Purpose,صيانة زيارة الغرض
|
||||
Maintenance Visit {0} must be cancelled before cancelling this Sales Order,صيانة زيارة {0} يجب أن يتم إلغاء هذا الأمر قبل إلغاء المبيعات
|
||||
Maintenance start date can not be before delivery date for Serial No {0},صيانة تاريخ بداية لا يمكن أن يكون قبل تاريخ التسليم لل رقم المسلسل {0}
|
||||
Major/Optional Subjects,الرئيسية / اختياري الموضوعات
|
||||
Make ,
|
||||
Make ,Make
|
||||
Make Accounting Entry For Every Stock Movement,جعل الدخول المحاسبة للحصول على كل حركة الأسهم
|
||||
Make Bank Voucher,جعل قسيمة البنك
|
||||
Make Credit Note,جعل الائتمان ملاحظة
|
||||
@@ -1722,7 +1722,7 @@ Net Weight UOM,الوزن الصافي UOM
|
||||
Net Weight of each Item,الوزن الصافي لكل بند
|
||||
Net pay cannot be negative,صافي الأجور لا يمكن أن تكون سلبية
|
||||
Never,أبدا
|
||||
New ,
|
||||
New ,New
|
||||
New Account,حساب جديد
|
||||
New Account Name,اسم الحساب الجديد
|
||||
New BOM,BOM جديدة
|
||||
@@ -2448,7 +2448,7 @@ Rounded Off,تقريبها
|
||||
Rounded Total,تقريب إجمالي
|
||||
Rounded Total (Company Currency),المشاركات تقريب (العملة الشركة)
|
||||
Row # ,الصف #
|
||||
Row # {0}: ,
|
||||
Row # {0}: ,Row # {0}:
|
||||
Row #{0}: Ordered qty can not less than item's minimum order qty (defined in item master).,الصف # {0}: الكمية المطلوبة لا يمكن أن أقل من الحد الأدنى الكمية النظام القطعة (المحددة في البند الرئيسي).
|
||||
Row #{0}: Please specify Serial No for Item {1},الصف # {0}: يرجى تحديد رقم التسلسلي للتاريخ {1}
|
||||
Row {0}: Account does not match with \ Purchase Invoice Credit To account,الصف {0}: الحساب لا يتطابق مع \ شراء فاتورة الائتمان لحساب
|
||||
@@ -2750,7 +2750,7 @@ Stock Ageing,الأسهم شيخوخة
|
||||
Stock Analytics,الأسهم تحليلات
|
||||
Stock Assets,الموجودات الأسهم
|
||||
Stock Balance,الأسهم الرصيد
|
||||
Stock Entries already created for Production Order ,
|
||||
Stock Entries already created for Production Order ,Stock Entries already created for Production Order
|
||||
Stock Entry,الأسهم الدخول
|
||||
Stock Entry Detail,الأسهم إدخال التفاصيل
|
||||
Stock Expenses,مصاريف الأسهم
|
||||
@@ -3300,24 +3300,24 @@ website page link,الموقع رابط الصفحة
|
||||
{0} budget for Account {1} against Cost Center {2} will exceed by {3},{0} ميزانية الحساب {1} ضد مركز التكلفة {2} سيتجاوز التي كتبها {3}
|
||||
{0} can not be negative,{0} لا يمكن أن تكون سلبية
|
||||
{0} created,{0} خلق
|
||||
{0} does not belong to Company {1},{0} لا تنتمي إلى شركة {1}
|
||||
{0} does not belong to Company {1},{0} {لا تنتمي إلى شركة {1
|
||||
{0} entered twice in Item Tax,{0} دخلت مرتين في ضريبة المدينة
|
||||
{0} is an invalid email address in 'Notification Email Address',"{0} هو عنوان بريد إلكتروني غير صالح في ' عنوان البريد الإلكتروني إعلام """
|
||||
{0} is mandatory,{0} إلزامي
|
||||
{0} is mandatory for Item {1},{0} إلزامي القطعة ل {1}
|
||||
{0} is mandatory for Item {1},{0} {إلزامي القطعة ل {1
|
||||
{0} is mandatory. Maybe Currency Exchange record is not created for {1} to {2}.,{0} إلزامي. ربما لا يتم إنشاء سجل سعر صرف العملة ل{1} إلى {2}.
|
||||
{0} is not a stock Item,{0} ليس الأسهم الإغلاق
|
||||
{0} is not a valid Batch Number for Item {1},{0} ليس رقم الدفعة صالحة لل تفاصيل {1}
|
||||
{0} is not a valid Leave Approver. Removing row #{1}.,{0} ليس صحيحا اترك الموافق. إزالة الصف # {1}.
|
||||
{0} is not a valid Leave Approver. Removing row #{1}.,{0} {ليس صحيحا اترك الموافق. إزالة الصف # {1.
|
||||
{0} is not a valid email id,{0} ليس معرف بريد إلكتروني صحيح
|
||||
{0} is now the default Fiscal Year. Please refresh your browser for the change to take effect.,{0} الآن الافتراضي السنة المالية. يرجى تحديث المتصفح ل التغيير نافذ المفعول .
|
||||
{0} is required,{0} مطلوب
|
||||
{0} must be a Purchased or Sub-Contracted Item in row {1},{0} يجب أن يكون البند شراؤها أو التعاقد الفرعي في الصف {1}
|
||||
{0} must be reduced by {1} or you should increase overflow tolerance,{0} يجب تخفيض كتبها {1} أو يجب زيادة الفائض التسامح
|
||||
{0} must have role 'Leave Approver',{0} يجب أن يكون دور ' اترك الموافق '
|
||||
{0} valid serial nos for Item {1},{0} غ المسلسل صالحة لل تفاصيل {1}
|
||||
{0} {1} against Bill {2} dated {3},{0} {1} ضد بيل {2} بتاريخ {3}
|
||||
{0} {1} against Invoice {2},{0} {1} ضد الفاتورة {2}
|
||||
{0} valid serial nos for Item {1},{0} {غ المسلسل صالحة لل تفاصيل {1
|
||||
{0} {1} against Bill {2} dated {3},{0} {1} {ضد بيل {2} بتاريخ {3
|
||||
{0} {1} against Invoice {2},{0} {1} {ضد الفاتورة {2
|
||||
{0} {1} has already been submitted,{0} {1} وقد تم بالفعل قدمت
|
||||
{0} {1} has been modified. Please refresh.,{0} {1} تم تعديل . يرجى تحديث.
|
||||
{0} {1} is not submitted,{0} {1} لا تقدم
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -36,69 +36,69 @@
|
||||
"<h4>Default Template</h4><p>Uses <a href=""http://jinja.pocoo.org/docs/templates/"">Jinja Templating</a> and all the fields of Address (including Custom Fields if any) will be available</p><pre><code>{{ address_line1 }}<br>{% if address_line2 %}{{ address_line2 }}<br>{% endif -%}{{ city }}<br>{% if state %}{{ state }}<br>{% endif -%}{% if pincode %} PIN: {{ pincode }}<br>{% endif -%}{{ country }}<br>{% if phone %}Phone: {{ phone }}<br>{% endif -%}{% if fax %}Fax: {{ fax }}<br>{% endif -%}{% if email_id %}Email: {{ email_id }}<br>{% endif -%}</code></pre>","<h4> Προεπιλογή Πρότυπο </ h4> <p> Χρήσεις <a href=""http://jinja.pocoo.org/docs/templates/""> Jinja Templating </ a> και όλα τα πεδία της Διεύθυνσης ( συμπεριλαμβανομένων των προσαρμοσμένων πεδίων, αν υπάρχουν) θα είναι διαθέσιμο </ p> <pre> <code> {{}} address_line1 <br> {% εάν address_line2%} {{}} address_line2 <br> { endif% -%} {{}} πόλη <br> {% αν το κράτος%} {{}} κατάσταση <br> {endif% -%} {% εάν pincode%} PIN: {{}} pincode <br> {endif% -%} {{}} χώρα <br> {% αν το τηλέφωνο%} Τηλέφωνο: {{}} τηλέφωνο <br> { endif% -%} {% εάν φαξ%} Fax: {{}} fax <br> {endif% -%} {% εάν email_id%} Email: {{}} email_id <br> ? {endif% -%} </ code> </ pre>"
|
||||
A Customer Group exists with same name please change the Customer name or rename the Customer Group,Μια ομάδα πελατών υπάρχει με το ίδιο όνομα παρακαλούμε να αλλάξετε το όνομα του Πελάτη ή να μετονομάσετε την ομάδα πελατών
|
||||
A Customer exists with same name,Ένας πελάτης υπάρχει με το ίδιο όνομα
|
||||
A Lead with this email id should exist,Μια μολύβδου με αυτή την ταυτότητα ηλεκτρονικού ταχυδρομείου θα πρέπει να υπάρχει
|
||||
A Lead with this email id should exist,Μια επαφή με αυτή τη διεύθυνση ηλεκτρονικού ταχυδρομείου θα πρέπει να υπάρχει
|
||||
A Product or Service,Ένα Προϊόν ή Υπηρεσία
|
||||
A Supplier exists with same name,Ένας προμηθευτής υπάρχει με το ίδιο όνομα
|
||||
A symbol for this currency. For e.g. $,Ένα σύμβολο για το νόμισμα αυτό. Για παράδειγμα $
|
||||
AMC Expiry Date,AMC Ημερομηνία Λήξης
|
||||
Abbr,Συντ.
|
||||
Abbreviation cannot have more than 5 characters,Μια συντομογραφία δεν μπορεί να έχει περισσότερα από 5 χαρακτήρες
|
||||
Abbreviation cannot have more than 5 characters,Μια συντομογραφία δεν μπορεί να έχει περισσότερους από 5 χαρακτήρες
|
||||
Above Value,Πάνω Value
|
||||
Absent,Απών
|
||||
Acceptance Criteria,Κριτήρια αποδοχής
|
||||
Acceptance Criteria,Αποδοχή κριτήρίων
|
||||
Accepted,Δεκτός
|
||||
Accepted + Rejected Qty must be equal to Received quantity for Item {0},Αποδεκτές + Απορρίπτεται Ποσότητα πρέπει να είναι ίση με Ελήφθη ποσότητα για τη θέση {0}
|
||||
Accepted Quantity,ΠΟΣΟΤΗΤΑ
|
||||
Accepted Warehouse,Αποδεκτές αποθήκη
|
||||
Accepted + Rejected Qty must be equal to Received quantity for Item {0},Η Αποδεκτή + η Απορριπτέα ποσότητα πρέπει να είναι ίση με ληφθήσα ποσότητα για τη θέση {0}
|
||||
Accepted Quantity,Αποδεκτή ποσότητα
|
||||
Accepted Warehouse,Αποδεκτή Aποθήκη
|
||||
Account,Λογαριασμός
|
||||
Account Balance,Υπόλοιπο Λογαριασμού
|
||||
Account Created: {0},Ο λογαριασμός δημιουργήθηκε : {0}
|
||||
Account Details,Στοιχεία Λογαριασμού
|
||||
Account Head,Επικεφαλής λογαριασμού
|
||||
Account Name,Όνομα λογαριασμού
|
||||
Account Type,Είδος Λογαριασμού
|
||||
"Account balance already in Credit, you are not allowed to set 'Balance Must Be' as 'Debit'","Το υπόλοιπο του λογαριασμού ήδη Credit, δεν σας επιτρέπεται να θέσει «Υπόλοιπο Must Be» ως «χρεωστικές»"
|
||||
"Account balance already in Debit, you are not allowed to set 'Balance Must Be' as 'Credit'","Το υπόλοιπο του λογαριασμού ήδη Debit, δεν μπορείτε να ρυθμίσετε το 'Υπόλοιπο Must Be »ως« Δάνειο »"
|
||||
Account Type,Τύπος Λογαριασμού
|
||||
"Account balance already in Credit, you are not allowed to set 'Balance Must Be' as 'Debit'","Το υπόλοιπο του λογαριασμού είναι ήδη πιστωτικό, δεν επιτρέπεται να ρυθμίσετε το «Υπόλοιπο πρέπει να είναι χρεωστικό»"
|
||||
"Account balance already in Debit, you are not allowed to set 'Balance Must Be' as 'Credit'","Το υπόλοιπο του λογαριασμού είναι ήδη χρεωστικό, δεν μπορείτε να ρυθμίσετε το 'Υπόλοιπο πρέπει να είναι' ως 'Πιστωτικό' "
|
||||
Account for the warehouse (Perpetual Inventory) will be created under this Account.,Λογαριασμός για την αποθήκη ( Perpetual Απογραφή ) θα δημιουργηθεί στο πλαίσιο του παρόντος λογαριασμού.
|
||||
Account head {0} created,Κεφάλι Λογαριασμός {0} δημιουργήθηκε
|
||||
Account must be a balance sheet account,Ο λογαριασμός πρέπει να είναι λογαριασμός του ισολογισμού
|
||||
Account with child nodes cannot be converted to ledger,Λογαριασμός με κόμβους παιδί δεν μπορεί να μετατραπεί σε καθολικό
|
||||
Account with existing transaction can not be converted to group.,Ο λογαριασμός με τις υπάρχουσες συναλλαγή δεν μπορεί να μετατραπεί σε ομάδα .
|
||||
Account with existing transaction can not be deleted,Ο λογαριασμός με τις υπάρχουσες συναλλαγή δεν μπορεί να διαγραφεί
|
||||
Account with existing transaction cannot be converted to ledger,Ο λογαριασμός με τις υπάρχουσες συναλλαγή δεν μπορεί να μετατραπεί σε καθολικό
|
||||
Account {0} cannot be a Group,Ο λογαριασμός {0} δεν μπορεί να είναι μια ομάδα
|
||||
Account with existing transaction can not be converted to group.,Ο λογαριασμός με υπάρχουσα συναλλαγή δεν μπορεί να μετατραπεί σε ομάδα .
|
||||
Account with existing transaction can not be deleted,Ο λογαριασμός με υπάρχουσα συναλλαγή δεν μπορεί να διαγραφεί
|
||||
Account with existing transaction cannot be converted to ledger,Ο λογαριασμός με υπάρχουσα συναλλαγή δεν μπορεί να μετατραπεί σε καθολικό
|
||||
Account {0} cannot be a Group,Ο λογαριασμός {0} δεν μπορεί να είναι ομάδα
|
||||
Account {0} does not belong to Company {1},Ο λογαριασμός {0} δεν ανήκει στη Εταιρεία {1}
|
||||
Account {0} does not belong to company: {1},Ο λογαριασμός {0} δεν ανήκει στην εταιρεία: {1}
|
||||
Account {0} does not exist,Ο λογαριασμός {0} δεν υπάρχει
|
||||
Account {0} has been entered more than once for fiscal year {1},Ο λογαριασμός {0} έχει εισαχθεί περισσότερες από μία φορά για το οικονομικό έτος {1}
|
||||
Account {0} is frozen,Ο λογαριασμός {0} έχει παγώσει
|
||||
Account {0} is inactive,Ο λογαριασμός {0} είναι ανενεργό
|
||||
Account {0} is not valid,Ο λογαριασμός {0} δεν είναι έγκυρη
|
||||
Account {0} is inactive,Ο λογαριασμός {0} είναι ανενεργός
|
||||
Account {0} is not valid,Ο λογαριασμός {0} δεν είναι έγκυρος
|
||||
Account {0} must be of type 'Fixed Asset' as Item {1} is an Asset Item,Ο λογαριασμός {0} πρέπει να είναι του τύπου « Παγίων » ως σημείο {1} είναι ένα περιουσιακό στοιχείο Στοιχείο
|
||||
Account {0}: Parent account {1} can not be a ledger,Ο λογαριασμός {0}: Μητρική λογαριασμό {1} δεν μπορεί να είναι ένα καθολικό
|
||||
Account {0}: Parent account {1} does not belong to company: {2},Ο λογαριασμός {0}: Μητρική λογαριασμό {1} δεν ανήκει στην εταιρεία: {2}
|
||||
Account {0}: Parent account {1} does not exist,Ο λογαριασμός {0}: Μητρική λογαριασμό {1} δεν υπάρχει
|
||||
Account {0}: You can not assign itself as parent account,Ο λογαριασμός {0}: Δεν μπορεί η ίδια να εκχωρήσει ως μητρική λογαριασμού
|
||||
Account: {0} can only be updated via \ Stock Transactions,Λογαριασμός: {0} μπορεί να ενημερώνεται μόνο μέσω \ Χρηματιστηριακές Συναλλαγές Μετοχών
|
||||
Accountant,λογιστής
|
||||
Accountant,Λογιστής
|
||||
Accounting,Λογιστική
|
||||
"Accounting Entries can be made against leaf nodes, called","Λογιστικές εγγραφές μπορούν να γίνουν με κόμβους , που ονομάζεται"
|
||||
"Accounting entry frozen up to this date, nobody can do / modify entry except role specified below.","Λογιστική εγγραφή παγώσει μέχρι την ημερομηνία αυτή, κανείς δεν μπορεί να κάνει / τροποποιήσετε την είσοδο, εκτός από τον ρόλο που καθορίζεται παρακάτω."
|
||||
Accounting journal entries.,Λογιστικές εγγραφές περιοδικό.
|
||||
Accounts,Λογαριασμοί
|
||||
Accounts Browser,λογαριασμοί Browser
|
||||
Accounts Frozen Upto,Λογαριασμοί Κατεψυγμένα Μέχρι
|
||||
Accounts Payable,Λογαριασμοί πληρωτέοι
|
||||
Accounts Browser,Περιηγητής Λογαριασμων
|
||||
Accounts Frozen Upto,Παγωμένοι Λογαριασμοί Μέχρι
|
||||
Accounts Payable,Λογαριασμοί Πληρωτέοι
|
||||
Accounts Receivable,Απαιτήσεις από Πελάτες
|
||||
Accounts Settings,Λογαριασμοί Ρυθμίσεις
|
||||
Active,Ενεργός
|
||||
Active: Will extract emails from ,Active: Θα εξαγάγετε μηνύματα ηλεκτρονικού ταχυδρομείου από
|
||||
Activity,Δραστηριότητα
|
||||
Activity Log,Σύνδεση Δραστηριότητα
|
||||
Activity Log,Αρχείο-Καταγραφή Δραστηριότητας
|
||||
Activity Log:,Είσοδος Δραστηριότητα :
|
||||
Activity Type,Τύπος δραστηριότητας
|
||||
Actual,Πραγματικός
|
||||
Actual Budget,Πραγματικό προϋπολογισμό
|
||||
Actual Budget,Πραγματικός προϋπολογισμό
|
||||
Actual Completion Date,Πραγματική Ημερομηνία Ολοκλήρωσης
|
||||
Actual Date,Πραγματική Ημερομηνία
|
||||
Actual End Date,Πραγματική Ημερομηνία Λήξης
|
||||
@@ -111,11 +111,11 @@ Actual Qty: Quantity available in the warehouse.,Πραγματική Ποσότ
|
||||
Actual Quantity,Πραγματική ποσότητα
|
||||
Actual Start Date,Πραγματική ημερομηνία έναρξης
|
||||
Add,Προσθήκη
|
||||
Add / Edit Taxes and Charges,Προσθήκη / Επεξεργασία Φόροι και τέλη
|
||||
Add / Edit Taxes and Charges,Προσθήκη / Επεξεργασία Φόρων και τέλών
|
||||
Add Child,Προσθήκη παιδιών
|
||||
Add Serial No,Προσθήκη Αύξων αριθμός
|
||||
Add Taxes,Προσθήκη Φόροι
|
||||
Add Taxes and Charges,Προσθήκη Φόροι και τέλη
|
||||
Add Taxes,Προσθήκη Φόρων
|
||||
Add Taxes and Charges,Προσθήκη Φόρων και Τελών
|
||||
Add or Deduct,Προσθήκη ή να αφαιρέσει
|
||||
Add rows to set annual budgets on Accounts.,Προσθέστε γραμμές να θέσουν ετήσιους προϋπολογισμούς σε λογαριασμούς.
|
||||
Add to Cart,Προσθήκη στο Καλάθι
|
||||
@@ -125,22 +125,22 @@ Address,Διεύθυνση
|
||||
Address & Contact,Διεύθυνση & Επικοινωνία
|
||||
Address & Contacts,Διεύθυνση & Επικοινωνία
|
||||
Address Desc,Διεύθυνση ΦΘΕ
|
||||
Address Details,Λεπτομέρειες Διεύθυνση
|
||||
Address Details,Λεπτομέρειες Διεύθυνσης
|
||||
Address HTML,Διεύθυνση HTML
|
||||
Address Line 1,Διεύθυνση 1
|
||||
Address Line 2,Γραμμή διεύθυνσης 2
|
||||
Address Line 2,Γραμμή Διεύθυνσης 2
|
||||
Address Template,Διεύθυνση Πρότυπο
|
||||
Address Title,Τίτλος Διεύθυνση
|
||||
Address Title is mandatory.,Διεύθυνση τίτλου είναι υποχρεωτική .
|
||||
Address Type,Πληκτρολογήστε τη διεύθυνση
|
||||
Address Title is mandatory.,Ο τίτλος της Διεύθυνσης είναι υποχρεωτικός.
|
||||
Address Type,Τύπος Διεύθυνσης
|
||||
Address master.,Διεύθυνση πλοιάρχου .
|
||||
Administrative Expenses,έξοδα διοικήσεως
|
||||
Administrative Expenses,Έξοδα Διοικήσεως
|
||||
Administrative Officer,Διοικητικός Λειτουργός
|
||||
Advance Amount,Ποσό Advance
|
||||
Advance Amount,Ποσό Προκαταβολής
|
||||
Advance amount,Ποσό Advance
|
||||
Advances,Προκαταβολές
|
||||
Advertisement,Διαφήμιση
|
||||
Advertising,διαφήμιση
|
||||
Advertising,Διαφήμιση
|
||||
Aerospace,Aerospace
|
||||
After Sale Installations,Μετά Εγκαταστάσεις Πώληση
|
||||
Against,Κατά
|
||||
@@ -214,13 +214,13 @@ Amended From,Τροποποίηση Από
|
||||
Amount,Ποσό
|
||||
Amount (Company Currency),Ποσό (νόμισμα της Εταιρείας)
|
||||
Amount Paid,Ποσό Αμειβόμενος
|
||||
Amount to Bill,Ανέρχονται σε Bill
|
||||
An Customer exists with same name,Υπάρχει ένα πελάτη με το ίδιο όνομα
|
||||
Amount to Bill,Ποσό Χρέωσης
|
||||
An Customer exists with same name,Υπάρχει πελάτης με το ίδιο όνομα
|
||||
"An Item Group exists with same name, please change the item name or rename the item group","Ένα σημείο της ομάδας υπάρχει με το ίδιο όνομα , μπορείτε να αλλάξετε το όνομα του στοιχείου ή να μετονομάσετε την ομάδα στοιχείου"
|
||||
"An item exists with same name ({0}), please change the item group name or rename the item","Ένα στοιχείο υπάρχει με το ίδιο όνομα ( {0} ) , παρακαλούμε να αλλάξετε το όνομα της ομάδας στοιχείου ή να μετονομάσετε το στοιχείο"
|
||||
Analyst,αναλυτής
|
||||
Annual,ετήσιος
|
||||
Another Period Closing Entry {0} has been made after {1},Μια άλλη Έναρξη Περιόδου Κλείσιμο {0} έχει γίνει μετά από {1}
|
||||
Analyst,Αναλυτής
|
||||
Annual,Ετήσιος
|
||||
Another Period Closing Entry {0} has been made after {1},Μια ακόμη εισαγωγή Κλεισίματος Περιόδου {0} έχει γίνει μετά από {1}
|
||||
Another Salary Structure {0} is active for employee {0}. Please make its status 'Inactive' to proceed.,Μια άλλη δομή Μισθός είναι {0} ενεργό για εργαζόμενο {0} . Παρακαλώ κάνετε το καθεστώς της « Ανενεργός » για να προχωρήσετε .
|
||||
"Any other comments, noteworthy effort that should go in the records.","Οποιαδήποτε άλλα σχόλια, αξιοσημείωτη προσπάθεια που θα πρέπει να πάει στα αρχεία."
|
||||
Apparel & Accessories,Ένδυση & Αξεσουάρ
|
||||
@@ -232,20 +232,20 @@ Applicable To (Designation),Που ισχύουν για (Ονομασία)
|
||||
Applicable To (Employee),Που ισχύουν για (Υπάλληλος)
|
||||
Applicable To (Role),Που ισχύουν για (Ρόλος)
|
||||
Applicable To (User),Που ισχύουν για (User)
|
||||
Applicant Name,Όνομα Αιτών
|
||||
Applicant for a Job.,Αίτηση εργασίας.
|
||||
Applicant Name,Όνομα Αιτούντα
|
||||
Applicant for a Job.,Αίτηση για εργασία
|
||||
Application of Funds (Assets),Εφαρμογή των Ταμείων ( Ενεργητικό )
|
||||
Applications for leave.,Οι αιτήσεις για τη χορήγηση άδειας.
|
||||
Applications for leave.,Αιτήσεις για χορήγηση άδειας.
|
||||
Applies to Company,Ισχύει για την Εταιρεία
|
||||
Apply On,Εφαρμόστε την
|
||||
Appraisal,Εκτίμηση
|
||||
Appraisal Goal,Goal Αξιολόγηση
|
||||
Appraisal Goals,Στόχοι Αξιολόγηση
|
||||
Appraisal Template,Πρότυπο Αξιολόγηση
|
||||
Appraisal Template Goal,Αξιολόγηση Goal Template
|
||||
Appraisal Template Title,Αξιολόγηση Τίτλος Template
|
||||
Appraisal Goals,Στόχοι Αξιολόγησης
|
||||
Appraisal Template,Πρότυπο Αξιολόγησης
|
||||
Appraisal Template Goal,Στόχος Προτύπου Αξιολόγησης
|
||||
Appraisal Template Title,Τίτλος Προτύπου Αξιολόγησης
|
||||
Appraisal {0} created for Employee {1} in the given date range,Αξιολόγηση {0} δημιουργήθηκε υπάλληλου {1} στο συγκεκριμένο εύρος ημερομηνιών
|
||||
Apprentice,τσιράκι
|
||||
Apprentice,Μαθητευόμενος
|
||||
Approval Status,Κατάσταση έγκρισης
|
||||
Approval Status must be 'Approved' or 'Rejected',Κατάσταση έγκρισης πρέπει να « Εγκρίθηκε » ή « Rejected »
|
||||
Approved,Εγκρίθηκε
|
||||
@@ -254,47 +254,47 @@ Approving Role,Έγκριση Ρόλος
|
||||
Approving Role cannot be same as role the rule is Applicable To,"Έγκριση ρόλος δεν μπορεί να είναι ίδιο με το ρόλο , ο κανόνας είναι να εφαρμόζεται"
|
||||
Approving User,Έγκριση χρήστη
|
||||
Approving User cannot be same as user the rule is Applicable To,Την έγκριση του χρήστη δεν μπορεί να είναι ίδιο με το χρήστη ο κανόνας ισχύει για
|
||||
Are you sure you want to STOP ,
|
||||
Are you sure you want to UNSTOP ,
|
||||
Are you sure you want to STOP ,Είσαστε σίγουροι πως θέλετε να σταματήσετε
|
||||
Are you sure you want to UNSTOP ,Are you sure you want to UNSTOP
|
||||
Arrear Amount,Καθυστερήσεις Ποσό
|
||||
"As Production Order can be made for this item, it must be a stock item.","Όπως μπορεί να γίνει Παραγωγής παραγγελίας για το συγκεκριμένο προϊόν , θα πρέπει να είναι ένα στοιχείο υλικού."
|
||||
As per Stock UOM,Όπως ανά Διαθέσιμο UOM
|
||||
"As there are existing stock transactions for this item, you can not change the values of 'Has Serial No', 'Is Stock Item' and 'Valuation Method'","Δεδομένου ότι υπάρχουν χρηματιστηριακές συναλλαγές για αυτό το στοιχείο , δεν μπορείτε να αλλάξετε τις τιμές των « Έχει Αύξων αριθμός », « Είναι Stock σημείο » και « Μέθοδος αποτίμησης»"
|
||||
Asset,προσόν
|
||||
Assistant,βοηθός
|
||||
Assistant,Βοηθός
|
||||
Associate,Συνεργάτης
|
||||
Atleast one of the Selling or Buying must be selected,Πρέπει να επιλεγεί τουλάχιστον μία από τις πωλήσεις ή την αγορά
|
||||
Atleast one warehouse is mandatory,"Τουλάχιστον, μια αποθήκη είναι υποχρεωτική"
|
||||
Attach Image,Συνδέστε Image
|
||||
Attach Letterhead,Συνδέστε επιστολόχαρτο
|
||||
Attach Logo,Συνδέστε Logo
|
||||
Attach Your Picture,Προσαρμόστε την εικόνα σας
|
||||
Attach Image,Επισύναψη Εικόνας
|
||||
Attach Letterhead,Επισύναψη επιστολόχαρτου
|
||||
Attach Logo,Επισύναψη Logo
|
||||
Attach Your Picture,Επισύναψη της εικόνα σας
|
||||
Attendance,Παρουσία
|
||||
Attendance Date,Ημερομηνία Συμμετοχή
|
||||
Attendance Details,Λεπτομέρειες Συμμετοχή
|
||||
Attendance Date,Ημερομηνία Συμμετοχής
|
||||
Attendance Details,Λεπτομέρειες Συμμετοχής
|
||||
Attendance From Date,Συμμετοχή Από Ημερομηνία
|
||||
Attendance From Date and Attendance To Date is mandatory,Συμμετοχή Από Ημερομηνία και φοίτηση μέχρι σήμερα είναι υποχρεωτική
|
||||
Attendance To Date,Συμμετοχή σε Ημερομηνία
|
||||
Attendance From Date and Attendance To Date is mandatory,Η συμμετοχή Από και Μέχρι είναι υποχρεωτική
|
||||
Attendance To Date,Προσέλευση μέχρι Ημερομηνία
|
||||
Attendance can not be marked for future dates,Συμμετοχή δεν μπορεί να επιλεγεί για τις μελλοντικές ημερομηνίες
|
||||
Attendance for employee {0} is already marked,Συμμετοχή των εργαζομένων για {0} έχει ήδη σημειώνονται
|
||||
Attendance record.,Ρεκόρ προσέλευσης.
|
||||
Authorization Control,Έλεγχος της χορήγησης αδειών
|
||||
Authorization Rule,Κανόνας Εξουσιοδότηση
|
||||
Attendance for employee {0} is already marked,Συμμετοχή για εργαζομένο {0} έχει ήδη σημειώθει
|
||||
Attendance record.,Καταχωρήσεις Προσέλευσης.
|
||||
Authorization Control,Έλεγχος Εξουσιοδότησης
|
||||
Authorization Rule,Κανόνας Εξουσιοδότησης
|
||||
Auto Accounting For Stock Settings,Auto Λογιστικά Για Ρυθμίσεις Χρηματιστήριο
|
||||
Auto Material Request,Αυτόματη Αίτηση Υλικό
|
||||
Auto Material Request,Αυτόματη Αίτηση Υλικού
|
||||
Auto-raise Material Request if quantity goes below re-order level in a warehouse,Auto-raise Αίτηση Υλικό εάν η ποσότητα πέσει κάτω εκ νέου για το επίπεδο σε μια αποθήκη
|
||||
Automatically compose message on submission of transactions.,Αυτόματη συνθέτουν το μήνυμα για την υποβολή των συναλλαγών .
|
||||
Automatically extract Job Applicants from a mail box ,
|
||||
Automatically compose message on submission of transactions.,Αυτόματη σύνθεση μηνύματος για την υποβολή συναλλαγών .
|
||||
Automatically extract Job Applicants from a mail box ,Automatically extract Job Applicants from a mail box
|
||||
Automatically extract Leads from a mail box e.g.,"Αυτόματη εξαγωγή οδηγεί από ένα κουτί αλληλογραφίας , π.χ."
|
||||
Automatically updated via Stock Entry of type Manufacture/Repack,Αυτόματη ενημέρωση μέσω είσοδο στα αποθέματα Κατασκευή Τύπος / Repack
|
||||
Automatically updated via Stock Entry of type Manufacture/Repack,Αυτόματη ενημέρωση με την είσοδο αποθεμάτων Κατασκευή Τύπος / Repack
|
||||
Automotive,Αυτοκίνητο
|
||||
Autoreply when a new mail is received,Autoreply όταν λαμβάνονται νέα μηνύματα
|
||||
Autoreply when a new mail is received,Αυτόματη απάντηση όταν λαμβάνονται νέα μηνύματα
|
||||
Available,Διαθέσιμος
|
||||
Available Qty at Warehouse,Διαθέσιμο Ποσότητα σε αποθήκη
|
||||
Available Stock for Packing Items,Διαθέσιμο Διαθέσιμο για είδη συσκευασίας
|
||||
Available Qty at Warehouse,Διαθέσιμη Ποσότητα στην Αποθήκη
|
||||
Available Stock for Packing Items,Διαθέσιμο απόθεμα για είδη συσκευασίας
|
||||
"Available in BOM, Delivery Note, Purchase Invoice, Production Order, Purchase Order, Purchase Receipt, Sales Invoice, Sales Order, Stock Entry, Timesheet","Διατίθεται σε BOM , Δελτίο Αποστολής , Τιμολόγιο Αγοράς , Παραγωγής Τάξης, Παραγγελία Αγοράς, Αγορά Παραλαβή , Πωλήσεις Τιμολόγιο , Πωλήσεις Τάξης , Stock Έναρξη , φύλλο κατανομής χρόνου"
|
||||
Average Age,Μέσος όρος ηλικίας
|
||||
Average Commission Rate,Μέση Τιμή Επιτροπής
|
||||
Average Commission Rate,Μέσος συντελεστής προμήθειας
|
||||
Average Discount,Μέση έκπτωση
|
||||
Awesome Products,Awesome Προϊόντα
|
||||
Awesome Services,Awesome Υπηρεσίες
|
||||
@@ -511,7 +511,7 @@ Clearance Date,Ημερομηνία Εκκαθάριση
|
||||
Clearance Date not mentioned,Εκκαθάριση Ημερομηνία που δεν αναφέρονται
|
||||
Clearance date cannot be before check date in row {0},Ημερομηνία εκκαθάρισης δεν μπορεί να είναι πριν από την ημερομηνία άφιξης στη γραμμή {0}
|
||||
Click on 'Make Sales Invoice' button to create a new Sales Invoice.,Κάντε κλικ στο «Κάνε Πωλήσεις Τιμολόγιο» για να δημιουργηθεί μια νέα τιμολογίου πώλησης.
|
||||
Click on a link to get options to expand get options ,
|
||||
Click on a link to get options to expand get options ,Click on a link to get options to expand get options
|
||||
Client,Πελάτης
|
||||
Close Balance Sheet and book Profit or Loss.,Κλείσιμο Ισολογισμού και των Αποτελεσμάτων βιβλίο ή απώλεια .
|
||||
Closed,Κλειστό
|
||||
@@ -841,13 +841,13 @@ Distributor,Διανομέας
|
||||
Divorced,Διαζευγμένος
|
||||
Do Not Contact,Μην Επικοινωνία
|
||||
Do not show any symbol like $ etc next to currencies.,Να μην εμφανίζεται κανένα σύμβολο όπως $ κλπ δίπλα σε νομίσματα.
|
||||
Do really want to unstop production order: ,
|
||||
Do you really want to STOP ,
|
||||
Do really want to unstop production order: ,Do really want to unstop production order:
|
||||
Do you really want to STOP ,Do you really want to STOP
|
||||
Do you really want to STOP this Material Request?,Θέλετε πραγματικά να σταματήσει αυτό το υλικό την Αίτηση Συμμετοχής;
|
||||
Do you really want to Submit all Salary Slip for month {0} and year {1},Θέλετε πραγματικά να υποβληθούν όλα τα Slip Μισθός για το μήνα {0} και {1 χρόνο }
|
||||
Do you really want to UNSTOP ,
|
||||
Do you really want to UNSTOP ,Do you really want to UNSTOP
|
||||
Do you really want to UNSTOP this Material Request?,Θέλετε πραγματικά να ξεβουλώνω αυτό Υλικό Αίτηση Συμμετοχής;
|
||||
Do you really want to stop production order: ,
|
||||
Do you really want to stop production order: ,Do you really want to stop production order:
|
||||
Doc Name,Doc Name
|
||||
Doc Type,Doc Τύπος
|
||||
Document Description,Περιγραφή εγγράφου
|
||||
@@ -899,7 +899,7 @@ Electronics,ηλεκτρονική
|
||||
Email,Email
|
||||
Email Digest,Email Digest
|
||||
Email Digest Settings,Email Digest Ρυθμίσεις
|
||||
Email Digest: ,
|
||||
Email Digest: ,Email Digest:
|
||||
Email Id,Id Email
|
||||
"Email Id where a job applicant will email e.g. ""jobs@example.com""","Email Id, όπου ένας υποψήφιος θα e-mail π.χ. "jobs@example.com""
|
||||
Email Notifications,Ειδοποιήσεις μέσω ηλεκτρονικού ταχυδρομείου
|
||||
@@ -959,7 +959,7 @@ Enter url parameter for receiver nos,Εισάγετε παράμετρο url γ
|
||||
Entertainment & Leisure,Διασκέδαση & Leisure
|
||||
Entertainment Expenses,Έξοδα Ψυχαγωγία
|
||||
Entries,Καταχωρήσεις
|
||||
Entries against ,
|
||||
Entries against ,Entries against
|
||||
Entries are not allowed against this Fiscal Year if the year is closed.,"Οι συμμετοχές δεν επιτρέπεται κατά το τρέχον οικονομικό έτος, εάν το έτος είναι κλειστή."
|
||||
Equity,δικαιοσύνη
|
||||
Error: {0} > {1},Σφάλμα : {0} > {1}
|
||||
@@ -1480,18 +1480,18 @@ Language,Γλώσσα
|
||||
Last Name,Επώνυμο
|
||||
Last Purchase Rate,Τελευταία Τιμή Αγοράς
|
||||
Latest,αργότερο
|
||||
Lead,Μόλυβδος
|
||||
Lead Details,Μόλυβδος Λεπτομέρειες
|
||||
Lead Id,Μόλυβδος Id
|
||||
Lead Name,Μόλυβδος Name
|
||||
Lead Owner,Μόλυβδος Ιδιοκτήτης
|
||||
Lead Source,Μόλυβδος Πηγή
|
||||
Lead Status,Lead Κατάσταση
|
||||
Lead Time Date,Μόλυβδος Ημερομηνία Ώρα
|
||||
Lead Time Days,Μόλυβδος Ημέρες Ώρα
|
||||
Lead Time days is number of days by which this item is expected in your warehouse. This days is fetched in Material Request when you select this item.,"Μόλυβδος μέρες είναι ο αριθμός των ημερών κατά τον οποίο το στοιχείο αυτό αναμένεται στην αποθήκη σας. Αυτό μέρες είναι παρατραβηγμένο σε αίτημα αφορά υλικό, όταν επιλέξετε αυτό το στοιχείο."
|
||||
Lead Type,Μόλυβδος Τύπος
|
||||
Lead must be set if Opportunity is made from Lead,Ο μόλυβδος πρέπει να οριστεί αν Ευκαιρία είναι κατασκευασμένο από μόλυβδο
|
||||
Lead,Επαφή
|
||||
Lead Details,Λεπτομέρειες Επαφής
|
||||
Lead Id,Id Επαφής
|
||||
Lead Name,Όνομα Επαφής
|
||||
Lead Owner,Ιδιοκτήτης Επαφής
|
||||
Lead Source,Από που προήρθε η Επαφή
|
||||
Lead Status,Κατάσταση Επαφής
|
||||
Lead Time Date,Ημερομηνία Ώρα Επαφής
|
||||
Lead Time Days,Ημέρα Ώρα Επαφής
|
||||
Lead Time days is number of days by which this item is expected in your warehouse. This days is fetched in Material Request when you select this item.,"Ο χρόνος παράδοσης σε ημέρες είναι ο αριθμός των ημερών κατά τον οποίο το στοιχείο αυτό αναμένεται στην αποθήκη σας. Αυτές οι μέρες αναφέρεται σε αίτημα που αφορά υλικό, όταν επιλέξετε αυτό το στοιχείο."
|
||||
Lead Type,Τύπος Επαφής
|
||||
Lead must be set if Opportunity is made from Lead,Η Επαφή πρέπει να οριστεί αν η Ευκαιρία προέρχεται από επαφή
|
||||
Leave Allocation,Αφήστε Κατανομή
|
||||
Leave Allocation Tool,Αφήστε το εργαλείο Κατανομή
|
||||
Leave Application,Αφήστε Εφαρμογή
|
||||
@@ -1574,7 +1574,7 @@ Maintenance Visit Purpose,Σκοπός Συντήρηση Επίσκεψη
|
||||
Maintenance Visit {0} must be cancelled before cancelling this Sales Order,Συντήρηση Επίσκεψη {0} πρέπει να ακυρωθεί πριν από την ακύρωση αυτής της παραγγελίας πώλησης
|
||||
Maintenance start date can not be before delivery date for Serial No {0},Ημερομηνία έναρξης συντήρησης δεν μπορεί να είναι πριν από την ημερομηνία παράδοσης Αύξων αριθμός {0}
|
||||
Major/Optional Subjects,Σημαντικές / προαιρετικά μαθήματα
|
||||
Make ,
|
||||
Make ,Make
|
||||
Make Accounting Entry For Every Stock Movement,Κάντε Λογιστική καταχώρηση για κάθε Κίνημα Χρηματιστήριο
|
||||
Make Bank Voucher,Κάντε Voucher Bank
|
||||
Make Credit Note,Κάντε Πιστωτικό Σημείωμα
|
||||
@@ -1723,7 +1723,7 @@ Net Weight UOM,Καθαρό Βάρος UOM
|
||||
Net Weight of each Item,Καθαρό βάρος κάθε είδους
|
||||
Net pay cannot be negative,Καθαρή αμοιβή δεν μπορεί να είναι αρνητική
|
||||
Never,Ποτέ
|
||||
New ,
|
||||
New ,New
|
||||
New Account,Νέος λογαριασμός
|
||||
New Account Name,Νέο Όνομα λογαριασμού
|
||||
New BOM,Νέα BOM
|
||||
@@ -2449,7 +2449,7 @@ Rounded Off,στρογγυλοποιηθεί
|
||||
Rounded Total,Στρογγυλεμένες Σύνολο
|
||||
Rounded Total (Company Currency),Στρογγυλεμένες Σύνολο (νόμισμα της Εταιρείας)
|
||||
Row # ,Row #
|
||||
Row # {0}: ,
|
||||
Row # {0}: ,Row # {0}:
|
||||
Row #{0}: Ordered qty can not less than item's minimum order qty (defined in item master).,Σειρά # {0}: Διέταξε ποσότητα δεν μπορεί να μικρότερη από την ελάχιστη ποσότητα σειρά στοιχείου (όπως ορίζεται στο σημείο master).
|
||||
Row #{0}: Please specify Serial No for Item {1},Σειρά # {0}: Παρακαλείστε να προσδιορίσετε Αύξων αριθμός για τη θέση {1}
|
||||
Row {0}: Account does not match with \ Purchase Invoice Credit To account,Σειρά {0}: Ο λογαριασμός δεν ταιριάζει με \ τιμολογίου αγοράς πίστωση του λογαριασμού
|
||||
@@ -3277,8 +3277,8 @@ Your support email id - must be a valid email - this is where your emails will c
|
||||
[Select],[ Επιλέξτε ]
|
||||
`Freeze Stocks Older Than` should be smaller than %d days.,` Τα αποθέματα Πάγωμα Παλαιότερο από ` θα πρέπει να είναι μικρότερη από % d ημέρες .
|
||||
and,και
|
||||
are not allowed.,δεν επιτρέπονται .
|
||||
assigned by,ανατεθεί από
|
||||
are not allowed.,δεν επιτρέπονται.
|
||||
assigned by,Ανατέθηκε από
|
||||
cannot be greater than 100,δεν μπορεί να είναι μεγαλύτερη από 100
|
||||
"e.g. ""Build tools for builders""","π.χ. «Χτίστε εργαλεία για τους κατασκευαστές """
|
||||
"e.g. ""MC""","π.χ. "" MC """
|
||||
@@ -3317,7 +3317,7 @@ website page link,Ιστοσελίδα link της σελίδας
|
||||
{0} must be reduced by {1} or you should increase overflow tolerance,{0} πρέπει να μειωθεί κατά {1} ή θα πρέπει να αυξήσει την ανοχή υπερχείλισης
|
||||
{0} must have role 'Leave Approver',{0} πρέπει να έχει ρόλο « Αφήστε Έγκρισης »
|
||||
{0} valid serial nos for Item {1},{0} έγκυρο σειριακό nos για τη θέση {1}
|
||||
{0} {1} against Bill {2} dated {3},{0} {1} εναντίον Bill {2} { 3 με ημερομηνία }
|
||||
{0} {1} against Bill {2} dated {3},{0} {1} εναντίον Bill {2} {3} με ημερομηνία
|
||||
{0} {1} against Invoice {2},{0} {1} κατά Τιμολόγιο {2}
|
||||
{0} {1} has already been submitted,{0} {1} έχει ήδη υποβληθεί
|
||||
{0} {1} has been modified. Please refresh.,{0} {1} έχει τροποποιηθεί . Παρακαλώ ανανεώσετε .
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -51,7 +51,7 @@ Accepted + Rejected Qty must be equal to Received quantity for Item {0},"La quan
|
||||
Compte {0} doit être SAMES comme débit pour tenir compte de la facture de vente en ligne {0}"
|
||||
Accepted Quantity,Quantité acceptés
|
||||
Accepted Warehouse,Entrepôt acceptable
|
||||
Account,compte
|
||||
Account,Compte
|
||||
Account Balance,Solde du compte
|
||||
Account Created: {0},Compte créé : {0}
|
||||
Account Details,Détails du compte
|
||||
@@ -63,18 +63,18 @@ Account Type,Type de compte
|
||||
Account for the warehouse (Perpetual Inventory) will be created under this Account.,Compte de l'entrepôt ( de l'inventaire permanent ) sera créé sous ce compte .
|
||||
Account head {0} created,Responsable du compte {0} a été crée
|
||||
Account must be a balance sheet account,Le compte doit être un bilan
|
||||
Account with child nodes cannot be converted to ledger,Liste des prix non sélectionné
|
||||
Account with existing transaction can not be converted to group.,{0} n'est pas un congé approbateur valide
|
||||
Account with existing transaction can not be deleted,Compte avec la transaction existante ne peut pas être supprimé
|
||||
Account with existing transaction cannot be converted to ledger,Compte avec la transaction existante ne peut pas être converti en livre
|
||||
Account with child nodes cannot be converted to ledger,Un compte avec des enfants ne peut pas être converti en grand livre
|
||||
Account with existing transaction can not be converted to group.,Un compte contenant une transaction ne peut pas être converti en groupe
|
||||
Account with existing transaction can not be deleted,Un compte contenant une transaction ne peut pas être supprimé
|
||||
Account with existing transaction cannot be converted to ledger,Un compte contenant une transaction ne peut pas être converti en grand livre
|
||||
Account {0} cannot be a Group,Compte {0} ne peut pas être un groupe
|
||||
Account {0} does not belong to Company {1},Compte {0} n'appartient pas à la société {1}
|
||||
Account {0} does not belong to company: {1},Compte {0} n'appartient pas à l'entreprise: {1}
|
||||
Account {0} does not belong to company: {1},Compte {0} n'appartient pas à la société : {1}
|
||||
Account {0} does not exist,Compte {0} n'existe pas
|
||||
Account {0} has been entered more than once for fiscal year {1},S'il vous plaît entrer « Répétez le jour du Mois de la« valeur de champ
|
||||
Account {0} is frozen,Attention: Commande {0} existe déjà contre le même numéro de bon de commande
|
||||
Account {0} is inactive,dépenses directes
|
||||
Account {0} is not valid,Compte {0} n'est pas valide
|
||||
Account {0} has been entered more than once for fiscal year {1},Le compte {0} a été renseigné plus d'une fois pour l'année fiscale {1}
|
||||
Account {0} is frozen,Le compte {0} est gelé
|
||||
Account {0} is inactive,Le compte {0} est inactif
|
||||
Account {0} is not valid,Le compte {0} n'est pas valide
|
||||
Account {0} must be of type 'Fixed Asset' as Item {1} is an Asset Item,Compte {0} doit être de type ' actif fixe ' comme objet {1} est un atout article
|
||||
Account {0}: Parent account {1} can not be a ledger,Compte {0}: compte de Parent {1} ne peut pas être un grand livre
|
||||
Account {0}: Parent account {1} does not belong to company: {2},Compte {0}: compte de Parent {1} n'appartient pas à l'entreprise: {2}
|
||||
@@ -88,12 +88,12 @@ Accounting,Comptabilité
|
||||
Accounting journal entries.,Les écritures comptables.
|
||||
Accounts,Comptes
|
||||
Accounts Browser,Navigateur des comptes
|
||||
Accounts Frozen Upto,Jusqu'à comptes gelés
|
||||
Accounts Frozen Upto,Comptes gelés jusqu'au
|
||||
Accounts Payable,Comptes à payer
|
||||
Accounts Receivable,Débiteurs
|
||||
Accounts Settings,Paramètres des comptes
|
||||
Active,Actif
|
||||
Active: Will extract emails from ,Actif: va extraire des emails à partir de
|
||||
Active: Will extract emails from ,Actif : extraira les emails depuis
|
||||
Activity,Activité
|
||||
Activity Log,Journal d'activité
|
||||
Activity Log:,Journal d'activité:
|
||||
@@ -104,7 +104,7 @@ Actual Completion Date,Date d'achèvement réelle
|
||||
Actual Date,Date Réelle
|
||||
Actual End Date,Date de fin réelle
|
||||
Actual Invoice Date,Date de la facture réelle
|
||||
Actual Posting Date,Date réelle d'affichage
|
||||
Actual Posting Date,Date réelle d'envoie
|
||||
Actual Qty,Quantité réelle
|
||||
Actual Qty (at source/target),Quantité réelle (à la source / cible)
|
||||
Actual Qty After Transaction,Qté réel Après Transaction
|
||||
@@ -112,7 +112,7 @@ Actual Qty: Quantity available in the warehouse.,Quantité réelle : Quantité d
|
||||
Actual Quantity,Quantité réelle
|
||||
Actual Start Date,Date de début réelle
|
||||
Add,Ajouter
|
||||
Add / Edit Taxes and Charges,Ajouter / Modifier Taxes et frais
|
||||
Add / Edit Taxes and Charges,Ajouter / Modifier Taxes et Charges
|
||||
Add Child,Ajouter un enfant
|
||||
Add Serial No,Ajouter Numéro de série
|
||||
Add Taxes,Ajouter impôts
|
||||
@@ -130,9 +130,9 @@ Address Details,Détails de l'adresse
|
||||
Address HTML,Adresse HTML
|
||||
Address Line 1,Adresse ligne 1
|
||||
Address Line 2,Adresse ligne 2
|
||||
Address Template,Adresse modèle
|
||||
Address Template,Modèle d'adresse
|
||||
Address Title,Titre de l'adresse
|
||||
Address Title is mandatory.,Vous n'êtes pas autorisé à imprimer ce document
|
||||
Address Title is mandatory.,Le titre de l'adresse est obligatoire
|
||||
Address Type,Type d'adresse
|
||||
Address master.,Adresse principale
|
||||
Administrative Expenses,Dépenses administratives
|
||||
@@ -164,29 +164,29 @@ Ageing Based On,Basé sur le vieillissement
|
||||
Ageing Date is mandatory for opening entry,Titres de modèles d'impression par exemple Facture pro forma.
|
||||
Ageing date is mandatory for opening entry,Date vieillissement est obligatoire pour l'ouverture de l'entrée
|
||||
Agent,Agent
|
||||
Aging Date,Vieillissement Date
|
||||
Aging Date,date de vieillissement
|
||||
Aging Date is mandatory for opening entry,"Client requis pour ' Customerwise Discount """
|
||||
Agriculture,agriculture
|
||||
Airline,compagnie aérienne
|
||||
All Addresses.,Toutes les adresses.
|
||||
All Contact,Tout contact
|
||||
All Contacts.,Tous les contacts.
|
||||
All Customer Contact,Tout contact avec la clientèle
|
||||
All Customer Groups,N ° de série {0} est sous contrat de maintenance jusqu'à {1}
|
||||
All Customer Contact,Tous les contacts clients
|
||||
All Customer Groups,Tous les groupes client
|
||||
All Day,Toute la journée
|
||||
All Employee (Active),Tous les employés (Actif)
|
||||
All Item Groups,Tous les groupes des ouvrages
|
||||
All Lead (Open),Tous plomb (Ouvert)
|
||||
All Item Groups,Tous les groupes d'article
|
||||
All Lead (Open),Toutes les pistes (Ouvertes)
|
||||
All Products or Services.,Tous les produits ou services.
|
||||
All Sales Partner Contact,Tout contact Sales Partner
|
||||
All Sales Person,Tout Sales Person
|
||||
All Supplier Contact,Toutes Contacter le fournisseur
|
||||
All Sales Partner Contact,Tous les contacts des partenaires commerciaux
|
||||
All Sales Person,Tous les commerciaux
|
||||
All Supplier Contact,Tous les contacts fournisseur
|
||||
All Supplier Types,Tous les types de fournisseurs
|
||||
All Territories,Compte racine ne peut pas être supprimé
|
||||
All Territories,Tous les secteurs
|
||||
"All export related fields like currency, conversion rate, export total, export grand total etc are available in Delivery Note, POS, Quotation, Sales Invoice, Sales Order etc.","Tous les champs liés à l'exportation comme monnaie , taux de conversion , l'exportation totale , l'exportation totale grandiose etc sont disponibles dans la note de livraison , POS , offre , facture de vente , Sales Order etc"
|
||||
"All import related fields like currency, conversion rate, import total, import grand total etc are available in Purchase Receipt, Supplier Quotation, Purchase Invoice, Purchase Order etc.","Tous les champs importation connexes comme monnaie , taux de conversion , totale d'importation , importation grande etc totale sont disponibles en Achat réception , Fournisseur d'offre , facture d'achat , bon de commande , etc"
|
||||
All items have already been invoiced,Tous les articles ont déjà été facturés
|
||||
All these items have already been invoiced,Existe compte de l'enfant pour ce compte . Vous ne pouvez pas supprimer ce compte .
|
||||
All these items have already been invoiced,Tous ces articles ont déjà été facturés
|
||||
Allocate,Allouer
|
||||
Allocate leaves for a period.,Compte temporaire ( actif)
|
||||
Allocate leaves for the year.,Allouer des feuilles de l'année.
|
||||
@@ -199,10 +199,10 @@ Allow Bill of Materials,Laissez Bill of Materials
|
||||
Allow Bill of Materials should be 'Yes'. Because one or many active BOMs present for this item,Commande {0} n'est pas valide
|
||||
Allow Children,permettre aux enfants
|
||||
Allow Dropbox Access,Autoriser l'accès au Dropbox
|
||||
Allow Google Drive Access,Autoriser Google Drive accès
|
||||
Allow Negative Balance,Laissez solde négatif
|
||||
Allow Negative Stock,Laissez Stock Négatif
|
||||
Allow Production Order,Laissez un ordre de fabrication
|
||||
Allow Google Drive Access,Autoriser l'accès à Google Drive
|
||||
Allow Negative Balance,Autoriser un solde négatif
|
||||
Allow Negative Stock,Autoriser un stock négatif
|
||||
Allow Production Order,Permettre les ordres de fabrication
|
||||
Allow User,Permettre à l'utilisateur
|
||||
Allow Users,Autoriser les utilisateurs
|
||||
Allow the following users to approve Leave Applications for block days.,Autoriser les utilisateurs suivants d'approuver demandes d'autorisation pour les jours de bloc.
|
||||
@@ -211,14 +211,14 @@ Allowance Percent,Pourcentage allocation
|
||||
Allowance for over-{0} crossed for Item {1},Allocation pour les plus de {0} croisés pour objet {1}
|
||||
Allowance for over-{0} crossed for Item {1}.,Allocation pour les plus de {0} franchi pour objet {1}.
|
||||
Allowed Role to Edit Entries Before Frozen Date,Autorisé rôle à modifier les entrées Avant Frozen date
|
||||
Amended From,De modifiée
|
||||
Amended From,Modifié depuis
|
||||
Amount,Montant
|
||||
Amount (Company Currency),Montant (Société Monnaie)
|
||||
Amount Paid,Montant payé
|
||||
Amount to Bill,Montant du projet de loi
|
||||
An Customer exists with same name,Il existe un client avec le même nom
|
||||
"An Item Group exists with same name, please change the item name or rename the item group","Un groupe d'objet existe avec le même nom , s'il vous plaît changer le nom de l'élément ou de renommer le groupe de l'article"
|
||||
"An item exists with same name ({0}), please change the item group name or rename the item",Le compte doit être un compte de bilan
|
||||
"An Item Group exists with same name, please change the item name or rename the item group","Un groupe d'article existe avec le même nom, changez le nom de l'article ou renommez le groupe d'article SVP"
|
||||
"An item exists with same name ({0}), please change the item group name or rename the item","Un article existe avec le même nom ({0}), changez le groupe de l'article ou renommez l'article SVP"
|
||||
Analyst,analyste
|
||||
Annual,Annuel
|
||||
Another Period Closing Entry {0} has been made after {1},Point Wise impôt Détail
|
||||
@@ -246,17 +246,17 @@ Appraisal Template,Modèle d'évaluation
|
||||
Appraisal Template Goal,Objectif modèle d'évaluation
|
||||
Appraisal Template Title,Titre modèle d'évaluation
|
||||
Appraisal {0} created for Employee {1} in the given date range,Soulager date doit être supérieure à date d'adhésion
|
||||
Apprentice,apprenti
|
||||
Apprentice,Apprenti
|
||||
Approval Status,Statut d'approbation
|
||||
Approval Status must be 'Approved' or 'Rejected',non autorisé
|
||||
Approval Status must be 'Approved' or 'Rejected',Le statut d'approbation doit être 'Approuvé' ou 'Rejeté'
|
||||
Approved,Approuvé
|
||||
Approver,Approbateur
|
||||
Approving Role,Approuver rôle
|
||||
Approving Role cannot be same as role the rule is Applicable To,Vous ne pouvez pas sélectionner le type de charge comme « Sur la ligne précédente Montant » ou « Le précédent Row totale » pour la première rangée
|
||||
Approving User,Approuver l'utilisateur
|
||||
Approving User cannot be same as user the rule is Applicable To,Approuver l'utilisateur ne peut pas être identique à l'utilisateur la règle est applicable aux
|
||||
Are you sure you want to STOP ,
|
||||
Are you sure you want to UNSTOP ,
|
||||
Are you sure you want to STOP ,Etes-vous sûr de vouloir arrêter
|
||||
Are you sure you want to UNSTOP ,Etes-vous sûr de vouloir annuler l'arrêt
|
||||
Arrear Amount,Montant échu
|
||||
"As Production Order can be made for this item, it must be a stock item.","Comme ordre de fabrication peut être faite de cet élément, il doit être un article en stock ."
|
||||
As per Stock UOM,Selon Stock UDM
|
||||
@@ -265,11 +265,11 @@ Asset,atout
|
||||
Assistant,assistant
|
||||
Associate,associé
|
||||
Atleast one of the Selling or Buying must be selected,Au moins un de la vente ou l'achat doit être sélectionné
|
||||
Atleast one warehouse is mandatory,Atleast un entrepôt est obligatoire
|
||||
Attach Image,suivant
|
||||
Attach Letterhead,Fixez -tête
|
||||
Attach Logo,S'il vous plaît sélectionner un fichier csv valide avec les données
|
||||
Attach Your Picture,Liquidation Date non mentionné
|
||||
Atleast one warehouse is mandatory,Au moins un entrepôt est obligatoire
|
||||
Attach Image,Joindre l'image
|
||||
Attach Letterhead,Joindre l'entête
|
||||
Attach Logo,Joindre le logo
|
||||
Attach Your Picture,Joindre votre photo
|
||||
Attendance,Présence
|
||||
Attendance Date,Date de Participation
|
||||
Attendance Details,Détails de présence
|
||||
@@ -285,7 +285,7 @@ Auto Accounting For Stock Settings,Auto Comptabilité Pour les paramètres de dr
|
||||
Auto Material Request,Auto Demande de Matériel
|
||||
Auto-raise Material Request if quantity goes below re-order level in a warehouse,Auto-raise Demande de Matériel si la quantité va en dessous du niveau de re-commande dans un entrepôt
|
||||
Automatically compose message on submission of transactions.,Composer automatiquement un message sur la soumission de transactions .
|
||||
Automatically extract Job Applicants from a mail box ,
|
||||
Automatically extract Job Applicants from a mail box ,Automatically extract Job Applicants from a mail box
|
||||
Automatically extract Leads from a mail box e.g.,Extraire automatiquement des prospects à partir d'une boîte aux lettres par exemple
|
||||
Automatically updated via Stock Entry of type Manufacture/Repack,Automatiquement mis à jour via l'entrée de fabrication de type Stock / Repack
|
||||
Automotive,automobile
|
||||
@@ -369,10 +369,10 @@ Billed Amount,Montant facturé
|
||||
Billed Amt,Bec Amt
|
||||
Billing,Facturation
|
||||
Billing Address,Adresse de facturation
|
||||
Billing Address Name,Facturation Nom Adresse
|
||||
Billing Address Name,Nom de l'adresse de facturation
|
||||
Billing Status,Statut de la facturation
|
||||
Bills raised by Suppliers.,Factures soulevé par les fournisseurs.
|
||||
Bills raised to Customers.,Factures aux clients soulevé.
|
||||
Bills raised by Suppliers.,Factures reçues des fournisseurs.
|
||||
Bills raised to Customers.,Factures émises aux clients.
|
||||
Bin,Boîte
|
||||
Bio,Bio
|
||||
Biotechnology,biotechnologie
|
||||
@@ -380,10 +380,10 @@ Birthday,anniversaire
|
||||
Block Date,Date de bloquer
|
||||
Block Days,Bloquer les jours
|
||||
Block leave applications by department.,Bloquer les demandes d'autorisation par le ministère.
|
||||
Blog Post,Blog
|
||||
Blog Post,Article de blog
|
||||
Blog Subscriber,Abonné Blog
|
||||
Blood Group,Groupe sanguin
|
||||
Both Warehouse must belong to same Company,Les deux Entrepôt doit appartenir à une même entreprise
|
||||
Both Warehouse must belong to same Company,Les deux Entrepôt doivent appartenir à la même entreprise
|
||||
Box,boîte
|
||||
Branch,Branche
|
||||
Brand,Marque
|
||||
@@ -406,7 +406,7 @@ Build Report,Créer un rapport
|
||||
Bundle items at time of sale.,Regrouper des envois au moment de la vente.
|
||||
Business Development Manager,Directeur du développement des affaires
|
||||
Buying,Achat
|
||||
Buying & Selling,Fin d'année financière Date
|
||||
Buying & Selling,Achats et ventes
|
||||
Buying Amount,Montant d'achat
|
||||
Buying Settings,Réglages d'achat
|
||||
"Buying must be checked, if Applicable For is selected as {0}","Achat doit être vérifiée, si pour Applicable est sélectionné comme {0}"
|
||||
@@ -428,11 +428,11 @@ Call,Appeler
|
||||
Calls,appels
|
||||
Campaign,Campagne
|
||||
Campaign Name,Nom de la campagne
|
||||
Campaign Name is required,Maître à la clientèle .
|
||||
Campaign Name is required,Le nom de la campagne est requis
|
||||
Campaign Naming By,Campagne Naming par
|
||||
Campaign-.####,Centre de coûts de transactions existants ne peut pas être converti en groupe
|
||||
Campaign-.####,Campagne-.####
|
||||
Can be approved by {0},Peut être approuvé par {0}
|
||||
"Can not filter based on Account, if grouped by Account","Impossible de filtrer sur la base de compte , si regroupées par compte"
|
||||
"Can not filter based on Account, if grouped by Account","Impossible de filtrer sur les compte , si regroupées par compte"
|
||||
"Can not filter based on Voucher No, if grouped by Voucher","Impossible de filtrer sur la base Bon Non, si regroupés par Chèque"
|
||||
Can refer row only if the charge type is 'On Previous Row Amount' or 'Previous Row Total',Remarque : {0}
|
||||
Cancel Material Visit {0} before cancelling this Customer Issue,Invalid serveur de messagerie . S'il vous plaît corriger et essayer à nouveau.
|
||||
@@ -441,10 +441,10 @@ Cancelled,Annulé
|
||||
Cancelling this Stock Reconciliation will nullify its effect.,Annulation de ce stock de réconciliation annuler son effet .
|
||||
Cannot Cancel Opportunity as Quotation Exists,Vous ne pouvez pas annuler Possibilité de devis Existe
|
||||
Cannot approve leave as you are not authorized to approve leaves on Block Dates,Vous ne pouvez pas approuver les congés que vous n'êtes pas autorisé à approuver les congés sur les dates de bloc
|
||||
Cannot cancel because Employee {0} is already approved for {1},Vous ne pouvez pas annuler parce employés {0} est déjà approuvé pour {1}
|
||||
Cannot cancel because Employee {0} is already approved for {1},Impossible d'annuler car l'employé {0} est déjà approuvé pour {1}
|
||||
Cannot cancel because submitted Stock Entry {0} exists,Vous ne pouvez pas annuler car soumis Stock entrée {0} existe
|
||||
Cannot carry forward {0},Point {0} doit être un achat article
|
||||
Cannot change Fiscal Year Start Date and Fiscal Year End Date once the Fiscal Year is saved.,Vous ne pouvez pas modifier Exercice Date de départ et de l'exercice Date de fin une fois l'exercice est enregistré.
|
||||
Cannot change Fiscal Year Start Date and Fiscal Year End Date once the Fiscal Year is saved.,Impossible de modifier les dates de début et de fin d'exercice une fois que l'exercice est enregistré.
|
||||
"Cannot change company's default currency, because there are existing transactions. Transactions must be cancelled to change the default currency.",Voyage
|
||||
Cannot convert Cost Center to ledger as it has child nodes,Vous ne pouvez pas convertir le centre de coûts à livre car il possède des nœuds enfant
|
||||
Cannot covert to Group because Master Type or Account Type is selected.,Il y avait des erreurs lors de l'envoi de courriel . S'il vous plaît essayez de nouveau .
|
||||
@@ -842,13 +842,13 @@ Distributor,Distributeur
|
||||
Divorced,Divorcé
|
||||
Do Not Contact,Ne communiquez pas avec
|
||||
Do not show any symbol like $ etc next to currencies.,Ne plus afficher n'importe quel symbole comme $ etc à côté de devises.
|
||||
Do really want to unstop production order: ,
|
||||
Do you really want to STOP ,
|
||||
Do really want to unstop production order: ,Do really want to unstop production order:
|
||||
Do you really want to STOP ,Do you really want to STOP
|
||||
Do you really want to STOP this Material Request?,Voulez-vous vraiment arrêter cette Demande de Matériel ?
|
||||
Do you really want to Submit all Salary Slip for month {0} and year {1},"Statut du document de transition {0} {1}, n'est pas autorisé"
|
||||
Do you really want to UNSTOP ,
|
||||
Do you really want to UNSTOP ,Do you really want to UNSTOP
|
||||
Do you really want to UNSTOP this Material Request?,Voulez-vous vraiment à ce unstop Demande de Matériel ?
|
||||
Do you really want to stop production order: ,
|
||||
Do you really want to stop production order: ,Do you really want to stop production order:
|
||||
Doc Name,Nom de Doc
|
||||
Doc Type,Doc Type d'
|
||||
Document Description,Description du document
|
||||
@@ -900,7 +900,7 @@ Electronics,électronique
|
||||
Email,Email
|
||||
Email Digest,Email Digest
|
||||
Email Digest Settings,Paramètres de messagerie Digest
|
||||
Email Digest: ,
|
||||
Email Digest: ,Email Digest:
|
||||
Email Id,Identification d'email
|
||||
"Email Id where a job applicant will email e.g. ""jobs@example.com""",Identification d'email où un demandeur d'emploi enverra par courriel par exemple "jobs@example.com"
|
||||
Email Notifications,Notifications par courriel
|
||||
@@ -960,7 +960,7 @@ Enter url parameter for receiver nos,Entrez le paramètre url pour nos récepteu
|
||||
Entertainment & Leisure,Entertainment & Leisure
|
||||
Entertainment Expenses,Frais de représentation
|
||||
Entries,Entrées
|
||||
Entries against ,
|
||||
Entries against ,Entries against
|
||||
Entries are not allowed against this Fiscal Year if the year is closed.,Les inscriptions ne sont pas autorisés contre cette exercice si l'année est fermé.
|
||||
Equity,Opération {0} est répété dans le tableau des opérations
|
||||
Error: {0} > {1},Erreur: {0} > {1}
|
||||
@@ -1029,20 +1029,20 @@ Failed: ,Échec:
|
||||
Family Background,Antécédents familiaux
|
||||
Fax,Fax
|
||||
Features Setup,Features Setup
|
||||
Feed,Nourrir
|
||||
Feed,Flux
|
||||
Feed Type,Type de flux
|
||||
Feedback,Réaction
|
||||
Female,Féminin
|
||||
Feedback,Commentaire
|
||||
Female,Femme
|
||||
Fetch exploded BOM (including sub-assemblies),Fetch nomenclature éclatée ( y compris les sous -ensembles )
|
||||
"Field available in Delivery Note, Quotation, Sales Invoice, Sales Order","Champ disponible dans la note de livraison, devis, facture de vente, Sales Order"
|
||||
Files Folder ID,Les fichiers d'identification des dossiers
|
||||
Fill the form and save it,Remplissez le formulaire et l'enregistrer
|
||||
Filter based on customer,Filtre basé sur le client
|
||||
Filter based on item,Filtre basé sur le point
|
||||
Filter based on item,Filtre basé sur l'article
|
||||
Financial / accounting year.,Point {0} a été saisi plusieurs fois contre une même opération
|
||||
Financial Analytics,Financial Analytics
|
||||
Financial Services,services financiers
|
||||
Financial Year End Date,paire
|
||||
Financial Year End Date,Date de fin de l'exercice financier
|
||||
Financial Year Start Date,Les paramètres par défaut pour la vente de transactions .
|
||||
Finished Goods,Produits finis
|
||||
First Name,Prénom
|
||||
@@ -1051,11 +1051,11 @@ Fiscal Year,Exercice
|
||||
Fiscal Year Start Date and Fiscal Year End Date are already set in Fiscal Year {0},Exercice Date de début et de fin d'exercice la date sont réglées dans l'année fiscale {0}
|
||||
Fiscal Year Start Date and Fiscal Year End Date cannot be more than a year apart.,Exercice date de début et de fin d'exercice date ne peut être plus d'un an d'intervalle.
|
||||
Fiscal Year Start Date should not be greater than Fiscal Year End Date,Exercice Date de début ne doit pas être supérieure à fin d'exercice Date de
|
||||
Fixed Asset,des immobilisations
|
||||
Fixed Asset,Actifs immobilisés
|
||||
Fixed Assets,Facteur de conversion est requis
|
||||
Follow via Email,Suivez par e-mail
|
||||
"Following table will show values if items are sub - contracted. These values will be fetched from the master of ""Bill of Materials"" of sub - contracted items.",Le tableau suivant indique les valeurs si les articles sont en sous - traitance. Ces valeurs seront extraites de la maîtrise de la «Bill of Materials" de sous - traitance articles.
|
||||
Food,prix
|
||||
Food,Alimentation
|
||||
"Food, Beverage & Tobacco","Alimentation , boissons et tabac"
|
||||
"For 'Sales BOM' items, Warehouse, Serial No and Batch No will be considered from the 'Packing List' table. If Warehouse and Batch No are same for all packing items for any 'Sales BOM' item, those values can be entered in the main Item table, values will be copied to 'Packing List' table.","Pour les articles ""ventes de nomenclature», Entrepôt, N ° de série et de lot n ° sera considéré comme de la table la «Liste d'emballage. Si Entrepôt et lot n ° sont les mêmes pour tous les articles d'emballage pour tout article 'Sales nomenclature », ces valeurs peuvent être entrées dans le tableau principal de l'article, les valeurs seront copiés sur« Liste d'emballage »table."
|
||||
For Company,Pour l'entreprise
|
||||
@@ -1084,7 +1084,7 @@ From Bill of Materials,De Bill of Materials
|
||||
From Company,De Company
|
||||
From Currency,De Monnaie
|
||||
From Currency and To Currency cannot be same,De leur monnaie et à devises ne peut pas être la même
|
||||
From Customer,De clientèle
|
||||
From Customer,Du client
|
||||
From Customer Issue,De émission à la clientèle
|
||||
From Date,Partir de la date
|
||||
From Date cannot be greater than To Date,Date d'entrée ne peut pas être supérieur à ce jour
|
||||
@@ -1123,7 +1123,7 @@ Gantt Chart,Diagramme de Gantt
|
||||
Gantt chart of all tasks.,Diagramme de Gantt de toutes les tâches.
|
||||
Gender,Sexe
|
||||
General,Général
|
||||
General Ledger,General Ledger
|
||||
General Ledger,Grand livre général
|
||||
Generate Description HTML,Générer HTML Description
|
||||
Generate Material Requests (MRP) and Production Orders.,Lieu à des demandes de matériel (MRP) et de la procédure de production.
|
||||
Generate Salary Slips,Générer les bulletins de salaire
|
||||
@@ -1146,14 +1146,14 @@ Get Terms and Conditions,Obtenez Termes et Conditions
|
||||
Get Unreconciled Entries,Obtenez non rapprochés entrées
|
||||
Get Weekly Off Dates,Obtenez hebdomadaires Dates Off
|
||||
"Get valuation rate and available stock at source/target warehouse on mentioned posting date-time. If serialized item, please press this button after entering serial nos.","Obtenez taux d'évaluation et le stock disponible à la source / cible d'entrepôt sur l'affichage mentionné de date-heure. Si sérialisé article, s'il vous plaît appuyez sur cette touche après avoir entré numéros de série."
|
||||
Global Defaults,Par défaut mondiaux
|
||||
Global Defaults,Par défaut globaux
|
||||
Global POS Setting {0} already created for company {1},Monter : {0}
|
||||
Global Settings,Paramètres globaux
|
||||
"Go to the appropriate group (usually Application of Funds > Current Assets > Bank Accounts and create a new Account Ledger (by clicking on Add Child) of type ""Bank""",Aller au groupe approprié (habituellement utilisation des fonds > Actif à court terme > Comptes bancaires et créer un nouveau compte Ledger ( en cliquant sur Ajouter un enfant ) de type «Banque»
|
||||
"Go to the appropriate group (usually Source of Funds > Current Liabilities > Taxes and Duties and create a new Account Ledger (by clicking on Add Child) of type ""Tax"" and do mention the Tax rate.",Aller au groupe approprié (généralement source de fonds > Passif à court terme > Impôts et taxes et créer un nouveau compte Ledger ( en cliquant sur Ajouter un enfant ) de type « impôt» et ne mentionnent le taux de l'impôt.
|
||||
Goal,Objectif
|
||||
Goals,Objectifs
|
||||
Goods received from Suppliers.,Les marchandises reçues de fournisseurs.
|
||||
Goods received from Suppliers.,Marchandises reçues des fournisseurs.
|
||||
Google Drive,Google Drive
|
||||
Google Drive Access Allowed,Google Drive accès autorisé
|
||||
Government,Si différente de l'adresse du client
|
||||
@@ -1181,7 +1181,7 @@ HTML / Banner that will show on the top of product list.,HTML / bannière qui ap
|
||||
Half Day,Demi-journée
|
||||
Half Yearly,La moitié annuel
|
||||
Half-yearly,Semestriel
|
||||
Happy Birthday!,Joyeux anniversaire!
|
||||
Happy Birthday!,Joyeux anniversaire !
|
||||
Hardware,Sales Person cible Variance article Groupe Sage
|
||||
Has Batch No,A lot no
|
||||
Has Child Node,A Node enfant
|
||||
@@ -1205,11 +1205,11 @@ Holiday List,Liste de vacances
|
||||
Holiday List Name,Nom de la liste de vacances
|
||||
Holiday master.,Débit doit être égal à crédit . La différence est {0}
|
||||
Holidays,Fêtes
|
||||
Home,Maison
|
||||
Home,Accueil
|
||||
Host,Hôte
|
||||
"Host, Email and Password required if emails are to be pulled","D'accueil, e-mail et mot de passe requis si les courriels sont d'être tiré"
|
||||
Hour,{0} ' {1}' pas l'Exercice {2}
|
||||
Hour Rate,Taux heure
|
||||
Hour,heure
|
||||
Hour Rate,Taux horraire
|
||||
Hour Rate Labour,Travail heure Tarif
|
||||
Hours,Heures
|
||||
How Pricing Rule is applied?,Comment Prix règle est appliquée?
|
||||
@@ -1452,12 +1452,12 @@ Itemwise Discount,Remise Itemwise
|
||||
Itemwise Recommended Reorder Level,Itemwise recommandée SEUIL DE COMMANDE
|
||||
Job Applicant,Demandeur d'emploi
|
||||
Job Opening,Offre d'emploi
|
||||
Job Profile,Droits et taxes
|
||||
Job Title,Titre d'emploi
|
||||
Job Profile,Profil d'emploi
|
||||
Job Title,Titre de l'emploi
|
||||
"Job profile, qualifications required etc.",Non authroized depuis {0} dépasse les limites
|
||||
Jobs Email Settings,Paramètres de messagerie Emploi
|
||||
Journal Entries,Journal Entries
|
||||
Journal Entry,Journal Entry
|
||||
Journal Entry,Journal d'écriture
|
||||
Journal Voucher,Bon Journal
|
||||
Journal Voucher Detail,Détail pièce de journal
|
||||
Journal Voucher Detail No,Détail Bon Journal No
|
||||
@@ -1575,7 +1575,7 @@ Maintenance Visit Purpose,But Visite d'entretien
|
||||
Maintenance Visit {0} must be cancelled before cancelling this Sales Order,Doublons {0} avec la même {1}
|
||||
Maintenance start date can not be before delivery date for Serial No {0},Entretien date de début ne peut pas être avant la date de livraison pour série n ° {0}
|
||||
Major/Optional Subjects,Sujets principaux / en option
|
||||
Make ,
|
||||
Make ,Faire
|
||||
Make Accounting Entry For Every Stock Movement,Faites Entrée Comptabilité Pour chaque mouvement Stock
|
||||
Make Bank Voucher,Assurez-Bon Banque
|
||||
Make Credit Note,Assurez Note de crédit
|
||||
@@ -1759,7 +1759,7 @@ Newsletter Status,Statut newsletter
|
||||
Newsletter has already been sent,Entrepôt requis pour stock Article {0}
|
||||
"Newsletters to contacts, leads.","Bulletins aux contacts, prospects."
|
||||
Newspaper Publishers,Éditeurs de journaux
|
||||
Next,Nombre purchse de commande requis pour objet {0}
|
||||
Next,Suivant
|
||||
Next Contact By,Suivant Par
|
||||
Next Contact Date,Date Contact Suivant
|
||||
Next Date,Date suivante
|
||||
@@ -2125,19 +2125,19 @@ Prefix,Préfixe
|
||||
Present,Présent
|
||||
Prevdoc DocType,Prevdoc DocType
|
||||
Prevdoc Doctype,Prevdoc Doctype
|
||||
Preview,dépenses diverses
|
||||
Previous,Sérialisé article {0} ne peut pas être mis à jour Stock réconciliation
|
||||
Preview,Aperçu
|
||||
Previous,Précedent
|
||||
Previous Work Experience,L'expérience de travail antérieure
|
||||
Price,Profil de l'organisation
|
||||
Price / Discount,Utilisateur Notes est obligatoire
|
||||
Price List,Liste des Prix
|
||||
Price List,Liste des prix
|
||||
Price List Currency,Devise Prix
|
||||
Price List Currency not selected,Liste des Prix devise sélectionné
|
||||
Price List Exchange Rate,Taux de change Prix de liste
|
||||
Price List Name,Nom Liste des Prix
|
||||
Price List Rate,Prix Liste des Prix
|
||||
Price List Rate (Company Currency),Tarifs Taux (Société Monnaie)
|
||||
Price List master.,{0} n'appartient pas à la Société {1}
|
||||
Price List master.,Liste de prix principale.
|
||||
Price List must be applicable for Buying or Selling,Compte {0} doit être SAMES comme crédit du compte dans la facture d'achat en ligne {0}
|
||||
Price List not selected,Barcode valide ou N ° de série
|
||||
Price List {0} is disabled,Série {0} déjà utilisé dans {1}
|
||||
@@ -2156,23 +2156,23 @@ Priority,Priorité
|
||||
Private Equity,Private Equity
|
||||
Privilege Leave,Point {0} doit être fonction Point
|
||||
Probation,probation
|
||||
Process Payroll,Paie processus
|
||||
Process Payroll,processus de paye
|
||||
Produced,produit
|
||||
Produced Quantity,Quantité produite
|
||||
Product Enquiry,Demande d'information produit
|
||||
Production,production
|
||||
Production,Production
|
||||
Production Order,Ordre de fabrication
|
||||
Production Order status is {0},Feuilles alloué avec succès pour {0}
|
||||
Production Order {0} must be cancelled before cancelling this Sales Order,Tous les groupes de clients
|
||||
Production Order {0} must be submitted,Client / Nom plomb
|
||||
Production Orders,ordres de fabrication
|
||||
Production Orders,Ordres de fabrication
|
||||
Production Orders in Progress,Les commandes de produits en cours
|
||||
Production Plan Item,Élément du plan de production
|
||||
Production Plan Items,Éléments du plan de production
|
||||
Production Plan Sales Order,Plan de Production Ventes Ordre
|
||||
Production Plan Sales Orders,Vente Plan d'ordres de production
|
||||
Production Planning Tool,Outil de planification de la production
|
||||
Products,Point {0} n'existe pas dans {1} {2}
|
||||
Products,Produits
|
||||
"Products will be sorted by weight-age in default searches. More the weight-age, higher the product will appear in the list.","Les produits seront triés par poids-âge dans les recherches par défaut. Plus le poids-âge, plus le produit apparaîtra dans la liste."
|
||||
Professional Tax,Taxe Professionnelle
|
||||
Profit and Loss,Pertes et profits
|
||||
@@ -2189,7 +2189,7 @@ Project Type,Type de projet
|
||||
Project Value,Valeur du projet
|
||||
Project activity / task.,Activité de projet / tâche.
|
||||
Project master.,Projet de master.
|
||||
Project will get saved and will be searchable with project name given,Projet seront sauvegardés et sera consultable avec le nom de projet donné
|
||||
Project will get saved and will be searchable with project name given,Projet sera sauvegardé et sera consultable avec le nom de projet donné
|
||||
Project wise Stock Tracking,Projet sage Stock Tracking
|
||||
Project-wise data is not available for Quotation,alloué avec succès
|
||||
Projected,Projection
|
||||
@@ -2201,16 +2201,16 @@ Proposal Writing,Rédaction de propositions
|
||||
Provide email id registered in company,Fournir id e-mail enregistrée dans la société
|
||||
Provisional Profit / Loss (Credit),Résultat provisoire / Perte (crédit)
|
||||
Public,Public
|
||||
Published on website at: {0},Publié sur le site Web au: {0}
|
||||
Published on website at: {0},Publié sur le site Web le: {0}
|
||||
Publishing,édition
|
||||
Pull sales orders (pending to deliver) based on the above criteria,Tirez les ordres de vente (en attendant de livrer) sur la base des critères ci-dessus
|
||||
Purchase,Acheter
|
||||
Purchase,Achat
|
||||
Purchase / Manufacture Details,Achat / Fabrication Détails
|
||||
Purchase Analytics,Les analyses des achats
|
||||
Purchase Common,Achat commune
|
||||
Purchase Details,Conditions de souscription
|
||||
Purchase Common,Achat commun
|
||||
Purchase Details,Détails de l'achat
|
||||
Purchase Discounts,Rabais sur l'achat
|
||||
Purchase Invoice,Achetez facture
|
||||
Purchase Invoice,Facture achat
|
||||
Purchase Invoice Advance,Paiement à l'avance Facture
|
||||
Purchase Invoice Advances,Achat progrès facture
|
||||
Purchase Invoice Item,Achat d'article de facture
|
||||
@@ -2258,20 +2258,20 @@ Qty as per Stock UOM,Qté en stock pour Emballage
|
||||
Qty to Deliver,Quantité à livrer
|
||||
Qty to Order,Quantité à commander
|
||||
Qty to Receive,Quantité à recevoir
|
||||
Qty to Transfer,Quantité de Transfert
|
||||
Qty to Transfer,Qté à Transférer
|
||||
Qualification,Qualification
|
||||
Quality,Qualité
|
||||
Quality Inspection,Inspection de la Qualité
|
||||
Quality Inspection Parameters,Paramètres inspection de la qualité
|
||||
Quality Inspection Reading,Lecture d'inspection de la qualité
|
||||
Quality Inspection Readings,Lectures inspection de la qualité
|
||||
Quality Inspection required for Item {0},Navigateur des ventes
|
||||
Quality Inspection required for Item {0},Inspection de la qualité requise pour l'article {0}
|
||||
Quality Management,Gestion de la qualité
|
||||
Quantity,Quantité
|
||||
Quantity Requested for Purchase,Quantité demandée pour l'achat
|
||||
Quantity and Rate,Quantité et taux
|
||||
Quantity and Warehouse,Quantité et entrepôt
|
||||
Quantity cannot be a fraction in row {0},accueil
|
||||
Quantity cannot be a fraction in row {0},Quantité ne peut pas être une fraction de la rangée
|
||||
Quantity for Item {0} must be less than {1},Quantité de l'article {0} doit être inférieur à {1}
|
||||
Quantity in row {0} ({1}) must be same as manufactured quantity {2},Entrepôt ne peut pas être supprimé car il existe entrée stock registre pour cet entrepôt .
|
||||
Quantity of item obtained after manufacturing / repacking from given quantities of raw materials,Quantité de produit obtenue après fabrication / reconditionnement des quantités données de matières premières
|
||||
@@ -2288,7 +2288,7 @@ Quotation To,Devis Pour
|
||||
Quotation Trends,Devis Tendances
|
||||
Quotation {0} is cancelled,Devis {0} est annulée
|
||||
Quotation {0} not of type {1},Activer / désactiver les monnaies .
|
||||
Quotations received from Suppliers.,Citations reçues des fournisseurs.
|
||||
Quotations received from Suppliers.,Devis reçus des fournisseurs.
|
||||
Quotes to Leads or Customers.,Citations à prospects ou clients.
|
||||
Raise Material Request when stock reaches re-order level,Soulever demande de matériel lorsque le stock atteint le niveau de réapprovisionnement
|
||||
Raised By,Raised By
|
||||
@@ -2382,7 +2382,7 @@ Relieving Date must be greater than Date of Joining,Vous n'êtes pas autorisé
|
||||
Remark,Remarque
|
||||
Remarks,Remarques
|
||||
Remarks Custom,Remarques sur commande
|
||||
Rename,rebaptiser
|
||||
Rename,Renommer
|
||||
Rename Log,Renommez identifiez-vous
|
||||
Rename Tool,Outils de renommage
|
||||
Rent Cost,louer coût
|
||||
@@ -2450,7 +2450,7 @@ Rounded Off,Période est trop courte
|
||||
Rounded Total,Totale arrondie
|
||||
Rounded Total (Company Currency),Totale arrondie (Société Monnaie)
|
||||
Row # ,Row #
|
||||
Row # {0}: ,
|
||||
Row # {0}: ,Ligne # {0}:
|
||||
Row #{0}: Ordered qty can not less than item's minimum order qty (defined in item master).,Ligne # {0}: quantité Commandé ne peut pas moins que l'ordre minimum quantité de produit (défini dans le maître de l'article).
|
||||
Row #{0}: Please specify Serial No for Item {1},Ligne # {0}: S'il vous plaît spécifier Pas de série pour objet {1}
|
||||
Row {0}: Account does not match with \ Purchase Invoice Credit To account,Ligne {0}: compte ne correspond pas à \ Facture d'achat crédit du compte
|
||||
@@ -2654,7 +2654,7 @@ Service Address,Adresse du service
|
||||
Service Tax,Service Tax
|
||||
Services,Services
|
||||
Set,Série est obligatoire
|
||||
"Set Default Values like Company, Currency, Current Fiscal Year, etc.","Des valeurs par défaut comme la Compagnie , devise , année financière en cours , etc"
|
||||
"Set Default Values like Company, Currency, Current Fiscal Year, etc.","Valeurs par défaut comme : societé , devise , année financière en cours , etc"
|
||||
Set Item Group-wise budgets on this Territory. You can also include seasonality by setting the Distribution.,Set Point du Groupe sages budgets sur ce territoire. Vous pouvez également inclure la saisonnalité en réglant la distribution.
|
||||
Set Status as Available,Définir l'état comme disponible
|
||||
Set as Default,Définir par défaut
|
||||
@@ -2667,7 +2667,7 @@ Setting up...,Mise en place ...
|
||||
Settings,Réglages
|
||||
Settings for HR Module,Utilisateur {0} est désactivé
|
||||
"Settings to extract Job Applicants from a mailbox e.g. ""jobs@example.com""",Paramètres pour extraire demandeurs d'emploi à partir d'une boîte aux lettres par exemple "jobs@example.com"
|
||||
Setup,Installation
|
||||
Setup,Configuration
|
||||
Setup Already Complete!!,Configuration déjà complet !
|
||||
Setup Complete,installation terminée
|
||||
Setup SMS gateway settings,paramètres de la passerelle SMS de configuration
|
||||
@@ -2693,7 +2693,7 @@ Shopping Cart,Panier
|
||||
Short biography for website and other publications.,Courte biographie pour le site Web et d'autres publications.
|
||||
"Show ""In Stock"" or ""Not in Stock"" based on stock available in this warehouse.",Voir "En stock" ou "Pas en stock» basée sur le stock disponible dans cet entrepôt.
|
||||
"Show / Hide features like Serial Nos, POS etc.",commercial
|
||||
Show In Website,Afficher dans un site Web
|
||||
Show In Website,Afficher dans le site Web
|
||||
Show a slideshow at the top of the page,Afficher un diaporama en haut de la page
|
||||
Show in Website,Afficher dans Site Web
|
||||
Show rows with zero values,Afficher lignes avec des valeurs nulles
|
||||
@@ -2752,7 +2752,7 @@ Stock Ageing,Stock vieillissement
|
||||
Stock Analytics,Analytics stock
|
||||
Stock Assets,payable
|
||||
Stock Balance,Solde Stock
|
||||
Stock Entries already created for Production Order ,
|
||||
Stock Entries already created for Production Order ,Entrées stock déjà créés pour ordre de fabrication
|
||||
Stock Entry,Entrée Stock
|
||||
Stock Entry Detail,Détail d'entrée Stock
|
||||
Stock Expenses,Facteur de conversion de l'unité de mesure par défaut doit être de 1 à la ligne {0}
|
||||
@@ -3056,7 +3056,7 @@ Travel Expenses,Code article nécessaire au rang n ° {0}
|
||||
Tree Type,Type d' arbre
|
||||
Tree of Item Groups.,Arbre de groupes des ouvrages .
|
||||
Tree of finanial Cost Centers.,Il ne faut pas mettre à jour les entrées de plus que {0}
|
||||
Tree of finanial accounts.,Titres à {0} doivent être annulées avant d'annuler cette commande client
|
||||
Tree of finanial accounts.,Arborescence des comptes financiers.
|
||||
Trial Balance,Balance
|
||||
Tuesday,Mardi
|
||||
Type,Type
|
||||
@@ -3113,7 +3113,7 @@ Urgent,Urgent
|
||||
Use Multi-Level BOM,Utilisez Multi-Level BOM
|
||||
Use SSL,Utiliser SSL
|
||||
Used for Production Plan,Utilisé pour plan de production
|
||||
User,Utilisateur
|
||||
User,Utilisateurs
|
||||
User ID,ID utilisateur
|
||||
User ID not set for Employee {0},ID utilisateur non défini pour les employés {0}
|
||||
User Name,Nom d'utilisateur
|
||||
@@ -3204,7 +3204,7 @@ Weight UOM,Poids Emballage
|
||||
"Weight is mentioned,\nPlease mention ""Weight UOM"" too","Le poids est indiqué , \ nVeuillez mentionne "" Poids Emballage « trop"
|
||||
Weightage,Weightage
|
||||
Weightage (%),Weightage (%)
|
||||
Welcome,Taux (% )
|
||||
Welcome,Bienvenue
|
||||
Welcome to ERPNext. Over the next few minutes we will help you setup your ERPNext account. Try and fill in as much information as you have even if it takes a bit longer. It will save you a lot of time later. Good Luck!,"Bienvenue à ERPNext . Au cours des prochaines minutes, nous allons vous aider à configurer votre compte ERPNext . Essayez de remplir autant d'informations que vous avez même si cela prend un peu plus longtemps . Elle vous fera économiser beaucoup de temps plus tard . Bonne chance !"
|
||||
Welcome to ERPNext. Please select your language to begin the Setup Wizard.,Tête de compte {0} créé
|
||||
What does it do?,Que faut-il faire ?
|
||||
@@ -3260,8 +3260,8 @@ You can submit this Stock Reconciliation.,Vous pouvez soumettre cette Stock réc
|
||||
You can update either Quantity or Valuation Rate or both.,Vous pouvez mettre à jour soit Quantité ou l'évaluation des taux ou les deux.
|
||||
You cannot credit and debit same account at the same time,Vous ne pouvez pas crédit et de débit même compte en même temps
|
||||
You have entered duplicate items. Please rectify and try again.,Vous avez entré les doublons . S'il vous plaît corriger et essayer à nouveau.
|
||||
You may need to update: {0},Vous devez mettre à jour : {0}
|
||||
You must Save the form before proceeding,produits impressionnants
|
||||
You may need to update: {0},Vous devrez peut-être mettre à jour : {0}
|
||||
You must Save the form before proceeding,Vous devez sauvegarder le formulaire avant de continuer
|
||||
Your Customer's TAX registration numbers (if applicable) or any general information,Votre Client numéros d'immatriculation fiscale (le cas échéant) ou toute autre information générale
|
||||
Your Customers,vos clients
|
||||
Your Login Id,Votre ID de connexion
|
||||
@@ -3318,7 +3318,7 @@ website page link,Lien vers page web
|
||||
{0} must be reduced by {1} or you should increase overflow tolerance,{0} doit être réduite par {1} ou vous devez augmenter la tolérance de dépassement
|
||||
{0} must have role 'Leave Approver',Nouveau Stock UDM est nécessaire
|
||||
{0} valid serial nos for Item {1},BOM {0} pour objet {1} à la ligne {2} est inactif ou non soumis
|
||||
{0} {1} against Bill {2} dated {3},S'il vous plaît entrer le titre !
|
||||
{0} {1} against Bill {2} dated {3},{0} {1} contre le projet de loi en date du {2} {3}
|
||||
{0} {1} against Invoice {2},investissements
|
||||
{0} {1} has already been submitted,"S'il vous plaît entrer » est sous-traitée "" comme Oui ou Non"
|
||||
{0} {1} has been modified. Please refresh.,Point ou Entrepôt à la ligne {0} ne correspond pas à la Demande de Matériel
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user