fixed conflict while merging develop into v5
This commit is contained in:
commit
54361e8651
@ -3,8 +3,8 @@
|
|||||||
|
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
import frappe
|
import frappe
|
||||||
from frappe.utils import flt, cstr, cint, getdate, add_days, formatdate
|
from frappe.utils import cstr, cint
|
||||||
from frappe import msgprint, throw, _
|
from frappe import throw, _
|
||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
|
|
||||||
class Account(Document):
|
class Account(Document):
|
||||||
|
@ -800,7 +800,8 @@
|
|||||||
"fieldtype": "Date",
|
"fieldtype": "Date",
|
||||||
"label": "From Date",
|
"label": "From Date",
|
||||||
"no_copy": 1,
|
"no_copy": 1,
|
||||||
"permlevel": 0
|
"permlevel": 0,
|
||||||
|
"print_hide": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_on_submit": 1,
|
"allow_on_submit": 1,
|
||||||
@ -810,7 +811,8 @@
|
|||||||
"fieldtype": "Date",
|
"fieldtype": "Date",
|
||||||
"label": "To Date",
|
"label": "To Date",
|
||||||
"no_copy": 1,
|
"no_copy": 1,
|
||||||
"permlevel": 0
|
"permlevel": 0,
|
||||||
|
"print_hide": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_on_submit": 1,
|
"allow_on_submit": 1,
|
||||||
|
@ -233,6 +233,11 @@ erpnext.POS = Class.extend({
|
|||||||
},
|
},
|
||||||
make_item_list: function() {
|
make_item_list: function() {
|
||||||
var me = this;
|
var me = this;
|
||||||
|
if(!this.price_list) {
|
||||||
|
msgprint(__("Price List not found or disabled"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
me.item_timeout = null;
|
me.item_timeout = null;
|
||||||
frappe.call({
|
frappe.call({
|
||||||
method: 'erpnext.accounts.doctype.sales_invoice.pos.get_items',
|
method: 'erpnext.accounts.doctype.sales_invoice.pos.get_items',
|
||||||
@ -486,7 +491,7 @@ erpnext.POS = Class.extend({
|
|||||||
});
|
});
|
||||||
|
|
||||||
me.refresh_delete_btn();
|
me.refresh_delete_btn();
|
||||||
if(me.frm.doc[this.party]) {
|
if(me.frm.doc[this.party.toLowerCase()]) {
|
||||||
this.barcode.$input.focus();
|
this.barcode.$input.focus();
|
||||||
} else {
|
} else {
|
||||||
this.party_field.$input.focus();
|
this.party_field.$input.focus();
|
||||||
|
@ -216,10 +216,8 @@ $.extend(cur_frm.cscript, new erpnext.accounts.SalesInvoiceController({frm: cur_
|
|||||||
// Hide Fields
|
// Hide Fields
|
||||||
// ------------
|
// ------------
|
||||||
cur_frm.cscript.hide_fields = function(doc) {
|
cur_frm.cscript.hide_fields = function(doc) {
|
||||||
par_flds = ['project_name', 'due_date', 'is_opening', 'source', 'total_advance', 'gross_profit',
|
par_flds = ['project_name', 'due_date', 'is_opening', 'source', 'total_advance', 'get_advances_received',
|
||||||
'gross_profit_percent', 'get_advances_received',
|
'advances', 'sales_partner', 'commission_rate', 'total_commission', 'advances', 'from_date', 'to_date'];
|
||||||
'advances', 'sales_partner', 'commission_rate',
|
|
||||||
'total_commission', 'advances', 'from_date', 'to_date'];
|
|
||||||
|
|
||||||
item_flds_normal = ['sales_order', 'delivery_note']
|
item_flds_normal = ['sales_order', 'delivery_note']
|
||||||
|
|
||||||
|
@ -568,27 +568,6 @@
|
|||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"read_only": 1
|
"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_section",
|
"fieldname": "advances_section",
|
||||||
"fieldtype": "Section Break",
|
"fieldtype": "Section Break",
|
||||||
|
@ -112,9 +112,10 @@
|
|||||||
"width": "150px"
|
"width": "150px"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"depends_on": "eval:parent.discount_amount",
|
||||||
"fieldname": "tax_amount_after_discount_amount",
|
"fieldname": "tax_amount_after_discount_amount",
|
||||||
"fieldtype": "Currency",
|
"fieldtype": "Currency",
|
||||||
"hidden": 1,
|
"hidden": 0,
|
||||||
"label": "Tax Amount After Discount Amount",
|
"label": "Tax Amount After Discount Amount",
|
||||||
"options": "Company:company:default_currency",
|
"options": "Company:company:default_currency",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
@ -146,7 +147,7 @@
|
|||||||
"hide_heading": 1,
|
"hide_heading": 1,
|
||||||
"idx": 1,
|
"idx": 1,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"modified": "2014-05-30 03:43:39.740638",
|
"modified": "2014-12-10 12:26:41.222471",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Sales Taxes and Charges",
|
"name": "Sales Taxes and Charges",
|
||||||
|
@ -3,9 +3,9 @@
|
|||||||
"doc_type": "Sales Invoice",
|
"doc_type": "Sales Invoice",
|
||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"doctype": "Print Format",
|
"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.items -%}\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.taxes -%}\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(\"taxes\", 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.taxes -%}\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.items -%}\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.taxes -%}\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(\"taxes\", 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.taxes -%}\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,
|
"idx": 1,
|
||||||
"modified": "2014-12-25 02:08:26.603223",
|
"modified": "2014-12-26 02:08:26.603223",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "POS Invoice",
|
"name": "POS Invoice",
|
||||||
|
@ -68,7 +68,7 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
contact_person: function() {
|
contact_person: function() {
|
||||||
this.supplier_address();
|
erpnext.utils.get_contact_details(this.frm);
|
||||||
},
|
},
|
||||||
|
|
||||||
buying_price_list: function() {
|
buying_price_list: function() {
|
||||||
|
@ -685,7 +685,8 @@
|
|||||||
"label": "Recurring Type",
|
"label": "Recurring Type",
|
||||||
"no_copy": 1,
|
"no_copy": 1,
|
||||||
"options": "Monthly\nQuarterly\nHalf-yearly\nYearly",
|
"options": "Monthly\nQuarterly\nHalf-yearly\nYearly",
|
||||||
"permlevel": 0
|
"permlevel": 0,
|
||||||
|
"print_hide": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_on_submit": 1,
|
"allow_on_submit": 1,
|
||||||
@ -695,7 +696,8 @@
|
|||||||
"fieldtype": "Date",
|
"fieldtype": "Date",
|
||||||
"label": "From Date",
|
"label": "From Date",
|
||||||
"no_copy": 1,
|
"no_copy": 1,
|
||||||
"permlevel": 0
|
"permlevel": 0,
|
||||||
|
"print_hide": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_on_submit": 1,
|
"allow_on_submit": 1,
|
||||||
@ -705,7 +707,8 @@
|
|||||||
"fieldtype": "Date",
|
"fieldtype": "Date",
|
||||||
"label": "To Date",
|
"label": "To Date",
|
||||||
"no_copy": 1,
|
"no_copy": 1,
|
||||||
"permlevel": 0
|
"permlevel": 0,
|
||||||
|
"print_hide": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_on_submit": 1,
|
"allow_on_submit": 1,
|
||||||
|
@ -156,7 +156,7 @@
|
|||||||
"fieldtype": "Float",
|
"fieldtype": "Float",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
"label": "Exchange Rate",
|
"label": "Exchange Rate",
|
||||||
"no_copy": 1,
|
"no_copy": 0,
|
||||||
"oldfieldname": "conversion_rate",
|
"oldfieldname": "conversion_rate",
|
||||||
"oldfieldtype": "Currency",
|
"oldfieldtype": "Currency",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
@ -118,6 +118,10 @@ class AccountsController(TransactionBase):
|
|||||||
item.get(fieldname) is None and value is not None:
|
item.get(fieldname) is None and value is not None:
|
||||||
item.set(fieldname, value)
|
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"):
|
if ret.get("pricing_rule"):
|
||||||
for field in ["base_price_list_rate", "price_list_rate",
|
for field in ["base_price_list_rate", "price_list_rate",
|
||||||
"discount_percentage", "base_rate", "rate"]:
|
"discount_percentage", "base_rate", "rate"]:
|
||||||
@ -441,7 +445,7 @@ class AccountsController(TransactionBase):
|
|||||||
for order, jv_list in order_jv_map.items():
|
for order, jv_list in order_jv_map.items():
|
||||||
for jv in jv_list:
|
for jv in jv_list:
|
||||||
if not advance_jv_against_si or jv not in advance_jv_against_si:
|
if not advance_jv_against_si or jv not in advance_jv_against_si:
|
||||||
frappe.throw(_("Journal Entry {0} is linked against Order {1}, hence it must be fetched as advance in Invoice as well.")
|
frappe.msgprint(_("Journal Entry {0} is linked against Order {1}, check if it should be pulled as advance in this invoice.")
|
||||||
.format(jv, order))
|
.format(jv, order))
|
||||||
|
|
||||||
|
|
||||||
|
@ -124,10 +124,7 @@ def send_notification(new_rv):
|
|||||||
frappe.sendmail(new_rv.notification_email_address,
|
frappe.sendmail(new_rv.notification_email_address,
|
||||||
subject= _("New {0}: #{1}").format(new_rv.doctype, new_rv.name),
|
subject= _("New {0}: #{1}").format(new_rv.doctype, new_rv.name),
|
||||||
message = _("Please find attached {0} #{1}").format(new_rv.doctype, new_rv.name),
|
message = _("Please find attached {0} #{1}").format(new_rv.doctype, new_rv.name),
|
||||||
attachments = [{
|
attachments = [frappe.attach_print(new_rv.doctype, new_rv.name, file_name=new_rv.name)])
|
||||||
"fname": new_rv.name + ".pdf",
|
|
||||||
"fcontent": frappe.get_print_format(new_rv.doctype, new_rv.name, as_pdf=True)
|
|
||||||
}])
|
|
||||||
|
|
||||||
def notify_errors(doc, doctype, party, owner):
|
def notify_errors(doc, doctype, party, owner):
|
||||||
from frappe.utils.user import get_system_managers
|
from frappe.utils.user import get_system_managers
|
||||||
|
@ -118,3 +118,18 @@ cur_frm.cscript.calculate_total_days = function(doc, dt, dn) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
cur_frm.fields_dict.employee.get_query = erpnext.queries.employee;
|
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",
|
"options": "User",
|
||||||
"permlevel": 0
|
"permlevel": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "leave_approver_name",
|
||||||
|
"fieldtype": "Read Only",
|
||||||
|
"label": "Leave Approver Name",
|
||||||
|
"permlevel": 0,
|
||||||
|
"precision": ""
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "leave_type",
|
"fieldname": "leave_type",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
@ -184,7 +191,7 @@
|
|||||||
"idx": 1,
|
"idx": 1,
|
||||||
"is_submittable": 1,
|
"is_submittable": 1,
|
||||||
"max_attachments": 3,
|
"max_attachments": 3,
|
||||||
"modified": "2014-09-09 05:35:31.531651",
|
"modified": "2014-12-09 16:33:29.626849",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "HR",
|
"module": "HR",
|
||||||
"name": "Leave Application",
|
"name": "Leave Application",
|
||||||
|
@ -207,15 +207,15 @@ class LeaveApplication(Document):
|
|||||||
def get_holidays(leave_app):
|
def get_holidays(leave_app):
|
||||||
tot_hol = frappe.db.sql("""select count(*) from `tabHoliday` h1, `tabHoliday List` h2, `tabEmployee` e1
|
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
|
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.
|
# below line is needed. If an employee hasn't been assigned with any holiday list then above will return 0 rows.
|
||||||
tot_hol=tot_hol and flt(tot_hol[0][0]) or 0
|
|
||||||
if not tot_hol:
|
if not tot_hol:
|
||||||
tot_hol = frappe.db.sql("""select count(*) from `tabHoliday` h1, `tabHoliday List` h2
|
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
|
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""",
|
and ifnull(h2.is_default,0) = 1 and h2.fiscal_year = %s""",
|
||||||
(leave_app.from_date, leave_app.to_date, leave_app.fiscal_year))
|
(leave_app.from_date, leave_app.to_date, leave_app.fiscal_year))[0][0]
|
||||||
return tot_hol and flt(tot_hol[0][0]) or 0
|
return tot_hol
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_total_leave_days(leave_app):
|
def get_total_leave_days(leave_app):
|
||||||
|
@ -189,9 +189,6 @@ class SalarySlip(TransactionBase):
|
|||||||
if receiver:
|
if receiver:
|
||||||
subj = 'Salary Slip - ' + cstr(self.month) +'/'+cstr(self.fiscal_year)
|
subj = 'Salary Slip - ' + cstr(self.month) +'/'+cstr(self.fiscal_year)
|
||||||
frappe.sendmail([receiver], subject=subj, msg = _("Please see attachment"),
|
frappe.sendmail([receiver], subject=subj, msg = _("Please see attachment"),
|
||||||
attachments=[{
|
attachments=[frappe.attach_print(self.doctype, self.name, file_name=self.name)])
|
||||||
"fname": self.name + ".pdf",
|
|
||||||
"fcontent": frappe.get_print_format(self.doctype, self.name, as_pdf = True)
|
|
||||||
}])
|
|
||||||
else:
|
else:
|
||||||
msgprint(_("Company Email ID not found, hence mail not sent"))
|
msgprint(_("Company Email ID not found, hence mail not sent"))
|
||||||
|
@ -57,6 +57,7 @@ cur_frm.cscript.hour_rate = function(doc, dt, dn) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
cur_frm.cscript.time_in_mins = cur_frm.cscript.hour_rate;
|
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) {
|
cur_frm.cscript.item_code = function(doc, cdt, cdn) {
|
||||||
get_bom_material_detail(doc, cdt, cdn);
|
get_bom_material_detail(doc, cdt, cdn);
|
||||||
|
@ -56,6 +56,9 @@ class BOM(Document):
|
|||||||
last_purchase_rate
|
last_purchase_rate
|
||||||
from `tabItem` where name=%s""", item_code, as_dict = 1)
|
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
|
return item
|
||||||
|
|
||||||
def validate_rm_item(self, item):
|
def validate_rm_item(self, item):
|
||||||
|
@ -90,6 +90,7 @@ erpnext.patches.v4_2.update_requested_and_ordered_qty
|
|||||||
erpnext.patches.v4_2.party_model
|
erpnext.patches.v4_2.party_model
|
||||||
erpnext.patches.v4_4.make_email_accounts
|
erpnext.patches.v4_4.make_email_accounts
|
||||||
execute:frappe.delete_doc("DocType", "Contact Control")
|
execute:frappe.delete_doc("DocType", "Contact Control")
|
||||||
|
erpnext.patches.v4_2.recalculate_bom_costs
|
||||||
erpnext.patches.v5_0.update_frozen_accounts_permission_role
|
erpnext.patches.v5_0.update_frozen_accounts_permission_role
|
||||||
erpnext.patches.v5_0.update_dn_against_doc_fields
|
erpnext.patches.v5_0.update_dn_against_doc_fields
|
||||||
execute:frappe.db.sql("update `tabMaterial Request` set material_request_type = 'Material Transfer' where material_request_type = 'Transfer'")
|
execute:frappe.db.sql("update `tabMaterial Request` set material_request_type = 'Material Transfer' where material_request_type = 'Transfer'")
|
||||||
|
@ -6,8 +6,9 @@ import frappe
|
|||||||
|
|
||||||
def execute():
|
def execute():
|
||||||
reference_date = guess_reference_date()
|
reference_date = guess_reference_date()
|
||||||
|
frappe.reload_doc('accounts', 'doctype', 'journal_voucher_detail')
|
||||||
for name in frappe.db.sql_list("""select name from `tabJournal Entry`
|
for name in frappe.db.sql_list("""select name from `tabJournal Entry`
|
||||||
where date(creation)>=%s""", reference_date):
|
where date(creation)>=%s""", reference_date):
|
||||||
jv = frappe.get_doc("Journal Entry", name)
|
jv = frappe.get_doc("Journal Entry", name)
|
||||||
try:
|
try:
|
||||||
jv.create_remarks()
|
jv.create_remarks()
|
||||||
|
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()
|
@ -67,6 +67,15 @@ class TestTimeLog(unittest.TestCase):
|
|||||||
time_log.submit()
|
time_log.submit()
|
||||||
time_log.cancel()
|
time_log.cancel()
|
||||||
|
|
||||||
|
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`")
|
||||||
|
|
||||||
def make_prod_order(self):
|
def make_prod_order(self):
|
||||||
return frappe.get_doc({
|
return frappe.get_doc({
|
||||||
"doctype":"Production Order",
|
"doctype":"Production Order",
|
||||||
|
@ -108,6 +108,7 @@ erpnext.StockAnalytics = erpnext.StockGridReport.extend({
|
|||||||
// otherwise, only reset values
|
// otherwise, only reset values
|
||||||
$.each(this.data, function(i, d) {
|
$.each(this.data, function(i, d) {
|
||||||
me.reset_item_values(d);
|
me.reset_item_values(d);
|
||||||
|
d["closing_qty_value"] = 0;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,8 +14,11 @@
|
|||||||
{% if(contact_list[i].phone) { %}
|
{% if(contact_list[i].phone) { %}
|
||||||
{%= __("Phone") %}: {%= contact_list[i].phone %}<br>
|
{%= __("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) { %}
|
{% if(contact_list[i].email_id) { %}
|
||||||
{%= __("Email Id") %}: {%= contact_list[i].email_id %}
|
{%= __("Email ID") %}: {%= contact_list[i].email_id %}
|
||||||
{% } %}
|
{% } %}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
@ -421,20 +421,32 @@ erpnext.TransactionController = erpnext.stock.StockController.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_set_values_for_item_list: function(children) {
|
_set_values_for_item_list: function(children) {
|
||||||
|
var me = this;
|
||||||
|
var price_list_rate_changed = false;
|
||||||
$.each(children, function(i, d) {
|
$.each(children, function(i, d) {
|
||||||
|
var existing_pricing_rule = frappe.model.get_value(d.doctype, d.name, "pricing_rule");
|
||||||
$.each(d, function(k, v) {
|
$.each(d, function(k, v) {
|
||||||
if (["doctype", "name"].indexOf(k)===-1) {
|
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);
|
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;
|
var me = this;
|
||||||
return this.frm.call({
|
return this.frm.call({
|
||||||
method: "erpnext.stock.get_item_details.apply_price_list",
|
method: "erpnext.stock.get_item_details.apply_price_list",
|
||||||
args: { args: this._get_args() },
|
args: { args: this._get_args(item) },
|
||||||
callback: function(r) {
|
callback: function(r) {
|
||||||
if (!r.exc) {
|
if (!r.exc) {
|
||||||
me.in_apply_price_list = true;
|
me.in_apply_price_list = true;
|
||||||
|
@ -147,7 +147,7 @@
|
|||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"description": "Add to calendar on this date",
|
"description": "Add to calendar on this date",
|
||||||
"fieldname": "contact_date",
|
"fieldname": "contact_date",
|
||||||
"fieldtype": "Date",
|
"fieldtype": "Datetime",
|
||||||
"in_filter": 1,
|
"in_filter": 1,
|
||||||
"label": "Next Contact Date",
|
"label": "Next Contact Date",
|
||||||
"no_copy": 1,
|
"no_copy": 1,
|
||||||
@ -331,7 +331,7 @@
|
|||||||
],
|
],
|
||||||
"icon": "icon-user",
|
"icon": "icon-user",
|
||||||
"idx": 1,
|
"idx": 1,
|
||||||
"modified": "2014-09-11 18:52:50.397563",
|
"modified": "2014-12-01 08:22:23.286314",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Selling",
|
"module": "Selling",
|
||||||
"name": "Lead",
|
"name": "Lead",
|
||||||
|
@ -48,6 +48,7 @@ class Lead(SellingController):
|
|||||||
def add_calendar_event(self, opts=None, force=False):
|
def add_calendar_event(self, opts=None, force=False):
|
||||||
super(Lead, self).add_calendar_event({
|
super(Lead, self).add_calendar_event({
|
||||||
"owner": self.lead_owner,
|
"owner": self.lead_owner,
|
||||||
|
"starts_on": self.contact_date,
|
||||||
"subject": ('Contact ' + cstr(self.lead_name)),
|
"subject": ('Contact ' + cstr(self.lead_name)),
|
||||||
"description": ('Contact ' + cstr(self.lead_name)) + \
|
"description": ('Contact ' + cstr(self.lead_name)) + \
|
||||||
(self.contact_by and ('. By : ' + cstr(self.contact_by)) or '')
|
(self.contact_by and ('. By : ' + cstr(self.contact_by)) or '')
|
||||||
|
@ -28,7 +28,6 @@ erpnext.selling.Opportunity = frappe.ui.form.Controller.extend({
|
|||||||
if(!this.frm.doc.fiscal_year && sys_defaults.fiscal_year)
|
if(!this.frm.doc.fiscal_year && sys_defaults.fiscal_year)
|
||||||
set_multiple(cdt, cdn, { fiscal_year:sys_defaults.fiscal_year });
|
set_multiple(cdt, cdn, { fiscal_year:sys_defaults.fiscal_year });
|
||||||
|
|
||||||
|
|
||||||
if(this.frm.doc.customer && !this.frm.doc.customer_name) cur_frm.cscript.customer(this.frm.doc);
|
if(this.frm.doc.customer && !this.frm.doc.customer_name) cur_frm.cscript.customer(this.frm.doc);
|
||||||
|
|
||||||
this.setup_queries();
|
this.setup_queries();
|
||||||
|
@ -48,6 +48,7 @@
|
|||||||
"in_filter": 1,
|
"in_filter": 1,
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
"label": "Customer",
|
"label": "Customer",
|
||||||
|
"no_copy": 1,
|
||||||
"oldfieldname": "customer",
|
"oldfieldname": "customer",
|
||||||
"oldfieldtype": "Link",
|
"oldfieldtype": "Link",
|
||||||
"options": "Customer",
|
"options": "Customer",
|
||||||
@ -353,7 +354,7 @@
|
|||||||
{
|
{
|
||||||
"description": "Your sales person will get a reminder on this date to contact the customer",
|
"description": "Your sales person will get a reminder on this date to contact the customer",
|
||||||
"fieldname": "contact_date",
|
"fieldname": "contact_date",
|
||||||
"fieldtype": "Date",
|
"fieldtype": "Datetime",
|
||||||
"label": "Next Contact Date",
|
"label": "Next Contact Date",
|
||||||
"oldfieldname": "contact_date",
|
"oldfieldname": "contact_date",
|
||||||
"oldfieldtype": "Date",
|
"oldfieldtype": "Date",
|
||||||
|
@ -54,6 +54,7 @@ class Opportunity(TransactionBase):
|
|||||||
opts = frappe._dict()
|
opts = frappe._dict()
|
||||||
|
|
||||||
opts.description = ""
|
opts.description = ""
|
||||||
|
opts.contact_date = self.contact_date
|
||||||
|
|
||||||
if self.customer:
|
if self.customer:
|
||||||
if self.contact_person:
|
if self.contact_person:
|
||||||
|
@ -175,6 +175,7 @@
|
|||||||
"fieldtype": "Data",
|
"fieldtype": "Data",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
"label": "PO No",
|
"label": "PO No",
|
||||||
|
"no_copy": 0,
|
||||||
"oldfieldname": "po_no",
|
"oldfieldname": "po_no",
|
||||||
"oldfieldtype": "Data",
|
"oldfieldtype": "Data",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
|
@ -268,6 +268,14 @@ def make_material_request(source_name, target_doc=None):
|
|||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def make_delivery_note(source_name, target_doc=None):
|
def make_delivery_note(source_name, target_doc=None):
|
||||||
def set_missing_values(source, target):
|
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.ignore_pricing_rule = 1
|
||||||
target.run_method("set_missing_values")
|
target.run_method("set_missing_values")
|
||||||
target.run_method("calculate_taxes_and_totals")
|
target.run_method("calculate_taxes_and_totals")
|
||||||
|
@ -98,9 +98,12 @@ class AuthorizationControl(TransactionBase):
|
|||||||
if doc_obj:
|
if doc_obj:
|
||||||
price_list_rate, base_rate = 0, 0
|
price_list_rate, base_rate = 0, 0
|
||||||
for d in doc_obj.get("items"):
|
for d in doc_obj.get("items"):
|
||||||
if d.base_price_list_rate and d.base_rate:
|
if d.base_rate:
|
||||||
price_list_rate += flt(d.base_price_list_rate)
|
price_list_rate += flt(d.base_price_list_rate) or flt(d.base_rate)
|
||||||
base_rate += 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)
|
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']
|
final_based_on = ['Grand Total','Average Discount','Customerwise Discount','Itemwise Discount']
|
||||||
|
@ -61,14 +61,27 @@ frappe.pages['setup-wizard'].onload = function(wrapper) {
|
|||||||
fields: [
|
fields: [
|
||||||
{
|
{
|
||||||
"fieldname": "language", "label": __("Language"), "fieldtype": "Select",
|
"fieldname": "language", "label": __("Language"), "fieldtype": "Select",
|
||||||
options: ["english", "العربية", "deutsch", "ελληνικά", "español", "français", "हिंदी", "hrvatski",
|
reqd:1
|
||||||
"italiano", "nederlands", "polski", "português brasileiro", "português", "српски", "தமிழ்",
|
|
||||||
"ไทย", "中国(简体)", "中國(繁體)"],
|
|
||||||
reqd:1, "default": "english"
|
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
help: __("Welcome to ERPNext. Please select your language to begin the Setup Wizard."),
|
help: __("Welcome to ERPNext. Please select your language to begin the Setup Wizard."),
|
||||||
onload: function(slide) {
|
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() {
|
slide.get_input("language").on("change", function() {
|
||||||
var lang = $(this).val() || "english";
|
var lang = $(this).val() || "english";
|
||||||
frappe._messages = {};
|
frappe._messages = {};
|
||||||
|
@ -439,4 +439,6 @@ def load_messages(language):
|
|||||||
send_translations(m)
|
send_translations(m)
|
||||||
return lang
|
return lang
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def load_languages():
|
||||||
|
return sorted(get_lang_dict().keys())
|
||||||
|
@ -178,7 +178,7 @@
|
|||||||
{
|
{
|
||||||
"fieldname": "po_no",
|
"fieldname": "po_no",
|
||||||
"fieldtype": "Data",
|
"fieldtype": "Data",
|
||||||
"hidden": 1,
|
"hidden": 0,
|
||||||
"label": "Customer's Purchase Order No",
|
"label": "Customer's Purchase Order No",
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"oldfieldname": "po_no",
|
"oldfieldname": "po_no",
|
||||||
|
@ -27,7 +27,7 @@ def get_bin_qty(item, warehouse):
|
|||||||
where item_code = %s and warehouse = %s""", (item, warehouse), as_dict = 1)
|
where item_code = %s and warehouse = %s""", (item, warehouse), as_dict = 1)
|
||||||
return det and det[0] or ''
|
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)
|
bin = get_bin_qty(packing_item_code, warehouse)
|
||||||
item = get_packing_item_details(packing_item_code)
|
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
|
pi.warehouse = warehouse
|
||||||
if not pi.batch_no:
|
if not pi.batch_no:
|
||||||
pi.batch_no = cstr(line.get("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):
|
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
|
if obj.get("_action") and obj._action == "update_after_submit": return
|
||||||
|
|
||||||
packing_list_idx = 0
|
|
||||||
parent_items = []
|
parent_items = []
|
||||||
for d in obj.get(item_table_fieldname):
|
for d in obj.get(item_table_fieldname):
|
||||||
if frappe.db.get_value("Sales BOM", {"new_item_code": d.item_code}):
|
if frappe.db.get_value("Sales BOM", {"new_item_code": d.item_code}):
|
||||||
for i in get_sales_bom_items(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),
|
update_packing_list_item(obj, i['item_code'], flt(i['qty'])*flt(d.qty), d.warehouse, d)
|
||||||
d.warehouse, d, packing_list_idx)
|
|
||||||
|
|
||||||
if [d.item_code, d.name] not in parent_items:
|
if [d.item_code, d.name] not in parent_items:
|
||||||
parent_items.append([d.item_code, d.name])
|
parent_items.append([d.item_code, d.name])
|
||||||
|
@ -40,8 +40,8 @@ class StockLedgerEntry(Document):
|
|||||||
(self.warehouse, self.item_code, self.batch_no))[0][0])
|
(self.warehouse, self.item_code, self.batch_no))[0][0])
|
||||||
|
|
||||||
if batch_bal_after_transaction < 0:
|
if batch_bal_after_transaction < 0:
|
||||||
frappe.throw(_("Negative balance in Batch {0} for Item {1} at Warehouse {2} on {3} {4}").format(\
|
frappe.throw(_("Negative balance {0} in Batch {1} for Item {2} at Warehouse {3} on {4} {5}")
|
||||||
batch_bal_after_transaction - self.actual_qty, self.item_code, self.warehouse,
|
.format(batch_bal_after_transaction - self.actual_qty, self.batch_no, self.item_code, self.warehouse,
|
||||||
formatdate(self.posting_date), self.posting_time))
|
formatdate(self.posting_date), self.posting_time))
|
||||||
|
|
||||||
def validate_mandatory(self):
|
def validate_mandatory(self):
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<div class="col-xs-5 text-right">
|
<div class="col-xs-5 text-right">
|
||||||
<label>{{ charge.get_formatted("description") }}</label></div>
|
<label>{{ charge.get_formatted("description") }}</label></div>
|
||||||
<div class="col-xs-7 text-right">
|
<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) }}
|
table_meta.get_field("tax_amount"), doc, currency=doc.currency) }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -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} budget for Account {1} against Cost Center {2} will exceed by {3},{0} ميزانية الحساب {1} ضد مركز التكلفة {2} سيتجاوز التي كتبها {3}
|
||||||
{0} can not be negative,{0} لا يمكن أن تكون سلبية
|
{0} can not be negative,{0} لا يمكن أن تكون سلبية
|
||||||
{0} created,{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} entered twice in Item Tax,{0} دخلت مرتين في ضريبة المدينة
|
||||||
{0} is an invalid email address in 'Notification Email Address',"{0} هو عنوان بريد إلكتروني غير صالح في ' عنوان البريد الإلكتروني إعلام """
|
{0} is an invalid email address in 'Notification Email Address',"{0} هو عنوان بريد إلكتروني غير صالح في ' عنوان البريد الإلكتروني إعلام """
|
||||||
{0} is mandatory,{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 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 stock Item,{0} ليس الأسهم الإغلاق
|
||||||
{0} is not a valid Batch Number for Item {1},{0} ليس رقم الدفعة صالحة لل تفاصيل {1}
|
{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 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 now the default Fiscal Year. Please refresh your browser for the change to take effect.,{0} الآن الافتراضي السنة المالية. يرجى تحديث المتصفح ل التغيير نافذ المفعول .
|
||||||
{0} is required,{0} مطلوب
|
{0} is required,{0} مطلوب
|
||||||
{0} must be a Purchased or Sub-Contracted Item in row {1},{0} يجب أن يكون البند شراؤها أو التعاقد الفرعي في الصف {1}
|
{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 be reduced by {1} or you should increase overflow tolerance,{0} يجب تخفيض كتبها {1} أو يجب زيادة الفائض التسامح
|
||||||
{0} must have role 'Leave Approver',{0} يجب أن يكون دور ' اترك الموافق '
|
{0} must have role 'Leave Approver',{0} يجب أن يكون دور ' اترك الموافق '
|
||||||
{0} valid serial nos for Item {1},{0} غ المسلسل صالحة لل تفاصيل {1}
|
{0} valid serial nos for Item {1},{0} {غ المسلسل صالحة لل تفاصيل {1
|
||||||
{0} {1} against Bill {2} dated {3},{0} {1} ضد بيل {2} بتاريخ {3}
|
{0} {1} against Bill {2} dated {3},{0} {1} {ضد بيل {2} بتاريخ {3
|
||||||
{0} {1} against Invoice {2},{0} {1} ضد الفاتورة {2}
|
{0} {1} against Invoice {2},{0} {1} {ضد الفاتورة {2
|
||||||
{0} {1} has already been submitted,{0} {1} وقد تم بالفعل قدمت
|
{0} {1} has already been submitted,{0} {1} وقد تم بالفعل قدمت
|
||||||
{0} {1} has been modified. Please refresh.,{0} {1} تم تعديل . يرجى تحديث.
|
{0} {1} has been modified. Please refresh.,{0} {1} تم تعديل . يرجى تحديث.
|
||||||
{0} {1} is not submitted,{0} {1} لا تقدم
|
{0} {1} is not submitted,{0} {1} لا تقدم
|
||||||
|
|
@ -3317,7 +3317,7 @@ website page link,Ιστοσελίδα link της σελίδας
|
|||||||
{0} must be reduced by {1} or you should increase overflow tolerance,{0} πρέπει να μειωθεί κατά {1} ή θα πρέπει να αυξήσει την ανοχή υπερχείλισης
|
{0} must be reduced by {1} or you should increase overflow tolerance,{0} πρέπει να μειωθεί κατά {1} ή θα πρέπει να αυξήσει την ανοχή υπερχείλισης
|
||||||
{0} must have role 'Leave Approver',{0} πρέπει να έχει ρόλο « Αφήστε Έγκρισης »
|
{0} must have role 'Leave Approver',{0} πρέπει να έχει ρόλο « Αφήστε Έγκρισης »
|
||||||
{0} valid serial nos for Item {1},{0} έγκυρο σειριακό nos για τη θέση {1}
|
{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} against Invoice {2},{0} {1} κατά Τιμολόγιο {2}
|
||||||
{0} {1} has already been submitted,{0} {1} έχει ήδη υποβληθεί
|
{0} {1} has already been submitted,{0} {1} έχει ήδη υποβληθεί
|
||||||
{0} {1} has been modified. Please refresh.,{0} {1} έχει τροποποιηθεί . Παρακαλώ ανανεώσετε .
|
{0} {1} has been modified. Please refresh.,{0} {1} έχει τροποποιηθεί . Παρακαλώ ανανεώσετε .
|
||||||
|
|
@ -31,7 +31,7 @@
|
|||||||
1 Currency = [?] FractionFor e.g. 1 USD = 100 Cent,"1 moneda = [?] Fracción Por ejemplo, 1 USD = 100 Cent"
|
1 Currency = [?] FractionFor e.g. 1 USD = 100 Cent,"1 moneda = [?] Fracción Por ejemplo, 1 USD = 100 Cent"
|
||||||
1. To maintain the customer wise item code and to make them searchable based on their code use this option,1 . Para mantener el código del artículo sabia cliente y para efectuar búsquedas en ellos en función de su uso de código de esta opción
|
1. To maintain the customer wise item code and to make them searchable based on their code use this option,1 . Para mantener el código del artículo sabia cliente y para efectuar búsquedas en ellos en función de su uso de código de esta opción
|
||||||
"<a href=""#Sales Browser/Customer Group"">Add / Edit</a>","<a href=""#Sales Browser/Customer grupo""> Añadir / Editar < / a>"
|
"<a href=""#Sales Browser/Customer Group"">Add / Edit</a>","<a href=""#Sales Browser/Customer grupo""> Añadir / Editar < / a>"
|
||||||
"<a href=""#Sales Browser/Item Group"">Add / Edit</a>","<a href=""#Sales Browser/Item grupo""> Añadir / Editar < / a>"
|
"<a href=""#Sales Browser/Item Group"">Add / Edit</a>","<a href=""#Sales Browser/Item Group""> Añadir / Editar < / a>"
|
||||||
"<a href=""#Sales Browser/Territory"">Add / Edit</a>","<a href=""#Sales Browser/Territory""> Añadir / Editar < / a>"
|
"<a href=""#Sales Browser/Territory"">Add / Edit</a>","<a href=""#Sales Browser/Territory""> Añadir / Editar < / a>"
|
||||||
"<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> defecto plantilla </ h4> <p> Usos <a href=""http://jinja.pocoo.org/docs/templates/""> Jinja plantillas </ a> y todos los campos de la Dirección ( incluyendo campos personalizados en su caso) estará disponible </ p> <pre> <code> {{}} address_line1 <br> {% if address_line2%} {{}} address_line2 <br> { endif% -%} {{city}} <br> {% if estado%} {{Estado}} {% endif <br> -%} {% if%} pincode PIN: {{pincode}} {% endif <br> -%} {{país}} <br> {% if%} de teléfono Teléfono: {{phone}} {<br> endif% -%} {% if%} fax Fax: {{fax}} {% endif <br> -%} {% if%} email_ID Email: {{}} email_ID <br> ; {% endif -%} </ code> </ pre>"
|
"<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> defecto plantilla </ h4> <p> Usos <a href=""http://jinja.pocoo.org/docs/templates/""> Jinja plantillas </ a> y todos los campos de la Dirección ( incluyendo campos personalizados en su caso) estará disponible </ p> <pre> <code> {{}} address_line1 <br> {% if address_line2%} {{}} address_line2 <br> { endif% -%} {{city}} <br> {% if estado%} {{Estado}} {% endif <br> -%} {% if%} pincode PIN: {{pincode}} {% endif <br> -%} {{país}} <br> {% if%} de teléfono Teléfono: {{phone}} {<br> endif% -%} {% if%} fax Fax: {{fax}} {% endif <br> -%} {% if%} 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,"Existe un Grupo de Clientes con el mismo nombre, por favor cambie el nombre del Cliente o cambie el nombre del Grupo de Clientes"
|
A Customer Group exists with same name please change the Customer name or rename the Customer Group,"Existe un Grupo de Clientes con el mismo nombre, por favor cambie el nombre del Cliente o cambie el nombre del Grupo de Clientes"
|
||||||
@ -2745,7 +2745,7 @@ Statement of Account,Estado de cuenta
|
|||||||
Static Parameters,Parámetros estáticos
|
Static Parameters,Parámetros estáticos
|
||||||
Status,estado
|
Status,estado
|
||||||
Status must be one of {0},Estado debe ser uno de {0}
|
Status must be one of {0},Estado debe ser uno de {0}
|
||||||
Status of {0} {1} is now {2},Situación de {0} {1} { 2 es ahora }
|
Status of {0} {1} is now {2},Situación de {0} {1} {2} es ahora
|
||||||
Status updated to {0},Estado actualizado a {0}
|
Status updated to {0},Estado actualizado a {0}
|
||||||
Statutory info and other general information about your Supplier,Información legal y otra información general acerca de su proveedor
|
Statutory info and other general information about your Supplier,Información legal y otra información general acerca de su proveedor
|
||||||
Stay Updated,Manténgase actualizado
|
Stay Updated,Manténgase actualizado
|
||||||
@ -3322,7 +3322,7 @@ website page link,el vínculo web
|
|||||||
{0} must be reduced by {1} or you should increase overflow tolerance,{0} debe reducirse en {1} o se debe aumentar la tolerancia de desbordamiento
|
{0} must be reduced by {1} or you should increase overflow tolerance,{0} debe reducirse en {1} o se debe aumentar la tolerancia de desbordamiento
|
||||||
{0} must have role 'Leave Approver',{0} debe tener rol ' Dejar aprobador '
|
{0} must have role 'Leave Approver',{0} debe tener rol ' Dejar aprobador '
|
||||||
{0} valid serial nos for Item {1},{0} nn serie válidos para el elemento {1}
|
{0} valid serial nos for Item {1},{0} nn serie válidos para el elemento {1}
|
||||||
{0} {1} against Bill {2} dated {3},{0} {1} { 2 contra Bill } {3} de fecha
|
{0} {1} against Bill {2} dated {3},{0} {1} {2} contra Bill {3} de fecha
|
||||||
{0} {1} against Invoice {2},{0} {1} contra Factura {2}
|
{0} {1} against Invoice {2},{0} {1} contra Factura {2}
|
||||||
{0} {1} has already been submitted,{0} {1} ya ha sido presentado
|
{0} {1} has already been submitted,{0} {1} ya ha sido presentado
|
||||||
{0} {1} has been modified. Please refresh.,{0} {1} ha sido modificado. Por favor regenere .
|
{0} {1} has been modified. Please refresh.,{0} {1} ha sido modificado. Por favor regenere .
|
||||||
|
|
@ -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 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} 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} 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} 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 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
|
{0} {1} has been modified. Please refresh.,Point ou Entrepôt à la ligne {0} ne correspond pas à la Demande de Matériel
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user