Browse Source

Merge PR #367 into 12.0

Signed-off-by chienandalu
pull/380/head
OCA-git-bot 5 years ago
parent
commit
390764defe
  1. 1
      oca_dependencies.txt
  2. 115
      pos_picking_delayed/README.rst
  3. 1
      pos_picking_delayed/__init__.py
  4. 25
      pos_picking_delayed/__manifest__.py
  5. 57
      pos_picking_delayed/i18n/fr.po
  6. 46
      pos_picking_delayed/i18n/pos_picking_delayed.pot
  7. 3
      pos_picking_delayed/models/__init__.py
  8. 15
      pos_picking_delayed/models/pos_config.py
  9. 49
      pos_picking_delayed/models/pos_order.py
  10. 9
      pos_picking_delayed/readme/CONFIGURE.rst
  11. 1
      pos_picking_delayed/readme/CONTRIBUTORS.rst
  12. 4
      pos_picking_delayed/readme/CREDITS.rst
  13. 14
      pos_picking_delayed/readme/DESCRIPTION.rst
  14. 4
      pos_picking_delayed/readme/USAGE.rst
  15. BIN
      pos_picking_delayed/static/description/icon.png
  16. 462
      pos_picking_delayed/static/description/index.html
  17. BIN
      pos_picking_delayed/static/description/pos_config_form.png
  18. BIN
      pos_picking_delayed/static/description/pos_order_tree.png
  19. 2
      pos_picking_delayed/tests/__init__.py
  20. 95
      pos_picking_delayed/tests/test_module.py
  21. 19
      pos_picking_delayed/views/view_pos_config.xml
  22. 30
      pos_picking_delayed/views/view_pos_order.xml
  23. 2
      setup/_metapackage/VERSION.txt
  24. 1
      setup/_metapackage/setup.py
  25. 1
      setup/pos_picking_delayed/odoo/addons/pos_picking_delayed
  26. 6
      setup/pos_picking_delayed/setup.py

1
oca_dependencies.txt

@ -0,0 +1 @@
queue

115
pos_picking_delayed/README.rst

@ -0,0 +1,115 @@
========================================
Point of Sale - Picking Creation Delayed
========================================
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fpos-lightgray.png?logo=github
:target: https://github.com/OCA/pos/tree/12.0/pos_picking_delayed
:alt: OCA/pos
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/pos-12-0/pos-12-0-pos_picking_delayed
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/184/12.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
This module extends the functionality of odoo Point Of Sale to reduce creation
time of the PoS orders, via the front UI.
For that purpose, it delays the creation of the picking associated, that will
be created later by queue job.
This module is interesting specially in a context of Synchroneous Point Of
Sale that is introduced by certification modules like 'l10n_fr_pos_cert' because
in such cases, the bill will be printed only when the pos order is created (
after the call of the function create_from_ui) and the creation of the picking
is the process that takes the most time.
See https://github.com/odoo/odoo/pull/26314#issuecomment-422949266
for more information.
**Table of contents**
.. contents::
:local:
Configuration
=============
* Go to 'Point of Sale' / 'Configuration' / 'Point of Sale'
* Select your Point of Sale
* Set the value in the field 'Picking Creation Delayed'. (Checked by default)
.. image:: https://raw.githubusercontent.com/pos_picking_delayed/static/description/pos_config_form.png
* This module depends on ``queue_job`` module that requires specific
configuration to works properly. Make sure your config file is correctly set.
See https://github.com/OCA/queue/tree/12.0/queue_job
Usage
=====
* Use your Point of Sale as usual. When validating an order, the order will
be in a different color until the job is executed
.. image:: https://raw.githubusercontent.com/pos_picking_delayed/static/description/pos_order_tree.png
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/pos/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
`feedback <https://github.com/OCA/pos/issues/new?body=module:%20pos_picking_delayed%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
~~~~~~~
* GRAP
Contributors
~~~~~~~~~~~~
* Sylvain LE GAL <https://twitter.com/legalsylvain>
Other credits
~~~~~~~~~~~~~
The development of this module has been financially supported by:
* GRAP, Groupement Régional Alimentaire de Proximité (www.grap.coop)
* Mind & Go, (https://mind-and-go.com/)
Maintainers
~~~~~~~~~~~
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
This module is part of the `OCA/pos <https://github.com/OCA/pos/tree/12.0/pos_picking_delayed>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

1
pos_picking_delayed/__init__.py

@ -0,0 +1 @@
from . import models

25
pos_picking_delayed/__manifest__.py

