Merge branch 'develop' of https://github.com/frappe/erpnext into rebrand-ui

This commit is contained in:
Suraj Shetty 2020-11-09 13:14:11 +05:30
commit 1183980e0e
22 changed files with 109 additions and 71 deletions

View File

@ -43,7 +43,7 @@
{ {
"hidden": 0, "hidden": 0,
"label": "Bank Statement", "label": "Bank Statement",
"links": "[\n {\n \"label\": \"Bank\",\n \"name\": \"Bank\",\n \"type\": \"doctype\"\n },\n {\n \"label\": \"Bank Account\",\n \"name\": \"Bank Account\",\n \"type\": \"doctype\"\n },\n {\n \"label\": \"Bank Statement Transaction Entry\",\n \"name\": \"Bank Statement Transaction Entry\",\n \"type\": \"doctype\"\n },\n {\n \"label\": \"Bank Statement Settings\",\n \"name\": \"Bank Statement Settings\",\n \"type\": \"doctype\"\n }\n]" "links": "[\n {\n \"label\": \"Bank\",\n \"name\": \"Bank\",\n \"type\": \"doctype\"\n },\n {\n \"label\": \"Bank Account\",\n \"name\": \"Bank Account\",\n \"type\": \"doctype\"\n },\n {\n \"label\": \"Bank Clearance\",\n \"name\": \"Bank Clearance\",\n \"type\": \"doctype\"\n },\n {\n \"label\": \"Bank Reconciliation\",\n \"name\": \"bank-reconciliation\",\n \"type\": \"page\"\n },\n {\n \"dependencies\": [\n \"GL Entry\"\n ],\n \"doctype\": \"GL Entry\",\n \"is_query_report\": true,\n \"label\": \"Bank Reconciliation Statement\",\n \"name\": \"Bank Reconciliation Statement\",\n \"type\": \"report\"\n },\n {\n \"label\": \"Bank Statement Transaction Entry\",\n \"name\": \"Bank Statement Transaction Entry\",\n \"type\": \"doctype\"\n },\n {\n \"label\": \"Bank Statement Settings\",\n \"name\": \"Bank Statement Settings\",\n \"type\": \"doctype\"\n }\n]"
}, },
{ {
"hidden": 0, "hidden": 0,
@ -99,7 +99,7 @@
"idx": 0, "idx": 0,
"is_standard": 1, "is_standard": 1,
"label": "Accounting", "label": "Accounting",
"modified": "2020-10-21 12:27:51.346915", "modified": "2020-11-06 13:05:58.650150",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Accounts", "module": "Accounts",
"name": "Accounting", "name": "Accounting",

View File

@ -132,15 +132,19 @@ class POSInvoice(SalesInvoice):
msg = "" msg = ""
item_code = frappe.bold(d.item_code) item_code = frappe.bold(d.item_code)
serial_nos = get_serial_nos(d.serial_no)
if serialized and batched and (no_batch_selected or no_serial_selected): if serialized and batched and (no_batch_selected or no_serial_selected):
msg = (_('Row #{}: Please select a serial no and batch against item: {} or remove it to complete transaction.') msg = (_('Row #{}: Please select a serial no and batch against item: {} or remove it to complete transaction.')
.format(d.idx, item_code)) .format(d.idx, item_code))
if serialized and no_serial_selected: elif serialized and no_serial_selected:
msg = (_('Row #{}: No serial number selected against item: {}. Please select one or remove it to complete transaction.') msg = (_('Row #{}: No serial number selected against item: {}. Please select one or remove it to complete transaction.')
.format(d.idx, item_code)) .format(d.idx, item_code))
if batched and no_batch_selected: elif batched and no_batch_selected:
msg = (_('Row #{}: No batch selected against item: {}. Please select a batch or remove it to complete transaction.') msg = (_('Row #{}: No batch selected against item: {}. Please select a batch or remove it to complete transaction.')
.format(d.idx, item_code)) .format(d.idx, item_code))
elif serialized and not no_serial_selected and len(serial_nos) != d.qty:
msg = (_("Row #{}: You must select {} serial numbers for item {}.").format(d.idx, frappe.bold(cint(d.qty)), item_code))
if msg: if msg:
error_msg.append(msg) error_msg.append(msg)

View File

@ -99,6 +99,7 @@ erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({
target: me.frm, target: me.frm,
setters: { setters: {
supplier: me.frm.doc.supplier || undefined, supplier: me.frm.doc.supplier || undefined,
schedule_date: undefined
}, },
get_query_filters: { get_query_filters: {
docstatus: 1, docstatus: 1,
@ -107,16 +108,16 @@ erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({
company: me.frm.doc.company company: me.frm.doc.company
} }
}) })
}, __("Get items from")); }, __("Get Items From"));
this.frm.add_custom_button(__('Purchase Receipt'), function() { this.frm.add_custom_button(__('Purchase Receipt'), function() {
erpnext.utils.map_current_doc({ erpnext.utils.map_current_doc({
method: "erpnext.stock.doctype.purchase_receipt.purchase_receipt.make_purchase_invoice", method: "erpnext.stock.doctype.purchase_receipt.purchase_receipt.make_purchase_invoice",
source_doctype: "Purchase Receipt", source_doctype: "Purchase Receipt",
target: me.frm, target: me.frm,
date_field: "posting_date",
setters: { setters: {
supplier: me.frm.doc.supplier || undefined, supplier: me.frm.doc.supplier || undefined,
posting_date: undefined
}, },
get_query_filters: { get_query_filters: {
docstatus: 1, docstatus: 1,
@ -125,7 +126,7 @@ erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({
is_return: 0 is_return: 0
} }
}) })
}, __("Get items from")); }, __("Get Items From"));
} }
this.frm.toggle_reqd("supplier_warehouse", this.frm.doc.is_subcontracted==="Yes"); this.frm.toggle_reqd("supplier_warehouse", this.frm.doc.is_subcontracted==="Yes");

