diff --git a/addons/point_of_sale/models/pos_order.py b/addons/point_of_sale/models/pos_order.py index 3a875ccac35..04dc6abfbc7 100644 --- a/addons/point_of_sale/models/pos_order.py +++ b/addons/point_of_sale/models/pos_order.py @@ -328,7 +328,19 @@ class PosOrder(models.Model): has_refundable_lines = fields.Boolean('Has Refundable Lines', compute='_compute_has_refundable_lines') refunded_orders_count = fields.Integer(compute='_compute_refund_related_fields') ticket_code = fields.Char(help='5 digits alphanumeric code to be used by portal user to request an invoice') - tracking_number = fields.Char(string="Short order number", compute='_compute_tracking_number') + tracking_number = fields.Char(string="Order Number", compute='_compute_tracking_number', search='_search_tracking_number') + + def _search_tracking_number(self, operator, value): + #search is made over the pos_reference field + #The pos_reference field is like 'Order 00001-001-0001' + if operator in ['ilike', '='] and isinstance(value, str): + if value[0] == '%' and value[-1] == '%': + value = value[1:-1] + value = value.zfill(3) + search = '% ____' + value[0] + '-___-__' + value[1:] + return [('pos_reference', operator, search or '')] + else: + raise NotImplementedError(_("Unsupported search operation")) @api.depends('lines.refund_orderline_ids', 'lines.refunded_orderline_id') def _compute_refund_related_fields(self): diff --git a/addons/point_of_sale/static/src/app/screens/ticket_screen/ticket_screen.js b/addons/point_of_sale/static/src/app/screens/ticket_screen/ticket_screen.js index 5bfc951ee9b..39dea94a85d 100644 --- a/addons/point_of_sale/static/src/app/screens/ticket_screen/ticket_screen.js +++ b/addons/point_of_sale/static/src/app/screens/ticket_screen/ticket_screen.js @@ -560,9 +560,11 @@ export class TicketScreen extends Component { orderPartnerId, tax_ids: orderline.get_taxes().map((tax) => tax.id), discount: orderline.discount, - pack_lot_lines: orderline.pack_lot_lines ? orderline.pack_lot_lines.map(lot => { - return { lot_name: lot.lot_name }; - }) : false, + pack_lot_lines: orderline.pack_lot_lines + ? orderline.pack_lot_lines.map((lot) => { + return { lot_name: lot.lot_name }; + }) + : false, }, destinationOrderUid: false, }; @@ -595,7 +597,9 @@ export class TicketScreen extends Component { */ _prepareRefundOrderlineOptions(toRefundDetail) { const { qty, orderline } = toRefundDetail; - const draftPackLotLines = orderline.pack_lot_lines ? { modifiedPackLotLines: [], newPackLotLines: orderline.pack_lot_lines} : false; + const draftPackLotLines = orderline.pack_lot_lines + ? { modifiedPackLotLines: [], newPackLotLines: orderline.pack_lot_lines } + : false; return { quantity: -qty, price: orderline.price, @@ -604,7 +608,7 @@ export class TicketScreen extends Component { refunded_orderline_id: orderline.id, tax_ids: orderline.tax_ids, discount: orderline.discount, - draftPackLotLines: draftPackLotLines + draftPackLotLines: draftPackLotLines, }; } _setOrder(order) { @@ -627,6 +631,11 @@ export class TicketScreen extends Component { */ _getSearchFields() { const fields = { + TRACKING_NUMBER: { + repr: (order) => order.trackingNumber, + displayName: _t("Order Number"), + modelField: "tracking_number", + }, RECEIPT_NUMBER: { repr: (order) => order.name, displayName: _t("Receipt Number"), diff --git a/addons/point_of_sale/static/src/app/screens/ticket_screen/ticket_screen.xml b/addons/point_of_sale/static/src/app/screens/ticket_screen/ticket_screen.xml index 20fbaf83ddb..3d82d4409b3 100644 --- a/addons/point_of_sale/static/src/app/screens/ticket_screen/ticket_screen.xml +++ b/addons/point_of_sale/static/src/app/screens/ticket_screen/ticket_screen.xml @@ -51,6 +51,7 @@