@ -0,0 +1,25 @@
# Copyright 2018 - Today Sylvain LE GAL (https://twitter.com/legalsylvain)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{
'name': 'Point of Sale - Picking Creation Delayed',
'summary': 'Delay the creation of the picking when PoS order is created',
'version': '12.0.1.0.0',
'category': 'Point Of Sale',
'author': 'GRAP, '
'Odoo Community Association (OCA)',
'license': 'AGPL-3',
'website': 'https://www.github.com/OCA/pos',
'depends': [
'point_of_sale',
'queue_job',
],
'data': [
'views/view_pos_config.xml',
'views/view_pos_order.xml',
],
'images': [
'static/description/pos_order_tree.png',
],
'installable': True,
}

57
pos_picking_delayed/i18n/fr.po

@ -0,0 +1,57 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * pos_picking_delayed
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-17 11:06+0000\n"
"PO-Revision-Date: 2018-10-17 11:06+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: pos_picking_delayed
#: model:ir.model.fields,help:pos_picking_delayed.field_pos_config_picking_creation_delayed
msgid ""
"Check this box if you want to delay the creation of the picking created by "
"the PoS orders. If checked, the pickings will be created later, by a cron "
"task."
msgstr ""
"Cochez cette case si vous souhaitez retarder la création des transferts de "
"stock liés au commandes de point de vente. Si la case est cochée, ceux-ci "
"seront créés ultérieurement, par une tâche de fond."
#. module: pos_picking_delayed
#: model:ir.model.fields,field_description:pos_picking_delayed.field_pos_order_has_picking_delayed
msgid "Has picking delayed"
msgstr "A un transfert de stock retardé"
#. module: pos_picking_delayed
#: model:ir.model.fields,field_description:pos_picking_delayed.field_pos_config_picking_creation_delayed
msgid "Picking Creation Delayed"
msgstr "Retarder la création des transferts de stock"
#. module: pos_picking_delayed
#: model:ir.model,name:pos_picking_delayed.model_pos_order
msgid "Point of Sale Orders"
msgstr "Commandes du point de vente"
#. module: pos_picking_delayed
#: model:ir.model.fields,help:pos_picking_delayed.field_pos_order_has_picking_delayed
msgid ""
"This checkbox is checked if the generation of the picking has been delayed. "
"The picking will be created by cron."
msgstr ""
"Cette case est cochée si la génération du transfert de stock a été retardée. "
"Celui ci sera créé par une tâche de fond."
#. module: pos_picking_delayed
#: model:ir.model,name:pos_picking_delayed.model_pos_config
msgid "pos.config"
msgstr "pos.config"

46
pos_picking_delayed/i18n/pos_picking_delayed.pot

@ -0,0 +1,46 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * pos_picking_delayed
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: pos_picking_delayed
#: model:ir.model.fields,help:pos_picking_delayed.field_pos_config__picking_creation_delayed
msgid "Check this box if you want to delay the creation of the picking created by the PoS orders. If checked, the pickings will be created later, by a cron task."
msgstr ""
#. module: pos_picking_delayed
#: model:ir.model.fields,field_description:pos_picking_delayed.field_pos_order__has_picking_delayed
msgid "Has Picking Delayed"
msgstr ""
#. module: pos_picking_delayed
#: model:ir.model.fields,field_description:pos_picking_delayed.field_pos_config__picking_creation_delayed
#: model_terms:ir.ui.view,arch_db:pos_picking_delayed.view_pos_config_form
msgid "Picking Creation Delayed"
msgstr ""
#. module: pos_picking_delayed
#: model:ir.model,name:pos_picking_delayed.model_pos_config
msgid "Point of Sale Configuration"
msgstr ""
#. module: pos_picking_delayed
#: model:ir.model,name:pos_picking_delayed.model_pos_order
msgid "Point of Sale Orders"
msgstr ""
#. module: pos_picking_delayed
#: model:ir.model.fields,help:pos_picking_delayed.field_pos_order__has_picking_delayed
msgid "This checkbox is checked if the generation of the picking has been delayed. The picking will be created by cron."
msgstr ""

3
pos_picking_delayed/models/__init__.py

@ -0,0 +1,3 @@
from . import pos_config
from . import pos_order

15
pos_picking_delayed/models/pos_config.py

@ -0,0 +1,15 @@
# Copyright 2018 - Today Sylvain LE GAL (https://twitter.com/legalsylvain)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import fields, models
class PosConfig(models.Model):
_inherit = 'pos.config'
picking_creation_delayed = fields.Boolean(
string='Picking Creation Delayed', default=True,
help="Check this box if you want to delay the creation of the picking"
" created by the PoS orders. If checked, the pickings will"
" be created later, by a cron task.")