View File

@ -199,7 +199,7 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte
company: me.frm.doc.company company: me.frm.doc.company
} }
}) })
}, __("Get items from")); }, __("Get Items From"));
}, },
quotation_btn: function() { quotation_btn: function() {
@ -223,7 +223,7 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte
company: me.frm.doc.company company: me.frm.doc.company
} }
}) })
}, __("Get items from")); }, __("Get Items From"));
}, },
delivery_note_btn: function() { delivery_note_btn: function() {
@ -251,7 +251,7 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte
}; };
} }
}); });
}, __("Get items from")); }, __("Get Items From"));
}, },
tc_name: function() { tc_name: function() {
@ -812,10 +812,10 @@ frappe.ui.form.on('Sales Invoice', {
if (cint(frm.doc.docstatus==0) && cur_frm.page.current_view_name!=="pos" && !frm.doc.is_return) { if (cint(frm.doc.docstatus==0) && cur_frm.page.current_view_name!=="pos" && !frm.doc.is_return) {
frm.add_custom_button(__('Healthcare Services'), function() { frm.add_custom_button(__('Healthcare Services'), function() {
get_healthcare_services_to_invoice(frm); get_healthcare_services_to_invoice(frm);
},"Get items from"); },"Get Items From");
frm.add_custom_button(__('Prescriptions'), function() { frm.add_custom_button(__('Prescriptions'), function() {
get_drugs_to_invoice(frm); get_drugs_to_invoice(frm);
},"Get items from"); },"Get Items From");
} }
} }
else { else {

View File

@ -19,7 +19,7 @@
</div> </div>
<div class="col-xs-6"> <div class="col-xs-6">
<table> <table>
<tr><td><strong>Date: </strong></td><td>{{ frappe.utils.formatdate(doc.creation) }}</td></tr> <tr><td><strong>Date: </strong></td><td>{{ frappe.utils.format_date(doc.creation) }}</td></tr>
</table> </table>
</div> </div>
</div> </div>

View File

@ -299,7 +299,7 @@ erpnext.buying.PurchaseOrderController = erpnext.buying.BuyingController.extend(
if(me.values) { if(me.values) {
me.values.sub_con_rm_items.map((row,i) => { me.values.sub_con_rm_items.map((row,i) => {
if (!row.item_code || !row.rm_item_code || !row.warehouse || !row.qty || row.qty === 0) { if (!row.item_code || !row.rm_item_code || !row.warehouse || !row.qty || row.qty === 0) {
frappe.throw(__("Item Code, warehouse, quantity are required on row" + (i+1))); frappe.throw(__("Item Code, warehouse, quantity are required on row {0}", [i+1]));
} }
}) })
me._make_rm_stock_entry(me.dialog.fields_dict.sub_con_rm_items.grid.get_selected_children()) me._make_rm_stock_entry(me.dialog.fields_dict.sub_con_rm_items.grid.get_selected_children())
@ -366,7 +366,7 @@ erpnext.buying.PurchaseOrderController = erpnext.buying.BuyingController.extend(
per_ordered: ["<", 99.99], per_ordered: ["<", 99.99],
} }
}) })
}, __("Get items from")); }, __("Get Items From"));
this.frm.add_custom_button(__('Supplier Quotation'), this.frm.add_custom_button(__('Supplier Quotation'),
function() { function() {
@ -382,7 +382,7 @@ erpnext.buying.PurchaseOrderController = erpnext.buying.BuyingController.extend(
status: ["!=", "Stopped"], status: ["!=", "Stopped"],
} }
}) })
}, __("Get items from")); }, __("Get Items From"));
this.frm.add_custom_button(__('Update rate as per last purchase'), this.frm.add_custom_button(__('Update rate as per last purchase'),
function() { function() {

View File

@ -217,13 +217,15 @@ erpnext.buying.RequestforQuotationController = erpnext.buying.BuyingController.e
source_doctype: "Material Request", source_doctype: "Material Request",
target: me.frm, target: me.frm,
setters: { setters: {
company: me.frm.doc.company schedule_date: undefined,
status: undefined
}, },
get_query_filters: { get_query_filters: {
material_request_type: "Purchase", material_request_type: "Purchase",
docstatus: 1, docstatus: 1,
status: ["!=", "Stopped"], status: ["!=", "Stopped"],
per_ordered: ["<", 99.99] per_ordered: ["<", 99.99],
company: me.frm.doc.company
} }
}) })
}, __("Get Items From")); }, __("Get Items From"));
@ -236,32 +238,40 @@ erpnext.buying.RequestforQuotationController = erpnext.buying.BuyingController.e
source_doctype: "Opportunity", source_doctype: "Opportunity",
target: me.frm, target: me.frm,
setters: { setters: {
company: me.frm.doc.company party_name: undefined,
opportunity_from: undefined,
status: undefined
}, },
get_query_filters: {
status: ["not in", ["Closed", "Lost"]],
company: me.frm.doc.company
}
}) })
}, __("Get Items From")); }, __("Get Items From"));
// Get items from open Material Requests based on supplier // Get items from open Material Requests based on supplier
this.frm.add_custom_button(__('Possible Supplier'), function() { this.frm.add_custom_button(__('Possible Supplier'), function() {
// Create a dialog window for the user to pick their supplier // Create a dialog window for the user to pick their supplier
var d = new frappe.ui.Dialog({ var dialog = new frappe.ui.Dialog({
title: __('Select Possible Supplier'), title: __('Select Possible Supplier'),
fields: [ fields: [
{fieldname: 'supplier', fieldtype:'Link', options:'Supplier', label:'Supplier', reqd:1}, {
{fieldname: 'ok_button', fieldtype:'Button', label:'Get Items from Material Requests'}, fieldname: 'supplier',
] fieldtype:'Link',
}); options:'Supplier',
label:'Supplier',
// On the user clicking the ok button reqd:1,
d.fields_dict.ok_button.input.onclick = function() { description: __("Get Items from Material Requests against this Supplier")
var btn = d.fields_dict.ok_button.input; }
var v = d.get_values(); ],
if(v) { primary_action_label: __("Get Items"),
$(btn).set_working(); primary_action: (args) => {
if(!args) return;
dialog.hide();
erpnext.utils.map_current_doc({ erpnext.utils.map_current_doc({
method: "erpnext.buying.doctype.request_for_quotation.request_for_quotation.get_item_from_material_requests_based_on_supplier", method: "erpnext.buying.doctype.request_for_quotation.request_for_quotation.get_item_from_material_requests_based_on_supplier",
source_name: v.supplier, source_name: args.supplier,
target: me.frm, target: me.frm,
setters: { setters: {
company: me.frm.doc.company company: me.frm.doc.company
@ -273,11 +283,11 @@ erpnext.buying.RequestforQuotationController = erpnext.buying.BuyingController.e
per_ordered: ["<", 99.99] per_ordered: ["<", 99.99]
} }
}); });
$(btn).done_working(); dialog.hide();
d.hide();
} }
} });
d.show();
dialog.show();
}, __("Get Items From")); }, __("Get Items From"));
// Get Suppliers // Get Suppliers

