diff --git a/.gitignore b/.gitignore index 13d1490..f47da3a 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ __pycache__/ *.py[cod] *$py.class +*.py~ # C extensions *.so diff --git a/backend_theme_v12/LICENSE.txt b/backend_theme_v12/LICENSE.txt new file mode 100644 index 0000000..0a04128 --- /dev/null +++ b/backend_theme_v12/LICENSE.txt @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/backend_theme_v12/__init__.py b/backend_theme_v12/__init__.py new file mode 100644 index 0000000..724cd13 --- /dev/null +++ b/backend_theme_v12/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- +from . import models +from . import controllers \ No newline at end of file diff --git a/backend_theme_v12/__manifest__.py b/backend_theme_v12/__manifest__.py new file mode 100644 index 0000000..063fabf --- /dev/null +++ b/backend_theme_v12/__manifest__.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# Copyright 2016, 2019 Openworx +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). + +{ + "name": "Obook Openworx Material Backend Theme V12", + "summary": "Oboo Openworx Material Backend Theme V12 ", + "version": "12.0.0.3", + "category": "Theme/Backend", + "website": "http://www.openworx.nl", + "description": """ + Obook Openworx Material Backend theme for Odoo 12.0 community edition. + """, + 'images':[ + 'images/screen.png' + ], + "author": "Openworx", + "license": "LGPL-3", + "installable": True, + "depends": [ + 'web', + 'web_responsive', + + ], + "data": [ + 'views/assets.xml', + 'views/res_company_view.xml', + 'views/users.xml', + 'views/sidebar.xml', + #'views/web.xml', + ], + 'live_test_url': 'https://youtu.be/JX-ntw2ORl8' + +} + diff --git a/backend_theme_v12/__manifest__.py~ b/backend_theme_v12/__manifest__.py~ new file mode 100644 index 0000000..c26d8bc --- /dev/null +++ b/backend_theme_v12/__manifest__.py~ @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# Copyright 2016, 2019 Openworx +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). + +{ + "name": "Openworx Material Backend Theme V12", + "summary": "Openworx Material Backend Theme V12 ", + "version": "12.0.0.3", + "category": "Theme/Backend", + "website": "http://www.openworx.nl", + "description": """ + Openworx Material Backend theme for Odoo 12.0 community edition. + """, + 'images':[ + 'images/screen.png' + ], + "author": "Openworx", + "license": "LGPL-3", + "installable": True, + "depends": [ + 'web', + 'web_responsive', + + ], + "data": [ + 'views/assets.xml', + 'views/res_company_view.xml', + 'views/users.xml', + 'views/sidebar.xml', + #'views/web.xml', + ], + 'live_test_url': 'https://youtu.be/JX-ntw2ORl8' + +} + diff --git a/backend_theme_v12/controllers/__init__.py b/backend_theme_v12/controllers/__init__.py new file mode 100644 index 0000000..cd4d6a8 --- /dev/null +++ b/backend_theme_v12/controllers/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +from . import main \ No newline at end of file diff --git a/backend_theme_v12/controllers/main.py b/backend_theme_v12/controllers/main.py new file mode 100644 index 0000000..e899e58 --- /dev/null +++ b/backend_theme_v12/controllers/main.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# Copyright 2016, 2019 Openworx +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). + +import base64 +from odoo.http import Controller, request, route +from werkzeug.utils import redirect + +DEFAULT_IMAGE = '/backend_theme_v12/static/src/img/material-background.jpg' + +class DasboardBackground(Controller): + + @route(['/dashboard'], type='http', auth='user', website=False) + def dashboard(self, **post): + user = request.env.user + company = user.company_id + if company.dashboard_background: + image = base64.b64decode(company.dashboard_background) + else: + return redirect(DEFAULT_IMAGE) + + return request.make_response( + image, [('Content-Type', 'image')]) \ No newline at end of file diff --git a/backend_theme_v12/images/screen.png b/backend_theme_v12/images/screen.png new file mode 100644 index 0000000..8e746db Binary files /dev/null and b/backend_theme_v12/images/screen.png differ diff --git a/backend_theme_v12/models/__init__.py b/backend_theme_v12/models/__init__.py new file mode 100644 index 0000000..c5e3353 --- /dev/null +++ b/backend_theme_v12/models/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- +from . import res_company +from . import res_users \ No newline at end of file diff --git a/backend_theme_v12/models/res_company.py b/backend_theme_v12/models/res_company.py new file mode 100644 index 0000000..5940bcc --- /dev/null +++ b/backend_theme_v12/models/res_company.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# Copyright 2016, 2019 Openworx +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). + +from odoo import models, fields + +class ResCompany(models.Model): + + _inherit = 'res.company' + + dashboard_background = fields.Binary(attachment=True) \ No newline at end of file diff --git a/backend_theme_v12/models/res_users.py b/backend_theme_v12/models/res_users.py new file mode 100644 index 0000000..fd3ecd6 --- /dev/null +++ b/backend_theme_v12/models/res_users.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Copyright 2016, 2019 Openworx +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). + +from odoo import models, fields + +class ResUsers(models.Model): + + _inherit = 'res.users' + + sidebar_visible = fields.Boolean("Show App Sidebar", default=True) + + def __init__(self, pool, cr): + """ Override of __init__ to add access rights on notification_email_send + and alias fields. Access rights are disabled by default, but allowed + on some specific fields defined in self.SELF_{READ/WRITE}ABLE_FIELDS. + """ + init_res = super(ResUsers, self).__init__(pool, cr) + # duplicate list to avoid modifying the original reference + type(self).SELF_WRITEABLE_FIELDS = list(self.SELF_WRITEABLE_FIELDS) + type(self).SELF_WRITEABLE_FIELDS.extend(['sidebar_visible']) + # duplicate list to avoid modifying the original reference + type(self).SELF_READABLE_FIELDS = list(self.SELF_READABLE_FIELDS) + type(self).SELF_READABLE_FIELDS.extend(['sidebar_visible']) + return init_res \ No newline at end of file diff --git a/backend_theme_v12/static/description/crm.png b/backend_theme_v12/static/description/crm.png new file mode 100644 index 0000000..d191baa Binary files /dev/null and b/backend_theme_v12/static/description/crm.png differ diff --git a/backend_theme_v12/static/description/crm_mobile.png b/backend_theme_v12/static/description/crm_mobile.png new file mode 100644 index 0000000..93ab27a Binary files /dev/null and b/backend_theme_v12/static/description/crm_mobile.png differ diff --git a/backend_theme_v12/static/description/desktop.png b/backend_theme_v12/static/description/desktop.png new file mode 100644 index 0000000..76fa555 Binary files /dev/null and b/backend_theme_v12/static/description/desktop.png differ diff --git a/backend_theme_v12/static/description/icon.png b/backend_theme_v12/static/description/icon.png new file mode 100644 index 0000000..4218e4e Binary files /dev/null and b/backend_theme_v12/static/description/icon.png differ diff --git a/backend_theme_v12/static/description/index.html b/backend_theme_v12/static/description/index.html new file mode 100644 index 0000000..cc7c7d0 --- /dev/null +++ b/backend_theme_v12/static/description/index.html @@ -0,0 +1,51 @@ +
+
+
+

Openworx Material Backend Theme

+

The first Odoo 12.0 community backend theme

+
+

Enterprise look'n'feel and App Sidebar

+

+

App Dashboard

+

+

Quick search in App Dashboard

+

+

Side Chatter on widescreen

+

+

Fully responsive

+

+

+
+
+
+
+ +
+
+ +
+
+
+
+

Remark: It is possible that the Odoo service needs to be restarted after install.

+
+
+
+
+ +
+
+ +
+
+
+
+

Help & Support

+
+ Website: Openworx
+ Contact: Email Support
+
+
+
+
+ diff --git a/backend_theme_v12/static/description/mobile.png b/backend_theme_v12/static/description/mobile.png new file mode 100644 index 0000000..4bcf6a7 Binary files /dev/null and b/backend_theme_v12/static/description/mobile.png differ diff --git a/backend_theme_v12/static/description/search.png b/backend_theme_v12/static/description/search.png new file mode 100644 index 0000000..0054611 Binary files /dev/null and b/backend_theme_v12/static/description/search.png differ diff --git a/backend_theme_v12/static/description/sidebar.png b/backend_theme_v12/static/description/sidebar.png new file mode 100644 index 0000000..022f8d6 Binary files /dev/null and b/backend_theme_v12/static/description/sidebar.png differ diff --git a/backend_theme_v12/static/src/font/Roboto-Regular.ttf b/backend_theme_v12/static/src/font/Roboto-Regular.ttf new file mode 100644 index 0000000..8c082c8 Binary files /dev/null and b/backend_theme_v12/static/src/font/Roboto-Regular.ttf differ diff --git a/backend_theme_v12/static/src/img/checked.svg b/backend_theme_v12/static/src/img/checked.svg new file mode 100644 index 0000000..5125976 --- /dev/null +++ b/backend_theme_v12/static/src/img/checked.svg @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/backend_theme_v12/static/src/img/material-background.jpg b/backend_theme_v12/static/src/img/material-background.jpg new file mode 100644 index 0000000..d38241a Binary files /dev/null and b/backend_theme_v12/static/src/img/material-background.jpg differ diff --git a/backend_theme_v12/static/src/js/sidebar-toggle.js b/backend_theme_v12/static/src/js/sidebar-toggle.js new file mode 100644 index 0000000..2330970 --- /dev/null +++ b/backend_theme_v12/static/src/js/sidebar-toggle.js @@ -0,0 +1,25 @@ +/* Copyright 2017 Openworx. + * License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */ + +odoo.define('backend_theme_v12.sidebar-toggle', function (require) { + "use strict"; + + var session = require('web.session'); + var rpc = require('web.rpc'); + var id = session.uid; + rpc.query({ + model: 'res.users', + method: 'read', + args: [[id], ['sidebar_visible']], + }).then(function(res) { + var dbfield = res[0]; + var toggle = dbfield.sidebar_visible; + if (toggle === true) { + $("#app-sidebar").removeClass("toggle-sidebar"); + } else { + $("#app-sidebar").addClass("toggle-sidebar"); + }; + }); + +}); + diff --git a/backend_theme_v12/static/src/js/sidebar.js b/backend_theme_v12/static/src/js/sidebar.js new file mode 100644 index 0000000..176d151 --- /dev/null +++ b/backend_theme_v12/static/src/js/sidebar.js @@ -0,0 +1,33 @@ +/* Copyright 2016, 2019 Openworx. + * License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */ + +// Check if debug mode is active and then add debug into URL when clicking on the App sidebar +odoo.define('backend_theme_v12.Sidebar', function(require) { + "use strict"; + var core = require('web.core'); + var session = require('web.session'); + var Widget = require('web.Widget'); + $(function() { + (function($) { + $.addDebug = function(url) { + url = url.replace(/(.{4})/, "$1?debug"); + return url; + } + $.addDebugWithAssets = function(url) { + url = url.replace(/(.{4})/, "$1?debug=assets"); + return url; + } + $.delDebug = function(url) { + var str = url.match(/web(\S*)#/); + url = url.replace("str/g", ""); + return url; + } + }) (jQuery); + $("#sidebar a").each(function() { + var url = $(this).attr('href'); + if (session.debug == 1) $(this).attr('href', $.addDebug(url)); + if (session.debug == 'assets') $(this).attr('href', $.addDebugWithAssets(url)); + if (session.debug == false) $(this).attr('href', $.delDebug(url)); + }); + }); +}); diff --git a/backend_theme_v12/static/src/scss/sidebar.scss b/backend_theme_v12/static/src/scss/sidebar.scss new file mode 100644 index 0000000..1393964 --- /dev/null +++ b/backend_theme_v12/static/src/scss/sidebar.scss @@ -0,0 +1,69 @@ +/* Copyright 2016, 2018 Openworx. + * License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */ + +/* App Sidebar Panel */ + +$odoo-sidebar-width: 180px; + +.app-sidebar-panel { + flex: 0 0 $odoo-sidebar-width; + background-color: $gray-base; + height: 100% !important; + overflow-y: auto; + @media (max-width: 768px) { + display: none; + } +} + +/* @media (min-width: 768px) { + .o_menu_apps { + display: none !important; + } +} */ + +//.app-sidebar-panel:hover { +// @include o-flex(0, 0, $odoo-sidebar-width); +//} + +.app-sidebar { + white-space: nowrap; + padding: 0; + .app-sidebar-menu { + list-style: none; + margin: 0; + padding: 0; + >li { + display: block; + margin: 0; + padding: 0; + border: 0px; + >a { + display: block; + position: relative; + margin: 0; + border: 0px; + padding: 8px 15px; + text-decoration: none; + font-size: 13px; + font-weight: 300; + color: $gray-lighter; + overflow: hidden; + text-overflow: ellipsis; + } + } + > li:hover > a{ + background: darken(#0099ff, 15%); + color: #fff; + } + } +} + +.app-sidebar-menuitem { + width: 23px; + height: 22px; + margin-right: 5px; +} + +.toggle-sidebar { + margin-left: 0px - $odoo-sidebar-width; +} \ No newline at end of file diff --git a/backend_theme_v12/static/src/scss/style.scss b/backend_theme_v12/static/src/scss/style.scss new file mode 100644 index 0000000..3cb8088 --- /dev/null +++ b/backend_theme_v12/static/src/scss/style.scss @@ -0,0 +1,492 @@ +/* Copyright 2016, 2019 Openworx. + * License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */ + + +@font-face { + font-family: Roboto; + src: url(/backend_theme_v12/static/src/font/Roboto-Regular.ttf) +} + + +$gray-base: #000; +$gray-darker: lighten($gray-base, 13.5%); +$gray-dark: #666; +$gray: #777; +$gray-light: #AEA79F; +$gray-lighter: lighten($gray-base, 93.5%); + + +// Change colors here + +// Odoo EE colors +//$brand-primary: #875a7b; +//$brand-secondary: #00A09D; +//------------------------ +$brand-primary: #008DCA; +$brand-secondary: #5EC269; +//------------------------ + + +$brand-primary-dark: darken($brand-primary, 10%); +$brand-secondary-dark: darken($brand-secondary, 10%); + +body { + + font-family: "Roboto"; +} + +.o_loading { + background-color: $brand-primary; +} + +.o_main_navbar { + background-color : $brand-primary; +} + +.o_main_navbar > a:hover, .o_main_navbar > a:focus, .o_main_navbar > button:hover, .o_main_navbar > button:focus { + + background-color: $brand-primary-dark; + color: inherit; + +} + +.o_main_navbar > ul > li > a:hover, .o_main_navbar > ul > li > label:hover { + background-color: $brand-primary-dark; +} + +.o_main_navbar .show .dropdown-toggle { + + background-color: $brand-primary-dark; + +} + +// Fix color Add file button +.o_control_panel .o_cp_sidebar .o_hidden_input_file .o_form_binary_form span { + color: $gray-dark !important; +} + +// Buttons + +.btn { + border-radius: 0px; +} + +.btn-primary { + + color: #fff; + background-color: $brand-secondary; + border-color: $brand-secondary; + +} + +.btn-primary:hover { + + color: #fff; + background-color: $brand-secondary-dark; + border-color: $brand-secondary-dark; +} + +.btn-secondary { + border: none; +} + +.btn:active, .btn.active { + -webkit-box-shadow: none; + box-shadow: none; + background-color: #eee !important; +} + +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: none; + box-shadow: none; + background-color: #eee !important; +} + + +.btn-link { + color: $brand-secondary; +} + +.o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.btn-primary.disabled { + color: $brand-primary; +} + +.o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button:not(.disabled):hover { + color: $brand-primary; +} + +.o_dropdown_toggler_btn, .o_dropdown_toggler_btn:hover, .o_dropdown_toggler_btn:focus, .o_dropdown_toggler_btn:hover, .o_dropdown_toggler_btn:focus, .btn-icon, .o_graph_button { + text-transform: none !important; + color: $gray-dark !important; + background-color: transparent !important; + border: none !important; +} + +.dropdown-menu { + border-radius: 0px; +} + +oe_highlight { + color: #ffffff !important; + background-color: $brand-primary !important; +} + +.o_external_button { + color: $brand-primary !important; + background: #ffffff; +} + +.o_button_icon { + color: $brand-primary !important; +} + + +// Calendar + +.o_calendar_container .o_calendar_sidebar_container .ui-datepicker table .ui-state-active { + background: none; + background-color: $brand-primary !important; + color: #ffffff !important; +} +.o_calendar_container .o_calendar_sidebar_container .ui-datepicker table .ui-state-default { + color: $brand-primary; +} + +.datepicker { + .table-sm { + > thead { + color: white; + background-color: $brand-primary; + + > tr { + &:first-child { + th:hover { + color: white; + background-color: darken($brand-primary, 10%); + } + } + + &:last-child { + color: $o-datepicker-week-color; + background-color: $o-datepicker-week-bg-color; + } + > th { + border-radius: 0; + } + } + } + + > tbody { + > tr { + > td { + &.active, .active { + background-color: $o-brand-primary; + border-radius: 100px; + } + + &.today:before { + border-bottom-color: $o-brand-primary; + } + } + } + } + } +} + +.datepicker .table-sm > tbody > tr > td.active, .datepicker .table-sm > tbody > tr > td .active { + background-color: $brand-primary; + border-radius: 0; +} + +// Filter search label + +.o_searchview { + .o_searchview_facet { + + background-color: #ffffff; + + .o_searchview_facet_label { + background-color: $brand-primary; + } + } +} + +a { + + color: $brand-secondary; + text-decoration: none; + background-color: transparent; + -webkit-text-decoration-skip: objects; + +} + +a:hover { + + color: $brand-secondary-dark; + text-decoration: none; + +} + + +.o_control_panel { + background-color: #ffffff; +} + +.breadcrumb { + background-color: inherit; +} + +// Input + +input[type="text"], input[type="password"], input[type="number"], +textarea, select, .o_form_view.o_form_editable .o_form_field_many2manytags, +.o_searchview +{ + border: 0; + border-radius: 0; + border-bottom: 1px solid #ccc; +} + +.o_web_client input:focus, .o_web_client textarea:focus, .o_web_client select:focus { + outline: none; + border-bottom: 2px solid $brand-primary; +} + +.o_input { + border: 1px solid #ccc; + border-top-style: none; + border-right-style: none; + border-left-style: none; + color: $gray; +} + +.o_field_widget { + &.o_field_many2one .o_external_button { + color: $brand-secondary + } +} + +.o_required_modifier { + &.o_input, .o_input { + background-color: lighten($brand-primary, 35%) ! important; + } +} + +.input-group-text { + background-color: transparent; + color: #fff; + border: 0px; +} + +// Listview + +.o_list_view.table { + border: none; +} +.o_list_view.table thead, .o_list_view.table tfoot, .o_list_view.table td,.o_list_view.table th { + border: none; +} + +.o_list_view.table thead { + background-color: #e2e2e0; +} + +.o_list_view.table thead > tr > th.o_column_sortable:hover { + background-color: #D6D6D3; +} + +.o_list_view.table tbody tr.o_group_header { + background-color: #dfdfdf; + background-image: none; + border-top: 1px solid #e2e2e0; +} + +.table-striped > tbody > tr:nth-of-type(2n+1) { + background-color: #eef0f0; +} + +.o_list_view tfoot tr:nth-child(1) td { + background-color: $brand-primary !important; + color: #fff !important; +} + + +.ui-autocomplete .ui-menu-item.ui-state-focus { + background-color: #dee2e6; +} + +.ui-menu-item a:hover,.ui-menu-item a:focus { + color: #666666 !important; +} +.ui-autocomplete .ui-menu-item.ui-state-focus a{ + color: #666666 !important; +} + +.o_form_view .oe_button_box .oe_stat_button .o_stat_info .o_stat_value { + color: $brand-primary; +} + +.o_form_view .o_horizontal_separator { + color: #666666; + font-weight: bold; +} + +// Forms + +.o_form_view { + + .o_form_sheet_bg { + background: none !important; + background-color: #F9F9F9 !important; + padding: 0px; + .o_form_sheet { + border: 1px solid #d9d7d7; + box-shadow: 0 5px 20px -15px black; + } + } + + .o_form_statusbar { + //margin: -16px; + + .o_statusbar_status { + > .o_arrow_button { + background: #ffffff; + } + } + } +} + +// App Dashboard + +/* .o_menu_apps .dropdown-menu.show { + background: transparent url('/dashboard') no-repeat scroll center center / cover; + +} */ + +.o_menu_apps .dropdown-menu.show { + background: url(/dashboard); + background-origin: border-box; + background-size: cover; + height: calc(100vh); + max-height: calc(100vh); + border-top: $o-navbar-height solid transparent; + top: 0 !important; +} + +.o_main_navbar > ul.o_menu_systray { + float: right; + position: relative; + z-index: 200; +} + +.fa-th-large::before { + content: "\f00a"; +} + +.o_menu_apps .full { + width: 46px; + font-size: 18px; + text-align: center; + position: relative; + z-index: 200; +} + +.o-app-name { + color: #fff; + font-size: 15px; + font-weight: 400; + text-overflow: ellipsis; + white-space: nowrap; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.45); +} + +.o_menu_apps .dropdown-menu.show .o-app-icon { + padding: 20px 0 0; +} + +.o_menu_apps .dropdown-menu.show .o-app-icon:hover { + box-shadow: 0 8px 15px -10px black; + transform: translateY(-1px); +} + +.dropdown-item.o_app { + background: transparent; +} + +.o-menu-search-result { + color: #fff; +} + +// Chat window + +.o_thread_window .o_thread_window_header { + background-color: $brand-primary; +} + +// Formview + + +$gray-lighter-darker: #d9d7d7; +$o-statbutton-height: 40px; +$o-statbutton-spacing: 6px; + +.o_form_view { + @mixin o-form-sheet-negative-margin() { + margin-left: -$o-horizontal-padding; + margin-right: -$o-horizontal-padding; + margin-top: -#{$o-horizontal-padding +1}; + } + + .o_form_uri { + display: inline-block; + + color: $gray; + + &:first-line { + color: $link-color; + } + + &:hover { + color: darken($link-color, 15%); // hack required on chrome + + &:first-line { + color: darken($link-color, 15%); + } + } + } + + .oe_avatar { + float: right; + + >img { + max-height: 90px; + max-width: 90px; + margin-bottom: 10px; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4); + border: none; + } + + +.oe_title { + padding-right: 0px; + padding-left: 0px; + } + } + +} + +// Override `@include media-breakpoint-up` in module `web_responsive` +@include media-breakpoint-up(md) { + .o_form_view .oe_button_box + .oe_avatar + .oe_title { + /* Add 110px in the calculation for the avatar space */ + width: calc(100% - 400px - 110px); + min-width: 400px; + max-width: 650px; + } + /* Same correction for res.users .oe_title div */ + .o_form_view .o_field_integer + .oe_button_box + .o_form_header + .o_field_boolean + + .o_form_header + .oe_avatar + .oe_title { + width: calc(100% - 400px - 110px); + min-width: 400px; + max-width: 650px; + } +} diff --git a/backend_theme_v12/views/assets.xml b/backend_theme_v12/views/assets.xml new file mode 100644 index 0000000..c2c9a0a --- /dev/null +++ b/backend_theme_v12/views/assets.xml @@ -0,0 +1,20 @@ + + + + + + + + diff --git a/base_search_custom_field_filter/views/ir_ui_custom_field_filter_views.xml b/base_search_custom_field_filter/views/ir_ui_custom_field_filter_views.xml new file mode 100644 index 0000000..65c89db --- /dev/null +++ b/base_search_custom_field_filter/views/ir_ui_custom_field_filter_views.xml @@ -0,0 +1,32 @@ + + + + + + ir.ui.custom.field.filter + + + + + + + + + + + + + + + + diff --git a/pos_product_available/README.rst b/pos_product_available/README.rst new file mode 100644 index 0000000..71dcbed --- /dev/null +++ b/pos_product_available/README.rst @@ -0,0 +1,35 @@ +.. image:: https://itpp.dev/images/infinity-readme.png + :alt: Tested and maintained by IT Projects Labs + :target: https://itpp.dev + +.. image:: https://img.shields.io/badge/license-MIT-blue.svg + :target: https://opensource.org/licenses/MIT + :alt: License: MIT + +======================= + POS: show product qty +======================= + +Adds available quantity at products in POS + +Module potentialy isn't compatible with modules that overrides `get_price` method in JS + +Questions? +========== + +To get an assistance on this module contact us by email :arrow_right: help@itpp.dev + +Contributors +============ +* `Ivan Yelizariev `__ + + +Further information +=================== + +Odoo Apps Store: https://apps.odoo.com/apps/modules/12.0/pos_product_available/ + + +Notifications on updates: `via Atom `_, `by Email `_ + +Tested on `Odoo 12.0 `_ diff --git a/pos_product_available/__init__.py b/pos_product_available/__init__.py new file mode 100644 index 0000000..1d99e04 --- /dev/null +++ b/pos_product_available/__init__.py @@ -0,0 +1,3 @@ +# License MIT (https://opensource.org/licenses/MIT). + +from . import models diff --git a/pos_product_available/__manifest__.py b/pos_product_available/__manifest__.py new file mode 100644 index 0000000..d5ef6b3 --- /dev/null +++ b/pos_product_available/__manifest__.py @@ -0,0 +1,30 @@ +# Copyright 2014-2018 Ivan Yelizariev +# Copyright 2017 Gabbasov Dinar +# Copyright 2018-2019 Kolushov Alexandr +# Copyright 2018 Ildar Nasyrov +# License MIT (https://opensource.org/licenses/MIT). +{ + "name": """POS: show product qty""", + "summary": """Adds available quantity at products in POS""", + "category": "Point Of Sale", + # "live_test_url": "http://apps.it-projects.info/shop/product/DEMO-URL?version={ODOO_BRANCH}", + "images": ["images/pos_product_available.jpg"], + "version": "12.0.1.1.1", + "application": False, + "author": "IT-Projects LLC, Ivan Yelizariev", + "support": "apps@itpp.dev", + "website": "https://apps.odoo.com/apps/modules/12.0/pos_product_available/", + "license": "Other OSI approved licence", # MIT + # "price": 9.00, + # "currency": "EUR", + "depends": ["point_of_sale", "stock"], + "external_dependencies": {"python": [], "bin": []}, + "data": ["data.xml", "views/views.xml"], + "qweb": ["static/src/xml/pos.xml"], + "post_load": None, + "pre_init_hook": None, + "post_init_hook": None, + "uninstall_hook": None, + "auto_install": False, + "installable": True, +} diff --git a/pos_product_available/data.xml b/pos_product_available/data.xml new file mode 100644 index 0000000..bcf97fa --- /dev/null +++ b/pos_product_available/data.xml @@ -0,0 +1,34 @@ + + + + + + + + + diff --git a/product_retail_cm/__init__.py b/product_retail_cm/__init__.py new file mode 100644 index 0000000..899bcc9 --- /dev/null +++ b/product_retail_cm/__init__.py @@ -0,0 +1,2 @@ +from . import models + diff --git a/product_retail_cm/__manifest__.py b/product_retail_cm/__manifest__.py new file mode 100644 index 0000000..5d29d6c --- /dev/null +++ b/product_retail_cm/__manifest__.py @@ -0,0 +1,36 @@ +{ + 'name': 'Product Retail', + 'category': 'Product', + 'summary': 'Gestiona productos en distribución / Venta a minoristas', + 'version': '12.0.1.0.0', + 'description': """ + +Gestiona productos en distribución / Venta a minoristas +================================================== +* Añade campo a product: En Distribución y margin de minoristas. +* Filtro de productos en distribución en las vistas de productos + +ToDo: +* Configuración para elegir lista de precios a minoristas +* Los minoristas se configuran a mano con esa tarifa, público normal con la Tarifa Pública por efecto +* los productos con margen configurado se agregan en esa tarifa con el descuento marcado +* Impide la venta a minoristas de artículos que no están en distribución +""", + 'author': 'Criptomart', + 'depends': [ + 'product', + ], + 'external_dependencies': {'python': [], 'bin': []}, + 'data': [ + 'views/product.xml', + ], + 'qweb': [], + 'demo': [], + 'installable': True, + 'auto_install': False, + 'application': False, + "post_load": None, + "pre_init_hook": None, + "post_init_hook": None, + "uninstall_hook": None, +} diff --git a/product_retail_cm/models/__init__.py b/product_retail_cm/models/__init__.py new file mode 100644 index 0000000..b6e3d55 --- /dev/null +++ b/product_retail_cm/models/__init__.py @@ -0,0 +1,4 @@ +from . import product_template + + + diff --git a/product_retail_cm/models/product_template.py b/product_retail_cm/models/product_template.py new file mode 100644 index 0000000..5bb5375 --- /dev/null +++ b/product_retail_cm/models/product_template.py @@ -0,0 +1,14 @@ +# Copyright (C) 2022: Criptomart (https://criptomart.net) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +#import logging + +from odoo import tools, models, fields, api, _ + +#_logger = logging.getLogger(__name__) + +class ProductTemplate(models.Model): + _inherit = "product.template" + + in_distribution = fields.Boolean('En distribución') + retail_margin = fields.Float('Margen aplicado a minoristas') diff --git a/product_retail_cm/views/product.xml b/product_retail_cm/views/product.xml new file mode 100644 index 0000000..0400f61 --- /dev/null +++ b/product_retail_cm/views/product.xml @@ -0,0 +1,42 @@ + + + + + + + product.template.reatil.form + product.template + + + +
+ +
+
+ +
+
+ + + view.product.search.form.inherit.distribution + product.template + + + + + + + + + +
+
diff --git a/product_sequence/README.rst b/product_sequence/README.rst new file mode 100644 index 0000000..58429c6 --- /dev/null +++ b/product_sequence/README.rst @@ -0,0 +1,101 @@ +================ +Product Sequence +================ + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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%2Fproduct--attribute-lightgray.png?logo=github + :target: https://github.com/OCA/product-attribute/tree/12.0/product_sequence + :alt: OCA/product-attribute +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/product-attribute-12-0/product-attribute-12-0-product_sequence + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/135/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows to associate a sequence to the product reference. +The reference (default code) is unique (SQL constraint) and required. + +You can optionally specify different sequences for different product +categories. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +To specify a different sequence for a product category proceed as follows: + +#. Go to the a Product Category form view. + (**note:** you will need to install Inventory app to be able to access to + the form view, *Inventory > Configuration > Products > Products Categories*; + or create a menuitem manually). +#. Fill the *Prefix for Product Internal Reference* as desired. +#. Under the settings (Settings -> General Settings -> Products), you can specify + whether the prefix of the parent category should be used if no prefix has been + specified for the category. + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/135/12.0 + +Bug Tracker +=========== + +Bugs are tracked on `GitHub 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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Zikzakmedia SL +* Sodexis + +Contributors +~~~~~~~~~~~~ + +* Angel Moya +* Graeme Gellatly +* Sodexis +* Lois Rilo +* Sudhir Arya +* Alexandre Díaz + +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/product-attribute `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/product_sequence/__init__.py b/product_sequence/__init__.py new file mode 100644 index 0000000..6d58305 --- /dev/null +++ b/product_sequence/__init__.py @@ -0,0 +1,2 @@ +from . import models +from .hooks import pre_init_hook diff --git a/product_sequence/__manifest__.py b/product_sequence/__manifest__.py new file mode 100644 index 0000000..3736a23 --- /dev/null +++ b/product_sequence/__manifest__.py @@ -0,0 +1,25 @@ +# Copyright 2004 Tiny SPRL +# Copyright 2016 Sodexis +# Copyright 2018 Eficent Business and IT Consulting Services S.L. +# (http://www.eficent.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + 'name': 'Product Sequence', + 'version': '12.0.2.0.2', + 'author': "Zikzakmedia SL,Sodexis,Odoo Community Association (OCA)", + 'website': 'https://github.com/OCA/product-attribute', + 'license': 'AGPL-3', + 'category': 'Product', + 'depends': [ + 'product', + 'product_code_unique', + ], + 'data': [ + 'data/product_sequence.xml', + 'views/product_category.xml', + 'views/res_config_settings_views.xml', + ], + 'pre_init_hook': 'pre_init_hook', + 'installable': True, +} diff --git a/product_sequence/data/product_sequence.xml b/product_sequence/data/product_sequence.xml new file mode 100644 index 0000000..e2c6c44 --- /dev/null +++ b/product_sequence/data/product_sequence.xml @@ -0,0 +1,11 @@ + + + + + Product + product.product + + PR/ + + + diff --git a/product_sequence/hooks.py b/product_sequence/hooks.py new file mode 100644 index 0000000..d56dccc --- /dev/null +++ b/product_sequence/hooks.py @@ -0,0 +1,18 @@ +# Copyright 2004 Tiny SPRL +# Copyright 2016 Sodexis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + + +def pre_init_hook(cr): + """ + Updates existing codes matching the default '/' or + empty. Primarily this ensures installation does not + fail for demo data. + :param cr: database cursor + :return: void + """ + cr.execute( + "UPDATE product_product " + "SET default_code = '!!mig!!' || id " + "WHERE default_code IS NULL OR default_code = '/';" + ) diff --git a/product_sequence/i18n/ar.po b/product_sequence/i18n/ar.po new file mode 100644 index 0000000..e358282 --- /dev/null +++ b/product_sequence/i18n/ar.po @@ -0,0 +1,111 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2016-11-01 20:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Arabic (https://www.transifex.com/oca/teams/23907/ar/)\n" +"Language: ar\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "مصنّع" diff --git a/product_sequence/i18n/bg.po b/product_sequence/i18n/bg.po new file mode 100644 index 0000000..0a20c1f --- /dev/null +++ b/product_sequence/i18n/bg.po @@ -0,0 +1,110 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2016-11-01 20:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Bulgarian (https://www.transifex.com/oca/teams/23907/bg/)\n" +"Language: bg\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "Производител" diff --git a/product_sequence/i18n/bs.po b/product_sequence/i18n/bs.po new file mode 100644 index 0000000..d58f0d1 --- /dev/null +++ b/product_sequence/i18n/bs.po @@ -0,0 +1,111 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2016-11-01 20:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Bosnian (https://www.transifex.com/oca/teams/23907/bs/)\n" +"Language: bs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "Proizvođač" diff --git a/product_sequence/i18n/ca.po b/product_sequence/i18n/ca.po new file mode 100644 index 0000000..502d5e7 --- /dev/null +++ b/product_sequence/i18n/ca.po @@ -0,0 +1,117 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-05-05 02:44+0000\n" +"PO-Revision-Date: 2021-02-15 13:45+0000\n" +"Last-Translator: claudiagn \n" +"Language-Team: Catalan (https://www.transifex.com/oca/teams/23907/ca/)\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "-copiar" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "Companyies" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "Paràmetres de configuració" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "Referència interna" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "Prefix de referència interna del producte" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" +"Prefix utilitzat per generar la referència interna pels productes creats amb " +"aquesta categoria. Si fós en blanc la seqüència per defecte serà utilitzada." + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "Producte" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "Categoria de producte" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "Seqüència de producte" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "Seqüència" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" +"Configura per '/' i guarda si vols proposar una nova referència interna." + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" +"Aquest camp contè la informació relacionada amb el numerament de les " +"entrades d'aquest diari." + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "Utilitza categories pare per determinar el prefixe" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" +"Utilitzeu les categories pares per determinar el prefix si la categoria\n" +" no té cap configuració per al prefix." + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" +"Utilitzeu les categories pares per determinar el prefix si la categoria no " +"té cap configuració per al prefix." diff --git a/product_sequence/i18n/cs.po b/product_sequence/i18n/cs.po new file mode 100644 index 0000000..be691de --- /dev/null +++ b/product_sequence/i18n/cs.po @@ -0,0 +1,110 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2016-11-01 20:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Czech (https://www.transifex.com/oca/teams/23907/cs/)\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "Výrobce" diff --git a/product_sequence/i18n/da.po b/product_sequence/i18n/da.po new file mode 100644 index 0000000..f345071 --- /dev/null +++ b/product_sequence/i18n/da.po @@ -0,0 +1,110 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2016-11-01 20:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Danish (https://www.transifex.com/oca/teams/23907/da/)\n" +"Language: da\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "Producent" diff --git a/product_sequence/i18n/de.po b/product_sequence/i18n/de.po new file mode 100644 index 0000000..6c227e0 --- /dev/null +++ b/product_sequence/i18n/de.po @@ -0,0 +1,118 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-05-05 02:44+0000\n" +"PO-Revision-Date: 2020-02-20 19:13+0000\n" +"Last-Translator: Ben Brich \n" +"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.10\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "-kopie" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "Interne Referenz" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "Präfix interen Referenz Produkt" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" +"Präfix der bei der Erstellung von Produkten in dieser Produktkategorie " +"verwendet wird. Wenn kein Präfix definiert ist, wird die Standardsequenz " +"verwendet." + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "Produkt" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "Produktkategorie" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "Produktsequenz" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" +"Setzten sie den Wert auf '/' und speichern Sie, wenn eine neue interne " +"Referenz erstellt werden soll." + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" +"Dieses Feld enthält die Informationen in Bezug auf die Nummerierung der " +"Journaleinträge dieses Journals." + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "The reference must be unique" +#~ msgstr "Die Referenz muss eindeutig sein" diff --git a/product_sequence/i18n/el.po b/product_sequence/i18n/el.po new file mode 100644 index 0000000..5092069 --- /dev/null +++ b/product_sequence/i18n/el.po @@ -0,0 +1,110 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2016-11-01 20:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Greek (https://www.transifex.com/oca/teams/23907/el/)\n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "Κατασκευαστής" diff --git a/product_sequence/i18n/es.po b/product_sequence/i18n/es.po new file mode 100644 index 0000000..14e669f --- /dev/null +++ b/product_sequence/i18n/es.po @@ -0,0 +1,122 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-05-05 02:44+0000\n" +"PO-Revision-Date: 2021-02-15 17:45+0000\n" +"Last-Translator: claudiagn \n" +"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "-copia" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "Compañías" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "Ajustes de configuración" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "Referencia interna" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "Prefijo para referencia interna de producto" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" +"Prefijo utilizado para generar la referencia interna para productos creados " +"con esta categoría. Si está en blanco, se utilizará la secuencia " +"predeterminada." + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "Producto" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "Categoría de producto" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "Secuencia de producto" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "Secuencia" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" +"Establezca en '/' y guarde si desea que se proponga una nueva referencia " +"interna." + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" +"Este campo contiene la información relacionada con la numeración de los " +"asientos de este diario." + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "Utilice categorías principales para determinar el prefijo" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" +"Utilice categorías principales para determinar el prefijo si la categoría\n" +" no tiene ajustes para el prefijo." + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" +"Utilice categorías principales para determinar el prefijo si la categoría no " +"tiene configuraciones para el prefijo." + +#~ msgid "The reference must be unique" +#~ msgstr "La referencia debe ser única" diff --git a/product_sequence/i18n/es_AR.po b/product_sequence/i18n/es_AR.po new file mode 100644 index 0000000..aca95b3 --- /dev/null +++ b/product_sequence/i18n/es_AR.po @@ -0,0 +1,111 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2016-11-01 20:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Spanish (Argentina) (https://www.transifex.com/oca/" +"teams/23907/es_AR/)\n" +"Language: es_AR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "Fabricante" diff --git a/product_sequence/i18n/es_CR.po b/product_sequence/i18n/es_CR.po new file mode 100644 index 0000000..e13d743 --- /dev/null +++ b/product_sequence/i18n/es_CR.po @@ -0,0 +1,111 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2016-11-01 20:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Spanish (Costa Rica) (https://www.transifex.com/oca/" +"teams/23907/es_CR/)\n" +"Language: es_CR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "Fabricante" diff --git a/product_sequence/i18n/es_EC.po b/product_sequence/i18n/es_EC.po new file mode 100644 index 0000000..cc0cb49 --- /dev/null +++ b/product_sequence/i18n/es_EC.po @@ -0,0 +1,111 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2016-11-01 20:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Spanish (Ecuador) (https://www.transifex.com/oca/teams/23907/" +"es_EC/)\n" +"Language: es_EC\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "Fabricante" diff --git a/product_sequence/i18n/es_MX.po b/product_sequence/i18n/es_MX.po new file mode 100644 index 0000000..841a0fc --- /dev/null +++ b/product_sequence/i18n/es_MX.po @@ -0,0 +1,111 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2016-11-01 20:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Spanish (Mexico) (https://www.transifex.com/oca/teams/23907/" +"es_MX/)\n" +"Language: es_MX\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "Fabricante" diff --git a/product_sequence/i18n/es_VE.po b/product_sequence/i18n/es_VE.po new file mode 100644 index 0000000..1fb2b81 --- /dev/null +++ b/product_sequence/i18n/es_VE.po @@ -0,0 +1,111 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2016-11-01 20:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Spanish (Venezuela) (https://www.transifex.com/oca/" +"teams/23907/es_VE/)\n" +"Language: es_VE\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "Fabricante" diff --git a/product_sequence/i18n/et.po b/product_sequence/i18n/et.po new file mode 100644 index 0000000..b72f216 --- /dev/null +++ b/product_sequence/i18n/et.po @@ -0,0 +1,110 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2016-11-01 20:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Estonian (https://www.transifex.com/oca/teams/23907/et/)\n" +"Language: et\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "Tootja" diff --git a/product_sequence/i18n/fi.po b/product_sequence/i18n/fi.po new file mode 100644 index 0000000..b16bf0b --- /dev/null +++ b/product_sequence/i18n/fi.po @@ -0,0 +1,110 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2016-11-01 20:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Finnish (https://www.transifex.com/oca/teams/23907/fi/)\n" +"Language: fi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "Valmistaja" diff --git a/product_sequence/i18n/fr.po b/product_sequence/i18n/fr.po new file mode 100644 index 0000000..3800e9c --- /dev/null +++ b/product_sequence/i18n/fr.po @@ -0,0 +1,109 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-05-23 02:40+0000\n" +"PO-Revision-Date: 2017-05-23 02:40+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "Article" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +#, fuzzy +msgid "Product Category" +msgstr "Article" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +#, fuzzy +msgid "Product Sequence" +msgstr "Article" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" diff --git a/product_sequence/i18n/gl.po b/product_sequence/i18n/gl.po new file mode 100644 index 0000000..820abe3 --- /dev/null +++ b/product_sequence/i18n/gl.po @@ -0,0 +1,110 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2016-11-01 20:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Galician (https://www.transifex.com/oca/teams/23907/gl/)\n" +"Language: gl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "Fabricante" diff --git a/product_sequence/i18n/hr.po b/product_sequence/i18n/hr.po new file mode 100644 index 0000000..d49552a --- /dev/null +++ b/product_sequence/i18n/hr.po @@ -0,0 +1,113 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# Bole , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-03 02:14+0000\n" +"PO-Revision-Date: 2018-01-03 02:14+0000\n" +"Last-Translator: Bole , 2018\n" +"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "-kopija" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "Proizvod" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +#, fuzzy +msgid "Product Category" +msgstr "Proizvod" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +#, fuzzy +msgid "Product Sequence" +msgstr "Proizvod" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "The reference must be unique" +#~ msgstr "Referenca mora biti jedinstvena" diff --git a/product_sequence/i18n/hu.po b/product_sequence/i18n/hu.po new file mode 100644 index 0000000..b29a9f0 --- /dev/null +++ b/product_sequence/i18n/hu.po @@ -0,0 +1,110 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2016-11-01 20:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Hungarian (https://www.transifex.com/oca/teams/23907/hu/)\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "Gyártó" diff --git a/product_sequence/i18n/it.po b/product_sequence/i18n/it.po new file mode 100644 index 0000000..69ce5a8 --- /dev/null +++ b/product_sequence/i18n/it.po @@ -0,0 +1,113 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-05-05 02:44+0000\n" +"PO-Revision-Date: 2020-04-02 15:19+0000\n" +"Last-Translator: Lorenzo Battistini \n" +"Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.10\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "-copia" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "Riferimento interno" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "Prefisso per il riferimento interno del prodotto" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" +"Prefisso utilizzato per generare il riferimento interno dei prodotti creati " +"con questa categoria. Se vuoto, verrà usata la sequenza predefinita." + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "Prodotto" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "Categoria prodotto" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "Sequenza prodotto" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" +"Imposta '/' e salva se vuoi che venga proposto un nuovo riferimento interno." + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" +"Questo campo contiene le informazioni relative alla numerazione delle " +"registrazioni contabili di questo registro." + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" diff --git a/product_sequence/i18n/ja.po b/product_sequence/i18n/ja.po new file mode 100644 index 0000000..40c8589 --- /dev/null +++ b/product_sequence/i18n/ja.po @@ -0,0 +1,110 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2016-11-01 20:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Japanese (https://www.transifex.com/oca/teams/23907/ja/)\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "製造者" diff --git a/product_sequence/i18n/lt.po b/product_sequence/i18n/lt.po new file mode 100644 index 0000000..f9614bc --- /dev/null +++ b/product_sequence/i18n/lt.po @@ -0,0 +1,111 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2016-11-01 20:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Lithuanian (https://www.transifex.com/oca/teams/23907/lt/)\n" +"Language: lt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" +"%100<10 || n%100>=20) ? 1 : 2);\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "Gamintojas" diff --git a/product_sequence/i18n/mk.po b/product_sequence/i18n/mk.po new file mode 100644 index 0000000..805439b --- /dev/null +++ b/product_sequence/i18n/mk.po @@ -0,0 +1,110 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2016-11-01 20:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Macedonian (https://www.transifex.com/oca/teams/23907/mk/)\n" +"Language: mk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "Производител" diff --git a/product_sequence/i18n/mn.po b/product_sequence/i18n/mn.po new file mode 100644 index 0000000..5db3183 --- /dev/null +++ b/product_sequence/i18n/mn.po @@ -0,0 +1,110 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2016-11-01 20:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Mongolian (https://www.transifex.com/oca/teams/23907/mn/)\n" +"Language: mn\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "Үйлдвэрлэгч" diff --git a/product_sequence/i18n/nb.po b/product_sequence/i18n/nb.po new file mode 100644 index 0000000..4d5dfda --- /dev/null +++ b/product_sequence/i18n/nb.po @@ -0,0 +1,111 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2016-11-01 20:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Norwegian Bokmål (https://www.transifex.com/oca/teams/23907/" +"nb/)\n" +"Language: nb\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "Produsent" diff --git a/product_sequence/i18n/nl.po b/product_sequence/i18n/nl.po new file mode 100644 index 0000000..05d001d --- /dev/null +++ b/product_sequence/i18n/nl.po @@ -0,0 +1,110 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2016-11-01 20:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Dutch (https://www.transifex.com/oca/teams/23907/nl/)\n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "Fabrikant" diff --git a/product_sequence/i18n/pl.po b/product_sequence/i18n/pl.po new file mode 100644 index 0000000..64838cc --- /dev/null +++ b/product_sequence/i18n/pl.po @@ -0,0 +1,111 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2016-11-01 20:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Polish (https://www.transifex.com/oca/teams/23907/pl/)\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "Producent" diff --git a/product_sequence/i18n/pt.po b/product_sequence/i18n/pt.po new file mode 100644 index 0000000..e43cbdb --- /dev/null +++ b/product_sequence/i18n/pt.po @@ -0,0 +1,117 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2020-03-23 14:13+0000\n" +"Last-Translator: Pedro Castro Silva \n" +"Language-Team: Portuguese (https://www.transifex.com/oca/teams/23907/pt/)\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Weblate 3.10\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "-cópia" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "Referência Interna" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "Prefixo da Referência Interna de Produto" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" +"Prefixo usado para gerar a referência interna dos produtos criados com esta " +"categoria. Se vazio, a sequência pré-definida será usada." + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "Produto" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "Categoria de Produto" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "Sequência de Produto" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" +"Defina como '/' e guarde caso pretenda que uma nova referência interna seja " +"proposta." + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" +"Esta campo contém a informação relacionada com a numeração das entradas " +"neste diário." + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "Fabricante" diff --git a/product_sequence/i18n/pt_BR.po b/product_sequence/i18n/pt_BR.po new file mode 100644 index 0000000..7e8fa51 --- /dev/null +++ b/product_sequence/i18n/pt_BR.po @@ -0,0 +1,118 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2020-06-16 13:19+0000\n" +"Last-Translator: Maurício Liell \n" +"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/" +"teams/23907/pt_BR/)\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 3.10\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "-cópia" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "Referência Interna" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "Prefixo para a Referência Interna do Produto" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" +"Prefixo usado para gerar a referência interna para produtos criados com esta " +"categoria. Se estiver em branco, a sequência padrão será usada." + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "Produto" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "Categoria de Produto" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "Sequência do Produto" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" +"Defina como '/' e salve se desejar que uma nova referência interna seja " +"proposta." + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" +"Este campo contém as informações relacionadas à numeração dos lançamentos " +"contábeis manuais desse diário." + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "Fabricante" diff --git a/product_sequence/i18n/ro.po b/product_sequence/i18n/ro.po new file mode 100644 index 0000000..bacb581 --- /dev/null +++ b/product_sequence/i18n/ro.po @@ -0,0 +1,111 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2016-11-01 20:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Romanian (https://www.transifex.com/oca/teams/23907/ro/)\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "Producator" diff --git a/product_sequence/i18n/ru.po b/product_sequence/i18n/ru.po new file mode 100644 index 0000000..ac9d9c3 --- /dev/null +++ b/product_sequence/i18n/ru.po @@ -0,0 +1,112 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2016-11-01 20:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Russian (https://www.transifex.com/oca/teams/23907/ru/)\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "Производитель" diff --git a/product_sequence/i18n/sk.po b/product_sequence/i18n/sk.po new file mode 100644 index 0000000..9d2b89f --- /dev/null +++ b/product_sequence/i18n/sk.po @@ -0,0 +1,109 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-07-03 21:19+0000\n" +"Last-Translator: Jan Prokop \n" +"Language-Team: none\n" +"Language: sk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Weblate 3.10\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "-kópia" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "Interná referencia" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "Prefix pre internú referenciu" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" +"Prefix sa používa pri tvorbe internej referencie pre produkty vytvorené v " +"tejto kategórii. Ak je prázdny, použije sa štandardná sekvencia." + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "Produkt" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "Kategória produktu" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "Sekvencia produktu" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "Nastavte na '/' a uložte, ak chcete nastaviť novú internú referenciu." + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" +"Toto pole obsahuje informácie súvisiace s číslovaním vstupov tejto účtovnej " +"knihy." + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" diff --git a/product_sequence/i18n/sk_SK.po b/product_sequence/i18n/sk_SK.po new file mode 100644 index 0000000..59ef089 --- /dev/null +++ b/product_sequence/i18n/sk_SK.po @@ -0,0 +1,103 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sk_SK\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" diff --git a/product_sequence/i18n/sl.po b/product_sequence/i18n/sl.po new file mode 100644 index 0000000..6b6c452 --- /dev/null +++ b/product_sequence/i18n/sl.po @@ -0,0 +1,110 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-27 03:49+0000\n" +"PO-Revision-Date: 2018-01-27 03:49+0000\n" +"Last-Translator: OCA Transbot , 2018\n" +"Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n" +"Language: sl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "Proizvod" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +#, fuzzy +msgid "Product Category" +msgstr "Proizvod" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +#, fuzzy +msgid "Product Sequence" +msgstr "Proizvod" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" diff --git a/product_sequence/i18n/sr.po b/product_sequence/i18n/sr.po new file mode 100644 index 0000000..892f50e --- /dev/null +++ b/product_sequence/i18n/sr.po @@ -0,0 +1,111 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2016-11-01 20:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Serbian (https://www.transifex.com/oca/teams/23907/sr/)\n" +"Language: sr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "Proizvođač" diff --git a/product_sequence/i18n/sv.po b/product_sequence/i18n/sv.po new file mode 100644 index 0000000..633f2b2 --- /dev/null +++ b/product_sequence/i18n/sv.po @@ -0,0 +1,110 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2016-11-01 20:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Swedish (https://www.transifex.com/oca/teams/23907/sv/)\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "Tillverkare" diff --git a/product_sequence/i18n/tr.po b/product_sequence/i18n/tr.po new file mode 100644 index 0000000..4582f00 --- /dev/null +++ b/product_sequence/i18n/tr.po @@ -0,0 +1,110 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2016-11-01 20:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Turkish (https://www.transifex.com/oca/teams/23907/tr/)\n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "Üretici" diff --git a/product_sequence/i18n/zh_CN.po b/product_sequence/i18n/zh_CN.po new file mode 100644 index 0000000..d139160 --- /dev/null +++ b/product_sequence/i18n/zh_CN.po @@ -0,0 +1,111 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_sequence +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-01 20:03+0000\n" +"PO-Revision-Date: 2016-11-01 20:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Chinese (China) (https://www.transifex.com/oca/teams/23907/" +"zh_CN/)\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: product_sequence +#: code:addons/product_sequence/models/product_product.py:64 +#, python-format +msgid "-copy" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_product__default_code +msgid "Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__code_prefix +msgid "Prefix for Product Internal Reference" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__code_prefix +msgid "" +"Prefix used to generate the internal reference for products created with " +"this category. If blank the default sequence will be used." +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_product +msgid "Product" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_product_category__sequence_id +msgid "Product Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model,name:product_sequence.model_ir_sequence +msgid "Sequence" +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_product__default_code +msgid "" +"Set to '/' and save if you want a new internal reference to be proposed." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_product_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,field_description:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,field_description:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "Use parent categories to determine the prefix" +msgstr "" + +#. module: product_sequence +#: model_terms:ir.ui.view,arch_db:product_sequence.res_config_settings_view_form +msgid "" +"Use parent categories to determine the prefix if the category\n" +" has no settings for the prefix." +msgstr "" + +#. module: product_sequence +#: model:ir.model.fields,help:product_sequence.field_res_company__use_parent_categories_to_determine_prefix +#: model:ir.model.fields,help:product_sequence.field_res_config_settings__use_parent_categories_to_determine_prefix +msgid "" +"Use parent categories to determine the prefix if the category has no " +"settings for the prefix." +msgstr "" + +#~ msgid "Manufacturer" +#~ msgstr "制造商" diff --git a/product_sequence/models/__init__.py b/product_sequence/models/__init__.py new file mode 100644 index 0000000..62be8af --- /dev/null +++ b/product_sequence/models/__init__.py @@ -0,0 +1,5 @@ +from . import res_company +from . import res_config_settings +from . import ir_sequence +from . import product_product +from . import product_category diff --git a/product_sequence/models/ir_sequence.py b/product_sequence/models/ir_sequence.py new file mode 100644 index 0000000..ec6a0de --- /dev/null +++ b/product_sequence/models/ir_sequence.py @@ -0,0 +1,16 @@ +# Copyright 2018 Eficent Business and IT Consulting Services S.L. +# (http://www.eficent.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, models + + +class IrSequence(models.Model): + _inherit = 'ir.sequence' + + @api.model + def get_category_sequence_id(self, category=False): + if self.env.user.company_id.use_parent_categories_to_determine_prefix: + while not category.sequence_id and category.parent_id: + category = category.parent_id + return category.sequence_id or self.env.ref('product_sequence.seq_product_auto') diff --git a/product_sequence/models/product_category.py b/product_sequence/models/product_category.py new file mode 100644 index 0000000..817f5a7 --- /dev/null +++ b/product_sequence/models/product_category.py @@ -0,0 +1,58 @@ +# Copyright 2018 Eficent Business and IT Consulting Services S.L. +# (http://www.eficent.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class ProductCategory(models.Model): + _inherit = 'product.category' + + code_prefix = fields.Char( + string="Prefix for Product Internal Reference", + help="Prefix used to generate the internal reference for products " + "created with this category. If blank the " + "default sequence will be used.", + ) + sequence_id = fields.Many2one( + comodel_name="ir.sequence", string="Product Sequence", + help="This field contains the information related to the numbering " + "of the journal entries of this journal.", + copy=False, readonly=True, + ) + + @api.model + def _prepare_ir_sequence(self, prefix): + """Prepare the vals for creating the sequence + :param prefix: a string with the prefix of the sequence. + :return: a dict with the values. + """ + vals = { + "name": "Product " + prefix, + "code": "product.product - " + prefix, + "padding": 5, + "prefix": prefix, + "company_id": False, + } + return vals + + @api.multi + def write(self, vals): + prefix = vals.get("code_prefix") + if prefix: + for rec in self: + if rec.sequence_id: + rec.sudo().sequence_id.prefix = prefix + else: + seq_vals = self._prepare_ir_sequence(prefix) + rec.sequence_id = self.env["ir.sequence"].create(seq_vals) + return super().write(vals) + + @api.model + def create(self, vals): + prefix = vals.get("code_prefix") + if prefix: + seq_vals = self._prepare_ir_sequence(prefix) + sequence = self.env["ir.sequence"].create(seq_vals) + vals["sequence_id"] = sequence.id + return super().create(vals) diff --git a/product_sequence/models/product_product.py b/product_sequence/models/product_product.py new file mode 100644 index 0000000..0c7db9c --- /dev/null +++ b/product_sequence/models/product_product.py @@ -0,0 +1,66 @@ +# Copyright 2004 Tiny SPRL +# Copyright 2016 Sodexis +# Copyright 2018 Eficent Business and IT Consulting Services S.L. +# (http://www.eficent.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import _, api, fields, models + + +class ProductProduct(models.Model): + _inherit = 'product.product' + + default_code = fields.Char( + required=True, + default='/', + track_visibility='onchange', + help="Set to '/' and save if you want a new internal reference " + "to be proposed." + ) + + @api.model + def create(self, vals): + if 'default_code' not in vals or vals['default_code'] == '/': + categ_id = vals.get("categ_id") + template_id = vals.get("product_tmpl_id") + category = self.env['product.category'] + if categ_id: + # Created as a product.product + category = category.browse(categ_id) + elif template_id: + # Created from a product.template + template = self.env["product.template"].browse(template_id) + category = template.categ_id + sequence = self.env["ir.sequence"].get_category_sequence_id(category) + vals['default_code'] = sequence.next_by_id() + return super().create(vals) + + @api.multi + def write(self, vals): + """To assign a new internal reference, just write '/' on the field. + Note this is up to the user, if the product category is changed, + she/he will need to write '/' on the internal reference to force the + re-assignment.""" + if vals.get('default_code', '') == '/': + product_category_obj = self.env['product.category'] + for product in self: + category_id = vals.get('categ_id', product.categ_id.id) + category = product_category_obj.browse(category_id) + sequence = self.env["ir.sequence"].get_category_sequence_id(category) + ref = sequence.next_by_id() + vals['default_code'] = ref + if len(product.product_tmpl_id.product_variant_ids) == 1: + product.product_tmpl_id.write({'default_code': ref}) + super(ProductProduct, product).write(vals) + return True + return super().write(vals) + + @api.multi + def copy(self, default=None): + if default is None: + default = {} + if self.default_code and 'default_code' not in default: + default.update({ + 'default_code': self.default_code + _('-copy'), + }) + return super().copy(default) diff --git a/product_sequence/models/res_company.py b/product_sequence/models/res_company.py new file mode 100644 index 0000000..faf76fe --- /dev/null +++ b/product_sequence/models/res_company.py @@ -0,0 +1,17 @@ +# Copyright 2004 Tiny SPRL +# Copyright 2016 Sodexis +# Copyright 2018 Eficent Business and IT Consulting Services S.L. +# (http://www.eficent.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class Company(models.Model): + _inherit = 'res.company' + + use_parent_categories_to_determine_prefix = fields.Boolean( + string="Use parent categories to determine the prefix", + help="Use parent categories to determine the prefix " + "if the category has no settings for the prefix.", + ) diff --git a/product_sequence/models/res_config_settings.py b/product_sequence/models/res_config_settings.py new file mode 100644 index 0000000..68b0d52 --- /dev/null +++ b/product_sequence/models/res_config_settings.py @@ -0,0 +1,16 @@ +# Copyright 2004 Tiny SPRL +# Copyright 2016 Sodexis +# Copyright 2018 Eficent Business and IT Consulting Services S.L. +# (http://www.eficent.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = 'res.config.settings' + + use_parent_categories_to_determine_prefix = fields.Boolean( + related="company_id.use_parent_categories_to_determine_prefix", + readonly=False, + ) diff --git a/product_sequence/readme/CONTRIBUTORS.rst b/product_sequence/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..aee3584 --- /dev/null +++ b/product_sequence/readme/CONTRIBUTORS.rst @@ -0,0 +1,6 @@ +* Angel Moya +* Graeme Gellatly +* Sodexis +* Lois Rilo +* Sudhir Arya +* Alexandre Díaz diff --git a/product_sequence/readme/DESCRIPTION.rst b/product_sequence/readme/DESCRIPTION.rst new file mode 100644 index 0000000..165c621 --- /dev/null +++ b/product_sequence/readme/DESCRIPTION.rst @@ -0,0 +1,5 @@ +This module allows to associate a sequence to the product reference. +The reference (default code) is unique (SQL constraint) and required. + +You can optionally specify different sequences for different product +categories. diff --git a/product_sequence/readme/USAGE.rst b/product_sequence/readme/USAGE.rst new file mode 100644 index 0000000..2cec8f3 --- /dev/null +++ b/product_sequence/readme/USAGE.rst @@ -0,0 +1,14 @@ +To specify a different sequence for a product category proceed as follows: + +#. Go to the a Product Category form view. + (**note:** you will need to install Inventory app to be able to access to + the form view, *Inventory > Configuration > Products > Products Categories*; + or create a menuitem manually). +#. Fill the *Prefix for Product Internal Reference* as desired. +#. Under the settings (Settings -> General Settings -> Products), you can specify + whether the prefix of the parent category should be used if no prefix has been + specified for the category. + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/135/12.0 diff --git a/product_sequence/static/description/icon.png b/product_sequence/static/description/icon.png new file mode 100644 index 0000000..3a0328b Binary files /dev/null and b/product_sequence/static/description/icon.png differ diff --git a/product_sequence/static/description/index.html b/product_sequence/static/description/index.html new file mode 100644 index 0000000..f281274 --- /dev/null +++ b/product_sequence/static/description/index.html @@ -0,0 +1,444 @@ + + + + + + +Product Sequence + + + +
+

Product Sequence

+ + +

Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runbot

+

This module allows to associate a sequence to the product reference. +The reference (default code) is unique (SQL constraint) and required.

+

You can optionally specify different sequences for different product +categories.

+

Table of contents

+ +
+

Usage

+

To specify a different sequence for a product category proceed as follows:

+
    +
  1. Go to the a Product Category form view. +(note: you will need to install Inventory app to be able to access to +the form view, Inventory > Configuration > Products > Products Categories; +or create a menuitem manually).
  2. +
  3. Fill the Prefix for Product Internal Reference as desired.
  4. +
  5. Under the settings (Settings -> General Settings -> Products), you can specify +whether the prefix of the parent category should be used if no prefix has been +specified for the category.
  6. +
+Try me on Runbot +
+
+

Bug Tracker

+

Bugs are tracked on GitHub 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.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Zikzakmedia SL
  • +
  • Sodexis
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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/product-attribute project on GitHub.

+

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

+
+
+
+ + diff --git a/product_sequence/tests/__init__.py b/product_sequence/tests/__init__.py new file mode 100644 index 0000000..29b6235 --- /dev/null +++ b/product_sequence/tests/__init__.py @@ -0,0 +1 @@ +from . import test_product_sequence diff --git a/product_sequence/tests/test_product_sequence.py b/product_sequence/tests/test_product_sequence.py new file mode 100644 index 0000000..f327c7b --- /dev/null +++ b/product_sequence/tests/test_product_sequence.py @@ -0,0 +1,140 @@ +# Copyright 2016 Sodexis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo.tests.common import TransactionCase +from ..hooks import pre_init_hook + + +class TestProductSequence(TransactionCase): + """Tests for creating product with and without Product Sequence""" + + def setUp(self): + super(TestProductSequence, self).setUp() + self.product_product = self.env['product.product'] + self.product_category = self.env['product.category'] + self.product_template = self.env['product.template'].create({ + 'name': 'Demo Product', + }) + + def test_product_create_with_default_code(self): + product = self.product_product.create(dict( + name="Apple", + default_code='PROD01' + )) + self.assertEqual(product.default_code, 'PROD01') + product_new = self.product_product.create(dict( + name="Demo Apple", + product_tmpl_id=self.product_template.id + )) + self.assertTrue(product_new.default_code) + + def test_product_create_without_default_code(self): + product_1 = self.product_product.create(dict( + name="Orange", + default_code='/')) + self.assertRegexpMatches(str(product_1.default_code), r'PR/*') + + def test_product_copy(self): + product_2 = self.product_product.create(dict( + name="Apple", + default_code='PROD02' + )) + copy_product_2 = product_2.copy() + self.assertEqual(copy_product_2.default_code, 'PROD02-copy') + + def test_pre_init_hook(self): + product_3 = self.product_product.create(dict( + name="Apple", + default_code='PROD03' + )) + sql = "update product_product set default_code='/' where id=%s" + self.cr.execute(sql, (product_3.id,)) + product_3.invalidate_cache() + self.assertEqual(product_3.default_code, '/') + pre_init_hook(self.cr) + product_3.invalidate_cache() + self.assertEqual(product_3.default_code, '!!mig!!%s' % (product_3.id,)) + + def test_product_category_sequence(self): + categ_grocery = self.product_category.create(dict( + name="Grocery", + code_prefix="GRO", + )) + self.assertTrue(categ_grocery.sequence_id) + self.assertEqual(categ_grocery.sequence_id.prefix, "GRO") + self.assertFalse(categ_grocery.sequence_id.company_id) + product_3 = self.product_product.create(dict( + name="Apple", + categ_id=categ_grocery.id, + )) + self.assertEqual(product_3.default_code[:3], "GRO") + self.assertEqual(product_3.product_tmpl_id.default_code[:3], "GRO") + categ_electronics = self.product_category.create(dict( + name="Electronics", + code_prefix="ELE", + )) + product_3.write({'default_code': '/', + 'categ_id': categ_electronics.id}) + self.assertEqual(product_3.default_code[:3], "ELE") + self.assertEqual(product_3.product_tmpl_id.default_code[:3], "ELE") + + product_4 = self.product_product.create(dict( + name="Truck", + default_code='PROD04' + )) + product_4.write({'default_code': '/'}) + self.assertTrue(product_4.categ_id, 'Category is not set.') + + categ_car = self.product_category.create(dict( + name="Car", + code_prefix="CAR", + )) + product_3.product_tmpl_id.categ_id = categ_car + product_3.product_tmpl_id.default_code = '/' + product_3.refresh() + self.assertEqual(product_3.default_code[:3], "CAR") + self.assertEqual(product_3.product_tmpl_id.default_code[:3], "CAR") + categ_car.write(dict( + name="Bike", + code_prefix="BIK", + )) + self.assertEqual(categ_car.sequence_id.prefix, "BIK") + categ_car.sequence_id = False + categ_car.write({'code_prefix': 'KIA'}) + self.assertEqual(categ_car.sequence_id.prefix, "KIA") + + def test_product_parent_category_sequence(self): + parent_categ = self.product_category.create(dict( + name="Parents", + code_prefix="PAR", + )) + categ = self.product_category.create(dict( + name="Child", + parent_id=parent_categ.id, + )) + + product_anna = self.product_product.create(dict( + name="Anna", + categ_id=categ.id, + )) + self.assertEqual(product_anna.default_code[:2], "PR") + self.assertEqual(product_anna.product_tmpl_id.default_code[:2], "PR") + + self.env.user.company_id.use_parent_categories_to_determine_prefix = True + + product_claudia = self.product_product.create(dict( + name="Claudia", + categ_id=categ.id, + )) + self.assertEqual(product_claudia.default_code[:3], "PAR") + self.assertEqual(product_claudia.product_tmpl_id.default_code[:3], "PAR") + + def test_product_copy_with_default_values(self): + product_2 = self.product_product.create(dict( + name="Apple", + default_code='PROD02' + )) + copy_product_2 = product_2.copy({ + 'default_code': 'product test sequence', + }) + self.assertEqual(copy_product_2.default_code, 'product test sequence') diff --git a/product_sequence/views/product_category.xml b/product_sequence/views/product_category.xml new file mode 100644 index 0000000..085dd25 --- /dev/null +++ b/product_sequence/views/product_category.xml @@ -0,0 +1,21 @@ + + + + + + product.category.form - product_sequence + product.category + + + + + + + + diff --git a/product_sequence/views/res_config_settings_views.xml b/product_sequence/views/res_config_settings_views.xml new file mode 100644 index 0000000..16ec539 --- /dev/null +++ b/product_sequence/views/res_config_settings_views.xml @@ -0,0 +1,27 @@ + + + + + res.config.settings.view.form.inherit.product + res.config.settings + + +
+
+
+ +
+
+
+
+
+
+
+
diff --git a/product_state/README.rst b/product_state/README.rst new file mode 100644 index 0000000..ef92e16 --- /dev/null +++ b/product_state/README.rst @@ -0,0 +1,103 @@ +============= +Product State +============= + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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%2Fproduct--attribute-lightgray.png?logo=github + :target: https://github.com/OCA/product-attribute/tree/12.0/product_state + :alt: OCA/product-attribute +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/product-attribute-12-0/product-attribute-12-0-product_state + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/135/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module introduces the state field on product template and allows simple product life cycle: + +- draft: In Development +- sellable: Normal +- end: End of Lifecycle +- obsolete: Obsolete + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +To create a new state: + +#. Go to *Sales > Configuration > Products > Product States*. +#. You can set its name and a description. + +To add a product to a state: + +#. Go to the product itself and edit. +#. You can select the desired status in the list of buttons above the form. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub 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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* ACSONE SA/NV + +Contributors +~~~~~~~~~~~~ + +* Cedric Pigeon +* Alexandre Saunier +* Nikul Chaudhary +* Eduardo Magdalena (C2i Change 2 improve http://www.c2i.es) +* Andrii Skrypka + +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. + +.. |maintainer-emagdalenaC2i| image:: https://github.com/emagdalenaC2i.png?size=40px + :target: https://github.com/emagdalenaC2i + :alt: emagdalenaC2i + +Current `maintainer `__: + +|maintainer-emagdalenaC2i| + +This module is part of the `OCA/product-attribute `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/product_state/__init__.py b/product_state/__init__.py new file mode 100644 index 0000000..e66fb1c --- /dev/null +++ b/product_state/__init__.py @@ -0,0 +1,4 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from . import models +from .hooks import post_init_hook diff --git a/product_state/__manifest__.py b/product_state/__manifest__.py new file mode 100644 index 0000000..ea49465 --- /dev/null +++ b/product_state/__manifest__.py @@ -0,0 +1,20 @@ +# Copyright 2017 ACSONE SA/NV () +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +{ + "name": "Product State", + "summary": """ + Module introducing a state field on product template""", + "author": "ACSONE SA/NV, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/product-attribute", + "category": "Product", + "version": "12.0.2.0.2", + "license": "AGPL-3", + "depends": ["sale", "product"], + "data": [ + "data/product_state_data.xml", + "security/ir.model.access.csv", + "views/product_views.xml", + ], + "maintainers": ["emagdalenaC2i"], + "post_init_hook": "post_init_hook", +} diff --git a/product_state/data/product_state_data.xml b/product_state/data/product_state_data.xml new file mode 100644 index 0000000..90a0a76 --- /dev/null +++ b/product_state/data/product_state_data.xml @@ -0,0 +1,26 @@ + + + + + + draft + In Development + 10 + + + sellable + Normal + 20 + + + end + End of Lifecycle + 30 + + + obsolete + Obsolete + 40 + + + diff --git a/product_state/hooks.py b/product_state/hooks.py new file mode 100644 index 0000000..2c7064e --- /dev/null +++ b/product_state/hooks.py @@ -0,0 +1,17 @@ +# Copyright 2017 ACSONE SA/NV () +# Copyright 2020 Tecnativa - Pedro M. Baeza +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +from odoo import api, SUPERUSER_ID + + +def post_init_hook(cr, registry): + """ This hook is used to add a state on existing products + when module product_state is installed. + """ + env = api.Environment(cr, SUPERUSER_ID, {}) + product_without_state = env["product.template"].with_context( + active_test=False, + ).search( + [("product_state_id", "=", False), ("state", "!=", False)] + ) + product_without_state._inverse_product_state() diff --git a/product_state/i18n/ca.po b/product_state/i18n/ca.po new file mode 100644 index 0000000..8fc1ad7 --- /dev/null +++ b/product_state/i18n/ca.po @@ -0,0 +1,168 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_state +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-02-15 13:45+0000\n" +"Last-Translator: claudiagn \n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: product_state +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +msgid "Code" +msgstr "Codi" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__create_uid +msgid "Created by" +msgstr "Creat per" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__create_date +msgid "Created on" +msgstr "Creat el" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__description +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +msgid "Description" +msgstr "Descripció" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__display_name +msgid "Display Name" +msgstr "Nom visible" + +#. module: product_state +#: model:product.state,name:product_state.product_state_end +msgid "End of Lifecycle" +msgstr "Final del cicle de vida" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__id +msgid "ID" +msgstr "ID" + +#. module: product_state +#: model:product.state,name:product_state.product_state_draft +msgid "In Development" +msgstr "ID de desenvolupament" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state____last_update +msgid "Last Modified on" +msgstr "Última modificació en" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__write_uid +msgid "Last Updated by" +msgstr "última actualització per" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__write_date +msgid "Last Updated on" +msgstr "Última actualització el" + +#. module: product_state +#: model:product.state,name:product_state.product_state_sellable +msgid "Normal" +msgstr "Normal" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__products_count +msgid "Number of products" +msgstr "Nombre de productes" + +#. module: product_state +#: model:product.state,name:product_state.product_state_obsolete +msgid "Obsolete" +msgstr "Obsolet" + +#. module: product_state +#: model:ir.actions.act_window,name:product_state.action_open_single_product_state +#: model:ir.model,name:product_state.model_product_state +#: model_terms:ir.ui.view,arch_db:product_state.product_state_search_form_view +msgid "Product State" +msgstr "Estat del producte" + +#. module: product_state +#: sql_constraint:product.state:0 +msgid "Product State Code must be unique." +msgstr "El codi d'estat del producte ha de ser únic." + +#. module: product_state +#: model:ir.ui.menu,name:product_state.menu_product_state +msgid "Product States" +msgstr "Estats dels productes" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_product__state +#: model:ir.model.fields,field_description:product_state.field_product_template__state +msgid "Product Status" +msgstr "Estat del producte" + +#. module: product_state +#: model:ir.model,name:product_state.model_product_template +msgid "Product Template" +msgstr "Plantilla de producte" + +#. module: product_state +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_kanban +msgid "Products" +msgstr "Productes" + +#. module: product_state +#: model:ir.model.fields,help:product_state.field_product_product__product_state_id +#: model:ir.model.fields,help:product_state.field_product_template__product_state_id +msgid "Select a state for this product" +msgstr "Selecciona un estat per aquest producte" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__sequence +msgid "Sequence" +msgstr "Seqüència" + +#. module: product_state +#: model:ir.actions.act_window,name:product_state.action_product_state +#: model:ir.model.fields,field_description:product_state.field_product_product__product_state_id +#: model:ir.model.fields,field_description:product_state.field_product_template__product_state_id +#: model_terms:ir.ui.view,arch_db:product_state.view_product_template_search_state +msgid "State" +msgstr "Estat" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__code +msgid "State Code" +msgstr "Codi d'estat" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__name +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +msgid "State Name" +msgstr "Nom d'estat" + +#. module: product_state +#: model:ir.actions.act_window,name:product_state.action_open_state_products +#: model:ir.model.fields,field_description:product_state.field_product_state__product_ids +msgid "State Products" +msgstr "Productes estatals" + +#. module: product_state +#: model:ir.model.fields,help:product_state.field_product_state__sequence +msgid "Used to order the States" +msgstr "S'utilitza per ordenar els estats" + +#. module: product_state +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_tree +msgid "product.state" +msgstr "product.state" diff --git a/product_state/i18n/de.po b/product_state/i18n/de.po new file mode 100644 index 0000000..1d7dc93 --- /dev/null +++ b/product_state/i18n/de.po @@ -0,0 +1,174 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_state +# +# Translators: +# Niki Waibel , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-05-17 02:38+0000\n" +"PO-Revision-Date: 2017-05-17 02:38+0000\n" +"Last-Translator: Niki Waibel , 2017\n" +"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: product_state +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +msgid "Code" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__create_uid +msgid "Created by" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__create_date +msgid "Created on" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__description +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +msgid "Description" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__display_name +msgid "Display Name" +msgstr "" + +#. module: product_state +#: model:product.state,name:product_state.product_state_end +msgid "End of Lifecycle" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__id +msgid "ID" +msgstr "" + +#. module: product_state +#: model:product.state,name:product_state.product_state_draft +msgid "In Development" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state____last_update +msgid "Last Modified on" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__write_date +msgid "Last Updated on" +msgstr "" + +#. module: product_state +#: model:product.state,name:product_state.product_state_sellable +msgid "Normal" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__products_count +msgid "Number of products" +msgstr "" + +#. module: product_state +#: model:product.state,name:product_state.product_state_obsolete +msgid "Obsolete" +msgstr "" + +#. module: product_state +#: model:ir.actions.act_window,name:product_state.action_open_single_product_state +#: model:ir.model,name:product_state.model_product_state +#: model_terms:ir.ui.view,arch_db:product_state.product_state_search_form_view +#, fuzzy +msgid "Product State" +msgstr "Produktvorlage" + +#. module: product_state +#: sql_constraint:product.state:0 +msgid "Product State Code must be unique." +msgstr "" + +#. module: product_state +#: model:ir.ui.menu,name:product_state.menu_product_state +#, fuzzy +msgid "Product States" +msgstr "Produktvorlage" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_product__state +#: model:ir.model.fields,field_description:product_state.field_product_template__state +#, fuzzy +msgid "Product Status" +msgstr "Produktvorlage" + +#. module: product_state +#: model:ir.model,name:product_state.model_product_template +msgid "Product Template" +msgstr "Produktvorlage" + +#. module: product_state +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_kanban +msgid "Products" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,help:product_state.field_product_product__product_state_id +#: model:ir.model.fields,help:product_state.field_product_template__product_state_id +msgid "Select a state for this product" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__sequence +msgid "Sequence" +msgstr "" + +#. module: product_state +#: model:ir.actions.act_window,name:product_state.action_product_state +#: model:ir.model.fields,field_description:product_state.field_product_product__product_state_id +#: model:ir.model.fields,field_description:product_state.field_product_template__product_state_id +#: model_terms:ir.ui.view,arch_db:product_state.view_product_template_search_state +msgid "State" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__code +msgid "State Code" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__name +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +msgid "State Name" +msgstr "" + +#. module: product_state +#: model:ir.actions.act_window,name:product_state.action_open_state_products +#: model:ir.model.fields,field_description:product_state.field_product_state__product_ids +msgid "State Products" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,help:product_state.field_product_state__sequence +msgid "Used to order the States" +msgstr "" + +#. module: product_state +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_tree +#, fuzzy +msgid "product.state" +msgstr "Produktvorlage" diff --git a/product_state/i18n/es.po b/product_state/i18n/es.po new file mode 100644 index 0000000..6c46830 --- /dev/null +++ b/product_state/i18n/es.po @@ -0,0 +1,172 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_state +# +# Translators: +# Pedro M. Baeza , 2018 +# enjolras , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-29 08:49+0000\n" +"PO-Revision-Date: 2020-09-15 12:00+0000\n" +"Last-Translator: claudiagn \n" +"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.10\n" + +#. module: product_state +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +msgid "Code" +msgstr "Código" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__description +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +msgid "Description" +msgstr "Descripción" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: product_state +#: model:product.state,name:product_state.product_state_end +msgid "End of Lifecycle" +msgstr "Fin del ciclo de vida" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__id +msgid "ID" +msgstr "ID" + +#. module: product_state +#: model:product.state,name:product_state.product_state_draft +msgid "In Development" +msgstr "En desarrollo" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state____last_update +msgid "Last Modified on" +msgstr "Última modificación en" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: product_state +#: model:product.state,name:product_state.product_state_sellable +msgid "Normal" +msgstr "Normal" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__products_count +msgid "Number of products" +msgstr "Número de productos" + +#. module: product_state +#: model:product.state,name:product_state.product_state_obsolete +msgid "Obsolete" +msgstr "Obsoleto" + +#. module: product_state +#: model:ir.actions.act_window,name:product_state.action_open_single_product_state +#: model:ir.model,name:product_state.model_product_state +#: model_terms:ir.ui.view,arch_db:product_state.product_state_search_form_view +msgid "Product State" +msgstr "Estado del producto" + +#. module: product_state +#: sql_constraint:product.state:0 +msgid "Product State Code must be unique." +msgstr "El código de estado del producto debe ser único." + +#. module: product_state +#: model:ir.ui.menu,name:product_state.menu_product_state +msgid "Product States" +msgstr "Estados del producto" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_product__state +#: model:ir.model.fields,field_description:product_state.field_product_template__state +msgid "Product Status" +msgstr "Estado de producto" + +#. module: product_state +#: model:ir.model,name:product_state.model_product_template +msgid "Product Template" +msgstr "Plantilla de producto" + +#. module: product_state +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_kanban +msgid "Products" +msgstr "Productos" + +#. module: product_state +#: model:ir.model.fields,help:product_state.field_product_product__product_state_id +#: model:ir.model.fields,help:product_state.field_product_template__product_state_id +msgid "Select a state for this product" +msgstr "Selecciona un estado para este producto" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__sequence +msgid "Sequence" +msgstr "Secuencia" + +#. module: product_state +#: model:ir.actions.act_window,name:product_state.action_product_state +#: model:ir.model.fields,field_description:product_state.field_product_product__product_state_id +#: model:ir.model.fields,field_description:product_state.field_product_template__product_state_id +#: model_terms:ir.ui.view,arch_db:product_state.view_product_template_search_state +msgid "State" +msgstr "Estado" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__code +msgid "State Code" +msgstr "Código del estado" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__name +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +msgid "State Name" +msgstr "Nombre del estado" + +#. module: product_state +#: model:ir.actions.act_window,name:product_state.action_open_state_products +#: model:ir.model.fields,field_description:product_state.field_product_state__product_ids +msgid "State Products" +msgstr "Productos del estado" + +#. module: product_state +#: model:ir.model.fields,help:product_state.field_product_state__sequence +msgid "Used to order the States" +msgstr "Utilizado para pedir a los estados" + +#. module: product_state +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_tree +msgid "product.state" +msgstr "producto.estado" diff --git a/product_state/i18n/fr.po b/product_state/i18n/fr.po new file mode 100644 index 0000000..0634888 --- /dev/null +++ b/product_state/i18n/fr.po @@ -0,0 +1,177 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_state +# +# Translators: +# OCA Transbot , 2017 +# guillaume bauer , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-07-29 02:55+0000\n" +"PO-Revision-Date: 2017-07-29 02:55+0000\n" +"Last-Translator: guillaume bauer , 2017\n" +"Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: product_state +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +msgid "Code" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__create_uid +msgid "Created by" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__create_date +msgid "Created on" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__description +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +msgid "Description" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__display_name +msgid "Display Name" +msgstr "" + +#. module: product_state +#: model:product.state,name:product_state.product_state_end +msgid "End of Lifecycle" +msgstr "Fin de vie" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__id +msgid "ID" +msgstr "" + +#. module: product_state +#: model:product.state,name:product_state.product_state_draft +msgid "In Development" +msgstr "Phase de recherche et de développement" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state____last_update +msgid "Last Modified on" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__write_date +msgid "Last Updated on" +msgstr "" + +#. module: product_state +#: model:product.state,name:product_state.product_state_sellable +msgid "Normal" +msgstr "Normal" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__products_count +msgid "Number of products" +msgstr "" + +#. module: product_state +#: model:product.state,name:product_state.product_state_obsolete +msgid "Obsolete" +msgstr "Obsolète" + +#. module: product_state +#: model:ir.actions.act_window,name:product_state.action_open_single_product_state +#: model:ir.model,name:product_state.model_product_state +#: model_terms:ir.ui.view,arch_db:product_state.product_state_search_form_view +#, fuzzy +msgid "Product State" +msgstr "Modèle de produit" + +#. module: product_state +#: sql_constraint:product.state:0 +msgid "Product State Code must be unique." +msgstr "" + +#. module: product_state +#: model:ir.ui.menu,name:product_state.menu_product_state +#, fuzzy +msgid "Product States" +msgstr "Modèle de produit" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_product__state +#: model:ir.model.fields,field_description:product_state.field_product_template__state +#, fuzzy +msgid "Product Status" +msgstr "Modèle de produit" + +#. module: product_state +#: model:ir.model,name:product_state.model_product_template +msgid "Product Template" +msgstr "Modèle de produit" + +#. module: product_state +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_kanban +msgid "Products" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,help:product_state.field_product_product__product_state_id +#: model:ir.model.fields,help:product_state.field_product_template__product_state_id +msgid "Select a state for this product" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__sequence +msgid "Sequence" +msgstr "" + +#. module: product_state +#: model:ir.actions.act_window,name:product_state.action_product_state +#: model:ir.model.fields,field_description:product_state.field_product_product__product_state_id +#: model:ir.model.fields,field_description:product_state.field_product_template__product_state_id +#: model_terms:ir.ui.view,arch_db:product_state.view_product_template_search_state +#, fuzzy +msgid "State" +msgstr "Statut" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__code +msgid "State Code" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__name +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +msgid "State Name" +msgstr "" + +#. module: product_state +#: model:ir.actions.act_window,name:product_state.action_open_state_products +#: model:ir.model.fields,field_description:product_state.field_product_state__product_ids +#, fuzzy +msgid "State Products" +msgstr "Statut" + +#. module: product_state +#: model:ir.model.fields,help:product_state.field_product_state__sequence +msgid "Used to order the States" +msgstr "" + +#. module: product_state +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_tree +#, fuzzy +msgid "product.state" +msgstr "Modèle de produit" diff --git a/product_state/i18n/hr.po b/product_state/i18n/hr.po new file mode 100644 index 0000000..7350acc --- /dev/null +++ b/product_state/i18n/hr.po @@ -0,0 +1,177 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_state +# +# Translators: +# Bole , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-29 08:49+0000\n" +"PO-Revision-Date: 2018-01-29 08:49+0000\n" +"Last-Translator: Bole , 2018\n" +"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#. module: product_state +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +msgid "Code" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__create_uid +msgid "Created by" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__create_date +msgid "Created on" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__description +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +msgid "Description" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__display_name +msgid "Display Name" +msgstr "" + +#. module: product_state +#: model:product.state,name:product_state.product_state_end +msgid "End of Lifecycle" +msgstr "Kraj životnog ciklusa" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__id +msgid "ID" +msgstr "" + +#. module: product_state +#: model:product.state,name:product_state.product_state_draft +msgid "In Development" +msgstr "U razvoju" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state____last_update +msgid "Last Modified on" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__write_date +msgid "Last Updated on" +msgstr "" + +#. module: product_state +#: model:product.state,name:product_state.product_state_sellable +msgid "Normal" +msgstr "Normalno" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__products_count +msgid "Number of products" +msgstr "" + +#. module: product_state +#: model:product.state,name:product_state.product_state_obsolete +msgid "Obsolete" +msgstr "Zastarjelo" + +#. module: product_state +#: model:ir.actions.act_window,name:product_state.action_open_single_product_state +#: model:ir.model,name:product_state.model_product_state +#: model_terms:ir.ui.view,arch_db:product_state.product_state_search_form_view +#, fuzzy +msgid "Product State" +msgstr "Predložak proizvoda" + +#. module: product_state +#: sql_constraint:product.state:0 +msgid "Product State Code must be unique." +msgstr "" + +#. module: product_state +#: model:ir.ui.menu,name:product_state.menu_product_state +#, fuzzy +msgid "Product States" +msgstr "Predložak proizvoda" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_product__state +#: model:ir.model.fields,field_description:product_state.field_product_template__state +#, fuzzy +msgid "Product Status" +msgstr "Predložak proizvoda" + +#. module: product_state +#: model:ir.model,name:product_state.model_product_template +msgid "Product Template" +msgstr "Predložak proizvoda" + +#. module: product_state +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_kanban +msgid "Products" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,help:product_state.field_product_product__product_state_id +#: model:ir.model.fields,help:product_state.field_product_template__product_state_id +msgid "Select a state for this product" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__sequence +msgid "Sequence" +msgstr "" + +#. module: product_state +#: model:ir.actions.act_window,name:product_state.action_product_state +#: model:ir.model.fields,field_description:product_state.field_product_product__product_state_id +#: model:ir.model.fields,field_description:product_state.field_product_template__product_state_id +#: model_terms:ir.ui.view,arch_db:product_state.view_product_template_search_state +#, fuzzy +msgid "State" +msgstr "Status" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__code +msgid "State Code" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__name +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +msgid "State Name" +msgstr "" + +#. module: product_state +#: model:ir.actions.act_window,name:product_state.action_open_state_products +#: model:ir.model.fields,field_description:product_state.field_product_state__product_ids +#, fuzzy +msgid "State Products" +msgstr "Status" + +#. module: product_state +#: model:ir.model.fields,help:product_state.field_product_state__sequence +msgid "Used to order the States" +msgstr "" + +#. module: product_state +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_tree +#, fuzzy +msgid "product.state" +msgstr "Predložak proizvoda" diff --git a/product_state/i18n/nl_NL.po b/product_state/i18n/nl_NL.po new file mode 100644 index 0000000..8f9d873 --- /dev/null +++ b/product_state/i18n/nl_NL.po @@ -0,0 +1,175 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_state +# +# Translators: +# Peter Hageman , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-05-27 04:44+0000\n" +"PO-Revision-Date: 2017-05-27 04:44+0000\n" +"Last-Translator: Peter Hageman , 2017\n" +"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/" +"teams/23907/nl_NL/)\n" +"Language: nl_NL\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: product_state +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +msgid "Code" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__create_uid +msgid "Created by" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__create_date +msgid "Created on" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__description +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +msgid "Description" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__display_name +msgid "Display Name" +msgstr "" + +#. module: product_state +#: model:product.state,name:product_state.product_state_end +msgid "End of Lifecycle" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__id +msgid "ID" +msgstr "" + +#. module: product_state +#: model:product.state,name:product_state.product_state_draft +msgid "In Development" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state____last_update +msgid "Last Modified on" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__write_date +msgid "Last Updated on" +msgstr "" + +#. module: product_state +#: model:product.state,name:product_state.product_state_sellable +msgid "Normal" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__products_count +msgid "Number of products" +msgstr "" + +#. module: product_state +#: model:product.state,name:product_state.product_state_obsolete +msgid "Obsolete" +msgstr "" + +#. module: product_state +#: model:ir.actions.act_window,name:product_state.action_open_single_product_state +#: model:ir.model,name:product_state.model_product_state +#: model_terms:ir.ui.view,arch_db:product_state.product_state_search_form_view +#, fuzzy +msgid "Product State" +msgstr "Productsjabloon" + +#. module: product_state +#: sql_constraint:product.state:0 +msgid "Product State Code must be unique." +msgstr "" + +#. module: product_state +#: model:ir.ui.menu,name:product_state.menu_product_state +#, fuzzy +msgid "Product States" +msgstr "Productsjabloon" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_product__state +#: model:ir.model.fields,field_description:product_state.field_product_template__state +#, fuzzy +msgid "Product Status" +msgstr "Productsjabloon" + +#. module: product_state +#: model:ir.model,name:product_state.model_product_template +msgid "Product Template" +msgstr "Productsjabloon" + +#. module: product_state +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_kanban +msgid "Products" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,help:product_state.field_product_product__product_state_id +#: model:ir.model.fields,help:product_state.field_product_template__product_state_id +msgid "Select a state for this product" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__sequence +msgid "Sequence" +msgstr "" + +#. module: product_state +#: model:ir.actions.act_window,name:product_state.action_product_state +#: model:ir.model.fields,field_description:product_state.field_product_product__product_state_id +#: model:ir.model.fields,field_description:product_state.field_product_template__product_state_id +#: model_terms:ir.ui.view,arch_db:product_state.view_product_template_search_state +msgid "State" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__code +msgid "State Code" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__name +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +msgid "State Name" +msgstr "" + +#. module: product_state +#: model:ir.actions.act_window,name:product_state.action_open_state_products +#: model:ir.model.fields,field_description:product_state.field_product_state__product_ids +msgid "State Products" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,help:product_state.field_product_state__sequence +msgid "Used to order the States" +msgstr "" + +#. module: product_state +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_tree +#, fuzzy +msgid "product.state" +msgstr "Productsjabloon" diff --git a/product_state/i18n/pt.po b/product_state/i18n/pt.po new file mode 100644 index 0000000..b3b2fef --- /dev/null +++ b/product_state/i18n/pt.po @@ -0,0 +1,168 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_state +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-10-18 21:08+0000\n" +"Last-Translator: Pedro Castro Silva \n" +"Language-Team: none\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 3.10\n" + +#. module: product_state +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +msgid "Code" +msgstr "Código" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__create_date +msgid "Created on" +msgstr "Criado em" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__description +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +msgid "Description" +msgstr "Descrição" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__display_name +msgid "Display Name" +msgstr "Nome a Exibir" + +#. module: product_state +#: model:product.state,name:product_state.product_state_end +msgid "End of Lifecycle" +msgstr "Fim de Ciclo de Vida" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__id +msgid "ID" +msgstr "Id" + +#. module: product_state +#: model:product.state,name:product_state.product_state_draft +msgid "In Development" +msgstr "Em Desenvolvimento" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state____last_update +msgid "Last Modified on" +msgstr "Última Modificação em" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__write_uid +msgid "Last Updated by" +msgstr "Última Atualização por" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__write_date +msgid "Last Updated on" +msgstr "Última Atualização em" + +#. module: product_state +#: model:product.state,name:product_state.product_state_sellable +msgid "Normal" +msgstr "Normal" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__products_count +msgid "Number of products" +msgstr "Número de Produtos" + +#. module: product_state +#: model:product.state,name:product_state.product_state_obsolete +msgid "Obsolete" +msgstr "Obsoleto" + +#. module: product_state +#: model:ir.actions.act_window,name:product_state.action_open_single_product_state +#: model:ir.model,name:product_state.model_product_state +#: model_terms:ir.ui.view,arch_db:product_state.product_state_search_form_view +msgid "Product State" +msgstr "Estado do Produto" + +#. module: product_state +#: sql_constraint:product.state:0 +msgid "Product State Code must be unique." +msgstr "O Código de Estado do Produto tem que ser único." + +#. module: product_state +#: model:ir.ui.menu,name:product_state.menu_product_state +msgid "Product States" +msgstr "Estados de Produtos" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_product__state +#: model:ir.model.fields,field_description:product_state.field_product_template__state +msgid "Product Status" +msgstr "Estado de Produto" + +#. module: product_state +#: model:ir.model,name:product_state.model_product_template +msgid "Product Template" +msgstr "Modelo de Produto" + +#. module: product_state +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_kanban +msgid "Products" +msgstr "Produtos" + +#. module: product_state +#: model:ir.model.fields,help:product_state.field_product_product__product_state_id +#: model:ir.model.fields,help:product_state.field_product_template__product_state_id +msgid "Select a state for this product" +msgstr "Selecione um estado para este produto" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__sequence +msgid "Sequence" +msgstr "Sequência" + +#. module: product_state +#: model:ir.actions.act_window,name:product_state.action_product_state +#: model:ir.model.fields,field_description:product_state.field_product_product__product_state_id +#: model:ir.model.fields,field_description:product_state.field_product_template__product_state_id +#: model_terms:ir.ui.view,arch_db:product_state.view_product_template_search_state +msgid "State" +msgstr "Estado" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__code +msgid "State Code" +msgstr "Código do Estado" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__name +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +msgid "State Name" +msgstr "Nome do Estado" + +#. module: product_state +#: model:ir.actions.act_window,name:product_state.action_open_state_products +#: model:ir.model.fields,field_description:product_state.field_product_state__product_ids +msgid "State Products" +msgstr "Produtos do Estado" + +#. module: product_state +#: model:ir.model.fields,help:product_state.field_product_state__sequence +msgid "Used to order the States" +msgstr "Usado para ordenar os Estados" + +#. module: product_state +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_tree +msgid "product.state" +msgstr "" diff --git a/product_state/i18n/sl.po b/product_state/i18n/sl.po new file mode 100644 index 0000000..46bb468 --- /dev/null +++ b/product_state/i18n/sl.po @@ -0,0 +1,175 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_state +# +# Translators: +# OCA Transbot , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-27 03:49+0000\n" +"PO-Revision-Date: 2018-01-27 03:49+0000\n" +"Last-Translator: OCA Transbot , 2018\n" +"Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n" +"Language: sl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +#. module: product_state +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +msgid "Code" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__create_uid +msgid "Created by" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__create_date +msgid "Created on" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__description +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +msgid "Description" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__display_name +msgid "Display Name" +msgstr "" + +#. module: product_state +#: model:product.state,name:product_state.product_state_end +msgid "End of Lifecycle" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__id +msgid "ID" +msgstr "" + +#. module: product_state +#: model:product.state,name:product_state.product_state_draft +msgid "In Development" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state____last_update +msgid "Last Modified on" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__write_date +msgid "Last Updated on" +msgstr "" + +#. module: product_state +#: model:product.state,name:product_state.product_state_sellable +msgid "Normal" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__products_count +msgid "Number of products" +msgstr "" + +#. module: product_state +#: model:product.state,name:product_state.product_state_obsolete +msgid "Obsolete" +msgstr "" + +#. module: product_state +#: model:ir.actions.act_window,name:product_state.action_open_single_product_state +#: model:ir.model,name:product_state.model_product_state +#: model_terms:ir.ui.view,arch_db:product_state.product_state_search_form_view +#, fuzzy +msgid "Product State" +msgstr "Predloga proizvoda" + +#. module: product_state +#: sql_constraint:product.state:0 +msgid "Product State Code must be unique." +msgstr "" + +#. module: product_state +#: model:ir.ui.menu,name:product_state.menu_product_state +#, fuzzy +msgid "Product States" +msgstr "Predloga proizvoda" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_product__state +#: model:ir.model.fields,field_description:product_state.field_product_template__state +#, fuzzy +msgid "Product Status" +msgstr "Predloga proizvoda" + +#. module: product_state +#: model:ir.model,name:product_state.model_product_template +msgid "Product Template" +msgstr "Predloga proizvoda" + +#. module: product_state +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_kanban +msgid "Products" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,help:product_state.field_product_product__product_state_id +#: model:ir.model.fields,help:product_state.field_product_template__product_state_id +msgid "Select a state for this product" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__sequence +msgid "Sequence" +msgstr "" + +#. module: product_state +#: model:ir.actions.act_window,name:product_state.action_product_state +#: model:ir.model.fields,field_description:product_state.field_product_product__product_state_id +#: model:ir.model.fields,field_description:product_state.field_product_template__product_state_id +#: model_terms:ir.ui.view,arch_db:product_state.view_product_template_search_state +msgid "State" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__code +msgid "State Code" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,field_description:product_state.field_product_state__name +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_form +msgid "State Name" +msgstr "" + +#. module: product_state +#: model:ir.actions.act_window,name:product_state.action_open_state_products +#: model:ir.model.fields,field_description:product_state.field_product_state__product_ids +msgid "State Products" +msgstr "" + +#. module: product_state +#: model:ir.model.fields,help:product_state.field_product_state__sequence +msgid "Used to order the States" +msgstr "" + +#. module: product_state +#: model_terms:ir.ui.view,arch_db:product_state.view_product_state_tree +#, fuzzy +msgid "product.state" +msgstr "Predloga proizvoda" diff --git a/product_state/migrations/12.0.2.0.0/post-migration.py b/product_state/migrations/12.0.2.0.0/post-migration.py new file mode 100644 index 0000000..541449c --- /dev/null +++ b/product_state/migrations/12.0.2.0.0/post-migration.py @@ -0,0 +1,7 @@ +# Copyright 2020 Tecnativa - Pedro M. Baeza +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +from odoo.addons.product_state.hooks import post_init_hook + + +def migrate(cr, version): + post_init_hook(cr, False) diff --git a/product_state/models/__init__.py b/product_state/models/__init__.py new file mode 100644 index 0000000..437a4f0 --- /dev/null +++ b/product_state/models/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2017 ACSONE SA/NV () +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from . import product_template diff --git a/product_state/models/product_template.py b/product_state/models/product_template.py new file mode 100644 index 0000000..c706316 --- /dev/null +++ b/product_state/models/product_template.py @@ -0,0 +1,79 @@ +# Copyright 2017 ACSONE SA/NV () +# Copyright 2020 Tecnativa - Pedro M. Baeza +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo import api, models, fields + + +class ProductState(models.Model): + _name = "product.state" + _description = "Product State" + _order = "sequence, id" + + name = fields.Char("State Name", required=True, translate=True) + code = fields.Char("State Code", required=True) + sequence = fields.Integer("Sequence", help="Used to order the States", default=25) + description = fields.Text(translate=True) + product_ids = fields.One2many( + "product.template", "product_state_id", string="State Products", + ) + products_count = fields.Integer( + string="Number of products", compute="_compute_products_count", + ) + + _sql_constraints = [ + ("code_unique", "UNIQUE(code)", "Product State Code must be unique.") + ] + + @api.depends("product_ids") + def _compute_products_count(self): + data = self.env["product.template"].read_group( + [("product_state_id", "in", self.ids)], + ["product_state_id"], + ["product_state_id"], + ) + mapped_data = { + record["product_state_id"][0]: record["product_state_id_count"] + for record in data + } + for state in self: + state.products_count = mapped_data.get(state.id, 0) + + +class ProductTemplate(models.Model): + _inherit = "product.template" + + state = fields.Char( + string="Product Status", + index=True, + compute="_compute_product_state", + inverse="_inverse_product_state", + store=True, + ) + product_state_id = fields.Many2one( + "product.state", string="State", help="Select a state for this product", + ) + + @api.depends("product_state_id") + def _compute_product_state(self): + for product_tmpl in self: + product_tmpl.state = product_tmpl.product_state_id.code + + def _inverse_product_state(self): + ProductState = self.env["product.state"] + state_mapping = {} + for product_tmpl in self.filtered("state"): + product_state = state_mapping.get(product_tmpl.state) + if not product_state: + product_state = ProductState.search( + [("code", "=", product_tmpl.state)], limit=1 + ) + if not product_state: + product_state = ProductState.create({ + "name": product_tmpl.state, + "code": product_tmpl.state, + }) + state_mapping[product_tmpl.state] = product_state + if product_tmpl.product_state_id != product_state: + product_tmpl.product_state_id = product_state + self.filtered(lambda x: not x.state).write({'product_state_id': False}) diff --git a/product_state/readme/CONTRIBUTORS.rst b/product_state/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..ce54243 --- /dev/null +++ b/product_state/readme/CONTRIBUTORS.rst @@ -0,0 +1,5 @@ +* Cedric Pigeon +* Alexandre Saunier +* Nikul Chaudhary +* Eduardo Magdalena (C2i Change 2 improve http://www.c2i.es) +* Andrii Skrypka diff --git a/product_state/readme/DESCRIPTION.rst b/product_state/readme/DESCRIPTION.rst new file mode 100644 index 0000000..3e27c23 --- /dev/null +++ b/product_state/readme/DESCRIPTION.rst @@ -0,0 +1,6 @@ +This module introduces the state field on product template and allows simple product life cycle: + +- draft: In Development +- sellable: Normal +- end: End of Lifecycle +- obsolete: Obsolete diff --git a/product_state/readme/USAGE.rst b/product_state/readme/USAGE.rst new file mode 100644 index 0000000..1c5324f --- /dev/null +++ b/product_state/readme/USAGE.rst @@ -0,0 +1,9 @@ +To create a new state: + +#. Go to *Sales > Configuration > Products > Product States*. +#. You can set its name and a description. + +To add a product to a state: + +#. Go to the product itself and edit. +#. You can select the desired status in the list of buttons above the form. diff --git a/product_state/security/ir.model.access.csv b/product_state/security/ir.model.access.csv new file mode 100644 index 0000000..742e023 --- /dev/null +++ b/product_state/security/ir.model.access.csv @@ -0,0 +1,3 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +"access_product_state_product_manager","product.state","model_product_state","base.group_partner_manager",1,1,1,1 +"access_product_state_public","product.state.public","model_product_state",,1,0,0,0 diff --git a/product_state/static/description/icon.png b/product_state/static/description/icon.png new file mode 100644 index 0000000..3a0328b Binary files /dev/null and b/product_state/static/description/icon.png differ diff --git a/product_state/static/description/index.html b/product_state/static/description/index.html new file mode 100644 index 0000000..fe6fab6 --- /dev/null +++ b/product_state/static/description/index.html @@ -0,0 +1,445 @@ + + + + + + +Product State + + + +
+

Product State

+ + +

Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runbot

+

This module introduces the state field on product template and allows simple product life cycle:

+
    +
  • draft: In Development
  • +
  • sellable: Normal
  • +
  • end: End of Lifecycle
  • +
  • obsolete: Obsolete
  • +
+

Table of contents

+ +
+

Usage

+

To create a new state:

+
    +
  1. Go to Sales > Configuration > Products > Product States.
  2. +
  3. You can set its name and a description.
  4. +
+

To add a product to a state:

+
    +
  1. Go to the product itself and edit.
  2. +
  3. You can select the desired status in the list of buttons above the form.
  4. +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub 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.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • ACSONE SA/NV
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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 maintainer:

+

emagdalenaC2i

+

This module is part of the OCA/product-attribute project on GitHub.

+

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

+
+
+
+ + diff --git a/product_state/views/product_views.xml b/product_state/views/product_views.xml new file mode 100644 index 0000000..5967949 --- /dev/null +++ b/product_state/views/product_views.xml @@ -0,0 +1,140 @@ + + + + product.state.search.form + product.state + + + + + + + + + + product.state.form + product.state + +
+ +
+ +
+
+
+ + + + + + +
+
+
+
+ + product.state.tree + product.state + + + + + + + + + product.state.kanban + product.state + + + + + + + +
+
+

+ +

+ +
+
+
+
+
+
+
+ + product.template.search.state + product.template + + + + + + + + + + + product.template.common.form + product.template + + +
+ + +
+
+
+ + product.template.tree (product_state_id) + product.template + + 50 + + + + + + + State + product.state + form + kanban,form,tree + + +
diff --git a/purchase_order_product_recommendation/README.rst b/purchase_order_product_recommendation/README.rst new file mode 100644 index 0000000..bd4f7e6 --- /dev/null +++ b/purchase_order_product_recommendation/README.rst @@ -0,0 +1,109 @@ +===================================== +Purchase Order Product Recommendation +===================================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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%2Fpurchase--workflow-lightgray.png?logo=github + :target: https://github.com/OCA/purchase-workflow/tree/12.0/purchase_order_product_recommendation + :alt: OCA/purchase-workflow +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/purchase-workflow-12-0/purchase-workflow-12-0-purchase_order_product_recommendation + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/142/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module adds a recommended products wizard to current purchase order. + +It is based on delivered products to customer locations in a given range of +dates, and allows the purchase manager to quickly know the most sold products +for the current supplier, which results in an easy to use hint to improve +the purchase workflow. + +If you want a better mobile usability, the module is ready to use with the +'web_widget_numeric_step' module. Just install it and you will get a better +numeric input experience. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +To use this module, you need to: + +#. Create a new purchase order. +#. Assign its supplier. +#. Press *Recommended Products* button. +#. Set or adjust hinted quantities to order. +#. Press *Accept*. + +The wizard filters products those with supplier infos set for the current order +supplier. Then it computes how many times those products have been delivered to +customer locations, and finally it makes a simple estimation of how many +quantites would be necesary to order given the forcasted stock and the computed +demand. + +If you want to constrain results to only some categories, you can also select +them in the wizard. + +If you have multiple warehouses, you can also constrain the recommendations to +the deliveries of specific ones. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub 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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Tecnativa + +Contributors +~~~~~~~~~~~~ + +* `Tecnativa `_: + + * David Vidal + * Ernesto Tejeda + * Pedro M. Baeza + +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/purchase-workflow `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/purchase_order_product_recommendation/__init__.py b/purchase_order_product_recommendation/__init__.py new file mode 100644 index 0000000..5cb1c49 --- /dev/null +++ b/purchase_order_product_recommendation/__init__.py @@ -0,0 +1 @@ +from . import wizards diff --git a/purchase_order_product_recommendation/__manifest__.py b/purchase_order_product_recommendation/__manifest__.py new file mode 100644 index 0000000..5bda994 --- /dev/null +++ b/purchase_order_product_recommendation/__manifest__.py @@ -0,0 +1,20 @@ +# Copyright 2019 David Vidal +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +{ + "name": "Purchase Order Product Recommendation", + "summary": "Recommend products to buy to supplier based on history", + "version": "12.0.1.2.3", + "category": "Purchases", + "website": "https://github.com/OCA/purchase-workflow", + "author": "Tecnativa, Odoo Community Association (OCA)", + "license": "AGPL-3", + "application": False, + "installable": True, + "depends": [ + "purchase_stock", + ], + "data": [ + "wizards/purchase_order_recommendation_view.xml", + "views/purchase_order_view.xml", + ], +} diff --git a/purchase_order_product_recommendation/i18n/es.po b/purchase_order_product_recommendation/i18n/es.po new file mode 100644 index 0000000..5fbceba --- /dev/null +++ b/purchase_order_product_recommendation/i18n/es.po @@ -0,0 +1,299 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * purchase_order_product_recommendation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-11-27 16:24+0000\n" +"PO-Revision-Date: 2019-11-27 16:24+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: purchase_order_product_recommendation +#: model_terms:ir.ui.view,arch_db:purchase_order_product_recommendation.purchase_order_recommendation_view_form +msgid "Accept" +msgstr "Aceptar" + +#. module: purchase_order_product_recommendation +#: model_terms:ir.ui.view,arch_db:purchase_order_product_recommendation.purchase_order_recommendation_view_form +msgid "Cancel" +msgstr "Cancelar" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,help:purchase_order_product_recommendation.field_purchase_order_recommendation__warehouse_ids +msgid "Constrain search to an specific warehouse" +msgstr "Restringir búsqueda a un almacén concreto" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__create_uid +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__create_date +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__currency_id +msgid "Currency" +msgstr "Moneda" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__date_begin +msgid "Date Begin" +msgstr "Fecha de inicio" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__date_end +msgid "Date End" +msgstr "Fecha final" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__display_name +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__display_name +msgid "Display Name" +msgstr "Nombre a mostrar" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,help:purchase_order_product_recommendation.field_purchase_order_recommendation__product_category_ids +msgid "Filter by product internal category" +msgstr "Filtrar por categoría interna de producto" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,help:purchase_order_product_recommendation.field_purchase_order_recommendation__date_end +msgid "Final date to compute recommendations." +msgstr "Fecha has la que se calcularán las recomendaciones." + +#. module: purchase_order_product_recommendation +#: model_terms:ir.ui.view,arch_db:purchase_order_product_recommendation.purchase_order_recommendation_view_form +msgid "Forecasted Qty" +msgstr "Ctd Prevista" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__id +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__id +msgid "ID" +msgstr "ID (identificación)" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,help:purchase_order_product_recommendation.field_purchase_order_recommendation__date_begin +msgid "Initial date to compute recommendations." +msgstr "Fecha desde la que se calcularán las recomendaciones." + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__is_modified +msgid "Is Modified" +msgstr "Está modificado" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation____last_update +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line____last_update +msgid "Last Modified on" +msgstr "Última modificación en" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__write_uid +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__write_date +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__line_amount +msgid "Number of recommendations" +msgstr "Número de recomendaciones" + +#. module: purchase_order_product_recommendation +#: model_terms:ir.ui.view,arch_db:purchase_order_product_recommendation.purchase_order_recommendation_view_form +msgid "Price" +msgstr "Precio" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__price_unit +msgid "Price Unit" +msgstr "Precio unitario" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__product_id +msgid "Product" +msgstr "Producto" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__product_category_ids +msgid "Product Categories" +msgstr "Categorías de productos" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__line_ids +msgid "Products" +msgstr "Productos" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__purchase_line_id +msgid "Purchase Line" +msgstr "Línea de compra" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__order_id +msgid "Purchase Order" +msgstr "Pedido de compra" + +#. module: purchase_order_product_recommendation +#: model_terms:ir.ui.view,arch_db:purchase_order_product_recommendation.purchase_order_recommendation_view_form +msgid "Qty" +msgstr "Ctd" + +#. module: purchase_order_product_recommendation +#: model_terms:ir.ui.view,arch_db:purchase_order_product_recommendation.purchase_order_recommendation_view_form +msgid "Qty Dlvd./day" +msgstr "Ctd entrg./día" + +#. module: purchase_order_product_recommendation +#: model_terms:ir.ui.view,arch_db:purchase_order_product_recommendation.purchase_order_recommendation_view_form +msgid "Qty On Hand" +msgstr "Ctd a mano" + +#. module: purchase_order_product_recommendation +#: model_terms:ir.ui.view,arch_db:purchase_order_product_recommendation.purchase_order_recommendation_view_form +msgid "Qty Received" +msgstr "Ctd recibida" + +#. module: purchase_order_product_recommendation +#: model_terms:ir.ui.view,arch_db:purchase_order_product_recommendation.purchase_order_recommendation_view_form +msgid "Qty delivered" +msgstr "Ctd entregada" + +#. module: purchase_order_product_recommendation +#: model_terms:ir.ui.view,arch_db:purchase_order_product_recommendation.purchase_order_form +msgid "Recommended Products" +msgstr "Productos recomendados" + +#. module: purchase_order_product_recommendation +#: model:ir.actions.act_window,name:purchase_order_product_recommendation.purchase_order_recommendation_action +msgid "Recommended Products for this Customer" +msgstr "Productos recomendados para este proveedor" + +#. module: purchase_order_product_recommendation +#: model:ir.model,name:purchase_order_product_recommendation.model_purchase_order_recommendation_line +msgid "Recommended product for current purchase order" +msgstr "Producto recomendado para el pedido de compra en curso" + +#. module: purchase_order_product_recommendation +#: model:ir.model,name:purchase_order_product_recommendation.model_purchase_order_recommendation +msgid "Recommended products for current purchase order" +msgstr "Productos recomendados para el pedido de compra en curso" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,help:purchase_order_product_recommendation.field_purchase_order_recommendation__show_all_partner_products +msgid "Show all products with supplier infos for this supplier" +msgstr "Mostrar todos los productos con tarifas de compra para este proveedor" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__show_all_products +msgid "Show all purchasable products" +msgstr "Mostrar todos los productos comprables" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__show_all_partner_products +msgid "Show all supplier products" +msgstr "Mostrar todos los productos del proveedor" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,help:purchase_order_product_recommendation.field_purchase_order_recommendation__line_amount +msgid "" +"Stablish a limit on how many recommendations you want to get.Leave it as 0 " +"to set no limit" +msgstr "" +"Establezca un límite de cuántas recomendaciones desea obtener. Déjelo en 0 " +"si no desea límite" + +#. module: purchase_order_product_recommendation +#: code:addons/purchase_order_product_recommendation/wizards/purchase_order_recommendation.py:73 +#, python-format +msgid "This wizard is only valid for purchases" +msgstr "Este asistente solo es válido para compras" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__times_delivered +msgid "Times Delivered" +msgstr "Veces entregado" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__times_received +msgid "Times Received" +msgstr "Veces recibido" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__units_available +msgid "Units Available" +msgstr "Cantidad a mano" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__units_avg_delivered +msgid "Units Avg Delivered" +msgstr "Media de unidades entregadas" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__units_delivered +msgid "Units Delivered" +msgstr "Unidades entregadas" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__units_included +msgid "Units Included" +msgstr "Unidades incluídas" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__units_received +msgid "Units Received" +msgstr "Unidades recibidas" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__units_virtual_available +msgid "Units Virtual Available" +msgstr "Cantidad prevista" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,help:purchase_order_product_recommendation.field_purchase_order_recommendation__show_all_products +msgid "Useful if a product hasn't been selled by the partner yet" +msgstr "Resulta útil si un producto aún no ha sido vendido por el proveedor." + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__partner_id +msgid "Vendor" +msgstr "Proveedor" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__warehouse_ids +msgid "Warehouse" +msgstr "Almacén" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation__warehouse_count +msgid "Warehouse Count" +msgstr "Nº de Almacenes" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,field_description:purchase_order_product_recommendation.field_purchase_order_recommendation_line__wizard_id +msgid "Wizard" +msgstr "Asistente" + +#. module: purchase_order_product_recommendation +#: model:ir.model.fields,help:purchase_order_product_recommendation.field_purchase_order_recommendation_line__partner_id +msgid "You can find a vendor by its Name, TIN, Email or Internal Reference." +msgstr "" diff --git a/purchase_order_product_recommendation/readme/CONTRIBUTORS.rst b/purchase_order_product_recommendation/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..e4383c9 --- /dev/null +++ b/purchase_order_product_recommendation/readme/CONTRIBUTORS.rst @@ -0,0 +1,5 @@ +* `Tecnativa `_: + + * David Vidal + * Ernesto Tejeda + * Pedro M. Baeza diff --git a/purchase_order_product_recommendation/readme/DESCRIPTION.rst b/purchase_order_product_recommendation/readme/DESCRIPTION.rst new file mode 100644 index 0000000..19a79e6 --- /dev/null +++ b/purchase_order_product_recommendation/readme/DESCRIPTION.rst @@ -0,0 +1,10 @@ +This module adds a recommended products wizard to current purchase order. + +It is based on delivered products to customer locations in a given range of +dates, and allows the purchase manager to quickly know the most sold products +for the current supplier, which results in an easy to use hint to improve +the purchase workflow. + +If you want a better mobile usability, the module is ready to use with the +'web_widget_numeric_step' module. Just install it and you will get a better +numeric input experience. diff --git a/purchase_order_product_recommendation/readme/USAGE.rst b/purchase_order_product_recommendation/readme/USAGE.rst new file mode 100644 index 0000000..ba13b5b --- /dev/null +++ b/purchase_order_product_recommendation/readme/USAGE.rst @@ -0,0 +1,19 @@ +To use this module, you need to: + +#. Create a new purchase order. +#. Assign its supplier. +#. Press *Recommended Products* button. +#. Set or adjust hinted quantities to order. +#. Press *Accept*. + +The wizard filters products those with supplier infos set for the current order +supplier. Then it computes how many times those products have been delivered to +customer locations, and finally it makes a simple estimation of how many +quantites would be necesary to order given the forcasted stock and the computed +demand. + +If you want to constrain results to only some categories, you can also select +them in the wizard. + +If you have multiple warehouses, you can also constrain the recommendations to +the deliveries of specific ones. diff --git a/purchase_order_product_recommendation/static/description/icon.png b/purchase_order_product_recommendation/static/description/icon.png new file mode 100644 index 0000000..3a0328b Binary files /dev/null and b/purchase_order_product_recommendation/static/description/icon.png differ diff --git a/purchase_order_product_recommendation/static/description/index.html b/purchase_order_product_recommendation/static/description/index.html new file mode 100644 index 0000000..0370979 --- /dev/null +++ b/purchase_order_product_recommendation/static/description/index.html @@ -0,0 +1,452 @@ + + + + + + +Purchase Order Product Recommendation + + + +
+

Purchase Order Product Recommendation

+ + +

Beta License: AGPL-3 OCA/purchase-workflow Translate me on Weblate Try me on Runbot

+

This module adds a recommended products wizard to current purchase order.

+

It is based on delivered products to customer locations in a given range of +dates, and allows the purchase manager to quickly know the most sold products +for the current supplier, which results in an easy to use hint to improve +the purchase workflow.

+

If you want a better mobile usability, the module is ready to use with the +‘web_widget_numeric_step’ module. Just install it and you will get a better +numeric input experience.

+

Table of contents

+ +
+

Usage

+

To use this module, you need to:

+
    +
  1. Create a new purchase order.
  2. +
  3. Assign its supplier.
  4. +
  5. Press Recommended Products button.
  6. +
  7. Set or adjust hinted quantities to order.
  8. +
  9. Press Accept.
  10. +
+

The wizard filters products those with supplier infos set for the current order +supplier. Then it computes how many times those products have been delivered to +customer locations, and finally it makes a simple estimation of how many +quantites would be necesary to order given the forcasted stock and the computed +demand.

+

If you want to constrain results to only some categories, you can also select +them in the wizard.

+

If you have multiple warehouses, you can also constrain the recommendations to +the deliveries of specific ones.

+
+
+

Bug Tracker

+

Bugs are tracked on GitHub 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.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Tecnativa
  • +
+
+
+

Contributors

+
    +
  • Tecnativa:
      +
    • David Vidal
    • +
    • Ernesto Tejeda
    • +
    • Pedro M. Baeza
    • +
    +
  • +
+
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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/purchase-workflow project on GitHub.

+

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

+
+
+
+ + diff --git a/purchase_order_product_recommendation/tests/__init__.py b/purchase_order_product_recommendation/tests/__init__.py new file mode 100644 index 0000000..52cc49c --- /dev/null +++ b/purchase_order_product_recommendation/tests/__init__.py @@ -0,0 +1 @@ +from . import test_recommendation diff --git a/purchase_order_product_recommendation/tests/test_recommendation.py b/purchase_order_product_recommendation/tests/test_recommendation.py new file mode 100644 index 0000000..38f7b53 --- /dev/null +++ b/purchase_order_product_recommendation/tests/test_recommendation.py @@ -0,0 +1,299 @@ +# Copyright 2019 David Vidal +# Copyright 2020 Tecnativa - Pedro M. Baeza +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from datetime import date, datetime +from odoo.tests.common import SavepointCase + + +class RecommendationCase(SavepointCase): + @classmethod + def setUpClass(cls): + super(RecommendationCase, cls).setUpClass() + cls.partner = cls.env['res.partner'].create({ + 'name': 'Mr. Odoo', + }) + cls.category_obj = cls.env['product.category'] + cls.categ1 = cls.category_obj.create({ + 'name': 'Test Cat 1', + }) + cls.categ2 = cls.category_obj.create({ + 'name': 'Test Cat 2', + }) + cls.product_obj = cls.env['product.product'] + cls.prod_1 = cls.product_obj.create({ + 'default_code': 'product-1', + 'name': 'Test Product 1', + 'categ_id': cls.categ1.id, + 'type': 'product', + 'seller_ids': [(0, 0, {'name': cls.partner.id, 'price': 5})], + }) + cls.prod_2 = cls.prod_1.copy({ + 'default_code': 'product-2', + 'name': 'Test Product 2', + 'categ_id': cls.categ2.id, + 'seller_ids': [(0, 0, {'name': cls.partner.id, 'price': 10})], + }) + cls.prod_3 = cls.prod_1.copy({ + 'default_code': 'product-3', + 'name': 'Test Product 3', + 'categ_id': cls.categ2.id, + 'seller_ids': [(0, 0, {'name': cls.partner.id, 'price': 7})], + }) + # Warehouses + cls.wh1 = cls.env['stock.warehouse'].create({ + 'name': 'TEST WH1', + 'code': 'TST1', + }) + cls.wh2 = cls.env['stock.warehouse'].create({ + 'name': 'TEST WH2', + 'code': 'TST2', + }) + # Locations + location_obj = cls.env['stock.location'] + cls.supplier_loc = location_obj.create({ + 'name': 'Test supplier location', + 'usage': 'supplier', + }) + cls.customer_loc = location_obj.create({ + 'name': 'Test customer location', + 'usage': 'customer', + }) + # Create deliveries and receipts orders to have a history + cls.picking_obj = cls.env['stock.picking'] + cls.picking_1 = cls.picking_obj.create({ + 'location_id': cls.wh1.lot_stock_id.id, + 'location_dest_id': cls.customer_loc.id, + 'partner_id': cls.partner.id, + 'picking_type_id': cls.wh1.out_type_id.id, + }) + cls.picking_2 = cls.picking_obj.create({ + 'location_id': cls.wh2.lot_stock_id.id, + 'location_dest_id': cls.customer_loc.id, + 'partner_id': cls.partner.id, + 'picking_type_id': cls.wh2.out_type_id.id, + }) + cls.picking_3 = cls.picking_obj.create({ + 'location_id': cls.supplier_loc.id, + 'location_dest_id': cls.wh1.lot_stock_id.id, + 'partner_id': cls.partner.id, + 'picking_type_id': cls.wh1.in_type_id.id, + }) + cls.move_line = cls.env['stock.move.line'] + cls.move_line |= cls.move_line.create({ + 'product_id': cls.prod_1.id, + 'product_uom_id': cls.prod_1.uom_id.id, + 'qty_done': 1, + 'date': datetime(2018, 1, 11, 15, 5), + 'location_id': cls.wh1.lot_stock_id.id, + 'location_dest_id': cls.customer_loc.id, + 'picking_id': cls.picking_1.id, + }) + cls.move_line |= cls.move_line.create({ + 'product_id': cls.prod_2.id, + 'product_uom_id': cls.prod_2.uom_id.id, + 'qty_done': 38, + 'date': datetime(2019, 2, 1, 0, 5), + 'location_id': cls.wh1.lot_stock_id.id, + 'location_dest_id': cls.customer_loc.id, + 'picking_id': cls.picking_1.id, + }) + cls.move_line |= cls.move_line.create({ + 'product_id': cls.prod_2.id, + 'product_uom_id': cls.prod_2.uom_id.id, + 'qty_done': 4, + 'date': datetime(2019, 2, 1, 0, 5), + 'location_id': cls.wh2.lot_stock_id.id, + 'location_dest_id': cls.customer_loc.id, + 'picking_id': cls.picking_2.id, + }) + cls.move_line |= cls.move_line.create({ + 'product_id': cls.prod_3.id, + 'product_uom_id': cls.prod_3.uom_id.id, + 'qty_done': 13, + 'date': datetime(2019, 2, 1, 0, 6), + 'location_id': cls.wh2.lot_stock_id.id, + 'location_dest_id': cls.customer_loc.id, + 'picking_id': cls.picking_2.id, + }) + cls.move_line |= cls.move_line.create({ + 'product_id': cls.prod_3.id, + 'product_uom_id': cls.prod_3.uom_id.id, + 'qty_done': 7, + 'date': datetime(2019, 2, 1, 0, 0), + 'location_id': cls.supplier_loc.id, + 'location_dest_id': cls.wh1.lot_stock_id.id, + 'picking_id': cls.picking_3.id, + }) + cls.move_line.write({ + 'state': 'done', + }) + # Total stock available for prod3 is 5 units split in two warehouses + quant_obj = cls.env['stock.quant'] + quant_obj.create({ + 'product_id': cls.prod_3.id, + 'location_id': cls.wh1.lot_stock_id.id, + 'quantity': 2.0, + }) + quant_obj.create({ + 'product_id': cls.prod_3.id, + 'location_id': cls.wh2.lot_stock_id.id, + 'quantity': 3.0, + }) + # Create a purchase order for the same customer + cls.new_po = cls.env["purchase.order"].create({ + "partner_id": cls.partner.id, + }) + + def wizard(self): + """Get a wizard.""" + wizard = self.env["purchase.order.recommendation"].with_context( + active_id=self.new_po.id, active_model='purchase.order' + ).create({}) + wizard._generate_recommendations() + return wizard + + +class RecommendationCaseTests(RecommendationCase): + + def test_recommendations(self): + """Recommendations are OK.""" + wizard = self.wizard() + # Order came in from context + self.assertEqual(wizard.order_id, self.new_po) + # All our moves are in the past + self.assertFalse(wizard.line_ids) + wizard.date_begin = wizard.date_end = date(2019, 2, 1) + wizard._generate_recommendations() + self.assertEqual(wizard.line_ids[0].times_delivered, 2) + self.assertEqual(wizard.line_ids[0].units_delivered, 42) + self.assertEqual(wizard.line_ids[0].units_included, 42) + self.assertEqual(wizard.line_ids[0].product_id, self.prod_2) + self.assertEqual(wizard.line_ids[1].times_delivered, 1) + self.assertEqual(wizard.line_ids[1].units_delivered, 13) + self.assertEqual(wizard.line_ids[1].units_included, 8) + self.assertEqual(wizard.line_ids[1].product_id, self.prod_3) + self.assertEqual(wizard.line_ids[1].units_available, 5) + self.assertEqual(wizard.line_ids[1].units_virtual_available, 5) + # Only 1 product if limited as such + wizard.line_amount = 1 + wizard._generate_recommendations() + self.assertEqual(len(wizard.line_ids), 1) + + def test_recommendations_by_warehouse(self): + """We can split recommendations by delivery warehouse""" + wizard = self.wizard() + wizard.date_begin = wizard.date_end = date(2019, 2, 1) + # Just delivered to WH2 + wizard.warehouse_ids = self.wh2 + wizard._generate_recommendations() + self.assertEqual(wizard.line_ids[0].times_delivered, 1) + self.assertEqual(wizard.line_ids[0].units_delivered, 4) + self.assertEqual(wizard.line_ids[0].units_included, 4) + self.assertEqual(wizard.line_ids[0].product_id, self.prod_2) + self.assertEqual(wizard.line_ids[1].times_delivered, 1) + self.assertEqual(wizard.line_ids[1].units_delivered, 13) + self.assertEqual(wizard.line_ids[1].units_included, 10) + self.assertEqual(wizard.line_ids[1].product_id, self.prod_3) + self.assertEqual(wizard.line_ids[1].units_available, 3) + self.assertEqual(wizard.line_ids[1].units_virtual_available, 3) + # Just delivered to WH1 + wizard.warehouse_ids = self.wh1 + wizard._generate_recommendations() + self.assertEqual(wizard.line_ids[0].times_delivered, 1) + self.assertEqual(wizard.line_ids[0].units_delivered, 38) + self.assertEqual(wizard.line_ids[0].units_included, 38) + self.assertEqual(wizard.line_ids[0].product_id, self.prod_2) + self.assertEqual(wizard.line_ids[1].times_delivered, 0) + self.assertEqual(wizard.line_ids[1].units_delivered, 0) + self.assertEqual(wizard.line_ids[1].units_received, 7) + self.assertEqual(wizard.line_ids[1].units_included, 0) + self.assertEqual(wizard.line_ids[1].product_id, self.prod_3) + self.assertEqual(len(wizard.line_ids), 2) + self.assertEqual(wizard.line_ids[1].units_available, 2) + self.assertEqual(wizard.line_ids[1].units_virtual_available, 2) + # Delivered to both warehouses + wizard.warehouse_ids |= self.wh2 + wizard._generate_recommendations() + self.assertEqual(wizard.line_ids[0].times_delivered, 2) + self.assertEqual(wizard.line_ids[0].units_delivered, 42) + self.assertEqual(wizard.line_ids[0].units_included, 42) + self.assertEqual(wizard.line_ids[0].product_id, self.prod_2) + self.assertEqual(wizard.line_ids[1].times_delivered, 1) + self.assertEqual(wizard.line_ids[1].units_delivered, 13) + self.assertEqual(wizard.line_ids[1].units_included, 8) + self.assertEqual(wizard.line_ids[1].product_id, self.prod_3) + self.assertEqual(wizard.line_ids[1].units_available, 5) + self.assertEqual(wizard.line_ids[1].units_virtual_available, 5) + + def test_action_accept(self): + """Open wizard when there are PO Lines and click on Accept""" + po_line = self.env['purchase.order.line'].new({ + 'sequence': 1, + 'order_id': self.new_po.id, + 'product_id': self.prod_2.id, + }) + po_line.onchange_product_id() + po_line.product_qty = 10 + po_line._onchange_quantity() + self.new_po.order_line = po_line + # Create wizard and set dates + wizard = self.wizard() + wizard.date_begin = wizard.date_end = date(2019, 2, 1) + wizard._generate_recommendations() + # After change dates, in the recommendation line corresponding to the + # self.prod_2 Units Included must be 10 + self.assertEqual(wizard.line_ids[0].units_included, 10) + self.assertEqual(wizard.line_ids[1].units_included, 8) + # Change Units Included amount to 20 and accept, then the product_qty + # of the PO Line corresponding to the self.prod_2 must change to 20 + wizard.line_ids[0].units_included = 20 + wizard.action_accept() + self.assertEqual(len(self.new_po.order_line), 2) + self.assertEqual(self.new_po.order_line[0].product_id, self.prod_2) + self.assertEqual(self.new_po.order_line[0].product_qty, 20) + self.assertEqual(self.new_po.order_line[1].product_id, self.prod_3) + self.assertEqual(self.new_po.order_line[1].product_qty, 8) + + def test_recommendations_by_category(self): + """We can split recommendations by delivery warehouse""" + wizard = self.wizard() + wizard.date_begin = wizard.date_end = '2019-02-01' + # Just delivered from category 1 + wizard.product_category_ids = self.categ1 + wizard.show_all_partner_products = True + wizard._generate_recommendations() + # Just one line with products from category 1 + self.assertEqual(wizard.line_ids.product_id, self.prod_1) + # Just delivered from category 2 + wizard.product_category_ids = self.categ2 + wizard._generate_recommendations() + self.assertEqual(len(wizard.line_ids), 2) + # All categorys + wizard.product_category_ids += self.categ1 + wizard._generate_recommendations() + self.assertEqual(len(wizard.line_ids), 3) + # No category set + wizard.product_category_ids = False + wizard._generate_recommendations() + self.assertEqual(len(wizard.line_ids), 3) + # All products + wizard.show_all_products = True + wizard.line_amount = 0 + wizard._generate_recommendations() + purchase_products_number = self.product_obj.search_count([ + ('purchase_ok', '!=', False), + ]) + self.assertEqual(len(wizard.line_ids), purchase_products_number) + + def test_recommendations_inactive_product(self): + """Recommendations are OK.""" + self.prod_2.active = False + wizard = self.wizard() + wizard.date_begin = wizard.date_end = date(2019, 2, 1) + wizard._generate_recommendations() + # The first recommendation line is the prod_3, as prod_2 is archived + self.assertEqual(wizard.line_ids[0].product_id, self.prod_3) + self.prod_3.purchase_ok = False + wizard._generate_recommendations() + # No recommendations as both elegible products are excluded + self.assertFalse(wizard.line_ids) diff --git a/purchase_order_product_recommendation/views/purchase_order_view.xml b/purchase_order_product_recommendation/views/purchase_order_view.xml new file mode 100644 index 0000000..3698a47 --- /dev/null +++ b/purchase_order_product_recommendation/views/purchase_order_view.xml @@ -0,0 +1,20 @@ + + + + + + Recommended products button + purchase.order + + +
+
+
+
+ +
diff --git a/purchase_order_product_recommendation/wizards/__init__.py b/purchase_order_product_recommendation/wizards/__init__.py new file mode 100644 index 0000000..f0ed6f1 --- /dev/null +++ b/purchase_order_product_recommendation/wizards/__init__.py @@ -0,0 +1 @@ +from . import purchase_order_recommendation diff --git a/purchase_order_product_recommendation/wizards/purchase_order_recommendation.py b/purchase_order_product_recommendation/wizards/purchase_order_recommendation.py new file mode 100644 index 0000000..a3f9281 --- /dev/null +++ b/purchase_order_product_recommendation/wizards/purchase_order_recommendation.py @@ -0,0 +1,393 @@ +# Copyright 2019 David Vidal +# Copyright 2020 Tecnativa - Pedro M. Baeza +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from datetime import datetime +from odoo import _, api, fields, models +from odoo.addons import decimal_precision as dp +from odoo.exceptions import UserError +from datetime import timedelta + + +class PurchaseOrderRecommendation(models.TransientModel): + _name = 'purchase.order.recommendation' + _description = 'Recommended products for current purchase order' + + order_id = fields.Many2one( + comodel_name='purchase.order', + string='Purchase Order', + default=lambda self: self._default_order_id(), + required=True, + readonly=True, + ondelete='cascade', + ) + date_begin = fields.Date( + default=fields.Date.context_today, + required=True, + help='Initial date to compute recommendations.', + ) + date_end = fields.Date( + default=fields.Date.context_today, + required=True, + help='Final date to compute recommendations.', + ) + line_ids = fields.One2many( + comodel_name='purchase.order.recommendation.line', + inverse_name='wizard_id', + string='Products', + ) + line_amount = fields.Integer( + string='Number of recommendations', + default=15, + required=True, + help='Stablish a limit on how many recommendations you want to get.' + 'Leave it as 0 to set no limit', + ) + show_all_partner_products = fields.Boolean( + string='Show all supplier products', + default=False, + help='Show all products with supplier infos for this supplier', + ) + show_all_products = fields.Boolean( + string='Show all purchasable products', + default=False, + help="Useful if a product hasn't been selled by the partner yet", + ) + product_category_ids = fields.Many2many( + comodel_name='product.category', + string="Product Categories", + help='Filter by product internal category', + ) + warehouse_ids = fields.Many2many( + comodel_name='stock.warehouse', + string='Warehouse', + help='Constrain search to an specific warehouse', + ) + warehouse_count = fields.Integer( + default=lambda self: len(self.env['stock.warehouse'].search([])), + ) + + @api.model + def _default_order_id(self): + if self.env.context.get('active_model', False) != 'purchase.order': + raise UserError(_('This wizard is only valid for purchases')) + return self.env.context.get('active_id', False) + + @api.multi + def _get_total_days(self): + """Compute days between the initial and the end date""" + day = (self.date_end + timedelta(days=1) - self.date_begin).days + return day + + def _get_supplier_products(self): + """Common method to be used for field domain filters""" + supplierinfo_obj = self.env['product.supplierinfo'].with_context( + prefetch_fields=False) + partner = self.order_id.partner_id.commercial_partner_id + supplierinfos = supplierinfo_obj.search([('name', '=', partner.id)]) + product_tmpls = supplierinfos.mapped('product_tmpl_id').filtered( + lambda x: x.active and x.purchase_ok + ) + products = supplierinfos.mapped('product_id').filtered( + lambda x: x.active and x.purchase_ok + ) + products += product_tmpls.mapped('product_variant_ids') + return products + + def _get_products(self): + """Override to filter products show_all_partner_products is set""" + products = self._get_supplier_products() + # Filter products by category if set. + # It will apply to show_all_partner_products as well + if self.product_category_ids: + products = products.filtered( + lambda x: x.categ_id in self.product_category_ids) + return products + + def _get_move_line_domain(self, products, src, dst): + """Allows to easily extend the domain by third modules""" + combine = datetime.combine + # We can receive a context to be able to get different dates with + # the same wizard attributes, for example comparing periods + date_begin = self.env.context.get("period_date_begin", self.date_begin) + date_end = self.env.context.get("period_date_end", self.date_end) + domain = [ + ('product_id', 'in', products.ids), + ('date', '>=', combine(date_begin, datetime.min.time())), + ('date', '<=', combine(date_end, datetime.max.time())), + ('location_id.usage', '=', src), + ('location_dest_id.usage', '=', dst), + ('state', '=', 'done'), + ] + if self.warehouse_ids: + domain += [('picking_id.picking_type_id.warehouse_id', 'in', + self.warehouse_ids.ids)] + return domain + + def _get_all_products_domain(self): + """Override to add more product filters if show_all_products is set""" + domain = [ + ('purchase_ok', '=', True), + ] + if self.product_category_ids: + domain += [('categ_id', 'in', self.product_category_ids.ids)] + return domain + + @api.multi + def _find_move_line(self, src='internal', dst='customer'): + """"Returns a dictionary from the move lines in a range of dates + from and to given location types""" + products = self._get_products() + domain = self._get_move_line_domain(products, src, dst) + found_lines = self.env['stock.move.line'].read_group( + domain, ['product_id', 'qty_done'], ['product_id']) + # Manual ordering that circumvents ORM limitations + found_lines = sorted( + found_lines, + key=lambda res: ( + res['product_id_count'], + res['qty_done'], + ), + reverse=True, + ) + product_dict = {p.id: p for p in products} + found_lines = [{ + 'id': x['product_id'][0], + 'product_id': product_dict[x['product_id'][0]], + 'product_id_count': x['product_id_count'], + 'qty_done': x['qty_done'] + } for x in found_lines] + found_lines = {l['id']: l for l in found_lines} + # Show every purchaseable product + if self.show_all_products: + products += self.env['product.product'].search( + self._get_all_products_domain()) + # Show all products with supplier infos belonging to a partner + if self.show_all_partner_products or self.show_all_products: + for product in products.filtered( + lambda p: p.id not in found_lines.keys()): + found_lines.update({ + product.id: {'product_id': product}, + }) + return found_lines + + def _prepare_wizard_line_from_seller(self, vals, seller): + """Allow to add values coming from the selected seller, which will have + more priority than existing prepared values. + + :param vals: Existing wizard line dictionary vals. + :param seller: Selected seller for this line. + """ + self.ensure_one() + return { + "price_unit": seller.price, + } + + def _prepare_wizard_line(self, vals, order_line=False): + """Used to create the wizard line""" + self.ensure_one() + product_id = order_line and order_line.product_id or vals['product_id'] + if self.warehouse_ids: + units_available = sum([ + product_id.with_context(warehouse=wh).qty_available + for wh in self.warehouse_ids.ids + ]) + units_virtual_available = sum([ + product_id.with_context(warehouse=wh).virtual_available + for wh in self.warehouse_ids.ids + ]) + else: + units_available = product_id.qty_available + units_virtual_available = product_id.virtual_available + qty_to_order = abs( + min(0, units_virtual_available - vals.get('qty_delivered', 0))) + vals['is_modified'] = bool(qty_to_order) + units_included = order_line and order_line.product_qty or qty_to_order + seller = product_id._select_seller( + partner_id=self.order_id.partner_id, + date=fields.Date.today(), + quantity=units_included, + uom_id=product_id.uom_po_id, + ) + res = { + 'purchase_line_id': order_line and order_line.id, + 'product_id': product_id.id, + 'times_delivered': vals.get('times_delivered', 0), + 'times_received': vals.get('times_received', 0), + 'units_received': vals.get('qty_received', 0), + 'units_available': units_available, + 'units_virtual_available': units_virtual_available, + 'units_avg_delivered': (vals.get('qty_delivered', 0) / + self._get_total_days()), + 'units_delivered': vals.get('qty_delivered', 0), + 'units_included': units_included, + 'is_modified': vals.get('is_modified', False), + } + res.update(self._prepare_wizard_line_from_seller(res, seller)) + return res + + @api.multi + @api.onchange('order_id', 'date_begin', 'date_end', 'line_amount', + 'show_all_partner_products', 'show_all_products', + 'product_category_ids', 'warehouse_ids') + def _generate_recommendations(self): + """Generate lines according to received and delivered items""" + self.line_ids = False + # Get quantities received from suppliers + found_dict = self._find_move_line(src='supplier', dst='internal') + for product, line in found_dict.items(): + found_dict[product]['qty_received'] = line.get('qty_done', 0) + found_dict[product]['times_received'] = line.get( + 'product_id_count', 0) + # Get quantities delivered to customers + found_delivered_dict = self._find_move_line( + src='internal', dst='customer') + # Merge the two dicts + for product, line in found_delivered_dict.items(): + if not found_dict.get(product): + found_dict[product] = line + found_dict[product]['qty_delivered'] = line.get('qty_done', 0) + found_dict[product]['times_delivered'] = line.get( + 'product_id_count', 0) + found_dict[product].update( + { + k: v for k, v in line.items() + if k not in found_dict[product].keys() + } + ) + RecomendationLine = self.env['purchase.order.recommendation.line'] + existing_product_ids = [] + # Add products from purchase order lines + for order_line in self.order_id.order_line: + found_line = found_dict.get(order_line.product_id.id, {}) + new_line = RecomendationLine.new( + self._prepare_wizard_line(found_line, order_line)) + self.line_ids += new_line + existing_product_ids.append(order_line.product_id.id) + # Add those recommendations too + i = 0 + for product, line in found_dict.items(): + if product in existing_product_ids: + continue + new_line = RecomendationLine.new( + self._prepare_wizard_line(line) + ) + self.line_ids += new_line + # Limit number of results. It has to be done here, as we need to + # populate all results first, for being able to select best matches + i += 1 + if i == self.line_amount: + break + self.line_ids = self.line_ids.sorted(key=lambda x: x.product_id.name) + + @api.multi + def action_accept(self): + """Propagate recommendations to purchase order.""" + po_lines = self.env['purchase.order.line'] + sequence = max(self.order_id.mapped('order_line.sequence') or [0]) + for wiz_line in self.line_ids.filtered('is_modified'): + # Use preexisting line if any + if wiz_line.purchase_line_id: + if wiz_line.units_included: + wiz_line.purchase_line_id.update( + wiz_line._prepare_update_po_line() + ) + wiz_line.purchase_line_id._onchange_quantity() + else: + wiz_line.purchase_line_id.unlink() + continue + sequence += 1 + # Use a new in-memory line otherwise + po_line = po_lines.new( + wiz_line._prepare_new_po_line(sequence) + ) + po_line.onchange_product_id() + po_line.product_qty = wiz_line.units_included + po_line._onchange_quantity() + po_lines |= po_line + self.order_id.order_line |= po_lines + + +class PurchaseOrderRecommendationLine(models.TransientModel): + _name = 'purchase.order.recommendation.line' + _description = 'Recommended product for current purchase order' + _order = 'id' + + currency_id = fields.Many2one( + related='product_id.currency_id', + readonly=True, + ) + partner_id = fields.Many2one( + related='wizard_id.order_id.partner_id', + readonly=True, + ) + product_id = fields.Many2one( + comodel_name='product.product', + string='Product', + ) + price_unit = fields.Monetary( + readonly=True, + ) + times_delivered = fields.Integer( + readonly=True, + ) + times_received = fields.Integer( + readonly=True, + ) + units_received = fields.Float( + readonly=True, + ) + units_delivered = fields.Float( + readonly=True, + ) + units_avg_delivered = fields.Float( + digits=dp.get_precision('Product Unit of Measure'), + readonly=True, + ) + units_available = fields.Float( + readonly=True, + ) + units_virtual_available = fields.Float( + readonly=True, + ) + units_included = fields.Float() + wizard_id = fields.Many2one( + comodel_name='purchase.order.recommendation', + string='Wizard', + ondelete='cascade', + required=True, + readonly=True, + ) + purchase_line_id = fields.Many2one( + comodel_name='purchase.order.line', + ) + is_modified = fields.Boolean() + + @api.onchange('units_included') + def _onchange_units_included(self): + self.is_modified = bool(self.purchase_line_id or self.units_included) + self.price_unit = self.product_id._select_seller( + partner_id=self.partner_id, + date=fields.Date.today(), + quantity=self.units_included, + uom_id=self.product_id.uom_po_id, + ).price + + @api.multi + def _prepare_update_po_line(self): + """So we can extend PO update""" + return { + 'product_qty': self.units_included, + } + + @api.multi + def _prepare_new_po_line(self, sequence): + """So we can extend PO create""" + return { + 'order_id': self.wizard_id.order_id.id, + 'product_id': self.product_id.id, + # set this related field manually, as there's a glitch + # in ORM that doesn't set its initial value + 'partner_id': self.partner_id.id, + 'sequence': sequence, + } diff --git a/purchase_order_product_recommendation/wizards/purchase_order_recommendation_view.xml b/purchase_order_product_recommendation/wizards/purchase_order_recommendation_view.xml new file mode 100644 index 0000000..74c5137 --- /dev/null +++ b/purchase_order_product_recommendation/wizards/purchase_order_recommendation_view.xml @@ -0,0 +1,72 @@ + + + + + Recommended Products for this Customer + purchase.order.recommendation + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+ + + Recommended Products for this Customer + purchase.order.recommendation + form + form + new + + +
diff --git a/purchase_product_restrict_supplier/__init__.py b/purchase_product_restrict_supplier/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/purchase_product_restrict_supplier/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/purchase_product_restrict_supplier/__manifest__.py b/purchase_product_restrict_supplier/__manifest__.py new file mode 100644 index 0000000..e01e36f --- /dev/null +++ b/purchase_product_restrict_supplier/__manifest__.py @@ -0,0 +1,14 @@ +# Copyright 2021 Criptomart +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +{ + 'name': 'Purchase Product Restrict Supplier', + 'summary': 'It restricts products in purchase order line belonging to the partner set in purchase order.', + 'version': '12.0.1.0.1', + 'author': 'Criptomart', + 'depends': [ + 'purchase', + ], + 'installable': True, + 'auto_install': False, + 'application': False, +} diff --git a/purchase_product_restrict_supplier/models/__init__.py b/purchase_product_restrict_supplier/models/__init__.py new file mode 100644 index 0000000..fa6c0e4 --- /dev/null +++ b/purchase_product_restrict_supplier/models/__init__.py @@ -0,0 +1 @@ +from . import purchase_order_line diff --git a/purchase_product_restrict_supplier/models/purchase_order_line.py b/purchase_product_restrict_supplier/models/purchase_order_line.py new file mode 100644 index 0000000..9134906 --- /dev/null +++ b/purchase_product_restrict_supplier/models/purchase_order_line.py @@ -0,0 +1,23 @@ +# Copyright (C) 2021: Criptomart () +# @author: Criptomart () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import logging + +from odoo import models, fields, api + +_logger = logging.getLogger(__name__) + +class PurchaseOrderLine(models.Model): + _inherit = 'purchase.order.line' + + @api.onchange('product_id') + def onchange_product_id(self): + result = super(PurchaseOrderLine, self).onchange_product_id() + supplier_infos = self.env['product.supplierinfo'].search([('name', '=', self.partner_id.name)]) + product_ids = self.env['product.product'] + for supplier_info in supplier_infos: + product_ids += supplier_info.product_tmpl_id.product_variant_ids + result.update({'domain': {'product_id': [('id', 'in', product_ids.ids)]}}) + + return result diff --git a/sale_calc_discount_b2c/__init__.py b/sale_calc_discount_b2c/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/sale_calc_discount_b2c/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/sale_calc_discount_b2c/__manifest__.py b/sale_calc_discount_b2c/__manifest__.py new file mode 100644 index 0000000..c735c40 --- /dev/null +++ b/sale_calc_discount_b2c/__manifest__.py @@ -0,0 +1,14 @@ +# Copyright 2021 Criptomart +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +{ + 'name': 'Sale Calc Discount B2C', + 'summary': 'When prices are tax included, calculates the discount in price excluding tax.', + 'version': '12.0.1.0.0', + 'author': 'Criptomart', + 'depends': [ + 'sale', + ], + 'installable': True, + 'auto_install': False, + 'application': False, +} diff --git a/sale_calc_discount_b2c/models/__init__.py b/sale_calc_discount_b2c/models/__init__.py new file mode 100644 index 0000000..8a0dc04 --- /dev/null +++ b/sale_calc_discount_b2c/models/__init__.py @@ -0,0 +1 @@ +from . import sale diff --git a/sale_calc_discount_b2c/models/sale.py b/sale_calc_discount_b2c/models/sale.py new file mode 100644 index 0000000..6de5048 --- /dev/null +++ b/sale_calc_discount_b2c/models/sale.py @@ -0,0 +1,31 @@ +# Copyright (C) 2021: Criptomart () +# @author: Criptomart () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +#import logging + +from odoo import models, fields, api + +#_logger = logging.getLogger(__name__) + +class SaleOrderOrderLine(models.Model): + _inherit = 'sale.order.line' + + @api.depends('product_uom_qty', 'discount', 'price_unit', 'tax_id') + def _compute_amount(self): + """ + Compute the amounts of the SO line. + """ + for line in self: + price = line.price_unit + taxes = line.tax_id.compute_all(price, line.order_id.currency_id, line.product_uom_qty, product=line.product_id, partner=line.order_id.partner_shipping_id) + if line.discount: + price_disc = taxes['total_excluded'] * (1 - (line.discount or 0.0) / 100.0) + ctx = dict(self.env.context, handle_price_include=False) + taxes = line.tax_id.with_context(ctx).compute_all(price_disc, line.order_id.currency_id, 1, product=line.product_id, partner=line.order_id.partner_shipping_id) + + line.update({ + 'price_tax': sum(t.get('amount', 0.0) for t in taxes.get('taxes', [])), + 'price_total': taxes['total_included'], + 'price_subtotal': taxes['total_excluded'], + }) diff --git a/stock_available/README.rst b/stock_available/README.rst new file mode 100644 index 0000000..686c931 --- /dev/null +++ b/stock_available/README.rst @@ -0,0 +1,113 @@ +========================== +Stock available to promise +========================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png + :target: https://odoo-community.org/page/development-status + :alt: Production/Stable +.. |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%2Fstock--logistics--warehouse-lightgray.png?logo=github + :target: https://github.com/OCA/stock-logistics-warehouse/tree/12.0/stock_available + :alt: OCA/stock-logistics-warehouse +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/stock-logistics-warehouse-12-0/stock-logistics-warehouse-12-0-stock_available + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/153/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module proposes several options to compute the quantity available to +promise for each product. +This quantity is based on the projected stock and, depending on the +configuration, it can account for various data such as sales quotations or +immediate production capacity. +In case of immediate production capacity, it is possible to configure on which +field the potential is computed, by default Quantity On Hand is used. +This can be configured in `Inventory` > `Configuration` > `Settings`. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +By default, this module computes the stock available to promise as the virtual +stock. +To take advantage of the additional features, you must define on which information you +want to base the computation, by checking one or more boxes in the settings: +`Inventory` > `Configuration` > `Settings` > `Stock available to promise`. +In case of "Include the production potential", it is also possible to configure +which field of product to use to compute the production potential. + +Usage +===== + +This module adds a field named `Available for sale` on the Product form. +Various additional fields may be added, depending on which information you +chose to base the computation on. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub 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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Numérigraphe +* Sodexis + +Contributors +~~~~~~~~~~~~ + +* `Numérigraphe `_: + + * Lionel Sausin + +* `Sodexis `_: + + * Sodexis + +* `Factor Libre `_: + + * Kiko Peiro + +* `Tecnativa `_: + + * Sergio Teruel + +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/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/stock_available/__init__.py b/stock_available/__init__.py new file mode 100644 index 0000000..83e553a --- /dev/null +++ b/stock_available/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import models diff --git a/stock_available/__manifest__.py b/stock_available/__manifest__.py new file mode 100644 index 0000000..608de28 --- /dev/null +++ b/stock_available/__manifest__.py @@ -0,0 +1,20 @@ +# Copyright 2014 Numérigraphe +# Copyright 2016 Sodexis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +{ + 'name': 'Stock available to promise', + 'version': '12.0.1.0.1', + 'author': 'Numérigraphe, Sodexis, Odoo Community Association (OCA)', + 'website': 'https://github.com/OCA/stock-logistics-warehouse', + 'development_status': 'Production/Stable', + 'category': 'Warehouse', + 'depends': ['stock'], + 'license': 'AGPL-3', + 'data': [ + 'views/product_template_view.xml', + 'views/product_product_view.xml', + 'views/res_config_settings_views.xml', + ], + 'installable': True, +} diff --git a/stock_available/i18n/ar.po b/stock_available/i18n/ar.po new file mode 100644 index 0000000..4375bb8 --- /dev/null +++ b/stock_available/i18n/ar.po @@ -0,0 +1,152 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_available +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2018-06-29 14:21+0000\n" +"Last-Translator: Osoul \n" +"Language-Team: none\n" +"Language: ar\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" +"X-Generator: Weblate 3.0.1\n" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Available" +msgstr "المتوفر" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Potential" +msgstr "المتوقع" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_kanban +msgid "Available to Promise:" +msgstr "القابل للبيع:" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__immediately_usable_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__immediately_usable_qty +msgid "Available to promise" +msgstr "القابل للبيع" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "" +"Choose the field of the product which will be used to compute potential.\n" +"If empty, Quantity On Hand is used.\n" +"Only the quantity fields have meaning for computing stock" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_res_config_settings +#, fuzzy +msgid "Config Settings" +msgstr "الإعدادات" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_sale +msgid "Exclude goods already in sale quotations" +msgstr "تجاهل الكميات الموجودة في العروض المبدئية" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "Exclude incoming goods" +msgstr "تجاهل الكميات الواردة" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "Include the production potential" +msgstr "احتسب المتوقع من التصنيع" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__potential_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__potential_qty +msgid "Potential" +msgstr "المتوقع" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_product +msgid "Product" +msgstr "المنتج" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_template +msgid "Product Template" +msgstr "قالب المنتج" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand. If the product has several variants, this will be the biggest " +"quantity that can be made for a any single variant." +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_configuration +msgid "Stock available to promise" +msgstr "الكمية القابلة للبيع" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "" +"This will add the quantities of goods that can be immediately manufactured, " +"to the quantities available to promise.\n" +"This installs the module stock_available_mrp.\n" +"If the module mrp is not installed, this will install it too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "" +"This will subtract incoming quantities from the quantities available to " +"promise.\n" +"This installs the module stock_available_immediately." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_sale +msgid "" +"This will subtract quantities from the sale quotations from the quantities " +"available to promise.\n" +"This installs the modules stock_available_sale.\n" +"If the modules sale and sale_delivery_date are not installed, this will " +"install them too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "based on" +msgstr "مبني على" diff --git a/stock_available/i18n/ca.po b/stock_available/i18n/ca.po new file mode 100644 index 0000000..e2262f7 --- /dev/null +++ b/stock_available/i18n/ca.po @@ -0,0 +1,152 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_available +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-06-03 01:23+0000\n" +"PO-Revision-Date: 2017-06-03 01:23+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Catalan (https://www.transifex.com/oca/teams/23907/ca/)\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Available" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_kanban +msgid "Available to Promise:" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__immediately_usable_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__immediately_usable_qty +msgid "Available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "" +"Choose the field of the product which will be used to compute potential.\n" +"If empty, Quantity On Hand is used.\n" +"Only the quantity fields have meaning for computing stock" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_sale +msgid "Exclude goods already in sale quotations" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "Exclude incoming goods" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "Include the production potential" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__potential_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__potential_qty +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_product +msgid "Product" +msgstr "Producte" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_template +msgid "Product Template" +msgstr "Plantilla del producte" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand. If the product has several variants, this will be the biggest " +"quantity that can be made for a any single variant." +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_configuration +msgid "Stock available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "" +"This will add the quantities of goods that can be immediately manufactured, " +"to the quantities available to promise.\n" +"This installs the module stock_available_mrp.\n" +"If the module mrp is not installed, this will install it too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "" +"This will subtract incoming quantities from the quantities available to " +"promise.\n" +"This installs the module stock_available_immediately." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_sale +msgid "" +"This will subtract quantities from the sale quotations from the quantities " +"available to promise.\n" +"This installs the modules stock_available_sale.\n" +"If the modules sale and sale_delivery_date are not installed, this will " +"install them too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "based on" +msgstr "" diff --git a/stock_available/i18n/cs_CZ.po b/stock_available/i18n/cs_CZ.po new file mode 100644 index 0000000..74fa375 --- /dev/null +++ b/stock_available/i18n/cs_CZ.po @@ -0,0 +1,177 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_available +# +# Translators: +# Lukáš Spurný , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-02-27 11:37+0000\n" +"PO-Revision-Date: 2018-02-27 11:37+0000\n" +"Last-Translator: Lukáš Spurný , 2018\n" +"Language-Team: Czech (Czech Republic) (https://www.transifex.com/oca/" +"teams/23907/cs_CZ/)\n" +"Language: cs_CZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Available" +msgstr "K dispozici 1" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Potential" +msgstr "Potenciál 1" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_kanban +msgid "Available to Promise:" +msgstr "K dispozici pro slib:" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__immediately_usable_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__immediately_usable_qty +msgid "Available to promise" +msgstr "K dispozici na slib" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "" +"Choose the field of the product which will be used to compute potential.\n" +"If empty, Quantity On Hand is used.\n" +"Only the quantity fields have meaning for computing stock" +msgstr "" +"Zvolit pole produktu, který bude použit pro výpočet potenciálu. • Pokud je " +"prázdný, použije se množství On Hand. • Pouze množství polí má význam pro " +"výpočet zásob" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_res_config_settings +#, fuzzy +msgid "Config Settings" +msgstr "stock.config.settings" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_sale +msgid "Exclude goods already in sale quotations" +msgstr "Vyloučení zboží již v nabídkách prodeje" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "Exclude incoming goods" +msgstr "Vylučte příchozí zboží" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "Include the production potential" +msgstr "Zahrnout výrobní potenciál" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__potential_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__potential_qty +msgid "Potential" +msgstr "Potenciál" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_product +msgid "Product" +msgstr "Produkt" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_template +msgid "Product Template" +msgstr "Šablona produktu" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand." +msgstr "" +"Množství tohoto výrobku, které by mohlo být vyrobeno z materiálů, které jsou " +"již k dispozici." + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand. If the product has several variants, this will be the biggest " +"quantity that can be made for a any single variant." +msgstr "" +"Množství tohoto výrobku, které by mohlo být vyrobeno z materiálů, které jsou " +"již k dispozici. Pokud má produkt několik variant, bude to největší " +"množství, které lze vyrobit pro libovolnou variantu." + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_configuration +msgid "Stock available to promise" +msgstr "Zásoby k dispozici" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs" +msgstr "" +"Sklad pro tento produkt, který může být bezpečně navržen k prodeji " +"zákazníkům. Definice této hodnoty může být konfigurována tak, aby vyhovovala " +"vašim potřebám" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__immediately_usable_qty +#, fuzzy +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs." +msgstr "" +"Sklad pro tento produkt, který může být bezpečně navržen k prodeji " +"zákazníkům. Definice této hodnoty může být konfigurována tak, aby vyhovovala " +"vašim potřebám" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "" +"This will add the quantities of goods that can be immediately manufactured, " +"to the quantities available to promise.\n" +"This installs the module stock_available_mrp.\n" +"If the module mrp is not installed, this will install it too" +msgstr "" +"Tím se přidá množství zboží, které lze okamžitě vyrobit, na množství, která " +"je k dispozici pro slib. \"Instaluje modul stock_available_mrp.\" Pokud " +"modul mrp není nainstalován, instaluje se taky" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "" +"This will subtract incoming quantities from the quantities available to " +"promise.\n" +"This installs the module stock_available_immediately." +msgstr "" +"Tím se odečtou příchozí veličiny z množství, která je k dispozici pro slib. " +"\"Instaluje modul stock_available_immediately." + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_sale +msgid "" +"This will subtract quantities from the sale quotations from the quantities " +"available to promise.\n" +"This installs the modules stock_available_sale.\n" +"If the modules sale and sale_delivery_date are not installed, this will " +"install them too" +msgstr "" +"Tím se odečtou množství z prodejních kotací z množství, která je k dispozici " +"pro slib. \"Instaluje moduly stock_available_sale.\" Pokud nejsou " +"nainstalovány moduly prodeje a sales_delivery_date, nainstalují se je také" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "based on" +msgstr "na základě" diff --git a/stock_available/i18n/de.po b/stock_available/i18n/de.po new file mode 100644 index 0000000..5645cee --- /dev/null +++ b/stock_available/i18n/de.po @@ -0,0 +1,171 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_available +# +# Translators: +# Rudolf Schnapka , 2016 +msgid "" +msgstr "" +"Project-Id-Version: stock-logistics-warehouse (9.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-04-14 12:02+0000\n" +"PO-Revision-Date: 2016-04-22 09:17+0000\n" +"Last-Translator: Rudolf Schnapka \n" +"Language-Team: German (http://www.transifex.com/oca/OCA-stock-logistics-" +"warehouse-9-0/language/de/)\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Available" +msgstr "Verfügbar" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +#, fuzzy +msgid "Potential" +msgstr "Verfügbar" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_kanban +msgid "Available to Promise:" +msgstr "Verfügbar für Zusage:" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__immediately_usable_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__immediately_usable_qty +msgid "Available to promise" +msgstr "Verfügbar für Lieferversprechen" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "" +"Choose the field of the product which will be used to compute potential.\n" +"If empty, Quantity On Hand is used.\n" +"Only the quantity fields have meaning for computing stock" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_res_config_settings +#, fuzzy +msgid "Config Settings" +msgstr "stock.config.settings" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_sale +msgid "Exclude goods already in sale quotations" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "Exclude incoming goods" +msgstr "Warenzugänge ausschließen" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "Include the production potential" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__potential_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__potential_qty +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_product +msgid "Product" +msgstr "Produkt" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_template +msgid "Product Template" +msgstr "Produktvorlage" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand. If the product has several variants, this will be the biggest " +"quantity that can be made for a any single variant." +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_configuration +msgid "Stock available to promise" +msgstr "Bestand für Lieferversprechen verfügbar" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs" +msgstr "" +"Bestand dieses Produkts, der sicher einem Kunden verkauft werden kann.\n" +"Die Definition dieses Werts kann an Ihre Bedürfnisse angepasst werden" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__immediately_usable_qty +#, fuzzy +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs." +msgstr "" +"Bestand dieses Produkts, der sicher einem Kunden verkauft werden kann.\n" +"Die Definition dieses Werts kann an Ihre Bedürfnisse angepasst werden" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_mrp +#, fuzzy +msgid "" +"This will add the quantities of goods that can be immediately manufactured, " +"to the quantities available to promise.\n" +"This installs the module stock_available_mrp.\n" +"If the module mrp is not installed, this will install it too" +msgstr "" +"Warenzugänge werden von dem für Lieferversprechen verfügbaren Bestand " +"abgezogen.\n" +"Das Modul stock_available_immediately wird installiert." + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "" +"This will subtract incoming quantities from the quantities available to " +"promise.\n" +"This installs the module stock_available_immediately." +msgstr "" +"Warenzugänge werden von dem für Lieferversprechen verfügbaren Bestand " +"abgezogen.\n" +"Das Modul stock_available_immediately wird installiert." + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_sale +#, fuzzy +msgid "" +"This will subtract quantities from the sale quotations from the quantities " +"available to promise.\n" +"This installs the modules stock_available_sale.\n" +"If the modules sale and sale_delivery_date are not installed, this will " +"install them too" +msgstr "" +"Warenzugänge werden von dem für Lieferversprechen verfügbaren Bestand " +"abgezogen.\n" +"Das Modul stock_available_immediately wird installiert." + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "based on" +msgstr "" diff --git a/stock_available/i18n/el_GR.po b/stock_available/i18n/el_GR.po new file mode 100644 index 0000000..8b6fa09 --- /dev/null +++ b/stock_available/i18n/el_GR.po @@ -0,0 +1,153 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_available +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-06-03 01:23+0000\n" +"PO-Revision-Date: 2017-06-03 01:23+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Greek (Greece) (https://www.transifex.com/oca/teams/23907/" +"el_GR/)\n" +"Language: el_GR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Available" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_kanban +msgid "Available to Promise:" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__immediately_usable_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__immediately_usable_qty +msgid "Available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "" +"Choose the field of the product which will be used to compute potential.\n" +"If empty, Quantity On Hand is used.\n" +"Only the quantity fields have meaning for computing stock" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_sale +msgid "Exclude goods already in sale quotations" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "Exclude incoming goods" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "Include the production potential" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__potential_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__potential_qty +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_product +msgid "Product" +msgstr "Προϊόν" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_template +msgid "Product Template" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand. If the product has several variants, this will be the biggest " +"quantity that can be made for a any single variant." +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_configuration +msgid "Stock available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "" +"This will add the quantities of goods that can be immediately manufactured, " +"to the quantities available to promise.\n" +"This installs the module stock_available_mrp.\n" +"If the module mrp is not installed, this will install it too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "" +"This will subtract incoming quantities from the quantities available to " +"promise.\n" +"This installs the module stock_available_immediately." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_sale +msgid "" +"This will subtract quantities from the sale quotations from the quantities " +"available to promise.\n" +"This installs the modules stock_available_sale.\n" +"If the modules sale and sale_delivery_date are not installed, this will " +"install them too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "based on" +msgstr "" diff --git a/stock_available/i18n/es.po b/stock_available/i18n/es.po new file mode 100644 index 0000000..1734013 --- /dev/null +++ b/stock_available/i18n/es.po @@ -0,0 +1,154 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_available +# +# Translators: +# OCA Transbot , 2017 +# enjolras , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-02-27 11:37+0000\n" +"PO-Revision-Date: 2018-02-27 11:37+0000\n" +"Last-Translator: enjolras , 2018\n" +"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Available" +msgstr "Disponible" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Potential" +msgstr "Potencial" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_kanban +msgid "Available to Promise:" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__immediately_usable_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__immediately_usable_qty +msgid "Available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "" +"Choose the field of the product which will be used to compute potential.\n" +"If empty, Quantity On Hand is used.\n" +"Only the quantity fields have meaning for computing stock" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_res_config_settings +#, fuzzy +msgid "Config Settings" +msgstr "stock.config.settings" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_sale +msgid "Exclude goods already in sale quotations" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "Exclude incoming goods" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "Include the production potential" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__potential_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__potential_qty +msgid "Potential" +msgstr "Potencial" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_product +msgid "Product" +msgstr "Producto" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_template +msgid "Product Template" +msgstr "Plantilla de producto" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand. If the product has several variants, this will be the biggest " +"quantity that can be made for a any single variant." +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_configuration +msgid "Stock available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "" +"This will add the quantities of goods that can be immediately manufactured, " +"to the quantities available to promise.\n" +"This installs the module stock_available_mrp.\n" +"If the module mrp is not installed, this will install it too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "" +"This will subtract incoming quantities from the quantities available to " +"promise.\n" +"This installs the module stock_available_immediately." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_sale +msgid "" +"This will subtract quantities from the sale quotations from the quantities " +"available to promise.\n" +"This installs the modules stock_available_sale.\n" +"If the modules sale and sale_delivery_date are not installed, this will " +"install them too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "based on" +msgstr "" diff --git a/stock_available/i18n/es_ES.po b/stock_available/i18n/es_ES.po new file mode 100644 index 0000000..7939d29 --- /dev/null +++ b/stock_available/i18n/es_ES.po @@ -0,0 +1,153 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_available +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-06-03 01:23+0000\n" +"PO-Revision-Date: 2017-06-03 01:23+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Spanish (Spain) (https://www.transifex.com/oca/teams/23907/" +"es_ES/)\n" +"Language: es_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Available" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_kanban +msgid "Available to Promise:" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__immediately_usable_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__immediately_usable_qty +msgid "Available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "" +"Choose the field of the product which will be used to compute potential.\n" +"If empty, Quantity On Hand is used.\n" +"Only the quantity fields have meaning for computing stock" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_sale +msgid "Exclude goods already in sale quotations" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "Exclude incoming goods" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "Include the production potential" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__potential_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__potential_qty +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_product +msgid "Product" +msgstr "Producto" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_template +msgid "Product Template" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand. If the product has several variants, this will be the biggest " +"quantity that can be made for a any single variant." +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_configuration +msgid "Stock available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "" +"This will add the quantities of goods that can be immediately manufactured, " +"to the quantities available to promise.\n" +"This installs the module stock_available_mrp.\n" +"If the module mrp is not installed, this will install it too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "" +"This will subtract incoming quantities from the quantities available to " +"promise.\n" +"This installs the module stock_available_immediately." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_sale +msgid "" +"This will subtract quantities from the sale quotations from the quantities " +"available to promise.\n" +"This installs the modules stock_available_sale.\n" +"If the modules sale and sale_delivery_date are not installed, this will " +"install them too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "based on" +msgstr "" diff --git a/stock_available/i18n/es_MX.po b/stock_available/i18n/es_MX.po new file mode 100644 index 0000000..433b812 --- /dev/null +++ b/stock_available/i18n/es_MX.po @@ -0,0 +1,153 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_available +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-06-03 01:23+0000\n" +"PO-Revision-Date: 2017-06-03 01:23+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Spanish (Mexico) (https://www.transifex.com/oca/teams/23907/" +"es_MX/)\n" +"Language: es_MX\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Available" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_kanban +msgid "Available to Promise:" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__immediately_usable_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__immediately_usable_qty +msgid "Available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "" +"Choose the field of the product which will be used to compute potential.\n" +"If empty, Quantity On Hand is used.\n" +"Only the quantity fields have meaning for computing stock" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_sale +msgid "Exclude goods already in sale quotations" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "Exclude incoming goods" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "Include the production potential" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__potential_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__potential_qty +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_product +msgid "Product" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_template +msgid "Product Template" +msgstr "Plantilla del producto" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand. If the product has several variants, this will be the biggest " +"quantity that can be made for a any single variant." +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_configuration +msgid "Stock available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "" +"This will add the quantities of goods that can be immediately manufactured, " +"to the quantities available to promise.\n" +"This installs the module stock_available_mrp.\n" +"If the module mrp is not installed, this will install it too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "" +"This will subtract incoming quantities from the quantities available to " +"promise.\n" +"This installs the module stock_available_immediately." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_sale +msgid "" +"This will subtract quantities from the sale quotations from the quantities " +"available to promise.\n" +"This installs the modules stock_available_sale.\n" +"If the modules sale and sale_delivery_date are not installed, this will " +"install them too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "based on" +msgstr "" diff --git a/stock_available/i18n/eu.po b/stock_available/i18n/eu.po new file mode 100644 index 0000000..7391b93 --- /dev/null +++ b/stock_available/i18n/eu.po @@ -0,0 +1,152 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_available +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-06-03 01:23+0000\n" +"PO-Revision-Date: 2017-06-03 01:23+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Basque (https://www.transifex.com/oca/teams/23907/eu/)\n" +"Language: eu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Available" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_kanban +msgid "Available to Promise:" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__immediately_usable_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__immediately_usable_qty +msgid "Available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "" +"Choose the field of the product which will be used to compute potential.\n" +"If empty, Quantity On Hand is used.\n" +"Only the quantity fields have meaning for computing stock" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_sale +msgid "Exclude goods already in sale quotations" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "Exclude incoming goods" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "Include the production potential" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__potential_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__potential_qty +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_product +msgid "Product" +msgstr "Produktua" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_template +msgid "Product Template" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand. If the product has several variants, this will be the biggest " +"quantity that can be made for a any single variant." +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_configuration +msgid "Stock available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "" +"This will add the quantities of goods that can be immediately manufactured, " +"to the quantities available to promise.\n" +"This installs the module stock_available_mrp.\n" +"If the module mrp is not installed, this will install it too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "" +"This will subtract incoming quantities from the quantities available to " +"promise.\n" +"This installs the module stock_available_immediately." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_sale +msgid "" +"This will subtract quantities from the sale quotations from the quantities " +"available to promise.\n" +"This installs the modules stock_available_sale.\n" +"If the modules sale and sale_delivery_date are not installed, this will " +"install them too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "based on" +msgstr "" diff --git a/stock_available/i18n/fi.po b/stock_available/i18n/fi.po new file mode 100644 index 0000000..262d0ea --- /dev/null +++ b/stock_available/i18n/fi.po @@ -0,0 +1,152 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_available +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: stock-logistics-warehouse (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-09-23 20:23+0000\n" +"PO-Revision-Date: 2015-09-15 13:04+0000\n" +"Last-Translator: <>\n" +"Language-Team: Finnish (http://www.transifex.com/oca/OCA-stock-logistics-" +"warehouse-8-0/language/fi/)\n" +"Language: fi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Available" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_kanban +msgid "Available to Promise:" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__immediately_usable_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__immediately_usable_qty +msgid "Available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "" +"Choose the field of the product which will be used to compute potential.\n" +"If empty, Quantity On Hand is used.\n" +"Only the quantity fields have meaning for computing stock" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_sale +msgid "Exclude goods already in sale quotations" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "Exclude incoming goods" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "Include the production potential" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__potential_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__potential_qty +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_product +msgid "Product" +msgstr "Tuote" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_template +msgid "Product Template" +msgstr "Tuotteen malli" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand. If the product has several variants, this will be the biggest " +"quantity that can be made for a any single variant." +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_configuration +msgid "Stock available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "" +"This will add the quantities of goods that can be immediately manufactured, " +"to the quantities available to promise.\n" +"This installs the module stock_available_mrp.\n" +"If the module mrp is not installed, this will install it too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "" +"This will subtract incoming quantities from the quantities available to " +"promise.\n" +"This installs the module stock_available_immediately." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_sale +msgid "" +"This will subtract quantities from the sale quotations from the quantities " +"available to promise.\n" +"This installs the modules stock_available_sale.\n" +"If the modules sale and sale_delivery_date are not installed, this will " +"install them too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "based on" +msgstr "" diff --git a/stock_available/i18n/fr.po b/stock_available/i18n/fr.po new file mode 100644 index 0000000..e0e5cd3 --- /dev/null +++ b/stock_available/i18n/fr.po @@ -0,0 +1,182 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_available +# +# Translators: +# Pierre Verkest , 2015 +msgid "" +msgstr "" +"Project-Id-Version: stock-logistics-warehouse (9.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-02-27 01:43+0000\n" +"PO-Revision-Date: 2020-11-12 12:44+0000\n" +"Last-Translator: Yann Papouin \n" +"Language-Team: French (http://www.transifex.com/oca/" +"OCA-stock-logistics-warehouse-9-0/language/fr/)\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 3.10\n" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Available" +msgstr "Disponible" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Potential" +msgstr "Potentiel" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_kanban +msgid "Available to Promise:" +msgstr "Potentiellement disponible :" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__immediately_usable_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__immediately_usable_qty +msgid "Available to promise" +msgstr "Potentiellement disponible" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "" +"Choose the field of the product which will be used to compute potential.\n" +"If empty, Quantity On Hand is used.\n" +"Only the quantity fields have meaning for computing stock" +msgstr "" +"Sélectionner le champ de cet article qui sera utilisé pour calculer le " +"potentiel.\n" +"Si laisser vide, Quantité disponible sera utilisé.\n" +"Seuls les champs de quantité ont une signification pour le calcul du stock" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_res_config_settings +msgid "Config Settings" +msgstr "Paramétrage" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_sale +msgid "Exclude goods already in sale quotations" +msgstr "Exclure les articles présents dans des devis de vente" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "Exclude incoming goods" +msgstr "Exclure les réceptions" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "Include the production potential" +msgstr "Inclure le potentiel issu de la fabrication" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__potential_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__potential_qty +msgid "Potential" +msgstr "Potentiel" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_product +msgid "Product" +msgstr "Article" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_template +msgid "Product Template" +msgstr "Modèle d'article" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand." +msgstr "" +"Quantité de cet article pouvant être fabriqué avec les matériaux déjà " +"disponibles." + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand. If the product has several variants, this will be the biggest " +"quantity that can be made for a any single variant." +msgstr "" +"Quantité de cet article qui peut être fabriqué avec les matériaux déjà " +"disponibles. Si cet article a plusieurs variantes, sera alors affiché la " +"quantité la plus importante pouvant être fabriqué pour chacune d'entre elles." + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_configuration +msgid "Stock available to promise" +msgstr "Stock potentiellement disponible" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs" +msgstr "" +"Stock pour cet article qui peut être proposé en toute sécurité à la vente " +"aux clients.\n" +"La définition de cette valeur peut être configurée en fonction de vos besoins" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs." +msgstr "" +"Stock pour cet article qui peut être proposé en toute sécurité à la vente " +"aux clients.\n" +"La définition de cette valeur peut être configurée en fonction de vos " +"besoins." + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "" +"This will add the quantities of goods that can be immediately manufactured, " +"to the quantities available to promise.\n" +"This installs the module stock_available_mrp.\n" +"If the module mrp is not installed, this will install it too" +msgstr "" +"Ceci ajoute les quantité des articles qui peuvent être fabriqués " +"immédiatement aux quantités potentiellement disponibles.\n" +"Ceci installe le module \"stock_available_mrp\".\n" +"Si le module \"mrp\" n'est pas encore installé, alors il le sera également" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "" +"This will subtract incoming quantities from the quantities available to " +"promise.\n" +"This installs the module stock_available_immediately." +msgstr "" +"Ceci soustrait les quantités entrantes (réceptions) des quantités " +"potentiellement disponibles.\n" +"Ceci installe le module \"stock_available_immediately\"." + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_sale +msgid "" +"This will subtract quantities from the sale quotations from the quantities " +"available to promise.\n" +"This installs the modules stock_available_sale.\n" +"If the modules sale and sale_delivery_date are not installed, this will " +"install them too" +msgstr "" +"Ceci soustrait les quantités des devis clients des quantités potentiellement " +"disponibles.\n" +"Ceci installe le module \"stock_available_sale\".\n" +"Si les modules \"sale\" et \"sale_delivery_date\" ne sont pas encore " +"installés, alors ils le seront également" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "based on" +msgstr "basé sur" diff --git a/stock_available/i18n/fr_CH.po b/stock_available/i18n/fr_CH.po new file mode 100644 index 0000000..2d9851d --- /dev/null +++ b/stock_available/i18n/fr_CH.po @@ -0,0 +1,153 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_available +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-06-03 01:23+0000\n" +"PO-Revision-Date: 2017-06-03 01:23+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: French (Switzerland) (https://www.transifex.com/oca/" +"teams/23907/fr_CH/)\n" +"Language: fr_CH\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Available" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_kanban +msgid "Available to Promise:" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__immediately_usable_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__immediately_usable_qty +msgid "Available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "" +"Choose the field of the product which will be used to compute potential.\n" +"If empty, Quantity On Hand is used.\n" +"Only the quantity fields have meaning for computing stock" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_sale +msgid "Exclude goods already in sale quotations" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "Exclude incoming goods" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "Include the production potential" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__potential_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__potential_qty +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_product +msgid "Product" +msgstr "Produit" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_template +msgid "Product Template" +msgstr "Template de produit" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand. If the product has several variants, this will be the biggest " +"quantity that can be made for a any single variant." +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_configuration +msgid "Stock available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "" +"This will add the quantities of goods that can be immediately manufactured, " +"to the quantities available to promise.\n" +"This installs the module stock_available_mrp.\n" +"If the module mrp is not installed, this will install it too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "" +"This will subtract incoming quantities from the quantities available to " +"promise.\n" +"This installs the module stock_available_immediately." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_sale +msgid "" +"This will subtract quantities from the sale quotations from the quantities " +"available to promise.\n" +"This installs the modules stock_available_sale.\n" +"If the modules sale and sale_delivery_date are not installed, this will " +"install them too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "based on" +msgstr "" diff --git a/stock_available/i18n/gl.po b/stock_available/i18n/gl.po new file mode 100644 index 0000000..e81a097 --- /dev/null +++ b/stock_available/i18n/gl.po @@ -0,0 +1,152 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_available +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-06-03 01:23+0000\n" +"PO-Revision-Date: 2017-06-03 01:23+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Galician (https://www.transifex.com/oca/teams/23907/gl/)\n" +"Language: gl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Available" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_kanban +msgid "Available to Promise:" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__immediately_usable_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__immediately_usable_qty +msgid "Available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "" +"Choose the field of the product which will be used to compute potential.\n" +"If empty, Quantity On Hand is used.\n" +"Only the quantity fields have meaning for computing stock" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_sale +msgid "Exclude goods already in sale quotations" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "Exclude incoming goods" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "Include the production potential" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__potential_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__potential_qty +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_product +msgid "Product" +msgstr "Produto" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_template +msgid "Product Template" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand. If the product has several variants, this will be the biggest " +"quantity that can be made for a any single variant." +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_configuration +msgid "Stock available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "" +"This will add the quantities of goods that can be immediately manufactured, " +"to the quantities available to promise.\n" +"This installs the module stock_available_mrp.\n" +"If the module mrp is not installed, this will install it too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "" +"This will subtract incoming quantities from the quantities available to " +"promise.\n" +"This installs the module stock_available_immediately." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_sale +msgid "" +"This will subtract quantities from the sale quotations from the quantities " +"available to promise.\n" +"This installs the modules stock_available_sale.\n" +"If the modules sale and sale_delivery_date are not installed, this will " +"install them too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "based on" +msgstr "" diff --git a/stock_available/i18n/hr.po b/stock_available/i18n/hr.po new file mode 100644 index 0000000..934bc8f --- /dev/null +++ b/stock_available/i18n/hr.po @@ -0,0 +1,155 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_available +# +# Translators: +# OCA Transbot , 2017 +# Bole , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-02-27 11:37+0000\n" +"PO-Revision-Date: 2018-02-27 11:37+0000\n" +"Last-Translator: Bole , 2018\n" +"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Available" +msgstr "Raspoloživo" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Potential" +msgstr "Potencijalno" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_kanban +msgid "Available to Promise:" +msgstr "Raspoloživo za obećati:" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__immediately_usable_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__immediately_usable_qty +msgid "Available to promise" +msgstr "Raspoloživo za obećati" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "" +"Choose the field of the product which will be used to compute potential.\n" +"If empty, Quantity On Hand is used.\n" +"Only the quantity fields have meaning for computing stock" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_res_config_settings +#, fuzzy +msgid "Config Settings" +msgstr "stock.config.settings" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_sale +msgid "Exclude goods already in sale quotations" +msgstr "Isključi dobra već u prodajnim nalozima" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "Exclude incoming goods" +msgstr "Isključi robu u dolasku" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "Include the production potential" +msgstr "Isključi potencijal proizvodnje" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__potential_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__potential_qty +msgid "Potential" +msgstr "Potencijal" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_product +msgid "Product" +msgstr "Proizvod" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_template +msgid "Product Template" +msgstr "Predložak proizvoda" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand. If the product has several variants, this will be the biggest " +"quantity that can be made for a any single variant." +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_configuration +msgid "Stock available to promise" +msgstr "Zaliha raspoloživa za obećati" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "" +"This will add the quantities of goods that can be immediately manufactured, " +"to the quantities available to promise.\n" +"This installs the module stock_available_mrp.\n" +"If the module mrp is not installed, this will install it too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "" +"This will subtract incoming quantities from the quantities available to " +"promise.\n" +"This installs the module stock_available_immediately." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_sale +msgid "" +"This will subtract quantities from the sale quotations from the quantities " +"available to promise.\n" +"This installs the modules stock_available_sale.\n" +"If the modules sale and sale_delivery_date are not installed, this will " +"install them too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "based on" +msgstr "bazirano na" diff --git a/stock_available/i18n/hr_HR.po b/stock_available/i18n/hr_HR.po new file mode 100644 index 0000000..2926e8e --- /dev/null +++ b/stock_available/i18n/hr_HR.po @@ -0,0 +1,181 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_available +# +# Translators: +# OCA Transbot , 2016 +# Bole , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-05-02 00:35+0000\n" +"PO-Revision-Date: 2017-05-02 00:35+0000\n" +"Last-Translator: Bole , 2017\n" +"Language-Team: Croatian (Croatia) (https://www.transifex.com/oca/teams/23907/" +"hr_HR/)\n" +"Language: hr_HR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Available" +msgstr "Dostupno" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Potential" +msgstr "Potencijal" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_kanban +msgid "Available to Promise:" +msgstr "Dostupno za rezervirati:" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__immediately_usable_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__immediately_usable_qty +msgid "Available to promise" +msgstr "Dostupno za rezervirati:" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "" +"Choose the field of the product which will be used to compute potential.\n" +"If empty, Quantity On Hand is used.\n" +"Only the quantity fields have meaning for computing stock" +msgstr "" +"Izaberite polje na proizvodu koje će se koristiti za izračun potencijala.\n" +"Ukoliko je prazno, koristi se količina na raspolaganju.\n" +"Samo polja količine imaju značaj pri izračunu zalihe." + +#. module: stock_available +#: model:ir.model,name:stock_available.model_res_config_settings +#, fuzzy +msgid "Config Settings" +msgstr "stock.config.settings" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_sale +msgid "Exclude goods already in sale quotations" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "Exclude incoming goods" +msgstr "Isključi robu u dolasku" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "Include the production potential" +msgstr "Uključi potencijale proizvodnje" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__potential_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__potential_qty +msgid "Potential" +msgstr "Potencijal" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_product +msgid "Product" +msgstr "Proizvod" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_template +msgid "Product Template" +msgstr "Predložak proizvoda" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand." +msgstr "" +"Količina ovog proizvoda koja može biti proizvoedena korištenjem trenutno " +"raspoloživih materijala." + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand. If the product has several variants, this will be the biggest " +"quantity that can be made for a any single variant." +msgstr "" +"Količina ovog proizvoda koja može biti proizvedena korištenjem trenutno " +"raspoloživih materijala. Ukoliko proizvoda ima više varijanti, ovo će " +"pokazati najveću količinu koja može biti proizvoedena za bilokoju varijantu." + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_configuration +msgid "Stock available to promise" +msgstr "Zaliha dostupna za rezervacije" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs" +msgstr "" +"Zaliha ovog proizvoda koja može biti predložena za prodaju kupcima.\n" +"Definicija ove vrijednosti može biti podešena da odgovara vašim potrebama." + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__immediately_usable_qty +#, fuzzy +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs." +msgstr "" +"Zaliha ovog proizvoda koja može biti predložena za prodaju kupcima.\n" +"Definicija ove vrijednosti može biti podešena da odgovara vašim potrebama." + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "" +"This will add the quantities of goods that can be immediately manufactured, " +"to the quantities available to promise.\n" +"This installs the module stock_available_mrp.\n" +"If the module mrp is not installed, this will install it too" +msgstr "" +"Ovo će dodati količinu robe koja može biti odmah proizvedena, količinama " +"raspoloživim za rezervacije.\n" +"Ovo instalira modul stock_available_mrp.\n" +"Ukoliko modul mrp nije instaliran, instalirati će i njega." + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "" +"This will subtract incoming quantities from the quantities available to " +"promise.\n" +"This installs the module stock_available_immediately." +msgstr "" +"Ovo će oduzeti količine robe u dolasku od količina raspoloživih za " +"rezervacije.\n" +"Ovo instalira modul_stock_available_emediatly." + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_sale +#, fuzzy +msgid "" +"This will subtract quantities from the sale quotations from the quantities " +"available to promise.\n" +"This installs the modules stock_available_sale.\n" +"If the modules sale and sale_delivery_date are not installed, this will " +"install them too" +msgstr "" +"Ovo će dodati količinu robe koja može biti odmah proizvedena, količinama " +"raspoloživim za rezervacije.\n" +"Ovo instalira modul stock_available_mrp.\n" +"Ukoliko modul mrp nije instaliran, instalirati će i njega." + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "based on" +msgstr "bazirano na" diff --git a/stock_available/i18n/it.po b/stock_available/i18n/it.po new file mode 100644 index 0000000..e7ca224 --- /dev/null +++ b/stock_available/i18n/it.po @@ -0,0 +1,152 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_available +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-06-03 01:23+0000\n" +"PO-Revision-Date: 2017-06-03 01:23+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Available" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_kanban +msgid "Available to Promise:" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__immediately_usable_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__immediately_usable_qty +msgid "Available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "" +"Choose the field of the product which will be used to compute potential.\n" +"If empty, Quantity On Hand is used.\n" +"Only the quantity fields have meaning for computing stock" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_sale +msgid "Exclude goods already in sale quotations" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "Exclude incoming goods" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "Include the production potential" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__potential_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__potential_qty +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_product +msgid "Product" +msgstr "Prodotto" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_template +msgid "Product Template" +msgstr "Template Prodotto" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand. If the product has several variants, this will be the biggest " +"quantity that can be made for a any single variant." +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_configuration +msgid "Stock available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "" +"This will add the quantities of goods that can be immediately manufactured, " +"to the quantities available to promise.\n" +"This installs the module stock_available_mrp.\n" +"If the module mrp is not installed, this will install it too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "" +"This will subtract incoming quantities from the quantities available to " +"promise.\n" +"This installs the module stock_available_immediately." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_sale +msgid "" +"This will subtract quantities from the sale quotations from the quantities " +"available to promise.\n" +"This installs the modules stock_available_sale.\n" +"If the modules sale and sale_delivery_date are not installed, this will " +"install them too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "based on" +msgstr "" diff --git a/stock_available/i18n/nl.po b/stock_available/i18n/nl.po new file mode 100644 index 0000000..e86c2ea --- /dev/null +++ b/stock_available/i18n/nl.po @@ -0,0 +1,152 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_available +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-16 14:35+0000\n" +"PO-Revision-Date: 2018-01-16 14:35+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Dutch (https://www.transifex.com/oca/teams/23907/nl/)\n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Available" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_kanban +msgid "Available to Promise:" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__immediately_usable_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__immediately_usable_qty +msgid "Available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "" +"Choose the field of the product which will be used to compute potential.\n" +"If empty, Quantity On Hand is used.\n" +"Only the quantity fields have meaning for computing stock" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_sale +msgid "Exclude goods already in sale quotations" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "Exclude incoming goods" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "Include the production potential" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__potential_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__potential_qty +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_product +msgid "Product" +msgstr "Product" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_template +msgid "Product Template" +msgstr "Productsjabloon" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand. If the product has several variants, this will be the biggest " +"quantity that can be made for a any single variant." +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_configuration +msgid "Stock available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "" +"This will add the quantities of goods that can be immediately manufactured, " +"to the quantities available to promise.\n" +"This installs the module stock_available_mrp.\n" +"If the module mrp is not installed, this will install it too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "" +"This will subtract incoming quantities from the quantities available to " +"promise.\n" +"This installs the module stock_available_immediately." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_sale +msgid "" +"This will subtract quantities from the sale quotations from the quantities " +"available to promise.\n" +"This installs the modules stock_available_sale.\n" +"If the modules sale and sale_delivery_date are not installed, this will " +"install them too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "based on" +msgstr "" diff --git a/stock_available/i18n/nl_NL.po b/stock_available/i18n/nl_NL.po new file mode 100644 index 0000000..9c22523 --- /dev/null +++ b/stock_available/i18n/nl_NL.po @@ -0,0 +1,155 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_available +# +# Translators: +# OCA Transbot , 2017 +# Peter Hageman , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-06-23 00:57+0000\n" +"PO-Revision-Date: 2017-06-23 00:57+0000\n" +"Last-Translator: Peter Hageman , 2017\n" +"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/" +"teams/23907/nl_NL/)\n" +"Language: nl_NL\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Available" +msgstr "Beschikbaar" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_kanban +msgid "Available to Promise:" +msgstr "Vrije Voorraad:" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__immediately_usable_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__immediately_usable_qty +msgid "Available to promise" +msgstr "Vrije Voorraad" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "" +"Choose the field of the product which will be used to compute potential.\n" +"If empty, Quantity On Hand is used.\n" +"Only the quantity fields have meaning for computing stock" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_res_config_settings +#, fuzzy +msgid "Config Settings" +msgstr "stock.config.settings" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_sale +msgid "Exclude goods already in sale quotations" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "Exclude incoming goods" +msgstr "Inkomende goederen uitzonderen" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "Include the production potential" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__potential_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__potential_qty +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_product +msgid "Product" +msgstr "Product" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_template +msgid "Product Template" +msgstr "Productsjabloon" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand. If the product has several variants, this will be the biggest " +"quantity that can be made for a any single variant." +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_configuration +msgid "Stock available to promise" +msgstr "Vrije voorraad" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "" +"This will add the quantities of goods that can be immediately manufactured, " +"to the quantities available to promise.\n" +"This installs the module stock_available_mrp.\n" +"If the module mrp is not installed, this will install it too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "" +"This will subtract incoming quantities from the quantities available to " +"promise.\n" +"This installs the module stock_available_immediately." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_sale +msgid "" +"This will subtract quantities from the sale quotations from the quantities " +"available to promise.\n" +"This installs the modules stock_available_sale.\n" +"If the modules sale and sale_delivery_date are not installed, this will " +"install them too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "based on" +msgstr "Gebaseerd op" diff --git a/stock_available/i18n/pt.po b/stock_available/i18n/pt.po new file mode 100644 index 0000000..c00ce99 --- /dev/null +++ b/stock_available/i18n/pt.po @@ -0,0 +1,179 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_available +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-06-03 01:23+0000\n" +"PO-Revision-Date: 2021-07-26 13:49+0000\n" +"Last-Translator: Pedro Castro Silva \n" +"Language-Team: Portuguese (https://www.transifex.com/oca/teams/23907/pt/)\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Available" +msgstr "Disponível" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Potential" +msgstr "Potencial" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_kanban +msgid "Available to Promise:" +msgstr "Disponível para Promessa:" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__immediately_usable_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__immediately_usable_qty +msgid "Available to promise" +msgstr "Disponível para promessa" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "" +"Choose the field of the product which will be used to compute potential.\n" +"If empty, Quantity On Hand is used.\n" +"Only the quantity fields have meaning for computing stock" +msgstr "" +"Escolha o campo do produto que será usado para calcular o potencial.\n" +"Se estiver vazio, é utilizada a Quantidade em Mão.\n" +"Somente os campos de quantidade têm significado para o cálculo do stock" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_res_config_settings +msgid "Config Settings" +msgstr "Parâmetros de Configuração" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_sale +msgid "Exclude goods already in sale quotations" +msgstr "Excluir bens já em orçamentos de venda" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "Exclude incoming goods" +msgstr "Excluir bens em recepção" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "Include the production potential" +msgstr "Incluir o potencial de produção" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__potential_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__potential_qty +msgid "Potential" +msgstr "Potencial" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_product +msgid "Product" +msgstr "Produto" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_template +msgid "Product Template" +msgstr "Modelo de Produto" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand." +msgstr "" +"Quantidade deste Produto que poderia ser produzida utilizando os materiais " +"já em mão." + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand. If the product has several variants, this will be the biggest " +"quantity that can be made for a any single variant." +msgstr "" +"Quantidade deste Produto que poderia ser produzida utilizando os materiais " +"já em mão. Se o produto tiver várias variantes, esta será a maior quantidade " +"que pode ser feita para uma única variante." + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_configuration +msgid "Stock available to promise" +msgstr "Stock disponível para promessa" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs" +msgstr "" +"Stock para este Produto que pode ser proposto com segurança para venda aos " +"Clientes.\n" +"A definição deste valor pode ser configurada de acordo com suas necessidades" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs." +msgstr "" +"Stock para este Produto que pode ser proposto com segurança para venda aos " +"Clientes.\n" +"A definição deste valor pode ser configurada de acordo com suas necessidades." + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "" +"This will add the quantities of goods that can be immediately manufactured, " +"to the quantities available to promise.\n" +"This installs the module stock_available_mrp.\n" +"If the module mrp is not installed, this will install it too" +msgstr "" +"Isto adicionará as quantidades de mercadorias que podem ser imediatamente " +"fabricadas às quantidades disponíveis para promessa.\n" +"Isto instala o módulo stock_available_mrp.\n" +"Se o módulo mrp não estiver instalado, isto também o instalará" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "" +"This will subtract incoming quantities from the quantities available to " +"promise.\n" +"This installs the module stock_available_immediately." +msgstr "" +"Isto irá subtrair as quantidades em recepção às quantidades disponíveis para " +"promessa.\n" +"Isto instala o módulo stock_available_immediately." + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_sale +msgid "" +"This will subtract quantities from the sale quotations from the quantities " +"available to promise.\n" +"This installs the modules stock_available_sale.\n" +"If the modules sale and sale_delivery_date are not installed, this will " +"install them too" +msgstr "" +"Isto irá subtrair quantidades das cotações de venda das quantidades " +"disponíveis para promessa.\n" +"Isto instala os módulos stock_available_sale.\n" +"Se os módulos sale e sale_delivery_date não estiverem instalados, isto " +"também os instalará" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "based on" +msgstr "baseado em" diff --git a/stock_available/i18n/pt_BR.po b/stock_available/i18n/pt_BR.po new file mode 100644 index 0000000..197bef3 --- /dev/null +++ b/stock_available/i18n/pt_BR.po @@ -0,0 +1,182 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_available +# +# Translators: +# Claudio Araujo Santos , 2016 +msgid "" +msgstr "" +"Project-Id-Version: stock-logistics-warehouse (9.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-07-03 20:56+0000\n" +"PO-Revision-Date: 2019-08-30 14:23+0000\n" +"Last-Translator: Rodrigo Macedo \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/" +"OCA-stock-logistics-warehouse-9-0/language/pt_BR/)\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 3.8\n" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Available" +msgstr "Disponível" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Potential" +msgstr "Potencial" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_kanban +msgid "Available to Promise:" +msgstr "Disponível a prometer:" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__immediately_usable_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__immediately_usable_qty +msgid "Available to promise" +msgstr "Disponível a prometer" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "" +"Choose the field of the product which will be used to compute potential.\n" +"If empty, Quantity On Hand is used.\n" +"Only the quantity fields have meaning for computing stock" +msgstr "" +"Escolha do campo do produto que vai ser utilizado para calcular potencial.\n" +"Se vazio, quantidade disponível é utilizada.\n" +"Somente os campos de quantidade têm significado para computação estoque" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_res_config_settings +msgid "Config Settings" +msgstr "Definições de configuração" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_sale +msgid "Exclude goods already in sale quotations" +msgstr "Excluir mercadorias já em cotações de venda" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "Exclude incoming goods" +msgstr "Excluir entrada de mercadorias" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "Include the production potential" +msgstr "Incluir o potencial de produção" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__potential_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__potential_qty +msgid "Potential" +msgstr "Potencial" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_product +msgid "Product" +msgstr "Produto" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_template +msgid "Product Template" +msgstr "Modelo Produto" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand." +msgstr "" +"Quantidade deste produto que pode ser produzida usando os materiais já " +"disponíveis." + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand. If the product has several variants, this will be the biggest " +"quantity that can be made for a any single variant." +msgstr "" +"Quantidade deste produto que pode ser produzida usando os materiais já " +"disponíveis. Se o produto tiver várias variantes, essa será a maior " +"quantidade que pode ser feita para uma única variante." + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_configuration +msgid "Stock available to promise" +msgstr "Estoque disponível para prometer" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs" +msgstr "" +"Estoque para este produto que pode ser proposto com segurança para a venda " +"aos clientes.\n" +"A definição deste valor pode ser configurado para atender às suas " +"necessidades" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs." +msgstr "" +"Estoque para este produto que pode ser proposto com segurança para venda aos " +"clientes.\n" +"A definição desse valor pode ser configurada para atender às suas " +"necessidades." + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "" +"This will add the quantities of goods that can be immediately manufactured, " +"to the quantities available to promise.\n" +"This installs the module stock_available_mrp.\n" +"If the module mrp is not installed, this will install it too" +msgstr "" +"Isto irá adicionar as quantidades de produtos que podem ser fabricados de " +"imediato, para as quantidades disponíveis para prometer.\n" +"Isso instala o stock_available_mrp módulo.\n" +"Se o MRP módulo não está instalado, este irá instalar-lo também" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "" +"This will subtract incoming quantities from the quantities available to " +"promise.\n" +"This installs the module stock_available_immediately." +msgstr "" +"Isto irá subtrair quantidades recebidas a partir das quantidades disponíveis " +"para prometer.\n" +"Isso instala o módulo stock_available_immediately." + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_sale +msgid "" +"This will subtract quantities from the sale quotations from the quantities " +"available to promise.\n" +"This installs the modules stock_available_sale.\n" +"If the modules sale and sale_delivery_date are not installed, this will " +"install them too" +msgstr "" +"Isso subtrairá as quantidades das cotações de venda das quantidades " +"disponíveis para promessa.\n" +"Isso instala os módulos stock_available_sale.\n" +"Se os módulos sale e sale_delivery_date não estiverem instalados, isso " +"também os instalará" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "based on" +msgstr "Baseado em" diff --git a/stock_available/i18n/ro.po b/stock_available/i18n/ro.po new file mode 100644 index 0000000..95b4ead --- /dev/null +++ b/stock_available/i18n/ro.po @@ -0,0 +1,153 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_available +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-06-03 01:23+0000\n" +"PO-Revision-Date: 2017-06-03 01:23+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Romanian (https://www.transifex.com/oca/teams/23907/ro/)\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Available" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_kanban +msgid "Available to Promise:" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__immediately_usable_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__immediately_usable_qty +msgid "Available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "" +"Choose the field of the product which will be used to compute potential.\n" +"If empty, Quantity On Hand is used.\n" +"Only the quantity fields have meaning for computing stock" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_sale +msgid "Exclude goods already in sale quotations" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "Exclude incoming goods" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "Include the production potential" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__potential_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__potential_qty +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_product +msgid "Product" +msgstr "Produs" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_template +msgid "Product Template" +msgstr "Produs șablon" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand. If the product has several variants, this will be the biggest " +"quantity that can be made for a any single variant." +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_configuration +msgid "Stock available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "" +"This will add the quantities of goods that can be immediately manufactured, " +"to the quantities available to promise.\n" +"This installs the module stock_available_mrp.\n" +"If the module mrp is not installed, this will install it too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "" +"This will subtract incoming quantities from the quantities available to " +"promise.\n" +"This installs the module stock_available_immediately." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_sale +msgid "" +"This will subtract quantities from the sale quotations from the quantities " +"available to promise.\n" +"This installs the modules stock_available_sale.\n" +"If the modules sale and sale_delivery_date are not installed, this will " +"install them too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "based on" +msgstr "" diff --git a/stock_available/i18n/ru.po b/stock_available/i18n/ru.po new file mode 100644 index 0000000..34f7642 --- /dev/null +++ b/stock_available/i18n/ru.po @@ -0,0 +1,154 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_available +# +# Translators: +# OCA Transbot , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-16 14:35+0000\n" +"PO-Revision-Date: 2018-01-16 14:35+0000\n" +"Last-Translator: OCA Transbot , 2018\n" +"Language-Team: Russian (https://www.transifex.com/oca/teams/23907/ru/)\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Available" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_kanban +msgid "Available to Promise:" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__immediately_usable_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__immediately_usable_qty +msgid "Available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "" +"Choose the field of the product which will be used to compute potential.\n" +"If empty, Quantity On Hand is used.\n" +"Only the quantity fields have meaning for computing stock" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_sale +msgid "Exclude goods already in sale quotations" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "Exclude incoming goods" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "Include the production potential" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__potential_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__potential_qty +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_product +msgid "Product" +msgstr "Товар/Услуга" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_template +msgid "Product Template" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand. If the product has several variants, this will be the biggest " +"quantity that can be made for a any single variant." +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_configuration +msgid "Stock available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "" +"This will add the quantities of goods that can be immediately manufactured, " +"to the quantities available to promise.\n" +"This installs the module stock_available_mrp.\n" +"If the module mrp is not installed, this will install it too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "" +"This will subtract incoming quantities from the quantities available to " +"promise.\n" +"This installs the module stock_available_immediately." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_sale +msgid "" +"This will subtract quantities from the sale quotations from the quantities " +"available to promise.\n" +"This installs the modules stock_available_sale.\n" +"If the modules sale and sale_delivery_date are not installed, this will " +"install them too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "based on" +msgstr "" diff --git a/stock_available/i18n/sl.po b/stock_available/i18n/sl.po new file mode 100644 index 0000000..ef48a84 --- /dev/null +++ b/stock_available/i18n/sl.po @@ -0,0 +1,174 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_available +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: stock-logistics-warehouse (9.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-04-30 03:10+0000\n" +"PO-Revision-Date: 2020-08-11 10:59+0000\n" +"Last-Translator: Matjaz Mozetic \n" +"Language-Team: Slovenian (http://www.transifex.com/oca/" +"OCA-stock-logistics-warehouse-9-0/language/sl/)\n" +"Language: sl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || " +"n%100==4 ? 2 : 3;\n" +"X-Generator: Weblate 3.10\n" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Available" +msgstr "Na voljo" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Potential" +msgstr "Potencialno" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_kanban +msgid "Available to Promise:" +msgstr "Lahko obljubimo:" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__immediately_usable_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__immediately_usable_qty +msgid "Available to promise" +msgstr "Lahko obljubimo" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "" +"Choose the field of the product which will be used to compute potential.\n" +"If empty, Quantity On Hand is used.\n" +"Only the quantity fields have meaning for computing stock" +msgstr "" +"Izbira polja proizvoda po katerem se izračuna potencial.\n" +"Če se pusti prazno, se uporabi količina pri roki.\n" +"Le količinska polja imajo smisel pri izračunu zalog" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_res_config_settings +msgid "Config Settings" +msgstr "Nastavitve" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_sale +msgid "Exclude goods already in sale quotations" +msgstr "Izvzemi blago, ki je že v prodajnih ponudbah" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "Exclude incoming goods" +msgstr "Izvzemi blago, ki prihaja" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "Include the production potential" +msgstr "Vključno proizvodni potencial" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__potential_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__potential_qty +msgid "Potential" +msgstr "Potencial" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_product +msgid "Product" +msgstr "Proizvod" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_template +msgid "Product Template" +msgstr "Predloga proizvoda" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand." +msgstr "Količina proizvoda, ki bi se lahko proizvedla s surovinami že pri roki." + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand. If the product has several variants, this will be the biggest " +"quantity that can be made for a any single variant." +msgstr "" +"Količina proizvoda, ki bi se lahko proizvedla s surovinami že pri roki. Če " +"ima proizvod več različic, bo to največja količina, ki se lahko proizvede za " +"katerokoli posamezno različico." + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_configuration +msgid "Stock available to promise" +msgstr "Zaloga, ki jo lahko obljubimo" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs" +msgstr "" +"Zaloga proizvoda, ki jo lahko varno obljubimo za prodajo kupcem.\n" +"Definicija te vrednosti se lahko nastavi po lastnih potrebah" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs." +msgstr "" +"Zaloga proizvoda, ki jo lahko varno obljubimo za prodajo kupcem.\n" +"Definicija te vrednosti se lahko nastavi po lastnih potrebah." + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "" +"This will add the quantities of goods that can be immediately manufactured, " +"to the quantities available to promise.\n" +"This installs the module stock_available_mrp.\n" +"If the module mrp is not installed, this will install it too" +msgstr "" +"Količini, ki jo lahko obljubimo, doda količino blaga, ki se ga lahko takoj " +"proizvede.\n" +"Namesti modul stock_available_mrp.\n" +"Če modul mrp ni nameščen, namesti tudi le-tega" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "" +"This will subtract incoming quantities from the quantities available to " +"promise.\n" +"This installs the module stock_available_immediately." +msgstr "" +"Odbije količine v prihodu od količin, ki se lahko obljubijo.\n" +"Namesti modul stock_available_immediately." + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_sale +msgid "" +"This will subtract quantities from the sale quotations from the quantities " +"available to promise.\n" +"This installs the modules stock_available_sale.\n" +"If the modules sale and sale_delivery_date are not installed, this will " +"install them too" +msgstr "" +"Odbije količine iz prodajnih predračunov od količine, ki se jo lahko obljubi." +"\n" +"Namesti modul stock_available_sale.\n" +"Če modula sale in sale_delivery_date nista nameščena, namesti tudi njiju" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "based on" +msgstr "na osnovi" diff --git a/stock_available/i18n/tr.po b/stock_available/i18n/tr.po new file mode 100644 index 0000000..9fe41da --- /dev/null +++ b/stock_available/i18n/tr.po @@ -0,0 +1,153 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_available +# +# Translators: +# OCA Transbot , 2017 +# Ediz Duman , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-06-03 01:23+0000\n" +"PO-Revision-Date: 2017-06-03 01:23+0000\n" +"Last-Translator: Ediz Duman , 2017\n" +"Language-Team: Turkish (https://www.transifex.com/oca/teams/23907/tr/)\n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Available" +msgstr "Mevcut" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Potential" +msgstr "Potansiyel" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_kanban +msgid "Available to Promise:" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__immediately_usable_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__immediately_usable_qty +msgid "Available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "" +"Choose the field of the product which will be used to compute potential.\n" +"If empty, Quantity On Hand is used.\n" +"Only the quantity fields have meaning for computing stock" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_sale +msgid "Exclude goods already in sale quotations" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "Exclude incoming goods" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "Include the production potential" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__potential_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__potential_qty +msgid "Potential" +msgstr "Potansiyel" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_product +msgid "Product" +msgstr "Ürün" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_template +msgid "Product Template" +msgstr "Ürün Şablonu" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand. If the product has several variants, this will be the biggest " +"quantity that can be made for a any single variant." +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_configuration +msgid "Stock available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "" +"This will add the quantities of goods that can be immediately manufactured, " +"to the quantities available to promise.\n" +"This installs the module stock_available_mrp.\n" +"If the module mrp is not installed, this will install it too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "" +"This will subtract incoming quantities from the quantities available to " +"promise.\n" +"This installs the module stock_available_immediately." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_sale +msgid "" +"This will subtract quantities from the sale quotations from the quantities " +"available to promise.\n" +"This installs the modules stock_available_sale.\n" +"If the modules sale and sale_delivery_date are not installed, this will " +"install them too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "based on" +msgstr "" diff --git a/stock_available/i18n/tr_TR.po b/stock_available/i18n/tr_TR.po new file mode 100644 index 0000000..ced7dd5 --- /dev/null +++ b/stock_available/i18n/tr_TR.po @@ -0,0 +1,153 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_available +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-06-03 01:23+0000\n" +"PO-Revision-Date: 2017-06-03 01:23+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Turkish (Turkey) (https://www.transifex.com/oca/teams/23907/" +"tr_TR/)\n" +"Language: tr_TR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Available" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_kanban +msgid "Available to Promise:" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__immediately_usable_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__immediately_usable_qty +msgid "Available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "" +"Choose the field of the product which will be used to compute potential.\n" +"If empty, Quantity On Hand is used.\n" +"Only the quantity fields have meaning for computing stock" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_sale +msgid "Exclude goods already in sale quotations" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "Exclude incoming goods" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "Include the production potential" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__potential_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__potential_qty +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_product +msgid "Product" +msgstr "Ürün" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_template +msgid "Product Template" +msgstr "Ürün şablonu" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand. If the product has several variants, this will be the biggest " +"quantity that can be made for a any single variant." +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_configuration +msgid "Stock available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "" +"This will add the quantities of goods that can be immediately manufactured, " +"to the quantities available to promise.\n" +"This installs the module stock_available_mrp.\n" +"If the module mrp is not installed, this will install it too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "" +"This will subtract incoming quantities from the quantities available to " +"promise.\n" +"This installs the module stock_available_immediately." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_sale +msgid "" +"This will subtract quantities from the sale quotations from the quantities " +"available to promise.\n" +"This installs the modules stock_available_sale.\n" +"If the modules sale and sale_delivery_date are not installed, this will " +"install them too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "based on" +msgstr "" diff --git a/stock_available/i18n/vi_VN.po b/stock_available/i18n/vi_VN.po new file mode 100644 index 0000000..088664e --- /dev/null +++ b/stock_available/i18n/vi_VN.po @@ -0,0 +1,153 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_available +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-06-03 01:23+0000\n" +"PO-Revision-Date: 2017-06-03 01:23+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Vietnamese (Viet Nam) (https://www.transifex.com/oca/" +"teams/23907/vi_VN/)\n" +"Language: vi_VN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Available" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_kanban +msgid "Available to Promise:" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__immediately_usable_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__immediately_usable_qty +msgid "Available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "" +"Choose the field of the product which will be used to compute potential.\n" +"If empty, Quantity On Hand is used.\n" +"Only the quantity fields have meaning for computing stock" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_sale +msgid "Exclude goods already in sale quotations" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "Exclude incoming goods" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "Include the production potential" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__potential_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__potential_qty +msgid "Potential" +msgstr "" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_product +msgid "Product" +msgstr "Sản phẩm" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_template +msgid "Product Template" +msgstr "Mẫu sản phẩm" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand. If the product has several variants, this will be the biggest " +"quantity that can be made for a any single variant." +msgstr "" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_configuration +msgid "Stock available to promise" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "" +"This will add the quantities of goods that can be immediately manufactured, " +"to the quantities available to promise.\n" +"This installs the module stock_available_mrp.\n" +"If the module mrp is not installed, this will install it too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "" +"This will subtract incoming quantities from the quantities available to " +"promise.\n" +"This installs the module stock_available_immediately." +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_sale +msgid "" +"This will subtract quantities from the sale quotations from the quantities " +"available to promise.\n" +"This installs the modules stock_available_sale.\n" +"If the modules sale and sale_delivery_date are not installed, this will " +"install them too" +msgstr "" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "based on" +msgstr "" diff --git a/stock_available/i18n/zh_CN.po b/stock_available/i18n/zh_CN.po new file mode 100644 index 0000000..e4b2d9a --- /dev/null +++ b/stock_available/i18n/zh_CN.po @@ -0,0 +1,169 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_available +# +# Translators: +# Jeffery Chenn , 2016 +msgid "" +msgstr "" +"Project-Id-Version: stock-logistics-warehouse (9.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-08-28 10:00+0000\n" +"PO-Revision-Date: 2019-09-26 15:05+0000\n" +"Last-Translator: 黎伟杰 <674416404@qq.com>\n" +"Language-Team: Chinese (China) (http://www.transifex.com/oca/" +"OCA-stock-logistics-warehouse-9-0/language/zh_CN/)\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 3.8\n" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Available" +msgstr "可用" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_form +msgid "Potential" +msgstr "潜力" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_available_kanban +msgid "Available to Promise:" +msgstr "可供销售的数量:" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__immediately_usable_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__immediately_usable_qty +msgid "Available to promise" +msgstr "可供销售的数量" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "" +"Choose the field of the product which will be used to compute potential.\n" +"If empty, Quantity On Hand is used.\n" +"Only the quantity fields have meaning for computing stock" +msgstr "" +"选择将用于计算潜力的产品字段。\n" +"如果为空,则使用现有数量。\n" +"只有数量字段才有计算库存的意义" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_res_config_settings +msgid "Config Settings" +msgstr "配置设定" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_sale +msgid "Exclude goods already in sale quotations" +msgstr "排除已经在报价中的商品" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "Exclude incoming goods" +msgstr "排除进货" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "Include the production potential" +msgstr "包括生产潜力" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_product_product__potential_qty +#: model:ir.model.fields,field_description:stock_available.field_product_template__potential_qty +msgid "Potential" +msgstr "潜力" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_product +msgid "Product" +msgstr "产品" + +#. module: stock_available +#: model:ir.model,name:stock_available.model_product_template +msgid "Product Template" +msgstr "产品模板" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand." +msgstr "可以使用现有材料生产的产品数量。" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__potential_qty +msgid "" +"Quantity of this Product that could be produced using the materials already " +"at hand. If the product has several variants, this will be the biggest " +"quantity that can be made for a any single variant." +msgstr "可以使用现有材料生产的产品数量。如果产品具有多个变体,则这将是任何单个变体可制造的最大数量。" + +#. module: stock_available +#: model_terms:ir.ui.view,arch_db:stock_available.view_stock_configuration +msgid "Stock available to promise" +msgstr "库存可供销售数量" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_template__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs" +msgstr "" +"此产品的库存,可以安全地出售给客户。\n" +"可以配置此值的定义以满足您的需求" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_product_product__immediately_usable_qty +msgid "" +"Stock for this Product that can be safely proposed for sale to Customers.\n" +"The definition of this value can be configured to suit your needs." +msgstr "" +"该产品的库存可以安全地出售给客户。\n" +"可以配置此值的定义以适合您的需求。" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_mrp +msgid "" +"This will add the quantities of goods that can be immediately manufactured, " +"to the quantities available to promise.\n" +"This installs the module stock_available_mrp.\n" +"If the module mrp is not installed, this will install it too" +msgstr "" +"这会将可立即生产的商品数量增加到可供销售的数量。\n" +"这将安装模块stock_available_mrp。\n" +"如果未安装模块mrp,则也将安装它" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_immediately +msgid "" +"This will subtract incoming quantities from the quantities available to " +"promise.\n" +"This installs the module stock_available_immediately." +msgstr "" +"这将从可供销售的数量中减去进货数量。\n" +"这将立即安装模块stock_available_immediately。" + +#. module: stock_available +#: model:ir.model.fields,help:stock_available.field_res_config_settings__module_stock_available_sale +msgid "" +"This will subtract quantities from the sale quotations from the quantities " +"available to promise.\n" +"This installs the modules stock_available_sale.\n" +"If the modules sale and sale_delivery_date are not installed, this will " +"install them too" +msgstr "" +"这将从可供销售的数量中减去销售报价中的数量。\n" +"这将安装模块stock_available_sale。\n" +"如果未安装模块sale和sale_delivery_date,这也将安装它们" + +#. module: stock_available +#: model:ir.model.fields,field_description:stock_available.field_res_config_settings__stock_available_mrp_based_on +msgid "based on" +msgstr "基于" diff --git a/stock_available/models/__init__.py b/stock_available/models/__init__.py new file mode 100644 index 0000000..359be9f --- /dev/null +++ b/stock_available/models/__init__.py @@ -0,0 +1,8 @@ +# Copyright 2014 Camptocamp, Akretion, Numérigraphe +# Copyright 2016 Sodexis +# Copyright 2019 Sergio Díaz +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import product_product +from . import product_template +from . import res_config_settings diff --git a/stock_available/models/product_product.py b/stock_available/models/product_product.py new file mode 100644 index 0000000..f65cd05 --- /dev/null +++ b/stock_available/models/product_product.py @@ -0,0 +1,76 @@ +# Copyright 2014 Numérigraphe +# Copyright 2016 Sodexis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models +from odoo.addons import decimal_precision as dp +from odoo.addons.stock.models.product import OPERATORS + + +class ProductProduct(models.Model): + + """ Add a field for the stock available to promise. + Useful implementations need to be installed through the Settings menu or by + installing one of the modules stock_available_* + """ + _inherit = 'product.product' + + @api.multi + def _compute_available_quantities_dict(self): + stock_dict = self._compute_quantities_dict( + self._context.get('lot_id'), + self._context.get('owner_id'), + self._context.get('package_id'), + self._context.get('from_date'), + self._context.get('to_date')) + res = {} + for product in self: + res[product.id] = { + 'immediately_usable_qty': stock_dict[product.id][ + 'virtual_available'], + 'potential_qty': 0.0 + } + return res, stock_dict + + @api.multi + @api.depends('virtual_available') + def _compute_available_quantities(self): + res, _ = self._compute_available_quantities_dict() + for product in self: + for key, value in res[product.id].items(): + if hasattr(product, key): + product[key] = value + + immediately_usable_qty = fields.Float( + digits=dp.get_precision('Product Unit of Measure'), + compute='_compute_available_quantities', + search="_search_immediately_usable_qty", + string='Available to promise', + help="Stock for this Product that can be safely proposed " + "for sale to Customers.\n" + "The definition of this value can be configured to suit " + "your needs.") + potential_qty = fields.Float( + compute='_compute_available_quantities', + digits=dp.get_precision('Product Unit of Measure'), + string='Potential', + help="Quantity of this Product that could be produced using " + "the materials already at hand.") + + @api.model + def _search_immediately_usable_qty(self, operator, value): + """ Search function for the immediately_usable_qty field. + The search is quite similar to the Odoo search about quantity available + (addons/stock/models/product.py,253; _search_product_quantity function) + :param operator: str + :param value: str + :return: list of tuple (domain) + """ + products = self.search([]) + # Force prefetch + products.mapped("immediately_usable_qty") + product_ids = [] + for product in products: + if OPERATORS[operator](product.immediately_usable_qty, value): + product_ids.append(product.id) + return [('id', 'in', product_ids)] diff --git a/stock_available/models/product_template.py b/stock_available/models/product_template.py new file mode 100644 index 0000000..1483f8a --- /dev/null +++ b/stock_available/models/product_template.py @@ -0,0 +1,77 @@ +# Copyright 2014 Numérigraphe +# Copyright 2016 Sodexis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import models, fields, api +from odoo.addons import decimal_precision as dp +from odoo.addons.stock.models.product import OPERATORS + + +class ProductTemplate(models.Model): + _inherit = 'product.template' + + @api.multi + @api.depends('product_variant_ids.immediately_usable_qty', + 'product_variant_ids.potential_qty') + def _compute_available_quantities(self): + res = self._compute_available_quantities_dict() + for product in self: + for key, value in res[product.id].items(): + if key in product._fields: + product[key] = value + + @api.multi + def _compute_available_quantities_dict(self): + variants_dict, _ = self.mapped( + 'product_variant_ids')._compute_available_quantities_dict() + res = {} + for template in self: + immediately_usable_qty = sum( + [variants_dict[p.id]["immediately_usable_qty"] - + variants_dict[p.id]["potential_qty"] for p in + template.product_variant_ids]) + potential_qty = max( + [variants_dict[p.id]["potential_qty"] for p in + template.product_variant_ids] or [0.0]) + res[template.id] = { + "immediately_usable_qty": immediately_usable_qty + + potential_qty, + "potential_qty": potential_qty, + } + return res + + immediately_usable_qty = fields.Float( + digits=dp.get_precision('Product Unit of Measure'), + compute='_compute_available_quantities', + search="_search_immediately_usable_qty", + string='Available to promise', + help="Stock for this Product that can be safely proposed " + "for sale to Customers.\n" + "The definition of this value can be configured to suit " + "your needs") + potential_qty = fields.Float( + compute='_compute_available_quantities', + digits=dp.get_precision('Product Unit of Measure'), + string='Potential', + help="Quantity of this Product that could be produced using " + "the materials already at hand. " + "If the product has several variants, this will be the biggest " + "quantity that can be made for a any single variant.") + + @api.model + def _search_immediately_usable_qty(self, operator, value): + """ Search function for the immediately_usable_qty field. + The search is quite similar to the Odoo search about quantity available + (addons/stock/models/product.py,253; _search_product_quantity function) + :param operator: str + :param value: str + :return: list of tuple (domain) + """ + products = self.search([]) + # Force prefetch + products.mapped("immediately_usable_qty") + product_ids = [] + for product in products: + if OPERATORS[operator](product.immediately_usable_qty, value): + product_ids.append(product.id) + return [('id', 'in', product_ids)] diff --git a/stock_available/models/res_config_settings.py b/stock_available/models/res_config_settings.py new file mode 100644 index 0000000..3067791 --- /dev/null +++ b/stock_available/models/res_config_settings.py @@ -0,0 +1,69 @@ +# Copyright 2014 Numérigraphe +# Copyright 2016 Sodexis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models + + +class ResConfigSettings(models.TransientModel): + + """Add options to easily install the submodules""" + _inherit = 'res.config.settings' + + @api.model + def _get_stock_available_mrp_based_on(self): + """Gets the available languages for the selection.""" + pdct_fields = self.env['ir.model.fields'].search( + [('model', '=', 'product.product'), + ('ttype', '=', 'float')]) + return [ + (field.name, field.field_description) + for field in sorted(pdct_fields, key=lambda f: f.field_description) + ] + + module_stock_available_immediately = fields.Boolean( + string='Exclude incoming goods', + help="This will subtract incoming quantities from the quantities " + "available to promise.\n" + "This installs the module stock_available_immediately.") + + module_stock_available_sale = fields.Boolean( + string='Exclude goods already in sale quotations', + help="This will subtract quantities from the sale quotations from " + "the quantities available to promise.\n" + "This installs the modules stock_available_sale.\n" + "If the modules sale and sale_delivery_date are not " + "installed, this will install them too") + + module_stock_available_mrp = fields.Boolean( + string='Include the production potential', + help="This will add the quantities of goods that can be " + "immediately manufactured, to the quantities available to " + "promise.\n" + "This installs the module stock_available_mrp.\n" + "If the module mrp is not installed, this will install it " + "too") + + stock_available_mrp_based_on = fields.Selection( + _get_stock_available_mrp_based_on, + string='based on', + help="Choose the field of the product which will be used to compute " + "potential.\nIf empty, Quantity On Hand is used.\n" + "Only the quantity fields have meaning for computing stock", + ) + + @api.model + def get_values(self): + res = super(ResConfigSettings, self).get_values() + res.update(stock_available_mrp_based_on=self.env[ + 'ir.config_parameter'].sudo().get_param( + 'stock_available_mrp_based_on', + 'qty_available') + ) + return res + + @api.multi + def set_values(self): + super(ResConfigSettings, self).set_values() + self.env['ir.config_parameter'].sudo().set_param( + 'stock_available_mrp_based_on', self.stock_available_mrp_based_on) diff --git a/stock_available/readme/CONFIGURE.rst b/stock_available/readme/CONFIGURE.rst new file mode 100644 index 0000000..e6b596b --- /dev/null +++ b/stock_available/readme/CONFIGURE.rst @@ -0,0 +1,7 @@ +By default, this module computes the stock available to promise as the virtual +stock. +To take advantage of the additional features, you must define on which information you +want to base the computation, by checking one or more boxes in the settings: +`Inventory` > `Configuration` > `Settings` > `Stock available to promise`. +In case of "Include the production potential", it is also possible to configure +which field of product to use to compute the production potential. diff --git a/stock_available/readme/CONTRIBUTORS.rst b/stock_available/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..9f854b2 --- /dev/null +++ b/stock_available/readme/CONTRIBUTORS.rst @@ -0,0 +1,15 @@ +* `Numérigraphe `_: + + * Lionel Sausin + +* `Sodexis `_: + + * Sodexis + +* `Factor Libre `_: + + * Kiko Peiro + +* `Tecnativa `_: + + * Sergio Teruel diff --git a/stock_available/readme/DESCRIPTION.rst b/stock_available/readme/DESCRIPTION.rst new file mode 100644 index 0000000..d345320 --- /dev/null +++ b/stock_available/readme/DESCRIPTION.rst @@ -0,0 +1,8 @@ +This module proposes several options to compute the quantity available to +promise for each product. +This quantity is based on the projected stock and, depending on the +configuration, it can account for various data such as sales quotations or +immediate production capacity. +In case of immediate production capacity, it is possible to configure on which +field the potential is computed, by default Quantity On Hand is used. +This can be configured in `Inventory` > `Configuration` > `Settings`. diff --git a/stock_available/readme/USAGE.rst b/stock_available/readme/USAGE.rst new file mode 100644 index 0000000..8574917 --- /dev/null +++ b/stock_available/readme/USAGE.rst @@ -0,0 +1,3 @@ +This module adds a field named `Available for sale` on the Product form. +Various additional fields may be added, depending on which information you +chose to base the computation on. diff --git a/stock_available/static/description/icon.png b/stock_available/static/description/icon.png new file mode 100644 index 0000000..3a0328b Binary files /dev/null and b/stock_available/static/description/icon.png differ diff --git a/stock_available/static/description/index.html b/stock_available/static/description/index.html new file mode 100644 index 0000000..d508283 --- /dev/null +++ b/stock_available/static/description/index.html @@ -0,0 +1,472 @@ + + + + + + +Stock available to promise + + + +
+

Stock available to promise

+ + +

Production/Stable License: AGPL-3 OCA/stock-logistics-warehouse Translate me on Weblate Try me on Runbot

+

This module proposes several options to compute the quantity available to +promise for each product. +This quantity is based on the projected stock and, depending on the +configuration, it can account for various data such as sales quotations or +immediate production capacity. +In case of immediate production capacity, it is possible to configure on which +field the potential is computed, by default Quantity On Hand is used. +This can be configured in Inventory > Configuration > Settings.

+

Table of contents

+ +
+

Configuration

+

By default, this module computes the stock available to promise as the virtual +stock. +To take advantage of the additional features, you must define on which information you +want to base the computation, by checking one or more boxes in the settings: +Inventory > Configuration > Settings > Stock available to promise. +In case of “Include the production potential”, it is also possible to configure +which field of product to use to compute the production potential.

+
+
+

Usage

+

This module adds a field named Available for sale on the Product form. +Various additional fields may be added, depending on which information you +chose to base the computation on.

+
+
+

Bug Tracker

+

Bugs are tracked on GitHub 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.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Numérigraphe
  • +
  • Sodexis
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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/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/stock_available/tests/__init__.py b/stock_available/tests/__init__.py new file mode 100644 index 0000000..678c94f --- /dev/null +++ b/stock_available/tests/__init__.py @@ -0,0 +1,5 @@ +# Copyright 2014 Numérigraphe +# Copyright 2016 Sodexis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import test_stock_available diff --git a/stock_available/tests/test_stock_available.py b/stock_available/tests/test_stock_available.py new file mode 100644 index 0000000..976dd7c --- /dev/null +++ b/stock_available/tests/test_stock_available.py @@ -0,0 +1,141 @@ +# Copyright 2014 Numérigraphe +# Copyright 2016 Sodexis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo.tests.common import TransactionCase + + +class TestStockLogisticsWarehouse(TransactionCase): + def test_res_config(self): + """Test the config file""" + stock_setting = self.env['res.config.settings'].create({}) + + self.assertEquals( + stock_setting.stock_available_mrp_based_on, + 'qty_available') + stock_setting.stock_available_mrp_based_on = 'immediately_usable_qty' + stock_setting.set_values() + self.assertEquals( + stock_setting.stock_available_mrp_based_on, + 'immediately_usable_qty') + + def test01_stock_levels(self): + """checking that immediately_usable_qty actually reflects \ + the variations in stock, both on product and template""" + moveObj = self.env['stock.move'] + productObj = self.env['product.product'] + templateObj = self.env['product.template'] + supplier_location = self.env.ref('stock.stock_location_suppliers') + stock_location = self.env.ref('stock.stock_location_stock') + customer_location = self.env.ref('stock.stock_location_customers') + uom_unit = self.env.ref('uom.product_uom_unit') + + # Create product template + templateAB = templateObj.create( + {'name': 'templAB', + 'uom_id': uom_unit.id, + }) + + # Create product A and B + productA = productObj.create( + {'name': 'product A', + 'standard_price': 1, + 'type': 'product', + 'uom_id': uom_unit.id, + 'default_code': 'A', + 'product_tmpl_id': templateAB.id, + }) + + productB = productObj.create( + {'name': 'product B', + 'standard_price': 1, + 'type': 'product', + 'uom_id': uom_unit.id, + 'default_code': 'B', + 'product_tmpl_id': templateAB.id, + }) + + # Create a stock move from INCOMING to STOCK + stockMoveInA = moveObj.create( + {'location_id': supplier_location.id, + 'location_dest_id': stock_location.id, + 'name': 'MOVE INCOMING -> STOCK ', + 'product_id': productA.id, + 'product_uom': productA.uom_id.id, + 'product_uom_qty': 2, + }) + + stockMoveInB = moveObj.create( + {'location_id': supplier_location.id, + 'location_dest_id': stock_location.id, + 'name': 'MOVE INCOMING -> STOCK ', + 'product_id': productB.id, + 'product_uom': productB.uom_id.id, + 'product_uom_qty': 3, + }) + + def compare_product_usable_qty(product, value): + """ + Compare the immediately_usable_qty with the given value + Check also the search function for the immediately_usable_qty field + :param product: product (template/product) recordset + :param value: int + :return: + """ + # Refresh, because the function field is not recalculated between + # transactions + product.refresh() + self.assertEqual(product.immediately_usable_qty, value) + # Now check search function + domain = [('immediately_usable_qty', '=', value)] + results = self.env[product._name].search(domain) + self.assertIn(product.id, results.ids) + domain = [('immediately_usable_qty', '!=', value)] + results = self.env[product._name].search(domain) + self.assertNotIn(product.id, results.ids) + domain = [('immediately_usable_qty', '>', value-1)] + results = self.env[product._name].search(domain) + self.assertIn(product.id, results.ids) + domain = [('immediately_usable_qty', '<', value+1)] + results = self.env[product._name].search(domain) + self.assertIn(product.id, results.ids) + + compare_product_usable_qty(productA, 0) + compare_product_usable_qty(templateAB, 0) + + stockMoveInA._action_confirm() + compare_product_usable_qty(productA, 2) + compare_product_usable_qty(templateAB, 2) + + stockMoveInA._action_assign() + compare_product_usable_qty(productA, 2) + compare_product_usable_qty(templateAB, 2) + + stockMoveInA._action_done() + compare_product_usable_qty(productA, 2) + compare_product_usable_qty(templateAB, 2) + + # will directly trigger action_done on productB + stockMoveInB._action_done() + compare_product_usable_qty(productA, 2) + compare_product_usable_qty(productB, 3) + compare_product_usable_qty(templateAB, 5) + + # Create a stock move from STOCK to CUSTOMER + stockMoveOutA = moveObj.create( + {'location_id': stock_location.id, + 'location_dest_id': customer_location.id, + 'name': ' STOCK --> CUSTOMER ', + 'product_id': productA.id, + 'product_uom': productA.uom_id.id, + 'product_uom_qty': 1, + 'state': 'confirmed', + }) + + stockMoveOutA._action_done() + compare_product_usable_qty(productA, 1) + compare_product_usable_qty(templateAB, 4) + + # Potential Qty is set as 0.0 by default + self.assertEquals(templateAB.potential_qty, 0.0) + self.assertEquals(productA.potential_qty, 0.0) diff --git a/stock_available/views/product_product_view.xml b/stock_available/views/product_product_view.xml new file mode 100644 index 0000000..1929d65 --- /dev/null +++ b/stock_available/views/product_product_view.xml @@ -0,0 +1,53 @@ + + + + + + Quantity available to promise (variant tree) + product.product + + + + + + + + + + Quantity available to promise (variant tree) + product.product + + + + virtual_available<0 or immediately_usable_qty<0 + virtual_available>=0 or immediately_usable_qty>0 + + + + + + + diff --git a/stock_available/views/product_template_view.xml b/stock_available/views/product_template_view.xml new file mode 100644 index 0000000..f7c98a7 --- /dev/null +++ b/stock_available/views/product_template_view.xml @@ -0,0 +1,63 @@ + + + + + + Quantity available to promise (form) + product.template + + + + + + + + + + Quantity available to promise (tree) + product.template + + + + virtual_available<0 or immediately_usable_qty<0 + virtual_available>=0 or immediately_usable_qty>0 + + + + + + + + Quantity available to promise (kanban) + product.template + + +
    +
  • Available to Promise:
  • +
+
+
+
diff --git a/stock_available/views/res_config_settings_views.xml b/stock_available/views/res_config_settings_views.xml new file mode 100644 index 0000000..ded3545 --- /dev/null +++ b/stock_available/views/res_config_settings_views.xml @@ -0,0 +1,40 @@ + + + + + + Stock settings: quantity available to promise + res.config.settings + + + +

Stock available to promise

+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
diff --git a/stock_picking_deposito/README.rst b/stock_picking_deposito/README.rst new file mode 100644 index 0000000..9699469 --- /dev/null +++ b/stock_picking_deposito/README.rst @@ -0,0 +1,86 @@ +============================= +Stock Picking Completion Info +============================= + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png + :target: https://odoo-community.org/page/development-status + :alt: Alpha +.. |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%2Fstock--logistics--warehouse-lightgray.png?logo=github + :target: https://github.com/OCA/stock-logistics-warehouse/tree/12.0/stock_picking_completion_info + :alt: OCA/stock-logistics-warehouse +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/stock-logistics-warehouse-12-0/stock-logistics-warehouse-12-0-stock_picking_completion_info + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/153/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module adds completion information on stock picking. + +If activated on the picking type, completion information is computed according +to the next chained pickings related to the stock moves of the actual picking. + +In other words, if all the previous moves linked to the destination pickings +moves are done, the completion of the actual picking allows the destination +pickings to be processed. In such case, a ribbon will appear on the stock +picking form view, to inform the stock operator. + +.. IMPORTANT:: + This is an alpha version, the data model and design can change at any time without warning. + Only for development or testing purpose, do not use in production. + `More details on development status `_ + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub 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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Camptocamp + +Contributors +~~~~~~~~~~~~ + +* Akim Juillerat + +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/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/stock_picking_deposito/__init__.py b/stock_picking_deposito/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/stock_picking_deposito/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/stock_picking_deposito/__manifest__.py b/stock_picking_deposito/__manifest__.py new file mode 100644 index 0000000..a0483a2 --- /dev/null +++ b/stock_picking_deposito/__manifest__.py @@ -0,0 +1,25 @@ +# Copyright 2021 Criptomart +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl) +{ + "name": "Stock Picking Depósito", + "summary": "Permite la gestión de depósitos en el almacén y su facturación.", + "version": "12.0.1.0.1", + "development_status": "Alpha", + "category": "Warehouse Management", + "website": "https://criptomart.net", + "author": "Criptomart", + "license": "AGPL-3", + "application": False, + "installable": True, + "depends": [ + "stock", + "account", + "sale_management", + ], + "data": [ + "views/stock_picking.xml", + "views/view_res_partner.xml", + "data/data.xml", + "views/res_config_settings_views.xml", + ], +} diff --git a/stock_picking_deposito/data/data.xml b/stock_picking_deposito/data/data.xml new file mode 100644 index 0000000..24b37c1 --- /dev/null +++ b/stock_picking_deposito/data/data.xml @@ -0,0 +1,69 @@ + + + + + Depósito Salidas + DEPOU + + + + + + + + + + + + + Depósitos Entradas + view + + + + + Depósitos Salidas + view + + + + + Recepción en depósito + stock.picking + + DEPIN/ + + + + Salida en depósito + stock.picking + + DEPOUT/ + + + + Salida en Depósito + internal + + + True + + + + Recepción en Depósito + incoming + + + True + + + + diff --git a/stock_picking_deposito/models/__init__.py b/stock_picking_deposito/models/__init__.py new file mode 100644 index 0000000..f87125f --- /dev/null +++ b/stock_picking_deposito/models/__init__.py @@ -0,0 +1,5 @@ +from . import stock_picking +from . import res_partner +from . import res_config_settings +from . import res_company +from . import account_invoice diff --git a/stock_picking_deposito/models/account_invoice.py b/stock_picking_deposito/models/account_invoice.py new file mode 100644 index 0000000..6260c88 --- /dev/null +++ b/stock_picking_deposito/models/account_invoice.py @@ -0,0 +1,24 @@ +# Copyright (C) 2021: Criptomart () +# @author: Criptomart () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import logging + +from odoo import models, fields, api, _ +from odoo.exceptions import ValidationError, Warning + +_logger = logging.getLogger(__name__) + +class AccountInvoice(models.Model): + _inherit = 'account.invoice' + + @api.constrains('partner_id', 'partner_bank_id') + def validate_partner_bank_id(self): + for record in self: + if record.partner_bank_id: + if record.type in ('in_invoice', 'out_refund') and record.partner_bank_id.partner_id != record.partner_id.commercial_partner_id: + _logger.warning(_("Commercial partner and vendor account owners must be identical.")) + record.partner_bank_id = False + elif record.type in ('out_invoice', 'in_refund') and not record.company_id in record.partner_bank_id.partner_id.ref_company_ids: + raise ValidationError(_("The account selected for payment does not belong to the same company as this invoice.")) + diff --git a/stock_picking_deposito/models/res_company.py b/stock_picking_deposito/models/res_company.py new file mode 100644 index 0000000..36757cc --- /dev/null +++ b/stock_picking_deposito/models/res_company.py @@ -0,0 +1,14 @@ +# Copyright 2021 Criptomart +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class Company(models.Model): + _inherit = 'res.company' + + deposit_journal_id = fields.Many2one( + comodel_name="account.journal", + string="Diario de depósitos", + help="El diario donde se crearán las facturas en las liquidaciones de depósitos.", + ) diff --git a/stock_picking_deposito/models/res_config_settings.py b/stock_picking_deposito/models/res_config_settings.py new file mode 100644 index 0000000..0eaacb4 --- /dev/null +++ b/stock_picking_deposito/models/res_config_settings.py @@ -0,0 +1,13 @@ +# Copyright 2021 Criptomart +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = 'res.config.settings' + + deposit_journal_id = fields.Many2one( + related="company_id.deposit_journal_id", + readonly=False, + ) diff --git a/stock_picking_deposito/models/res_partner.py b/stock_picking_deposito/models/res_partner.py new file mode 100644 index 0000000..e271dd2 --- /dev/null +++ b/stock_picking_deposito/models/res_partner.py @@ -0,0 +1,174 @@ +# Copyright (C) 2021: Criptomart () +# @author: Criptomart () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +#import logging + +from odoo import models, fields, api +from odoo.exceptions import ValidationError, Warning + +#_logger = logging.getLogger(__name__) + +class ResPartner(models.Model): + _inherit = 'res.partner' + + deposit_sale_accept = fields.Boolean( + string='Acepta depósitos de venta', + help='Éste cliente acepta nuestro material en depósito.', + ) + deposit_buy_accept = fields.Boolean( + string='Acepta depósitos de compra', + help='Éste proveedor nos deja material a depósito.', + ) + deposit_sale_location_id = fields.Many2one( + comodel_name='stock.location', + string='Ubicación de depósito de ventas', + help="Ubicación usada para gestionar el depósito que dejamos a éste proveedor." + ) + deposit_buy_location_id = fields.Many2one( + comodel_name='stock.location', + string='Ubicación de depósito de compras', + help="Ubicación usada para gestionar el material que éste proveedor nos deja en depósito." + ) + deposit_buy_last_liquidation_date = fields.Datetime( + string='Fecha última liquidación compras', + help="Cuándo se realizó la última liquidación de compras con éste proveedor." + ) + deposit_sale_last_liquidation_date = fields.Datetime( + string='Fecha última liquidación ventas', + help="Cuándo se realizó la última liquidación de ventas con éste proveedor." + ) + + @api.model + def create(self, vals): + if vals.get('deposit_sale_accept', False) == True: + vals['deposit_sale_location_id'] = self.env['stock.location'].create({ + 'usage': 'transit', + 'name': vals.get('name'), + 'location_id': self.env.ref('stock_picking_deposito.stock_location_deposits_stock').id + }).id + if vals.get('deposit_buy_accept', False) == True: + vals['deposit_buy_location_id'] = self.env['stock.location'].create({ + 'usage': 'transit', + 'name': vals.get('name'), + 'location_id': self.env.ref('stock_picking_deposito.location_deposit_buy').id + }).id + return super().create(vals) + + @api.multi + def write(self, vals): + if ( vals.get('deposit_sale_accept', False) == True ) and not self.deposit_sale_location_id: + vals['deposit_sale_location_id'] = self.env['stock.location'].create({ + 'usage': 'transit', + 'name': self.name, + 'location_id': self.env.ref('stock_picking_deposito.stock_location_deposits_stock').id + }).id + if ( vals.get('deposit_buy_accept', False) == True ) and not self.deposit_buy_location_id: + vals['deposit_buy_location_id'] = self.env['stock.location'].create({ + 'usage': 'transit', + 'name': self.name, + 'location_id': self.env.ref('stock_picking_deposito.location_deposit_buy').id + }).id + return super().write(vals) + + def make_liquidation_buy(self, context = None): + invoice_obj = self.env['account.invoice'] + search_vals = [ + ('location_id', '=', self.deposit_buy_location_id.id),'|', + ('location_dest_id', '=', self.env.ref('stock.stock_location_customers').id), + ('location_dest_id', '=', self.env.ref('stock.stock_location_stock').id), + ] + if self.deposit_buy_last_liquidation_date: + search_vals.append(('date', '>', self.deposit_buy_last_liquidation_date.strftime("%Y-%m-%d %H:%M:%S"))) + move_lines = self.env['stock.move.line'].search(search_vals) + product_list = [] + for mv in move_lines: + new_prod = True + for p in product_list: + if p[2]['product_id'] == mv.product_id.id: + p[2]['quantity'] += mv.qty_done + new_prod = False + break + if new_prod: + product_list.append([0, False, { + 'product_id': mv.product_id.id, + 'quantity': mv.qty_done, + 'name': mv.product_id.name, + 'price_unit': mv.product_id.lst_price, + 'uom_id': mv.product_id.uom_id.id, + 'account_id': self.env['account.account'].search([('user_type_id', '=', self.env.ref('account.data_account_type_expenses').id)], limit=1).id + } + ]) + if len(product_list): + self.deposit_buy_last_liquidation_date = fields.datetime.now() + invoice_vals = invoice_obj.default_get(invoice_obj._fields.keys()) + invoice_vals.update({ + 'origin': "Liquidación Compras " + self.deposit_buy_last_liquidation_date.strftime("%d-%m-%Y"), + 'type': 'in_invoice', + 'date_invoice': self.deposit_buy_last_liquidation_date.strftime("%Y-%m-%d %H:%M:%S"), + 'journal_id': self.env.user.company_id.deposit_journal_id.id, + 'partner_id': self.id, + 'invoice_line_ids': product_list, + 'company_id': self.company_id.id, + }) + invoice = self.env['account.invoice'].create(invoice_vals) + views = [(self.env.ref('account.invoice_form').id, 'form')] + return { + 'type': 'ir.actions.act_window', + 'res_model': 'account.invoice', + 'res_id': invoice.id, + 'target': 'current', + 'views': views, + } + else: + msg= "No se ha vendido ningún producto en depósito de éste provedor desde la última liquidación.\n\n" + if self.deposit_buy_last_liquidation_date: + msg += "Fecha última liquidación de compras : %s" %self.deposit_buy_last_liquidation_date.strftime("%d-%m-%Y, %H:%M:%S") + else: + msg += "Todavía no se ha realizado ninguna liquidación de compras a éste proveedor." + raise ValidationError(msg) + + def make_liquidation_sale(self, context = None): + self.deposit_sale_location_id + sale_order_obj = self.env['sale.order'] + search_vals = [('location_id', '=', self.deposit_sale_location_id.id)] + stock_lines = self.env['stock.quant'].search(search_vals) + product_list = [] + for mv in stock_lines: + if mv.quantity > 0: + product_list.append([0, False, { + 'product_id': mv.product_id.id, + 'product_uom_qty': mv.quantity, + 'name': mv.product_id.name, + 'price_unit': mv.product_id.lst_price, + 'product_uom': mv.product_id.uom_id.id, + } + ]) + if len(product_list): + self.deposit_sale_last_liquidation_date = fields.datetime.now() + so_vals = sale_order_obj.default_get(sale_order_obj._fields.keys()) + so_vals.update({ + 'partner_id': self.id, + 'origin': "Liquidación Ventas " + self.deposit_sale_last_liquidation_date.strftime("%d-%m-%Y"), + 'date_order': self.deposit_sale_last_liquidation_date.strftime("%Y-%m-%d %H:%M:%S"), + #'journal_id': self.env.user.company_id.deposit_journal_id.id, + 'order_line': product_list, + 'warehouse_id': self.env.ref('stock_picking_deposito.wh_deposits').id + }) + sale_order = self.env['sale.order'].sudo().create(so_vals) + views = [(self.env.ref('sale.view_order_form').id, 'form')] + return { + 'type': 'ir.actions.act_window', + 'res_model': 'sale.order', + 'res_id': sale_order.id, + 'target': 'current', + 'views': views, + } + else: + msg= "No hay ningún producto enviado en depósito a éste cliente desde la última liquidación de ventas.\n\n" + if self.deposit_sale_last_liquidation_date: + msg += "Fecha última liquidación de ventas: %s" %self.deposit_sale_last_liquidation_date.strftime("%d-%m-%Y, %H:%M:%S") + else: + msg += "Todavía no se ha realizado ninguna liquidación de ventas a éste proveedor." + raise ValidationError(msg) + diff --git a/stock_picking_deposito/models/stock_picking.py b/stock_picking_deposito/models/stock_picking.py new file mode 100644 index 0000000..e090f1a --- /dev/null +++ b/stock_picking_deposito/models/stock_picking.py @@ -0,0 +1,55 @@ +# Copyright 2021 Criptomart +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl) + +#import logging + +from odoo import api, models, fields +from odoo.exceptions import ValidationError + +#_logger = logging.getLogger(__name__) + +class PickingType(models.Model): + _inherit = 'stock.picking.type' + + is_deposit = fields.Boolean( + string='Depósito', + help='Éste albarán es un depósito, no es una venta final.', + default= False, + ) + +class Picking(models.Model): + _inherit = 'stock.picking' + + @api.model + def create(self, vals): + if vals.get("partner_id") and vals.get("location_id") == self.env.ref("stock_picking_deposito.stock_location_deposits_stock").id: + partner = self.env['res.partner'].browse(vals.get("partner_id")) + vals['location_id'] = partner.deposit_sale_location_id.id + return super().create(vals) + + @api.onchange('picking_type_id','partner_id') + def onchange_picking_type(self): + super(Picking, self).onchange_picking_type() + if self.picking_type_id.is_deposit and self.partner_id: + self.change_dest_location() + if self.partner_id and self.location_id == self.env.ref("stock_picking_deposito.stock_location_deposits_stock"): + self.update({ + 'location_id': self.partner_id.deposit_sale_location_id.id, + }) + + def change_dest_location(self): + if self.picking_type_id.code == 'internal': + if not self.partner_id.deposit_sale_accept: + raise ValidationError("Éste cliente no acepta material en depósito, configúralo antes de crear un depósito para él.") + return + self.update({ + 'location_dest_id': self.partner_id.deposit_sale_location_id.id, + }) + elif self.picking_type_id.code == 'incoming': + if not self.partner_id.deposit_buy_accept: + raise ValidationError("Éste proveedor no suministra material en depósito, configúralo antes de crear un depósito para él.") + return + self.update({ + 'location_dest_id': self.partner_id.deposit_buy_location_id.id, + }) + diff --git a/stock_picking_deposito/views/res_config_settings_views.xml b/stock_picking_deposito/views/res_config_settings_views.xml new file mode 100644 index 0000000..cc19e6f --- /dev/null +++ b/stock_picking_deposito/views/res_config_settings_views.xml @@ -0,0 +1,26 @@ + + + + + res.config.settings.view.form.inherit.product.deposit + res.config.settings + + +
+

Deposit Settings

+
+
+
+
+
+
+
+
+
+
+
+ +
diff --git a/stock_picking_deposito/views/stock_picking.xml b/stock_picking_deposito/views/stock_picking.xml new file mode 100644 index 0000000..57e33fb --- /dev/null +++ b/stock_picking_deposito/views/stock_picking.xml @@ -0,0 +1,14 @@ + + + + Operation Types inherit + + stock.picking.type + + + + + + + + diff --git a/stock_picking_deposito/views/view_res_partner.xml b/stock_picking_deposito/views/view_res_partner.xml new file mode 100644 index 0000000..0a998f3 --- /dev/null +++ b/stock_picking_deposito/views/view_res_partner.xml @@ -0,0 +1,88 @@ + + + + + Liquidación Depósito Compras + ir.actions.server + + code + action =record.make_liquidation_buy() + + + + Liquidación Depósito Ventas + ir.actions.server + + code + action =record.make_liquidation_sale() + + + + res.partner + + 200 + + + +

Depósitos

+ + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+ +
+
diff --git a/warehouse_stock_restrictions/__init__.py b/warehouse_stock_restrictions/__init__.py new file mode 100644 index 0000000..8815323 --- /dev/null +++ b/warehouse_stock_restrictions/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +from . import stock \ No newline at end of file diff --git a/warehouse_stock_restrictions/__manifest__.py b/warehouse_stock_restrictions/__manifest__.py new file mode 100644 index 0000000..034cf1c --- /dev/null +++ b/warehouse_stock_restrictions/__manifest__.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Copyright © 2016 Techspawn Solutions. (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +{ + 'name': "Warehouse Restrictions", + + 'summary': """ + Warehouse restrictions on users, Stock Location Restrictions. This module will restrict warehouse/stock locations on users.""", + + 'description': """ + This Module Restricts the User from Accessing Warehouse and Process Stock Moves other than allowed to Warehouses and Stock Locations. + """, + + 'author': "Techspawn Solutions", + 'website': "http://www.techspawn.com", + 'license':'OPL-1', + 'category': 'Warehouse', + 'version': '0.2', + 'images': ['static/description/WarehouseRestrictions.gif'], + 'depends': ['base', 'stock'], + + 'data': [ + + 'users_view.xml', + 'security/security.xml', + # 'security/ir.model.access.csv', + ], + + +} diff --git a/warehouse_stock_restrictions/doc/index.rst b/warehouse_stock_restrictions/doc/index.rst new file mode 100755 index 0000000..14f4bf9 --- /dev/null +++ b/warehouse_stock_restrictions/doc/index.rst @@ -0,0 +1,15 @@ +Warehouse Restriction +======================== +- This module will add Warehouse and Stock Location Restriction on Users + +Installation +============ +- Install the module normally like other modules. + +Configuration +============= +- Add Default Warehouse Opertions and Allowed Stock Locations and you are ready to go. + +Note +==== +- This restrictions are created using rule and access rights, so it will have no effect on the Adminstrator. \ No newline at end of file diff --git a/warehouse_stock_restrictions/security/ir.model.access.csv b/warehouse_stock_restrictions/security/ir.model.access.csv new file mode 100644 index 0000000..1b79128 --- /dev/null +++ b/warehouse_stock_restrictions/security/ir.model.access.csv @@ -0,0 +1,4 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_stock_picking_type_restricted_user,access_stock_picking_type_restricted_user,stock.model_stock_picking_type,base.group_system,1,1,1,0 + + diff --git a/warehouse_stock_restrictions/security/security.xml b/warehouse_stock_restrictions/security/security.xml new file mode 100644 index 0000000..23a119b --- /dev/null +++ b/warehouse_stock_restrictions/security/security.xml @@ -0,0 +1,21 @@ + + + + + + Resrict Stock warehouses + + + + Filter Stock Picking Type Allowed new + + + [('id','in', [ p.id for p in user.default_picking_type_ids ])] + + + + + + + + \ No newline at end of file diff --git a/warehouse_stock_restrictions/static/description/Linkedin-icon.png b/warehouse_stock_restrictions/static/description/Linkedin-icon.png new file mode 100644 index 0000000..226367a Binary files /dev/null and b/warehouse_stock_restrictions/static/description/Linkedin-icon.png differ diff --git a/warehouse_stock_restrictions/static/description/WarehouseRestrictions.gif b/warehouse_stock_restrictions/static/description/WarehouseRestrictions.gif new file mode 100644 index 0000000..aa0feb3 Binary files /dev/null and b/warehouse_stock_restrictions/static/description/WarehouseRestrictions.gif differ diff --git a/warehouse_stock_restrictions/static/description/WarehouseRestrictions.jpg b/warehouse_stock_restrictions/static/description/WarehouseRestrictions.jpg new file mode 100644 index 0000000..5d80460 Binary files /dev/null and b/warehouse_stock_restrictions/static/description/WarehouseRestrictions.jpg differ diff --git a/warehouse_stock_restrictions/static/description/check.png b/warehouse_stock_restrictions/static/description/check.png new file mode 100644 index 0000000..d1f398e Binary files /dev/null and b/warehouse_stock_restrictions/static/description/check.png differ diff --git a/warehouse_stock_restrictions/static/description/facebook-icon.png b/warehouse_stock_restrictions/static/description/facebook-icon.png new file mode 100644 index 0000000..c737563 Binary files /dev/null and b/warehouse_stock_restrictions/static/description/facebook-icon.png differ diff --git a/warehouse_stock_restrictions/static/description/features/check.png b/warehouse_stock_restrictions/static/description/features/check.png new file mode 100644 index 0000000..d1f398e Binary files /dev/null and b/warehouse_stock_restrictions/static/description/features/check.png differ diff --git a/warehouse_stock_restrictions/static/description/icon.png b/warehouse_stock_restrictions/static/description/icon.png new file mode 100644 index 0000000..2194ec1 Binary files /dev/null and b/warehouse_stock_restrictions/static/description/icon.png differ diff --git a/warehouse_stock_restrictions/static/description/iconnew.png b/warehouse_stock_restrictions/static/description/iconnew.png new file mode 100644 index 0000000..b2b389d Binary files /dev/null and b/warehouse_stock_restrictions/static/description/iconnew.png differ diff --git a/warehouse_stock_restrictions/static/description/index.html b/warehouse_stock_restrictions/static/description/index.html new file mode 100644 index 0000000..5ca5b4b --- /dev/null +++ b/warehouse_stock_restrictions/static/description/index.html @@ -0,0 +1,551 @@ + +
+
+
+ + +
+ + + +
+
+
+
+ + +
+
+
+ +
+
+

+ Warehouse Restriction +

+

By Techspawn Solutions +

+ +

Warehouse and Stock Location Restriction on Users + +

+
+
+ +
+
+
+ +
+
+ + +
+ +
+
+
+
+
+ +
+
+

Restrict Warehouse operations for User

+
+
+
+
+
+
+ +
+
+

Restrict User to use specific Locations

+
+
+
+
+ +
+
+
+
+ +
+
+

Restrict the user to other warehouses

+
+
+
+
+
+
+ +
+
+

On selecting Restrict Location optionadmin can add allowed Stock Location for the User

+
+
+
+
+ + +
+ +
+ + +
+
+ +
+
+ + +
+
+ + + +
+

Contact & Support

+

Expert Ideas and ERP Solution To Help You Grow

+

+ Get expert help and assistance related to the new Odoo features and all ERP Related solutions at one place. + We offer solutions regardless the size of a business, contact us through e-mail at sales@techspawn.com + and get professional help that you want to build your business better. + In case of any question regarding please reach out to us on support@techspawn.com +

+
+
+
+
+
+
+
+ +
+
+ + +
+ +
+
diff --git a/warehouse_stock_restrictions/static/description/logo.png b/warehouse_stock_restrictions/static/description/logo.png new file mode 100644 index 0000000..80f30d5 Binary files /dev/null and b/warehouse_stock_restrictions/static/description/logo.png differ diff --git a/warehouse_stock_restrictions/static/description/main.png b/warehouse_stock_restrictions/static/description/main.png new file mode 100644 index 0000000..5d80460 Binary files /dev/null and b/warehouse_stock_restrictions/static/description/main.png differ diff --git a/warehouse_stock_restrictions/static/description/pr1.png b/warehouse_stock_restrictions/static/description/pr1.png new file mode 100644 index 0000000..bb26f33 Binary files /dev/null and b/warehouse_stock_restrictions/static/description/pr1.png differ diff --git a/warehouse_stock_restrictions/static/description/pr2.png b/warehouse_stock_restrictions/static/description/pr2.png new file mode 100644 index 0000000..8c8a8d7 Binary files /dev/null and b/warehouse_stock_restrictions/static/description/pr2.png differ diff --git a/warehouse_stock_restrictions/static/description/pr3.png b/warehouse_stock_restrictions/static/description/pr3.png new file mode 100644 index 0000000..c32090d Binary files /dev/null and b/warehouse_stock_restrictions/static/description/pr3.png differ diff --git a/warehouse_stock_restrictions/static/description/pr4.png b/warehouse_stock_restrictions/static/description/pr4.png new file mode 100644 index 0000000..7612f63 Binary files /dev/null and b/warehouse_stock_restrictions/static/description/pr4.png differ diff --git a/warehouse_stock_restrictions/static/description/productimage/WearhouseRestrictions.gif b/warehouse_stock_restrictions/static/description/productimage/WearhouseRestrictions.gif new file mode 100644 index 0000000..aa0feb3 Binary files /dev/null and b/warehouse_stock_restrictions/static/description/productimage/WearhouseRestrictions.gif differ diff --git a/warehouse_stock_restrictions/static/description/productimage/office365.gif b/warehouse_stock_restrictions/static/description/productimage/office365.gif new file mode 100644 index 0000000..72f39f5 Binary files /dev/null and b/warehouse_stock_restrictions/static/description/productimage/office365.gif differ diff --git a/warehouse_stock_restrictions/static/description/productimage/productr.gif b/warehouse_stock_restrictions/static/description/productimage/productr.gif new file mode 100644 index 0000000..a0fcdd4 Binary files /dev/null and b/warehouse_stock_restrictions/static/description/productimage/productr.gif differ diff --git a/warehouse_stock_restrictions/static/description/productimage/quickb.gif b/warehouse_stock_restrictions/static/description/productimage/quickb.gif new file mode 100644 index 0000000..4176d8d Binary files /dev/null and b/warehouse_stock_restrictions/static/description/productimage/quickb.gif differ diff --git a/warehouse_stock_restrictions/static/description/productimage/sale.gif b/warehouse_stock_restrictions/static/description/productimage/sale.gif new file mode 100644 index 0000000..c46178b Binary files /dev/null and b/warehouse_stock_restrictions/static/description/productimage/sale.gif differ diff --git a/warehouse_stock_restrictions/static/description/productimage/shopify.gif b/warehouse_stock_restrictions/static/description/productimage/shopify.gif new file mode 100644 index 0000000..d0532f7 Binary files /dev/null and b/warehouse_stock_restrictions/static/description/productimage/shopify.gif differ diff --git a/warehouse_stock_restrictions/static/description/set_group.png b/warehouse_stock_restrictions/static/description/set_group.png new file mode 100644 index 0000000..950f217 Binary files /dev/null and b/warehouse_stock_restrictions/static/description/set_group.png differ diff --git a/warehouse_stock_restrictions/static/description/skype.png b/warehouse_stock_restrictions/static/description/skype.png new file mode 100644 index 0000000..f5ba7c1 Binary files /dev/null and b/warehouse_stock_restrictions/static/description/skype.png differ diff --git a/warehouse_stock_restrictions/static/description/user1.png b/warehouse_stock_restrictions/static/description/user1.png new file mode 100644 index 0000000..af0a700 Binary files /dev/null and b/warehouse_stock_restrictions/static/description/user1.png differ diff --git a/warehouse_stock_restrictions/static/description/user2.png b/warehouse_stock_restrictions/static/description/user2.png new file mode 100644 index 0000000..7ab2e55 Binary files /dev/null and b/warehouse_stock_restrictions/static/description/user2.png differ diff --git a/warehouse_stock_restrictions/static/description/user3.png b/warehouse_stock_restrictions/static/description/user3.png new file mode 100644 index 0000000..fe51c1e Binary files /dev/null and b/warehouse_stock_restrictions/static/description/user3.png differ diff --git a/warehouse_stock_restrictions/static/description/user4.png b/warehouse_stock_restrictions/static/description/user4.png new file mode 100644 index 0000000..a96f01b Binary files /dev/null and b/warehouse_stock_restrictions/static/description/user4.png differ diff --git a/warehouse_stock_restrictions/static/description/user5.png b/warehouse_stock_restrictions/static/description/user5.png new file mode 100644 index 0000000..bd19afd Binary files /dev/null and b/warehouse_stock_restrictions/static/description/user5.png differ diff --git a/warehouse_stock_restrictions/static/description/user6.png b/warehouse_stock_restrictions/static/description/user6.png new file mode 100644 index 0000000..ba07ebf Binary files /dev/null and b/warehouse_stock_restrictions/static/description/user6.png differ diff --git a/warehouse_stock_restrictions/static/description/warehouse.png b/warehouse_stock_restrictions/static/description/warehouse.png new file mode 100644 index 0000000..ce7aeb0 Binary files /dev/null and b/warehouse_stock_restrictions/static/description/warehouse.png differ diff --git a/warehouse_stock_restrictions/static/description/warehouse0.png b/warehouse_stock_restrictions/static/description/warehouse0.png new file mode 100644 index 0000000..dc31c7d Binary files /dev/null and b/warehouse_stock_restrictions/static/description/warehouse0.png differ diff --git a/warehouse_stock_restrictions/static/description/warehouse1.png b/warehouse_stock_restrictions/static/description/warehouse1.png new file mode 100644 index 0000000..ad1810f Binary files /dev/null and b/warehouse_stock_restrictions/static/description/warehouse1.png differ diff --git a/warehouse_stock_restrictions/static/description/warehouse2.png b/warehouse_stock_restrictions/static/description/warehouse2.png new file mode 100644 index 0000000..20e143f Binary files /dev/null and b/warehouse_stock_restrictions/static/description/warehouse2.png differ diff --git a/warehouse_stock_restrictions/stock.py b/warehouse_stock_restrictions/stock.py new file mode 100644 index 0000000..69d0a0a --- /dev/null +++ b/warehouse_stock_restrictions/stock.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- + +from openerp import models, fields, api, _ +from openerp.exceptions import Warning + +class ResUsers(models.Model): + _inherit = 'res.users' + + restrict_locations = fields.Boolean('Restrict Location') + + stock_location_ids = fields.Many2many( + 'stock.location', + 'location_security_stock_location_users', + 'user_id', + 'location_id', + 'Stock Locations') + + default_picking_type_ids = fields.Many2many( + 'stock.picking.type', 'stock_picking_type_users_rel', + 'user_id', 'picking_type_id', string='Default Warehouse Operations') + + +class stock_move(models.Model): + _inherit = 'stock.move' + + @api.one + @api.constrains('state', 'location_id', 'location_dest_id') + def check_user_location_rights(self): + if self.state == 'draft': + return True + user_locations = self.env.user.stock_location_ids + print(user_locations) + print("Checking access %s" %self.env.user.default_picking_type_ids) + if self.env.user.restrict_locations: + message = _( + 'Invalid Location. You cannot process this move since you do ' + 'not control the location "%s". ' + 'Please contact your Adminstrator.') + if self.location_id not in user_locations: + raise Warning(message % self.location_id.name) + elif self.location_dest_id not in user_locations: + raise Warning(message % self.location_dest_id.name) + + diff --git a/warehouse_stock_restrictions/users_view.xml b/warehouse_stock_restrictions/users_view.xml new file mode 100644 index 0000000..52590b0 --- /dev/null +++ b/warehouse_stock_restrictions/users_view.xml @@ -0,0 +1,35 @@ + + + + + usability.default_warehouse.res.users.form + res.users + + + + + + + + + + + + location_security.users.form + res.users + + + + + + + + + + + + + + + + diff --git a/web_decimal_numpad_dot/README.rst b/web_decimal_numpad_dot/README.rst new file mode 100644 index 0000000..82e353e --- /dev/null +++ b/web_decimal_numpad_dot/README.rst @@ -0,0 +1,92 @@ +===================================== +Web - Numpad Dot as decimal separator +===================================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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%2Fweb-lightgray.png?logo=github + :target: https://github.com/OCA/web/tree/12.0/web_decimal_numpad_dot + :alt: OCA/web +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/web-12-0/web-12-0-web_decimal_numpad_dot + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/162/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Allows using numpad dot to enter period decimal separator even in localizations +where comma is used instead of period. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +Whenever on a float or monetary input field pressing numpad dot produces the +proper decimal separator for the active localization. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub 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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* AvanzOSC +* Comunitea +* Tecnativa + +Contributors +~~~~~~~~~~~~ + +* Oihane Crucelaegui +* Ana Juaristi +* Omar Castiñeira Saavedra +* Oliver Dony <@odony> +* Wim Audenaert +* `Tecnativa `_: + + * Pedro M. Baeza + * David Vidal + * Jairo Llopis + * Ernesto Tejeda + +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/web `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/web_decimal_numpad_dot/__init__.py b/web_decimal_numpad_dot/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/web_decimal_numpad_dot/__manifest__.py b/web_decimal_numpad_dot/__manifest__.py new file mode 100644 index 0000000..1951a3e --- /dev/null +++ b/web_decimal_numpad_dot/__manifest__.py @@ -0,0 +1,26 @@ +# Copyright 2015 AvanzOSC - Oihane Crucelaegui +# Copyright 2015 Tecnativa - Pedro M. Baeza +# Copyright 2015 Comunitea - Omar Castiñeira Saavedra +# Copyright 2016 Oliver Dony +# Copyright 2017-18 Tecnativa - David Vidal +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Web - Numpad Dot as decimal separator", + "version": "12.0.1.0.0", + "license": "AGPL-3", + "summary": "Allows using numpad dot to enter period decimal separator", + "depends": [ + "web", + ], + "author": "AvanzOSC, " + "Comunitea, " + "Tecnativa, " + "Odoo Community Association (OCA)", + "website": "https://github.com/OCA/web", + "category": "Web", + "data": [ + "views/web_decimal_numpad_dot.xml", + ], + "installable": True, +} diff --git a/web_decimal_numpad_dot/i18n/ca.po b/web_decimal_numpad_dot/i18n/ca.po new file mode 100644 index 0000000..36c1015 --- /dev/null +++ b/web_decimal_numpad_dot/i18n/ca.po @@ -0,0 +1,14 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" diff --git a/web_decimal_numpad_dot/i18n/es.po b/web_decimal_numpad_dot/i18n/es.po new file mode 100644 index 0000000..7461f08 --- /dev/null +++ b/web_decimal_numpad_dot/i18n/es.po @@ -0,0 +1,14 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" diff --git a/web_decimal_numpad_dot/i18n/es_ES.po b/web_decimal_numpad_dot/i18n/es_ES.po new file mode 100644 index 0000000..d7c4709 --- /dev/null +++ b/web_decimal_numpad_dot/i18n/es_ES.po @@ -0,0 +1,14 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: es_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" diff --git a/web_decimal_numpad_dot/i18n/pt_BR.po b/web_decimal_numpad_dot/i18n/pt_BR.po new file mode 100644 index 0000000..7971f5f --- /dev/null +++ b/web_decimal_numpad_dot/i18n/pt_BR.po @@ -0,0 +1,14 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" diff --git a/web_decimal_numpad_dot/i18n/zh_CN.po b/web_decimal_numpad_dot/i18n/zh_CN.po new file mode 100644 index 0000000..4159be7 --- /dev/null +++ b/web_decimal_numpad_dot/i18n/zh_CN.po @@ -0,0 +1,14 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=1; plural=0;\n" diff --git a/web_decimal_numpad_dot/readme/CONTRIBUTORS.rst b/web_decimal_numpad_dot/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..c8d09bb --- /dev/null +++ b/web_decimal_numpad_dot/readme/CONTRIBUTORS.rst @@ -0,0 +1,11 @@ +* Oihane Crucelaegui +* Ana Juaristi +* Omar Castiñeira Saavedra +* Oliver Dony <@odony> +* Wim Audenaert +* `Tecnativa `_: + + * Pedro M. Baeza + * David Vidal + * Jairo Llopis + * Ernesto Tejeda diff --git a/web_decimal_numpad_dot/readme/DESCRIPTION.rst b/web_decimal_numpad_dot/readme/DESCRIPTION.rst new file mode 100644 index 0000000..9737bec --- /dev/null +++ b/web_decimal_numpad_dot/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +Allows using numpad dot to enter period decimal separator even in localizations +where comma is used instead of period. diff --git a/web_decimal_numpad_dot/readme/USAGE.rst b/web_decimal_numpad_dot/readme/USAGE.rst new file mode 100644 index 0000000..b7eab38 --- /dev/null +++ b/web_decimal_numpad_dot/readme/USAGE.rst @@ -0,0 +1,2 @@ +Whenever on a float or monetary input field pressing numpad dot produces the +proper decimal separator for the active localization. diff --git a/web_decimal_numpad_dot/static/description/icon.png b/web_decimal_numpad_dot/static/description/icon.png new file mode 100644 index 0000000..9c205cb Binary files /dev/null and b/web_decimal_numpad_dot/static/description/icon.png differ diff --git a/web_decimal_numpad_dot/static/description/index.html b/web_decimal_numpad_dot/static/description/index.html new file mode 100644 index 0000000..bbadf8a --- /dev/null +++ b/web_decimal_numpad_dot/static/description/index.html @@ -0,0 +1,439 @@ + + + + + + +Web - Numpad Dot as decimal separator + + + +
+

Web - Numpad Dot as decimal separator

+ + +

Beta License: AGPL-3 OCA/web Translate me on Weblate Try me on Runbot

+

Allows using numpad dot to enter period decimal separator even in localizations +where comma is used instead of period.

+

Table of contents

+ +
+

Usage

+

Whenever on a float or monetary input field pressing numpad dot produces the +proper decimal separator for the active localization.

+
+
+

Bug Tracker

+

Bugs are tracked on GitHub 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.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • AvanzOSC
  • +
  • Comunitea
  • +
  • Tecnativa
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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/web project on GitHub.

+

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

+
+
+
+ + diff --git a/web_decimal_numpad_dot/static/src/js/numpad_dot.js b/web_decimal_numpad_dot/static/src/js/numpad_dot.js new file mode 100644 index 0000000..9516dd6 --- /dev/null +++ b/web_decimal_numpad_dot/static/src/js/numpad_dot.js @@ -0,0 +1,44 @@ +/* License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */ + +odoo.define("web_decimal_numpad_dot.FieldFloat", function (require) { + "use strict"; + + var basic_fields = require("web.basic_fields"); + var translation = require("web.translation"); + + var NumpadDotReplaceMixin = { + l10n_decimal_point: function () { + return this.formatType === "float_time" + ? ":" : translation._t.database.parameters.decimal_point; + }, + + _replaceAt: function (cur_val, from, to, replacement) { + return cur_val.substring(0, from) + replacement + + cur_val.substring(to); + }, + + _onKeydown: function (event) { + // Only act on numpad dot key + if (event.keyCode !== 110) { + return this._super.apply(this, arguments); + } + event.preventDefault(); + var from = this.$input.prop("selectionStart"), + to = this.$input.prop("selectionEnd"), + cur_val = this.$input.val(), + point = this.l10n_decimal_point(); + var new_val = this._replaceAt(cur_val, from, to, point); + this.$input.val(new_val); + // Put user caret in place + to = from + point.length; + this.$input.prop("selectionStart", to).prop("selectionEnd", to); + }, + }; + + basic_fields.FieldFloat.include(NumpadDotReplaceMixin); + basic_fields.FieldMonetary.include(NumpadDotReplaceMixin); + + return { + NumpadDotReplaceMixin: NumpadDotReplaceMixin, + }; +}); diff --git a/web_decimal_numpad_dot/views/web_decimal_numpad_dot.xml b/web_decimal_numpad_dot/views/web_decimal_numpad_dot.xml new file mode 100644 index 0000000..d481575 --- /dev/null +++ b/web_decimal_numpad_dot/views/web_decimal_numpad_dot.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/web_responsive/README.rst b/web_responsive/README.rst new file mode 100644 index 0000000..e5b05c5 --- /dev/null +++ b/web_responsive/README.rst @@ -0,0 +1,190 @@ +============== +Web Responsive +============== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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-LGPL--3-blue.png + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github + :target: https://github.com/OCA/web/tree/12.0/web_responsive + :alt: OCA/web +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/web-12-0/web-12-0-web_responsive + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/162/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module adds responsiveness to web backend. + +Features for all devices: + +* New navigation with an app drawer + + .. image:: https://user-images.githubusercontent.com/973709/48417193-09a1e080-e74a-11e8-8a0c-e73eb689b2fb.gif + +* Quick menu search from the app drawer + + .. image:: https://user-images.githubusercontent.com/973709/48417213-17576600-e74a-11e8-846a-57691e82636b.gif + +Features for mobile: + +* App-specific submenus are shown on full screen when toggling them from the + "hamburger" menu + + .. image:: https://user-images.githubusercontent.com/973709/48417297-51286c80-e74a-11e8-9a47-22c810b18c43.gif + +* View type picker dropdown displays confortably + + .. image:: https://user-images.githubusercontent.com/973709/50964322-e3d55580-14c6-11e9-8249-48db9539600f.gif + +* Top app bar is always visible, but the control panel is hidden when + scrolling down, to save some vaulable vertical space + + .. image:: https://user-images.githubusercontent.com/973709/50964496-5cd4ad00-14c7-11e9-9261-fd223a329d02.gif + +* Form status bar action and status buttons are collapsed in dropdowns. + Other control panel buttons use icons to save space. + + .. image:: https://user-images.githubusercontent.com/973709/50965446-e08f9900-14c9-11e9-92d6-dda472cb6557.gif + +* Breadcrumbs navigation is collapsed with a "back arrow" button. + + .. image:: https://user-images.githubusercontent.com/973709/50965168-1d0ec500-14c9-11e9-82a0-dfee82ed0861.gif + +Features for computers: + +* Keyboard shortcuts for easier navigation, **using ``Alt + Shift + [key]``** + combination instead of just ``Alt + [key]``. + See https://github.com/odoo/odoo/issues/30068 to understand why. + + .. image:: https://user-images.githubusercontent.com/973709/48417578-ff341680-e74a-11e8-8881-017709e912bc.png + + +* Autofocus on search menu box when opening the drawer + + .. image:: https://user-images.githubusercontent.com/973709/48417213-17576600-e74a-11e8-846a-57691e82636b.gif + +* Set chatter on the side of the screen, optional per user + + .. image:: https://user-images.githubusercontent.com/973709/48417270-41108d00-e74a-11e8-9172-cba825d027ed.gif + +* Full width form sheets + + .. image:: https://user-images.githubusercontent.com/973709/48417428-ac5a5f00-e74a-11e8-8839-5bc538c54c1d.png + +* Sticky chatter topbar + + .. image:: https://raw.githubusercontent.com/OCA/web/12.0/web_responsive/static/img/chatter_topbar.gif + +* AppMenu waits for action finished to show the view + + .. image:: https://raw.githubusercontent.com/OCA/web/12.0/web_responsive/static/img/appmenu.gif + +* Sticky header & footer in list view + + .. image:: https://raw.githubusercontent.com/OCA/web/12.0/web_responsive/static/img/listview.gif + +* Sticky statusbar in form view + + .. image:: https://raw.githubusercontent.com/OCA/web/12.0/web_responsive/static/img/formview.gif + +* Followers and send button is displayed on mobile. Avatar is hidden. + + .. image:: https://raw.githubusercontent.com/OCA/web/12.0/web_responsive/static/img/chatter.gif + +* When the chatter is configured on the side part, the document viewer fills that + part for side-by-side reading instead of full screen. You can still put it on full + width preview clicking on the new maximize button. + + .. image:: https://raw.githubusercontent.com/OCA/web/12.0/web_responsive/static/img/document_viewer.gif + +* Bigger checkboxes in list view + + .. image:: https://raw.githubusercontent.com/OCA/web/12.0/web_responsive/static/img/big_checkboxes.gif + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +The following keyboard shortcuts are implemented: + +* Toggle app drawer - ``Alt + Shift + A`` +* Navigate app search results - Arrow keys +* Choose app result - ``Enter`` +* ``Esc`` to close app drawer + + +Also you can access to the user menu, with ``Alt + Shift + U`` + +Known issues / Roadmap +====================== + +* To view the full experience in a device, the page must be loaded with the + device screen size. This means that, if you change the size of your browser, + you should reload the web client to get the full experience for that + new size. This is Odoo's own limitation. +* App navigation with keyboard. +* Make it more beautiful. Maybe OCA-branded? +* Handle long titles on forms in a better way + +Bug Tracker +=========== + +Bugs are tracked on `GitHub 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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* LasLabs +* Tecnativa +* Alexandre Díaz + +Contributors +~~~~~~~~~~~~ + +* Dave Lasley +* Jairo Llopis +* Dennis Sluijk +* Sergio Teruel +* Alexandre Díaz +* Mathias Markl + +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/web `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/web_responsive/__init__.py b/web_responsive/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/web_responsive/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/web_responsive/__manifest__.py b/web_responsive/__manifest__.py new file mode 100644 index 0000000..0e58b12 --- /dev/null +++ b/web_responsive/__manifest__.py @@ -0,0 +1,31 @@ +# Copyright 2016-2017 LasLabs Inc. +# Copyright 2018 Alexandre Díaz +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). + +{ + "name": "Web Responsive", + "summary": "Responsive web client, community-supported", + "version": "12.0.2.4.0", + "category": "Website", + "website": "https://github.com/OCA/web", + "author": "LasLabs, Tecnativa, Alexandre Díaz, " + "Odoo Community Association (OCA)", + "license": "LGPL-3", + "installable": True, + "depends": [ + 'web', + 'mail', + ], + "data": [ + 'views/assets.xml', + 'views/res_users.xml', + 'views/web.xml', + ], + 'qweb': [ + 'static/src/xml/apps.xml', + 'static/src/xml/form_view.xml', + "static/src/xml/menu.xml", + 'static/src/xml/navbar.xml', + 'static/src/xml/document_viewer.xml', + ], +} diff --git a/web_responsive/i18n/ca.po b/web_responsive/i18n/ca.po new file mode 100644 index 0000000..b30be8c --- /dev/null +++ b/web_responsive/i18n/ca.po @@ -0,0 +1,166 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_responsive +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-02-17 10:45+0000\n" +"Last-Translator: claudiagn \n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/apps.xml:9 +#, python-format +msgid "#menu_id=#{app.menuID}&action_id=#{app.actionID}" +msgstr "#menu_id=#{app.menuID}&action_id=#{app.actionID}" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:37 +#: code:addons/web_responsive/static/src/xml/menu.xml:40 +#: code:addons/web_responsive/static/src/xml/menu.xml:49 +#: code:addons/web_responsive/static/src/xml/menu.xml:52 +#, python-format +msgid "Alt" +msgstr "" + +#. module: web_responsive +#: model:ir.model.fields,field_description:web_responsive.field_res_users__chatter_position +msgid "Chatter Position" +msgstr "Posició del chatter" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:18 +#, python-format +msgid "Close" +msgstr "Tancar" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:40 +#: code:addons/web_responsive/static/src/xml/menu.xml:52 +#, python-format +msgid "Control" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:57 +#: code:addons/web_responsive/static/src/xml/form_view.xml:96 +#, python-format +msgid "Create" +msgstr "Crear" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:71 +#: code:addons/web_responsive/static/src/xml/form_view.xml:110 +#, python-format +msgid "Discard" +msgstr "Descartar" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:50 +#, python-format +msgid "Edit" +msgstr "Editar" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:16 +#, python-format +msgid "Maximize" +msgstr "Maximitzar" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:17 +#, python-format +msgid "Minimize" +msgstr "Minimitzar" + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Normal" +msgstr "Normal" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:27 +#, python-format +msgid "Quick actions" +msgstr "Accions ràpides" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:64 +#: code:addons/web_responsive/static/src/xml/form_view.xml:103 +#, python-format +msgid "Save" +msgstr "Guardar" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/apps.xml:35 +#, python-format +msgid "Search menus..." +msgstr "Buscar menús..." + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:35 +#, python-format +msgid "Select menu" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:29 +#: code:addons/web_responsive/static/src/xml/menu.xml:37 +#: code:addons/web_responsive/static/src/xml/menu.xml:49 +#, python-format +msgid "Shift" +msgstr "Torn" + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Sided" +msgstr "De costat" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:47 +#, python-format +msgid "User menu" +msgstr "" + +#. module: web_responsive +#: model:ir.model,name:web_responsive.model_res_users +msgid "Users" +msgstr "Usuaris" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:9 +#, python-format +msgid "false" +msgstr "fals" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:8 +#, python-format +msgid "modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer" +msgstr "" +"modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer" diff --git a/web_responsive/i18n/da.po b/web_responsive/i18n/da.po new file mode 100644 index 0000000..7b05e3e --- /dev/null +++ b/web_responsive/i18n/da.po @@ -0,0 +1,183 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_responsive +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-11-08 09:16+0000\n" +"Last-Translator: Hans Henrik Gabelgaard \n" +"Language-Team: none\n" +"Language: da\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.10\n" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/apps.xml:9 +#, python-format +msgid "#menu_id=#{app.menuID}&action_id=#{app.actionID}" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:37 +#: code:addons/web_responsive/static/src/xml/menu.xml:40 +#: code:addons/web_responsive/static/src/xml/menu.xml:49 +#: code:addons/web_responsive/static/src/xml/menu.xml:52 +#, python-format +msgid "Alt" +msgstr "" + +#. module: web_responsive +#: model:ir.model.fields,field_description:web_responsive.field_res_users__chatter_position +msgid "Chatter Position" +msgstr "Log position" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:18 +#, python-format +msgid "Close" +msgstr "Luk" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:40 +#: code:addons/web_responsive/static/src/xml/menu.xml:52 +#, python-format +msgid "Control" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:57 +#: code:addons/web_responsive/static/src/xml/form_view.xml:96 +#, python-format +msgid "Create" +msgstr "Opret" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:71 +#: code:addons/web_responsive/static/src/xml/form_view.xml:110 +#, python-format +msgid "Discard" +msgstr "Kassér" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:50 +#, python-format +msgid "Edit" +msgstr "Rediger" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:16 +#, python-format +msgid "Maximize" +msgstr "Maksimer" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:17 +#, python-format +msgid "Minimize" +msgstr "Minimer" + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Normal" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:27 +#, python-format +msgid "Quick actions" +msgstr "Quick handlinger" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:64 +#: code:addons/web_responsive/static/src/xml/form_view.xml:103 +#, python-format +msgid "Save" +msgstr "Gem" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/apps.xml:35 +#, python-format +msgid "Search menus..." +msgstr "Søg menu..." + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:35 +#, python-format +msgid "Select menu" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:29 +#: code:addons/web_responsive/static/src/xml/menu.xml:37 +#: code:addons/web_responsive/static/src/xml/menu.xml:49 +#, python-format +msgid "Shift" +msgstr "" + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Sided" +msgstr "Side" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:47 +#, python-format +msgid "User menu" +msgstr "" + +#. module: web_responsive +#: model:ir.model,name:web_responsive.model_res_users +msgid "Users" +msgstr "Brugere" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:9 +#, python-format +msgid "false" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:8 +#, python-format +msgid "modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer" +msgstr "" + +#~ msgid "Toggle App Drawer" +#~ msgstr "Skift App skuffe" + +#~ msgid "Toggle Navigation" +#~ msgstr "Skift navigation" + +#~ msgid "Apps" +#~ msgstr "Applikationer" + +#~ msgid "More" +#~ msgstr "Mere" + +#~ msgid "More " +#~ msgstr "Mere " + +#~ msgid "Task" +#~ msgstr "Opgave" diff --git a/web_responsive/i18n/de.po b/web_responsive/i18n/de.po new file mode 100644 index 0000000..ce39568 --- /dev/null +++ b/web_responsive/i18n/de.po @@ -0,0 +1,179 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_responsive +# +# Translators: +# Niki Waibel , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-02-03 01:37+0000\n" +"PO-Revision-Date: 2017-02-03 01:37+0000\n" +"Last-Translator: Niki Waibel , 2017\n" +"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/apps.xml:9 +#, python-format +msgid "#menu_id=#{app.menuID}&action_id=#{app.actionID}" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:37 +#: code:addons/web_responsive/static/src/xml/menu.xml:40 +#: code:addons/web_responsive/static/src/xml/menu.xml:49 +#: code:addons/web_responsive/static/src/xml/menu.xml:52 +#, python-format +msgid "Alt" +msgstr "" + +#. module: web_responsive +#: model:ir.model.fields,field_description:web_responsive.field_res_users__chatter_position +msgid "Chatter Position" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:18 +#, python-format +msgid "Close" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:40 +#: code:addons/web_responsive/static/src/xml/menu.xml:52 +#, python-format +msgid "Control" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:57 +#: code:addons/web_responsive/static/src/xml/form_view.xml:96 +#, python-format +msgid "Create" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:71 +#: code:addons/web_responsive/static/src/xml/form_view.xml:110 +#, python-format +msgid "Discard" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:50 +#, python-format +msgid "Edit" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:16 +#, python-format +msgid "Maximize" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:17 +#, python-format +msgid "Minimize" +msgstr "" + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Normal" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:27 +#, python-format +msgid "Quick actions" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:64 +#: code:addons/web_responsive/static/src/xml/form_view.xml:103 +#, python-format +msgid "Save" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/apps.xml:35 +#, python-format +msgid "Search menus..." +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:35 +#, python-format +msgid "Select menu" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:29 +#: code:addons/web_responsive/static/src/xml/menu.xml:37 +#: code:addons/web_responsive/static/src/xml/menu.xml:49 +#, python-format +msgid "Shift" +msgstr "" + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Sided" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:47 +#, python-format +msgid "User menu" +msgstr "" + +#. module: web_responsive +#: model:ir.model,name:web_responsive.model_res_users +msgid "Users" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:9 +#, python-format +msgid "false" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:8 +#, python-format +msgid "modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer" +msgstr "" + +#~ msgid "Toggle App Drawer" +#~ msgstr "App Ordner umschalten" + +#~ msgid "Toggle Navigation" +#~ msgstr "Navigation umschalten" + +#~ msgid "Apps" +#~ msgstr "Apps" + +#~ msgid "More " +#~ msgstr "Mehr " diff --git a/web_responsive/i18n/es.po b/web_responsive/i18n/es.po new file mode 100644 index 0000000..5b67baf --- /dev/null +++ b/web_responsive/i18n/es.po @@ -0,0 +1,169 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_responsive +# +# Translators: +# Pedro M. Baeza , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-10 10:49+0000\n" +"PO-Revision-Date: 2020-09-16 14:00+0000\n" +"Last-Translator: claudiagn \n" +"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.10\n" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/apps.xml:9 +#, python-format +msgid "#menu_id=#{app.menuID}&action_id=#{app.actionID}" +msgstr "#menu_id=#{app.menuID}&action_id=#{app.actionID}" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:37 +#: code:addons/web_responsive/static/src/xml/menu.xml:40 +#: code:addons/web_responsive/static/src/xml/menu.xml:49 +#: code:addons/web_responsive/static/src/xml/menu.xml:52 +#, python-format +msgid "Alt" +msgstr "" + +#. module: web_responsive +#: model:ir.model.fields,field_description:web_responsive.field_res_users__chatter_position +msgid "Chatter Position" +msgstr "Posición del chatter" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:18 +#, python-format +msgid "Close" +msgstr "Cerrar" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:40 +#: code:addons/web_responsive/static/src/xml/menu.xml:52 +#, python-format +msgid "Control" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:57 +#: code:addons/web_responsive/static/src/xml/form_view.xml:96 +#, python-format +msgid "Create" +msgstr "Crear" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:71 +#: code:addons/web_responsive/static/src/xml/form_view.xml:110 +#, python-format +msgid "Discard" +msgstr "Descartar" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:50 +#, python-format +msgid "Edit" +msgstr "Editar" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:16 +#, python-format +msgid "Maximize" +msgstr "Maximizar" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:17 +#, python-format +msgid "Minimize" +msgstr "Minimizar" + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Normal" +msgstr "Normal" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:27 +#, python-format +msgid "Quick actions" +msgstr "Acciones rápidas" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:64 +#: code:addons/web_responsive/static/src/xml/form_view.xml:103 +#, python-format +msgid "Save" +msgstr "Guardar" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/apps.xml:35 +#, python-format +msgid "Search menus..." +msgstr "Buscar menús..." + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:35 +#, python-format +msgid "Select menu" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:29 +#: code:addons/web_responsive/static/src/xml/menu.xml:37 +#: code:addons/web_responsive/static/src/xml/menu.xml:49 +#, python-format +msgid "Shift" +msgstr "Cambiar" + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Sided" +msgstr "Lateral" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:47 +#, python-format +msgid "User menu" +msgstr "" + +#. module: web_responsive +#: model:ir.model,name:web_responsive.model_res_users +msgid "Users" +msgstr "Usuarios" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:9 +#, python-format +msgid "false" +msgstr "falso" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:8 +#, python-format +msgid "modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer" +msgstr "" +"modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer" diff --git a/web_responsive/i18n/fr.po b/web_responsive/i18n/fr.po new file mode 100644 index 0000000..fd66506 --- /dev/null +++ b/web_responsive/i18n/fr.po @@ -0,0 +1,166 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_responsive +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-06-28 14:48+0000\n" +"Last-Translator: Rémi \n" +"Language-Team: none\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/apps.xml:9 +#, python-format +msgid "#menu_id=#{app.menuID}&action_id=#{app.actionID}" +msgstr "#menu_id=#{app.menuID}&action_id=#{app.actionID}" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:37 +#: code:addons/web_responsive/static/src/xml/menu.xml:40 +#: code:addons/web_responsive/static/src/xml/menu.xml:49 +#: code:addons/web_responsive/static/src/xml/menu.xml:52 +#, python-format +msgid "Alt" +msgstr "" + +#. module: web_responsive +#: model:ir.model.fields,field_description:web_responsive.field_res_users__chatter_position +msgid "Chatter Position" +msgstr "Position du Chatter" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:18 +#, python-format +msgid "Close" +msgstr "Fermer" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:40 +#: code:addons/web_responsive/static/src/xml/menu.xml:52 +#, python-format +msgid "Control" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:57 +#: code:addons/web_responsive/static/src/xml/form_view.xml:96 +#, python-format +msgid "Create" +msgstr "Créer" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:71 +#: code:addons/web_responsive/static/src/xml/form_view.xml:110 +#, python-format +msgid "Discard" +msgstr "Annuler" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:50 +#, python-format +msgid "Edit" +msgstr "Modifier" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:16 +#, python-format +msgid "Maximize" +msgstr "Agrandir" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:17 +#, python-format +msgid "Minimize" +msgstr "Réduire" + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Normal" +msgstr "Normal" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:27 +#, python-format +msgid "Quick actions" +msgstr "Actions rapides" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:64 +#: code:addons/web_responsive/static/src/xml/form_view.xml:103 +#, python-format +msgid "Save" +msgstr "Sauvegarder" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/apps.xml:35 +#, python-format +msgid "Search menus..." +msgstr "Rechercher dans les menus..." + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:35 +#, python-format +msgid "Select menu" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:29 +#: code:addons/web_responsive/static/src/xml/menu.xml:37 +#: code:addons/web_responsive/static/src/xml/menu.xml:49 +#, python-format +msgid "Shift" +msgstr "Maj." + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Sided" +msgstr "À coté" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:47 +#, python-format +msgid "User menu" +msgstr "" + +#. module: web_responsive +#: model:ir.model,name:web_responsive.model_res_users +msgid "Users" +msgstr "Utilisateurs" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:9 +#, python-format +msgid "false" +msgstr "faux" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:8 +#, python-format +msgid "modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer" +msgstr "" +"modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer" diff --git a/web_responsive/i18n/hr.po b/web_responsive/i18n/hr.po new file mode 100644 index 0000000..775f7e9 --- /dev/null +++ b/web_responsive/i18n/hr.po @@ -0,0 +1,181 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_responsive +# +# Translators: +# Bole , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-04-28 18:03+0000\n" +"PO-Revision-Date: 2019-11-18 14:34+0000\n" +"Last-Translator: Bole \n" +"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 3.8\n" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/apps.xml:9 +#, python-format +msgid "#menu_id=#{app.menuID}&action_id=#{app.actionID}" +msgstr "#menu_id=#{app.menuID}&action_id=#{app.actionID}" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:37 +#: code:addons/web_responsive/static/src/xml/menu.xml:40 +#: code:addons/web_responsive/static/src/xml/menu.xml:49 +#: code:addons/web_responsive/static/src/xml/menu.xml:52 +#, python-format +msgid "Alt" +msgstr "" + +#. module: web_responsive +#: model:ir.model.fields,field_description:web_responsive.field_res_users__chatter_position +msgid "Chatter Position" +msgstr "Pozicija razgovora" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:18 +#, python-format +msgid "Close" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:40 +#: code:addons/web_responsive/static/src/xml/menu.xml:52 +#, python-format +msgid "Control" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:57 +#: code:addons/web_responsive/static/src/xml/form_view.xml:96 +#, python-format +msgid "Create" +msgstr "Kreiraj" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:71 +#: code:addons/web_responsive/static/src/xml/form_view.xml:110 +#, python-format +msgid "Discard" +msgstr "Odbaci" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:50 +#, python-format +msgid "Edit" +msgstr "Uredi" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:16 +#, python-format +msgid "Maximize" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:17 +#, python-format +msgid "Minimize" +msgstr "" + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Normal" +msgstr "Normalno" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:27 +#, python-format +msgid "Quick actions" +msgstr "Brze radnje" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:64 +#: code:addons/web_responsive/static/src/xml/form_view.xml:103 +#, python-format +msgid "Save" +msgstr "Spremi" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/apps.xml:35 +#, python-format +msgid "Search menus..." +msgstr "Pretraži izbornike..." + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:35 +#, python-format +msgid "Select menu" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:29 +#: code:addons/web_responsive/static/src/xml/menu.xml:37 +#: code:addons/web_responsive/static/src/xml/menu.xml:49 +#, python-format +msgid "Shift" +msgstr "" + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Sided" +msgstr "Bočno" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:47 +#, python-format +msgid "User menu" +msgstr "" + +#. module: web_responsive +#: model:ir.model,name:web_responsive.model_res_users +msgid "Users" +msgstr "Korisnici" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:9 +#, python-format +msgid "false" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:8 +#, python-format +msgid "modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer" +msgstr "" + +#~ msgid "Toggle App Drawer" +#~ msgstr "Izmjeni izbornik aplikacije" + +#~ msgid "Toggle Navigation" +#~ msgstr "Izmjeni navigaciju" + +#~ msgid "Apps" +#~ msgstr "Apikacije" + +#~ msgid "More " +#~ msgstr "Više " diff --git a/web_responsive/i18n/it.po b/web_responsive/i18n/it.po new file mode 100644 index 0000000..4fb2d15 --- /dev/null +++ b/web_responsive/i18n/it.po @@ -0,0 +1,166 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_responsive +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-03-07 18:45+0000\n" +"Last-Translator: Sergio Zanchetta \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/apps.xml:9 +#, python-format +msgid "#menu_id=#{app.menuID}&action_id=#{app.actionID}" +msgstr "#menu_id=#{app.menuID}&action_id=#{app.actionID}" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:37 +#: code:addons/web_responsive/static/src/xml/menu.xml:40 +#: code:addons/web_responsive/static/src/xml/menu.xml:49 +#: code:addons/web_responsive/static/src/xml/menu.xml:52 +#, python-format +msgid "Alt" +msgstr "" + +#. module: web_responsive +#: model:ir.model.fields,field_description:web_responsive.field_res_users__chatter_position +msgid "Chatter Position" +msgstr "Posizione chat" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:18 +#, python-format +msgid "Close" +msgstr "Chiudi" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:40 +#: code:addons/web_responsive/static/src/xml/menu.xml:52 +#, python-format +msgid "Control" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:57 +#: code:addons/web_responsive/static/src/xml/form_view.xml:96 +#, python-format +msgid "Create" +msgstr "Crea" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:71 +#: code:addons/web_responsive/static/src/xml/form_view.xml:110 +#, python-format +msgid "Discard" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:50 +#, python-format +msgid "Edit" +msgstr "Modifica" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:16 +#, python-format +msgid "Maximize" +msgstr "Massimizza" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:17 +#, python-format +msgid "Minimize" +msgstr "Minimizza" + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Normal" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:27 +#, python-format +msgid "Quick actions" +msgstr "Azioni rapide" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:64 +#: code:addons/web_responsive/static/src/xml/form_view.xml:103 +#, python-format +msgid "Save" +msgstr "Salva" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/apps.xml:35 +#, python-format +msgid "Search menus..." +msgstr "Ricerca menù..." + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:35 +#, python-format +msgid "Select menu" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:29 +#: code:addons/web_responsive/static/src/xml/menu.xml:37 +#: code:addons/web_responsive/static/src/xml/menu.xml:49 +#, python-format +msgid "Shift" +msgstr "" + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Sided" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:47 +#, python-format +msgid "User menu" +msgstr "" + +#. module: web_responsive +#: model:ir.model,name:web_responsive.model_res_users +msgid "Users" +msgstr "Utenti" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:9 +#, python-format +msgid "false" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:8 +#, python-format +msgid "modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer" +msgstr "" +"modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer" diff --git a/web_responsive/i18n/pt.po b/web_responsive/i18n/pt.po new file mode 100644 index 0000000..0a0bedc --- /dev/null +++ b/web_responsive/i18n/pt.po @@ -0,0 +1,165 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_responsive +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2019-08-12 11:44+0000\n" +"Last-Translator: Pedro Castro Silva \n" +"Language-Team: none\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 3.7.1\n" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/apps.xml:9 +#, python-format +msgid "#menu_id=#{app.menuID}&action_id=#{app.actionID}" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:37 +#: code:addons/web_responsive/static/src/xml/menu.xml:40 +#: code:addons/web_responsive/static/src/xml/menu.xml:49 +#: code:addons/web_responsive/static/src/xml/menu.xml:52 +#, python-format +msgid "Alt" +msgstr "" + +#. module: web_responsive +#: model:ir.model.fields,field_description:web_responsive.field_res_users__chatter_position +msgid "Chatter Position" +msgstr "Posição do Chatter" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:18 +#, python-format +msgid "Close" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:40 +#: code:addons/web_responsive/static/src/xml/menu.xml:52 +#, python-format +msgid "Control" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:57 +#: code:addons/web_responsive/static/src/xml/form_view.xml:96 +#, python-format +msgid "Create" +msgstr "Criar" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:71 +#: code:addons/web_responsive/static/src/xml/form_view.xml:110 +#, python-format +msgid "Discard" +msgstr "Descartar" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:50 +#, python-format +msgid "Edit" +msgstr "Editar" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:16 +#, python-format +msgid "Maximize" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:17 +#, python-format +msgid "Minimize" +msgstr "" + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Normal" +msgstr "Normal" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:27 +#, python-format +msgid "Quick actions" +msgstr "Ações rápidas" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:64 +#: code:addons/web_responsive/static/src/xml/form_view.xml:103 +#, python-format +msgid "Save" +msgstr "Gravar" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/apps.xml:35 +#, python-format +msgid "Search menus..." +msgstr "Procurar menus..." + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:35 +#, python-format +msgid "Select menu" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:29 +#: code:addons/web_responsive/static/src/xml/menu.xml:37 +#: code:addons/web_responsive/static/src/xml/menu.xml:49 +#, python-format +msgid "Shift" +msgstr "" + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Sided" +msgstr "Lateralizado" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:47 +#, python-format +msgid "User menu" +msgstr "" + +#. module: web_responsive +#: model:ir.model,name:web_responsive.model_res_users +msgid "Users" +msgstr "Utilizadores" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:9 +#, python-format +msgid "false" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:8 +#, python-format +msgid "modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer" +msgstr "" diff --git a/web_responsive/i18n/pt_BR.po b/web_responsive/i18n/pt_BR.po new file mode 100644 index 0000000..ae08c7c --- /dev/null +++ b/web_responsive/i18n/pt_BR.po @@ -0,0 +1,184 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_responsive +# +# Translators: +# Rodrigo de Almeida Sottomaior Macedo , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-06-22 08:27+0000\n" +"PO-Revision-Date: 2019-08-30 15:23+0000\n" +"Last-Translator: Rodrigo Macedo \n" +"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/" +"teams/23907/pt_BR/)\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 3.8\n" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/apps.xml:9 +#, python-format +msgid "#menu_id=#{app.menuID}&action_id=#{app.actionID}" +msgstr "#menu_id=#{app.menuID}&action_id=#{app.actionID}" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:37 +#: code:addons/web_responsive/static/src/xml/menu.xml:40 +#: code:addons/web_responsive/static/src/xml/menu.xml:49 +#: code:addons/web_responsive/static/src/xml/menu.xml:52 +#, python-format +msgid "Alt" +msgstr "" + +#. module: web_responsive +#: model:ir.model.fields,field_description:web_responsive.field_res_users__chatter_position +msgid "Chatter Position" +msgstr "Posição do Chatter" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:18 +#, python-format +msgid "Close" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:40 +#: code:addons/web_responsive/static/src/xml/menu.xml:52 +#, python-format +msgid "Control" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:57 +#: code:addons/web_responsive/static/src/xml/form_view.xml:96 +#, python-format +msgid "Create" +msgstr "Criar" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:71 +#: code:addons/web_responsive/static/src/xml/form_view.xml:110 +#, python-format +msgid "Discard" +msgstr "Descartar" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:50 +#, python-format +msgid "Edit" +msgstr "Editar" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:16 +#, python-format +msgid "Maximize" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:17 +#, python-format +msgid "Minimize" +msgstr "" + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Normal" +msgstr "Normal" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:27 +#, python-format +msgid "Quick actions" +msgstr "Ações rápidas" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:64 +#: code:addons/web_responsive/static/src/xml/form_view.xml:103 +#, python-format +msgid "Save" +msgstr "Salvar" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/apps.xml:35 +#, python-format +msgid "Search menus..." +msgstr "Pesquisar menus..." + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:35 +#, python-format +msgid "Select menu" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:29 +#: code:addons/web_responsive/static/src/xml/menu.xml:37 +#: code:addons/web_responsive/static/src/xml/menu.xml:49 +#, python-format +msgid "Shift" +msgstr "" + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Sided" +msgstr "Frente e verso" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:47 +#, python-format +msgid "User menu" +msgstr "" + +#. module: web_responsive +#: model:ir.model,name:web_responsive.model_res_users +msgid "Users" +msgstr "Usuários" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:9 +#, python-format +msgid "false" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:8 +#, python-format +msgid "modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer" +msgstr "" + +#~ msgid "Toggle App Drawer" +#~ msgstr "Aplicativo Desenhador Alternativo" + +#~ msgid "Toggle Navigation" +#~ msgstr "Navegação Alternativa" + +#~ msgid "Apps" +#~ msgstr "Aplicativos" + +#~ msgid "HTTP routing" +#~ msgstr "roteamento HTTP" + +#~ msgid "More " +#~ msgstr "Mais " diff --git a/web_responsive/i18n/zh_CN.po b/web_responsive/i18n/zh_CN.po new file mode 100644 index 0000000..fbabdad --- /dev/null +++ b/web_responsive/i18n/zh_CN.po @@ -0,0 +1,165 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_responsive +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2019-09-01 12:52+0000\n" +"Last-Translator: 黎伟杰 <674416404@qq.com>\n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 3.8\n" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/apps.xml:9 +#, python-format +msgid "#menu_id=#{app.menuID}&action_id=#{app.actionID}" +msgstr "#menu_id=#{app.menuID}&action_id=#{app.actionID}" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:37 +#: code:addons/web_responsive/static/src/xml/menu.xml:40 +#: code:addons/web_responsive/static/src/xml/menu.xml:49 +#: code:addons/web_responsive/static/src/xml/menu.xml:52 +#, python-format +msgid "Alt" +msgstr "" + +#. module: web_responsive +#: model:ir.model.fields,field_description:web_responsive.field_res_users__chatter_position +msgid "Chatter Position" +msgstr "聊天位置" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:18 +#, python-format +msgid "Close" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:40 +#: code:addons/web_responsive/static/src/xml/menu.xml:52 +#, python-format +msgid "Control" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:57 +#: code:addons/web_responsive/static/src/xml/form_view.xml:96 +#, python-format +msgid "Create" +msgstr "创建" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:71 +#: code:addons/web_responsive/static/src/xml/form_view.xml:110 +#, python-format +msgid "Discard" +msgstr "丢弃" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:50 +#, python-format +msgid "Edit" +msgstr "编辑" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:16 +#, python-format +msgid "Maximize" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:17 +#, python-format +msgid "Minimize" +msgstr "" + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Normal" +msgstr "正常" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:27 +#, python-format +msgid "Quick actions" +msgstr "快捷方式" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/form_view.xml:64 +#: code:addons/web_responsive/static/src/xml/form_view.xml:103 +#, python-format +msgid "Save" +msgstr "保存" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/apps.xml:35 +#, python-format +msgid "Search menus..." +msgstr "搜索菜单..." + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:35 +#, python-format +msgid "Select menu" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:29 +#: code:addons/web_responsive/static/src/xml/menu.xml:37 +#: code:addons/web_responsive/static/src/xml/menu.xml:49 +#, python-format +msgid "Shift" +msgstr "" + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Sided" +msgstr "侧面" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/menu.xml:47 +#, python-format +msgid "User menu" +msgstr "" + +#. module: web_responsive +#: model:ir.model,name:web_responsive.model_res_users +msgid "Users" +msgstr "用户" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:9 +#, python-format +msgid "false" +msgstr "" + +#. module: web_responsive +#. openerp-web +#: code:addons/web_responsive/static/src/xml/document_viewer.xml:8 +#, python-format +msgid "modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer" +msgstr "" diff --git a/web_responsive/models/__init__.py b/web_responsive/models/__init__.py new file mode 100644 index 0000000..8835165 --- /dev/null +++ b/web_responsive/models/__init__.py @@ -0,0 +1 @@ +from . import res_users diff --git a/web_responsive/models/res_users.py b/web_responsive/models/res_users.py new file mode 100644 index 0000000..7b80a97 --- /dev/null +++ b/web_responsive/models/res_users.py @@ -0,0 +1,26 @@ +# Copyright 2018 Alexandre Díaz +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import models, fields + + +class ResUsers(models.Model): + _inherit = 'res.users' + + chatter_position = fields.Selection([ + ('normal', 'Normal'), + ('sided', 'Sided'), + ], string="Chatter Position", default='normal') + + def __init__(self, pool, cr): + """ Override of __init__ to add access rights. + Access rights are disabled by default, but allowed on some specific + fields defined in self.SELF_{READ/WRITE}ABLE_FIELDS. + """ + super(ResUsers, self).__init__(pool, cr) + # duplicate list to avoid modifying the original reference + type(self).SELF_WRITEABLE_FIELDS = list(self.SELF_WRITEABLE_FIELDS) + type(self).SELF_WRITEABLE_FIELDS.extend(['chatter_position']) + # duplicate list to avoid modifying the original reference + type(self).SELF_READABLE_FIELDS = list(self.SELF_READABLE_FIELDS) + type(self).SELF_READABLE_FIELDS.extend(['chatter_position']) diff --git a/web_responsive/readme/CONTRIBUTORS.rst b/web_responsive/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..d46ef94 --- /dev/null +++ b/web_responsive/readme/CONTRIBUTORS.rst @@ -0,0 +1,6 @@ +* Dave Lasley +* Jairo Llopis +* Dennis Sluijk +* Sergio Teruel +* Alexandre Díaz +* Mathias Markl diff --git a/web_responsive/readme/DESCRIPTION.rst b/web_responsive/readme/DESCRIPTION.rst new file mode 100644 index 0000000..26ab984 --- /dev/null +++ b/web_responsive/readme/DESCRIPTION.rst @@ -0,0 +1,87 @@ +This module adds responsiveness to web backend. + +Features for all devices: + +* New navigation with an app drawer + + .. image:: https://user-images.githubusercontent.com/973709/48417193-09a1e080-e74a-11e8-8a0c-e73eb689b2fb.gif + +* Quick menu search from the app drawer + + .. image:: https://user-images.githubusercontent.com/973709/48417213-17576600-e74a-11e8-846a-57691e82636b.gif + +Features for mobile: + +* App-specific submenus are shown on full screen when toggling them from the + "hamburger" menu + + .. image:: https://user-images.githubusercontent.com/973709/48417297-51286c80-e74a-11e8-9a47-22c810b18c43.gif + +* View type picker dropdown displays confortably + + .. image:: https://user-images.githubusercontent.com/973709/50964322-e3d55580-14c6-11e9-8249-48db9539600f.gif + +* Top app bar is always visible, but the control panel is hidden when + scrolling down, to save some vaulable vertical space + + .. image:: https://user-images.githubusercontent.com/973709/50964496-5cd4ad00-14c7-11e9-9261-fd223a329d02.gif + +* Form status bar action and status buttons are collapsed in dropdowns. + Other control panel buttons use icons to save space. + + .. image:: https://user-images.githubusercontent.com/973709/50965446-e08f9900-14c9-11e9-92d6-dda472cb6557.gif + +* Breadcrumbs navigation is collapsed with a "back arrow" button. + + .. image:: https://user-images.githubusercontent.com/973709/50965168-1d0ec500-14c9-11e9-82a0-dfee82ed0861.gif + +Features for computers: + +* Keyboard shortcuts for easier navigation, **using ``Alt + Shift + [key]``** + combination instead of just ``Alt + [key]``. + See https://github.com/odoo/odoo/issues/30068 to understand why. + + .. image:: https://user-images.githubusercontent.com/973709/48417578-ff341680-e74a-11e8-8881-017709e912bc.png + + +* Autofocus on search menu box when opening the drawer + + .. image:: https://user-images.githubusercontent.com/973709/48417213-17576600-e74a-11e8-846a-57691e82636b.gif + +* Set chatter on the side of the screen, optional per user + + .. image:: https://user-images.githubusercontent.com/973709/48417270-41108d00-e74a-11e8-9172-cba825d027ed.gif + +* Full width form sheets + + .. image:: https://user-images.githubusercontent.com/973709/48417428-ac5a5f00-e74a-11e8-8839-5bc538c54c1d.png + +* Sticky chatter topbar + + .. image:: ../static/img/chatter_topbar.gif + +* AppMenu waits for action finished to show the view + + .. image:: ../static/img/appmenu.gif + +* Sticky header & footer in list view + + .. image:: ../static/img/listview.gif + +* Sticky statusbar in form view + + .. image:: ../static/img/formview.gif + +* Followers and send button is displayed on mobile. Avatar is hidden. + + .. image:: ../static/img/chatter.gif + +* When the chatter is configured on the side part, the document viewer fills that + part for side-by-side reading instead of full screen. You can still put it on full + width preview clicking on the new maximize button. + + .. image:: ../static/img/document_viewer.gif + +* Bigger checkboxes in list view + + .. image:: ../static/img/big_checkboxes.gif diff --git a/web_responsive/readme/ROADMAP.rst b/web_responsive/readme/ROADMAP.rst new file mode 100644 index 0000000..f6a669c --- /dev/null +++ b/web_responsive/readme/ROADMAP.rst @@ -0,0 +1,7 @@ +* To view the full experience in a device, the page must be loaded with the + device screen size. This means that, if you change the size of your browser, + you should reload the web client to get the full experience for that + new size. This is Odoo's own limitation. +* App navigation with keyboard. +* Make it more beautiful. Maybe OCA-branded? +* Handle long titles on forms in a better way diff --git a/web_responsive/readme/USAGE.rst b/web_responsive/readme/USAGE.rst new file mode 100644 index 0000000..d340c78 --- /dev/null +++ b/web_responsive/readme/USAGE.rst @@ -0,0 +1,9 @@ +The following keyboard shortcuts are implemented: + +* Toggle app drawer - ``Alt + Shift + A`` +* Navigate app search results - Arrow keys +* Choose app result - ``Enter`` +* ``Esc`` to close app drawer + + +Also you can access to the user menu, with ``Alt + Shift + U`` diff --git a/web_responsive/static/description/icon.png b/web_responsive/static/description/icon.png new file mode 100644 index 0000000..3a0328b Binary files /dev/null and b/web_responsive/static/description/icon.png differ diff --git a/web_responsive/static/description/index.html b/web_responsive/static/description/index.html new file mode 100644 index 0000000..be3f331 --- /dev/null +++ b/web_responsive/static/description/index.html @@ -0,0 +1,521 @@ + + + + + + +Web Responsive + + + +
+

Web Responsive

+ + +

Beta License: LGPL-3 OCA/web Translate me on Weblate Try me on Runbot

+

This module adds responsiveness to web backend.

+

Features for all devices:

+
    +
  • New navigation with an app drawer

    +https://user-images.githubusercontent.com/973709/48417193-09a1e080-e74a-11e8-8a0c-e73eb689b2fb.gif +
  • +
  • Quick menu search from the app drawer

    +https://user-images.githubusercontent.com/973709/48417213-17576600-e74a-11e8-846a-57691e82636b.gif +
  • +
+

Features for mobile:

+
    +
  • App-specific submenus are shown on full screen when toggling them from the +“hamburger” menu

    +https://user-images.githubusercontent.com/973709/48417297-51286c80-e74a-11e8-9a47-22c810b18c43.gif +
  • +
  • View type picker dropdown displays confortably

    +https://user-images.githubusercontent.com/973709/50964322-e3d55580-14c6-11e9-8249-48db9539600f.gif +
  • +
  • Top app bar is always visible, but the control panel is hidden when +scrolling down, to save some vaulable vertical space

    +https://user-images.githubusercontent.com/973709/50964496-5cd4ad00-14c7-11e9-9261-fd223a329d02.gif +
  • +
  • Form status bar action and status buttons are collapsed in dropdowns. +Other control panel buttons use icons to save space.

    +https://user-images.githubusercontent.com/973709/50965446-e08f9900-14c9-11e9-92d6-dda472cb6557.gif +
  • +
  • Breadcrumbs navigation is collapsed with a “back arrow” button.

    +https://user-images.githubusercontent.com/973709/50965168-1d0ec500-14c9-11e9-82a0-dfee82ed0861.gif +
  • +
+

Features for computers:

+
    +
  • Keyboard shortcuts for easier navigation, using ``Alt + Shift + [key]`` +combination instead of just Alt + [key]. +See https://github.com/odoo/odoo/issues/30068 to understand why.

    +https://user-images.githubusercontent.com/973709/48417578-ff341680-e74a-11e8-8881-017709e912bc.png +
  • +
  • Autofocus on search menu box when opening the drawer

    +https://user-images.githubusercontent.com/973709/48417213-17576600-e74a-11e8-846a-57691e82636b.gif +
  • +
  • Set chatter on the side of the screen, optional per user

    +https://user-images.githubusercontent.com/973709/48417270-41108d00-e74a-11e8-9172-cba825d027ed.gif +
  • +
  • Full width form sheets

    +https://user-images.githubusercontent.com/973709/48417428-ac5a5f00-e74a-11e8-8839-5bc538c54c1d.png +
  • +
  • Sticky chatter topbar

    +https://raw.githubusercontent.com/OCA/web/12.0/web_responsive/static/img/chatter_topbar.gif +
  • +
  • AppMenu waits for action finished to show the view

    +https://raw.githubusercontent.com/OCA/web/12.0/web_responsive/static/img/appmenu.gif +
  • +
  • Sticky header & footer in list view

    +https://raw.githubusercontent.com/OCA/web/12.0/web_responsive/static/img/listview.gif +
  • +
  • Sticky statusbar in form view

    +https://raw.githubusercontent.com/OCA/web/12.0/web_responsive/static/img/formview.gif +
  • +
  • Followers and send button is displayed on mobile. Avatar is hidden.

    +https://raw.githubusercontent.com/OCA/web/12.0/web_responsive/static/img/chatter.gif +
  • +
  • When the chatter is configured on the side part, the document viewer fills that +part for side-by-side reading instead of full screen. You can still put it on full +width preview clicking on the new maximize button.

    +https://raw.githubusercontent.com/OCA/web/12.0/web_responsive/static/img/document_viewer.gif +
  • +
  • Bigger checkboxes in list view

    +https://raw.githubusercontent.com/OCA/web/12.0/web_responsive/static/img/big_checkboxes.gif +
  • +
+

Table of contents

+ +
+

Usage

+

The following keyboard shortcuts are implemented:

+
    +
  • Toggle app drawer - Alt + Shift + A
  • +
  • Navigate app search results - Arrow keys
  • +
  • Choose app result - Enter
  • +
  • Esc to close app drawer
  • +
+

Also you can access to the user menu, with Alt + Shift + U

+
+
+

Known issues / Roadmap

+
    +
  • To view the full experience in a device, the page must be loaded with the +device screen size. This means that, if you change the size of your browser, +you should reload the web client to get the full experience for that +new size. This is Odoo’s own limitation.
  • +
  • App navigation with keyboard.
  • +
  • Make it more beautiful. Maybe OCA-branded?
  • +
  • Handle long titles on forms in a better way
  • +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub 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.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • LasLabs
  • +
  • Tecnativa
  • +
  • Alexandre Díaz
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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/web project on GitHub.

+

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

+
+
+
+ + diff --git a/web_responsive/static/img/appmenu.gif b/web_responsive/static/img/appmenu.gif new file mode 100644 index 0000000..411937b Binary files /dev/null and b/web_responsive/static/img/appmenu.gif differ diff --git a/web_responsive/static/img/big_checkboxes.gif b/web_responsive/static/img/big_checkboxes.gif new file mode 100644 index 0000000..a346920 Binary files /dev/null and b/web_responsive/static/img/big_checkboxes.gif differ diff --git a/web_responsive/static/img/chatter.gif b/web_responsive/static/img/chatter.gif new file mode 100644 index 0000000..0a2af93 Binary files /dev/null and b/web_responsive/static/img/chatter.gif differ diff --git a/web_responsive/static/img/chatter_topbar.gif b/web_responsive/static/img/chatter_topbar.gif new file mode 100644 index 0000000..e0522c5 Binary files /dev/null and b/web_responsive/static/img/chatter_topbar.gif differ diff --git a/web_responsive/static/img/document_viewer.gif b/web_responsive/static/img/document_viewer.gif new file mode 100644 index 0000000..70b0cb8 Binary files /dev/null and b/web_responsive/static/img/document_viewer.gif differ diff --git a/web_responsive/static/img/formview.gif b/web_responsive/static/img/formview.gif new file mode 100644 index 0000000..688bbc9 Binary files /dev/null and b/web_responsive/static/img/formview.gif differ diff --git a/web_responsive/static/img/listview.gif b/web_responsive/static/img/listview.gif new file mode 100644 index 0000000..ebdcac8 Binary files /dev/null and b/web_responsive/static/img/listview.gif differ diff --git a/web_responsive/static/src/css/web_responsive.scss b/web_responsive/static/src/css/web_responsive.scss new file mode 100644 index 0000000..4c16341 --- /dev/null +++ b/web_responsive/static/src/css/web_responsive.scss @@ -0,0 +1,763 @@ +/* Copyright 2018 Tecnativa - Jairo Llopis + * License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */ + +$chatter_zone_width: 35%; + +@mixin full-screen-dropdown { + border: none; + box-shadow: none; + display: flex; + flex-direction: column; + height: calc(100vh - #{$o-navbar-height}); + max-height: calc(100vh - #{$o-navbar-height}); + position: fixed; + width: 100vw; + z-index: 100; + // Inline style will override our `top`, so we need !important here + top: $o-navbar-height !important; + transform: none !important; +} + +// Support for long titles +@include media-breakpoint-up(md) { + .o_form_view .oe_button_box + .oe_title, + .o_form_view .oe_button_box + .oe_avatar + .oe_title { + /* Button-box has a hardcoded width of 132px per button and have three columns */ + width: calc(100% - 450px); + } +} + +// Main navbar (with apps menu, user menu, debug menu...) +@include media-breakpoint-down(sm) { + .o_main_navbar { + // This allows to have a sane layout for mobiles + display: flex; + + // Remove clutter to only have small icons that fit in a small screen + > .dropdown { + display: flex; + + .navbar-toggler { + color: white; + } + + .o_menu_sections, + .o_menu_systray, + { + padding: 0; + } + } + + // Whitespace before systray icons + .o_menu_systray { + margin-left: auto; + } + + // Hide big things + .o_menu_brand, + .o_menu_sections, + .oe_topbar_name, + { + display: none; + } + + // Fix toggler button padding + .o-menu-toggle { + cursor: pointer; + padding: 0 $o-horizontal-padding; + } + + // Custom fullscreen layout when showing submenus + .o_menu_sections.show { + @include full-screen-dropdown(); + background-color: $dropdown-bg; + overflow: auto; + + .show { + display: flex; + flex-direction: column; + + .dropdown-menu { + margin-left: 1rem; + min-width: auto; + width: calc(100vw - 2rem); + } + } + + > li, + .o_menu_entry_lvl_1, + .o_menu_header_lvl_1, + { + // Homogeneous background color + background-color: $dropdown-bg; + color: $dropdown-link-color; + + &:hover { + background-color: $dropdown-link-hover-bg; + color: $dropdown-link-hover-color; + } + + // Disable the .o-no-caret class effect, to display the caret + &.o-no-caret::after { + content: ""; + } + + // Fix a strange glitch leaving headers invisible + .dropdown-header { + color: $dropdown-header-color; + } + } + } + + // Custom fullscreen layout for systray items + .o_mail_systray_dropdown.show { + @include full-screen-dropdown(); + + // Fix stretchy images + .o_mail_preview_image { + align-items: center; + display: flex; + flex-direction: row; + + img { + display: block; + height: auto; + } + } + } + + // Higher height for dropdown items, for those with sausage fingers + .dropdown-menu .dropdown-item { + padding: { + bottom: 0.5rem; + top: 0.5rem; + } + } + } +} + +// Iconized full screen apps menu +.o_menu_apps { + + .search-input:focus { + border-color: $o-brand-primary; + } + + .dropdown-menu.show { + @include full-screen-dropdown(); + + // Display apps in a grid + align-content: flex-start; + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: flex-start; + + @include media-breakpoint-up(lg) { + padding: { + left: 20vw; + right: 20vw; + } + } + + .o_app { + align-items: center; + display: flex; + flex-direction: column; + justify-content: flex-start; + + // Size depends on screen + width: 33.33333333%; + @include media-breakpoint-up(sm) { + width: 25%; + } + @include media-breakpoint-up(md) { + width: 16.6666666%; + } + } + + // Hide app icons when searching + .has-results ~ .o_app { + display: none; + } + + .o-app-icon { + height: auto; + max-width: 7rem; + } + + // Search input for menus + .form-row { + width: 100%; + } + + .o-menu-search-result { + align-items: center; + background-position: left; + background-repeat: no-repeat; + background-size: contain; + cursor: pointer; + display: flex; + padding-left: 3rem; + white-space: normal; + } + + // Allow to scroll only on results, keeping static search box above + .search-container.has-results { + height: 100%; + + .search-input { + height: 3em; + } + + .search-results { + height: calc(100% - 3em); + overflow: auto; + } + } + } +} + +// Scroll all but top bar +html .o_web_client .o_main .o_main_content { + @include media-breakpoint-down(sm) { + overflow: auto; + + .o_content { + overflow: initial; + } + } + + max-width: 100%; +} + +// Control panel (breadcrumbs, search box, buttons...) +.o_control_panel { + .o_search_options { + flex-grow: 1; + + > div { + width: 100%; + + + > .btn-group { + max-width: 33%; + + .o_dropdown_toggler_btn { + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + } + } + } + } + + .o_filters_menu { + .o_menu_item { + @include o-search-options-dropdown-custom-item; + + a { + overflow: hidden; + text-overflow: ellipsis; + } + } + } +} + +.o_pager_counter { + white-space: nowrap; +} + +@include media-breakpoint-down(sm) { + .o_control_panel { + // Arrange buttons to use space better + .breadcrumb, + .o_cp_buttons, + .o_cp_left, + .o_cp_right, + .o_cp_searchview, + { + flex: 1 1 100%; + @include media-breakpoint-up(md) { + flex-basis: 50%; + } + } + + .breadcrumb { + flex-basis: 80%; + } + + .o_cp_searchview, + .o_cp_right, + { + flex-basis: 10%; + } + + .o_cp_left { + flex-basis: 50%; + white-space: nowrap; + } + + .o_cp_pager { + white-space: nowrap; + } + + // Hide all but 2 last breadcrumbs, and render 2nd-to-last as arrow + .breadcrumb-item { + &:not(.active) { + padding-left: 0; + } + + &::before { + content: none; + padding-right: 0; + } + + &:nth-last-of-type(1n+3) { + display: none; + } + + &:nth-last-of-type(2) { + &::before { + color: var(--primary); + content: "\f048"; // .fa-step-backward + cursor: pointer; + font-family: FontAwesome; + } + + a { + display: none; + } + } + } + + // Ellipsize long breadcrumbs + .breadcrumb { + max-width: 100%; + text-overflow: ellipsis; + } + + // Empty sidebar should not break layout + .o_cp_sidebar:blank { + display: none; + } + + // In case you install `mail`, there is a mess on BS vs inline styles + // we need to fix + .o_cp_buttons .btn.d-block:not(.d-none) { + display: inline-block !important; + } + + // Dropdown with buttons to switch the view type + .o_cp_switch_buttons.show { + .dropdown-menu { + align-content: center; + display: flex; + flex-direction: row; + justify-content: space-around; + padding: 0; + + .btn { + border: { + bottom: 0; + radius: 0; + top: 0; + } + } + } + } + } +} + +// Normal views +.o_content, .modal-content { + max-width: 100%; + + // Form views + .o_form_view { + .o_form_sheet { + max-width: calc(100% - 32px); + overflow-x: auto; + + .oe_button_box { + .o_dropdown_more { + padding: 0.1em; + width: min-content; + } + } + } + + // Sticky statusbar + .o_form_statusbar { + position: sticky; + top: 0; + z-index: 2; + } + + // Support for long title (with ellipsis) + .oe_title { + span.o_field_widget { + &:not(.oe_inline) { + max-width: 100%; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + width: initial; + + &:active { + white-space: normal; + } + } + } + } + + @include media-breakpoint-down(sm) { + min-width: auto; + + // Avoid overflow on forms with title and/or button box + .oe_button_box, + .oe_title, + { + max-width: 100%; + } + + .oe_button_box + .oe_title, + .oe_button_box + .oe_avatar + .oe_title { + width: 100%; + } + + // Avoid overflow on modals + .o_form_sheet { + min-width: auto; + } + + // Render website inputs properly in phones + .o_group .o_field_widget.o_text_overflow { + // Overrides another !important + width: auto !important; + } + + // Make all input groups vertical + .o_group_col_6 { + width: 100%; + } + + // Statusbar buttons dropdown for mobiles + .o_statusbar_buttons_dropdown { + border: { + bottom: 0; + radius: 0; + top: 0; + } + height: 100%; + } + .o_statusbar_buttons > .btn { + border-radius: 0; + border: 0; + width: 100%; + margin-bottom: 0.2rem; + + &:last-child { + margin-bottom: 0; + } + } + + .o_statusbar_status { + // Arrow from rightmost button exceeds allowed width + .o_arrow_button:first-child::before { + content: none; + display: none; + } + } + + // Full width in form sheets + .o_form_sheet, + .oe_chatter, + { + min-width: auto; + max-width: 98%; + } + + // Settings pages + .app_settings_block { + .row { + margin: 0; + } + } + + .o_chatter { + // Display send button on small screens + .o_thread_composer { + padding-left: $o-mail-thread-avatar-size*0.5; + + .o_composer_button_send { + display: initial !important; // Forced in core + } + .o_chatter_avatar { + display: none; + } + } + + .o_chatter_topbar { + height: auto; + flex-wrap: wrap-reverse; + + > .o_topbar_right_area { + flex: 1 0 auto; + flex-wrap: wrap; + max-width: 100%; + + // Display followers on small screens + .o_followers { + display: initial !important; // Forced in core + + @include media-breakpoint-down(xs) { + padding-bottom: 50px; + } + } + } + } + } + } + } + + // Sided chatter, if user wants + .o_chatter_position_sided & { + @include media-breakpoint-up(lg) { + .o_form_view:not(.o_form_nosheet) { + display: flex; + flex-flow: row nowrap; + height: 100%; + + .o_form_sheet_bg { + flex: 1 1 auto; + overflow: auto; + + > .o_form_sheet { + min-width: unset; + + .oe_subtotal_footer .popover { + /* This is an inaccurate workaround for a problem with how Odoo places the popover + * See: https://github.com/odoo/odoo/blob/12.0/addons/account/static/src/js/account_payment_field.js#L83 + */ + position: fixed !important; + top: 11.4em !important; + } + } + } + + .o_chatter { + border-left: 1px solid gray('400'); + flex: 0 0 $chatter_zone_width; + max-width: initial; + min-width: initial; + overflow: auto; + + .o_chatter_header_container { + padding-top: $grid-gutter-width * 0.5; + top: 0; + position: sticky; + background-color: $o-view-background-color; + z-index: 1; + + .o_chatter_topbar { + margin-top: 0; + flex-wrap: wrap; + height: auto; + button:last-of-type { + flex: 1 0 auto; + text-align: left; + } + + .o_topbar_right_area { + order: -10; + flex: 0 1 100%; + border-bottom-color: transparent; + } + } + + // Scrollable input text to avoid hide conversation & buttons + .o_composer_text_field { + max-height: 120px; + overflow-y: auto !important; /* Forced because Odoo uses inline style */ + } + .o_attachments_list { + overflow: auto; + max-height: $o-mail-attachment-image-size * 3; + margin-top: 0.4em; + } + .o_attachments_previews { + overflow: auto; + max-height: $o-mail-attachment-image-size * 6; + } + } + } + } + } + } +} + +// Sticky Header & Footer in List View +.table-responsive { + overflow-x: initial; + + .o_list_view { + // th & td are here for compatibility with chrome + thead, thead tr:nth-child(1) th { + position: sticky; + top: 0; + z-index: 1; + } + thead tr:nth-child(1) th { + background-color: $o-list-footer-bg-color; + } + tfoot, tfoot tr:nth-child(1) td { + position: sticky; + bottom: 0; + } + tfoot tr:nth-child(1) td { + background-color: $o-list-footer-bg-color; + } + } +} + +// Big checkboxes +.o_list_view { + .o_list_record_selector { + .custom-checkbox { + margin-right: 10px; + .custom-control-label { + top: -19px; + } + } + } + .o_data_cell:not(.o_boolean_toggle_cell) { + .custom-checkbox .custom-control-label { + top: -6px; + } + } + .custom-checkbox { + margin-right: 10px; + + .custom-control-label { + &::after { + width: 24px; + height: 24px; + } + &::before { + outline: none !important; + border: 1px solid #4c4c4c; + width: 24px; + height: 24px; + } + } + } +} + +// Waiting Cursor +.oe_wait { + cursor: progress; +} + +// Document Viewer +.o_web_client.o_chatter_position_sided { + .o_modal_fullscreen.o_document_viewer { + // On-top of navbar + z-index: 10; + + &.o_responsive_document_viewer { + /* Show sided viewer on large screens */ + @include media-breakpoint-up(lg) { + width: $chatter_zone_width; + margin-left: auto; + + /* Show/Hide control buttons (next, prev, etc..) */ + &:hover .arrow, &:hover .o_viewer_toolbar { + display: unset; + } + .arrow, .o_viewer_toolbar { + display: none; + } + + .o_viewer_img_wrapper { + position: relative; + + .o_viewer_pdf { + width: 95%; + } + } + } + + .o_minimize_btn { + display: none; + } + } + &:not(.o_responsive_document_viewer) { + .o_maximize_btn { + display: none; + } + } + @include media-breakpoint-down(lg) { + .o_minimize_btn, .o_maximize_btn { + display: none; + } + } + } +} +/* Max/Min buttons only are usefull in sided mode */ +.o_web_client:not(.o_chatter_position_sided) { + .o_minimize_btn, .o_maximize_btn { + display: none; + } +} +// Apply improvements for Document Viewer on all modes +.o_modal_fullscreen .o_viewer_content { + .o_viewer-header { + .o_image_caption { + display: contents; + + .o_split_pdf_area { + padding: 16px; + margin-bottom: 0; + position: relative; + top: -5px; + + label { + margin-bottom: unset; + } + + .o_page_number_input { + border: 1px solid white; + border-radius: 3px; + } + } + + /* Hide 'split pdf' feature on small screens */ + @include media-breakpoint-down(xs) { + .o_split_pdf_area { + display: none; + } + } + } + + // Now uses a container to have more buttons + .o_buttons { + min-width: 35px; + text-align: right; + + // Now close button ('X') it's a fa-icon + > .o_close_btn { + top: unset; + left: unset; + bottom: unset; + right: unset; + font-size: unset; + font-weight: unset; + } + } + } + + .o_viewer_toolbar { + width: max-content; + } +} diff --git a/web_responsive/static/src/js/web_responsive.js b/web_responsive/static/src/js/web_responsive.js new file mode 100644 index 0000000..2611f12 --- /dev/null +++ b/web_responsive/static/src/js/web_responsive.js @@ -0,0 +1,561 @@ +/* Copyright 2018 Tecnativa - Jairo Llopis + * License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */ + +odoo.define('web_responsive', function (require) { + 'use strict'; + + var ActionManager = require('web.ActionManager'); + var AbstractWebClient = require("web.AbstractWebClient"); + var AppsMenu = require("web.AppsMenu"); + var BasicController = require('web.BasicController'); + var config = require("web.config"); + var core = require("web.core"); + var FormRenderer = require('web.FormRenderer'); + var Menu = require("web.Menu"); + var RelationalFields = require('web.relational_fields'); + var Chatter = require('mail.Chatter'); + var DocumentViewer = require('mail.DocumentViewer'); + var ListRenderer = require('web.ListRenderer'); + + + /* Hide AppDrawer in desktop and mobile modes. + * To avoid delays in pages with a lot of DOM nodes we make + * sub-groups' with 'querySelector' to improve the performance. + */ + function closeAppDrawer () { + _.defer(function () { + // Need close AppDrawer? + var menu_apps_dropdown = document.querySelector( + '.o_menu_apps .dropdown'); + $(menu_apps_dropdown).has('.dropdown-menu.show') + .find('> a').dropdown('toggle'); + // Need close Sections Menu? + // TODO: Change to 'hide' in modern Bootstrap >4.1 + var menu_sections = document.querySelector( + '.o_menu_sections li.show .dropdown-toggle'); + $(menu_sections).dropdown('toggle'); + // Need close Mobile? + var menu_sections_mobile = document.querySelector( + '.o_menu_sections.show'); + $(menu_sections_mobile).collapse('hide'); + }); + } + + /** + * Reduce menu data to a searchable format understandable by fuzzy.js + * + * `AppsMenu.init()` gets `menuData` in a format similar to this (only + * relevant data is shown): + * + * ```js + * { + * [...], + * children: [ + * // This is a menu entry: + * { + * action: "ir.actions.client,94", // Or `false` + * children: [... similar to above "children" key], + * name: "Actions", + * parent_id: [146, "Settings/Technical/Actions"], // Or `false` + * }, + * ... + * ] + * } + * ``` + * + * This format is very hard to process to search matches, and it would + * slow down the search algorithm, so we reduce it with this method to be + * able to later implement a simpler search. + * + * @param {Object} memo + * Reference to current result object, passed on recursive calls. + * + * @param {Object} menu + * A menu entry, as described above. + * + * @returns {Object} + * Reduced object, without entries that have no action, and with a + * format like this: + * + * ```js + * { + * "Discuss": {Menu entry Object}, + * "Settings": {Menu entry Object}, + * "Settings/Technical/Actions/Actions": {Menu entry Object}, + * ... + * } + * ``` + */ + function findNames (memo, menu) { + if (menu.action) { + var key = menu.parent_id ? menu.parent_id[1] + "/" : ""; + memo[key + menu.name] = menu; + } + if (menu.children.length) { + _.reduce(menu.children, findNames, memo); + } + return memo; + } + + AppsMenu.include({ + events: _.extend({ + "keydown .search-input input": "_searchResultsNavigate", + "input .search-input input": "_searchMenusSchedule", + "click .o-menu-search-result": "_searchResultChosen", + "shown.bs.dropdown": "_searchFocus", + "hidden.bs.dropdown": "_searchReset", + "hide.bs.dropdown": "_hideAppsMenu", + }, AppsMenu.prototype.events), + + /** + * Rescue some menu data stripped out in original method. + * + * @override + */ + init: function (parent, menuData) { + this._super.apply(this, arguments); + // Keep base64 icon for main menus + for (var n in this._apps) { + this._apps[n].web_icon_data = + menuData.children[n].web_icon_data; + } + // Store menu data in a format searchable by fuzzy.js + this._searchableMenus = _.reduce( + menuData.children, + findNames, + {} + ); + // Search only after timeout, for fast typers + this._search_def = $.Deferred(); + }, + + /** + * @override + */ + start: function () { + this.$search_container = this.$(".search-container"); + this.$search_input = this.$(".search-input input"); + this.$search_results = this.$(".search-results"); + return this._super.apply(this, arguments); + }, + + /** + * Prevent the menu from being opened twice + * + * @override + */ + _onAppsMenuItemClicked: function (ev) { + this._super.apply(this, arguments); + ev.preventDefault(); + ev.stopPropagation(); + }, + + /** + * Get all info for a given menu. + * + * @param {String} key + * Full path to requested menu. + * + * @returns {Object} + * Menu definition, plus extra needed keys. + */ + _menuInfo: function (key) { + var original = this._searchableMenus[key]; + return _.extend({ + action_id: parseInt(original.action.split(',')[1], 10), + }, original); + }, + + /** + * Autofocus on search field on big screens. + */ + _searchFocus: function () { + if (!config.device.isMobile) { + this.$search_input.focus(); + } + }, + + /** + * Reset search input and results + */ + _searchReset: function () { + this.$search_container.removeClass("has-results"); + this.$search_results.empty(); + this.$search_input.val(""); + }, + + /** + * Schedule a search on current menu items. + */ + _searchMenusSchedule: function () { + this._search_def.reject(); + this._search_def = $.Deferred(); + setTimeout(this._search_def.resolve.bind(this._search_def), 50); + this._search_def.done(this._searchMenus.bind(this)); + }, + + /** + * Search among available menu items, and render that search. + */ + _searchMenus: function () { + var query = this.$search_input.val(); + if (query === "") { + this.$search_container.removeClass("has-results"); + this.$search_results.empty(); + return; + } + var results = fuzzy.filter( + query, + _.keys(this._searchableMenus), + { + pre: "", + post: "", + } + ); + this.$search_container.toggleClass( + "has-results", + Boolean(results.length) + ); + this.$search_results.html( + core.qweb.render( + "web_responsive.MenuSearchResults", + { + results: results, + widget: this, + } + ) + ); + }, + + /** + * Use chooses a search result, so we navigate to that menu + * + * @param {jQuery.Event} event + */ + _searchResultChosen: function (event) { + event.preventDefault(); + event.stopPropagation(); + var $result = $(event.currentTarget), + text = $result.text().trim(), + data = $result.data(), + suffix = ~text.indexOf("/") ? "/" : ""; + // Load the menu view + this.trigger_up("menu_clicked", { + action_id: data.actionId, + id: data.menuId, + previous_menu_id: data.parentId, + }); + // Find app that owns the chosen menu + var app = _.find(this._apps, function (_app) { + return text.indexOf(_app.name + suffix) === 0; + }); + // Update navbar menus + core.bus.trigger("change_menu_section", app.menuID); + }, + + /** + * Navigate among search results + * + * @param {jQuery.Event} event + */ + _searchResultsNavigate: function (event) { + // Find current results and active element (1st by default) + var all = this.$search_results.find(".o-menu-search-result"), + pre_focused = all.filter(".active") || $(all[0]), + offset = all.index(pre_focused), + key = event.key; + // Keyboard navigation only supports search results + if (!all.length) { + return; + } + // Transform tab presses in arrow presses + if (key === "Tab") { + event.preventDefault(); + key = event.shiftKey ? "ArrowUp" : "ArrowDown"; + } + switch (key) { + // Pressing enter is the same as clicking on the active element + case "Enter": + pre_focused.click(); + break; + // Navigate up or down + case "ArrowUp": + offset--; + break; + case "ArrowDown": + offset++; + break; + default: + // Other keys are useless in this event + return; + } + // Allow looping on results + if (offset < 0) { + offset = all.length + offset; + } else if (offset >= all.length) { + offset -= all.length; + } + // Switch active element + var new_focused = $(all[offset]); + pre_focused.removeClass("active"); + new_focused.addClass("active"); + this.$search_results.scrollTo(new_focused, { + offset: { + top: this.$search_results.height() * -0.5, + }, + }); + }, + + /* + * Control if AppDrawer can be closed + */ + _hideAppsMenu: function () { + return !this.$('input').is(':focus'); + }, + }); + + BasicController.include({ + + /** + * Close the AppDrawer if the data set is dirty and a discard dialog + * is opened + * + * @override + */ + canBeDiscarded: function (recordID) { + if (this.model.isDirty(recordID || this.handle)) { + closeAppDrawer(); + } + return this._super.apply(this, arguments); + }, + }); + + Menu.include({ + events: _.extend({ + // Clicking a hamburger menu item should close the hamburger + "click .o_menu_sections [role=menuitem]": "_onClickMenuItem", + // Opening any dropdown in the navbar should hide the hamburger + "show.bs.dropdown .o_menu_systray, .o_menu_apps": + "_hideMobileSubmenus", + }, Menu.prototype.events), + + start: function () { + this.$menu_toggle = this.$(".o-menu-toggle"); + return this._super.apply(this, arguments); + }, + + /** + * Hide menus for current app if you're in mobile + */ + _hideMobileSubmenus: function () { + if ( + config.device.isMobile && + this.$menu_toggle.is(":visible") && + this.$section_placeholder.is(":visible") + ) { + this.$section_placeholder.collapse("hide"); + } + }, + + /** + * Prevent hide the menu (should be closed when action is loaded) + * + * @param {ClickEvent} ev + */ + _onClickMenuItem: function (ev) { + ev.stopPropagation(); + }, + + /** + * No menu brand in mobiles + * + * @override + */ + _updateMenuBrand: function () { + if (!config.device.isMobile) { + return this._super.apply(this, arguments); + } + }, + }); + + RelationalFields.FieldStatus.include({ + + /** + * Fold all on mobiles. + * + * @override + */ + _setState: function () { + this._super.apply(this, arguments); + if (config.device.isMobile) { + _.map(this.status_information, function (value) { + value.fold = true; + }); + } + }, + }); + + // Responsive view "action" buttons + FormRenderer.include({ + + /** + * In mobiles, put all statusbar buttons in a dropdown. + * + * @override + */ + _renderHeaderButtons: function () { + var $buttons = this._super.apply(this, arguments); + if ( + !config.device.isMobile || + !$buttons.is(":has(>:not(.o_invisible_modifier))") + ) { + return $buttons; + } + + // $buttons must be appended by JS because all events are bound + $buttons.addClass("dropdown-menu"); + var $dropdown = $(core.qweb.render( + 'web_responsive.MenuStatusbarButtons' + )); + $buttons.addClass("dropdown-menu").appendTo($dropdown); + return $dropdown; + }, + }); + + // Chatter Hide Composer + Chatter.include({ + _openComposer: function (options) { + if (this._composer && + options.isLog === this._composer.options.isLog && + this._composer.$el.is(':visible')) { + this._closeComposer(false); + } else { + this._super.apply(this, arguments); + } + }, + }); + + // Hide AppDrawer or Menu when the action has been completed + ActionManager.include({ + + /** + * @override + */ + _appendController: function () { + this._super.apply(this, arguments); + closeAppDrawer(); + }, + }); + + /** + * Use ALT+SHIFT instead of ALT as hotkey triggerer. + * + * HACK https://github.com/odoo/odoo/issues/30068 - See it to know why. + * + * Cannot patch in `KeyboardNavigationMixin` directly because it's a mixin, + * not a `Class`, and altering a mixin's `prototype` doesn't alter it where + * it has already been used. + * + * Instead, we provide an additional mixin to be used wherever you need to + * enable this behavior. + */ + var KeyboardNavigationShiftAltMixin = { + + /** + * Alter the key event to require pressing Shift. + * + * This will produce a mocked event object where it will seem that + * `Alt` is not pressed if `Shift` is not pressed. + * + * The reason for this is that original upstream code, found in + * `KeyboardNavigationMixin` is very hardcoded against the `Alt` key, + * so it is more maintainable to mock its input than to rewrite it + * completely. + * + * @param {keyEvent} keyEvent + * Original event object + * + * @returns {keyEvent} + * Altered event object + */ + _shiftPressed: function (keyEvent) { + var alt = keyEvent.altKey || keyEvent.key === "Alt", + newEvent = _.extend({}, keyEvent), + shift = keyEvent.shiftKey || keyEvent.key === "Shift"; + // Mock event to make it seem like Alt is not pressed + if (alt && !shift) { + newEvent.altKey = false; + if (newEvent.key === "Alt") { + newEvent.key = "Shift"; + } + } + return newEvent; + }, + + _onKeyDown: function (keyDownEvent) { + return this._super(this._shiftPressed(keyDownEvent)); + }, + + _onKeyUp: function (keyUpEvent) { + return this._super(this._shiftPressed(keyUpEvent)); + }, + }; + + // Include the SHIFT+ALT mixin wherever + // `KeyboardNavigationMixin` is used upstream + AbstractWebClient.include(KeyboardNavigationShiftAltMixin); + + // DocumentViewer: Add support to maximize/minimize + DocumentViewer.include({ + // Widget 'keydown' and 'keyup' events are only dispatched when + // this.$el is active, but now the modal have buttons that can obtain + // the focus. For this reason we now listen core events, that are + // dispatched every time. + events: _.extend(_.omit(DocumentViewer.prototype.events, [ + 'keydown', + 'keyup', + ]), { + 'click .o_maximize_btn': '_onClickMaximize', + 'click .o_minimize_btn': '_onClickMinimize', + 'shown.bs.modal': '_onShownModal', + }), + + start: function () { + core.bus.on('keydown', this, this._onKeydown); + core.bus.on('keyup', this, this._onKeyUp); + return this._super.apply(this, arguments); + }, + + destroy: function () { + core.bus.off('keydown', this, this._onKeydown); + core.bus.off('keyup', this, this._onKeyUp); + this._super.apply(this, arguments); + }, + + _onShownModal: function () { + // Disable auto-focus to allow to use controls in edit mode. + // This only affects the active modal. + // More info: https://stackoverflow.com/a/14795256 + $(document).off('focusin.modal'); + }, + _onClickMaximize: function () { + this.$el.removeClass('o_responsive_document_viewer'); + }, + _onClickMinimize: function () { + this.$el.addClass('o_responsive_document_viewer'); + }, + }); + + // List Renderer: Big checkboxes + ListRenderer.include({ + + /** + * @override + */ + _renderSelector: function () { + var $elm = this._super.apply(this, arguments); + $elm.find(".custom-control-label").html(''); + return $elm; + }, + }); +}); diff --git a/web_responsive/static/src/xml/apps.xml b/web_responsive/static/src/xml/apps.xml new file mode 100644 index 0000000..ccde2be --- /dev/null +++ b/web_responsive/static/src/xml/apps.xml @@ -0,0 +1,65 @@ + + + + diff --git a/web_responsive/static/src/xml/document_viewer.xml b/web_responsive/static/src/xml/document_viewer.xml new file mode 100644 index 0000000..ea1fe33 --- /dev/null +++ b/web_responsive/static/src/xml/document_viewer.xml @@ -0,0 +1,22 @@ + + + + diff --git a/web_responsive/static/src/xml/form_view.xml b/web_responsive/static/src/xml/form_view.xml new file mode 100644 index 0000000..33af95a --- /dev/null +++ b/web_responsive/static/src/xml/form_view.xml @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + e + + + + + d + + + + + + + Edit + + + + + + + Create + + + + + + + Save + + + + + + + Discard + + + + + + + + + + + + + + + + + + d + + + + + + + Create + + + + + + + Save + + + + + + + Discard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+ + + + diff --git a/web_responsive/static/src/xml/menu.xml b/web_responsive/static/src/xml/menu.xml new file mode 100644 index 0000000..4a4b8ee --- /dev/null +++ b/web_responsive/static/src/xml/menu.xml @@ -0,0 +1,58 @@ + + + + + + u + + + +
+ + + e + + + e + + + + + d + + + d + + + + + + Shift + + + + + + Select menu + + Alt + Shift + a + + + Control + Alt + a + + + + + + + User menu + + Alt + Shift + u + + + Control + Alt + u + + + +
+ +
diff --git a/web_responsive/static/src/xml/navbar.xml b/web_responsive/static/src/xml/navbar.xml new file mode 100644 index 0000000..b9acd58 --- /dev/null +++ b/web_responsive/static/src/xml/navbar.xml @@ -0,0 +1,16 @@ + + + + diff --git a/web_responsive/tests/__init__.py b/web_responsive/tests/__init__.py new file mode 100644 index 0000000..03c963d --- /dev/null +++ b/web_responsive/tests/__init__.py @@ -0,0 +1 @@ +from . import test_res_users diff --git a/web_responsive/tests/test_res_users.py b/web_responsive/tests/test_res_users.py new file mode 100644 index 0000000..6f4f032 --- /dev/null +++ b/web_responsive/tests/test_res_users.py @@ -0,0 +1,16 @@ +# Copyright 2018 Alexandre Díaz +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). + +from odoo.tests import common + + +class TestResUsers(common.TransactionCase): + + def test_chatter_position_wr(self): + user_public = self.env.ref('base.public_user') + + self.assertEqual(user_public.chatter_position, 'normal') + user_public.sudo(user_public).write({ + 'chatter_position': 'sided', + }) + self.assertEqual(user_public.chatter_position, 'sided') diff --git a/web_responsive/views/assets.xml b/web_responsive/views/assets.xml new file mode 100644 index 0000000..01bb728 --- /dev/null +++ b/web_responsive/views/assets.xml @@ -0,0 +1,20 @@ + + + + + +