Merge branch 'develop' of https://github.com/frappe/erpnext into rebrand-ui
This commit is contained in:
commit
1183980e0e
@ -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",
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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");
|
||||||
|
|
||||||
|
@ -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 {
|
||||||
@ -1080,7 +1080,7 @@ var get_drugs_to_invoice = function(frm) {
|
|||||||
description:'Quantity will be calculated only for items which has "Nos" as UoM. You may change as required for each invoice item.',
|
description:'Quantity will be calculated only for items which has "Nos" as UoM. You may change as required for each invoice item.',
|
||||||
get_query: function(doc) {
|
get_query: function(doc) {
|
||||||
return {
|
return {
|
||||||
filters: {
|
filters: {
|
||||||
patient: dialog.get_value("patient"),
|
patient: dialog.get_value("patient"),
|
||||||
company: frm.doc.company,
|
company: frm.doc.company,
|
||||||
docstatus: 1
|
docstatus: 1
|
||||||
|
@ -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>
|
||||||
|
@ -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() {
|
||||||
|
@ -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
|
||||||
|
@ -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"));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -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({
|
||||||
|
@ -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"));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@ -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(){
|
||||||
|
@ -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)
|
||||||
|
@ -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):
|
||||||
|
@ -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)
|
||||||
|
@ -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();
|
||||||
|
@ -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);
|
||||||
|
@ -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 };
|
||||||
|
@ -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 || '',
|
||||||
|
@ -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"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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",
|
||||||
|
@ -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") {
|
||||||
|
@ -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');
|
||||||
},
|
},
|
||||||
@ -425,9 +425,9 @@ frappe.ui.form.on('Stock Entry', {
|
|||||||
show_bom_custom_button: function(frm){
|
show_bom_custom_button: function(frm){
|
||||||
if (frm.doc.docstatus === 0 &&
|
if (frm.doc.docstatus === 0 &&
|
||||||
['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"));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user