View File

@ -37,16 +37,18 @@ erpnext.buying.SupplierQuotationController = erpnext.buying.BuyingController.ext
source_doctype: "Material Request", source_doctype: "Material Request",
target: me.frm, target: me.frm,
setters: { setters: {
company: me.frm.doc.company schedule_date: undefined,
status: undefined
}, },
get_query_filters: { get_query_filters: {
material_request_type: "Purchase", material_request_type: "Purchase",
docstatus: 1, docstatus: 1,
status: ["!=", "Stopped"], status: ["!=", "Stopped"],
per_ordered: ["<", 99.99] per_ordered: ["<", 99.99],
company: me.frm.doc.company
} }
}) })
}, __("Get items from")); }, __("Get Items From"));
this.frm.add_custom_button(__("Request for Quotation"), this.frm.add_custom_button(__("Request for Quotation"),
function() { function() {
@ -58,16 +60,16 @@ erpnext.buying.SupplierQuotationController = erpnext.buying.BuyingController.ext
source_doctype: "Request for Quotation", source_doctype: "Request for Quotation",
target: me.frm, target: me.frm,
setters: { setters: {
company: me.frm.doc.company,
transaction_date: null transaction_date: null
}, },
get_query_filters: { get_query_filters: {
supplier: me.frm.doc.supplier supplier: me.frm.doc.supplier,
company: me.frm.doc.company
}, },
get_query_method: "erpnext.buying.doctype.request_for_quotation.request_for_quotation.get_rfq_containing_supplier" get_query_method: "erpnext.buying.doctype.request_for_quotation.request_for_quotation.get_rfq_containing_supplier"
}) })
}, __("Get items from")); }, __("Get Items From"));
} }
}, },

