Merge branch 'develop' into email-digest
This commit is contained in:
commit
e34f3364d0
@ -401,6 +401,8 @@ frappe.ui.form.on('Payment Entry', {
|
|||||||
|
|
||||||
set_account_currency_and_balance: function(frm, account, currency_field,
|
set_account_currency_and_balance: function(frm, account, currency_field,
|
||||||
balance_field, callback_function) {
|
balance_field, callback_function) {
|
||||||
|
|
||||||
|
var company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
|
||||||
if (frm.doc.posting_date && account) {
|
if (frm.doc.posting_date && account) {
|
||||||
frappe.call({
|
frappe.call({
|
||||||
method: "erpnext.accounts.doctype.payment_entry.payment_entry.get_account_details",
|
method: "erpnext.accounts.doctype.payment_entry.payment_entry.get_account_details",
|
||||||
@ -427,6 +429,14 @@ frappe.ui.form.on('Payment Entry', {
|
|||||||
|
|
||||||
if(!frm.doc.paid_amount && frm.doc.received_amount)
|
if(!frm.doc.paid_amount && frm.doc.received_amount)
|
||||||
frm.events.received_amount(frm);
|
frm.events.received_amount(frm);
|
||||||
|
|
||||||
|
if (frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency
|
||||||
|
&& frm.doc.paid_amount != frm.doc.received_amount) {
|
||||||
|
if (company_currency != frm.doc.paid_from_account_currency &&
|
||||||
|
frm.doc.payment_type == "Pay") {
|
||||||
|
frm.doc.paid_amount = frm.doc.received_amount;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
() => {
|
() => {
|
||||||
|
@ -179,7 +179,7 @@ class SalesInvoice(SellingController):
|
|||||||
|
|
||||||
# this sequence because outstanding may get -ve
|
# this sequence because outstanding may get -ve
|
||||||
self.make_gl_entries()
|
self.make_gl_entries()
|
||||||
|
|
||||||
if self.update_stock == 1:
|
if self.update_stock == 1:
|
||||||
self.repost_future_sle_and_gle()
|
self.repost_future_sle_and_gle()
|
||||||
|
|
||||||
@ -261,10 +261,10 @@ class SalesInvoice(SellingController):
|
|||||||
self.update_stock_ledger()
|
self.update_stock_ledger()
|
||||||
|
|
||||||
self.make_gl_entries_on_cancel()
|
self.make_gl_entries_on_cancel()
|
||||||
|
|
||||||
if self.update_stock == 1:
|
if self.update_stock == 1:
|
||||||
self.repost_future_sle_and_gle()
|
self.repost_future_sle_and_gle()
|
||||||
|
|
||||||
frappe.db.set(self, 'status', 'Cancelled')
|
frappe.db.set(self, 'status', 'Cancelled')
|
||||||
|
|
||||||
if frappe.db.get_single_value('Selling Settings', 'sales_update_frequency') == "Each Transaction":
|
if frappe.db.get_single_value('Selling Settings', 'sales_update_frequency') == "Each Transaction":
|
||||||
@ -551,7 +551,7 @@ class SalesInvoice(SellingController):
|
|||||||
def add_remarks(self):
|
def add_remarks(self):
|
||||||
if not self.remarks:
|
if not self.remarks:
|
||||||
if self.po_no and self.po_date:
|
if self.po_no and self.po_date:
|
||||||
self.remarks = _("Against Customer Order {0} dated {1}").format(self.po_no,
|
self.remarks = _("Against Customer Order {0} dated {1}").format(self.po_no,
|
||||||
formatdate(self.po_date))
|
formatdate(self.po_date))
|
||||||
else:
|
else:
|
||||||
self.remarks = _("No Remarks")
|
self.remarks = _("No Remarks")
|
||||||
@ -1699,6 +1699,7 @@ def get_mode_of_payment_info(mode_of_payment, company):
|
|||||||
where mpa.parent = mp.name and mpa.company = %s and mp.enabled = 1 and mp.name = %s""",
|
where mpa.parent = mp.name and mpa.company = %s and mp.enabled = 1 and mp.name = %s""",
|
||||||
(company, mode_of_payment), as_dict=1)
|
(company, mode_of_payment), as_dict=1)
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
def create_dunning(source_name, target_doc=None):
|
def create_dunning(source_name, target_doc=None):
|
||||||
from frappe.model.mapper import get_mapped_doc
|
from frappe.model.mapper import get_mapped_doc
|
||||||
from erpnext.accounts.doctype.dunning.dunning import get_dunning_letter_text, calculate_interest_and_amount
|
from erpnext.accounts.doctype.dunning.dunning import get_dunning_letter_text, calculate_interest_and_amount
|
||||||
|
@ -411,7 +411,7 @@ cur_frm.cscript.hour_rate = function(doc) {
|
|||||||
|
|
||||||
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.bom_no = function(doc, cdt, cdn) {
|
cur_frm.cscript.bom_no = function(doc, cdt, cdn) {
|
||||||
get_bom_material_detail(doc, cdt, cdn, false);
|
get_bom_material_detail(doc, cdt, cdn, false);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -419,17 +419,22 @@ cur_frm.cscript.is_default = function(doc) {
|
|||||||
if (doc.is_default) cur_frm.set_value("is_active", 1);
|
if (doc.is_default) cur_frm.set_value("is_active", 1);
|
||||||
};
|
};
|
||||||
|
|
||||||
var get_bom_material_detail= function(doc, cdt, cdn, scrap_items) {
|
var get_bom_material_detail = function(doc, cdt, cdn, scrap_items) {
|
||||||
|
if (!doc.company) {
|
||||||
|
frappe.throw({message: __("Please select a Company first."), title: __("Mandatory")});
|
||||||
|
}
|
||||||
|
|
||||||
var d = locals[cdt][cdn];
|
var d = locals[cdt][cdn];
|
||||||
if (d.item_code) {
|
if (d.item_code) {
|
||||||
return frappe.call({
|
return frappe.call({
|
||||||
doc: doc,
|
doc: doc,
|
||||||
method: "get_bom_material_detail",
|
method: "get_bom_material_detail",
|
||||||
args: {
|
args: {
|
||||||
'item_code': d.item_code,
|
"company": doc.company,
|
||||||
'bom_no': d.bom_no != null ? d.bom_no: '',
|
"item_code": d.item_code,
|
||||||
|
"bom_no": d.bom_no != null ? d.bom_no: '',
|
||||||
"scrap_items": scrap_items,
|
"scrap_items": scrap_items,
|
||||||
'qty': d.qty,
|
"qty": d.qty,
|
||||||
"stock_qty": d.stock_qty,
|
"stock_qty": d.stock_qty,
|
||||||
"include_item_in_manufacturing": d.include_item_in_manufacturing,
|
"include_item_in_manufacturing": d.include_item_in_manufacturing,
|
||||||
"uom": d.uom,
|
"uom": d.uom,
|
||||||
@ -468,7 +473,7 @@ cur_frm.cscript.rate = function(doc, cdt, cdn) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (d.bom_no) {
|
if (d.bom_no) {
|
||||||
frappe.msgprint(__("You can not change rate if BOM mentioned agianst any item"));
|
frappe.msgprint(__("You cannot change the rate if BOM is mentioned against any Item."));
|
||||||
get_bom_material_detail(doc, cdt, cdn, scrap_items);
|
get_bom_material_detail(doc, cdt, cdn, scrap_items);
|
||||||
} else {
|
} else {
|
||||||
erpnext.bom.calculate_rm_cost(doc);
|
erpnext.bom.calculate_rm_cost(doc);
|
||||||
|
@ -65,6 +65,10 @@ class BOM(WebsiteGenerator):
|
|||||||
|
|
||||||
def validate(self):
|
def validate(self):
|
||||||
self.route = frappe.scrub(self.name).replace('_', '-')
|
self.route = frappe.scrub(self.name).replace('_', '-')
|
||||||
|
|
||||||
|
if not self.company:
|
||||||
|
frappe.throw(_("Please select a Company first."), title=_("Mandatory"))
|
||||||
|
|
||||||
self.clear_operations()
|
self.clear_operations()
|
||||||
self.validate_main_item()
|
self.validate_main_item()
|
||||||
self.validate_currency()
|
self.validate_currency()
|
||||||
@ -125,6 +129,7 @@ class BOM(WebsiteGenerator):
|
|||||||
self.validate_bom_currecny(item)
|
self.validate_bom_currecny(item)
|
||||||
|
|
||||||
ret = self.get_bom_material_detail({
|
ret = self.get_bom_material_detail({
|
||||||
|
"company": self.company,
|
||||||
"item_code": item.item_code,
|
"item_code": item.item_code,
|
||||||
"item_name": item.item_name,
|
"item_name": item.item_name,
|
||||||
"bom_no": item.bom_no,
|
"bom_no": item.bom_no,
|
||||||
@ -213,6 +218,7 @@ class BOM(WebsiteGenerator):
|
|||||||
|
|
||||||
for d in self.get("items"):
|
for d in self.get("items"):
|
||||||
rate = self.get_rm_rate({
|
rate = self.get_rm_rate({
|
||||||
|
"company": self.company,
|
||||||
"item_code": d.item_code,
|
"item_code": d.item_code,
|
||||||
"bom_no": d.bom_no,
|
"bom_no": d.bom_no,
|
||||||
"qty": d.qty,
|
"qty": d.qty,
|
||||||
@ -611,10 +617,20 @@ def get_valuation_rate(args):
|
|||||||
""" Get weighted average of valuation rate from all warehouses """
|
""" Get weighted average of valuation rate from all warehouses """
|
||||||
|
|
||||||
total_qty, total_value, valuation_rate = 0.0, 0.0, 0.0
|
total_qty, total_value, valuation_rate = 0.0, 0.0, 0.0
|
||||||
for d in frappe.db.sql("""select actual_qty, stock_value from `tabBin`
|
item_bins = frappe.db.sql("""
|
||||||
where item_code=%s""", args['item_code'], as_dict=1):
|
select
|
||||||
total_qty += flt(d.actual_qty)
|
bin.actual_qty, bin.stock_value
|
||||||
total_value += flt(d.stock_value)
|
from
|
||||||
|
`tabBin` bin, `tabWarehouse` warehouse
|
||||||
|
where
|
||||||
|
bin.item_code=%(item)s
|
||||||
|
and bin.warehouse = warehouse.name
|
||||||
|
and warehouse.company=%(company)s""",
|
||||||
|
{"item": args['item_code'], "company": args['company']}, as_dict=1)
|
||||||
|
|
||||||
|
for d in item_bins:
|
||||||
|
total_qty += flt(d.actual_qty)
|
||||||
|
total_value += flt(d.stock_value)
|
||||||
|
|
||||||
if total_qty:
|
if total_qty:
|
||||||
valuation_rate = total_value / total_qty
|
valuation_rate = total_value / total_qty
|
||||||
|
@ -725,6 +725,7 @@ def add_variant_item(variant_items, wo_doc, bom_no, table_name="items"):
|
|||||||
args.update(item_data)
|
args.update(item_data)
|
||||||
|
|
||||||
args["rate"] = get_bom_item_rate({
|
args["rate"] = get_bom_item_rate({
|
||||||
|
"company": wo_doc.company,
|
||||||
"item_code": args.get("item_code"),
|
"item_code": args.get("item_code"),
|
||||||
"qty": args.get("required_qty"),
|
"qty": args.get("required_qty"),
|
||||||
"uom": args.get("stock_uom"),
|
"uom": args.get("stock_uom"),
|
||||||
|
@ -137,7 +137,7 @@
|
|||||||
"label": "Status",
|
"label": "Status",
|
||||||
"oldfieldname": "status",
|
"oldfieldname": "status",
|
||||||
"oldfieldtype": "Select",
|
"oldfieldtype": "Select",
|
||||||
"options": "Accepted\nRejected"
|
"options": "\nAccepted\nRejected"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"depends_on": "non_numeric",
|
"depends_on": "non_numeric",
|
||||||
@ -215,7 +215,7 @@
|
|||||||
"idx": 1,
|
"idx": 1,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2021-01-07 21:56:40.235579",
|
"modified": "2021-01-07 22:16:53.978410",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Stock",
|
"module": "Stock",
|
||||||
"name": "Quality Inspection Reading",
|
"name": "Quality Inspection Reading",
|
||||||
|
@ -524,7 +524,7 @@ frappe.ui.form.on('Stock Entry', {
|
|||||||
})
|
})
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (let i in frm.doc.items) {
|
for (let i in frm.doc.items) {
|
||||||
let item = frm.doc.items[i];
|
let item = frm.doc.items[i];
|
||||||
|
|
||||||
@ -675,7 +675,13 @@ frappe.ui.form.on('Stock Entry Detail', {
|
|||||||
});
|
});
|
||||||
refresh_field("items");
|
refresh_field("items");
|
||||||
|
|
||||||
if (!d.serial_no) {
|
let no_batch_serial_number_value = !d.serial_no;
|
||||||
|
if (d.has_batch_no && !d.has_serial_no) {
|
||||||
|
// check only batch_no for batched item
|
||||||
|
no_batch_serial_number_value = !d.batch_no;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (no_batch_serial_number_value) {
|
||||||
erpnext.stock.select_batch_and_serial_no(frm, d);
|
erpnext.stock.select_batch_and_serial_no(frm, d);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user