Skip to content

Commit

Permalink
[IMP] sale_input_barcode: scan directly on sale.order
Browse files Browse the repository at this point in the history
  • Loading branch information
renda-dev committed May 10, 2024
1 parent fe5c849 commit 71ac748
Show file tree
Hide file tree
Showing 7 changed files with 64 additions and 8 deletions.
8 changes: 8 additions & 0 deletions sale_input_barcode/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,17 @@ Usage
#. Press the button in the header with the QR Code icon
#. Use a barcode scanner to scan a barcode.

Alternatively,
#. Navigate to a Sales Order.
#. Activate "Edit Mode"
#. Use a barcode scanner to scan a barcode.

If a product is found using the barcode,
a new line with that product will be added to the Sales Order.

If a product is already inside the sale order lines,
the quantity will be updated.

Bug Tracker
===========

Expand Down
14 changes: 10 additions & 4 deletions sale_input_barcode/models/product_barcode_line_mixin.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,16 @@ def _populate_vals(self, product, barcode_dict):
Builds a dictionary to use in the `create` function
Hook for customizations
"""
vals = {"product_id": product.id}
vals = {
"product_id": product.id,
"product_uom_qty": 1,
}
if "order_id" in self._fields:
vals["order_id"] = self.env.context.get("order_id")
order_id = self.env.context.get("order_id")
if isinstance(order_id, models.NewId):
vals["order_id"] = order_id.origin

Check warning on line 36 in sale_input_barcode/models/product_barcode_line_mixin.py

View check run for this annotation

Codecov / codecov/patch

sale_input_barcode/models/product_barcode_line_mixin.py#L36

Added line #L36 was not covered by tests
else:
vals["order_id"] = order_id
return vals

def _process_barcode_on_product_line(self, raw_barcode):
Expand All @@ -48,5 +55,4 @@ def _process_barcode_on_product_line(self, raw_barcode):
_("No product found matching this barcode %s" % barcode_str)
)

vals = self._populate_vals(product, barcode_dict)
self.create(vals)
return self._populate_vals(product, barcode_dict)
31 changes: 27 additions & 4 deletions sale_input_barcode/models/sale_order.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,34 @@ class SaleOrderLine(models.Model):


class SaleOrder(models.Model):
_inherit = "sale.order"
_name = "sale.order"
_inherit = ["sale.order", "barcodes.barcode_events_mixin"]

def on_barcode_scanned(self, barcode):
self.process_barcode(barcode)

Check warning on line 16 in sale_input_barcode/models/sale_order.py

View check run for this annotation

Codecov / codecov/patch

sale_input_barcode/models/sale_order.py#L16

Added line #L16 was not covered by tests

def action_sale_line_barcode(self, barcode):
"""Create a sale line according barcode information"""
self.ensure_one()
self.env["sale.order.line"].with_context(
order_id=self.id, company_id=self.company_id.id
)._process_barcode_on_product_line(barcode)
self.process_barcode(barcode)

def process_barcode(self, barcode):
barcode = barcode.rstrip()
line_vals = (
self.env["sale.order.line"]
.with_context(order_id=self.id, company_id=self.company_id.id)
._process_barcode_on_product_line(barcode)
)

product_order_line = self.order_line.filtered(
lambda x: x.product_id.id == line_vals.get("product_id")
)[:1]
if product_order_line:
product_order_line.product_uom_qty += 1

Check warning on line 35 in sale_input_barcode/models/sale_order.py

View check run for this annotation

Codecov / codecov/patch

sale_input_barcode/models/sale_order.py#L35

Added line #L35 was not covered by tests
else:
product_order_line = self.env["sale.order.line"].new(line_vals)
product_order_line.product_id_change()
sale_line_vals = product_order_line._convert_to_write(
product_order_line._cache
)
self.write({"order_line": [(0, 0, sale_line_vals)]})
2 changes: 2 additions & 0 deletions sale_input_barcode/readme/CONTIBUTORS.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
* PyTech SRL <[email protected]>:

- Alessandro Uffreduzzi <[email protected]>
- Alessio Renda


* Ooops404 <[email protected]>:

Expand Down
8 changes: 8 additions & 0 deletions sale_input_barcode/readme/USAGE.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,13 @@
#. Press the button in the header with the QR Code icon
#. Use a barcode scanner to scan a barcode.

Alternatively,
#. Navigate to a Sales Order.
#. Activate "Edit Mode"
#. Use a barcode scanner to scan a barcode.

If a product is found using the barcode,
a new line with that product will be added to the Sales Order.

If a product is already inside the sale order lines,
the quantity will be updated.
6 changes: 6 additions & 0 deletions sale_input_barcode/static/description/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -394,8 +394,14 @@ <h1><a class="toc-backref" href="#toc-entry-2">Usage</a></h1>
<li>Press the button in the header with the QR Code icon</li>
<li>Use a barcode scanner to scan a barcode.</li>
</ol>
<p>Alternatively,
#. Navigate to a Sales Order.
#. Activate “Edit Mode”
#. Use a barcode scanner to scan a barcode.</p>
<p>If a product is found using the barcode,
a new line with that product will be added to the Sales Order.</p>
<p>If a product is already inside the sale order lines,
the quantity will be updated.</p>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-3">Bug Tracker</a></h1>
Expand Down
3 changes: 3 additions & 0 deletions sale_input_barcode/views/sale.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@
context="{'default_model': 'sale.order', 'default_method': 'action_sale_line_barcode', 'default_res_id': active_id}"
/>
</xpath>
<field name="name" position="after">
<field name="_barcode_scanned" widget="barcode_handler" />
</field>
</field>
</record>

Expand Down

0 comments on commit 71ac748

Please sign in to comment.