View File

@ -66,7 +66,7 @@ erpnext.maintenance.MaintenanceSchedule = frappe.ui.form.Controller.extend({
company: me.frm.doc.company company: me.frm.doc.company
} }
}); });
}, __("Get items from")); }, __("Get Items From"));
} else if (this.frm.doc.docstatus === 1) { } else if (this.frm.doc.docstatus === 1) {
this.frm.add_custom_button(__('Create Maintenance Visit'), function() { this.frm.add_custom_button(__('Create Maintenance Visit'), function() {
frappe.model.open_mapped_doc({ frappe.model.open_mapped_doc({

View File

@ -62,7 +62,7 @@ erpnext.maintenance.MaintenanceVisit = frappe.ui.form.Controller.extend({
company: me.frm.doc.company company: me.frm.doc.company
} }
}) })
}, __("Get items from")); }, __("Get Items From"));
this.frm.add_custom_button(__('Warranty Claim'), this.frm.add_custom_button(__('Warranty Claim'),
function() { function() {
erpnext.utils.map_current_doc({ erpnext.utils.map_current_doc({
@ -78,7 +78,7 @@ erpnext.maintenance.MaintenanceVisit = frappe.ui.form.Controller.extend({
company: me.frm.doc.company company: me.frm.doc.company
} }
}) })
}, __("Get items from")); }, __("Get Items From"));
this.frm.add_custom_button(__('Sales Order'), this.frm.add_custom_button(__('Sales Order'),
function() { function() {
erpnext.utils.map_current_doc({ erpnext.utils.map_current_doc({
@ -94,7 +94,7 @@ erpnext.maintenance.MaintenanceVisit = frappe.ui.form.Controller.extend({
order_type: me.frm.doc.order_type, order_type: me.frm.doc.order_type,
} }
}) })
}, __("Get items from")); }, __("Get Items From"));
} }
}, },
}); });

View File

