Merge remote-tracking branch 'upstream/version-13-hotfix' into fix-ecommerce-cart-badge

This commit is contained in:
Devin Slauenwhite
2021-12-31 10:41:37 -05:00
2392 changed files with 9989 additions and 8462 deletions

View File

@@ -164,44 +164,32 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({
this.price_list_rate(doc, cdt, cdn);
},
qty: function(doc, cdt, cdn) {
var item = frappe.get_doc(cdt, cdn);
qty(doc, cdt, cdn) {
if ((doc.doctype == "Purchase Receipt") || (doc.doctype == "Purchase Invoice" && (doc.update_stock || doc.is_return))) {
frappe.model.round_floats_in(item, ["qty", "received_qty"]);
if(!doc.is_return && this.validate_negative_quantity(cdt, cdn, item, ["qty", "received_qty"])){ return }
if(!item.rejected_qty && item.qty) {
item.received_qty = item.qty;
}
frappe.model.round_floats_in(item, ["qty", "received_qty"]);
item.rejected_qty = flt(item.received_qty - item.qty, precision("rejected_qty", item));
item.received_stock_qty = flt(item.conversion_factor, precision("conversion_factor", item)) * flt(item.received_qty);
this.calculate_received_qty(doc, cdt, cdn)
}
this._super(doc, cdt, cdn);
},
batch_no: function(doc, cdt, cdn) {
this._super(doc, cdt, cdn);
rejected_qty(doc, cdt, cdn) {
this.calculate_received_qty(doc, cdt, cdn)
},
received_qty: function(doc, cdt, cdn) {
this.calculate_accepted_qty(doc, cdt, cdn)
},
rejected_qty: function(doc, cdt, cdn) {
this.calculate_accepted_qty(doc, cdt, cdn)
},
calculate_accepted_qty: function(doc, cdt, cdn){
calculate_received_qty(doc, cdt, cdn){
var item = frappe.get_doc(cdt, cdn);
frappe.model.round_floats_in(item, ["received_qty", "rejected_qty"]);
frappe.model.round_floats_in(item, ["qty", "rejected_qty"]);
if(!doc.is_return && this.validate_negative_quantity(cdt, cdn, item, ["received_qty", "rejected_qty"])){ return }
if(!doc.is_return && this.validate_negative_quantity(cdt, cdn, item, ["qty", "rejected_qty"])){ return }
item.qty = flt(item.received_qty - item.rejected_qty, precision("qty", item));
this.qty(doc, cdt, cdn);
let received_qty = flt(item.qty + item.rejected_qty, precision("received_qty", item));
let received_stock_qty = flt(item.conversion_factor, precision("conversion_factor", item)) * flt(received_qty);
frappe.model.set_value(cdt, cdn, "received_qty", received_qty);
frappe.model.set_value(cdt, cdn, "received_stock_qty", received_stock_qty);
},
batch_no(doc, cdt, cdn) {
super.batch_no(doc, cdt, cdn);
},
validate_negative_quantity: function(cdt, cdn, item, fieldnames){

View File

@@ -81,6 +81,7 @@ erpnext.taxes_and_totals = erpnext.payments.extend({
this.initialize_taxes();
this.determine_exclusive_rate();
this.calculate_net_total();
this.calculate_shipping_charges();
this.calculate_taxes();
this.manipulate_grand_total_for_inclusive_tax();
this.calculate_totals();
@@ -137,7 +138,9 @@ erpnext.taxes_and_totals = erpnext.payments.extend({
var me = this;
$.each(this.frm.doc["taxes"] || [], function(i, tax) {
tax.item_wise_tax_detail = {};
if (!tax.dont_recompute_tax) {
tax.item_wise_tax_detail = {};
}
var tax_fields = ["total", "tax_amount_after_discount_amount",
"tax_amount_for_current_item", "grand_total_for_current_item",
"tax_fraction_for_current_item", "grand_total_fraction_for_current_item"];
@@ -262,8 +265,13 @@ erpnext.taxes_and_totals = erpnext.payments.extend({
me.frm.doc.net_total += item.net_amount;
me.frm.doc.base_net_total += item.base_net_amount;
});
},
calculate_shipping_charges: function() {
frappe.model.round_floats_in(this.frm.doc, ["total", "base_total", "net_total", "base_net_total"]);
if (frappe.meta.get_docfield(this.frm.doc.doctype, "shipping_rule", this.frm.doc.name)) {
this.shipping_rule();
}
},
add_taxes_from_item_tax_template: function(item_tax_map) {
@@ -419,7 +427,9 @@ erpnext.taxes_and_totals = erpnext.payments.extend({
current_tax_amount = tax_rate * item.qty;
}
this.set_item_wise_tax(item, tax, tax_rate, current_tax_amount);
if (!tax.dont_recompute_tax) {
this.set_item_wise_tax(item, tax, tax_rate, current_tax_amount);
}
return current_tax_amount;
},
@@ -587,7 +597,9 @@ erpnext.taxes_and_totals = erpnext.payments.extend({
delete tax[fieldname];
});
tax.item_wise_tax_detail = JSON.stringify(tax.item_wise_tax_detail);
if (!tax.dont_recompute_tax) {
tax.item_wise_tax_detail = JSON.stringify(tax.item_wise_tax_detail);
}
});
}
},

View File

@@ -680,7 +680,7 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({
var item = frappe.get_doc(cdt, cdn);
frappe.model.round_floats_in(item, ["price_list_rate", "discount_percentage"]);
// check if child doctype is Sales Order Item/Qutation Item and calculate the rate
// check if child doctype is Sales Order Item/Quotation Item and calculate the rate
if (in_list(["Quotation Item", "Sales Order Item", "Delivery Note Item", "Sales Invoice Item", "POS Invoice Item", "Purchase Invoice Item", "Purchase Order Item", "Purchase Receipt Item"]), cdt)
this.apply_pricing_rule_on_item(item);
else
@@ -1065,16 +1065,8 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({
return this.frm.call({
doc: this.frm.doc,
method: "apply_shipping_rule",
callback: function(r) {
if(!r.exc) {
me.calculate_taxes_and_totals();
}
}
}).fail(() => this.frm.set_value('shipping_rule', ''));
}
else {
me.calculate_taxes_and_totals();
}
},
set_margin_amount_based_on_currency: function(exchange_rate) {
@@ -1094,7 +1086,7 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({
$.each(this.frm.doc.taxes || [], function(i, d) {
if(d.charge_type == "Actual") {
frappe.model.set_value(d.doctype, d.name, "tax_amount",
flt(d.tax_amount) / flt(exchange_rate));
flt(d.base_tax_amount) / flt(exchange_rate));
}
});
},
@@ -1570,25 +1562,27 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({
_set_values_for_item_list: function(children) {
var me = this;
var price_list_rate_changed = false;
var items_rule_dict = {};
for(var i=0, l=children.length; i<l; i++) {
var d = children[i];
var d = children[i] ;
let item_row = frappe.get_doc(d.doctype, d.name);
var existing_pricing_rule = frappe.model.get_value(d.doctype, d.name, "pricing_rules");
for(var k in d) {
var v = d[k];
if (["doctype", "name"].indexOf(k)===-1) {
if(k=="price_list_rate") {
if(flt(v) != flt(d.price_list_rate)) price_list_rate_changed = true;
item_row['rate'] = v;
}
if (k !== 'free_item_data') {
frappe.model.set_value(d.doctype, d.name, k, v);
item_row[k] = v;
}
}
}
frappe.model.round_floats_in(item_row, ["price_list_rate", "discount_percentage"]);
// if pricing rule set as blank from an existing value, apply price_list
if(!me.frm.doc.ignore_pricing_rule && existing_pricing_rule && !d.pricing_rules) {
me.apply_price_list(frappe.get_doc(d.doctype, d.name));
@@ -1605,9 +1599,10 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({
}
}
me.frm.refresh_field('items');
me.apply_rule_on_other_items(items_rule_dict);
if(!price_list_rate_changed) me.calculate_taxes_and_totals();
me.calculate_taxes_and_totals();
},
apply_rule_on_other_items: function(args) {

View File

@@ -113,15 +113,15 @@ function get_filters() {
"fieldname":"period_start_date",
"label": __("Start Date"),
"fieldtype": "Date",
"hidden": 1,
"reqd": 1
"reqd": 1,
"depends_on": "eval:doc.filter_based_on == 'Date Range'"
},
{
"fieldname":"period_end_date",
"label": __("End Date"),
"fieldtype": "Date",
"hidden": 1,
"reqd": 1
"reqd": 1,
"depends_on": "eval:doc.filter_based_on == 'Date Range'"
},
{
"fieldname":"from_fiscal_year",
@@ -129,7 +129,8 @@ function get_filters() {
"fieldtype": "Link",
"options": "Fiscal Year",
"default": frappe.defaults.get_user_default("fiscal_year"),
"reqd": 1
"reqd": 1,
"depends_on": "eval:doc.filter_based_on == 'Fiscal Year'"
},
{
"fieldname":"to_fiscal_year",
@@ -137,7 +138,8 @@ function get_filters() {
"fieldtype": "Link",
"options": "Fiscal Year",
"default": frappe.defaults.get_user_default("fiscal_year"),
"reqd": 1
"reqd": 1,
"depends_on": "eval:doc.filter_based_on == 'Fiscal Year'"
},
{
"fieldname": "periodicity",

View File

@@ -83,6 +83,13 @@ $.extend(erpnext.queries, {
};
},
dispatch_address_query: function(doc) {
return {
query: 'frappe.contacts.doctype.address.address.address_query',
filters: { link_doctype: 'Company', link_name: doc.company || '' }
};
},
supplier_filter: function(doc) {
if(!doc.supplier) {
frappe.throw(__("Please set {0}", [__(frappe.meta.get_label(doc.doctype, "supplier", doc.name))]));

View File

@@ -84,6 +84,10 @@ $.extend(erpnext, {
});
},
route_to_pending_reposts: (args) => {
frappe.set_route('List', 'Repost Item Valuation', args);
},
proceed_save_with_reminders_frequency_change: () => {
frappe.ui.hide_open_dialog();
@@ -426,12 +430,9 @@ erpnext.utils.select_alternate_items = function(opts) {
qty = row.qty;
}
row[item_field] = d.alternate_item;
frm.script_manager.trigger(item_field, row.doctype, row.name)
.then(() => {
frappe.model.set_value(row.doctype, row.name, 'qty', qty);
frappe.model.set_value(row.doctype, row.name,
opts.original_item_field, d.item_code);
});
frappe.model.set_value(row.doctype, row.name, 'qty', qty);
frappe.model.set_value(row.doctype, row.name, opts.original_item_field, d.item_code);
frm.trigger(item_field, row.doctype, row.name);
});
refresh_field(opts.child_docname);
@@ -751,9 +752,13 @@ frappe.form.link_formatters['Item'] = function(value, doc) {
}
frappe.form.link_formatters['Employee'] = function(value, doc) {
if(doc && doc.employee_name && doc.employee_name !== value) {
return value? value + ': ' + doc.employee_name: doc.employee_name;
if (doc && value && doc.employee_name && doc.employee_name !== value && doc.employee === value) {
return value + ': ' + doc.employee_name;
} else if (!value && doc.doctype && doc.employee_name) {
// format blank value in child table
return doc.employee;
} else {
// if value is blank in report view or project name and name are the same, return as is
return value;
}
}

View File

@@ -495,6 +495,11 @@
font-size: var(--text-md);
}
> .item-qty-total-container {
@extend .net-total-container;
padding: 5px 0px 0px 0px;
}
> .taxes-container {
display: none;
flex-direction: column;

View File

@@ -459,6 +459,7 @@ body.product-page {
min-height: 0px;
.r-item-image {
min-height: 100px;
width: 40%;
.r-product-image {
@@ -480,6 +481,7 @@ body.product-page {
.r-item-info {
font-size: 14px;
padding-right: 0;
padding-left: 10px;
width: 60%;
a {
@@ -671,18 +673,6 @@ body.product-page {
img {
max-height: 112px;
}
.no-image-cart-item {
max-height: 112px;
display: flex; justify-content: center;
background-color: var(--gray-200);
align-items: center;
color: var(--gray-400);
margin-top: .15rem;
border-radius: 6px;
height: 100%;
font-size: 24px;
}
}
.cart-items {
@@ -861,6 +851,18 @@ body.product-page {
}
}
.no-image-cart-item {
max-height: 112px;
display: flex; justify-content: center;
background-color: var(--gray-200);
align-items: center;
color: var(--gray-400);
margin-top: .15rem;
border-radius: 6px;
height: 100%;
font-size: 24px;
}
.cart-empty.frappe-card {
min-height: 76vh;
@include flex(flex, center, center, column);