126 lines
3.5 KiB
JavaScript
126 lines
3.5 KiB
JavaScript
/** @odoo-module **/
|
|
|
|
import { bus } from 'web.core';
|
|
const { Component } = owl;
|
|
|
|
export default class LineComponent extends Component {
|
|
get destinationLocationPath () {
|
|
return this._getLocationPath(this.env.model._defaultDestLocation(), this.line.location_dest_id);
|
|
}
|
|
|
|
get displayDestinationLocation() {
|
|
return !this.props.subline && this.env.model.displayDestinationLocation;
|
|
}
|
|
|
|
get displayResultPackage() {
|
|
return this.env.model.displayResultPackage;
|
|
}
|
|
|
|
get displaySourceLocation() {
|
|
return !this.props.subline && this.env.model.displaySourceLocation;
|
|
}
|
|
|
|
get highlightLocation() {
|
|
return this.env.model.lastScanned.sourceLocation &&
|
|
this.env.model.lastScanned.sourceLocation.id == this.line.location_id.id;
|
|
}
|
|
|
|
get isComplete() {
|
|
if (!this.qtyDemand || this.qtyDemand != this.qtyDone) {
|
|
return false;
|
|
} else if (this.isTracked && !this.lotName) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
get isSelected() {
|
|
return this.line.virtual_id === this.env.model.selectedLineVirtualId ||
|
|
(this.line.package_id && this.line.package_id.id === this.env.model.lastScanned.packageId);
|
|
}
|
|
|
|
get isTracked() {
|
|
return this.line.product_id.tracking !== 'none';
|
|
}
|
|
|
|
get lotName() {
|
|
return (this.line.lot_id && this.line.lot_id.name) || this.line.lot_name || '';
|
|
}
|
|
|
|
get nextExpected() {
|
|
if (!this.isSelected) {
|
|
return false;
|
|
} else if (this.isTracked && !this.lotName) {
|
|
return 'lot';
|
|
} else if (this.qtyDemand && this.qtyDone < this.qtyDemand) {
|
|
return 'quantity';
|
|
}
|
|
}
|
|
|
|
get qtyDemand() {
|
|
return this.env.model.getQtyDemand(this.line);
|
|
}
|
|
|
|
get qtyDone() {
|
|
return this.env.model.getQtyDone(this.line);
|
|
}
|
|
|
|
get quantityIsSet() {
|
|
return this.line.inventory_quantity_set;
|
|
}
|
|
|
|
get incrementQty() {
|
|
return this.env.model.getIncrementQuantity(this.line);
|
|
}
|
|
|
|
get line() {
|
|
return this.props.line;
|
|
}
|
|
|
|
get requireLotNumber() {
|
|
return true;
|
|
}
|
|
|
|
get sourceLocationPath() {
|
|
return this._getLocationPath(this.env.model._defaultLocation(), this.line.location_id);
|
|
}
|
|
|
|
get componentClasses() {
|
|
return [
|
|
this.isComplete ? 'o_line_completed' : 'o_line_not_completed',
|
|
this.env.model.lineIsFaulty(this) ? 'o_faulty' : '',
|
|
this.isSelected ? 'o_selected o_highlight' : ''
|
|
].join(' ');
|
|
}
|
|
|
|
_getLocationPath(rootLocation, currentLocation) {
|
|
let locationName = currentLocation.display_name;
|
|
if (this.env.model.shouldShortenLocationName) {
|
|
if (rootLocation && rootLocation.id != currentLocation.id) {
|
|
const name = rootLocation.display_name;
|
|
locationName = locationName.replace(name, '...');
|
|
}
|
|
}
|
|
return locationName.replace(new RegExp(currentLocation.name + '$'), '');
|
|
}
|
|
|
|
edit() {
|
|
bus.trigger('edit-line', { line: this.line });
|
|
}
|
|
|
|
addQuantity(quantity, ev) {
|
|
this.env.model.updateLineQty(this.line.virtual_id, quantity);
|
|
}
|
|
|
|
select(ev) {
|
|
ev.stopPropagation();
|
|
this.env.model.selectLine(this.line);
|
|
this.env.model.trigger('update');
|
|
}
|
|
|
|
setOnHandQuantity(ev) {
|
|
this.env.model.setOnHandQuantity(this.line);
|
|
}
|
|
}
|
|
LineComponent.template = 'stock_barcode.LineComponent';
|