@ -276,7 +276,7 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({
var me = this; var me = this;
this.frm.add_custom_button(__("Product Bundle"), function() { this.frm.add_custom_button(__("Product Bundle"), function() {
erpnext.buying.get_items_from_product_bundle(me.frm); erpnext.buying.get_items_from_product_bundle(me.frm);
}, __("Get items from")); }, __("Get Items From"));
}, },
shipping_address: function(){ shipping_address: function(){

View File

@ -104,7 +104,7 @@ def get_header(filters, csv_class):
# L = Tax client number (Mandantennummer) # L = Tax client number (Mandantennummer)
datev_settings.get('client_number', '00000'), datev_settings.get('client_number', '00000'),
# M = Start of the fiscal year (Wirtschaftsjahresbeginn) # M = Start of the fiscal year (Wirtschaftsjahresbeginn)
frappe.utils.formatdate(frappe.defaults.get_user_default('year_start_date'), 'yyyyMMdd'), frappe.utils.formatdate(filters.get('fiscal_year_start'), 'yyyyMMdd'),
# N = Length of account numbers (Sachkontenlänge) # N = Length of account numbers (Sachkontenlänge)
datev_settings.get('account_number_length', '4'), datev_settings.get('account_number_length', '4'),
# O = Transaction batch start date (YYYYMMDD) # O = Transaction batch start date (YYYYMMDD)

View File

@ -236,7 +236,7 @@ def get_tax_template(master_doctype, company, is_inter_state, state_code):
if tax_category.gst_state == number_state_mapping[state_code] or \ if tax_category.gst_state == number_state_mapping[state_code] or \
(not default_tax and not tax_category.gst_state): (not default_tax and not tax_category.gst_state):
default_tax = frappe.db.get_value(master_doctype, default_tax = frappe.db.get_value(master_doctype,
{'disabled': 0, 'tax_category': tax_category.name}, 'name') {'company': company, 'disabled': 0, 'tax_category': tax_category.name}, 'name')
return default_tax return default_tax
def get_tax_template_for_sez(party_details, master_doctype, company, party_type): def get_tax_template_for_sez(party_details, master_doctype, company, party_type):

View File

@ -13,6 +13,7 @@ import json
import frappe import frappe
from frappe import _ from frappe import _
from six import string_types from six import string_types
from erpnext.accounts.utils import get_fiscal_year
from erpnext.regional.germany.utils.datev.datev_csv import download_csv_files_as_zip, get_datev_csv from erpnext.regional.germany.utils.datev.datev_csv import download_csv_files_as_zip, get_datev_csv
from erpnext.regional.germany.utils.datev.datev_constants import Transactions, DebtorsCreditors, AccountNames from erpnext.regional.germany.utils.datev.datev_constants import Transactions, DebtorsCreditors, AccountNames
@ -98,21 +99,33 @@ def execute(filters=None):
def validate(filters): def validate(filters):
"""Make sure all mandatory filters and settings are present.""" """Make sure all mandatory filters and settings are present."""
if not filters.get('company'): company = filters.get('company')
if not company:
frappe.throw(_('<b>Company</b> is a mandatory filter.')) frappe.throw(_('<b>Company</b> is a mandatory filter.'))
if not filters.get('from_date'): from_date = filters.get('from_date')
if not from_date:
frappe.throw(_('<b>From Date</b> is a mandatory filter.')) frappe.throw(_('<b>From Date</b> is a mandatory filter.'))
if not filters.get('to_date'): to_date = filters.get('to_date')
if not to_date:
frappe.throw(_('<b>To Date</b> is a mandatory filter.')) frappe.throw(_('<b>To Date</b> is a mandatory filter.'))
validate_fiscal_year(from_date, to_date, company)
try: try:
frappe.get_doc('DATEV Settings', filters.get('company')) frappe.get_doc('DATEV Settings', filters.get('company'))
except frappe.DoesNotExistError: except frappe.DoesNotExistError:
frappe.throw(_('Please create <b>DATEV Settings</b> for Company <b>{}</b>.').format(filters.get('company'))) frappe.throw(_('Please create <b>DATEV Settings</b> for Company <b>{}</b>.').format(filters.get('company')))
def validate_fiscal_year(from_date, to_date, company):
from_fiscal_year = get_fiscal_year(date=from_date, company=company)
to_fiscal_year = get_fiscal_year(date=to_date, company=company)
if from_fiscal_year != to_fiscal_year:
frappe.throw(_('Dates {} and {} are not in the same fiscal year.').format(from_date, to_date))
def get_transactions(filters, as_dict=1): def get_transactions(filters, as_dict=1):
""" """
Get a list of accounting entries. Get a list of accounting entries.
@ -317,9 +330,13 @@ def download_datev_csv(filters):
filters = json.loads(filters) filters = json.loads(filters)
validate(filters) validate(filters)
company = filters.get('company')
fiscal_year = get_fiscal_year(date=filters.get('from_date'), company=company)
filters['fiscal_year_start'] = fiscal_year[1]
# set chart of accounts used # set chart of accounts used
coa = frappe.get_value('Company', filters.get('company'), 'chart_of_accounts') coa = frappe.get_value('Company', company, 'chart_of_accounts')
filters['skr'] = '04' if 'SKR04' in coa else ('03' if 'SKR03' in coa else '') filters['skr'] = '04' if 'SKR04' in coa else ('03' if 'SKR03' in coa else '')
transactions = get_transactions(filters) transactions = get_transactions(filters)

View File

@ -116,7 +116,7 @@ erpnext.selling.QuotationController = erpnext.selling.SellingController.extend({
company: me.frm.doc.company company: me.frm.doc.company
} }
}) })
}, __("Get items from"), "btn-default"); }, __("Get Items From"), "btn-default");
} }
this.toggle_reqd_lead_customer(); this.toggle_reqd_lead_customer();