49
pos_picking_delayed/models/pos_order.py

@ -0,0 +1,49 @@
# Copyright 2018 - Today Sylvain LE GAL (https://twitter.com/legalsylvain)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import api, fields, models
from odoo.addons.queue_job.job import job
class PosOrder(models.Model):
_inherit = 'pos.order'
has_picking_delayed = fields.Boolean(
default=False, help="This checkbox is checked if the generation of"
" the picking has been delayed. The picking will be created by cron.")
# Overload Section
@api.model
def create_from_ui(self, orders):
PosSession = self.env['pos.session']
for order_data in orders:
session_id = order_data.get('data').get('pos_session_id')
session = PosSession.browse(session_id)
order_data['data']['has_picking_delayed'] =\
session.config_id.picking_creation_delayed
return super(PosOrder, self.with_context(
create_from_ui=True)).create_from_ui(orders)
def create_picking(self):
if self.env.context.get('create_from_ui', False):
orders = self.filtered(lambda x: not x.has_picking_delayed)
delayed_orders = self.filtered(lambda x: x.has_picking_delayed)
delayed_orders.with_delay()._create_delayed_picking()
else:
orders = self
res = super(PosOrder, orders).create_picking()
orders.write({'has_picking_delayed': False})
return res
@api.model
def _order_fields(self, ui_order):
res = super(PosOrder, self)._order_fields(ui_order)
res['has_picking_delayed'] = ui_order['has_picking_delayed']
return res
# Custom Section
@api.multi
@job(default_channel='root.pos_picking_delayed')
def _create_delayed_picking(self):
super(PosOrder, self).create_picking()
self.write({'has_picking_delayed': False})

9
pos_picking_delayed/readme/CONFIGURE.rst

@ -0,0 +1,9 @@
* Go to 'Point of Sale' / 'Configuration' / 'Point of Sale'
* Select your Point of Sale
* Set the value in the field 'Picking Creation Delayed'. (Checked by default)
.. image:: /pos_picking_delayed/static/description/pos_config_form.png
* This module depends on ``queue_job`` module that requires specific
configuration to works properly. Make sure your config file is correctly set.
See https://github.com/OCA/queue/tree/12.0/queue_job

1
pos_picking_delayed/readme/CONTRIBUTORS.rst

@ -0,0 +1 @@
* Sylvain LE GAL <https://twitter.com/legalsylvain>

4
pos_picking_delayed/readme/CREDITS.rst

