mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-15 11:09:17 +00:00
Merge branch 'develop' into pr-dn-return
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -17,7 +17,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>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
{{ add_header(0, 1, doc, letter_head, no_letterhead, print_settings) }}
|
{{ add_header(0, 1, doc, letter_head, no_letterhead, print_settings) }}
|
||||||
|
|
||||||
{%- for label, value in (
|
{%- for label, value in (
|
||||||
(_("Received On"), frappe.utils.formatdate(doc.voucher_date)),
|
(_("Received On"), frappe.utils.format_date(doc.voucher_date)),
|
||||||
(_("Received From"), doc.pay_to_recd_from),
|
(_("Received From"), doc.pay_to_recd_from),
|
||||||
(_("Amount"), "<strong>" + doc.get_formatted("total_amount") + "</strong><br>" + (doc.total_amount_in_words or "") + "<br>"),
|
(_("Amount"), "<strong>" + doc.get_formatted("total_amount") + "</strong><br>" + (doc.total_amount_in_words or "") + "<br>"),
|
||||||
(_("Remarks"), doc.remark)
|
(_("Remarks"), doc.remark)
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
<div class="col-xs-6">
|
<div class="col-xs-6">
|
||||||
<table>
|
<table>
|
||||||
<tr><td><strong>Supplier Name: </strong></td><td>{{ doc.supplier }}</td></tr>
|
<tr><td><strong>Supplier Name: </strong></td><td>{{ doc.supplier }}</td></tr>
|
||||||
<tr><td><strong>Due Date: </strong></td><td>{{ frappe.utils.formatdate(doc.due_date) }}</td></tr>
|
<tr><td><strong>Due Date: </strong></td><td>{{ frappe.utils.format_date(doc.due_date) }}</td></tr>
|
||||||
<tr><td><strong>Address: </strong></td><td>{{doc.address_display}}</td></tr>
|
<tr><td><strong>Address: </strong></td><td>{{doc.address_display}}</td></tr>
|
||||||
<tr><td><strong>Contact: </strong></td><td>{{doc.contact_display}}</td></tr>
|
<tr><td><strong>Contact: </strong></td><td>{{doc.contact_display}}</td></tr>
|
||||||
<tr><td><strong>Mobile no: </strong> </td><td>{{doc.contact_mobile}}</td></tr>
|
<tr><td><strong>Mobile no: </strong> </td><td>{{doc.contact_mobile}}</td></tr>
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
<div class="col-xs-6">
|
<div class="col-xs-6">
|
||||||
<table>
|
<table>
|
||||||
<tr><td><strong>Voucher No: </strong></td><td>{{ doc.name }}</td></tr>
|
<tr><td><strong>Voucher No: </strong></td><td>{{ doc.name }}</td></tr>
|
||||||
<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>
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
<div class="col-xs-6">
|
<div class="col-xs-6">
|
||||||
<table>
|
<table>
|
||||||
<tr><td><strong>Customer Name: </strong></td><td>{{ doc.customer }}</td></tr>
|
<tr><td><strong>Customer Name: </strong></td><td>{{ doc.customer }}</td></tr>
|
||||||
<tr><td><strong>Due Date: </strong></td><td>{{ frappe.utils.formatdate(doc.due_date) }}</td></tr>
|
<tr><td><strong>Due Date: </strong></td><td>{{ frappe.utils.format_date(doc.due_date) }}</td></tr>
|
||||||
<tr><td><strong>Address: </strong></td><td>{{doc.address_display}}</td></tr>
|
<tr><td><strong>Address: </strong></td><td>{{doc.address_display}}</td></tr>
|
||||||
<tr><td><strong>Contact: </strong></td><td>{{doc.contact_display}}</td></tr>
|
<tr><td><strong>Contact: </strong></td><td>{{doc.contact_display}}</td></tr>
|
||||||
<tr><td><strong>Mobile no: </strong> </td><td>{{doc.contact_mobile}}</td></tr>
|
<tr><td><strong>Mobile no: </strong> </td><td>{{doc.contact_mobile}}</td></tr>
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
<div class="col-xs-6">
|
<div class="col-xs-6">
|
||||||
<table>
|
<table>
|
||||||
<tr><td><strong>Voucher No: </strong></td><td>{{ doc.name }}</td></tr>
|
<tr><td><strong>Voucher No: </strong></td><td>{{ doc.name }}</td></tr>
|
||||||
<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>
|
||||||
|
|||||||
@@ -50,13 +50,11 @@
|
|||||||
"reqd": 1
|
"reqd": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"depends_on": "eval:parent.doctype == 'Asset'",
|
|
||||||
"fieldname": "depreciation_start_date",
|
"fieldname": "depreciation_start_date",
|
||||||
"fieldtype": "Date",
|
"fieldtype": "Date",
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
"label": "Depreciation Posting Date",
|
"label": "Depreciation Posting Date",
|
||||||
"mandatory_depends_on": "eval:parent.doctype == 'Asset'",
|
"mandatory_depends_on": "eval:parent.doctype == 'Asset'"
|
||||||
"reqd": 1
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"default": "0",
|
"default": "0",
|
||||||
@@ -87,7 +85,7 @@
|
|||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2020-10-30 15:22:29.119868",
|
"modified": "2020-11-05 16:30:09.213479",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Assets",
|
"module": "Assets",
|
||||||
"name": "Asset Finance Book",
|
"name": "Asset Finance Book",
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ def update_maintenance_log(asset_maintenance, item_code, item_name, task):
|
|||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
@frappe.validate_and_sanitize_search_inputs
|
@frappe.validate_and_sanitize_search_inputs
|
||||||
def get_team_members(doctype, txt, searchfield, start, page_len, filters):
|
def get_team_members(doctype, txt, searchfield, start, page_len, filters):
|
||||||
return frappe.db.get_values('Maintenance Team Member', { 'parent': filters.get("maintenance_team") })
|
return frappe.db.get_values('Maintenance Team Member', { 'parent': filters.get("maintenance_team") }, "team_member")
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_maintenance_log(asset_name):
|
def get_maintenance_log(asset_name):
|
||||||
|
|||||||
@@ -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"));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -632,7 +632,7 @@ execute:frappe.reload_doc('desk', 'doctype', 'dashboard_chart_source')
|
|||||||
execute:frappe.reload_doc('desk', 'doctype', 'dashboard_chart')
|
execute:frappe.reload_doc('desk', 'doctype', 'dashboard_chart')
|
||||||
execute:frappe.reload_doc('desk', 'doctype', 'dashboard_chart_field')
|
execute:frappe.reload_doc('desk', 'doctype', 'dashboard_chart_field')
|
||||||
erpnext.patches.v12_0.remove_bank_remittance_custom_fields
|
erpnext.patches.v12_0.remove_bank_remittance_custom_fields
|
||||||
erpnext.patches.v12_0.generate_leave_ledger_entries #27-08-2020
|
erpnext.patches.v12_0.generate_leave_ledger_entries #04-11-2020
|
||||||
execute:frappe.delete_doc_if_exists("Report", "Loan Repayment")
|
execute:frappe.delete_doc_if_exists("Report", "Loan Repayment")
|
||||||
erpnext.patches.v12_0.move_credit_limit_to_customer_credit_limit
|
erpnext.patches.v12_0.move_credit_limit_to_customer_credit_limit
|
||||||
erpnext.patches.v12_0.add_variant_of_in_item_attribute_table
|
erpnext.patches.v12_0.add_variant_of_in_item_attribute_table
|
||||||
@@ -733,4 +733,5 @@ erpnext.patches.v13_0.print_uom_after_quantity_patch
|
|||||||
erpnext.patches.v13_0.set_payment_channel_in_payment_gateway_account
|
erpnext.patches.v13_0.set_payment_channel_in_payment_gateway_account
|
||||||
erpnext.patches.v13_0.create_healthcare_custom_fields_in_stock_entry_detail
|
erpnext.patches.v13_0.create_healthcare_custom_fields_in_stock_entry_detail
|
||||||
erpnext.patches.v13_0.update_reason_for_resignation_in_employee
|
erpnext.patches.v13_0.update_reason_for_resignation_in_employee
|
||||||
erpnext.patches.v13_0.update_returned_qty_in_pr_dn
|
execute:frappe.delete_doc("Report", "Quoted Item Comparison")
|
||||||
|
erpnext.patches.v13_0.update_returned_qty_in_pr_dn
|
||||||
|
|||||||
@@ -11,8 +11,6 @@ def execute():
|
|||||||
frappe.reload_doc("HR", "doctype", "Leave Ledger Entry")
|
frappe.reload_doc("HR", "doctype", "Leave Ledger Entry")
|
||||||
frappe.reload_doc("HR", "doctype", "Leave Encashment")
|
frappe.reload_doc("HR", "doctype", "Leave Encashment")
|
||||||
frappe.reload_doc("HR", "doctype", "Leave Type")
|
frappe.reload_doc("HR", "doctype", "Leave Type")
|
||||||
if frappe.db.a_row_exists("Leave Ledger Entry"):
|
|
||||||
return
|
|
||||||
|
|
||||||
if not frappe.get_meta("Leave Allocation").has_field("unused_leaves"):
|
if not frappe.get_meta("Leave Allocation").has_field("unused_leaves"):
|
||||||
frappe.reload_doc("HR", "doctype", "Leave Allocation")
|
frappe.reload_doc("HR", "doctype", "Leave Allocation")
|
||||||
|
|||||||
@@ -277,7 +277,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(){
|
||||||
|
|||||||
@@ -539,7 +539,7 @@ erpnext.utils.update_child_items = function(opts) {
|
|||||||
fieldtype: "Table",
|
fieldtype: "Table",
|
||||||
label: "Items",
|
label: "Items",
|
||||||
cannot_add_rows: cannot_add_row,
|
cannot_add_rows: cannot_add_row,
|
||||||
in_place_edit: true,
|
in_place_edit: false,
|
||||||
reqd: 1,
|
reqd: 1,
|
||||||
data: this.data,
|
data: this.data,
|
||||||
get_data: () => {
|
get_data: () => {
|
||||||
|
|||||||
@@ -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);
|
||||||
@@ -572,12 +572,6 @@ erpnext.selling.SalesOrderController = erpnext.selling.SellingController.extend(
|
|||||||
"fieldname": "against_default_supplier",
|
"fieldname": "against_default_supplier",
|
||||||
"default": 0
|
"default": 0
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"fieldtype": "Section Break",
|
|
||||||
"label": "",
|
|
||||||
"fieldname": "sec_break_dialog",
|
|
||||||
"hide_border": 1
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
fieldname: 'items_for_po', fieldtype: 'Table', label: 'Select Items',
|
fieldname: 'items_for_po', fieldtype: 'Table', label: 'Select Items',
|
||||||
fields: [
|
fields: [
|
||||||
@@ -616,16 +610,13 @@ erpnext.selling.SalesOrderController = erpnext.selling.SellingController.extend(
|
|||||||
read_only:1,
|
read_only:1,
|
||||||
in_list_view:1
|
in_list_view:1
|
||||||
},
|
},
|
||||||
],
|
]
|
||||||
data: me.frm.doc.items.map((item) =>{
|
|
||||||
item.pending_qty = (flt(item.stock_qty) - flt(item.ordered_qty)) / flt(item.conversion_factor);
|
|
||||||
return item;
|
|
||||||
}).filter((item) => {return item.pending_qty > 0;})
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
primary_action_label: 'Create Purchase Order',
|
primary_action_label: 'Create Purchase Order',
|
||||||
primary_action (args) {
|
primary_action (args) {
|
||||||
if (!args) return;
|
if (!args) return;
|
||||||
|
|
||||||
let selected_items = dialog.fields_dict.items_for_po.grid.get_selected_children();
|
let selected_items = dialog.fields_dict.items_for_po.grid.get_selected_children();
|
||||||
if(selected_items.length == 0) {
|
if(selected_items.length == 0) {
|
||||||
frappe.throw({message: 'Please select Items from the Table', title: __('Items Required'), indicator:'blue'})
|
frappe.throw({message: 'Please select Items from the Table', title: __('Items Required'), indicator:'blue'})
|
||||||
@@ -635,8 +626,9 @@ erpnext.selling.SalesOrderController = erpnext.selling.SellingController.extend(
|
|||||||
|
|
||||||
var method = args.against_default_supplier ? "make_purchase_order_for_default_supplier" : "make_purchase_order"
|
var method = args.against_default_supplier ? "make_purchase_order_for_default_supplier" : "make_purchase_order"
|
||||||
return frappe.call({
|
return frappe.call({
|
||||||
type: "GET",
|
|
||||||
method: "erpnext.selling.doctype.sales_order.sales_order." + method,
|
method: "erpnext.selling.doctype.sales_order.sales_order." + method,
|
||||||
|
freeze: true,
|
||||||
|
freeze_message: __("Creating Purchase Order ..."),
|
||||||
args: {
|
args: {
|
||||||
"source_name": me.frm.doc.name,
|
"source_name": me.frm.doc.name,
|
||||||
"selected_items": selected_items
|
"selected_items": selected_items
|
||||||
@@ -660,8 +652,9 @@ erpnext.selling.SalesOrderController = erpnext.selling.SellingController.extend(
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
dialog.fields_dict["against_default_supplier"].df.onchange = () => {
|
dialog.fields_dict["against_default_supplier"].df.onchange = () => set_po_items_data(dialog);
|
||||||
console.log("yo");
|
|
||||||
|
function set_po_items_data (dialog) {
|
||||||
var against_default_supplier = dialog.get_value("against_default_supplier");
|
var against_default_supplier = dialog.get_value("against_default_supplier");
|
||||||
var items_for_po = dialog.get_value("items_for_po");
|
var items_for_po = dialog.get_value("items_for_po");
|
||||||
|
|
||||||
@@ -671,16 +664,28 @@ erpnext.selling.SalesOrderController = erpnext.selling.SellingController.extend(
|
|||||||
dialog.fields_dict["items_for_po"].df.data = items_with_supplier;
|
dialog.fields_dict["items_for_po"].df.data = items_with_supplier;
|
||||||
dialog.get_field("items_for_po").refresh();
|
dialog.get_field("items_for_po").refresh();
|
||||||
} else {
|
} else {
|
||||||
let pending_items = me.frm.doc.items.map((item) =>{
|
let po_items = [];
|
||||||
item.pending_qty = (flt(item.stock_qty) - flt(item.ordered_qty)) / flt(item.conversion_factor);
|
me.frm.doc.items.forEach(d => {
|
||||||
return item;
|
let pending_qty = (flt(d.stock_qty) - flt(d.ordered_qty)) / flt(d.conversion_factor);
|
||||||
}).filter((item) => {return item.pending_qty > 0;});
|
if (pending_qty > 0) {
|
||||||
|
po_items.push({
|
||||||
|
"doctype": "Sales Order Item",
|
||||||
|
"name": d.name,
|
||||||
|
"item_name": d.item_name,
|
||||||
|
"item_code": d.item_code,
|
||||||
|
"pending_qty": pending_qty,
|
||||||
|
"uom": d.uom,
|
||||||
|
"supplier": d.supplier
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
dialog.fields_dict["items_for_po"].df.data = pending_items;
|
dialog.fields_dict["items_for_po"].df.data = po_items;
|
||||||
dialog.get_field("items_for_po").refresh();
|
dialog.get_field("items_for_po").refresh();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
set_po_items_data(dialog);
|
||||||
dialog.get_field("items_for_po").grid.only_sortable();
|
dialog.get_field("items_for_po").grid.only_sortable();
|
||||||
dialog.get_field("items_for_po").refresh();
|
dialog.get_field("items_for_po").refresh();
|
||||||
dialog.wrapper.find('.grid-heading-row .grid-row-check').click();
|
dialog.wrapper.find('.grid-heading-row .grid-row-check').click();
|
||||||
|
|||||||
@@ -779,7 +779,9 @@ def get_events(start, end, filters=None):
|
|||||||
return data
|
return data
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def make_purchase_order_for_default_supplier(source_name, selected_items=[], target_doc=None):
|
def make_purchase_order_for_default_supplier(source_name, selected_items=None, target_doc=None):
|
||||||
|
if not selected_items: return
|
||||||
|
|
||||||
if isinstance(selected_items, string_types):
|
if isinstance(selected_items, string_types):
|
||||||
selected_items = json.loads(selected_items)
|
selected_items = json.loads(selected_items)
|
||||||
|
|
||||||
@@ -878,7 +880,9 @@ def make_purchase_order_for_default_supplier(source_name, selected_items=[], tar
|
|||||||
frappe.msgprint(_("Purchase Order already created for all Sales Order items"))
|
frappe.msgprint(_("Purchase Order already created for all Sales Order items"))
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def make_purchase_order(source_name, selected_items=[], target_doc=None):
|
def make_purchase_order(source_name, selected_items=None, target_doc=None):
|
||||||
|
if not selected_items: return
|
||||||
|
|
||||||
if isinstance(selected_items, string_types):
|
if isinstance(selected_items, string_types):
|
||||||
selected_items = json.loads(selected_items)
|
selected_items = json.loads(selected_items)
|
||||||
|
|
||||||
|
|||||||
@@ -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"));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -288,7 +288,6 @@ def update_included_uom_in_report(columns, result, include_uom, conversion_facto
|
|||||||
return
|
return
|
||||||
|
|
||||||
convertible_cols = {}
|
convertible_cols = {}
|
||||||
|
|
||||||
is_dict_obj = False
|
is_dict_obj = False
|
||||||
if isinstance(result[0], dict):
|
if isinstance(result[0], dict):
|
||||||
is_dict_obj = True
|
is_dict_obj = True
|
||||||
@@ -310,13 +309,13 @@ def update_included_uom_in_report(columns, result, include_uom, conversion_facto
|
|||||||
for row_idx, row in enumerate(result):
|
for row_idx, row in enumerate(result):
|
||||||
data = row.items() if is_dict_obj else enumerate(row)
|
data = row.items() if is_dict_obj else enumerate(row)
|
||||||
for key, value in data:
|
for key, value in data:
|
||||||
if not key in convertible_columns or not conversion_factors[row_idx]:
|
if key not in convertible_columns or not conversion_factors[row_idx-1]:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if convertible_columns.get(key) == 'rate':
|
if convertible_columns.get(key) == 'rate':
|
||||||
new_value = flt(value) * conversion_factors[row_idx]
|
new_value = flt(value) * conversion_factors[row_idx-1]
|
||||||
else:
|
else:
|
||||||
new_value = flt(value) / conversion_factors[row_idx]
|
new_value = flt(value) / conversion_factors[row_idx-1]
|
||||||
|
|
||||||
if not is_dict_obj:
|
if not is_dict_obj:
|
||||||
row.insert(key+1, new_value)
|
row.insert(key+1, new_value)
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-6 text-muted text-right small">
|
<div class="col-xs-6 text-muted text-right small">
|
||||||
{{ frappe.utils.formatdate(doc.transaction_date, 'medium') }}
|
{{ frappe.utils.format_date(doc.transaction_date, 'medium') }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -42,10 +42,10 @@
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-6 text-muted text-right small">
|
<div class="col-6 text-muted text-right small">
|
||||||
{{ frappe.utils.formatdate(doc.transaction_date, 'medium') }}
|
{{ frappe.utils.format_date(doc.transaction_date, 'medium') }}
|
||||||
{% if doc.valid_till %}
|
{% if doc.valid_till %}
|
||||||
<p>
|
<p>
|
||||||
{{ _("Valid Till") }}: {{ frappe.utils.formatdate(doc.valid_till, 'medium') }}
|
{{ _("Valid Till") }}: {{ frappe.utils.format_date(doc.valid_till, 'medium') }}
|
||||||
</p>
|
</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user