View File

@ -236,7 +236,7 @@ erpnext.selling.SalesOrderController = erpnext.selling.SellingController.extend(
status: ["!=", "Lost"] status: ["!=", "Lost"]
} }
}) })
}, __("Get items from")); }, __("Get Items From"));
} }
this.order_type(doc); this.order_type(doc);

View File

@ -555,6 +555,8 @@ erpnext.PointOfSale.Controller = class {
frappe.utils.play_sound("error"); frappe.utils.play_sound("error");
return; return;
} }
if (!item_code) return;
item_selected_from_selector && (value = flt(value)) item_selected_from_selector && (value = flt(value))
const args = { item_code, batch_no, [field]: value }; const args = { item_code, batch_no, [field]: value };

View File

@ -372,12 +372,13 @@ erpnext.PointOfSale.ItemDetails = class {
this.$form_container.on('click', '.auto-fetch-btn', () => { this.$form_container.on('click', '.auto-fetch-btn', () => {
this.batch_no_control && this.batch_no_control.set_value(''); this.batch_no_control && this.batch_no_control.set_value('');
let qty = this.qty_control.get_value(); let qty = this.qty_control.get_value();
let conversion_factor = this.conversion_factor_control.get_value();
let expiry_date = this.item_row.has_batch_no ? this.events.get_frm().doc.posting_date : ""; let expiry_date = this.item_row.has_batch_no ? this.events.get_frm().doc.posting_date : "";
let numbers = frappe.call({ let numbers = frappe.call({
method: "erpnext.stock.doctype.serial_no.serial_no.auto_fetch_serial_number", method: "erpnext.stock.doctype.serial_no.serial_no.auto_fetch_serial_number",
args: { args: {
qty, qty: qty * conversion_factor,
item_code: this.current_item.item_code, item_code: this.current_item.item_code,
warehouse: this.warehouse_control.get_value() || '', warehouse: this.warehouse_control.get_value() || '',
batch_nos: this.current_item.batch_no || '', batch_nos: this.current_item.batch_no || '',

View File

@ -151,7 +151,7 @@ erpnext.stock.DeliveryNoteController = erpnext.selling.SellingController.extend(
project: me.frm.doc.project || undefined, project: me.frm.doc.project || undefined,
} }
}) })
}, __("Get items from")); }, __("Get Items From"));
} }
} }

View File