@ -0,0 +1,4 @@
The development of this module has been financially supported by:
* GRAP, Groupement Régional Alimentaire de Proximité (www.grap.coop)
* Mind & Go, (https://mind-and-go.com/)

14
pos_picking_delayed/readme/DESCRIPTION.rst

@ -0,0 +1,14 @@
This module extends the functionality of odoo Point Of Sale to reduce creation
time of the PoS orders, via the front UI.
For that purpose, it delays the creation of the picking associated, that will
be created later by queue job.
This module is interesting specially in a context of Synchroneous Point Of
Sale that is introduced by certification modules like 'l10n_fr_pos_cert' because
in such cases, the bill will be printed only when the pos order is created (
after the call of the function create_from_ui) and the creation of the picking
is the process that takes the most time.
See https://github.com/odoo/odoo/pull/26314#issuecomment-422949266
for more information.

4
pos_picking_delayed/readme/USAGE.rst

@ -0,0 +1,4 @@
* Use your Point of Sale as usual. When validating an order, the order will
be in a different color until the job is executed
.. image:: /pos_picking_delayed/static/description/pos_order_tree.png

BIN
pos_picking_delayed/static/description/icon.png

After

Width: 128  |  Height: 128  |  Size: 9.2 KiB

462
pos_picking_delayed/static/description/index.html

@ -0,0 +1,462 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.14: http://docutils.sourceforge.net/" />
<title>Point of Sale - Picking Creation Delayed</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: grey; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="point-of-sale-picking-creation-delayed">
<h1 class="title">Point of Sale - Picking Creation Delayed</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external" 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" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/pos/tree/12.0/pos_picking_delayed"><img alt="OCA/pos" src="https://img.shields.io/badge/github-OCA%2Fpos-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/pos-12-0/pos-12-0-pos_picking_delayed"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/184/12.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
<p>This module extends the functionality of odoo Point Of Sale to reduce creation
time of the PoS orders, via the front UI.</p>
<p>For that purpose, it delays the creation of the picking associated, that will
be created later by queue job.</p>
<p>This module is interesting specially in a context of Synchroneous Point Of
Sale that is introduced by certification modules like ‘l10n_fr_pos_cert’ because
in such cases, the bill will be printed only when the pos order is created (
after the call of the function create_from_ui) and the creation of the picking
is the process that takes the most time.</p>
<p>See <a class="reference external" href="https://github.com/odoo/odoo/pull/26314#issuecomment-422949266">https://github.com/odoo/odoo/pull/26314#issuecomment-422949266</a>
for more information.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#configuration" id="id1">Configuration</a></li>
<li><a class="reference internal" href="#usage" id="id2">Usage</a></li>
<li><a class="reference internal" href="#bug-tracker" id="id3">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="id4">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="id5">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="id6">Contributors</a></li>
<li><a class="reference internal" href="#other-credits" id="id7">Other credits</a></li>
<li><a class="reference internal" href="#maintainers" id="id8">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="configuration">
<h1><a class="toc-backref" href="#id1">Configuration</a></h1>
<ul class="simple">
<li>Go to ‘Point of Sale’ / ‘Configuration’ / ‘Point of Sale’</li>
<li>Select your Point of Sale</li>
<li>Set the value in the field ‘Picking Creation Delayed’. (Checked by default)</li>
</ul>
<img alt="https://raw.githubusercontent.com/pos_picking_delayed/static/description/pos_config_form.png" src="https://raw.githubusercontent.com/pos_picking_delayed/static/description/pos_config_form.png" />
<ul class="simple">
<li>This module depends on <tt class="docutils literal">queue_job</tt> module that requires specific
configuration to works properly. Make sure your config file is correctly set.
See <a class="reference external" href="https://github.com/OCA/queue/tree/12.0/queue_job">https://github.com/OCA/queue/tree/12.0/queue_job</a></li>
</ul>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#id2">Usage</a></h1>
<ul class="simple">
<li>Use your Point of Sale as usual. When validating an order, the order will
be in a different color until the job is executed</li>
</ul>
<img alt="https://raw.githubusercontent.com/pos_picking_delayed/static/description/pos_order_tree.png" src="https://raw.githubusercontent.com/pos_picking_delayed/static/description/pos_order_tree.png" />
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#id3">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/pos/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/pos/issues/new?body=module:%20pos_picking_delayed%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#id4">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#id5">Authors</a></h2>
<ul class="simple">
<li>GRAP</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#id6">Contributors</a></h2>
<ul class="simple">
<li>Sylvain LE GAL &lt;<a class="reference external" href="https://twitter.com/legalsylvain">https://twitter.com/legalsylvain</a>&gt;</li>
</ul>
</div>
<div class="section" id="other-credits">
<h2><a class="toc-backref" href="#id7">Other credits</a></h2>
<p>The development of this module has been financially supported by:</p>
<ul class="simple">
<li>GRAP, Groupement Régional Alimentaire de Proximité (www.grap.coop)</li>
<li>Mind &amp; Go, (<a class="reference external" href="https://mind-and-go.com/">https://mind-and-go.com/</a>)</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#id8">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/pos/tree/12.0/pos_picking_delayed">OCA/pos</a> project on GitHub.</p>
<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>
</div>
</div>
</div>
</body>
</html>

BIN
pos_picking_delayed/static/description/pos_config_form.png

After

Width: 429  |  Height: 189  |  Size: 11 KiB

BIN
pos_picking_delayed/static/description/pos_order_tree.png

After

Width: 1052  |  Height: 253  |  Size: 37 KiB

2
pos_picking_delayed/tests/__init__.py

@ -0,0 +1,2 @@
from . import test_module

95
pos_picking_delayed/tests/test_module.py

@ -0,0 +1,95 @@
# Copyright 2018 - Today Sylvain LE GAL (https://twitter.com/legalsylvain)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import fields
from odoo.tests.common import TransactionCase
class TestModule(TransactionCase):
def setUp(self):
super(TestModule, self).setUp()
self.PosOrder = self.env['pos.order']
self.QueueJob = self.env['queue.job']
self.pos_product = self.env.ref('point_of_sale.whiteboard_pen')
self.pricelist = self.env.ref('product.list0')
# Create a new pos config and open it
self.pos_config = self.env.ref('point_of_sale.pos_config_main').copy()
self.pos_config.open_session_cb()
def test_01_picking_delayed_enabled(self):
# Enable feature
self.pos_config.picking_creation_delayed = True
order = self._create_order()
self.assertEqual(
order.picking_id.id, False,
"Creating order via UI should not generate a picking if"
" feature is enabled")
# Test if a Queue Job has been generated
func_string = 'pos.order(%d,)._create_delayed_picking()' % (order.id)
queues = self.QueueJob.search([
('func_string', '=', func_string)])
self.assertEqual(len(queues), 1, "Queue Job has not been created")
def test_02_picking_delayed_disabled(self):
# Disable feature
self.pos_config.picking_creation_delayed = False
order = self._create_order()
picking_id = order.picking_id.id
self.assertNotEqual(
picking_id, False,
"Creating order via UI should generate a picking if"
" feature is disabled")
# Test if a Queue Job has not been generated
func_string = 'pos.order(%d,)._create_delayed_picking()' % (order.id)
queues = self.QueueJob.search([
('func_string', '=', func_string)])
self.assertEqual(len(queues), 0, "Queue Job has been created")
def _create_order(self):
# Create order
order_data = {
'id': u'0006-001-0010',
'to_invoice': False,
'data': {
'pricelist_id': self.pricelist.id,
'user_id': 1,
'name': 'Order 0006-001-0010',
'partner_id': False,
'amount_paid': 0.9,
'pos_session_id': self.pos_config.current_session_id.id,
'lines': [[0, 0, {
'product_id': self.pos_product.id,
'price_unit': 0.9,
'qty': 1,
'price_subtotal': 0.9,
'price_subtotal_incl': 0.9,
}]],
'statement_ids': [[0, 0, {
'journal_id': self.pos_config.journal_ids[0].id,
'amount': 0.9,
'name': fields.Datetime.now(),
'account_id':
self.env.user.partner_id.property_account_receivable_id.id,
'statement_id':
self.pos_config.current_session_id.statement_ids[0].id,
}]],
'creation_date': u'2018-09-27 15:51:03',
'amount_tax': 0,
'fiscal_position_id': False,
'uid': u'00001-001-0001',
'amount_return': 0,
'sequence_number': 1,
'amount_total': 0.9,
}}
result = self.PosOrder.create_from_ui([order_data])
order = self.PosOrder.browse(result[0])
return order

19
pos_picking_delayed/views/view_pos_config.xml

@ -0,0 +1,19 @@
<?xml version="1.0"?>
<!-- Copyright 2018 - Today Sylvain LE GAL (https://twitter.com/legalsylvain)
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).-->
<odoo>
<record id="view_pos_config_form" model="ir.ui.view">
<field name="model">pos.config</field>
<field name="inherit_id" ref="point_of_sale.pos_config_view_form" />
<field name="arch" type="xml">
<xpath expr="//div[@id='title']" position="after">
<group string="Picking Creation Delayed">
<field name="picking_creation_delayed"/>
</group>
</xpath>
</field>
</record>
</odoo>

30
pos_picking_delayed/views/view_pos_order.xml

@ -0,0 +1,30 @@
<?xml version="1.0"?>
<!-- Copyright 2018 - Today Sylvain LE GAL (https://twitter.com/legalsylvain)
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).-->
<odoo>
<record id="view_pos_order_tree" model="ir.ui.view">
<field name="model">pos.order</field>
<field name="inherit_id" ref="point_of_sale.view_pos_order_tree"/>
<field name="arch" type="xml">
<tree position="attributes">
<attribute name="decoration-danger">has_picking_delayed == True</attribute>
</tree>
<field name="state" position="after">
<field name="has_picking_delayed" invisible="1"/>
</field>
</field>
</record>
<record id="view_pos_order_form" model="ir.ui.view">
<field name="model">pos.order</field>
<field name="inherit_id" ref="point_of_sale.view_pos_pos_form"/>
<field name="arch" type="xml">
<field name="picking_id" position="after">
<field name="has_picking_delayed"/>
</field>
</field>
</record>
</odoo>

2
setup/_metapackage/VERSION.txt

@ -1 +1 @@
12.0.20190718.0
12.0.20190724.0

1
setup/_metapackage/setup.py

@ -10,6 +10,7 @@ setuptools.setup(
install_requires=[
'odoo12-addon-pos_access_right',
'odoo12-addon-pos_order_mgmt',
'odoo12-addon-pos_picking_delayed',
'odoo12-addon-pos_ticket_logo',
],
classifiers=[

1
setup/pos_picking_delayed/odoo/addons/pos_picking_delayed

@ -0,0 +1 @@
../../../../pos_picking_delayed

6
setup/pos_picking_delayed/setup.py

@ -0,0 +1,6 @@
import setuptools
setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)
Loading…
Cancel
Save