diff --git a/README.md b/README.md index 2ac2e7bab891..079283e301c7 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ addon | version | maintainers | summary [procurement_auto_create_group](procurement_auto_create_group/) | 14.0.1.2.0 | | Allows to configure the system to propose automatically new procurement groups during the procurement run. [product_quantity_update_force_inventory](product_quantity_update_force_inventory/) | 14.0.1.0.1 | | Product Quantity Update Force Inventory [product_route_profile](product_route_profile/) | 14.0.1.0.3 | [![Kev-Roche](https://github.com/Kev-Roche.png?size=30px)](https://github.com/Kev-Roche) | Add Route profile concept on product -[sale_stock_on_hand_popup](sale_stock_on_hand_popup/) | 14.0.1.0.1 | | Sale Stock On Hand Popup +[sale_stock_on_hand_popup](sale_stock_on_hand_popup/) | 14.0.2.0.0 | [![aleuffre](https://github.com/aleuffre.png?size=30px)](https://github.com/aleuffre) [![renda-dev](https://github.com/renda-dev.png?size=30px)](https://github.com/renda-dev) [![PicchiSeba](https://github.com/PicchiSeba.png?size=30px)](https://github.com/PicchiSeba) | Sale Stock On Hand Popup [scrap_location_filter](scrap_location_filter/) | 14.0.1.0.0 | [![opensourceintegrators](https://github.com/opensourceintegrators.png?size=30px)](https://github.com/opensourceintegrators) | Filters scrap location [scrap_reason_code](scrap_reason_code/) | 14.0.1.1.1 | [![bodedra](https://github.com/bodedra.png?size=30px)](https://github.com/bodedra) | Reason code for scrapping [stock_archive_constraint](stock_archive_constraint/) | 14.0.1.0.0 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) | Stock archive constraint diff --git a/sale_stock_on_hand_popup/README.rst b/sale_stock_on_hand_popup/README.rst index 1cae68b7d936..820d083113c6 100644 --- a/sale_stock_on_hand_popup/README.rst +++ b/sale_stock_on_hand_popup/README.rst @@ -7,7 +7,7 @@ Sale Stock On Hand Popup !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:7e7d0b495f5c5c2c119238bc86c9beee329c4ac57c102e536b6fc4dce6988870 + !! source digest: sha256:c6ca95cb0e31299d67c80eeb03bd994cbbec40d17d4488f71317f6dab9b67b2b !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png @@ -88,6 +88,20 @@ 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. +.. |maintainer-aleuffre| image:: https://github.com/aleuffre.png?size=40px + :target: https://github.com/aleuffre + :alt: aleuffre +.. |maintainer-renda-dev| image:: https://github.com/renda-dev.png?size=40px + :target: https://github.com/renda-dev + :alt: renda-dev +.. |maintainer-PicchiSeba| image:: https://github.com/PicchiSeba.png?size=40px + :target: https://github.com/PicchiSeba + :alt: PicchiSeba + +Current `maintainers `__: + +|maintainer-aleuffre| |maintainer-renda-dev| |maintainer-PicchiSeba| + This module is part of the `OCA/stock-logistics-warehouse `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/sale_stock_on_hand_popup/__init__.py b/sale_stock_on_hand_popup/__init__.py index 0650744f6bc6..aee8895e7a31 100644 --- a/sale_stock_on_hand_popup/__init__.py +++ b/sale_stock_on_hand_popup/__init__.py @@ -1 +1,2 @@ from . import models +from . import wizards diff --git a/sale_stock_on_hand_popup/__manifest__.py b/sale_stock_on_hand_popup/__manifest__.py index f725b5579771..5061e1a178b2 100644 --- a/sale_stock_on_hand_popup/__manifest__.py +++ b/sale_stock_on_hand_popup/__manifest__.py @@ -1,13 +1,21 @@ { "name": "Sale Stock On Hand Popup", "author": "PyTech SRL, Ooops404, Odoo Community Association (OCA)", + "maintainers": ["aleuffre", "renda-dev", "PicchiSeba"], "website": "https://github.com/OCA/stock-logistics-warehouse", "category": "Warehouse Management", - "version": "14.0.1.0.1", + "version": "14.0.2.0.0", "license": "AGPL-3", "depends": ["sale_stock", "stock_available"], - "data": ["views/sale_order_views.xml"], - "qweb": ["static/src/xml/sale_stock.xml"], + "data": [ + "security/ir.model.access.csv", + "security/security.xml", + "views/assets.xml", + "views/res_config_settings_views.xml", + "views/sale_order_views.xml", + "wizards/product_quant_wizard_views.xml", + ], + "qweb": ["static/src/xml/stock_on_hand_widget.xml"], "installable": True, "application": False, } diff --git a/sale_stock_on_hand_popup/i18n/it.po b/sale_stock_on_hand_popup/i18n/it.po index 3b92f8dfad49..c17e97eacb9c 100644 --- a/sale_stock_on_hand_popup/i18n/it.po +++ b/sale_stock_on_hand_popup/i18n/it.po @@ -16,35 +16,92 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.17\n" +#. module: sale_stock_on_hand_popup +#: model_terms:ir.ui.view,arch_db:sale_stock_on_hand_popup.product_quant_wizard_view_form +msgid "Close" +msgstr "" + +#. module: sale_stock_on_hand_popup +#: model:ir.model,name:sale_stock_on_hand_popup.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: sale_stock_on_hand_popup +#: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_product_quant_wizard__create_uid +msgid "Created by" +msgstr "" + +#. module: sale_stock_on_hand_popup +#: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_product_quant_wizard__create_date +msgid "Created on" +msgstr "" + #. module: sale_stock_on_hand_popup #: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_product_product__display_name +#: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_product_quant_wizard__display_name +#: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_res_config_settings__display_name msgid "Display Name" msgstr "Nome visualizzato" +#. module: sale_stock_on_hand_popup +#: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_res_config_settings__group_show_transit_location_stock_wizard +msgid "Display also transit location lines in sale line stock popup." +msgstr "" + +#. module: sale_stock_on_hand_popup +#: model:res.groups,name:sale_stock_on_hand_popup.group_show_transit_location_stock_wizard +msgid "Display transit location lines in sale line stock popup" +msgstr "" + #. module: sale_stock_on_hand_popup #: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_product_product__id +#: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_product_quant_wizard__id +#: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_res_config_settings__id msgid "ID" msgstr "ID" #. module: sale_stock_on_hand_popup #: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_product_product____last_update +#: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_product_quant_wizard____last_update +#: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_res_config_settings____last_update msgid "Last Modified on" msgstr "Ultima modifica il" +#. module: sale_stock_on_hand_popup +#: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_product_quant_wizard__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: sale_stock_on_hand_popup +#: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_product_quant_wizard__write_date +msgid "Last Updated on" +msgstr "" + #. module: sale_stock_on_hand_popup #: model:ir.model,name:sale_stock_on_hand_popup.model_product_product +#: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_product_quant_wizard__product_id msgid "Product" msgstr "Prodotto" #. module: sale_stock_on_hand_popup -#: code:addons/sale_stock_on_hand_popup/models/product.py:0 -#, python-format -msgid "Stock Lines" -msgstr "Righe giacenza" +#: model:ir.model,name:sale_stock_on_hand_popup.model_product_quant_wizard +msgid "Product Quant Wizard" +msgstr "" + +#. module: sale_stock_on_hand_popup +#: model_terms:ir.ui.view,arch_db:sale_stock_on_hand_popup.view_stock_configuration +msgid "Sale Stock on Hand" +msgstr "" #. module: sale_stock_on_hand_popup -#. openerp-web -#: code:addons/sale_stock_on_hand_popup/static/src/xml/sale_stock.xml:0 +#: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_product_quant_wizard__stock_quant_ids +msgid "Stock Quant" +msgstr "" + +#, python-format +#~ msgid "Stock Lines" +#~ msgstr "Righe giacenza" + #, python-format -msgid "View Stock" -msgstr "Vedi giacenza" +#~ msgid "View Stock" +#~ msgstr "Vedi giacenza" diff --git a/sale_stock_on_hand_popup/i18n/sale_stock_on_hand_popup.pot b/sale_stock_on_hand_popup/i18n/sale_stock_on_hand_popup.pot index 529476eeb424..aa7c87b99ed4 100644 --- a/sale_stock_on_hand_popup/i18n/sale_stock_on_hand_popup.pot +++ b/sale_stock_on_hand_popup/i18n/sale_stock_on_hand_popup.pot @@ -13,35 +13,84 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: sale_stock_on_hand_popup +#: model_terms:ir.ui.view,arch_db:sale_stock_on_hand_popup.product_quant_wizard_view_form +msgid "Close" +msgstr "" + +#. module: sale_stock_on_hand_popup +#: model:ir.model,name:sale_stock_on_hand_popup.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: sale_stock_on_hand_popup +#: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_product_quant_wizard__create_uid +msgid "Created by" +msgstr "" + +#. module: sale_stock_on_hand_popup +#: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_product_quant_wizard__create_date +msgid "Created on" +msgstr "" + #. module: sale_stock_on_hand_popup #: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_product_product__display_name +#: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_product_quant_wizard__display_name +#: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_res_config_settings__display_name msgid "Display Name" msgstr "" +#. module: sale_stock_on_hand_popup +#: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_res_config_settings__group_show_transit_location_stock_wizard +msgid "Display also transit location lines in sale line stock popup." +msgstr "" + +#. module: sale_stock_on_hand_popup +#: model:res.groups,name:sale_stock_on_hand_popup.group_show_transit_location_stock_wizard +msgid "Display transit location lines in sale line stock popup" +msgstr "" + #. module: sale_stock_on_hand_popup #: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_product_product__id +#: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_product_quant_wizard__id +#: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_res_config_settings__id msgid "ID" msgstr "" #. module: sale_stock_on_hand_popup #: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_product_product____last_update +#: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_product_quant_wizard____last_update +#: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_res_config_settings____last_update msgid "Last Modified on" msgstr "" +#. module: sale_stock_on_hand_popup +#: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_product_quant_wizard__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: sale_stock_on_hand_popup +#: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_product_quant_wizard__write_date +msgid "Last Updated on" +msgstr "" + #. module: sale_stock_on_hand_popup #: model:ir.model,name:sale_stock_on_hand_popup.model_product_product +#: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_product_quant_wizard__product_id msgid "Product" msgstr "" #. module: sale_stock_on_hand_popup -#: code:addons/sale_stock_on_hand_popup/models/product.py:0 -#, python-format -msgid "Stock Lines" +#: model:ir.model,name:sale_stock_on_hand_popup.model_product_quant_wizard +msgid "Product Quant Wizard" +msgstr "" + +#. module: sale_stock_on_hand_popup +#: model_terms:ir.ui.view,arch_db:sale_stock_on_hand_popup.view_stock_configuration +msgid "Sale Stock on Hand" msgstr "" #. module: sale_stock_on_hand_popup -#. openerp-web -#: code:addons/sale_stock_on_hand_popup/static/src/xml/sale_stock.xml:0 -#, python-format -msgid "View Stock" +#: model:ir.model.fields,field_description:sale_stock_on_hand_popup.field_product_quant_wizard__stock_quant_ids +msgid "Stock Quant" msgstr "" diff --git a/sale_stock_on_hand_popup/models/__init__.py b/sale_stock_on_hand_popup/models/__init__.py index 9649db77a159..e0848eaa7738 100644 --- a/sale_stock_on_hand_popup/models/__init__.py +++ b/sale_stock_on_hand_popup/models/__init__.py @@ -1 +1,2 @@ -from . import product +from . import product_product +from . import res_config_settings diff --git a/sale_stock_on_hand_popup/models/product.py b/sale_stock_on_hand_popup/models/product.py deleted file mode 100644 index b55eb0d2b51a..000000000000 --- a/sale_stock_on_hand_popup/models/product.py +++ /dev/null @@ -1,20 +0,0 @@ -from odoo import _, models - - -class Product(models.Model): - _inherit = "product.product" - - def action_open_quants_show_products(self): - res = self.action_open_quants() - - res.update( - { - "name": _("Stock Lines"), - "context": { - **res.get("context", {}), - "single_product": False, - "edit": False, - }, - } - ) - return res diff --git a/sale_stock_on_hand_popup/models/product_product.py b/sale_stock_on_hand_popup/models/product_product.py new file mode 100644 index 000000000000..90e9cfd53872 --- /dev/null +++ b/sale_stock_on_hand_popup/models/product_product.py @@ -0,0 +1,20 @@ +from odoo import models + + +class Product(models.Model): + _inherit = "product.product" + + def action_open_quants_show_products(self): + self.ensure_one() + return { + "name": self.display_name, + "view_type": "form", + "view_mode": "form", + "res_model": "product.quant.wizard", + "type": "ir.actions.act_window", + "target": "new", + "context": { + **self.env.context, + "default_product_id": self.id, + }, + } diff --git a/sale_stock_on_hand_popup/models/res_config_settings.py b/sale_stock_on_hand_popup/models/res_config_settings.py new file mode 100644 index 000000000000..b3a16b81cf02 --- /dev/null +++ b/sale_stock_on_hand_popup/models/res_config_settings.py @@ -0,0 +1,11 @@ +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + group_show_transit_location_stock_wizard = fields.Boolean( + "Display also transit location lines in sale line stock popup.", + implied_group="sale_stock_on_hand_popup.group_show_transit_location_stock_wizard", + default=False, + ) diff --git a/sale_stock_on_hand_popup/security/ir.model.access.csv b/sale_stock_on_hand_popup/security/ir.model.access.csv new file mode 100644 index 000000000000..f799a79b5ad7 --- /dev/null +++ b/sale_stock_on_hand_popup/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_product_quant_wizard,access_product_quant_wizard,model_product_quant_wizard,base.group_user,1,1,1,1 diff --git a/sale_stock_on_hand_popup/security/security.xml b/sale_stock_on_hand_popup/security/security.xml new file mode 100644 index 000000000000..47e93bfd8289 --- /dev/null +++ b/sale_stock_on_hand_popup/security/security.xml @@ -0,0 +1,9 @@ + + + + Display transit location lines in sale line stock popup + + + diff --git a/sale_stock_on_hand_popup/static/description/index.html b/sale_stock_on_hand_popup/static/description/index.html index 7f5e6d6c0f51..9ac3a9c598f1 100644 --- a/sale_stock_on_hand_popup/static/description/index.html +++ b/sale_stock_on_hand_popup/static/description/index.html @@ -366,7 +366,7 @@

Sale Stock On Hand Popup

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:7e7d0b495f5c5c2c119238bc86c9beee329c4ac57c102e536b6fc4dce6988870 +!! source digest: sha256:c6ca95cb0e31299d67c80eeb03bd994cbbec40d17d4488f71317f6dab9b67b2b !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 OCA/stock-logistics-warehouse Translate me on Weblate Try me on Runboat

This module allows user to check from sale order line all inventory lines related to that product.

@@ -428,6 +428,8 @@

Maintainers

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.

+

Current maintainers:

+

aleuffre renda-dev PicchiSeba

This module is part of the OCA/stock-logistics-warehouse project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

diff --git a/sale_stock_on_hand_popup/static/src/js/qty_at_date_widget.js b/sale_stock_on_hand_popup/static/src/js/qty_at_date_widget.js deleted file mode 100644 index bacdb7913dcb..000000000000 --- a/sale_stock_on_hand_popup/static/src/js/qty_at_date_widget.js +++ /dev/null @@ -1,29 +0,0 @@ -odoo.define("sale_stock_on_hand_popup.QtyAtDateWidget", function (require) { - "use strict"; - - const QtyAtDateWidget = require("sale_stock.QtyAtDateWidget"); - - QtyAtDateWidget.include({ - async _openStock(ev) { - ev.stopPropagation(); - - return this.trigger_up("button_clicked", { - attrs: { - name: "action_open_quants_show_products", - type: "object", - }, - record: this.data.product_id, - }); - }, - - _getContent() { - const $content = this._super.apply(this, arguments); - if ($content) { - $content.on("click", ".action_open_stock", this._openStock.bind(this)); - } - return $content; - }, - }); - - return QtyAtDateWidget; -}); diff --git a/sale_stock_on_hand_popup/static/src/js/stock_on_hand_widget.js b/sale_stock_on_hand_popup/static/src/js/stock_on_hand_widget.js new file mode 100644 index 000000000000..aa7c3389426c --- /dev/null +++ b/sale_stock_on_hand_popup/static/src/js/stock_on_hand_widget.js @@ -0,0 +1,47 @@ +odoo.define("sale_stock_on_hand_popup.StockOnHandWidget", function (require) { + "use strict"; + + var Widget = require("web.Widget"); + var widget_registry = require("web.widget_registry"); + + var StockOnHandWidget = Widget.extend({ + template: "sale_stock_on_hand_popup.qtyOnHand", + events: _.extend({}, Widget.prototype.events, { + "click .fa-arrow-right": "_onClickButton", + }), + + /** + * @override + * @param {Widget|null} parent + * @param {Object} params + */ + init: function (parent, params) { + this.data = params.data; + this.fields = params.fields; + this._super(parent); + }, + + updateState: function (state) { + var candidate = state.data[this.getParent().currentRow]; + if (candidate) { + this.data = candidate.data; + this.renderElement(); + } + }, + + _onClickButton: async function (ev) { + ev.stopPropagation(); + var action = await this._rpc({ + model: "product.product", + method: "action_open_quants_show_products", + args: [[this.data.product_id.data.id]], + }); + action.views = [[false, "form"]]; + return this.do_action(action); + }, + }); + + widget_registry.add("stock_on_hand_widget", StockOnHandWidget); + + return StockOnHandWidget; +}); diff --git a/sale_stock_on_hand_popup/static/src/xml/sale_stock.xml b/sale_stock_on_hand_popup/static/src/xml/sale_stock.xml deleted file mode 100644 index cf2dbae2bab1..000000000000 --- a/sale_stock_on_hand_popup/static/src/xml/sale_stock.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - diff --git a/sale_stock_on_hand_popup/static/src/xml/stock_on_hand_widget.xml b/sale_stock_on_hand_popup/static/src/xml/stock_on_hand_widget.xml new file mode 100644 index 000000000000..a2a156c91a42 --- /dev/null +++ b/sale_stock_on_hand_popup/static/src/xml/stock_on_hand_widget.xml @@ -0,0 +1,8 @@ + + +
+
+ +
+
+
diff --git a/sale_stock_on_hand_popup/tests/test_sale_stock_on_hand_popup.py b/sale_stock_on_hand_popup/tests/test_sale_stock_on_hand_popup.py index ee6ebd460253..9eeb43c89c71 100644 --- a/sale_stock_on_hand_popup/tests/test_sale_stock_on_hand_popup.py +++ b/sale_stock_on_hand_popup/tests/test_sale_stock_on_hand_popup.py @@ -5,20 +5,32 @@ class TestSaleStockOnHandPopup(common.SavepointCase): @classmethod def setUpClass(cls): super().setUpClass() - cls.Product = cls.env["product.product"] - cls.product_1 = cls.env.ref("product.product_product_1") - cls.product_2 = cls.env.ref("product.product_product_2") + cls.product_1 = cls.env.ref("product.product_product_6") + cls.product_2 = cls.env.ref("product.product_product_7") def test_action_open_quants_show_products(self): action_data = self.product_1.action_open_quants_show_products() - self.assertNotEqual( - action_data, - self.product_1.action_open_quants(), - ) - self.assertEqual("Stock Lines", action_data.get("name")) + self.assertEqual(self.product_1.display_name, action_data.get("name")) context = action_data.get("context") - self.assertFalse(context.get("single_product", True)) - self.assertFalse(context.get("edit", True)) + self.assertEqual(self.product_1.id, context.get("default_product_id")) + + def test_get_stock_quant(self): + wiz_prod_1 = self.env["product.quant.wizard"].create( + { + "product_id": self.product_1.id, + } + ) + wiz_prod_2 = self.env["product.quant.wizard"].create( + { + "product_id": self.product_2.id, + } + ) + (wiz_prod_1 | wiz_prod_2)._compute_stock_quant_ids() + + self.assertNotEqual(wiz_prod_1.stock_quant_ids, wiz_prod_2.stock_quant_ids) + self.assertNotEqual( + wiz_prod_1.stock_quant_ids, wiz_prod_1.product_id.stock_quant_ids + ) diff --git a/sale_stock_on_hand_popup/views/assets.xml b/sale_stock_on_hand_popup/views/assets.xml new file mode 100644 index 000000000000..d6c4925eb7a8 --- /dev/null +++ b/sale_stock_on_hand_popup/views/assets.xml @@ -0,0 +1,15 @@ + + +