@ -90,7 +90,7 @@ frappe.ui.form.on('Material Request', {
make_custom_buttons: function(frm) { make_custom_buttons: function(frm) {
if (frm.doc.docstatus==0) { if (frm.doc.docstatus==0) {
frm.add_custom_button(__("Bill of Materials"), frm.add_custom_button(__("Bill of Materials"),
() => frm.events.get_items_from_bom(frm), __("Get items from")); () => frm.events.get_items_from_bom(frm), __("Get Items From"));
} }
if (frm.doc.docstatus == 1 && frm.doc.status != 'Stopped') { if (frm.doc.docstatus == 1 && frm.doc.status != 'Stopped') {
@ -147,7 +147,7 @@ frappe.ui.form.on('Material Request', {
if (frm.doc.docstatus===0) { if (frm.doc.docstatus===0) {
frm.add_custom_button(__('Sales Order'), () => frm.events.get_items_from_sales_order(frm), frm.add_custom_button(__('Sales Order'), () => frm.events.get_items_from_sales_order(frm),
__("Get items from")); __("Get Items From"));
} }
if (frm.doc.docstatus == 1 && frm.doc.status == 'Stopped') { if (frm.doc.docstatus == 1 && frm.doc.status == 'Stopped') {
@ -173,7 +173,8 @@ frappe.ui.form.on('Material Request', {
source_doctype: "Sales Order", source_doctype: "Sales Order",
target: frm, target: frm,
setters: { setters: {
customer: frm.doc.customer || undefined customer: frm.doc.customer || undefined,
delivery_date: undefined,
}, },
get_query_filters: { get_query_filters: {
docstatus: 1, docstatus: 1,
@ -280,8 +281,7 @@ frappe.ui.form.on('Material Request', {
fieldname:'default_supplier', fieldname:'default_supplier',
fieldtype: 'Link', fieldtype: 'Link',
options: 'Supplier', options: 'Supplier',
description: __('Select a Supplier from the Default Suppliers of the items below. \ description: __('Select a Supplier from the Default Suppliers of the items below. On selection, a Purchase Order will be made against items belonging to the selected Supplier only.'),
On selection, a Purchase Order will be made against items belonging to the selected Supplier only.'),
get_query: () => { get_query: () => {
return{ return{
query: "erpnext.stock.doctype.material_request.material_request.get_default_supplier_query", query: "erpnext.stock.doctype.material_request.material_request.get_default_supplier_query",

View File

@ -128,6 +128,7 @@ erpnext.stock.PurchaseReceiptController = erpnext.buying.BuyingController.extend
target: me.frm, target: me.frm,
setters: { setters: {
supplier: me.frm.doc.supplier, supplier: me.frm.doc.supplier,
schedule_date: undefined
}, },
get_query_filters: { get_query_filters: {
docstatus: 1, docstatus: 1,
@ -136,7 +137,7 @@ erpnext.stock.PurchaseReceiptController = erpnext.buying.BuyingController.extend
company: me.frm.doc.company company: me.frm.doc.company
} }
}) })
}, __("Get items from")); }, __("Get Items From"));
} }
if(this.frm.doc.docstatus == 1 && this.frm.doc.status!="Closed") { if(this.frm.doc.docstatus == 1 && this.frm.doc.status!="Closed") {

View File

@ -225,7 +225,7 @@ frappe.ui.form.on('Stock Entry', {
docstatus: 1 docstatus: 1
} }
}) })
}, __("Get items from")); }, __("Get Items From"));
frm.add_custom_button(__('Material Request'), function() { frm.add_custom_button(__('Material Request'), function() {
erpnext.utils.map_current_doc({ erpnext.utils.map_current_doc({
@ -240,7 +240,7 @@ frappe.ui.form.on('Stock Entry', {
status: ["not in", ["Transferred", "Issued"]] status: ["not in", ["Transferred", "Issued"]]
} }
}) })
}, __("Get items from")); }, __("Get Items From"));
} }
if (frm.doc.docstatus===0 && frm.doc.purpose == "Material Issue") { if (frm.doc.docstatus===0 && frm.doc.purpose == "Material Issue") {
frm.add_custom_button(__('Expired Batches'), function() { frm.add_custom_button(__('Expired Batches'), function() {
@ -263,7 +263,7 @@ frappe.ui.form.on('Stock Entry', {
} }
} }
}); });
}, __("Get items from")); }, __("Get Items From"));
} }
frm.events.show_bom_custom_button(frm); frm.events.show_bom_custom_button(frm);
@ -282,7 +282,7 @@ frappe.ui.form.on('Stock Entry', {
}, },
stock_entry_type: function(frm){ stock_entry_type: function(frm){
frm.remove_custom_button('Bill of Materials', "Get items from"); frm.remove_custom_button('Bill of Materials', "Get Items From");
frm.events.show_bom_custom_button(frm); frm.events.show_bom_custom_button(frm);
frm.trigger('add_to_transit'); frm.trigger('add_to_transit');
}, },
@ -427,7 +427,7 @@ frappe.ui.form.on('Stock Entry', {
['Material Issue', 'Material Receipt', 'Material Transfer', 'Send to Subcontractor'].includes(frm.doc.purpose)) { ['Material Issue', 'Material Receipt', 'Material Transfer', 'Send to Subcontractor'].includes(frm.doc.purpose)) {
frm.add_custom_button(__('Bill of Materials'), function() { frm.add_custom_button(__('Bill of Materials'), function() {
frm.events.get_items_from_bom(frm); frm.events.get_items_from_bom(frm);
}, __("Get items from")); }, __("Get Items From"));
} }
}, },