odoo-addon-shopfloor-mobile 16.0.1.4.0__py3-none-any.whl → 18.0.1.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- odoo/addons/shopfloor_mobile/README.rst +109 -92
- odoo/addons/shopfloor_mobile/__manifest__.py +2 -2
- odoo/addons/shopfloor_mobile/i18n/shopfloor_mobile.pot +1 -1
- odoo/addons/shopfloor_mobile/readme/CONTRIBUTORS.md +11 -0
- odoo/addons/shopfloor_mobile/readme/CREDITS.md +5 -0
- odoo/addons/shopfloor_mobile/readme/DESCRIPTION.md +30 -0
- odoo/addons/shopfloor_mobile/readme/{HISTORY.rst → HISTORY.md} +1 -2
- odoo/addons/shopfloor_mobile/readme/ROADMAP.md +43 -0
- odoo/addons/shopfloor_mobile/readme/USAGE.md +29 -0
- odoo/addons/shopfloor_mobile/static/description/index.html +73 -61
- odoo/addons/shopfloor_mobile/static/wms/src/components/{batch_picking_detail.js → batch_picking_detail.esm.js} +0 -1
- odoo/addons/shopfloor_mobile/static/wms/src/components/detail/{detail_location.js → detail_location.esm.js} +1 -1
- odoo/addons/shopfloor_mobile/static/wms/src/components/detail/{detail_lot.js → detail_lot.esm.js} +2 -1
- odoo/addons/shopfloor_mobile/static/wms/src/components/detail/{detail_operation.js → detail_operation.esm.js} +1 -1
- odoo/addons/shopfloor_mobile/static/wms/src/components/detail/{detail_package.js → detail_package.esm.js} +1 -1
- odoo/addons/shopfloor_mobile/static/wms/src/components/detail/{detail_product.js → detail_product.esm.js} +2 -1
- odoo/addons/shopfloor_mobile/static/wms/src/components/detail/{detail_transfer.js → detail_transfer.esm.js} +1 -1
- odoo/addons/shopfloor_mobile/static/wms/src/components/forms/{form_edit_stock_picking.js → form_edit_stock_picking.esm.js} +0 -1
- odoo/addons/shopfloor_mobile/static/wms/src/components/{manual_select_color.js → manual_select_color.esm.js} +1 -1
- odoo/addons/shopfloor_mobile/static/wms/src/components/{misc.js → misc.esm.js} +1 -3
- odoo/addons/shopfloor_mobile/static/wms/src/components/{packaging-qty-picker.js → packaging-qty-picker.esm.js} +20 -18
- odoo/addons/shopfloor_mobile/static/wms/src/components/scenario_picking_detail/{mixins.js → mixins.esm.js} +2 -3
- odoo/addons/shopfloor_mobile/static/wms/src/components/scenario_picking_detail/{picking_select.js → picking_select.esm.js} +8 -5
- odoo/addons/shopfloor_mobile/static/wms/src/components/scenario_picking_detail/{picking_summary.js → picking_summary.esm.js} +11 -5
- odoo/addons/shopfloor_mobile/static/wms/src/demo/{demo.checkout.js → demo.checkout.esm.js} +4 -4
- odoo/addons/shopfloor_mobile/static/wms/src/demo/{demo.cluster_picking.js → demo.cluster_picking.esm.js} +1 -1
- odoo/addons/shopfloor_mobile/static/wms/src/demo/{demo.delivery.js → demo.delivery.esm.js} +3 -3
- odoo/addons/shopfloor_mobile/static/wms/src/demo/{demo.location_content_transfer.js → demo.location_content_transfer.esm.js} +1 -1
- odoo/addons/shopfloor_mobile/static/wms/src/demo/{demo.scan_anything.js → demo.scan_anything.esm.js} +1 -1
- odoo/addons/shopfloor_mobile/static/wms/src/demo/{demo.single_pack_transfer.js → demo.single_pack_transfer.esm.js} +1 -1
- odoo/addons/shopfloor_mobile/static/wms/src/demo/{demo.zone_picking.js → demo.zone_picking.esm.js} +3 -3
- odoo/addons/shopfloor_mobile/static/wms/src/i18n/{add_translations_to_registry.js → add_translations_to_registry.esm.js} +1 -1
- odoo/addons/shopfloor_mobile/static/wms/src/scenario/{checkout.js → checkout.esm.js} +7 -6
- odoo/addons/shopfloor_mobile/static/wms/src/scenario/{checkout_states.js → checkout_states.esm.js} +3 -1
- odoo/addons/shopfloor_mobile/static/wms/src/scenario/{cluster_picking.js → cluster_picking.esm.js} +8 -7
- odoo/addons/shopfloor_mobile/static/wms/src/scenario/{delivery.js → delivery.esm.js} +10 -6
- odoo/addons/shopfloor_mobile/static/wms/src/scenario/{location_content_transfer.js → location_content_transfer.esm.js} +13 -7
- odoo/addons/shopfloor_mobile/static/wms/src/scenario/{single_pack_transfer.js → single_pack_transfer.esm.js} +2 -2
- odoo/addons/shopfloor_mobile/static/wms/src/scenario/{zone_picking.js → zone_picking.esm.js} +21 -24
- odoo/addons/shopfloor_mobile/static/wms/src/{wms_utils.js → wms_utils.esm.js} +29 -26
- odoo/addons/shopfloor_mobile/templates/assets.xml +30 -30
- odoo_addon_shopfloor_mobile-18.0.1.0.1.dist-info/METADATA +250 -0
- odoo_addon_shopfloor_mobile-18.0.1.0.1.dist-info/RECORD +59 -0
- {odoo_addon_shopfloor_mobile-16.0.1.4.0.dist-info → odoo_addon_shopfloor_mobile-18.0.1.0.1.dist-info}/WHEEL +1 -1
- odoo_addon_shopfloor_mobile-18.0.1.0.1.dist-info/top_level.txt +1 -0
- odoo/addons/shopfloor_mobile/readme/CONTRIBUTORS.rst +0 -12
- odoo/addons/shopfloor_mobile/readme/CREDITS.rst +0 -5
- odoo/addons/shopfloor_mobile/readme/DESCRIPTION.rst +0 -31
- odoo/addons/shopfloor_mobile/readme/ROADMAP.rst +0 -29
- odoo/addons/shopfloor_mobile/readme/USAGE.rst +0 -34
- odoo_addon_shopfloor_mobile-16.0.1.4.0.dist-info/METADATA +0 -232
- odoo_addon_shopfloor_mobile-16.0.1.4.0.dist-info/RECORD +0 -59
- odoo_addon_shopfloor_mobile-16.0.1.4.0.dist-info/top_level.txt +0 -1
- /odoo/addons/shopfloor_mobile/static/wms/src/components/{batch_picking_line_detail.js → batch_picking_line_detail.esm.js} +0 -0
- /odoo/addons/shopfloor_mobile/static/wms/src/components/detail/{detail_picking.js → detail_picking.esm.js} +0 -0
- /odoo/addons/shopfloor_mobile/static/wms/src/{screen.js → screen.esm.js} +0 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
5
5
|
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
|
|
6
|
-
<title>
|
|
6
|
+
<title>README.rst</title>
|
|
7
7
|
<style type="text/css">
|
|
8
8
|
|
|
9
9
|
/*
|
|
@@ -360,41 +360,47 @@ ul.auto-toc {
|
|
|
360
360
|
</style>
|
|
361
361
|
</head>
|
|
362
362
|
<body>
|
|
363
|
-
<div class="document"
|
|
364
|
-
<h1 class="title">Shopfloor mobile</h1>
|
|
363
|
+
<div class="document">
|
|
365
364
|
|
|
365
|
+
|
|
366
|
+
<a class="reference external image-reference" href="https://odoo-community.org/get-involved?utm_source=readme">
|
|
367
|
+
<img alt="Odoo Community Association" src="https://odoo-community.org/readme-banner-image" />
|
|
368
|
+
</a>
|
|
369
|
+
<div class="section" id="shopfloor-mobile">
|
|
370
|
+
<h1>Shopfloor mobile</h1>
|
|
366
371
|
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
367
372
|
!! This file is generated by oca-gen-addon-readme !!
|
|
368
373
|
!! changes will be overwritten. !!
|
|
369
374
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
370
|
-
!! source digest: sha256:
|
|
375
|
+
!! source digest: sha256:5343b7be8eb4f58f7548ae53194c5554d3a7d9ac639fb64e27cae31cf8cd2766
|
|
371
376
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
|
372
|
-
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/
|
|
377
|
+
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/license-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/stock-logistics-shopfloor/tree/18.0/shopfloor_mobile"><img alt="OCA/stock-logistics-shopfloor" src="https://img.shields.io/badge/github-OCA%2Fstock--logistics--shopfloor-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/stock-logistics-shopfloor-18-0/stock-logistics-shopfloor-18-0-shopfloor_mobile"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/stock-logistics-shopfloor&target_branch=18.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
|
|
373
378
|
<p>Frontend for Shopfloor app.</p>
|
|
374
|
-
<p>The work is organized in scenario.
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
<p>Each scenario is linked to a specific menu item which can be configured
|
|
378
|
-
Each scenario drives you through the work to do.</p>
|
|
379
|
+
<p>The work is organized in scenario. A scenario represents a process in
|
|
380
|
+
the warehouse (eg: receive, deliver). The app allows to start each
|
|
381
|
+
process through the main menu.</p>
|
|
382
|
+
<p>Each scenario is linked to a specific menu item which can be configured
|
|
383
|
+
in the backend. Each scenario drives you through the work to do.</p>
|
|
379
384
|
<div class="section" id="tech-details">
|
|
380
|
-
<
|
|
385
|
+
<h2>Tech details</h2>
|
|
381
386
|
<ul>
|
|
382
|
-
<li><p class="first">This frontend is built on top of <a class="reference external" href="vuejs.org">VueJS</a>
|
|
383
|
-
|
|
384
|
-
(based in turn on
|
|
387
|
+
<li><p class="first">This frontend is built on top of <a class="reference external" href="vuejs.org">VueJS</a> and
|
|
388
|
+
<a class="reference external" href="vuetifyjs.com/">VuetifyJS</a> and relies on shopfloor module that
|
|
389
|
+
exposes REST API in Odoo (based in turn on
|
|
390
|
+
<a class="reference external" href="https://github.com/OCA/rest-framework/tree/13.0/base_rest">base_rest</a>).</p>
|
|
385
391
|
</li>
|
|
386
|
-
<li><p class="first">The whole business logic comes from
|
|
387
|
-
|
|
392
|
+
<li><p class="first">The whole business logic comes from shopfloor module, this module
|
|
393
|
+
takes care of providing a nice and reactive UI to work with.</p>
|
|
388
394
|
</li>
|
|
389
395
|
<li><p class="first">No Odoo JS is used, no assets machinery used.</p>
|
|
390
396
|
<p>Static assets are loaded straight, served by a specific controller.
|
|
391
397
|
This app is a Single Page App, hence resources are loaded only once.</p>
|
|
392
|
-
<p>The version of the module appended to the URL of each resources
|
|
393
|
-
|
|
398
|
+
<p>The version of the module appended to the URL of each resources makes
|
|
399
|
+
sure it’s not cached when the version changes.</p>
|
|
394
400
|
</li>
|
|
395
|
-
<li><p class="first">When developing you can use a demo mode which allows to define
|
|
396
|
-
with pure JS demo data, without interacting with
|
|
397
|
-
Nothing to deal with Odoo demo data.</p>
|
|
401
|
+
<li><p class="first">When developing you can use a demo mode which allows to define
|
|
402
|
+
interactive scenario with pure JS demo data, without interacting with
|
|
403
|
+
Odoo. Nothing to deal with Odoo demo data.</p>
|
|
398
404
|
</li>
|
|
399
405
|
</ul>
|
|
400
406
|
<p><strong>Table of contents</strong></p>
|
|
@@ -404,18 +410,18 @@ Nothing to deal with Odoo demo data.</p>
|
|
|
404
410
|
</ul>
|
|
405
411
|
</div>
|
|
406
412
|
<div class="section" id="usage">
|
|
407
|
-
<
|
|
413
|
+
<h3><a class="toc-backref" href="#toc-entry-1">Usage</a></h3>
|
|
408
414
|
</div>
|
|
409
415
|
</div>
|
|
410
416
|
<div class="section" id="pre-requisites">
|
|
411
|
-
<
|
|
417
|
+
<h2>Pre-requisites</h2>
|
|
412
418
|
<ul class="simple">
|
|
413
419
|
<li>Your Odoo instance is accessible via mobile device</li>
|
|
414
420
|
<li>You have an API Key configured</li>
|
|
415
421
|
</ul>
|
|
416
422
|
</div>
|
|
417
423
|
<div class="section" id="start-the-app">
|
|
418
|
-
<
|
|
424
|
+
<h2>Start the app</h2>
|
|
419
425
|
<ul class="simple">
|
|
420
426
|
<li>Go to “Inventory -> Configuration -> Shopfloor -> Shopfloor App”</li>
|
|
421
427
|
<li>In the login screen fill in your API key</li>
|
|
@@ -423,9 +429,9 @@ Nothing to deal with Odoo demo data.</p>
|
|
|
423
429
|
</ul>
|
|
424
430
|
</div>
|
|
425
431
|
<div class="section" id="select-a-profile">
|
|
426
|
-
<
|
|
427
|
-
<p>Several profiles can be configured in the backend,
|
|
428
|
-
|
|
432
|
+
<h2>Select a profile</h2>
|
|
433
|
+
<p>Several profiles can be configured in the backend, you must choose one
|
|
434
|
+
before starting.</p>
|
|
429
435
|
<ul class="simple">
|
|
430
436
|
<li>Tap on “Configure profile”</li>
|
|
431
437
|
<li>Select a profile</li>
|
|
@@ -433,17 +439,17 @@ you must choose one before starting.</p>
|
|
|
433
439
|
<p>This will load all available menu items for the selected profile.</p>
|
|
434
440
|
</div>
|
|
435
441
|
<div class="section" id="change-language">
|
|
436
|
-
<
|
|
442
|
+
<h2>Change language</h2>
|
|
437
443
|
<ul class="simple">
|
|
438
444
|
<li>Go to “Settings -> Language”</li>
|
|
439
445
|
<li>Select a language</li>
|
|
440
446
|
</ul>
|
|
441
447
|
</div>
|
|
442
448
|
<div class="section" id="customization">
|
|
443
|
-
<
|
|
444
|
-
<p>Please refer to
|
|
449
|
+
<h2>Customization</h2>
|
|
450
|
+
<p>Please refer to shopfloor_mobile_custom_example.</p>
|
|
445
451
|
<div class="section" id="known-issues-roadmap">
|
|
446
|
-
<
|
|
452
|
+
<h3>Known issues / Roadmap</h3>
|
|
447
453
|
<ul>
|
|
448
454
|
<li><p class="first">Split module by scenario</p>
|
|
449
455
|
</li>
|
|
@@ -460,49 +466,56 @@ you must choose one before starting.</p>
|
|
|
460
466
|
<li><p class="first">Use SCSS</p>
|
|
461
467
|
</li>
|
|
462
468
|
<li><p class="first">Refactor states definition</p>
|
|
463
|
-
<p>States are now part of the scenario data. They should be specific
|
|
464
|
-
They should also provide all the actions
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
469
|
+
<p>States are now part of the scenario data. They should be specific
|
|
470
|
+
objects with their own class. They should also provide all the actions
|
|
471
|
+
that should be displayed w/ their handlers when needed. Actions can be
|
|
472
|
+
popup actions or buttons at the bottom of the screen. The tricky part
|
|
473
|
+
here could be how to register this states for the given component.
|
|
474
|
+
Today states have access to the full object of the scenario component
|
|
475
|
+
as they are part of it. _get_state_spec could probably lookup for
|
|
476
|
+
registered states (eg: when you register a component in the registry
|
|
477
|
+
you should provide states as well). When we’ll have states in this
|
|
478
|
+
fashion we should also consider if they should provide their own
|
|
479
|
+
template. This way the component template will hold only the generic
|
|
480
|
+
bits of the scenario.</p>
|
|
472
481
|
</li>
|
|
473
482
|
<li><p class="first">Back buttons should be smarter</p>
|
|
474
|
-
<p>In some cases getting back using history is fine but very often this
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
For
|
|
478
|
-
|
|
479
|
-
|
|
483
|
+
<p>In some cases getting back using history is fine but very often this
|
|
484
|
+
could lead to outdated data display. To mitigate this in particular
|
|
485
|
+
scenario’s steps, custom handlers for the back action have been
|
|
486
|
+
implemented. For instance, in cluster_picking when you hit back on
|
|
487
|
+
manual selection it forces the state to go to start and reload. For
|
|
488
|
+
starting we should provide on_back property to all states where we
|
|
489
|
+
want to display it (no more specific check on the state to display
|
|
490
|
+
this button). This part is also related to “Refactor states
|
|
491
|
+
definition”.</p>
|
|
480
492
|
</li>
|
|
481
|
-
<li><p class="first">Go through
|
|
493
|
+
<li><p class="first">Go through _.forEach and similar calls to replace them w/ vanilla JS
|
|
494
|
+
(eg: .map())</p>
|
|
482
495
|
</li>
|
|
483
496
|
</ul>
|
|
484
497
|
</div>
|
|
485
498
|
<div class="section" id="changelog">
|
|
486
|
-
<
|
|
499
|
+
<h3>Changelog</h3>
|
|
487
500
|
</div>
|
|
488
501
|
</div>
|
|
489
502
|
<div class="section" id="section-1">
|
|
490
|
-
<
|
|
503
|
+
<h2>13.0.1.0.0</h2>
|
|
491
504
|
<p>First official version.</p>
|
|
492
505
|
<div class="section" id="bug-tracker">
|
|
493
|
-
<
|
|
494
|
-
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/
|
|
506
|
+
<h3>Bug Tracker</h3>
|
|
507
|
+
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/stock-logistics-shopfloor/issues">GitHub Issues</a>.
|
|
495
508
|
In case of trouble, please check there if your issue has already been reported.
|
|
496
509
|
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
|
497
|
-
<a class="reference external" href="https://github.com/OCA/
|
|
510
|
+
<a class="reference external" href="https://github.com/OCA/stock-logistics-shopfloor/issues/new?body=module:%20shopfloor_mobile%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
|
|
498
511
|
<p>Do not contact contributors directly about support or help with technical issues.</p>
|
|
499
512
|
</div>
|
|
500
513
|
<div class="section" id="credits">
|
|
501
|
-
<
|
|
514
|
+
<h3>Credits</h3>
|
|
502
515
|
</div>
|
|
503
516
|
</div>
|
|
504
517
|
<div class="section" id="authors">
|
|
505
|
-
<
|
|
518
|
+
<h2>Authors</h2>
|
|
506
519
|
<ul class="simple">
|
|
507
520
|
<li>Camptocamp</li>
|
|
508
521
|
<li>BCIM</li>
|
|
@@ -510,7 +523,7 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
|
|
|
510
523
|
</ul>
|
|
511
524
|
</div>
|
|
512
525
|
<div class="section" id="contributors">
|
|
513
|
-
<
|
|
526
|
+
<h2>Contributors</h2>
|
|
514
527
|
<ul class="simple">
|
|
515
528
|
<li>Simone Orsi <<a class="reference external" href="mailto:simahawk@gmail.com">simahawk@gmail.com</a>></li>
|
|
516
529
|
<li>Thierry Ducrest <<a class="reference external" href="mailto:thierry.ducrest@camptocamp.com">thierry.ducrest@camptocamp.com</a>></li>
|
|
@@ -519,16 +532,14 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
|
|
|
519
532
|
<li>Sébastien Beau <<a class="reference external" href="mailto:sebastien.beau@akretion.com">sebastien.beau@akretion.com</a>></li>
|
|
520
533
|
<li>Jacques-Etienne Baudoux <<a class="reference external" href="mailto:je@bcim.be">je@bcim.be</a>></li>
|
|
521
534
|
</ul>
|
|
522
|
-
</
|
|
523
|
-
<div class="section" id="design">
|
|
524
|
-
<h1>Design</h1>
|
|
535
|
+
<p><strong>Design</strong></p>
|
|
525
536
|
<ul class="simple">
|
|
526
537
|
<li>Joël Grand-Guillaume <<a class="reference external" href="mailto:joel.grandguillaume@camptocamp.com">joel.grandguillaume@camptocamp.com</a>></li>
|
|
527
538
|
<li>Jacques-Etienne Baudoux <<a class="reference external" href="mailto:je@bcim.be">je@bcim.be</a>></li>
|
|
528
539
|
</ul>
|
|
529
540
|
</div>
|
|
530
541
|
<div class="section" id="other-credits">
|
|
531
|
-
<
|
|
542
|
+
<h2>Other credits</h2>
|
|
532
543
|
<p><strong>Financial support</strong></p>
|
|
533
544
|
<ul class="simple">
|
|
534
545
|
<li>Cosanum</li>
|
|
@@ -537,7 +548,7 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
|
|
|
537
548
|
</ul>
|
|
538
549
|
</div>
|
|
539
550
|
<div class="section" id="maintainers">
|
|
540
|
-
<
|
|
551
|
+
<h2>Maintainers</h2>
|
|
541
552
|
<p>This module is maintained by the OCA.</p>
|
|
542
553
|
<a class="reference external image-reference" href="https://odoo-community.org">
|
|
543
554
|
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
|
|
@@ -547,9 +558,10 @@ mission is to support the collaborative development of Odoo features and
|
|
|
547
558
|
promote its widespread use.</p>
|
|
548
559
|
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
|
|
549
560
|
<p><a class="reference external image-reference" href="https://github.com/simahawk"><img alt="simahawk" src="https://github.com/simahawk.png?size=40px" /></a></p>
|
|
550
|
-
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/
|
|
561
|
+
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/stock-logistics-shopfloor/tree/18.0/shopfloor_mobile">OCA/stock-logistics-shopfloor</a> project on GitHub.</p>
|
|
551
562
|
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
|
|
552
563
|
</div>
|
|
553
564
|
</div>
|
|
565
|
+
</div>
|
|
554
566
|
</body>
|
|
555
567
|
</html>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import {ItemDetailMixin} from "/shopfloor_mobile_base/static/
|
|
7
|
+
import {ItemDetailMixin} from "/shopfloor_mobile_base/static/src/components/detail/detail_mixin.esm.js";
|
|
8
8
|
|
|
9
9
|
Vue.component("detail-location", {
|
|
10
10
|
mixins: [ItemDetailMixin],
|
odoo/addons/shopfloor_mobile/static/wms/src/components/detail/{detail_lot.js → detail_lot.esm.js}
RENAMED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import {ItemDetailMixin} from "/shopfloor_mobile_base/static/
|
|
7
|
+
import {ItemDetailMixin} from "/shopfloor_mobile_base/static/src/components/detail/detail_mixin.esm.js";
|
|
8
8
|
|
|
9
9
|
// TODO: this should be probably merged or combined w/ detail-product
|
|
10
10
|
Vue.component("detail-lot", {
|
|
@@ -44,6 +44,7 @@ Vue.component("detail-lot", {
|
|
|
44
44
|
{path: "product_name", label: "Name"},
|
|
45
45
|
];
|
|
46
46
|
},
|
|
47
|
+
/* eslint-disable no-unused-vars */
|
|
47
48
|
render_packaging(record, field) {
|
|
48
49
|
return [record.name, "(" + record.code + ")", "= " + record.qty].join(" ");
|
|
49
50
|
},
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import {ItemDetailMixin} from "/shopfloor_mobile_base/static/
|
|
7
|
+
import {ItemDetailMixin} from "/shopfloor_mobile_base/static/src/components/detail/detail_mixin.esm.js";
|
|
8
8
|
|
|
9
9
|
// TODO: this should probably trashed in favour of detail-transfer
|
|
10
10
|
// ATM is used only by single pack transfer to display package level info.
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import {ItemDetailMixin} from "/shopfloor_mobile_base/static/
|
|
7
|
+
import {ItemDetailMixin} from "/shopfloor_mobile_base/static/src/components/detail/detail_mixin.esm.js";
|
|
8
8
|
|
|
9
9
|
Vue.component("detail-package", {
|
|
10
10
|
mixins: [ItemDetailMixin],
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import {ItemDetailMixin} from "/shopfloor_mobile_base/static/
|
|
7
|
+
import {ItemDetailMixin} from "/shopfloor_mobile_base/static/src/components/detail/detail_mixin.esm.js";
|
|
8
8
|
|
|
9
9
|
// TODO: refactor according to new data from backend and maybe merge w/ `detail-lot`
|
|
10
10
|
Vue.component("detail-product", {
|
|
@@ -36,6 +36,7 @@ Vue.component("detail-product", {
|
|
|
36
36
|
{path: "product_name", label: "Name"},
|
|
37
37
|
];
|
|
38
38
|
},
|
|
39
|
+
/* eslint-disable no-unused-vars */
|
|
39
40
|
render_packaging(record, field) {
|
|
40
41
|
return [record.name, "(" + record.code + ")", "= " + record.qty].join(" ");
|
|
41
42
|
},
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import {ItemDetailMixin} from "/shopfloor_mobile_base/static/
|
|
7
|
+
import {ItemDetailMixin} from "/shopfloor_mobile_base/static/src/components/detail/detail_mixin.esm.js";
|
|
8
8
|
|
|
9
9
|
Vue.component("detail-transfer", {
|
|
10
10
|
mixins: [ItemDetailMixin],
|
|
@@ -8,7 +8,7 @@ const Base = Vue.options.components["manual-select"];
|
|
|
8
8
|
const Custom = Base.extend({
|
|
9
9
|
methods: {
|
|
10
10
|
selected_color_klass(rec, modifier) {
|
|
11
|
-
let color;
|
|
11
|
+
let color = "";
|
|
12
12
|
if (rec && rec.qty_done && rec.quantity) {
|
|
13
13
|
if (rec.qty_done < rec.quantity)
|
|
14
14
|
color = this.utils.colors.color_for("item_selected_partial");
|
|
@@ -4,9 +4,7 @@
|
|
|
4
4
|
* License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
import {ItemDetailMixin} from "/shopfloor_mobile_base/static/wms/src/components/detail/detail_mixin.js";
|
|
7
|
+
import {ItemDetailMixin} from "/shopfloor_mobile_base/static/src/components/detail/detail_mixin.esm.js";
|
|
10
8
|
|
|
11
9
|
// TODO: could be merged w/ userConfirmation
|
|
12
10
|
Vue.component("last-operation", {
|
|
@@ -8,12 +8,14 @@
|
|
|
8
8
|
|
|
9
9
|
export var PackagingQtyPickerMixin = {
|
|
10
10
|
props: {
|
|
11
|
-
|
|
11
|
+
// Options are replaced by props
|
|
12
|
+
options: Object,
|
|
12
13
|
mode: String,
|
|
13
14
|
qtyInit: Number,
|
|
14
15
|
uom: {type: Object, required: true},
|
|
15
16
|
availablePackaging: Array,
|
|
16
|
-
|
|
17
|
+
// "code" or "name"
|
|
18
|
+
pkgNameKey: String,
|
|
17
19
|
},
|
|
18
20
|
data: function () {
|
|
19
21
|
return {
|
|
@@ -56,8 +58,8 @@ export var PackagingQtyPickerMixin = {
|
|
|
56
58
|
packaging_by_id: function (id) {
|
|
57
59
|
// Special case for UOM ids as they can clash w/ pkg ids
|
|
58
60
|
// we prefix it w/ "uom-"
|
|
59
|
-
|
|
60
|
-
return _.find(this.sorted_packaging, ["id",
|
|
61
|
+
const _id = id.startsWith("uom-") ? id : parseInt(id, 10);
|
|
62
|
+
return _.find(this.sorted_packaging, ["id", _id]);
|
|
61
63
|
},
|
|
62
64
|
/**
|
|
63
65
|
*
|
|
@@ -89,10 +91,9 @@ export var PackagingQtyPickerMixin = {
|
|
|
89
91
|
const res = {};
|
|
90
92
|
// Const min_unit = _.last(pkg_by_qty);
|
|
91
93
|
pkg_by_qty.forEach(function (pkg) {
|
|
92
|
-
|
|
93
|
-
[
|
|
94
|
-
|
|
95
|
-
if (!qty) return;
|
|
94
|
+
const [_qty_per_pkg, _qty] = self._qty_by_pkg(pkg.qty, qty);
|
|
95
|
+
res[pkg.id] = _qty_per_pkg;
|
|
96
|
+
if (!_qty) return;
|
|
96
97
|
});
|
|
97
98
|
return res;
|
|
98
99
|
},
|
|
@@ -140,7 +141,7 @@ export var PackagingQtyPickerMixin = {
|
|
|
140
141
|
* Include the uom
|
|
141
142
|
*/
|
|
142
143
|
sorted_packaging: function () {
|
|
143
|
-
|
|
144
|
+
const packagings = _.reverse(
|
|
144
145
|
_.sortBy(
|
|
145
146
|
_.filter(this.availablePackaging, _.property("qty")),
|
|
146
147
|
_.property("qty")
|
|
@@ -158,10 +159,10 @@ export var PackagingQtyPickerMixin = {
|
|
|
158
159
|
*/
|
|
159
160
|
contained_packaging: function () {
|
|
160
161
|
const self = this;
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
remaining,
|
|
164
|
-
elected_next_pkg;
|
|
162
|
+
const res = {};
|
|
163
|
+
let qty_per_pkg = [],
|
|
164
|
+
remaining = 0,
|
|
165
|
+
elected_next_pkg = {};
|
|
165
166
|
const packaging = this.sorted_packaging;
|
|
166
167
|
_.forEach(packaging, function (pkg, i) {
|
|
167
168
|
const next_pkgs = packaging.slice(i + 1);
|
|
@@ -192,14 +193,15 @@ export var PackagingQtyPicker = Vue.component("packaging-qty-picker", {
|
|
|
192
193
|
},
|
|
193
194
|
data: function () {
|
|
194
195
|
return {
|
|
195
|
-
|
|
196
|
+
// Expand panel by default
|
|
197
|
+
panel: 0,
|
|
196
198
|
};
|
|
197
199
|
},
|
|
198
200
|
watch: {
|
|
199
201
|
qty_by_pkg: {
|
|
200
202
|
deep: true,
|
|
201
203
|
handler: function () {
|
|
202
|
-
//
|
|
204
|
+
// Prevent watched qty to update again qty_by_pkg
|
|
203
205
|
this.qty_by_pkg_manual = true;
|
|
204
206
|
this.compute_qty();
|
|
205
207
|
this.qty_by_pkg_manual = false;
|
|
@@ -215,7 +217,7 @@ export var PackagingQtyPicker = Vue.component("packaging-qty-picker", {
|
|
|
215
217
|
},
|
|
216
218
|
computed: {
|
|
217
219
|
qty_color: function () {
|
|
218
|
-
if (this.qty
|
|
220
|
+
if (this.qty === this.qtyTodo) {
|
|
219
221
|
if (this.readonly) return "";
|
|
220
222
|
return "background-color: rgb(143, 191, 68)";
|
|
221
223
|
}
|
|
@@ -305,10 +307,10 @@ export var PackagingQtyPickerDisplay = Vue.component("packaging-qty-picker-displ
|
|
|
305
307
|
},
|
|
306
308
|
computed: {
|
|
307
309
|
visible_packaging: function () {
|
|
308
|
-
|
|
310
|
+
const packagings = _.filter(this.sorted_packaging, this.display_pkg);
|
|
309
311
|
// Do not display if only uom packaging
|
|
310
312
|
if (
|
|
311
|
-
packagings.length
|
|
313
|
+
packagings.length === 1 &&
|
|
312
314
|
packagings[0].id.toString().startsWith("uom-")
|
|
313
315
|
)
|
|
314
316
|
return [];
|
|
@@ -3,9 +3,8 @@
|
|
|
3
3
|
* @author Simone Orsi <simahawk@gmail.com>
|
|
4
4
|
* License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import {PickingDetailMixin} from "../detail/detail_picking.js";
|
|
6
|
+
|
|
7
|
+
import {PickingDetailMixin} from "../detail/detail_picking.esm.js";
|
|
9
8
|
|
|
10
9
|
// Maybe worth to move it to its own file
|
|
11
10
|
export var ListActionsConsumerMixin = {
|
|
@@ -3,10 +3,9 @@
|
|
|
3
3
|
* @author Simone Orsi <simahawk@gmail.com>
|
|
4
4
|
* License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import {PickingDetailSelectMixin} from "./mixins.js";
|
|
9
|
-
import {ItemDetailMixin} from "/shopfloor_mobile_base/static/wms/src/components/detail/detail_mixin.js";
|
|
6
|
+
|
|
7
|
+
import {ItemDetailMixin} from "/shopfloor_mobile_base/static/src/components/detail/detail_mixin.esm.js";
|
|
8
|
+
import {PickingDetailSelectMixin} from "./mixins.esm.js";
|
|
10
9
|
|
|
11
10
|
Vue.component("detail-picking-select", {
|
|
12
11
|
mixins: [PickingDetailSelectMixin],
|
|
@@ -16,12 +15,15 @@ Vue.component("detail-picking-select", {
|
|
|
16
15
|
return {
|
|
17
16
|
action_qty_edit: {
|
|
18
17
|
comp_name: "edit-action",
|
|
18
|
+
/* eslint-disable no-unused-vars */
|
|
19
19
|
get_record: function (rec, action) {
|
|
20
20
|
return rec;
|
|
21
21
|
},
|
|
22
|
+
/* eslint-disable no-unused-vars */
|
|
22
23
|
get_options: function (rec, action) {
|
|
23
24
|
return {click_event: "qty_edit"};
|
|
24
25
|
},
|
|
26
|
+
/* eslint-disable no-unused-vars */
|
|
25
27
|
enabled: function (rec, action) {
|
|
26
28
|
return true;
|
|
27
29
|
},
|
|
@@ -43,7 +45,7 @@ Vue.component("picking-select-line-content", {
|
|
|
43
45
|
// Display detail fields on demand if the package contains only 1 line
|
|
44
46
|
if (
|
|
45
47
|
this.options.show_oneline_package_content &&
|
|
46
|
-
record.package_dest.move_line_count
|
|
48
|
+
record.package_dest.move_line_count === 1
|
|
47
49
|
) {
|
|
48
50
|
fields = [
|
|
49
51
|
{path: "product.display_name", label: "Product"},
|
|
@@ -69,6 +71,7 @@ Vue.component("picking-select-line-content", {
|
|
|
69
71
|
opts.loud_title = true;
|
|
70
72
|
return opts;
|
|
71
73
|
},
|
|
74
|
+
/* eslint-disable no-unused-vars */
|
|
72
75
|
get_wrapper_klass(record) {
|
|
73
76
|
return "";
|
|
74
77
|
},
|
|
@@ -4,10 +4,9 @@
|
|
|
4
4
|
* License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
/* eslint-disable
|
|
8
|
-
|
|
9
|
-
import {
|
|
10
|
-
import {ItemDetailMixin} from "/shopfloor_mobile_base/static/wms/src/components/detail/detail_mixin.js";
|
|
7
|
+
/* eslint-disable sort-imports */
|
|
8
|
+
import {PickingDetailListMixin} from "./mixins.esm.js";
|
|
9
|
+
import {ItemDetailMixin} from "/shopfloor_mobile_base/static/src/components/detail/detail_mixin.esm.js";
|
|
11
10
|
|
|
12
11
|
Vue.component("picking-summary", {
|
|
13
12
|
mixins: [PickingDetailListMixin],
|
|
@@ -38,6 +37,7 @@ Vue.component("picking-summary", {
|
|
|
38
37
|
return {
|
|
39
38
|
action_change_pkg: {
|
|
40
39
|
comp_name: "edit-action",
|
|
40
|
+
/* eslint-disable no-unused-vars */
|
|
41
41
|
get_record: function (rec, action) {
|
|
42
42
|
/**
|
|
43
43
|
* Here we can get records grouped.
|
|
@@ -54,9 +54,11 @@ Vue.component("picking-summary", {
|
|
|
54
54
|
}
|
|
55
55
|
return rec;
|
|
56
56
|
},
|
|
57
|
+
/* eslint-disable no-unused-vars */
|
|
57
58
|
get_options: function (rec, action) {
|
|
58
59
|
return {click_event: "pkg_change_type"};
|
|
59
60
|
},
|
|
61
|
+
/* eslint-disable no-unused-vars */
|
|
60
62
|
enabled: function (rec, action) {
|
|
61
63
|
// Exclude for non-packaged records.
|
|
62
64
|
// NOTE: `pack` is available only if records are grouped.
|
|
@@ -66,11 +68,13 @@ Vue.component("picking-summary", {
|
|
|
66
68
|
},
|
|
67
69
|
action_cancel_line: {
|
|
68
70
|
comp_name: "cancel-move-line-action",
|
|
71
|
+
/* eslint-disable no-unused-vars */
|
|
69
72
|
get_options: function (rec, action) {
|
|
70
73
|
return {
|
|
71
74
|
package_cancel_key: self.$props.action_cancel_package_key,
|
|
72
75
|
};
|
|
73
76
|
},
|
|
77
|
+
/* eslint-disable no-unused-vars */
|
|
74
78
|
get_record: function (rec, action) {
|
|
75
79
|
if (rec.records) {
|
|
76
80
|
// Lines grouped, get real line
|
|
@@ -78,6 +82,7 @@ Vue.component("picking-summary", {
|
|
|
78
82
|
}
|
|
79
83
|
return rec;
|
|
80
84
|
},
|
|
85
|
+
/* eslint-disable no-unused-vars */
|
|
81
86
|
enabled: function (rec, action) {
|
|
82
87
|
return true;
|
|
83
88
|
},
|
|
@@ -102,9 +107,10 @@ Vue.component("picking-summary-content", {
|
|
|
102
107
|
},
|
|
103
108
|
watch: {
|
|
104
109
|
panel: {
|
|
110
|
+
/* eslint-disable no-unused-vars */
|
|
105
111
|
handler: function (newVal, oldVal) {
|
|
106
112
|
// The panel is opened
|
|
107
|
-
$(this.$parent.$el).toggleClass("inner-panel-expanded", newVal
|
|
113
|
+
$(this.$parent.$el).toggleClass("inner-panel-expanded", newVal === 0);
|
|
108
114
|
},
|
|
109
115
|
},
|
|
110
116
|
},
|