Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[IMP] sale_input_barcode: scan directly on sale.order #611

Open
wants to merge 1 commit into
base: 14.0
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 @@
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 @@
_("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 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
Loading