new form improvements
diff --git a/erpnext/selling/page/point_of_sale/point_of_sale.js b/erpnext/selling/page/point_of_sale/point_of_sale.js
index dc2b265..06db851 100644
--- a/erpnext/selling/page/point_of_sale/point_of_sale.js
+++ b/erpnext/selling/page/point_of_sale/point_of_sale.js
@@ -93,20 +93,22 @@
});
}
- disable_text_box_and_button() {
- let disabled = this.frm.doc.docstatus == 1 ? true: false;
- let pointer_events = this.frm.doc.docstatus == 1 ? "none":"inherit";
+ toggle_editing(flag) {
+ let disabled;
+ if (flag !== undefined) {
+ disabled = !flag;
+ } else {
+ disabled = this.frm.doc.docstatus == 1 ? true: false;
+ }
+ const pointer_events = disabled ? 'none' : 'inherit';
- $(this.wrapper).find('input, button', 'select').prop("disabled", disabled);
- $(this.wrapper).find(".number-pad-container").toggleClass("hide", disabled);
+ this.wrapper.find('input, button, select').prop("disabled", disabled);
+ this.wrapper.find('.number-pad-container').toggleClass("hide", disabled);
- $(this.wrapper).find('.cart-container').css('pointer-events', pointer_events);
- $(this.wrapper).find('.item-container').css('pointer-events', pointer_events);
+ this.wrapper.find('.cart-container').css('pointer-events', pointer_events);
+ this.wrapper.find('.item-container').css('pointer-events', pointer_events);
this.page.clear_actions();
- if(this.frm.doc.docstatus === 1) {
- this.set_primary_action()
- }
}
make_items() {
@@ -193,38 +195,27 @@
}
submit_sales_invoice() {
- var me = this;
- this.frm.savesubmit();
- // frappe.confirm(__("Permanently Submit {0}?", [this.frm.doc.name]), function() {
-// return frappe.call({
-// method: 'erpnext.selling.page.point_of_sale.point_of_sale.submit_invoice',
-// freeze: true,
-// args: {
-// doc: me.frm.doc
-// }
-// }).then(r => {
-// if(r.message) {
-// me.frm.doc = r.message;
-// me.frm.meta.default_print_format = 'POS Invoice';
-// frappe.show_alert({
-// indicator: 'green',
-// message: __(`Sales invoice ${r.message.name} created succesfully`)
-// });
-//
-// me.frm.msgbox = frappe.msgprint(
-// `<a class="btn btn-primary" onclick="cur_frm.print_preview.printit(true)" style="margin-right: 5px;">
-// ${__('Print')}</a>
-// <a class="btn btn-default new_doc">
-// ${__('New')}</a>`
-// );
-// $(me.frm.msgbox.wrapper).find('.new_doc').click(function() {
-// me.frm.msgbox.hide()
-// me.make_new_invoice()
-// })
-// me.disable_text_box_and_button();
-// }
-// });
-// })
+
+ frappe.confirm(__("Permanently Submit {0}?", [this.frm.doc.name]), () => {
+ frappe.call({
+ method: 'erpnext.selling.page.point_of_sale.point_of_sale.submit_invoice',
+ freeze: true,
+ args: {
+ doc: this.frm.doc
+ }
+ }).then(r => {
+ if(r.message) {
+ this.frm.doc = r.message;
+ frappe.show_alert({
+ indicator: 'green',
+ message: __(`Sales invoice ${r.message.name} created succesfully`)
+ });
+
+ this.toggle_editing();
+ this.set_form_action();
+ }
+ });
+ });
}
bind_events() {
@@ -246,27 +237,42 @@
return frappe.run_serially([
() => this.make_sales_invoice_frm(),
() => {
- this.make_cart();
- this.disable_text_box_and_button();
+ if (this.cart) {
+ this.cart.frm = this.frm;
+ this.cart.reset();
+ } else {
+ this.make_cart();
+ }
+ this.toggle_editing(true);
}
]);
}
make_sales_invoice_frm() {
- this.dt = 'Sales Invoice';
+ const doctype = 'Sales Invoice';
return new Promise(resolve => {
- frappe.model.with_doctype(this.dt, () => {
- const page = $('<div>');
- const frm = new _f.Frm(this.dt, page, false);
- const name = frappe.model.make_new_doc_and_get_name(this.dt, true);
- frm.refresh(name);
- frm.doc.items = [];
- this.doc = frm.doc;
- this.frm = frm;
- this.frm.set_value('is_pos', 1);
+ if (this.frm) {
+ this.frm = get_frm(this.frm);
resolve();
- });
+ } else {
+ frappe.model.with_doctype(doctype, () => {
+ this.frm = get_frm();
+ resolve();
+ });
+ }
});
+
+ function get_frm(_frm) {
+ const page = $('<div>');
+ const frm = _frm || new _f.Frm(doctype, page, false);
+ const name = frappe.model.make_new_doc_and_get_name(doctype, true);
+ frm.refresh(name);
+ frm.doc.items = [];
+ frm.set_value('is_pos', 1);
+ frm.meta.default_print_format = 'POS Invoice';
+
+ return frm;
+ }
}
prepare_menu() {
@@ -291,15 +297,16 @@
});
}
- set_primary_action() {
- var me = this;
- this.page.set_secondary_action(__("Print"), function () {
- me.frm.print_preview.printit(true)
- })
+ set_form_action() {
+ if(this.frm.doc.docstatus !== 1) return;
- this.page.set_primary_action(__("New"), function () {
- me.make_new_invoice()
- })
+ this.page.set_secondary_action(__("Print"), () => {
+ this.frm.print_preview.printit(true);
+ });
+
+ this.page.set_primary_action(__("New"), () => {
+ this.make_new_invoice();
+ });
}
show_taxes_and_totals() {
@@ -307,21 +314,18 @@
let currency = this.frm.doc.currency;
const taxes_wrapper = $(this.wrapper).find('.taxes');
- this.frm.refresh_field('taxes')
- $(this.wrapper).find('.net_total').html(format_currency(this.frm.doc.net_total, this.currency))
- console.log(this.frm.doc.taxes[0].tax_amount)
+ this.frm.refresh_field('taxes');
+ $(this.wrapper).find('.net-total').html(format_currency(this.frm.doc.net_total, this.currency))
$.each(this.frm.doc.taxes, function(index, data) {
- console.log(data.tax_amount)
tax_template += `
<div class="list-item" style="padding-right: 0;">
<div >${data.description}</div>
<div class="text-right bold">${fmt_money(data.tax_amount, currency)}</div>
- </div>`
- })
+ </div>`;
+ });
taxes_wrapper.empty()
- console.log(tax_template)
- taxes_wrapper.html(tax_template)
+ taxes_wrapper.html(tax_template);
}
}
@@ -341,7 +345,6 @@
}
make_dom() {
- $(this.wrapper).find('.pos-cart').empty()
this.wrapper.append(`
<div class="pos-cart">
<div class="customer-field">
@@ -361,14 +364,7 @@
</div>
</div>
<div class="taxes-and-totals">
- <div class="list-item">
- <div class="list-item__content list-item__content--flex-2 text-muted">${__('Net Total')}</div>
- <div class="list-item__content net_total">0.00</div>
- </div>
- <div class="list-item">
- <div class="list-item__content list-item__content--flex-2 text-muted">${__('Taxes')}</div>
- <div class="list-item__content taxes">0.00</div>
- </div>
+ ${this.get_taxes_and_totals()}
</div>
</div>
<div class="number-pad-container">
@@ -376,6 +372,28 @@
</div>
`);
this.$cart_items = this.wrapper.find('.cart-items');
+ this.$empty_state = this.wrapper.find('.cart-items .empty-state');
+ this.$taxes_and_totals = this.wrapper.find('.taxes-and-totals');
+ }
+
+ reset() {
+ this.$cart_items.find('.list-item').remove();
+ this.$empty_state.show();
+ this.$taxes_and_totals.html(this.get_taxes_and_totals());
+ this.numpad && this.numpad.reset_value();
+ this.customer_field.set_value("");
+ }
+
+ get_taxes_and_totals() {
+ return `
+ <div class="list-item">
+ <div class="list-item__content list-item__content--flex-2 text-muted">${__('Net Total')}</div>
+ <div class="list-item__content net-total">0.00</div>
+ </div>
+ <div class="list-item">
+ <div class="list-item__content list-item__content--flex-2 text-muted">${__('Taxes')}</div>
+ <div class="list-item__content taxes">0.00</div>
+ </div>`;
}
make_customer_field() {
@@ -458,7 +476,7 @@
}
add_item(item) {
- this.wrapper.find('.cart-items .empty-state').hide();
+ this.$empty_state.hide();
if (this.exists(item.item_code)) {
// update quantity
@@ -575,7 +593,6 @@
// current item
this.$cart_items.on('click', '.list-item', function() {
- console.log('cart item click');
me.set_selected_item($(this));
});
@@ -872,7 +889,7 @@
me.highlight_button($btn);
}
if (me.reset_btns.includes(btn_value)) {
- me.value = '';
+ me.reset_value();
} else {
if (btn_value === me.del_btn) {
me.value = me.value.substr(0, me.value.length - 1);
@@ -884,6 +901,10 @@
});
}
+ reset_value() {
+ this.value = '';
+ }
+
get_value() {
return flt(this.value);
}
@@ -951,9 +972,9 @@
var me = this;
this.dialog.set_primary_action(__("Submit"), function() {
- me.dialog.hide()
- me.events.submit_form()
- })
+ me.dialog.hide();
+ me.events.submit_form();
+ });
}
get_fields() {