[tryton-debian-vcs] tryton-modules-stock branch debian updated. debian/2.8.2-1-6-g037a0c8
git repository hosting
tryton-debian-vcs at m9s.biz
Mon Nov 25 19:37:45 UTC 2013
The following commit has been merged in the debian branch:
http://debian.tryton.org/gitweb/?p=packages/tryton-modules-stock.git;a=commitdiff;h=debian/2.8.2-1-6-g037a0c8
commit 037a0c8e80a67bc426176f204d35a0ae6921e5e3
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Mon Nov 25 20:30:34 2013 +0100
Releasing debian version 3.0.0-1.
diff --git a/debian/changelog b/debian/changelog
index e108c09..3b3a88c 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,13 @@
+tryton-modules-stock (3.0.0-1) unstable; urgency=low
+
+ * Removing inadvertently commited .pc directory.
+ * Merging upstream version 3.0.0.
+ * Updating to standards version 3.9.5, no changes needed.
+ * Changing to buildsystem pybuild.
+ * Adding python-sql to Depends.
+
+ -- Mathias Behrle <mathiasb at m9s.biz> Mon, 25 Nov 2013 17:55:21 +0100
+
tryton-modules-stock (2.8.2-1) unstable; urgency=low
* Adapting the rules file to work also with git-buildpackage.
commit 8d38f4d00bdff4f4e890de846519b32c1465a729
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Mon Nov 25 17:48:45 2013 +0100
Adding python-sql to Depends.
diff --git a/debian/control b/debian/control
index 39befc2..5879c91 100644
--- a/debian/control
+++ b/debian/control
@@ -18,7 +18,8 @@ Depends:
tryton-modules-company (>= ${version:major}),
tryton-modules-currency (>= ${version:major}),
tryton-modules-party (>= ${version:major}),
- tryton-modules-product (>= ${version:major}), python-pkg-resources
+ tryton-modules-product (>= ${version:major}),
+ python-sql, python-pkg-resources
Description: Tryton Application Platform (Stock Module)
Tryton is a high-level general purpose application platform written in Python
and using PostgreSQL as database engine. It is the core base of a complete
commit b7a42457cbe8a1262441bd151c011b74af98d084
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Sun Nov 24 19:51:52 2013 +0100
Changing to buildsystem pybuild.
diff --git a/debian/control b/debian/control
index 19b1ac9..39befc2 100644
--- a/debian/control
+++ b/debian/control
@@ -3,7 +3,8 @@ Section: python
Priority: optional
Maintainer: Debian Tryton Maintainers <maintainers at debian.tryton.org>
Uploaders: Mathias Behrle <mathiasb at m9s.biz>
-Build-Depends: debhelper (>= 9), python (>= 2.6.6-3~), python-setuptools
+Build-Depends:
+ debhelper (>= 9), python (>= 2.6.6-3~), python-setuptools, dh-python
Standards-Version: 3.9.5
Homepage: http://www.tryton.org/
Vcs-Browser: http://debian.tryton.org/gitweb/?p=packages/tryton-modules-stock.git
diff --git a/debian/rules b/debian/rules
index 30074ad..5b8c326 100755
--- a/debian/rules
+++ b/debian/rules
@@ -1,24 +1,17 @@
#!/usr/bin/make -f
-MAJOR := $(shell python setup.py --version | awk -F "." '{print $$1 "." $$2}')
-PACKAGE_NAME := $(shell python setup.py --name)
-
-%:
- dh ${@} --with python2
+# needed for pbuilder
+export LC_ALL=C.UTF-8
-override_dh_auto_clean:
- dh_auto_clean
+MAJOR := $(shell python setup.py --version | awk -F "." '{print $$1 "." $$2}')
+PACKAGE_NAME := tryton-modules-$(shell python setup.py --name | sed s/^trytond_// | sed s/_/-/g)
+export PYBUILD_DESTDIR_python2=debian/${PACKAGE_NAME}
-override_dh_auto_build:
- mv $(PACKAGE_NAME).egg-info $(PACKAGE_NAME).hen-info
- mv PKG-INFO PKG-INFO.hen
- dh_auto_build
+# Don't run tests for Tryton modules, they try to download dependencies from pypi
+export PYBUILD_DISABLE_python2.7=test
-override_dh_auto_install:
- dh_auto_install
- rm -rf *.egg-info
- mv $(PACKAGE_NAME).hen-info $(PACKAGE_NAME).egg-info
- mv PKG-INFO.hen PKG-INFO
+%:
+ dh ${@} --with python2 --buildsystem=pybuild
override_dh_gencontrol:
dh_gencontrol -- -Vversion:major="$(MAJOR)"
commit c70c480363f3e462490acd06341e0a81d842de74
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Sun Nov 24 19:14:21 2013 +0100
Updating to standards version 3.9.5, no changes needed.
diff --git a/debian/control b/debian/control
index 870017a..19b1ac9 100644
--- a/debian/control
+++ b/debian/control
@@ -4,7 +4,7 @@ Priority: optional
Maintainer: Debian Tryton Maintainers <maintainers at debian.tryton.org>
Uploaders: Mathias Behrle <mathiasb at m9s.biz>
Build-Depends: debhelper (>= 9), python (>= 2.6.6-3~), python-setuptools
-Standards-Version: 3.9.4
+Standards-Version: 3.9.5
Homepage: http://www.tryton.org/
Vcs-Browser: http://debian.tryton.org/gitweb/?p=packages/tryton-modules-stock.git
Vcs-Git: git://debian.tryton.org/packages/tryton-modules-stock.git
commit 8a721e7292443e00c38963214235932d1440882b
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Sun Nov 24 17:28:22 2013 +0100
Merging upstream version 3.0.0.
diff --git a/CHANGELOG b/CHANGELOG
index 733a200..9e73b97 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,8 +1,10 @@
-Version 2.8.2 - 2013-07-22
-* Bug fixes (see mercurial logs for details)
-
-Version 2.8.1 - 2013-06-09
+Version 3.0.0 - 2013-10-21
* Bug fixes (see mercurial logs for details)
+* Add Mixin class with helper to setup stock quantity fields
+* Allow to customize move creation of Inventory
+* Allow to customize unique constraint on Inventory
+* Allow specific grouping Period Cache
+* Add grouping on products_by_location and assign_try
Version 2.8.0 - 2013-04-22
* Bug fixes (see mercurial logs for details)
diff --git a/INSTALL b/INSTALL
index 0f555d0..3902b76 100644
--- a/INSTALL
+++ b/INSTALL
@@ -6,6 +6,7 @@ Prerequisites
* Python 2.6 or later (http://www.python.org/)
* trytond (http://www.tryton.org/)
+ * python-sql (http://code.google.com/p/python-sql/)
* trytond_party (http://www.tryton.org/)
* trytond_product (http://www.tryton.org/)
* trytond_company (http://www.tryton.org/)
diff --git a/PKG-INFO b/PKG-INFO
index d1026ee..dd79515 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,12 +1,12 @@
Metadata-Version: 1.1
Name: trytond_stock
-Version: 2.8.2
+Version: 3.0.0
Summary: Tryton module for stock and inventory
Home-page: http://www.tryton.org/
Author: Tryton
Author-email: UNKNOWN
License: GPL-3
-Download-URL: http://downloads.tryton.org/2.8/
+Download-URL: http://downloads.tryton.org/3.0/
Description: trytond_stock
=============
@@ -60,6 +60,7 @@ Classifier: Natural Language :: English
Classifier: Natural Language :: French
Classifier: Natural Language :: German
Classifier: Natural Language :: Russian
+Classifier: Natural Language :: Slovenian
Classifier: Natural Language :: Spanish
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 2.6
diff --git a/configuration.py b/configuration.py
index f2bd881..c62473b 100644
--- a/configuration.py
+++ b/configuration.py
@@ -12,30 +12,30 @@ class Configuration(ModelSingleton, ModelSQL, ModelView):
shipment_in_sequence = fields.Property(fields.Many2One('ir.sequence',
'Supplier Shipment Sequence', domain=[
('company', 'in',
- [Get(Eval('context', {}), 'company'), None]),
+ [Eval('context', {}).get('company', -1), None]),
('code', '=', 'stock.shipment.in'),
], required=True))
shipment_in_return_sequence = fields.Property(fields.Many2One(
'ir.sequence', 'Supplier Return Shipment Sequence', domain=[
('company', 'in',
- [Get(Eval('context', {}), 'company'), None]),
+ [Eval('context', {}).get('company', -1), None]),
('code', '=', 'stock.shipment.in.return'),
], required=True))
shipment_out_sequence = fields.Property(fields.Many2One('ir.sequence',
'Customer Shipment Sequence', domain=[
('company', 'in',
- [Get(Eval('context', {}), 'company'), None]),
+ [Eval('context', {}).get('company', -1), None]),
('code', '=', 'stock.shipment.out'),
], required=True))
shipment_out_return_sequence = fields.Property(fields.Many2One(
'ir.sequence', 'Customer Return Shipment Sequence', domain=[
('company', 'in',
- [Get(Eval('context', {}), 'company'), None]),
+ [Eval('context', {}).get('company', -1), None]),
('code', '=', 'stock.shipment.out.return'),
], required=True))
shipment_internal_sequence = fields.Property(fields.Many2One(
'ir.sequence', 'Internal Shipment Sequence', domain=[
('company', 'in',
- [Get(Eval('context', {}), 'company'), None]),
+ [Eval('context', {}).get('company', -1), None]),
('code', '=', 'stock.shipment.internal'),
], required=True))
diff --git a/customer_return_restocking_list.odt b/customer_return_restocking_list.odt
index 3c76dff..d9a9ff4 100644
Binary files a/customer_return_restocking_list.odt and b/customer_return_restocking_list.odt differ
diff --git a/delivery_note.odt b/delivery_note.odt
index 0c5dbff..0e83fb3 100644
Binary files a/delivery_note.odt and b/delivery_note.odt differ
diff --git a/internal_shipment.odt b/internal_shipment.odt
index 6ff9790..8eabf98 100644
Binary files a/internal_shipment.odt and b/internal_shipment.odt differ
diff --git a/inventory.py b/inventory.py
index 50bf3ef..b4c6218 100644
--- a/inventory.py
+++ b/inventory.py
@@ -2,7 +2,7 @@
#of this repository contains the full copyright notices and license terms.
from trytond.model import Workflow, ModelView, ModelSQL, fields
from trytond.pyson import Not, Equal, Eval, Or, Bool
-from trytond.backend import TableHandler
+from trytond import backend
from trytond.transaction import Transaction
from trytond.pool import Pool
@@ -54,6 +54,8 @@ class Inventory(Workflow, ModelSQL, ModelView):
cls._error_messages.update({
'delete_cancel': ('Inventory "%s" must be cancelled before '
'deletion.'),
+ 'unique_line': ('Line "%s" is not unique '
+ 'on Inventory "%s".'),
})
cls._transitions |= set((
('draft', 'done'),
@@ -73,6 +75,7 @@ class Inventory(Workflow, ModelSQL, ModelView):
@classmethod
def __register__(cls, module_name):
+ TableHandler = backend.get('TableHandler')
super(Inventory, cls).__register__(module_name)
cursor = Transaction().cursor
@@ -116,7 +119,13 @@ class Inventory(Workflow, ModelSQL, ModelView):
Move = Pool().get('stock.move')
move_ids = []
for inventory in inventories:
+ keys = set()
for line in inventory.lines:
+ key = line.unique_key
+ if key in keys:
+ self.raise_user_error('unique_line',
+ (line.rec_name, inventory.rec_name))
+ keys.add(key)
move_id = line.create_move()
if move_id:
move_ids.append(move_id)
@@ -164,6 +173,7 @@ class Inventory(Workflow, ModelSQL, ModelView):
Line = pool.get('stock.inventory.line')
Product = pool.get('product.product')
+ to_create = []
for inventory in inventories:
# Compute product quantities
with Transaction().set_context(stock_date_end=inventory.date):
@@ -200,7 +210,6 @@ class Inventory(Workflow, ModelSQL, ModelView):
Line.write([line], values)
# Create lines if needed
- to_create = []
for product_id in product_qty:
if (product2type[product_id] != 'goods'
or product2consumable[product_id]):
@@ -209,8 +218,8 @@ class Inventory(Workflow, ModelSQL, ModelView):
values = Line.create_values4complete(product_id, inventory,
quantity, uom_id)
to_create.append(values)
- if to_create:
- Line.create(to_create)
+ if to_create:
+ Line.create(to_create)
class InventoryLine(ModelSQL, ModelView):
@@ -241,11 +250,20 @@ class InventoryLine(ModelSQL, ModelView):
cls._sql_constraints += [
('check_line_qty_pos',
'CHECK(quantity >= 0.0)', 'Line quantity must be positive.'),
- ('inventory_product_uniq', 'UNIQUE(inventory, product)',
- 'Product must be unique by inventory.'),
]
cls._order.insert(0, ('product', 'ASC'))
+ @classmethod
+ def __register__(cls, module_name):
+ TableHandler = backend.get('TableHandler')
+ cursor = Transaction().cursor
+
+ super(InventoryLine, cls).__register__(module_name)
+
+ table = TableHandler(cursor, cls, module_name)
+ # Migration from 2.8: Remove constraint inventory_product_uniq
+ table.drop_constraint('inventory_product_uniq')
+
@staticmethod
def default_unit_digits():
return 2
@@ -263,12 +281,19 @@ class InventoryLine(ModelSQL, ModelView):
change['unit_digits'] = self.product.default_uom.digits
return change
+ def get_rec_name(self, name):
+ return self.product.rec_name
+
def get_uom(self, name):
return self.product.default_uom.id
def get_unit_digits(self, name):
return self.product.default_uom.digits
+ @property
+ def unique_key(self):
+ return (self.product,)
+
@classmethod
def cancel_move(cls, lines):
Move = Pool().get('stock.move')
@@ -278,9 +303,9 @@ class InventoryLine(ModelSQL, ModelView):
'move': None,
})
- def create_move(self):
+ def _get_move(self):
'''
- Create move for an inventory line and return id
+ Return Move instance for the inventory line
'''
pool = Pool()
Move = pool.get('stock.move')
@@ -291,24 +316,30 @@ class InventoryLine(ModelSQL, ModelView):
self.uom)
if delta_qty == 0.0:
return
- from_location = self.inventory.location.id
- to_location = self.inventory.lost_found.id
+ from_location = self.inventory.location
+ to_location = self.inventory.lost_found
if delta_qty < 0:
(from_location, to_location, delta_qty) = \
(to_location, from_location, -delta_qty)
- move, = Move.create([{
- 'from_location': from_location,
- 'to_location': to_location,
- 'quantity': delta_qty,
- 'product': self.product.id,
- 'uom': self.uom.id,
- 'company': self.inventory.company.id,
- 'effective_date': self.inventory.date,
- }])
- self.move = move
+ move = Move(
+ from_location=from_location,
+ to_location=to_location,
+ quantity=delta_qty,
+ product=self.product,
+ uom=self.uom,
+ company=self.inventory.company,
+ effective_date=self.inventory.date,
+ )
+ return move
+
+ def create_move(self):
+ '''
+ Create move for an inventory line and return id
+ '''
+ self.move = self._get_move()
self.save()
- return move.id
+ return self.move.id if self.move else None
def update_values4complete(self, quantity, uom_id):
'''
diff --git a/locale/bg_BG.po b/locale/bg_BG.po
index e17965d..1fe13bc 100644
--- a/locale/bg_BG.po
+++ b/locale/bg_BG.po
@@ -14,12 +14,12 @@ msgctxt "error:stock.inventory.line:"
msgid "Line quantity must be positive."
msgstr ""
-msgctxt "error:stock.inventory.line:"
-msgid "Product must be unique by inventory."
+msgctxt "error:stock.inventory:"
+msgid "Inventory \"%s\" must be cancelled before deletion."
msgstr ""
msgctxt "error:stock.inventory:"
-msgid "Inventory \"%s\" must be cancelled before deletion."
+msgid "Line \"%s\" is not unique on Inventory \"%s\"."
msgstr ""
msgctxt "error:stock.location:"
@@ -55,9 +55,13 @@ msgid "You can not modify move \"%(move)s\" because period \"%(period)s\" is clo
msgstr ""
msgctxt "error:stock.move:"
+msgid "You can not modify stock move \"%s\" because it is in \"Assigned\" state."
+msgstr ""
+
+msgctxt "error:stock.move:"
msgid ""
-"You can not modify stock move \"%s\"because it is in \"Assigned\", \"Done\" "
-"or \"Cancel\" state."
+"You can not modify stock move \"%s\" because it is in \"Done\" or \"Cancel\""
+" state."
msgstr ""
msgctxt "error:stock.move:"
@@ -666,6 +670,10 @@ msgctxt "field:stock.shipment.in,moves:"
msgid "Moves"
msgstr "Движения"
+msgctxt "field:stock.shipment.in,origins:"
+msgid "Origins"
+msgstr ""
+
msgctxt "field:stock.shipment.in,planned_date:"
msgid "Planned Date"
msgstr "Планирана дата"
@@ -742,6 +750,10 @@ msgctxt "field:stock.shipment.in.return,moves:"
msgid "Moves"
msgstr "Движения"
+msgctxt "field:stock.shipment.in.return,origins:"
+msgid "Origins"
+msgstr ""
+
msgctxt "field:stock.shipment.in.return,planned_date:"
msgid "Planned Date"
msgstr "Планирана дата"
@@ -890,6 +902,10 @@ msgctxt "field:stock.shipment.out,moves:"
msgid "Moves"
msgstr "Движения"
+msgctxt "field:stock.shipment.out,origins:"
+msgid "Origins"
+msgstr ""
+
msgctxt "field:stock.shipment.out,outgoing_moves:"
msgid "Outgoing Moves"
msgstr "Изходящи движения"
@@ -986,6 +1002,10 @@ msgctxt "field:stock.shipment.out.return,moves:"
msgid "Moves"
msgstr "Движения"
+msgctxt "field:stock.shipment.out.return,origins:"
+msgid "Origins"
+msgstr ""
+
msgctxt "field:stock.shipment.out.return,planned_date:"
msgid "Planned Date"
msgstr "Планирана дата"
@@ -1735,10 +1755,20 @@ msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "/"
msgstr "/"
+#, fuzzy
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid ":"
+msgstr ":"
+
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Code:"
msgstr "Код:"
+#, fuzzy
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "Customer"
+msgstr "Клиент"
+
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "E-Mail:"
msgstr "E-Mail:"
@@ -1772,10 +1802,6 @@ msgid "Restocking List"
msgstr "Списък за увеличаване наличност на продукт"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
-msgid "Supplier:"
-msgstr "Доставчик:"
-
-msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "To Location"
msgstr "Към местонахождение"
diff --git a/locale/ca_ES.po b/locale/ca_ES.po
index e0f76b3..856c644 100644
--- a/locale/ca_ES.po
+++ b/locale/ca_ES.po
@@ -14,13 +14,13 @@ msgctxt "error:stock.inventory.line:"
msgid "Line quantity must be positive."
msgstr "La quantitat de la línia ha de ser positiva."
-msgctxt "error:stock.inventory.line:"
-msgid "Product must be unique by inventory."
-msgstr "El producte ha de ser únic per inventari."
-
msgctxt "error:stock.inventory:"
msgid "Inventory \"%s\" must be cancelled before deletion."
-msgstr "Heu de cancel·lar l'inventari \"%s\" abans de ser eliminat."
+msgstr "Cal cancel·lar l'inventari \"%s\" abans d'eliminar-lo."
+
+msgctxt "error:stock.inventory:"
+msgid "Line \"%s\" is not unique on Inventory \"%s\"."
+msgstr "La línia \"%s\" no és única en l'inventari \"%s\"."
msgctxt "error:stock.location:"
msgid "Location \"%(location)s\" must be a child of warehouse \"%(warehouse)s\"."
@@ -63,12 +63,18 @@ msgstr ""
"\"%(period)s\" està tancat."
msgctxt "error:stock.move:"
+msgid "You can not modify stock move \"%s\" because it is in \"Assigned\" state."
+msgstr ""
+"No podeu canviar el moviment d'estoc \"%s\" perquè es troba en l'estat "
+"\"Assignat\"."
+
+msgctxt "error:stock.move:"
msgid ""
-"You can not modify stock move \"%s\"because it is in \"Assigned\", \"Done\" "
-"or \"Cancel\" state."
+"You can not modify stock move \"%s\" because it is in \"Done\" or \"Cancel\""
+" state."
msgstr ""
-"No podeu modificar el moviment d'estoc \"%s\" perquè està en estat "
-"\"Assignat\", \"Realitzat\" o \"Cancel·lat\"."
+"No podeu canviar el moviment d'estoc \"%s\" perquè es troba en l'estat "
+"\"Realitzat\" o \"Cancel·lat\"."
msgctxt "error:stock.move:"
msgid "You can not set stock move \"%s\" to assigned state."
@@ -673,6 +679,10 @@ msgctxt "field:stock.shipment.in,moves:"
msgid "Moves"
msgstr "Moviments"
+msgctxt "field:stock.shipment.in,origins:"
+msgid "Origins"
+msgstr "Orígens"
+
msgctxt "field:stock.shipment.in,planned_date:"
msgid "Planned Date"
msgstr "Data estimada"
@@ -749,6 +759,10 @@ msgctxt "field:stock.shipment.in.return,moves:"
msgid "Moves"
msgstr "Moviments"
+msgctxt "field:stock.shipment.in.return,origins:"
+msgid "Origins"
+msgstr "Orígens"
+
msgctxt "field:stock.shipment.in.return,planned_date:"
msgid "Planned Date"
msgstr "Data estimada"
@@ -897,6 +911,10 @@ msgctxt "field:stock.shipment.out,moves:"
msgid "Moves"
msgstr "Moviments"
+msgctxt "field:stock.shipment.out,origins:"
+msgid "Origins"
+msgstr "Orígens"
+
msgctxt "field:stock.shipment.out,outgoing_moves:"
msgid "Outgoing Moves"
msgstr "Moviments de sortida"
@@ -993,6 +1011,10 @@ msgctxt "field:stock.shipment.out.return,moves:"
msgid "Moves"
msgstr "Moviments"
+msgctxt "field:stock.shipment.out.return,origins:"
+msgid "Origins"
+msgstr "Orígens"
+
msgctxt "field:stock.shipment.out.return,planned_date:"
msgid "Planned Date"
msgstr "Data estimada"
@@ -1723,10 +1745,18 @@ msgid "/"
msgstr "/"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid ":"
+msgstr ":"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Code:"
msgstr "Codi:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "Customer"
+msgstr "Client"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "E-Mail:"
msgstr "Correu electrònic:"
@@ -1759,10 +1789,6 @@ msgid "Restocking List"
msgstr "Llista de renovació d'existències"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
-msgid "Supplier:"
-msgstr "Proveïdor:"
-
-msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "To Location"
msgstr "A la ubicació"
diff --git a/locale/cs_CZ.po b/locale/cs_CZ.po
index fce392e..4e74862 100644
--- a/locale/cs_CZ.po
+++ b/locale/cs_CZ.po
@@ -12,12 +12,12 @@ msgctxt "error:stock.inventory.line:"
msgid "Line quantity must be positive."
msgstr ""
-msgctxt "error:stock.inventory.line:"
-msgid "Product must be unique by inventory."
+msgctxt "error:stock.inventory:"
+msgid "Inventory \"%s\" must be cancelled before deletion."
msgstr ""
msgctxt "error:stock.inventory:"
-msgid "Inventory \"%s\" must be cancelled before deletion."
+msgid "Line \"%s\" is not unique on Inventory \"%s\"."
msgstr ""
msgctxt "error:stock.location:"
@@ -53,9 +53,13 @@ msgid "You can not modify move \"%(move)s\" because period \"%(period)s\" is clo
msgstr ""
msgctxt "error:stock.move:"
+msgid "You can not modify stock move \"%s\" because it is in \"Assigned\" state."
+msgstr ""
+
+msgctxt "error:stock.move:"
msgid ""
-"You can not modify stock move \"%s\"because it is in \"Assigned\", \"Done\" "
-"or \"Cancel\" state."
+"You can not modify stock move \"%s\" because it is in \"Done\" or \"Cancel\""
+" state."
msgstr ""
msgctxt "error:stock.move:"
@@ -653,6 +657,10 @@ msgctxt "field:stock.shipment.in,moves:"
msgid "Moves"
msgstr ""
+msgctxt "field:stock.shipment.in,origins:"
+msgid "Origins"
+msgstr ""
+
msgctxt "field:stock.shipment.in,planned_date:"
msgid "Planned Date"
msgstr ""
@@ -729,6 +737,10 @@ msgctxt "field:stock.shipment.in.return,moves:"
msgid "Moves"
msgstr ""
+msgctxt "field:stock.shipment.in.return,origins:"
+msgid "Origins"
+msgstr ""
+
msgctxt "field:stock.shipment.in.return,planned_date:"
msgid "Planned Date"
msgstr ""
@@ -877,6 +889,10 @@ msgctxt "field:stock.shipment.out,moves:"
msgid "Moves"
msgstr ""
+msgctxt "field:stock.shipment.out,origins:"
+msgid "Origins"
+msgstr ""
+
msgctxt "field:stock.shipment.out,outgoing_moves:"
msgid "Outgoing Moves"
msgstr ""
@@ -973,6 +989,10 @@ msgctxt "field:stock.shipment.out.return,moves:"
msgid "Moves"
msgstr ""
+msgctxt "field:stock.shipment.out.return,origins:"
+msgid "Origins"
+msgstr ""
+
msgctxt "field:stock.shipment.out.return,planned_date:"
msgid "Planned Date"
msgstr ""
@@ -1695,10 +1715,18 @@ msgid "/"
msgstr ""
msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid ":"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Code:"
msgstr ""
msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "Customer"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "E-Mail:"
msgstr ""
@@ -1731,10 +1759,6 @@ msgid "Restocking List"
msgstr ""
msgctxt "odt:stock.shipment.out.return.restocking_list:"
-msgid "Supplier:"
-msgstr ""
-
-msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "To Location"
msgstr ""
diff --git a/locale/de_DE.po b/locale/de_DE.po
index c838d1c..1ddfd41 100644
--- a/locale/de_DE.po
+++ b/locale/de_DE.po
@@ -14,16 +14,16 @@ msgctxt "error:stock.inventory.line:"
msgid "Line quantity must be positive."
msgstr "Anzahl auf der Zeile muss einen positiven Wert aufweisen."
-msgctxt "error:stock.inventory.line:"
-msgid "Product must be unique by inventory."
-msgstr "Ein Artikel kann nur einmal pro Bestandsänderung eingetragen werden."
-
msgctxt "error:stock.inventory:"
msgid "Inventory \"%s\" must be cancelled before deletion."
msgstr ""
"Bestandsänderung \"%s\" muss annulliert werden, bevor sie gelöscht werden "
"kann."
+msgctxt "error:stock.inventory:"
+msgid "Line \"%s\" is not unique on Inventory \"%s\"."
+msgstr "Zeile \"%s\" kann nur einmal für Lagerbestand \"%s\" vergeben werden."
+
msgctxt "error:stock.location:"
msgid "Location \"%(location)s\" must be a child of warehouse \"%(warehouse)s\"."
msgstr ""
@@ -65,12 +65,18 @@ msgstr ""
"\"%(period)s\" geschlossen ist."
msgctxt "error:stock.move:"
+msgid "You can not modify stock move \"%s\" because it is in \"Assigned\" state."
+msgstr ""
+"Eine Lagerbewegung in Status \"Zugewiesen\" (\"%s\") kann nicht verändert "
+"werden."
+
+msgctxt "error:stock.move:"
msgid ""
-"You can not modify stock move \"%s\"because it is in \"Assigned\", \"Done\" "
-"or \"Cancel\" state."
+"You can not modify stock move \"%s\" because it is in \"Done\" or \"Cancel\""
+" state."
msgstr ""
-"Änderung von Lagerbewegung \"%s\" nicht möglich, weil sie in Status "
-"\"Zugewiesen\", \"Erledigt\" oder \"Annulliert\" ist."
+"Lagerbegungen mit Status \"Erledigt\" oder \"Annulliert\" (\"%s\") können "
+"nicht verändert werden."
msgctxt "error:stock.move:"
msgid "You can not set stock move \"%s\" to assigned state."
@@ -455,7 +461,7 @@ msgstr "ID"
msgctxt "field:stock.move,internal_quantity:"
msgid "Internal Quantity"
-msgstr "Anzahl Intern"
+msgstr "Interne Anzahl"
msgctxt "field:stock.move,origin:"
msgid "Origin"
@@ -571,7 +577,7 @@ msgstr "ID"
msgctxt "field:stock.period.cache,internal_quantity:"
msgid "Internal Quantity"
-msgstr "Anzahl Intern"
+msgstr "Interne Anzahl"
msgctxt "field:stock.period.cache,location:"
msgid "Location"
@@ -685,6 +691,10 @@ msgctxt "field:stock.shipment.in,moves:"
msgid "Moves"
msgstr "Bewegungen"
+msgctxt "field:stock.shipment.in,origins:"
+msgid "Origins"
+msgstr "Herkünfte"
+
msgctxt "field:stock.shipment.in,planned_date:"
msgid "Planned Date"
msgstr "Geplantes Datum"
@@ -761,6 +771,10 @@ msgctxt "field:stock.shipment.in.return,moves:"
msgid "Moves"
msgstr "Bewegungen"
+msgctxt "field:stock.shipment.in.return,origins:"
+msgid "Origins"
+msgstr "Herkünfte"
+
msgctxt "field:stock.shipment.in.return,planned_date:"
msgid "Planned Date"
msgstr "Geplantes Datum"
@@ -909,6 +923,10 @@ msgctxt "field:stock.shipment.out,moves:"
msgid "Moves"
msgstr "Bewegungen"
+msgctxt "field:stock.shipment.out,origins:"
+msgid "Origins"
+msgstr "Herkünfte"
+
msgctxt "field:stock.shipment.out,outgoing_moves:"
msgid "Outgoing Moves"
msgstr "Ausgehende Bewegungen"
@@ -1005,6 +1023,10 @@ msgctxt "field:stock.shipment.out.return,moves:"
msgid "Moves"
msgstr "Bewegungen"
+msgctxt "field:stock.shipment.out.return,origins:"
+msgid "Origins"
+msgstr "Herkünfte"
+
msgctxt "field:stock.shipment.out.return,planned_date:"
msgid "Planned Date"
msgstr "Geplantes Datum"
@@ -1362,7 +1384,7 @@ msgstr "Lagerorte"
msgctxt "model:ir.ui.menu,name:menu_move_form"
msgid "Moves"
-msgstr "Bewegungen"
+msgstr "Lagerbewegungen"
msgctxt "model:ir.ui.menu,name:menu_period_list"
msgid "Periods"
@@ -1733,10 +1755,18 @@ msgid "/"
msgstr "/"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid ":"
+msgstr ":"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Code:"
msgstr "Code:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "Customer"
+msgstr "Kunde"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "E-Mail:"
msgstr "E-Mail:"
@@ -1769,10 +1799,6 @@ msgid "Restocking List"
msgstr "Einlagerungsliste"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
-msgid "Supplier:"
-msgstr "Lieferant:"
-
-msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "To Location"
msgstr "Zu Lagerort"
@@ -2010,7 +2036,7 @@ msgstr "Bewegung"
msgctxt "view:stock.move:"
msgid "Moves"
-msgstr "Bewegungen"
+msgstr "Lagerbewegungen"
msgctxt "view:stock.period.cache:"
msgid "Period Cache"
diff --git a/locale/es_AR.po b/locale/es_AR.po
index c2dbd39..d3b2834 100644
--- a/locale/es_AR.po
+++ b/locale/es_AR.po
@@ -14,14 +14,14 @@ msgctxt "error:stock.inventory.line:"
msgid "Line quantity must be positive."
msgstr "La cantidad de la línea debe ser positiva."
-msgctxt "error:stock.inventory.line:"
-msgid "Product must be unique by inventory."
-msgstr "El producto debe ser único por inventario."
-
msgctxt "error:stock.inventory:"
msgid "Inventory \"%s\" must be cancelled before deletion."
msgstr "Debe cancelar el inventario «%s» antes de eliminar."
+msgctxt "error:stock.inventory:"
+msgid "Line \"%s\" is not unique on Inventory \"%s\"."
+msgstr "La línea «%s» no es única en el inventario «%s»."
+
msgctxt "error:stock.location:"
msgid "Location \"%(location)s\" must be a child of warehouse \"%(warehouse)s\"."
msgstr ""
@@ -63,12 +63,18 @@ msgstr ""
"está cerrado."
msgctxt "error:stock.move:"
+msgid "You can not modify stock move \"%s\" because it is in \"Assigned\" state."
+msgstr ""
+"No puede modificar el movimiento de stock «%s» porque se encuentra en estado"
+" «Asignado»."
+
+msgctxt "error:stock.move:"
msgid ""
-"You can not modify stock move \"%s\"because it is in \"Assigned\", \"Done\" "
-"or \"Cancel\" state."
+"You can not modify stock move \"%s\" because it is in \"Done\" or \"Cancel\""
+" state."
msgstr ""
-"No puede modificar el movimiento de stock «%s» porque está en estado "
-"«Asignado», «Realizado» o «Cancelado»."
+"No puede modificar el movimiento de stock «%s» porque se encuentra en estado"
+" «Realizado» o «Cancelado»."
msgctxt "error:stock.move:"
msgid "You can not set stock move \"%s\" to assigned state."
@@ -94,7 +100,7 @@ msgstr ""
msgctxt "error:stock.shipment.in.return:"
msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion."
msgstr ""
-"Debe cancelar el envío de devolución a proveedor «%s» antes de eliminar."
+"Debe cancelar el Remito de devolución a proveedor «%s» antes de eliminar."
msgctxt "error:stock.shipment.in:"
msgid ""
@@ -113,28 +119,28 @@ msgstr ""
msgctxt "error:stock.shipment.in:"
msgid "Supplier Shipment \"%s\" must be cancelled before deletion."
-msgstr "Debe cancelar el envío de proveedor «%s» antes de eliminar."
+msgstr "Debe cancelar el Remito de proveedor «%s» antes de eliminar."
msgctxt "error:stock.shipment.internal:"
msgid "Internal Shipment \"%s\" must be cancelled before deletion."
-msgstr "Debe cancelar el envío interno «%s» antes de eliminar."
+msgstr "Debe cancelar el Remito interno «%s» antes de eliminar."
msgctxt "error:stock.shipment.out.return.create:"
msgid "The shipment with code \"%s\" is not yet sent."
-msgstr "El envío con código «%s» todavía no se ha enviado."
+msgstr "El remito con código «%s» todavía no se ha enviado."
msgctxt "error:stock.shipment.out.return.create:"
msgid "You can not create return shipment"
-msgstr "No puede crear paquetes de retorno"
+msgstr "No puede crear remito de devolución"
msgctxt "error:stock.shipment.out.return:"
msgid "Customer Return Shipment \"%s\" must be cancelled before deletion."
msgstr ""
-"Debe cancelar el envío de devolución de cliente «%s» antes de eliminar."
+"Debe cancelar el Remito de devolución de cliente «%s» antes de eliminar."
msgctxt "error:stock.shipment.out:"
msgid "Customer Shipment \"%s\" must be cancelled before deletion."
-msgstr "Debe cancelar el envío de cliente «%s» antes de eliminar."
+msgstr "Debe cancelar el Remito de cliente «%s» antes de eliminar."
msgctxt "field:party.address,delivery:"
msgid "Delivery"
@@ -198,23 +204,23 @@ msgstr "Nombre"
msgctxt "field:stock.configuration,shipment_in_return_sequence:"
msgid "Supplier Return Shipment Sequence"
-msgstr "Secuencia de envío de devolución a proveedor"
+msgstr "Secuencia de Remito de devolución a proveedor"
msgctxt "field:stock.configuration,shipment_in_sequence:"
msgid "Supplier Shipment Sequence"
-msgstr "Secuencia de envío de proveedor"
+msgstr "Secuencia de Remito de proveedor"
msgctxt "field:stock.configuration,shipment_internal_sequence:"
msgid "Internal Shipment Sequence"
-msgstr "Secuencia de envío interno"
+msgstr "Secuencia de Remito interno"
msgctxt "field:stock.configuration,shipment_out_return_sequence:"
msgid "Customer Return Shipment Sequence"
-msgstr "Secuencia de envío de devolución de cliente"
+msgstr "Secuencia de Remito de devolución de cliente"
msgctxt "field:stock.configuration,shipment_out_sequence:"
msgid "Customer Shipment Sequence"
-msgstr "Secuencia de envío a cliente"
+msgstr "Secuencia de Remito a cliente"
msgctxt "field:stock.configuration,write_date:"
msgid "Write Date"
@@ -426,7 +432,7 @@ msgstr "Usuario creación"
msgctxt "field:stock.move,currency:"
msgid "Currency"
-msgstr "Divisa"
+msgstr "Moneda"
msgctxt "field:stock.move,effective_date:"
msgid "Effective Date"
@@ -470,7 +476,7 @@ msgstr "Nombre"
msgctxt "field:stock.move,shipment:"
msgid "Shipment"
-msgstr "Envío"
+msgstr "Remito"
msgctxt "field:stock.move,state:"
msgid "State"
@@ -672,6 +678,10 @@ msgctxt "field:stock.shipment.in,moves:"
msgid "Moves"
msgstr "Movimientos"
+msgctxt "field:stock.shipment.in,origins:"
+msgid "Origins"
+msgstr "Origen"
+
msgctxt "field:stock.shipment.in,planned_date:"
msgid "Planned Date"
msgstr "Fecha estimada"
@@ -748,6 +758,10 @@ msgctxt "field:stock.shipment.in.return,moves:"
msgid "Moves"
msgstr "Movimientos"
+msgctxt "field:stock.shipment.in.return,origins:"
+msgid "Origins"
+msgstr "Origen"
+
msgctxt "field:stock.shipment.in.return,planned_date:"
msgid "Planned Date"
msgstr "Fecha estimada"
@@ -896,6 +910,10 @@ msgctxt "field:stock.shipment.out,moves:"
msgid "Moves"
msgstr "Movimientos"
+msgctxt "field:stock.shipment.out,origins:"
+msgid "Origins"
+msgstr "Origen"
+
msgctxt "field:stock.shipment.out,outgoing_moves:"
msgid "Outgoing Moves"
msgstr "Movimientos de salida"
@@ -992,6 +1010,10 @@ msgctxt "field:stock.shipment.out.return,moves:"
msgid "Moves"
msgstr "Movimientos"
+msgctxt "field:stock.shipment.out.return,origins:"
+msgid "Origins"
+msgstr "Origen"
+
msgctxt "field:stock.shipment.out.return,planned_date:"
msgid "Planned Date"
msgstr "Fecha estimada"
@@ -1093,31 +1115,31 @@ msgstr "Productos"
msgctxt "model:ir.action,name:act_shipment_in_form"
msgid "Supplier Shipments"
-msgstr "Envíos de proveedor"
+msgstr "Remitos de proveedor"
msgctxt "model:ir.action,name:act_shipment_in_return_form"
msgid "Supplier Return Shipments"
-msgstr "Envíos de devolución a proveedor"
+msgstr "Remitos de devolución a proveedor"
msgctxt "model:ir.action,name:act_shipment_internal_form"
msgid "Internal Shipments"
-msgstr "Envíos internos"
+msgstr "Remitos internos"
msgctxt "model:ir.action,name:act_shipment_out_form"
msgid "Customer Shipments"
-msgstr "Envíos a cliente"
+msgstr "Remitos a cliente"
msgctxt "model:ir.action,name:act_shipment_out_form2"
msgid "Customer Shipments"
-msgstr "Envíos a cliente"
+msgstr "Remitos a cliente"
msgctxt "model:ir.action,name:act_shipment_out_form3"
msgid "Supplier Shipments"
-msgstr "Envíos de proveedor"
+msgstr "Remitos de proveedor"
msgctxt "model:ir.action,name:act_shipment_out_return_form"
msgid "Customer Return Shipments"
-msgstr "Envíos de devoluciones de cliente"
+msgstr "Remitos de devolución de cliente"
msgctxt "model:ir.action,name:act_stock_configuration_form"
msgid "Stock Configuration"
@@ -1125,7 +1147,7 @@ msgstr "Configuración de stock"
msgctxt "model:ir.action,name:create_shipment_out_return"
msgid "Create Return Shipment"
-msgstr "Crear envío de devolución"
+msgstr "Crear Remito de devolución"
msgctxt "model:ir.action,name:report_shipment_in_restocking_list"
msgid "Restocking List"
@@ -1133,7 +1155,7 @@ msgstr "Lista reabastecimiento"
msgctxt "model:ir.action,name:report_shipment_internal"
msgid "Internal Shipment"
-msgstr "Envío interno"
+msgstr "Remito interno"
msgctxt "model:ir.action,name:report_shipment_out_delivery_note"
msgid "Delivery Note"
@@ -1161,15 +1183,15 @@ msgstr "Productos por ubicaciones"
msgctxt "model:ir.action,name:wizard_shipment_in_return_assign"
msgid "Assign Purchase Return Shipment"
-msgstr "Asignar envío de devolución de compra"
+msgstr "Asignar Remito de devolución de compra"
msgctxt "model:ir.action,name:wizard_shipment_internal_assign"
msgid "Assign Shipment Internal"
-msgstr "Asignar envío interno"
+msgstr "Asignar Remito interno"
msgctxt "model:ir.action,name:wizard_shipment_out_assign"
msgid "Assign Shipment Out"
-msgstr "Asignación de envío de salida"
+msgstr "Asignación de Remito de salida"
msgctxt "model:ir.action.act_window.domain,name:act_inventory_form_domain_all"
msgid "All"
@@ -1296,43 +1318,43 @@ msgstr "Recibido"
msgctxt "model:ir.sequence,name:sequence_shipment_in"
msgid "Supplier Shipment"
-msgstr "Envío de proveedor"
+msgstr "Remito de proveedor"
msgctxt "model:ir.sequence,name:sequence_shipment_in_return"
msgid "Supplier Return Shipment"
-msgstr "Envío de devolución a proveedor"
+msgstr "Remito de devolución a proveedor"
msgctxt "model:ir.sequence,name:sequence_shipment_internal"
msgid "Internal Shipment"
-msgstr "Envío interno"
+msgstr "Remito interno"
msgctxt "model:ir.sequence,name:sequence_shipment_out"
msgid "Customer Shipment"
-msgstr "Envío a cliente"
+msgstr "Remito a cliente"
msgctxt "model:ir.sequence,name:sequence_shipment_out_return"
msgid "Customer Return Shipment"
-msgstr "Envío de devolución de cliente"
+msgstr "Remito de devolución de cliente"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in"
msgid "Supplier Shipment"
-msgstr "Envío de proveedor"
+msgstr "Remito de proveedor"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in_return"
msgid "Supplier Return Shipment"
-msgstr "Envío de devolución a proveedor"
+msgstr "Remito de devolución a proveedor"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_internal"
msgid "Internal Shipment"
-msgstr "Envío interno"
+msgstr "Remito interno"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out"
msgid "Customer Shipment"
-msgstr "Envío a cliente"
+msgstr "Remito a cliente"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out_return"
msgid "Customer Return Shipment"
-msgstr "Envío de devolución de cliente"
+msgstr "Remito de devolución de cliente"
msgctxt "model:ir.ui.menu,name:menu_configuration"
msgid "Configuration"
@@ -1364,23 +1386,23 @@ msgstr "Informes"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
msgid "Supplier Shipments"
-msgstr "Envíos de proveedor"
+msgstr "Remitos de proveedor"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
msgid "Supplier Return Shipments"
-msgstr "Envíos de devolución a proveedor"
+msgstr "Devoluciones a proveedor"
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_form"
msgid "Internal Shipments"
-msgstr "Envíos internos"
+msgstr "Remitos internos"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_form"
msgid "Customer Shipments"
-msgstr "Envíos a cliente"
+msgstr "Remitos a cliente"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
msgid "Customer Return Shipments"
-msgstr "Envíos de devolución de cliente"
+msgstr "Devoluciones de cliente"
msgctxt "model:ir.ui.menu,name:menu_stock"
msgid "Inventory & Stock"
@@ -1476,35 +1498,35 @@ msgstr "Productos por ubicaciones"
msgctxt "model:stock.shipment.in,name:"
msgid "Supplier Shipment"
-msgstr "Envío de proveedor"
+msgstr "Remito de proveedor"
msgctxt "model:stock.shipment.in.return,name:"
msgid "Supplier Return Shipment"
-msgstr "Envío de devolución a proveedor"
+msgstr "Remito de devolución a proveedor"
msgctxt "model:stock.shipment.in.return.assign.failed,name:"
msgid "Assign Supplier Return Shipment"
-msgstr "Asignar envío de devolución de proveedor"
+msgstr "Asignar Remito de devolución de proveedor"
msgctxt "model:stock.shipment.internal,name:"
msgid "Internal Shipment"
-msgstr "Envío interno"
+msgstr "Remito interno"
msgctxt "model:stock.shipment.internal.assign.failed,name:"
msgid "Assign Shipment Internal"
-msgstr "Asignar envío interno"
+msgstr "Asignar Remito interno"
msgctxt "model:stock.shipment.out,name:"
msgid "Customer Shipment"
-msgstr "Envío a cliente"
+msgstr "Remito a cliente"
msgctxt "model:stock.shipment.out.assign.failed,name:"
msgid "Assign Shipment Out"
-msgstr "Asignación de envío de salida"
+msgstr "Asignación de Remito de salida"
msgctxt "model:stock.shipment.out.return,name:"
msgid "Customer Return Shipment"
-msgstr "Envío de devolución de cliente"
+msgstr "Remito de devolución de cliente"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "/"
@@ -1584,7 +1606,7 @@ msgstr "Desde ubicación:"
msgctxt "odt:stock.shipment.internal.report:"
msgid "Internal Shipment"
-msgstr "Envío interno"
+msgstr "Remito interno"
msgctxt "odt:stock.shipment.internal.report:"
msgid "Phone:"
@@ -1656,7 +1678,7 @@ msgstr "Referencia:"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Shipment Number:"
-msgstr "Número de envío:"
+msgstr "Número de Remito:"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "VAT Number:"
@@ -1723,10 +1745,18 @@ msgid "/"
msgstr "/"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid ":"
+msgstr ":"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Code:"
msgstr "Código:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "Customer"
+msgstr "Cliente"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "E-Mail:"
msgstr "Correo electrónico:"
@@ -1759,10 +1789,6 @@ msgid "Restocking List"
msgstr "Lista reabastecimiento"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
-msgid "Supplier:"
-msgstr "Proveedor:"
-
-msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "To Location"
msgstr "A ubicación"
@@ -2064,11 +2090,11 @@ msgstr "Borrador"
msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipment"
-msgstr "Envío de devolución a proveedor"
+msgstr "Remito de devolución a proveedor"
msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipments"
-msgstr "Envíos de devolución a proveedor"
+msgstr "Remitos de devolución a proveedor"
msgctxt "view:stock.shipment.in.return:"
msgid "Wait"
@@ -2100,11 +2126,11 @@ msgstr "Restablecer a borrador"
msgctxt "view:stock.shipment.in:"
msgid "Supplier Shipment"
-msgstr "Envío de proveedor"
+msgstr "Remito de proveedor"
msgctxt "view:stock.shipment.in:"
msgid "Supplier Shipments"
-msgstr "Envíos de proveedor"
+msgstr "Remitos de proveedor"
msgctxt "view:stock.shipment.internal.assign.failed:"
msgid "Unable to Assign"
@@ -2132,11 +2158,11 @@ msgstr "Borrador"
msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipment"
-msgstr "Envío interno"
+msgstr "Remito interno"
msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipments"
-msgstr "Envíos internos"
+msgstr "Remitos internos"
msgctxt "view:stock.shipment.internal:"
msgid "Waiting"
@@ -2156,11 +2182,11 @@ msgstr "Cancelar"
msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipment"
-msgstr "Envío de devolución de cliente"
+msgstr "Remito de devolución de cliente"
msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipments"
-msgstr "Envíos de devolución de cliente"
+msgstr "Remitos de devolución de cliente"
msgctxt "view:stock.shipment.out.return:"
msgid "Done"
@@ -2192,11 +2218,11 @@ msgstr "Cancelar"
msgctxt "view:stock.shipment.out:"
msgid "Customer Shipment"
-msgstr "Envío a cliente"
+msgstr "Remito a cliente"
msgctxt "view:stock.shipment.out:"
msgid "Customer Shipments"
-msgstr "Envíos a cliente"
+msgstr "Remitos a cliente"
msgctxt "view:stock.shipment.out:"
msgid "Done"
diff --git a/locale/es_CO.po b/locale/es_CO.po
index bea695a..4a4e37e 100644
--- a/locale/es_CO.po
+++ b/locale/es_CO.po
@@ -14,14 +14,14 @@ msgctxt "error:stock.inventory.line:"
msgid "Line quantity must be positive."
msgstr "La cantidad en la línea debe ser positiva."
-msgctxt "error:stock.inventory.line:"
-msgid "Product must be unique by inventory."
-msgstr "El producto debe ser único por inventario."
-
msgctxt "error:stock.inventory:"
msgid "Inventory \"%s\" must be cancelled before deletion."
msgstr "El inventario \"%s\" debe ser cancelado antes de ser eliminado."
+msgctxt "error:stock.inventory:"
+msgid "Line \"%s\" is not unique on Inventory \"%s\"."
+msgstr "La línea \"%s\" no es única en el Inventario \"%s\"."
+
msgctxt "error:stock.location:"
msgid "Location \"%(location)s\" must be a child of warehouse \"%(warehouse)s\"."
msgstr ""
@@ -63,12 +63,18 @@ msgstr ""
"\"%(period)s\" esta cerrado."
msgctxt "error:stock.move:"
+msgid "You can not modify stock move \"%s\" because it is in \"Assigned\" state."
+msgstr ""
+"No puede modificar el movimiento de inventario \"%s\" porque esta en estado "
+"\"Asignado\"."
+
+msgctxt "error:stock.move:"
msgid ""
-"You can not modify stock move \"%s\"because it is in \"Assigned\", \"Done\" "
-"or \"Cancel\" state."
+"You can not modify stock move \"%s\" because it is in \"Done\" or \"Cancel\""
+" state."
msgstr ""
-"Usted no puede modificar los movimientos de inventarios \"%s\" porque estan "
-"en estado \"Asignado\", \"Hecho\" o \"Cancelado\". "
+"No puede modificar el movimiento de inventario \"%s\" porque esta en estado "
+"\"Hecho\" o \"Cancelado\"."
msgctxt "error:stock.move:"
msgid "You can not set stock move \"%s\" to assigned state."
@@ -203,7 +209,7 @@ msgstr "Secuencia Envío de Devolución a Proveedor"
msgctxt "field:stock.configuration,shipment_in_sequence:"
msgid "Supplier Shipment Sequence"
-msgstr "Secuencia Envío de proveedor"
+msgstr "Secuencia Envío de Proveedor"
msgctxt "field:stock.configuration,shipment_internal_sequence:"
msgid "Internal Shipment Sequence"
@@ -215,7 +221,7 @@ msgstr "Secuencia Devolución de Cliente"
msgctxt "field:stock.configuration,shipment_out_sequence:"
msgid "Customer Shipment Sequence"
-msgstr "Secuencia Envío a cliente"
+msgstr "Secuencia Envío a Cliente"
msgctxt "field:stock.configuration,write_date:"
msgid "Write Date"
@@ -673,6 +679,10 @@ msgctxt "field:stock.shipment.in,moves:"
msgid "Moves"
msgstr "Movimientos"
+msgctxt "field:stock.shipment.in,origins:"
+msgid "Origins"
+msgstr "Orígenes"
+
msgctxt "field:stock.shipment.in,planned_date:"
msgid "Planned Date"
msgstr "Fecha Planeada"
@@ -749,6 +759,10 @@ msgctxt "field:stock.shipment.in.return,moves:"
msgid "Moves"
msgstr "Movimientos"
+msgctxt "field:stock.shipment.in.return,origins:"
+msgid "Origins"
+msgstr "Orígenes"
+
msgctxt "field:stock.shipment.in.return,planned_date:"
msgid "Planned Date"
msgstr "Fecha Planeada"
@@ -897,6 +911,10 @@ msgctxt "field:stock.shipment.out,moves:"
msgid "Moves"
msgstr "Movimientos"
+msgctxt "field:stock.shipment.out,origins:"
+msgid "Origins"
+msgstr "Orígenes"
+
msgctxt "field:stock.shipment.out,outgoing_moves:"
msgid "Outgoing Moves"
msgstr "Movimientos de Salida"
@@ -993,6 +1011,10 @@ msgctxt "field:stock.shipment.out.return,moves:"
msgid "Moves"
msgstr "Movimientos"
+msgctxt "field:stock.shipment.out.return,origins:"
+msgid "Origins"
+msgstr "Orígenes"
+
msgctxt "field:stock.shipment.out.return,planned_date:"
msgid "Planned Date"
msgstr "Fecha planeada"
@@ -1722,10 +1744,18 @@ msgid "/"
msgstr "/"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid ":"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Code:"
msgstr "Código:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "Customer"
+msgstr "Cliente"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "E-Mail:"
msgstr "Correo electrónico:"
@@ -1758,10 +1788,6 @@ msgid "Restocking List"
msgstr "Lista de renovación de existencias"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
-msgid "Supplier:"
-msgstr "Proveedor:"
-
-msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "To Location"
msgstr "A Bodega"
@@ -1991,7 +2017,7 @@ msgstr "Cantidad en Bodega"
msgctxt "view:stock.location:"
msgid "Locations"
-msgstr "Consultas Bodegas"
+msgstr "Bodegas"
msgctxt "view:stock.move:"
msgid "Move"
@@ -2003,11 +2029,11 @@ msgstr "Movimientos"
msgctxt "view:stock.period.cache:"
msgid "Period Cache"
-msgstr "Caché de período"
+msgstr "Caché de Período"
msgctxt "view:stock.period.cache:"
msgid "Period Caches"
-msgstr "Cachés de periodo"
+msgstr "Cachés de Periodo"
msgctxt "view:stock.period:"
msgid "Close"
@@ -2207,7 +2233,7 @@ msgstr "Borrador"
msgctxt "view:stock.shipment.out:"
msgid "Inventory Moves"
-msgstr "Movimientos de inventario"
+msgstr "Movimientos de Inventario"
msgctxt "view:stock.shipment.out:"
msgid "Make shipment"
diff --git a/locale/es_ES.po b/locale/es_ES.po
index 64b2f81..bd028a9 100644
--- a/locale/es_ES.po
+++ b/locale/es_ES.po
@@ -7,24 +7,23 @@ msgid ""
"You cannot change the default uom for a product which is associated to stock"
" moves."
msgstr ""
-"No puede cambiar la UdM por defecto de un producto que está asociado con "
-"movimientos de stock."
+"No puede cambiar la UdM por defecto de un producto con movimientos de stock."
msgctxt "error:stock.inventory.line:"
msgid "Line quantity must be positive."
msgstr "La cantidad de la línea debe ser positiva."
-msgctxt "error:stock.inventory.line:"
-msgid "Product must be unique by inventory."
-msgstr "El producto debe ser único en el inventario."
-
msgctxt "error:stock.inventory:"
msgid "Inventory \"%s\" must be cancelled before deletion."
-msgstr "Debe cancelar el inventario \"%s\" antes de borrar."
+msgstr "Debe cancelar el inventario \"%s\" antes de borrarlo."
+
+msgctxt "error:stock.inventory:"
+msgid "Line \"%s\" is not unique on Inventory \"%s\"."
+msgstr "La línea \"%s\" no es única en el inventario \"%s\"."
msgctxt "error:stock.location:"
msgid "Location \"%(location)s\" must be a child of warehouse \"%(warehouse)s\"."
-msgstr "La ubicación \"%(location)s\" debe ser un hijo del almacén \"%(warehouse)s\"."
+msgstr "La ubicación \"%(location)s\" debe ser hija del almacén \"%(warehouse)s\"."
msgctxt "error:stock.location:"
msgid ""
@@ -40,7 +39,7 @@ msgstr "La cantidad del movimiento interno debe ser positiva."
msgctxt "error:stock.move:"
msgid "Move quantity must be positive"
-msgstr "La cantidad a mover tiene que ser positiva."
+msgstr "La cantidad del movimiento tiene que ser positiva."
msgctxt "error:stock.move:"
msgid "Source and destination location must be different"
@@ -61,12 +60,18 @@ msgstr ""
"\"%(period)s\" está cerrado."
msgctxt "error:stock.move:"
+msgid "You can not modify stock move \"%s\" because it is in \"Assigned\" state."
+msgstr ""
+"No puede establecer el movimiento de stock \"%s\" porque se encuentra en "
+"estado \"Asignado\"."
+
+msgctxt "error:stock.move:"
msgid ""
-"You can not modify stock move \"%s\"because it is in \"Assigned\", \"Done\" "
-"or \"Cancel\" state."
+"You can not modify stock move \"%s\" because it is in \"Done\" or \"Cancel\""
+" state."
msgstr ""
-"No puede modificar el movimiento de stock \"%s\" porque está en estado "
-"\"Asignado\", \"Realizado\" o \"Cancelado\"."
+"No puede establecer el movimiento de stock \"%s\" porque se encuentra en "
+"estado \"Realizado\" o \"Cancelado\"."
msgctxt "error:stock.move:"
msgid "You can not set stock move \"%s\" to assigned state."
@@ -82,7 +87,7 @@ msgstr "No puede establecer el movimiento de stock \"%s\" al estado borrador."
msgctxt "error:stock.period:"
msgid "You can not close a period in the future or today."
-msgstr "No puede cerrar un período con fecha de hoy o proximamente."
+msgstr "No puede cerrar un período con fecha futura o de hoy."
msgctxt "error:stock.period:"
msgid "You can not close a period when there still are assigned moves."
@@ -91,30 +96,29 @@ msgstr ""
msgctxt "error:stock.shipment.in.return:"
msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion."
-msgstr "Debe cancelar el albarán devolución proveedor\"%s\" antes de borrar."
+msgstr "Debe cancelar el albarán devolución proveedor \"%s\" antes de borrarlo."
msgctxt "error:stock.shipment.in:"
msgid ""
"Incoming Moves must have the warehouse input location as destination "
"location."
msgstr ""
-"Movimientos de entrada debe disponer de un almacén de entrada como ubicación"
-" destino."
+"Los movimientos de entrada indicar una ubicación de entrada como destino."
msgctxt "error:stock.shipment.in:"
msgid ""
"Inventory Moves must have the warehouse input location as source location."
msgstr ""
-"Los movimientos del inventario deben disponer de un almacén de entrada como "
-"ubicación incial."
+"Los movimientos de inventario deben indicar una ubicación de entrada como "
+"origen."
msgctxt "error:stock.shipment.in:"
msgid "Supplier Shipment \"%s\" must be cancelled before deletion."
-msgstr "Debe cancelar el albarán de proveedor \"%s\" antes de borrar."
+msgstr "Debe cancelar el albarán de proveedor \"%s\" antes de borrarlo."
msgctxt "error:stock.shipment.internal:"
msgid "Internal Shipment \"%s\" must be cancelled before deletion."
-msgstr "Debe cancelar el albarán interno \"%s\" antes de borrar."
+msgstr "Debe cancelar el albarán interno \"%s\" antes de borrarlo."
msgctxt "error:stock.shipment.out.return.create:"
msgid "The shipment with code \"%s\" is not yet sent."
@@ -126,11 +130,11 @@ msgstr "No puede crear albarán de devolución."
msgctxt "error:stock.shipment.out.return:"
msgid "Customer Return Shipment \"%s\" must be cancelled before deletion."
-msgstr "Debe cancelar el albarán devolución de cliente \"%s\" antes de borrar."
+msgstr "Debe cancelar el albarán devolución de cliente \"%s\" antes de borrarlo."
msgctxt "error:stock.shipment.out:"
msgid "Customer Shipment \"%s\" must be cancelled before deletion."
-msgstr "Debe cancelar el albarán de cliente \"%s\" antes de borrar."
+msgstr "Debe cancelar el albarán de cliente \"%s\" antes de borrarlo."
msgctxt "field:party.address,delivery:"
msgid "Delivery"
@@ -668,6 +672,10 @@ msgctxt "field:stock.shipment.in,moves:"
msgid "Moves"
msgstr "Movimientos"
+msgctxt "field:stock.shipment.in,origins:"
+msgid "Origins"
+msgstr "Orígen"
+
msgctxt "field:stock.shipment.in,planned_date:"
msgid "Planned Date"
msgstr "Fecha estimada"
@@ -698,11 +706,11 @@ msgstr "Almacén"
msgctxt "field:stock.shipment.in,warehouse_input:"
msgid "Warehouse Input"
-msgstr "Almacén entrada"
+msgstr "Almacén-ubicación de entrada"
msgctxt "field:stock.shipment.in,warehouse_storage:"
msgid "Warehouse Storage"
-msgstr "Almacén interno"
+msgstr "Ubicación de almacenamiento"
msgctxt "field:stock.shipment.in,write_date:"
msgid "Write Date"
@@ -744,6 +752,10 @@ msgctxt "field:stock.shipment.in.return,moves:"
msgid "Moves"
msgstr "Movimientos"
+msgctxt "field:stock.shipment.in.return,origins:"
+msgid "Origins"
+msgstr "Orígen"
+
msgctxt "field:stock.shipment.in.return,planned_date:"
msgid "Planned Date"
msgstr "Fecha estimada"
@@ -886,12 +898,16 @@ msgstr "ID"
msgctxt "field:stock.shipment.out,inventory_moves:"
msgid "Inventory Moves"
-msgstr "Movimientos internos"
+msgstr "Movimientos de inventario"
msgctxt "field:stock.shipment.out,moves:"
msgid "Moves"
msgstr "Movimientos"
+msgctxt "field:stock.shipment.out,origins:"
+msgid "Origins"
+msgstr "Origen"
+
msgctxt "field:stock.shipment.out,outgoing_moves:"
msgid "Outgoing Moves"
msgstr "Movimientos de salida"
@@ -918,11 +934,11 @@ msgstr "Almacén"
msgctxt "field:stock.shipment.out,warehouse_output:"
msgid "Warehouse Output"
-msgstr "Almacén salida"
+msgstr "Ubicación de salida"
msgctxt "field:stock.shipment.out,warehouse_storage:"
msgid "Warehouse Storage"
-msgstr "Almacén interno"
+msgstr "Ubicación de almacenamiento"
msgctxt "field:stock.shipment.out,write_date:"
msgid "Write Date"
@@ -988,6 +1004,10 @@ msgctxt "field:stock.shipment.out.return,moves:"
msgid "Moves"
msgstr "Movimientos"
+msgctxt "field:stock.shipment.out.return,origins:"
+msgid "Origins"
+msgstr "Orígen"
+
msgctxt "field:stock.shipment.out.return,planned_date:"
msgid "Planned Date"
msgstr "Fecha estimada"
@@ -1010,11 +1030,11 @@ msgstr "Almacén"
msgctxt "field:stock.shipment.out.return,warehouse_input:"
msgid "Warehouse Input"
-msgstr "Almacén entrada"
+msgstr "Ubicación de entrada"
msgctxt "field:stock.shipment.out.return,warehouse_storage:"
msgid "Warehouse Storage"
-msgstr "Almacén interno"
+msgstr "Ubicación de almacenamiento"
msgctxt "field:stock.shipment.out.return,write_date:"
msgid "Write Date"
@@ -1080,7 +1100,7 @@ msgstr "Configuración de períodos"
msgctxt "model:ir.action,name:act_product_quantities_warehouse"
msgid "Product Quantities By Warehouse"
-msgstr "Unidades de producto por almazén"
+msgstr "Unidades de producto por almacén"
msgctxt "model:ir.action,name:act_products_by_locations"
msgid "Products"
@@ -1112,7 +1132,7 @@ msgstr "Albaranes proveedor"
msgctxt "model:ir.action,name:act_shipment_out_return_form"
msgid "Customer Return Shipments"
-msgstr "Albaranes cliente devolución"
+msgstr "Albaranes devolución cliente "
msgctxt "model:ir.action,name:act_stock_configuration_form"
msgid "Stock Configuration"
@@ -1148,7 +1168,7 @@ msgstr "Producto por ubicación"
msgctxt "model:ir.action,name:wizard_product_quantities_warehouse"
msgid "Product Quantities By Warehouse"
-msgstr "Unidades de producto por almazén"
+msgstr "Unidades de producto por almacén"
msgctxt "model:ir.action,name:wizard_products_by_locations"
msgid "Products by Locations"
@@ -1291,7 +1311,7 @@ msgstr "Recibido"
msgctxt "model:ir.sequence,name:sequence_shipment_in"
msgid "Supplier Shipment"
-msgstr "Albarán de proveedor"
+msgstr "Albarán proveedor"
msgctxt "model:ir.sequence,name:sequence_shipment_in_return"
msgid "Supplier Return Shipment"
@@ -1363,7 +1383,7 @@ msgstr "Albaranes proveedor"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
msgid "Supplier Return Shipments"
-msgstr "Devolución"
+msgstr "Devoluciones"
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_form"
msgid "Internal Shipments"
@@ -1375,7 +1395,7 @@ msgstr "Albaranes cliente"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
msgid "Customer Return Shipments"
-msgstr "Devolución"
+msgstr "Devoluciones"
msgctxt "model:ir.ui.menu,name:menu_stock"
msgid "Inventory & Stock"
@@ -1427,7 +1447,7 @@ msgstr "Zona de entrada"
msgctxt "model:stock.location,name:location_lost_found"
msgid "Lost and Found"
-msgstr "Perdido y encontrado"
+msgstr "Perdido/encontrado"
msgctxt "model:stock.location,name:location_output"
msgid "Output Zone"
@@ -1459,11 +1479,11 @@ msgstr "Período stock precalculado"
msgctxt "model:stock.product_quantities_warehouse,name:"
msgid "Product Quantities By Warehouse"
-msgstr "Unidades de producto por almazén"
+msgstr "Unidades de producto por almacén"
msgctxt "model:stock.product_quantities_warehouse.start,name:"
msgid "Product Quantities By Warehouse"
-msgstr "Unidades de producto por almazén"
+msgstr "Unidades de producto por almacén"
msgctxt "model:stock.products_by_locations.start,name:"
msgid "Products by Locations"
@@ -1655,7 +1675,7 @@ msgstr "Número de albarán:"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "VAT Number:"
-msgstr "Número CIF/NIF:"
+msgstr "CIF/NIF:"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "/"
@@ -1707,7 +1727,7 @@ msgstr "A ubicación"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "VAT Number:"
-msgstr "Número CIF/NIF:"
+msgstr "CIF/NIF:"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Warehouse:"
@@ -1718,10 +1738,18 @@ msgid "/"
msgstr "/"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid ":"
+msgstr ":"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Code:"
msgstr "Código:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "Customer"
+msgstr "Cliente"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "E-Mail:"
msgstr "Correo electrónico:"
@@ -1754,16 +1782,12 @@ msgid "Restocking List"
msgstr "Lista reabastecimiento"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
-msgid "Supplier:"
-msgstr "Proveedor:"
-
-msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "To Location"
msgstr "A ubicación"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "VAT Number:"
-msgstr "Número CIF/NIF:"
+msgstr "CIF/NIF:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Warehouse:"
@@ -2023,11 +2047,11 @@ msgstr "Períodos"
msgctxt "view:stock.product_quantities_warehouse.start:"
msgid "Product Quantities By Warehouse"
-msgstr "Unidades de producto por almazén"
+msgstr "Unidades de producto por almacén"
msgctxt "view:stock.product_quantities_warehouse:"
msgid "Product Quantities By Warehouse"
-msgstr "Unidades de producto por almazén"
+msgstr "Unidades de producto por almacén"
msgctxt "view:stock.products_by_locations.start:"
msgid "Products by Locations"
diff --git a/locale/fr_FR.po b/locale/fr_FR.po
index d5b92ed..7a721e8 100644
--- a/locale/fr_FR.po
+++ b/locale/fr_FR.po
@@ -10,26 +10,18 @@ msgstr ""
"Vous ne pouvez pas changer l'UDM par défaut pour un produit qui a déjà fait "
"l'objet de mouvements de stock"
-msgctxt "error:product.template:"
-msgid ""
-"You cannot change the default uom for a product which is associated to stock"
-" moves."
-msgstr ""
-"Vous ne pouvez pas changer l'UDM par défaut pour un produit qui a déjà fait "
-"l'objet de mouvements de stock"
-
msgctxt "error:stock.inventory.line:"
msgid "Line quantity must be positive."
msgstr "La quantité de la ligne doit être positive."
-msgctxt "error:stock.inventory.line:"
-msgid "Product must be unique by inventory."
-msgstr "Le produit par inventaire doit être unique"
-
msgctxt "error:stock.inventory:"
msgid "Inventory \"%s\" must be cancelled before deletion."
msgstr "l'inventaire \"%s\" doit être annulé avant sa suppression"
+msgctxt "error:stock.inventory:"
+msgid "Line \"%s\" is not unique on Inventory \"%s\"."
+msgstr "La ligne \"%s\" n'est pas unique pour l'inventaire \"%s\"."
+
msgctxt "error:stock.location:"
msgid "Location \"%(location)s\" must be a child of warehouse \"%(warehouse)s\"."
msgstr ""
@@ -49,22 +41,10 @@ msgid "Internal move quantity must be positive"
msgstr "La quantité interne doit être positive"
msgctxt "error:stock.move:"
-msgid "Internal move quantity must be positive"
-msgstr "La quantité interne doit être positive"
-
-msgctxt "error:stock.move:"
msgid "Move quantity must be positive"
msgstr "La quantité sur le mouvement doit être positive."
msgctxt "error:stock.move:"
-msgid "Move quantity must be positive"
-msgstr "La quantité sur le mouvement doit être positive."
-
-msgctxt "error:stock.move:"
-msgid "Source and destination location must be different"
-msgstr "Les emplacements d'origine et de destination doivent être distincts"
-
-msgctxt "error:stock.move:"
msgid "Source and destination location must be different"
msgstr "Les emplacements d'origine et de destination doivent être distincts"
@@ -83,12 +63,18 @@ msgstr ""
"\"%(period)s\" est fermée."
msgctxt "error:stock.move:"
+msgid "You can not modify stock move \"%s\" because it is in \"Assigned\" state."
+msgstr ""
+"Vous ne pouvez pas modifier le mouvement de stock \"%s\" parce qu'il est "
+"dans l'état \"Assigné\"."
+
+msgctxt "error:stock.move:"
msgid ""
-"You can not modify stock move \"%s\"because it is in \"Assigned\", \"Done\" "
-"or \"Cancel\" state."
+"You can not modify stock move \"%s\" because it is in \"Done\" or \"Cancel\""
+" state."
msgstr ""
-"Vous ne pouvez modifier le le mouvement de stock \"%s\" car il est dans "
-"l'état \"Assigné\", \"Fait\" ou \"Annulé\"."
+"Vous ne pouvez pas modifier le mouvement de stock \"%s\" parce qu'il est "
+"dans l'état \"Fait\" ou \"Annulé\"."
msgctxt "error:stock.move:"
msgid "You can not set stock move \"%s\" to assigned state."
@@ -96,11 +82,11 @@ msgstr "Vous ne pouvez passer dans l'état assigné le mouvement de stock \"%s\"
msgctxt "error:stock.move:"
msgid "You can not set stock move \"%s\" to done state."
-msgstr "Vous ne pouvez passer dans l'état \"Fait\" le mouvement \"%s\"."
+msgstr "Vous ne pouvez passer dans l'état \"Fait\" le mouvement de stock \"%s\"."
msgctxt "error:stock.move:"
msgid "You can not set stock move \"%s\" to draft state."
-msgstr "Vous ne pouvez remettre en brouilon le mouvement \"%s\"."
+msgstr "Vous ne pouvez remettre en brouilon le mouvement de stock \"%s\"."
msgctxt "error:stock.period:"
msgid "You can not close a period in the future or today."
@@ -124,8 +110,8 @@ msgid ""
"Incoming Moves must have the warehouse input location as destination "
"location."
msgstr ""
-"Les mouvement d'entrées doivent avoir comme destination la location d'entrée"
-" de l'entrepôt."
+"Les mouvement entrants doivent avoir comme destination la location d'entrée "
+"de l'entrepôt."
msgctxt "error:stock.shipment.in:"
msgid ""
@@ -153,10 +139,6 @@ msgctxt "error:stock.shipment.out.return.create:"
msgid "You can not create return shipment"
msgstr "Vous ne pouvez pas créer d'expédition retour"
-msgctxt "error:stock.shipment.out.return.create:"
-msgid "You can not create return shipment"
-msgstr "Vous ne pouvez pas créer d'expédition retour"
-
msgctxt "error:stock.shipment.out.return:"
msgid "Customer Return Shipment \"%s\" must be cancelled before deletion."
msgstr ""
@@ -231,23 +213,23 @@ msgstr "Nom"
msgctxt "field:stock.configuration,shipment_in_return_sequence:"
msgid "Supplier Return Shipment Sequence"
-msgstr "Séquence des retours expédition fournisseur"
+msgstr "Séquence de retour d'expédition fournisseur"
msgctxt "field:stock.configuration,shipment_in_sequence:"
msgid "Supplier Shipment Sequence"
-msgstr "Séquence des expédition fournisseur"
+msgstr "Séquence d'expédition fournisseur"
msgctxt "field:stock.configuration,shipment_internal_sequence:"
msgid "Internal Shipment Sequence"
-msgstr "Séquence des expédition interne"
+msgstr "Séquence d'expédition interne"
msgctxt "field:stock.configuration,shipment_out_return_sequence:"
msgid "Customer Return Shipment Sequence"
-msgstr "Séquence des retours d'expédition client"
+msgstr "Séquence de retour d'expédition client"
msgctxt "field:stock.configuration,shipment_out_sequence:"
msgid "Customer Shipment Sequence"
-msgstr "Séquence des expéditions client"
+msgstr "Séquence d'expéditions client"
msgctxt "field:stock.configuration,write_date:"
msgid "Write Date"
@@ -705,6 +687,10 @@ msgctxt "field:stock.shipment.in,moves:"
msgid "Moves"
msgstr "Mouvements"
+msgctxt "field:stock.shipment.in,origins:"
+msgid "Origins"
+msgstr "Origines"
+
msgctxt "field:stock.shipment.in,planned_date:"
msgid "Planned Date"
msgstr "Date planifiée"
@@ -781,6 +767,10 @@ msgctxt "field:stock.shipment.in.return,moves:"
msgid "Moves"
msgstr "Mouvements"
+msgctxt "field:stock.shipment.in.return,origins:"
+msgid "Origins"
+msgstr "Origines"
+
msgctxt "field:stock.shipment.in.return,planned_date:"
msgid "Planned Date"
msgstr "Date planifiée"
@@ -929,9 +919,13 @@ msgctxt "field:stock.shipment.out,moves:"
msgid "Moves"
msgstr "Mouvements"
+msgctxt "field:stock.shipment.out,origins:"
+msgid "Origins"
+msgstr "Origines"
+
msgctxt "field:stock.shipment.out,outgoing_moves:"
msgid "Outgoing Moves"
-msgstr "Mouvements de sortie"
+msgstr "Mouvements sortants"
msgctxt "field:stock.shipment.out,planned_date:"
msgid "Planned Date"
@@ -1025,6 +1019,10 @@ msgctxt "field:stock.shipment.out.return,moves:"
msgid "Moves"
msgstr "Mouvements"
+msgctxt "field:stock.shipment.out.return,origins:"
+msgid "Origins"
+msgstr "Origines"
+
msgctxt "field:stock.shipment.out.return,planned_date:"
msgid "Planned Date"
msgstr "Date planifiée"
@@ -1093,7 +1091,7 @@ msgstr "Inventaires"
msgctxt "model:ir.action,name:act_location_form"
msgid "Locations"
-msgstr "Éditer les emplacements"
+msgstr "Emplacements"
msgctxt "model:ir.action,name:act_location_quantity_tree"
msgid "Locations"
@@ -1332,7 +1330,7 @@ msgstr "Retour d'expédition fournisseur"
msgctxt "model:ir.sequence,name:sequence_shipment_internal"
msgid "Internal Shipment"
-msgstr "Expédition Interne"
+msgstr "Expédition interne"
msgctxt "model:ir.sequence,name:sequence_shipment_out"
msgid "Customer Shipment"
@@ -1488,11 +1486,7 @@ msgstr "Période de stock"
msgctxt "model:stock.period.cache,name:"
msgid "Stock Period Cache"
-msgstr ""
-"\n"
-"Cache de période de stock\n"
-"\n"
-"C'est utilisé pour stocker en cache les calculs de quantités de stock."
+msgstr "Cache de période et stock"
msgctxt "model:stock.product_quantities_warehouse,name:"
msgid "Product Quantities By Warehouse"
@@ -1543,14 +1537,6 @@ msgid "/"
msgstr "/"
msgctxt "odt:stock.shipment.in.restocking_list:"
-msgid "/"
-msgstr "/"
-
-msgctxt "odt:stock.shipment.in.restocking_list:"
-msgid "Code:"
-msgstr "Code :"
-
-msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Code:"
msgstr "Code :"
@@ -1559,14 +1545,6 @@ msgid "E-Mail:"
msgstr "E-Mail :"
msgctxt "odt:stock.shipment.in.restocking_list:"
-msgid "E-Mail:"
-msgstr "E-Mail :"
-
-msgctxt "odt:stock.shipment.in.restocking_list:"
-msgid "From Location"
-msgstr "Emplacement d'origine"
-
-msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "From Location"
msgstr "Emplacement d'origine"
@@ -1575,14 +1553,6 @@ msgid "Phone:"
msgstr "Téléphone :"
msgctxt "odt:stock.shipment.in.restocking_list:"
-msgid "Phone:"
-msgstr "Téléphone :"
-
-msgctxt "odt:stock.shipment.in.restocking_list:"
-msgid "Planned Date:"
-msgstr "Date planifiée :"
-
-msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Planned Date:"
msgstr "Date planifiée :"
@@ -1591,14 +1561,6 @@ msgid "Product"
msgstr "Produit"
msgctxt "odt:stock.shipment.in.restocking_list:"
-msgid "Product"
-msgstr "Produit"
-
-msgctxt "odt:stock.shipment.in.restocking_list:"
-msgid "Quantity"
-msgstr "Quantité"
-
-msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Quantity"
msgstr "Quantité"
@@ -1607,14 +1569,6 @@ msgid "Reference:"
msgstr "Référence :"
msgctxt "odt:stock.shipment.in.restocking_list:"
-msgid "Reference:"
-msgstr "Référence :"
-
-msgctxt "odt:stock.shipment.in.restocking_list:"
-msgid "Restocking List"
-msgstr "Liste de restockage"
-
-msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Restocking List"
msgstr "Liste de restockage"
@@ -1623,14 +1577,6 @@ msgid "Supplier:"
msgstr "Fournisseur :"
msgctxt "odt:stock.shipment.in.restocking_list:"
-msgid "Supplier:"
-msgstr "Fournisseur :"
-
-msgctxt "odt:stock.shipment.in.restocking_list:"
-msgid "To Location"
-msgstr "Emplacement de destination"
-
-msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "To Location"
msgstr "Emplacement de destination"
@@ -1639,14 +1585,6 @@ msgid "VAT Number:"
msgstr "Numéro TVA :"
msgctxt "odt:stock.shipment.in.restocking_list:"
-msgid "VAT Number:"
-msgstr "Numéro TVA :"
-
-msgctxt "odt:stock.shipment.in.restocking_list:"
-msgid "Warehouse:"
-msgstr "Entrepôt :"
-
-msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Warehouse:"
msgstr "Entrepôt :"
@@ -1655,14 +1593,6 @@ msgid "/"
msgstr "/"
msgctxt "odt:stock.shipment.internal.report:"
-msgid "/"
-msgstr "/"
-
-msgctxt "odt:stock.shipment.internal.report:"
-msgid "Code:"
-msgstr "Code :"
-
-msgctxt "odt:stock.shipment.internal.report:"
msgid "Code:"
msgstr "Code :"
@@ -1671,14 +1601,6 @@ msgid "E-Mail:"
msgstr "E-Mail :"
msgctxt "odt:stock.shipment.internal.report:"
-msgid "E-Mail:"
-msgstr "E-Mail :"
-
-msgctxt "odt:stock.shipment.internal.report:"
-msgid "From Location"
-msgstr "Emplacement d'origine"
-
-msgctxt "odt:stock.shipment.internal.report:"
msgid "From Location"
msgstr "Emplacement d'origine"
@@ -1687,14 +1609,6 @@ msgid "From Location:"
msgstr "Emplacement d'origine :"
msgctxt "odt:stock.shipment.internal.report:"
-msgid "From Location:"
-msgstr "Emplacement d'origine :"
-
-msgctxt "odt:stock.shipment.internal.report:"
-msgid "Internal Shipment"
-msgstr "Expédition interne"
-
-msgctxt "odt:stock.shipment.internal.report:"
msgid "Internal Shipment"
msgstr "Expédition interne"
@@ -1703,14 +1617,6 @@ msgid "Phone:"
msgstr "Téléphone :"
msgctxt "odt:stock.shipment.internal.report:"
-msgid "Phone:"
-msgstr "Téléphone :"
-
-msgctxt "odt:stock.shipment.internal.report:"
-msgid "Planned Date:"
-msgstr "Date planifiée :"
-
-msgctxt "odt:stock.shipment.internal.report:"
msgid "Planned Date:"
msgstr "Date planifiée :"
@@ -1719,14 +1625,6 @@ msgid "Product"
msgstr "Produit"
msgctxt "odt:stock.shipment.internal.report:"
-msgid "Product"
-msgstr "Produit"
-
-msgctxt "odt:stock.shipment.internal.report:"
-msgid "Quantity"
-msgstr "Quantité"
-
-msgctxt "odt:stock.shipment.internal.report:"
msgid "Quantity"
msgstr "Quantité"
@@ -1735,14 +1633,6 @@ msgid "Reference:"
msgstr "Référence :"
msgctxt "odt:stock.shipment.internal.report:"
-msgid "Reference:"
-msgstr "Référence :"
-
-msgctxt "odt:stock.shipment.internal.report:"
-msgid "To Location"
-msgstr "Emplacement de destination"
-
-msgctxt "odt:stock.shipment.internal.report:"
msgid "To Location"
msgstr "Emplacement de destination"
@@ -1751,14 +1641,6 @@ msgid "To Location:"
msgstr "Emplacement de destination :"
msgctxt "odt:stock.shipment.internal.report:"
-msgid "To Location:"
-msgstr "Emplacement de destination :"
-
-msgctxt "odt:stock.shipment.internal.report:"
-msgid "VAT Number:"
-msgstr "Numéro TVA :"
-
-msgctxt "odt:stock.shipment.internal.report:"
msgid "VAT Number:"
msgstr "Numéro TVA :"
@@ -1767,14 +1649,6 @@ msgid "/"
msgstr "/"
msgctxt "odt:stock.shipment.out.delivery_note:"
-msgid "/"
-msgstr "/"
-
-msgctxt "odt:stock.shipment.out.delivery_note:"
-msgid "Customer Code:"
-msgstr "Code client :"
-
-msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Customer Code:"
msgstr "Code client :"
@@ -1783,14 +1657,6 @@ msgid "Date:"
msgstr "Date :"
msgctxt "odt:stock.shipment.out.delivery_note:"
-msgid "Date:"
-msgstr "Date :"
-
-msgctxt "odt:stock.shipment.out.delivery_note:"
-msgid "Delivery Note"
-msgstr "Bon de livraison"
-
-msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Delivery Note"
msgstr "Bon de livraison"
@@ -1799,14 +1665,6 @@ msgid "E-Mail:"
msgstr "E-Mail :"
msgctxt "odt:stock.shipment.out.delivery_note:"
-msgid "E-Mail:"
-msgstr "E-Mail :"
-
-msgctxt "odt:stock.shipment.out.delivery_note:"
-msgid "Phone:"
-msgstr "Téléphone :"
-
-msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Phone:"
msgstr "Téléphone :"
@@ -1815,14 +1673,6 @@ msgid "Product"
msgstr "Produit"
msgctxt "odt:stock.shipment.out.delivery_note:"
-msgid "Product"
-msgstr "Produit"
-
-msgctxt "odt:stock.shipment.out.delivery_note:"
-msgid "Quantity"
-msgstr "Quantité"
-
-msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Quantity"
msgstr "Quantité"
@@ -1831,14 +1681,6 @@ msgid "Reference:"
msgstr "Référence :"
msgctxt "odt:stock.shipment.out.delivery_note:"
-msgid "Reference:"
-msgstr "Référence :"
-
-msgctxt "odt:stock.shipment.out.delivery_note:"
-msgid "Shipment Number:"
-msgstr "Numéro d'expédition :"
-
-msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Shipment Number:"
msgstr "Numéro d'expédition :"
@@ -1846,14 +1688,6 @@ msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "VAT Number:"
msgstr "Numéro TVA :"
-msgctxt "odt:stock.shipment.out.delivery_note:"
-msgid "VAT Number:"
-msgstr "Numéro TVA :"
-
-msgctxt "odt:stock.shipment.out.picking_list:"
-msgid "/"
-msgstr "/"
-
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "/"
msgstr "/"
@@ -1863,14 +1697,6 @@ msgid "Code:"
msgstr "Code :"
msgctxt "odt:stock.shipment.out.picking_list:"
-msgid "Code:"
-msgstr "Code :"
-
-msgctxt "odt:stock.shipment.out.picking_list:"
-msgid "Customer:"
-msgstr "Client :"
-
-msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Customer:"
msgstr "Client :"
@@ -1879,14 +1705,6 @@ msgid "E-Mail:"
msgstr "E-Mail:"
msgctxt "odt:stock.shipment.out.picking_list:"
-msgid "E-Mail:"
-msgstr "E-Mail:"
-
-msgctxt "odt:stock.shipment.out.picking_list:"
-msgid "From Location"
-msgstr "Emplacement d'origine"
-
-msgctxt "odt:stock.shipment.out.picking_list:"
msgid "From Location"
msgstr "Emplacement d'origine"
@@ -1895,14 +1713,6 @@ msgid "Phone:"
msgstr "Téléphone :"
msgctxt "odt:stock.shipment.out.picking_list:"
-msgid "Phone:"
-msgstr "Téléphone :"
-
-msgctxt "odt:stock.shipment.out.picking_list:"
-msgid "Picking List"
-msgstr "Liste de prélèvement"
-
-msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Picking List"
msgstr "Liste de prélèvement"
@@ -1911,14 +1721,6 @@ msgid "Planned Date:"
msgstr "Date planifiée :"
msgctxt "odt:stock.shipment.out.picking_list:"
-msgid "Planned Date:"
-msgstr "Date planifiée :"
-
-msgctxt "odt:stock.shipment.out.picking_list:"
-msgid "Product"
-msgstr "Produit"
-
-msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Product"
msgstr "Produit"
@@ -1927,14 +1729,6 @@ msgid "Quantity"
msgstr "Quantité"
msgctxt "odt:stock.shipment.out.picking_list:"
-msgid "Quantity"
-msgstr "Quantité"
-
-msgctxt "odt:stock.shipment.out.picking_list:"
-msgid "Reference:"
-msgstr "Référence :"
-
-msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Reference:"
msgstr "Référence :"
@@ -1943,14 +1737,6 @@ msgid "To Location"
msgstr "Emplacement de destination"
msgctxt "odt:stock.shipment.out.picking_list:"
-msgid "To Location"
-msgstr "Emplacement de destination"
-
-msgctxt "odt:stock.shipment.out.picking_list:"
-msgid "VAT Number:"
-msgstr "Numéro TVA :"
-
-msgctxt "odt:stock.shipment.out.picking_list:"
msgid "VAT Number:"
msgstr "Numéro TVA :"
@@ -1958,29 +1744,21 @@ msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Warehouse:"
msgstr "Entrepôt :"
-msgctxt "odt:stock.shipment.out.picking_list:"
-msgid "Warehouse:"
-msgstr "Entrepôt :"
-
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "/"
msgstr "/"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
-msgid "/"
-msgstr "/"
+msgid ":"
+msgstr ":"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Code:"
msgstr "Code :"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
-msgid "Code:"
-msgstr "Code :"
-
-msgctxt "odt:stock.shipment.out.return.restocking_list:"
-msgid "E-Mail:"
-msgstr "E-Mail :"
+msgid "Customer"
+msgstr "Client"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "E-Mail:"
@@ -1991,14 +1769,6 @@ msgid "From Location"
msgstr "Emplacement d'origine"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
-msgid "From Location"
-msgstr "Emplacement d'origine"
-
-msgctxt "odt:stock.shipment.out.return.restocking_list:"
-msgid "Phone:"
-msgstr "Téléphone :"
-
-msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Phone:"
msgstr "Téléphone :"
@@ -2007,14 +1777,6 @@ msgid "Planned Date:"
msgstr "Date planifiée :"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
-msgid "Planned Date:"
-msgstr "Date planifiée :"
-
-msgctxt "odt:stock.shipment.out.return.restocking_list:"
-msgid "Product"
-msgstr "Produit"
-
-msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Product"
msgstr "Produit"
@@ -2023,14 +1785,6 @@ msgid "Quantity"
msgstr "Quantité"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
-msgid "Quantity"
-msgstr "Quantité"
-
-msgctxt "odt:stock.shipment.out.return.restocking_list:"
-msgid "Reference:"
-msgstr "Référence :"
-
-msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Reference:"
msgstr "Référence :"
@@ -2039,30 +1793,10 @@ msgid "Restocking List"
msgstr "Liste de restockage"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
-msgid "Restocking List"
-msgstr "Liste de restockage"
-
-msgctxt "odt:stock.shipment.out.return.restocking_list:"
-msgid "Supplier:"
-msgstr "Fournisseur :"
-
-msgctxt "odt:stock.shipment.out.return.restocking_list:"
-msgid "Supplier:"
-msgstr "Fournisseur :"
-
-msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "To Location"
msgstr "Emplacement de destination"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
-msgid "To Location"
-msgstr "Emplacement de destination"
-
-msgctxt "odt:stock.shipment.out.return.restocking_list:"
-msgid "VAT Number:"
-msgstr "Numéro TVA :"
-
-msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "VAT Number:"
msgstr "Numéro TVA :"
@@ -2070,14 +1804,6 @@ msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Warehouse:"
msgstr "Entrepôt :"
-msgctxt "odt:stock.shipment.out.return.restocking_list:"
-msgid "Warehouse:"
-msgstr "Entrepôt :"
-
-msgctxt "selection:stock.inventory,state:"
-msgid "Canceled"
-msgstr "Annulé"
-
msgctxt "selection:stock.inventory,state:"
msgid "Canceled"
msgstr "Annulé"
@@ -2087,14 +1813,6 @@ msgid "Done"
msgstr "Fait"
msgctxt "selection:stock.inventory,state:"
-msgid "Done"
-msgstr "Fait"
-
-msgctxt "selection:stock.inventory,state:"
-msgid "Draft"
-msgstr "Brouillon"
-
-msgctxt "selection:stock.inventory,state:"
msgid "Draft"
msgstr "Brouillon"
@@ -2103,22 +1821,10 @@ msgid "Customer"
msgstr "Client"
msgctxt "selection:stock.location,type:"
-msgid "Customer"
-msgstr "Client"
-
-msgctxt "selection:stock.location,type:"
msgid "Lost and Found"
msgstr "Pertes et surplus"
msgctxt "selection:stock.location,type:"
-msgid "Lost and Found"
-msgstr "Pertes et surplus"
-
-msgctxt "selection:stock.location,type:"
-msgid "Production"
-msgstr "Production"
-
-msgctxt "selection:stock.location,type:"
msgid "Production"
msgstr "Production"
@@ -2127,14 +1833,6 @@ msgid "Storage"
msgstr "Magasin"
msgctxt "selection:stock.location,type:"
-msgid "Storage"
-msgstr "Magasin"
-
-msgctxt "selection:stock.location,type:"
-msgid "Supplier"
-msgstr "Fournisseur"
-
-msgctxt "selection:stock.location,type:"
msgid "Supplier"
msgstr "Fournisseur"
@@ -2143,14 +1841,6 @@ msgid "View"
msgstr "Vue"
msgctxt "selection:stock.location,type:"
-msgid "View"
-msgstr "Vue"
-
-msgctxt "selection:stock.location,type:"
-msgid "Warehouse"
-msgstr "Entrepôt"
-
-msgctxt "selection:stock.location,type:"
msgid "Warehouse"
msgstr "Entrepôt"
@@ -2159,22 +1849,10 @@ msgid "Assigned"
msgstr "Assigné"
msgctxt "selection:stock.move,state:"
-msgid "Assigned"
-msgstr "Assigné"
-
-msgctxt "selection:stock.move,state:"
msgid "Canceled"
msgstr "Annulé"
msgctxt "selection:stock.move,state:"
-msgid "Canceled"
-msgstr "Annulé"
-
-msgctxt "selection:stock.move,state:"
-msgid "Done"
-msgstr "Fait"
-
-msgctxt "selection:stock.move,state:"
msgid "Done"
msgstr "Fait"
@@ -2182,14 +1860,6 @@ msgctxt "selection:stock.move,state:"
msgid "Draft"
msgstr "Brouillon"
-msgctxt "selection:stock.move,state:"
-msgid "Draft"
-msgstr "Brouillon"
-
-msgctxt "selection:stock.period,state:"
-msgid "Closed"
-msgstr "Fermé"
-
msgctxt "selection:stock.period,state:"
msgid "Closed"
msgstr "Fermé"
@@ -2198,14 +1868,6 @@ msgctxt "selection:stock.period,state:"
msgid "Draft"
msgstr "Brouillon"
-msgctxt "selection:stock.period,state:"
-msgid "Draft"
-msgstr "Brouillon"
-
-msgctxt "selection:stock.shipment.in,state:"
-msgid "Canceled"
-msgstr "Annulé"
-
msgctxt "selection:stock.shipment.in,state:"
msgid "Canceled"
msgstr "Annulé"
@@ -2215,22 +1877,10 @@ msgid "Done"
msgstr "Fait"
msgctxt "selection:stock.shipment.in,state:"
-msgid "Done"
-msgstr "Fait"
-
-msgctxt "selection:stock.shipment.in,state:"
msgid "Draft"
msgstr "Brouillon"
msgctxt "selection:stock.shipment.in,state:"
-msgid "Draft"
-msgstr "Brouillon"
-
-msgctxt "selection:stock.shipment.in,state:"
-msgid "Received"
-msgstr "Reçu"
-
-msgctxt "selection:stock.shipment.in,state:"
msgid "Received"
msgstr "Reçu"
@@ -2239,14 +1889,6 @@ msgid "Assigned"
msgstr "Assigné"
msgctxt "selection:stock.shipment.in.return,state:"
-msgid "Assigned"
-msgstr "Assigné"
-
-msgctxt "selection:stock.shipment.in.return,state:"
-msgid "Canceled"
-msgstr "Annulé"
-
-msgctxt "selection:stock.shipment.in.return,state:"
msgid "Canceled"
msgstr "Annulé"
@@ -2255,14 +1897,6 @@ msgid "Done"
msgstr "Fait"
msgctxt "selection:stock.shipment.in.return,state:"
-msgid "Done"
-msgstr "Fait"
-
-msgctxt "selection:stock.shipment.in.return,state:"
-msgid "Draft"
-msgstr "Brouillon"
-
-msgctxt "selection:stock.shipment.in.return,state:"
msgid "Draft"
msgstr "Brouillon"
@@ -2270,23 +1904,11 @@ msgctxt "selection:stock.shipment.in.return,state:"
msgid "Waiting"
msgstr "En attente"
-msgctxt "selection:stock.shipment.in.return,state:"
-msgid "Waiting"
-msgstr "En attente"
-
msgctxt "selection:stock.shipment.internal,state:"
msgid "Assigned"
msgstr "Assigné"
msgctxt "selection:stock.shipment.internal,state:"
-msgid "Assigned"
-msgstr "Assigné"
-
-msgctxt "selection:stock.shipment.internal,state:"
-msgid "Canceled"
-msgstr "Annulé"
-
-msgctxt "selection:stock.shipment.internal,state:"
msgid "Canceled"
msgstr "Annulé"
@@ -2295,14 +1917,6 @@ msgid "Done"
msgstr "Fait"
msgctxt "selection:stock.shipment.internal,state:"
-msgid "Done"
-msgstr "Fait"
-
-msgctxt "selection:stock.shipment.internal,state:"
-msgid "Draft"
-msgstr "Brouillon"
-
-msgctxt "selection:stock.shipment.internal,state:"
msgid "Draft"
msgstr "Brouillon"
@@ -2310,14 +1924,6 @@ msgctxt "selection:stock.shipment.internal,state:"
msgid "Waiting"
msgstr "En attente"
-msgctxt "selection:stock.shipment.internal,state:"
-msgid "Waiting"
-msgstr "En attente"
-
-msgctxt "selection:stock.shipment.out,state:"
-msgid "Assigned"
-msgstr "Assigné"
-
msgctxt "selection:stock.shipment.out,state:"
msgid "Assigned"
msgstr "Assigné"
@@ -2327,22 +1933,10 @@ msgid "Canceled"
msgstr "Annulé"
msgctxt "selection:stock.shipment.out,state:"
-msgid "Canceled"
-msgstr "Annulé"
-
-msgctxt "selection:stock.shipment.out,state:"
msgid "Done"
msgstr "Fait"
msgctxt "selection:stock.shipment.out,state:"
-msgid "Done"
-msgstr "Fait"
-
-msgctxt "selection:stock.shipment.out,state:"
-msgid "Draft"
-msgstr "Brouillon"
-
-msgctxt "selection:stock.shipment.out,state:"
msgid "Draft"
msgstr "Brouillon"
@@ -2351,14 +1945,6 @@ msgid "Packed"
msgstr "Emballé"
msgctxt "selection:stock.shipment.out,state:"
-msgid "Packed"
-msgstr "Emballé"
-
-msgctxt "selection:stock.shipment.out,state:"
-msgid "Waiting"
-msgstr "En attente"
-
-msgctxt "selection:stock.shipment.out,state:"
msgid "Waiting"
msgstr "En attente"
@@ -2367,14 +1953,6 @@ msgid "Canceled"
msgstr "Annulé"
msgctxt "selection:stock.shipment.out.return,state:"
-msgid "Canceled"
-msgstr "Annulé"
-
-msgctxt "selection:stock.shipment.out.return,state:"
-msgid "Done"
-msgstr "Fait"
-
-msgctxt "selection:stock.shipment.out.return,state:"
msgid "Done"
msgstr "Fait"
@@ -2383,14 +1961,6 @@ msgid "Draft"
msgstr "Brouillon"
msgctxt "selection:stock.shipment.out.return,state:"
-msgid "Draft"
-msgstr "Brouillon"
-
-msgctxt "selection:stock.shipment.out.return,state:"
-msgid "Received"
-msgstr "Reçu"
-
-msgctxt "selection:stock.shipment.out.return,state:"
msgid "Received"
msgstr "Reçu"
@@ -2398,10 +1968,6 @@ msgctxt "view:party.party:"
msgid "Stock"
msgstr "Stock"
-msgctxt "view:party.party:"
-msgid "Stock"
-msgstr "Stock"
-
msgctxt "view:product.by_location.start:"
msgid "Product by Location"
msgstr "Produits par emplacement"
@@ -2410,14 +1976,6 @@ msgctxt "view:product.product:"
msgid "Products"
msgstr "Produits"
-msgctxt "view:product.product:"
-msgid "Products"
-msgstr "Produits"
-
-msgctxt "view:stock.configuration:"
-msgid "Stock Configuration"
-msgstr "Configuration des stocks"
-
msgctxt "view:stock.configuration:"
msgid "Stock Configuration"
msgstr "Configuration des stocks"
@@ -2427,21 +1985,9 @@ msgid "Inventory Line"
msgstr "Ligne d'inventaire"
msgctxt "view:stock.inventory.line:"
-msgid "Inventory Line"
-msgstr "Ligne d'inventaire"
-
-msgctxt "view:stock.inventory.line:"
msgid "Inventory Lines"
msgstr "Lignes d'inventaire"
-msgctxt "view:stock.inventory.line:"
-msgid "Inventory Lines"
-msgstr "Lignes d'inventaire"
-
-msgctxt "view:stock.inventory:"
-msgid "Add an inventory line for each missing products"
-msgstr "Ajouter une ligne d'inventaire pour chaque produit manquant"
-
msgctxt "view:stock.inventory:"
msgid "Add an inventory line for each missing products"
msgstr "Ajouter une ligne d'inventaire pour chaque produit manquant"
@@ -2451,14 +1997,6 @@ msgid "Cancel"
msgstr "Annuler"
msgctxt "view:stock.inventory:"
-msgid "Cancel"
-msgstr "Annuler"
-
-msgctxt "view:stock.inventory:"
-msgid "Complete Inventory"
-msgstr "Compléter l'inventaire"
-
-msgctxt "view:stock.inventory:"
msgid "Complete Inventory"
msgstr "Compléter l'inventaire"
@@ -2467,14 +2005,6 @@ msgid "Confirm"
msgstr "Confirmer"
msgctxt "view:stock.inventory:"
-msgid "Confirm"
-msgstr "Confirmer"
-
-msgctxt "view:stock.inventory:"
-msgid "Inventories"
-msgstr "Inventaires"
-
-msgctxt "view:stock.inventory:"
msgid "Inventories"
msgstr "Inventaires"
@@ -2482,14 +2012,6 @@ msgctxt "view:stock.inventory:"
msgid "Inventory"
msgstr "Inventaire"
-msgctxt "view:stock.inventory:"
-msgid "Inventory"
-msgstr "Inventaire"
-
-msgctxt "view:stock.location:"
-msgid "Location"
-msgstr "Emplacement"
-
msgctxt "view:stock.location:"
msgid "Location"
msgstr "Emplacement"
@@ -2502,23 +2024,11 @@ msgctxt "view:stock.location:"
msgid "Locations"
msgstr "Emplacements"
-msgctxt "view:stock.location:"
-msgid "Locations"
-msgstr "Emplacements"
-
msgctxt "view:stock.move:"
msgid "Move"
msgstr "Mouvement"
msgctxt "view:stock.move:"
-msgid "Move"
-msgstr "Mouvement"
-
-msgctxt "view:stock.move:"
-msgid "Moves"
-msgstr "Mouvements"
-
-msgctxt "view:stock.move:"
msgid "Moves"
msgstr "Mouvements"
@@ -2527,14 +2037,6 @@ msgid "Period Cache"
msgstr "Cache de la période"
msgctxt "view:stock.period.cache:"
-msgid "Period Cache"
-msgstr "Cache de la période"
-
-msgctxt "view:stock.period.cache:"
-msgid "Period Caches"
-msgstr "Caches des périodes"
-
-msgctxt "view:stock.period.cache:"
msgid "Period Caches"
msgstr "Caches des périodes"
@@ -2543,22 +2045,10 @@ msgid "Close"
msgstr "Fermer"
msgctxt "view:stock.period:"
-msgid "Close"
-msgstr "Fermer"
-
-msgctxt "view:stock.period:"
msgid "Draft"
msgstr "Brouillon"
msgctxt "view:stock.period:"
-msgid "Draft"
-msgstr "Brouillon"
-
-msgctxt "view:stock.period:"
-msgid "Period"
-msgstr "Période"
-
-msgctxt "view:stock.period:"
msgid "Period"
msgstr "Période"
@@ -2566,10 +2056,6 @@ msgctxt "view:stock.period:"
msgid "Periods"
msgstr "Périodes"
-msgctxt "view:stock.period:"
-msgid "Periods"
-msgstr "Périodes"
-
msgctxt "view:stock.product_quantities_warehouse.start:"
msgid "Product Quantities By Warehouse"
msgstr "Quantités de produit par entrepôt"
@@ -2595,22 +2081,10 @@ msgid "Assign"
msgstr "Assigner"
msgctxt "view:stock.shipment.in.return:"
-msgid "Assign"
-msgstr "Assigner"
-
-msgctxt "view:stock.shipment.in.return:"
msgid "Cancel"
msgstr "Annuler"
msgctxt "view:stock.shipment.in.return:"
-msgid "Cancel"
-msgstr "Annuler"
-
-msgctxt "view:stock.shipment.in.return:"
-msgid "Done"
-msgstr "Fait"
-
-msgctxt "view:stock.shipment.in.return:"
msgid "Done"
msgstr "Fait"
@@ -2619,56 +2093,28 @@ msgid "Draft"
msgstr "Brouillon"
msgctxt "view:stock.shipment.in.return:"
-msgid "Draft"
-msgstr "Brouillon"
-
-msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipment"
msgstr "Retour d'expédition fournisseur"
msgctxt "view:stock.shipment.in.return:"
-msgid "Supplier Return Shipment"
-msgstr "Retour d'expédition fournisseur"
-
-msgctxt "view:stock.shipment.in.return:"
-msgid "Supplier Return Shipments"
-msgstr "Retours d'expédition fournisseur"
-
-msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipments"
msgstr "Retours d'expédition fournisseur"
msgctxt "view:stock.shipment.in.return:"
msgid "Wait"
-msgstr "Attente"
+msgstr "Attendre"
msgctxt "view:stock.shipment.in:"
msgid "Cancel"
msgstr "Annuler"
msgctxt "view:stock.shipment.in:"
-msgid "Cancel"
-msgstr "Annuler"
-
-msgctxt "view:stock.shipment.in:"
-msgid "Done"
-msgstr "Fait"
-
-msgctxt "view:stock.shipment.in:"
msgid "Done"
msgstr "Fait"
msgctxt "view:stock.shipment.in:"
msgid "Incoming Moves"
-msgstr "Mouvements en entrée"
-
-msgctxt "view:stock.shipment.in:"
-msgid "Incoming Moves"
-msgstr "Mouvements en entrée"
-
-msgctxt "view:stock.shipment.in:"
-msgid "Inventory Moves"
-msgstr "Mouvements internes"
+msgstr "Mouvements entrants"
msgctxt "view:stock.shipment.in:"
msgid "Inventory Moves"
@@ -2676,11 +2122,7 @@ msgstr "Mouvements internes"
msgctxt "view:stock.shipment.in:"
msgid "Receive"
-msgstr "Réception"
-
-msgctxt "view:stock.shipment.in:"
-msgid "Reset to Draft"
-msgstr "Remettre en brouillon"
+msgstr "Recevoir"
msgctxt "view:stock.shipment.in:"
msgid "Reset to Draft"
@@ -2691,14 +2133,6 @@ msgid "Supplier Shipment"
msgstr "Expédition fournisseur"
msgctxt "view:stock.shipment.in:"
-msgid "Supplier Shipment"
-msgstr "Expédition fournisseur"
-
-msgctxt "view:stock.shipment.in:"
-msgid "Supplier Shipments"
-msgstr "Expéditions fournisseur"
-
-msgctxt "view:stock.shipment.in:"
msgid "Supplier Shipments"
msgstr "Expéditions fournisseur"
@@ -2715,14 +2149,6 @@ msgid "Assign"
msgstr "Assigner"
msgctxt "view:stock.shipment.internal:"
-msgid "Assign"
-msgstr "Assigner"
-
-msgctxt "view:stock.shipment.internal:"
-msgid "Cancel"
-msgstr "Annuler"
-
-msgctxt "view:stock.shipment.internal:"
msgid "Cancel"
msgstr "Annuler"
@@ -2731,22 +2157,10 @@ msgid "Done"
msgstr "Fait"
msgctxt "view:stock.shipment.internal:"
-msgid "Done"
-msgstr "Fait"
-
-msgctxt "view:stock.shipment.internal:"
msgid "Draft"
msgstr "Brouillon"
msgctxt "view:stock.shipment.internal:"
-msgid "Draft"
-msgstr "Brouillon"
-
-msgctxt "view:stock.shipment.internal:"
-msgid "Internal Shipment"
-msgstr "Expédition interne"
-
-msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipment"
msgstr "Expédition interne"
@@ -2755,14 +2169,6 @@ msgid "Internal Shipments"
msgstr "Expéditions internes"
msgctxt "view:stock.shipment.internal:"
-msgid "Internal Shipments"
-msgstr "Expéditions internes"
-
-msgctxt "view:stock.shipment.internal:"
-msgid "Waiting"
-msgstr "En attente"
-
-msgctxt "view:stock.shipment.internal:"
msgid "Waiting"
msgstr "En attente"
@@ -2779,14 +2185,6 @@ msgid "Cancel"
msgstr "Annuler"
msgctxt "view:stock.shipment.out.return:"
-msgid "Cancel"
-msgstr "Annuler"
-
-msgctxt "view:stock.shipment.out.return:"
-msgid "Customer Return Shipment"
-msgstr "Retour d'expédition client"
-
-msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipment"
msgstr "Retour d'expédition client"
@@ -2795,14 +2193,6 @@ msgid "Customer Return Shipments"
msgstr "Retours d'expédition client"
msgctxt "view:stock.shipment.out.return:"
-msgid "Customer Return Shipments"
-msgstr "Retours d'expédition client"
-
-msgctxt "view:stock.shipment.out.return:"
-msgid "Done"
-msgstr "Fait"
-
-msgctxt "view:stock.shipment.out.return:"
msgid "Done"
msgstr "Fait"
@@ -2815,22 +2205,10 @@ msgid "Incoming Moves"
msgstr "Mouvements entrants"
msgctxt "view:stock.shipment.out.return:"
-msgid "Incoming Moves"
-msgstr "Mouvements entrants"
-
-msgctxt "view:stock.shipment.out.return:"
msgid "Inventory Moves"
msgstr "Mouvements internes"
msgctxt "view:stock.shipment.out.return:"
-msgid "Inventory Moves"
-msgstr "Mouvements internes"
-
-msgctxt "view:stock.shipment.out.return:"
-msgid "Received"
-msgstr "Reçu"
-
-msgctxt "view:stock.shipment.out.return:"
msgid "Received"
msgstr "Reçu"
@@ -2839,14 +2217,6 @@ msgid "Assign"
msgstr "Assigner"
msgctxt "view:stock.shipment.out:"
-msgid "Assign"
-msgstr "Assigner"
-
-msgctxt "view:stock.shipment.out:"
-msgid "Cancel"
-msgstr "Annuler"
-
-msgctxt "view:stock.shipment.out:"
msgid "Cancel"
msgstr "Annuler"
@@ -2855,22 +2225,10 @@ msgid "Customer Shipment"
msgstr "Expédition client"
msgctxt "view:stock.shipment.out:"
-msgid "Customer Shipment"
-msgstr "Expédition client"
-
-msgctxt "view:stock.shipment.out:"
msgid "Customer Shipments"
msgstr "Expéditions client"
msgctxt "view:stock.shipment.out:"
-msgid "Customer Shipments"
-msgstr "Expéditions client"
-
-msgctxt "view:stock.shipment.out:"
-msgid "Done"
-msgstr "Fait"
-
-msgctxt "view:stock.shipment.out:"
msgid "Done"
msgstr "Fait"
@@ -2879,14 +2237,6 @@ msgid "Draft"
msgstr "Brouillon"
msgctxt "view:stock.shipment.out:"
-msgid "Draft"
-msgstr "Brouillon"
-
-msgctxt "view:stock.shipment.out:"
-msgid "Inventory Moves"
-msgstr "Mouvements internes"
-
-msgctxt "view:stock.shipment.out:"
msgid "Inventory Moves"
msgstr "Mouvements internes"
@@ -2895,20 +2245,8 @@ msgid "Make shipment"
msgstr "Faire l'expédition"
msgctxt "view:stock.shipment.out:"
-msgid "Make shipment"
-msgstr "Faire l'expédition"
-
-msgctxt "view:stock.shipment.out:"
msgid "Outgoing Moves"
-msgstr "Mouvements en sortie"
-
-msgctxt "view:stock.shipment.out:"
-msgid "Outgoing Moves"
-msgstr "Mouvements en sortie"
-
-msgctxt "view:stock.shipment.out:"
-msgid "Waiting"
-msgstr "En attente"
+msgstr "Mouvements sortants"
msgctxt "view:stock.shipment.out:"
msgid "Waiting"
diff --git a/locale/nl_NL.po b/locale/nl_NL.po
index 79691de..fcf82c8 100644
--- a/locale/nl_NL.po
+++ b/locale/nl_NL.po
@@ -12,12 +12,12 @@ msgctxt "error:stock.inventory.line:"
msgid "Line quantity must be positive."
msgstr ""
-msgctxt "error:stock.inventory.line:"
-msgid "Product must be unique by inventory."
+msgctxt "error:stock.inventory:"
+msgid "Inventory \"%s\" must be cancelled before deletion."
msgstr ""
msgctxt "error:stock.inventory:"
-msgid "Inventory \"%s\" must be cancelled before deletion."
+msgid "Line \"%s\" is not unique on Inventory \"%s\"."
msgstr ""
msgctxt "error:stock.location:"
@@ -53,9 +53,13 @@ msgid "You can not modify move \"%(move)s\" because period \"%(period)s\" is clo
msgstr ""
msgctxt "error:stock.move:"
+msgid "You can not modify stock move \"%s\" because it is in \"Assigned\" state."
+msgstr ""
+
+msgctxt "error:stock.move:"
msgid ""
-"You can not modify stock move \"%s\"because it is in \"Assigned\", \"Done\" "
-"or \"Cancel\" state."
+"You can not modify stock move \"%s\" because it is in \"Done\" or \"Cancel\""
+" state."
msgstr ""
msgctxt "error:stock.move:"
@@ -701,6 +705,10 @@ msgctxt "field:stock.shipment.in,moves:"
msgid "Moves"
msgstr "Boekingen"
+msgctxt "field:stock.shipment.in,origins:"
+msgid "Origins"
+msgstr ""
+
msgctxt "field:stock.shipment.in,planned_date:"
msgid "Planned Date"
msgstr ""
@@ -786,6 +794,10 @@ msgctxt "field:stock.shipment.in.return,moves:"
msgid "Moves"
msgstr "Boekingen"
+msgctxt "field:stock.shipment.in.return,origins:"
+msgid "Origins"
+msgstr ""
+
msgctxt "field:stock.shipment.in.return,planned_date:"
msgid "Planned Date"
msgstr ""
@@ -951,6 +963,10 @@ msgctxt "field:stock.shipment.out,moves:"
msgid "Moves"
msgstr "Boekingen"
+msgctxt "field:stock.shipment.out,origins:"
+msgid "Origins"
+msgstr ""
+
msgctxt "field:stock.shipment.out,outgoing_moves:"
msgid "Outgoing Moves"
msgstr ""
@@ -1056,6 +1072,10 @@ msgctxt "field:stock.shipment.out.return,moves:"
msgid "Moves"
msgstr "Boekingen"
+msgctxt "field:stock.shipment.out.return,origins:"
+msgid "Origins"
+msgstr ""
+
msgctxt "field:stock.shipment.out.return,planned_date:"
msgid "Planned Date"
msgstr ""
@@ -1827,11 +1847,20 @@ msgid "/"
msgstr ""
msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid ":"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Code:"
msgstr ""
#, fuzzy
msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "Customer"
+msgstr "Klant"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "E-Mail:"
msgstr "E-mail:"
@@ -1868,10 +1897,6 @@ msgid "Restocking List"
msgstr ""
msgctxt "odt:stock.shipment.out.return.restocking_list:"
-msgid "Supplier:"
-msgstr ""
-
-msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "To Location"
msgstr ""
diff --git a/locale/ru_RU.po b/locale/ru_RU.po
index ba0c4b5..d25fcea 100644
--- a/locale/ru_RU.po
+++ b/locale/ru_RU.po
@@ -14,14 +14,14 @@ msgctxt "error:stock.inventory.line:"
msgid "Line quantity must be positive."
msgstr "Количество в строке должно быть положительным."
-msgctxt "error:stock.inventory.line:"
-msgid "Product must be unique by inventory."
-msgstr "Продукты должны быть уникальны в инвентаризации."
-
msgctxt "error:stock.inventory:"
msgid "Inventory \"%s\" must be cancelled before deletion."
msgstr "Инвентаризация \"%s\" должна быть отменена перед удалением."
+msgctxt "error:stock.inventory:"
+msgid "Line \"%s\" is not unique on Inventory \"%s\"."
+msgstr ""
+
msgctxt "error:stock.location:"
msgid "Location \"%(location)s\" must be a child of warehouse \"%(warehouse)s\"."
msgstr ""
@@ -63,12 +63,14 @@ msgstr ""
" уже закрыт."
msgctxt "error:stock.move:"
+msgid "You can not modify stock move \"%s\" because it is in \"Assigned\" state."
+msgstr ""
+
+msgctxt "error:stock.move:"
msgid ""
-"You can not modify stock move \"%s\"because it is in \"Assigned\", \"Done\" "
-"or \"Cancel\" state."
+"You can not modify stock move \"%s\" because it is in \"Done\" or \"Cancel\""
+" state."
msgstr ""
-"Вы не можете изменить проводку \"%s\" так как она находится в состоянии "
-"\"Передана\", \"Выполнена\" или \"Отменена\"."
msgctxt "error:stock.move:"
msgid "You can not set stock move \"%s\" to assigned state."
@@ -669,6 +671,10 @@ msgctxt "field:stock.shipment.in,moves:"
msgid "Moves"
msgstr "Перемещения"
+msgctxt "field:stock.shipment.in,origins:"
+msgid "Origins"
+msgstr ""
+
msgctxt "field:stock.shipment.in,planned_date:"
msgid "Planned Date"
msgstr "Плановая дата"
@@ -745,6 +751,10 @@ msgctxt "field:stock.shipment.in.return,moves:"
msgid "Moves"
msgstr "Перемещения"
+msgctxt "field:stock.shipment.in.return,origins:"
+msgid "Origins"
+msgstr ""
+
msgctxt "field:stock.shipment.in.return,planned_date:"
msgid "Planned Date"
msgstr "Плановая дата"
@@ -893,6 +903,10 @@ msgctxt "field:stock.shipment.out,moves:"
msgid "Moves"
msgstr "Перемещения"
+msgctxt "field:stock.shipment.out,origins:"
+msgid "Origins"
+msgstr ""
+
msgctxt "field:stock.shipment.out,outgoing_moves:"
msgid "Outgoing Moves"
msgstr "Внешнее перемещение"
@@ -989,6 +1003,10 @@ msgctxt "field:stock.shipment.out.return,moves:"
msgid "Moves"
msgstr "Перемещения"
+msgctxt "field:stock.shipment.out.return,origins:"
+msgid "Origins"
+msgstr ""
+
msgctxt "field:stock.shipment.out.return,planned_date:"
msgid "Planned Date"
msgstr "Плановая дата"
@@ -1718,9 +1736,18 @@ msgid "/"
msgstr "/"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid ":"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Code:"
msgstr "Код:"
+#, fuzzy
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "Customer"
+msgstr "Заказчик"
+
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "E-Mail:"
msgstr "Эл.почта:"
@@ -1754,10 +1781,6 @@ msgid "Restocking List"
msgstr "Список пополнения"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
-msgid "Supplier:"
-msgstr "Поставщик:"
-
-msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "To Location"
msgstr "В местоположение"
diff --git a/locale/nl_NL.po b/locale/sl_SI.po
similarity index 74%
copy from locale/nl_NL.po
copy to locale/sl_SI.po
index 79691de..bb7bee4 100644
--- a/locale/nl_NL.po
+++ b/locale/sl_SI.po
@@ -7,1102 +7,1050 @@ msgid ""
"You cannot change the default uom for a product which is associated to stock"
" moves."
msgstr ""
+"Privzete ME za izdelek, ki je povezan s prometom zaloge, ni možno "
+"spreminjati."
msgctxt "error:stock.inventory.line:"
msgid "Line quantity must be positive."
-msgstr ""
-
-msgctxt "error:stock.inventory.line:"
-msgid "Product must be unique by inventory."
-msgstr ""
+msgstr "Količina postavke mora biti večja od nič."
msgctxt "error:stock.inventory:"
msgid "Inventory \"%s\" must be cancelled before deletion."
-msgstr ""
+msgstr "Popis \"%s\" mora biti pred brisanjem preklican."
+
+msgctxt "error:stock.inventory:"
+msgid "Line \"%s\" is not unique on Inventory \"%s\"."
+msgstr "Postavka \"%s\" ni edinstvena na popis \"%s\"."
msgctxt "error:stock.location:"
msgid "Location \"%(location)s\" must be a child of warehouse \"%(warehouse)s\"."
-msgstr ""
+msgstr "Lokacija \"%(location)s\" mora biti pod skladiščem \"%(warehouse)s\"."
msgctxt "error:stock.location:"
msgid ""
"Location \"%s\" with existing moves cannot be changed to a type that does "
"not support moves."
msgstr ""
+"Lokacije \"%s\" z obstoječim prometom ni možno pretvoriti v lokacijo, ki ne "
+"podpira prometa."
msgctxt "error:stock.move:"
msgid "Internal move quantity must be positive"
-msgstr ""
+msgstr "Količina notranjega prometa mora biti večja od nič."
msgctxt "error:stock.move:"
msgid "Move quantity must be positive"
-msgstr ""
+msgstr "Količina prometa mora biti večja od nič."
msgctxt "error:stock.move:"
msgid "Source and destination location must be different"
-msgstr ""
+msgstr "Izvorna in ciljna lokacija mora biti različni."
msgctxt "error:stock.move:"
msgid ""
"You can not delete stock move \"%s\" because it is not in draft or cancelled"
" state."
msgstr ""
+"Prometa zaloge \"%s\" ni možno brisati, ker ni v stanju osnutka ali "
+"preklica."
msgctxt "error:stock.move:"
msgid "You can not modify move \"%(move)s\" because period \"%(period)s\" is closed."
msgstr ""
+"Prometa \"%(move)s\" ni možno popravljati, ker je obdobje \"%(period)s\" "
+"zaključeno."
+
+msgctxt "error:stock.move:"
+msgid "You can not modify stock move \"%s\" because it is in \"Assigned\" state."
+msgstr "Prometa zaloge \"%s\" ni možno popravljati, ker je dodeljen."
msgctxt "error:stock.move:"
msgid ""
-"You can not modify stock move \"%s\"because it is in \"Assigned\", \"Done\" "
-"or \"Cancel\" state."
+"You can not modify stock move \"%s\" because it is in \"Done\" or \"Cancel\""
+" state."
msgstr ""
+"Prometa zaloge \"%s\" ni možno popravljati, ker je bodisi zaključen bodisi "
+"preklican."
msgctxt "error:stock.move:"
msgid "You can not set stock move \"%s\" to assigned state."
-msgstr ""
+msgstr "Prometa zaloge \"%s\" ni možno postaviti v stanje \"dodeljeno\". "
msgctxt "error:stock.move:"
msgid "You can not set stock move \"%s\" to done state."
-msgstr ""
+msgstr "Prometa zaloge \"%s\" ni možno postaviti v stanje \"končano\". "
msgctxt "error:stock.move:"
msgid "You can not set stock move \"%s\" to draft state."
-msgstr ""
+msgstr "Prometa zaloge \"%s\" ni možno postaviti v stanje \"osnutek\". "
msgctxt "error:stock.period:"
msgid "You can not close a period in the future or today."
-msgstr ""
+msgstr "Obdobja ni možno zaključiti v prihodnosti ali na današnji dan."
msgctxt "error:stock.period:"
msgid "You can not close a period when there still are assigned moves."
msgstr ""
+"Obdobja ni možno zaključiti, če še vedno obstaja promet v stanju "
+"\"dodeljeno\"."
msgctxt "error:stock.shipment.in.return:"
msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion."
-msgstr ""
+msgstr "Vrnjena prevzemnica \"%s\" mora biti pred brisanjem preklicana."
msgctxt "error:stock.shipment.in:"
msgid ""
"Incoming Moves must have the warehouse input location as destination "
"location."
msgstr ""
+"Vhodni promet mora imeti za ciljno lokacijo lokacijo prevzema v skladišče."
msgctxt "error:stock.shipment.in:"
msgid ""
"Inventory Moves must have the warehouse input location as source location."
msgstr ""
+"Inventarni promet mora imeti za izvorno lokacijo lokacijo prevzema v "
+"skladišče."
msgctxt "error:stock.shipment.in:"
msgid "Supplier Shipment \"%s\" must be cancelled before deletion."
-msgstr ""
+msgstr "Prevzemnica \"%s\" mora biti pred brisanjem preklicana."
msgctxt "error:stock.shipment.internal:"
msgid "Internal Shipment \"%s\" must be cancelled before deletion."
-msgstr ""
+msgstr "Notranja odpremnica \"%s\" mora biti pred brisanjem preklicana."
msgctxt "error:stock.shipment.out.return.create:"
msgid "The shipment with code \"%s\" is not yet sent."
-msgstr ""
+msgstr "Pošiljka s šifro \"%s\" še ni odposlana."
msgctxt "error:stock.shipment.out.return.create:"
msgid "You can not create return shipment"
-msgstr ""
+msgstr "Vrnjene pošiljke ni možno izdelati."
msgctxt "error:stock.shipment.out.return:"
msgid "Customer Return Shipment \"%s\" must be cancelled before deletion."
-msgstr ""
+msgstr "Vrnjena odpremnica \"%s\" mora biti pred brisanjem preklicana."
msgctxt "error:stock.shipment.out:"
msgid "Customer Shipment \"%s\" must be cancelled before deletion."
-msgstr ""
+msgstr "Odpremnica \"%s\" mora biti pred brisanjem preklicana."
msgctxt "field:party.address,delivery:"
msgid "Delivery"
-msgstr ""
+msgstr "Dostava"
msgctxt "field:party.party,customer_location:"
msgid "Customer Location"
-msgstr ""
+msgstr "Lokacija kupca"
msgctxt "field:party.party,supplier_location:"
msgid "Supplier Location"
-msgstr ""
+msgstr "Lokacija dobavitelja"
msgctxt "field:product.by_location.start,forecast_date:"
msgid "At Date"
-msgstr ""
+msgstr "Na datum"
msgctxt "field:product.by_location.start,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:product.product,cost_value:"
msgid "Cost Value"
-msgstr ""
+msgstr "Nabavna vrednost"
msgctxt "field:product.product,forecast_quantity:"
msgid "Forecast Quantity"
-msgstr ""
+msgstr "Predvidena količina"
-#, fuzzy
msgctxt "field:product.product,quantity:"
msgid "Quantity"
-msgstr "Hoeveelheid"
+msgstr "Količina"
msgctxt "field:product.template,cost_value:"
msgid "Cost Value"
-msgstr ""
+msgstr "Nabavna vrednost"
msgctxt "field:product.template,forecast_quantity:"
msgid "Forecast Quantity"
-msgstr ""
+msgstr "Predvidena količina"
-#, fuzzy
msgctxt "field:product.template,quantity:"
msgid "Quantity"
-msgstr "Hoeveelheid"
+msgstr "Količina"
msgctxt "field:stock.configuration,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Ustvarjeno"
msgctxt "field:stock.configuration,create_uid:"
msgid "Create User"
-msgstr ""
+msgstr "Ustvaril"
msgctxt "field:stock.configuration,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
-#, fuzzy
msgctxt "field:stock.configuration,rec_name:"
msgid "Name"
-msgstr "Naam bijlage"
+msgstr "Ime"
msgctxt "field:stock.configuration,shipment_in_return_sequence:"
msgid "Supplier Return Shipment Sequence"
-msgstr ""
+msgstr "Štetje vrnjenih prevzemnic"
msgctxt "field:stock.configuration,shipment_in_sequence:"
msgid "Supplier Shipment Sequence"
-msgstr ""
+msgstr "Štetje prevzemnic"
msgctxt "field:stock.configuration,shipment_internal_sequence:"
msgid "Internal Shipment Sequence"
-msgstr ""
+msgstr "Štetje notranjih odpremnic"
msgctxt "field:stock.configuration,shipment_out_return_sequence:"
msgid "Customer Return Shipment Sequence"
-msgstr ""
+msgstr "Štetje vrnjenih odpremnic"
msgctxt "field:stock.configuration,shipment_out_sequence:"
msgid "Customer Shipment Sequence"
-msgstr ""
+msgstr "Štetje odpremnic"
msgctxt "field:stock.configuration,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Zapisano"
msgctxt "field:stock.configuration,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Zapisal"
-#, fuzzy
msgctxt "field:stock.inventory,company:"
msgid "Company"
-msgstr "Bedrijf"
+msgstr "Podjetje"
msgctxt "field:stock.inventory,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Ustvarjeno"
msgctxt "field:stock.inventory,create_uid:"
msgid "Create User"
-msgstr ""
+msgstr "Ustvaril"
-#, fuzzy
msgctxt "field:stock.inventory,date:"
msgid "Date"
-msgstr "Vervaldatum"
+msgstr "Datum"
msgctxt "field:stock.inventory,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
-#, fuzzy
msgctxt "field:stock.inventory,lines:"
msgid "Lines"
-msgstr "Regels"
+msgstr "Postavke"
msgctxt "field:stock.inventory,location:"
msgid "Location"
-msgstr ""
+msgstr "Lokacija"
msgctxt "field:stock.inventory,lost_found:"
msgid "Lost and Found"
-msgstr ""
+msgstr "Izgubljeno/najdeno"
-#, fuzzy
msgctxt "field:stock.inventory,rec_name:"
msgid "Name"
-msgstr "Naam bijlage"
+msgstr "Ime"
-#, fuzzy
msgctxt "field:stock.inventory,state:"
msgid "State"
-msgstr "Status"
+msgstr "Stanje"
msgctxt "field:stock.inventory,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Zapisano"
msgctxt "field:stock.inventory,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Zapisal"
msgctxt "field:stock.inventory.line,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Ustvarjeno"
msgctxt "field:stock.inventory.line,create_uid:"
msgid "Create User"
-msgstr ""
+msgstr "Ustvaril"
msgctxt "field:stock.inventory.line,expected_quantity:"
msgid "Expected Quantity"
-msgstr ""
+msgstr "Predvidena količina"
msgctxt "field:stock.inventory.line,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.inventory.line,inventory:"
msgid "Inventory"
-msgstr ""
+msgstr "Popis"
-#, fuzzy
msgctxt "field:stock.inventory.line,move:"
msgid "Move"
-msgstr "Boeking"
+msgstr "Promet"
-#, fuzzy
msgctxt "field:stock.inventory.line,product:"
msgid "Product"
-msgstr "Producten"
+msgstr "Izdelek"
-#, fuzzy
msgctxt "field:stock.inventory.line,quantity:"
msgid "Quantity"
-msgstr "Hoeveelheid"
+msgstr "Količina"
-#, fuzzy
msgctxt "field:stock.inventory.line,rec_name:"
msgid "Name"
-msgstr "Naam bijlage"
+msgstr "Ime"
-#, fuzzy
msgctxt "field:stock.inventory.line,unit_digits:"
msgid "Unit Digits"
-msgstr "Decimalen eenheid"
+msgstr "Decimalke"
msgctxt "field:stock.inventory.line,uom:"
msgid "UOM"
-msgstr ""
+msgstr "ME"
msgctxt "field:stock.inventory.line,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Zapisano"
msgctxt "field:stock.inventory.line,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Zapisal"
-#, fuzzy
msgctxt "field:stock.location,active:"
msgid "Active"
-msgstr "Actief"
+msgstr "Aktivno"
-#, fuzzy
msgctxt "field:stock.location,address:"
msgid "Address"
-msgstr "Adres"
+msgstr "Naslov"
-#, fuzzy
msgctxt "field:stock.location,childs:"
msgid "Children"
-msgstr "Onderliggende niveaus"
+msgstr "Podlokacije"
-#, fuzzy
msgctxt "field:stock.location,code:"
msgid "Code"
-msgstr "Code"
+msgstr "Šifra"
msgctxt "field:stock.location,cost_value:"
msgid "Cost Value"
-msgstr ""
+msgstr "Nabavna vrednost"
msgctxt "field:stock.location,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Ustvarjeno"
msgctxt "field:stock.location,create_uid:"
msgid "Create User"
-msgstr ""
+msgstr "Ustvaril"
msgctxt "field:stock.location,forecast_quantity:"
msgid "Forecast Quantity"
-msgstr ""
+msgstr "Predvidena količina"
msgctxt "field:stock.location,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.location,input_location:"
msgid "Input"
-msgstr ""
+msgstr "Prevzem"
-#, fuzzy
msgctxt "field:stock.location,left:"
msgid "Left"
-msgstr "Links"
+msgstr "Levo"
-#, fuzzy
msgctxt "field:stock.location,name:"
msgid "Name"
-msgstr "Naam bijlage"
+msgstr "Naziv"
msgctxt "field:stock.location,output_location:"
msgid "Output"
-msgstr ""
+msgstr "Izdaja"
-#, fuzzy
msgctxt "field:stock.location,parent:"
msgid "Parent"
-msgstr "Bovenliggend niveau"
+msgstr "Matična lokacija"
-#, fuzzy
msgctxt "field:stock.location,quantity:"
msgid "Quantity"
-msgstr "Hoeveelheid"
+msgstr "Količina"
-#, fuzzy
msgctxt "field:stock.location,rec_name:"
msgid "Name"
-msgstr "Naam bijlage"
+msgstr "Ime"
-#, fuzzy
msgctxt "field:stock.location,right:"
msgid "Right"
-msgstr "Rechts"
+msgstr "Desno"
msgctxt "field:stock.location,storage_location:"
msgid "Storage"
-msgstr ""
+msgstr "Shramba"
msgctxt "field:stock.location,type:"
msgid "Location type"
-msgstr ""
+msgstr "Tip lokacije"
msgctxt "field:stock.location,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Zapisano"
msgctxt "field:stock.location,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Zapisal"
-#, fuzzy
msgctxt "field:stock.move,company:"
msgid "Company"
-msgstr "Bedrijf"
+msgstr "Podjetje"
-#, fuzzy
msgctxt "field:stock.move,cost_price:"
msgid "Cost Price"
-msgstr "Kostprijs"
+msgstr "Nabavna cena"
msgctxt "field:stock.move,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Ustvarjeno"
msgctxt "field:stock.move,create_uid:"
msgid "Create User"
-msgstr ""
+msgstr "Ustvaril"
-#, fuzzy
msgctxt "field:stock.move,currency:"
msgid "Currency"
msgstr "Valuta"
-#, fuzzy
msgctxt "field:stock.move,effective_date:"
msgid "Effective Date"
-msgstr "Effectieve datum"
+msgstr "Dejanski datum"
msgctxt "field:stock.move,from_location:"
msgid "From Location"
-msgstr ""
+msgstr "Iz lokacije"
msgctxt "field:stock.move,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.move,internal_quantity:"
msgid "Internal Quantity"
-msgstr ""
+msgstr "Notranja količina"
msgctxt "field:stock.move,origin:"
msgid "Origin"
-msgstr ""
+msgstr "Poreklo"
msgctxt "field:stock.move,planned_date:"
msgid "Planned Date"
-msgstr ""
+msgstr "Načrtovan datum"
-#, fuzzy
msgctxt "field:stock.move,product:"
msgid "Product"
-msgstr "Producten"
+msgstr "Izdelek"
msgctxt "field:stock.move,product_uom_category:"
msgid "Product Uom Category"
-msgstr ""
+msgstr "Katerogija ME izdelka"
-#, fuzzy
msgctxt "field:stock.move,quantity:"
msgid "Quantity"
-msgstr "Hoeveelheid"
+msgstr "Količina"
-#, fuzzy
msgctxt "field:stock.move,rec_name:"
msgid "Name"
-msgstr "Naam bijlage"
+msgstr "Ime"
msgctxt "field:stock.move,shipment:"
msgid "Shipment"
-msgstr ""
+msgstr "Pošiljka"
-#, fuzzy
msgctxt "field:stock.move,state:"
msgid "State"
-msgstr "Status"
+msgstr "Stanje"
msgctxt "field:stock.move,to_location:"
msgid "To Location"
-msgstr ""
+msgstr "Na lokacijo"
-#, fuzzy
msgctxt "field:stock.move,unit_digits:"
msgid "Unit Digits"
-msgstr "Decimalen eenheid"
+msgstr "Decimalke"
-#, fuzzy
msgctxt "field:stock.move,unit_price:"
msgid "Unit Price"
-msgstr "Eenheidsprijs"
+msgstr "Cena"
msgctxt "field:stock.move,unit_price_required:"
msgid "Unit Price Required"
-msgstr ""
+msgstr "Cena obvezna"
msgctxt "field:stock.move,uom:"
msgid "Uom"
-msgstr ""
+msgstr "ME"
msgctxt "field:stock.move,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Zapisano"
msgctxt "field:stock.move,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Zapisal"
msgctxt "field:stock.period,caches:"
msgid "Caches"
-msgstr ""
+msgstr "Predpomnjenja"
-#, fuzzy
msgctxt "field:stock.period,company:"
msgid "Company"
-msgstr "Bedrijf"
+msgstr "Podjetje"
msgctxt "field:stock.period,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Ustvarjeno"
msgctxt "field:stock.period,create_uid:"
msgid "Create User"
-msgstr ""
+msgstr "Ustvaril"
-#, fuzzy
msgctxt "field:stock.period,date:"
msgid "Date"
-msgstr "Vervaldatum"
+msgstr "Datum"
msgctxt "field:stock.period,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
-#, fuzzy
msgctxt "field:stock.period,rec_name:"
msgid "Name"
-msgstr "Naam bijlage"
+msgstr "Ime"
-#, fuzzy
msgctxt "field:stock.period,state:"
msgid "State"
-msgstr "Status"
+msgstr "Stanje"
msgctxt "field:stock.period,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Zapisano"
msgctxt "field:stock.period,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Zapisal"
msgctxt "field:stock.period.cache,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Ustvarjeno"
msgctxt "field:stock.period.cache,create_uid:"
msgid "Create User"
-msgstr ""
+msgstr "Ustvaril"
msgctxt "field:stock.period.cache,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.period.cache,internal_quantity:"
msgid "Internal Quantity"
-msgstr ""
+msgstr "Notranja količina"
msgctxt "field:stock.period.cache,location:"
msgid "Location"
-msgstr ""
+msgstr "Lokacija"
-#, fuzzy
msgctxt "field:stock.period.cache,period:"
msgid "Period"
-msgstr "Periode"
+msgstr "Obdobje"
-#, fuzzy
msgctxt "field:stock.period.cache,product:"
msgid "Product"
-msgstr "Producten"
+msgstr "Izdelek"
-#, fuzzy
msgctxt "field:stock.period.cache,rec_name:"
msgid "Name"
-msgstr "Naam bijlage"
+msgstr "Ime"
msgctxt "field:stock.period.cache,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Zapisano"
msgctxt "field:stock.period.cache,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Zapisal"
msgctxt "field:stock.product_quantities_warehouse,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Ustvarjeno"
msgctxt "field:stock.product_quantities_warehouse,create_uid:"
msgid "Create User"
-msgstr ""
+msgstr "Ustvaril"
-#, fuzzy
msgctxt "field:stock.product_quantities_warehouse,date:"
msgid "Date"
-msgstr "Vervaldatum"
+msgstr "Datum"
msgctxt "field:stock.product_quantities_warehouse,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
-#, fuzzy
msgctxt "field:stock.product_quantities_warehouse,quantity:"
msgid "Quantity"
-msgstr "Hoeveelheid"
+msgstr "Količina"
-#, fuzzy
msgctxt "field:stock.product_quantities_warehouse,rec_name:"
msgid "Name"
-msgstr "Naam bijlage"
+msgstr "Ime"
msgctxt "field:stock.product_quantities_warehouse,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Zapisano"
msgctxt "field:stock.product_quantities_warehouse,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Zapisal"
msgctxt "field:stock.product_quantities_warehouse.start,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
-#, fuzzy
msgctxt "field:stock.product_quantities_warehouse.start,warehouse:"
msgid "Warehouse"
-msgstr "Magazijn"
+msgstr "Skladišče"
msgctxt "field:stock.products_by_locations.start,forecast_date:"
msgid "At Date"
-msgstr ""
+msgstr "Na datum"
msgctxt "field:stock.products_by_locations.start,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
-#, fuzzy
msgctxt "field:stock.shipment.in,code:"
msgid "Code"
-msgstr "Code"
+msgstr "Šifra"
-#, fuzzy
msgctxt "field:stock.shipment.in,company:"
msgid "Company"
-msgstr "Bedrijf"
+msgstr "Podjetje"
msgctxt "field:stock.shipment.in,contact_address:"
msgid "Contact Address"
-msgstr ""
+msgstr "Kontakt"
msgctxt "field:stock.shipment.in,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Ustvarjeno"
msgctxt "field:stock.shipment.in,create_uid:"
msgid "Create User"
-msgstr ""
+msgstr "Ustvaril"
-#, fuzzy
msgctxt "field:stock.shipment.in,effective_date:"
msgid "Effective Date"
-msgstr "Effectieve datum"
+msgstr "Dejanski datum"
msgctxt "field:stock.shipment.in,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.shipment.in,incoming_moves:"
msgid "Incoming Moves"
-msgstr ""
+msgstr "Vhodni promet"
msgctxt "field:stock.shipment.in,inventory_moves:"
msgid "Inventory Moves"
-msgstr ""
+msgstr "Notranji promet"
-#, fuzzy
msgctxt "field:stock.shipment.in,moves:"
msgid "Moves"
-msgstr "Boekingen"
+msgstr "Promet"
+
+msgctxt "field:stock.shipment.in,origins:"
+msgid "Origins"
+msgstr "Porekla"
msgctxt "field:stock.shipment.in,planned_date:"
msgid "Planned Date"
-msgstr ""
+msgstr "Načrtovan datum"
-#, fuzzy
msgctxt "field:stock.shipment.in,rec_name:"
msgid "Name"
-msgstr "Naam bijlage"
+msgstr "Ime"
-#, fuzzy
msgctxt "field:stock.shipment.in,reference:"
msgid "Reference"
-msgstr "Referentie"
+msgstr "Sklic"
-#, fuzzy
msgctxt "field:stock.shipment.in,state:"
msgid "State"
-msgstr "Status"
+msgstr "Stanje"
-#, fuzzy
msgctxt "field:stock.shipment.in,supplier:"
msgid "Supplier"
-msgstr "Leverancier"
+msgstr "Dobavitelj"
msgctxt "field:stock.shipment.in,supplier_location:"
msgid "Supplier Location"
-msgstr ""
+msgstr "Lokacija dobavitelja"
-#, fuzzy
msgctxt "field:stock.shipment.in,warehouse:"
msgid "Warehouse"
-msgstr "Magazijn"
+msgstr "Skladišče"
msgctxt "field:stock.shipment.in,warehouse_input:"
msgid "Warehouse Input"
-msgstr ""
+msgstr "Prevzem v skladišče"
msgctxt "field:stock.shipment.in,warehouse_storage:"
msgid "Warehouse Storage"
-msgstr ""
+msgstr "Shramba v skladišče"
msgctxt "field:stock.shipment.in,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Zapisano"
msgctxt "field:stock.shipment.in,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Zapisal"
-#, fuzzy
msgctxt "field:stock.shipment.in.return,code:"
msgid "Code"
-msgstr "Code"
+msgstr "Šifra"
-#, fuzzy
msgctxt "field:stock.shipment.in.return,company:"
msgid "Company"
-msgstr "Bedrijf"
+msgstr "Podjetje"
msgctxt "field:stock.shipment.in.return,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Ustvarjeno"
msgctxt "field:stock.shipment.in.return,create_uid:"
msgid "Create User"
-msgstr ""
+msgstr "Ustvaril"
-#, fuzzy
msgctxt "field:stock.shipment.in.return,effective_date:"
msgid "Effective Date"
-msgstr "Effectieve datum"
+msgstr "Dejanski datum"
msgctxt "field:stock.shipment.in.return,from_location:"
msgid "From Location"
-msgstr ""
+msgstr "Iz lokacije"
msgctxt "field:stock.shipment.in.return,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
-#, fuzzy
msgctxt "field:stock.shipment.in.return,moves:"
msgid "Moves"
-msgstr "Boekingen"
+msgstr "Promet"
+
+msgctxt "field:stock.shipment.in.return,origins:"
+msgid "Origins"
+msgstr "Porekla"
msgctxt "field:stock.shipment.in.return,planned_date:"
msgid "Planned Date"
-msgstr ""
+msgstr "Načrtovan datum"
-#, fuzzy
msgctxt "field:stock.shipment.in.return,rec_name:"
msgid "Name"
-msgstr "Naam bijlage"
+msgstr "Ime"
-#, fuzzy
msgctxt "field:stock.shipment.in.return,reference:"
msgid "Reference"
-msgstr "Referentie"
+msgstr "Sklic"
-#, fuzzy
msgctxt "field:stock.shipment.in.return,state:"
msgid "State"
-msgstr "Status"
+msgstr "Stanje"
msgctxt "field:stock.shipment.in.return,to_location:"
msgid "To Location"
-msgstr ""
+msgstr "Na lokacijo"
msgctxt "field:stock.shipment.in.return,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Zapisano"
msgctxt "field:stock.shipment.in.return,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Zapisal"
msgctxt "field:stock.shipment.in.return.assign.failed,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
-#, fuzzy
msgctxt "field:stock.shipment.in.return.assign.failed,moves:"
msgid "Moves"
-msgstr "Boekingen"
+msgstr "Promet"
-#, fuzzy
msgctxt "field:stock.shipment.internal,code:"
msgid "Code"
-msgstr "Code"
+msgstr "Šifra"
-#, fuzzy
msgctxt "field:stock.shipment.internal,company:"
msgid "Company"
-msgstr "Bedrijf"
+msgstr "Podjetje"
msgctxt "field:stock.shipment.internal,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Ustvarjeno"
msgctxt "field:stock.shipment.internal,create_uid:"
msgid "Create User"
-msgstr ""
+msgstr "Ustvaril"
-#, fuzzy
msgctxt "field:stock.shipment.internal,effective_date:"
msgid "Effective Date"
-msgstr "Effectieve datum"
+msgstr "Dejanski datum"
msgctxt "field:stock.shipment.internal,from_location:"
msgid "From Location"
-msgstr ""
+msgstr "Iz lokacije"
msgctxt "field:stock.shipment.internal,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
-#, fuzzy
msgctxt "field:stock.shipment.internal,moves:"
msgid "Moves"
-msgstr "Boekingen"
+msgstr "Promet"
msgctxt "field:stock.shipment.internal,planned_date:"
msgid "Planned Date"
-msgstr ""
+msgstr "Načrtovan datum"
-#, fuzzy
msgctxt "field:stock.shipment.internal,rec_name:"
msgid "Name"
-msgstr "Naam bijlage"
+msgstr "Ime"
-#, fuzzy
msgctxt "field:stock.shipment.internal,reference:"
msgid "Reference"
-msgstr "Referentie"
+msgstr "Sklic"
-#, fuzzy
msgctxt "field:stock.shipment.internal,state:"
msgid "State"
-msgstr "Status"
+msgstr "Stanje"
msgctxt "field:stock.shipment.internal,to_location:"
msgid "To Location"
-msgstr ""
+msgstr "Na lokacijo"
msgctxt "field:stock.shipment.internal,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Zapisano"
msgctxt "field:stock.shipment.internal,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Zapisal"
msgctxt "field:stock.shipment.internal.assign.failed,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
-#, fuzzy
msgctxt "field:stock.shipment.internal.assign.failed,moves:"
msgid "Moves"
-msgstr "Boekingen"
+msgstr "Promet"
-#, fuzzy
msgctxt "field:stock.shipment.out,code:"
msgid "Code"
-msgstr "Code"
+msgstr "Šifra"
-#, fuzzy
msgctxt "field:stock.shipment.out,company:"
msgid "Company"
-msgstr "Bedrijf"
+msgstr "Podjetje"
msgctxt "field:stock.shipment.out,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Ustvarjeno"
msgctxt "field:stock.shipment.out,create_uid:"
msgid "Create User"
-msgstr ""
+msgstr "Ustvaril"
-#, fuzzy
msgctxt "field:stock.shipment.out,customer:"
msgid "Customer"
-msgstr "Klant"
+msgstr "Kupec"
msgctxt "field:stock.shipment.out,customer_location:"
msgid "Customer Location"
-msgstr ""
+msgstr "Lokacija kupca"
msgctxt "field:stock.shipment.out,delivery_address:"
msgid "Delivery Address"
-msgstr ""
+msgstr "Prejemnik"
-#, fuzzy
msgctxt "field:stock.shipment.out,effective_date:"
msgid "Effective Date"
-msgstr "Effectieve datum"
+msgstr "Dejanski datum"
msgctxt "field:stock.shipment.out,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.shipment.out,inventory_moves:"
msgid "Inventory Moves"
-msgstr ""
+msgstr "Notranji promet"
-#, fuzzy
msgctxt "field:stock.shipment.out,moves:"
msgid "Moves"
-msgstr "Boekingen"
+msgstr "Promet"
+
+msgctxt "field:stock.shipment.out,origins:"
+msgid "Origins"
+msgstr "Porekla"
msgctxt "field:stock.shipment.out,outgoing_moves:"
msgid "Outgoing Moves"
-msgstr ""
+msgstr "Izhodni promet"
msgctxt "field:stock.shipment.out,planned_date:"
msgid "Planned Date"
-msgstr ""
+msgstr "Načrtovan datum"
-#, fuzzy
msgctxt "field:stock.shipment.out,rec_name:"
msgid "Name"
-msgstr "Naam bijlage"
+msgstr "Ime"
-#, fuzzy
msgctxt "field:stock.shipment.out,reference:"
msgid "Reference"
-msgstr "Referentie"
+msgstr "Sklic"
-#, fuzzy
msgctxt "field:stock.shipment.out,state:"
msgid "State"
-msgstr "Status"
+msgstr "Stanje"
-#, fuzzy
msgctxt "field:stock.shipment.out,warehouse:"
msgid "Warehouse"
-msgstr "Magazijn"
+msgstr "Skladišče"
msgctxt "field:stock.shipment.out,warehouse_output:"
msgid "Warehouse Output"
-msgstr ""
+msgstr "Izdaja iz skladišča"
msgctxt "field:stock.shipment.out,warehouse_storage:"
msgid "Warehouse Storage"
-msgstr ""
+msgstr "Shramba v skladišču"
msgctxt "field:stock.shipment.out,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Zapisano"
msgctxt "field:stock.shipment.out,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Zapisal"
msgctxt "field:stock.shipment.out.assign.failed,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.shipment.out.assign.failed,inventory_moves:"
msgid "Inventory Moves"
-msgstr ""
+msgstr "Inventarni promet"
-#, fuzzy
msgctxt "field:stock.shipment.out.return,code:"
msgid "Code"
-msgstr "Code"
+msgstr "Šifra"
-#, fuzzy
msgctxt "field:stock.shipment.out.return,company:"
msgid "Company"
-msgstr "Bedrijf"
+msgstr "Podjetje"
msgctxt "field:stock.shipment.out.return,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Ustvarjeno"
msgctxt "field:stock.shipment.out.return,create_uid:"
msgid "Create User"
-msgstr ""
+msgstr "Ustvaril"
-#, fuzzy
msgctxt "field:stock.shipment.out.return,customer:"
msgid "Customer"
-msgstr "Klant"
+msgstr "Kupec"
msgctxt "field:stock.shipment.out.return,customer_location:"
msgid "Customer Location"
-msgstr ""
+msgstr "Lokacija kupca"
msgctxt "field:stock.shipment.out.return,delivery_address:"
msgid "Delivery Address"
-msgstr ""
+msgstr "Prejemnik"
-#, fuzzy
msgctxt "field:stock.shipment.out.return,effective_date:"
msgid "Effective Date"
-msgstr "Effectieve datum"
+msgstr "Dejanski datum"
msgctxt "field:stock.shipment.out.return,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.shipment.out.return,incoming_moves:"
msgid "Incoming Moves"
-msgstr ""
+msgstr "Vhodni promet"
msgctxt "field:stock.shipment.out.return,inventory_moves:"
msgid "Inventory Moves"
-msgstr ""
+msgstr "Inventarni promet"
-#, fuzzy
msgctxt "field:stock.shipment.out.return,moves:"
msgid "Moves"
-msgstr "Boekingen"
+msgstr "Promet"
+
+msgctxt "field:stock.shipment.out.return,origins:"
+msgid "Origins"
+msgstr "Porekla"
msgctxt "field:stock.shipment.out.return,planned_date:"
msgid "Planned Date"
-msgstr ""
+msgstr "Načrtovan datum"
-#, fuzzy
msgctxt "field:stock.shipment.out.return,rec_name:"
msgid "Name"
-msgstr "Naam bijlage"
+msgstr "Ime"
-#, fuzzy
msgctxt "field:stock.shipment.out.return,reference:"
msgid "Reference"
-msgstr "Referentie"
+msgstr "Sklic"
-#, fuzzy
msgctxt "field:stock.shipment.out.return,state:"
msgid "State"
-msgstr "Status"
+msgstr "Stanje"
-#, fuzzy
msgctxt "field:stock.shipment.out.return,warehouse:"
msgid "Warehouse"
-msgstr "Magazijn"
+msgstr "Skladišče"
msgctxt "field:stock.shipment.out.return,warehouse_input:"
msgid "Warehouse Input"
-msgstr ""
+msgstr "Prevzem v skladišče"
msgctxt "field:stock.shipment.out.return,warehouse_storage:"
msgid "Warehouse Storage"
-msgstr ""
+msgstr "Shramba v skladišče"
msgctxt "field:stock.shipment.out.return,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Zapisano"
msgctxt "field:stock.shipment.out.return,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Zapisal"
msgctxt "help:party.party,customer_location:"
msgid "The default destination location when sending products to the party."
-msgstr ""
+msgstr "Privzeta ciljna lokacija pri odpremi izdelkov k stranki."
msgctxt "help:party.party,supplier_location:"
msgid "The default source location when receiving products from the party."
-msgstr ""
+msgstr "Privzeta izvorna lokacija pri prevzemu izdelkov od stranke."
msgctxt "help:product.by_location.start,forecast_date:"
msgid ""
@@ -1110,6 +1058,9 @@ msgid ""
"* An empty value is an infinite date in the future.\n"
"* A date in the past will provide historical values."
msgstr ""
+"Omogoča izračun predvidene količine na zalogi na ta dan.\n"
+"* Prazno polje pomeni neskončen datum v prihodnost.\n"
+"* Datum v preteklosti daje pretekle vrednosti."
msgctxt "help:stock.products_by_locations.start,forecast_date:"
msgid ""
@@ -1117,1330 +1068,1221 @@ msgid ""
"* An empty value is an infinite date in the future.\n"
"* A date in the past will provide historical values."
msgstr ""
+"Omogoča izračun predvidene količine na zalogi na ta dan.\n"
+"* Prazno polje pomeni neskončen datum v prihodnost.\n"
+"* Datum v preteklosti daje pretekle vrednosti."
msgctxt "model:ir.action,name:act_inventory_form"
msgid "Inventories"
-msgstr ""
+msgstr "Popisi"
msgctxt "model:ir.action,name:act_location_form"
msgid "Locations"
-msgstr ""
+msgstr "Lokacije"
msgctxt "model:ir.action,name:act_location_quantity_tree"
msgid "Locations"
-msgstr ""
+msgstr "Lokacije"
msgctxt "model:ir.action,name:act_location_tree"
msgid "Locations"
-msgstr ""
+msgstr "Lokacije"
-#, fuzzy
msgctxt "model:ir.action,name:act_move_form"
msgid "Moves"
-msgstr "Boekingen"
+msgstr "Promet"
-#, fuzzy
msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
-msgstr "Perioden"
+msgstr "Obdobja"
msgctxt "model:ir.action,name:act_product_quantities_warehouse"
msgid "Product Quantities By Warehouse"
-msgstr ""
+msgstr "Količine izdelkov po skladiščih"
-#, fuzzy
msgctxt "model:ir.action,name:act_products_by_locations"
msgid "Products"
-msgstr "Producten"
+msgstr "Izdelki"
msgctxt "model:ir.action,name:act_shipment_in_form"
msgid "Supplier Shipments"
-msgstr ""
+msgstr "Prevzemnice"
msgctxt "model:ir.action,name:act_shipment_in_return_form"
msgid "Supplier Return Shipments"
-msgstr ""
+msgstr "Vrnjene prevzemnice"
msgctxt "model:ir.action,name:act_shipment_internal_form"
msgid "Internal Shipments"
-msgstr ""
+msgstr "Notranje odpremnice"
msgctxt "model:ir.action,name:act_shipment_out_form"
msgid "Customer Shipments"
-msgstr ""
+msgstr "Odpremnice"
msgctxt "model:ir.action,name:act_shipment_out_form2"
msgid "Customer Shipments"
-msgstr ""
+msgstr "Odpremnice"
msgctxt "model:ir.action,name:act_shipment_out_form3"
msgid "Supplier Shipments"
-msgstr ""
+msgstr "Prevzeminice"
msgctxt "model:ir.action,name:act_shipment_out_return_form"
msgid "Customer Return Shipments"
-msgstr ""
+msgstr "Vrnjene odpremnice"
msgctxt "model:ir.action,name:act_stock_configuration_form"
msgid "Stock Configuration"
-msgstr ""
+msgstr "Konfiguracija zaloge"
msgctxt "model:ir.action,name:create_shipment_out_return"
msgid "Create Return Shipment"
-msgstr ""
+msgstr "Izdelava vrnjene pošiljke"
msgctxt "model:ir.action,name:report_shipment_in_restocking_list"
msgid "Restocking List"
-msgstr ""
+msgstr "Obnova zaloge"
msgctxt "model:ir.action,name:report_shipment_internal"
msgid "Internal Shipment"
-msgstr ""
+msgstr "Notranja odpremnica"
msgctxt "model:ir.action,name:report_shipment_out_delivery_note"
msgid "Delivery Note"
-msgstr ""
+msgstr "Dobavnica"
msgctxt "model:ir.action,name:report_shipment_out_picking_list"
msgid "Picking List"
-msgstr ""
+msgstr "Prevzemni list"
msgctxt "model:ir.action,name:report_shipment_out_return_restocking_list"
msgid "Restocking List"
-msgstr ""
+msgstr "Obnova zaloge"
msgctxt "model:ir.action,name:wizard_product_by_location"
msgid "Product by Locations"
-msgstr ""
+msgstr "Izdelek po lokacijah"
msgctxt "model:ir.action,name:wizard_product_quantities_warehouse"
msgid "Product Quantities By Warehouse"
-msgstr ""
+msgstr "Količine izdelkov po skladiščih"
msgctxt "model:ir.action,name:wizard_products_by_locations"
msgid "Products by Locations"
-msgstr ""
+msgstr "Izdelki po lokacijah"
msgctxt "model:ir.action,name:wizard_shipment_in_return_assign"
msgid "Assign Purchase Return Shipment"
-msgstr ""
+msgstr "Dodelitev vrnjene prevzemnice"
msgctxt "model:ir.action,name:wizard_shipment_internal_assign"
msgid "Assign Shipment Internal"
-msgstr ""
+msgstr "Dodelitev notranje odpremnice"
msgctxt "model:ir.action,name:wizard_shipment_out_assign"
msgid "Assign Shipment Out"
-msgstr ""
+msgstr "Dodelitev odpremnice"
msgctxt "model:ir.action.act_window.domain,name:act_inventory_form_domain_all"
msgid "All"
-msgstr ""
+msgstr "Vse"
-#, fuzzy
msgctxt ""
"model:ir.action.act_window.domain,name:act_inventory_form_domain_draft"
msgid "Draft"
-msgstr "Concept"
+msgstr "Osnutek"
msgctxt "model:ir.action.act_window.domain,name:act_move_form_domain_all"
msgid "All"
-msgstr ""
+msgstr "Vse"
msgctxt ""
"model:ir.action.act_window.domain,name:act_move_form_domain_from_supplier"
msgid "From Suppliers"
-msgstr ""
+msgstr "Od dobaviteljev"
msgctxt ""
"model:ir.action.act_window.domain,name:act_move_form_domain_from_supplier_waiting"
msgid "From Suppliers Waiting"
-msgstr ""
+msgstr "Od dobaviteljev čakajoče"
msgctxt ""
"model:ir.action.act_window.domain,name:act_move_form_domain_to_customer"
msgid "To Customers"
-msgstr ""
+msgstr "Do kupcev"
msgctxt ""
"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_all"
msgid "All"
-msgstr ""
+msgstr "Vse"
-#, fuzzy
msgctxt ""
"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_draft"
msgid "Draft"
-msgstr "Concept"
+msgstr "Osnutek"
msgctxt ""
"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_received"
msgid "Received"
-msgstr ""
+msgstr "Prejeto"
msgctxt ""
"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_all"
msgid "All"
-msgstr ""
+msgstr "Vse"
msgctxt ""
"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_assigned"
msgid "Assigned"
-msgstr ""
+msgstr "Dodeljeno"
-#, fuzzy
msgctxt ""
"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_draft"
msgid "Draft"
-msgstr "Concept"
+msgstr "Osnutek"
-#, fuzzy
msgctxt ""
"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_waiting"
msgid "Waiting"
-msgstr "In afwachting"
+msgstr "Čakajoče"
msgctxt ""
"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_all"
msgid "All"
-msgstr ""
+msgstr "Vse"
msgctxt ""
"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_assigned"
msgid "Assigned"
-msgstr ""
+msgstr "Dodeljeno"
-#, fuzzy
msgctxt ""
"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_draft"
msgid "Draft"
-msgstr "Concept"
+msgstr "Osnutek"
-#, fuzzy
msgctxt ""
"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_waiting"
msgid "Waiting"
-msgstr "In afwachting"
+msgstr "Čakajoče"
msgctxt ""
"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_all"
msgid "All"
-msgstr ""
+msgstr "Vse"
msgctxt ""
"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_assigned"
msgid "Assigned"
-msgstr ""
+msgstr "Dodeljeno"
-#, fuzzy
msgctxt ""
"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_draft"
msgid "Draft"
-msgstr "Concept"
+msgstr "Osnutek"
msgctxt ""
"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_packed"
msgid "Packed"
-msgstr ""
+msgstr "Zapakirano"
-#, fuzzy
msgctxt ""
"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_waiting"
msgid "Waiting"
-msgstr "In afwachting"
+msgstr "Čakajoče"
msgctxt ""
"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_all"
msgid "All"
-msgstr ""
+msgstr "Vse"
-#, fuzzy
msgctxt ""
"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_draft"
msgid "Draft"
-msgstr "Concept"
+msgstr "Osnutek"
msgctxt ""
"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_received"
msgid "Received"
-msgstr ""
+msgstr "Prejeto"
msgctxt "model:ir.sequence,name:sequence_shipment_in"
msgid "Supplier Shipment"
-msgstr ""
+msgstr "Prevzemnica"
msgctxt "model:ir.sequence,name:sequence_shipment_in_return"
msgid "Supplier Return Shipment"
-msgstr ""
+msgstr "Vrnjena prevzemnica"
msgctxt "model:ir.sequence,name:sequence_shipment_internal"
msgid "Internal Shipment"
-msgstr ""
+msgstr "Notranja odpremnica"
msgctxt "model:ir.sequence,name:sequence_shipment_out"
msgid "Customer Shipment"
-msgstr ""
+msgstr "Odpremnica"
msgctxt "model:ir.sequence,name:sequence_shipment_out_return"
msgid "Customer Return Shipment"
-msgstr ""
+msgstr "Vrnjena odpremnica"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in"
msgid "Supplier Shipment"
-msgstr ""
+msgstr "Prevzemnica"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in_return"
msgid "Supplier Return Shipment"
-msgstr ""
+msgstr "Vrnjena prevzemnica"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_internal"
msgid "Internal Shipment"
-msgstr ""
+msgstr "Notranja odpremnica"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out"
msgid "Customer Shipment"
-msgstr ""
+msgstr "Odpremnica"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out_return"
msgid "Customer Return Shipment"
-msgstr ""
+msgstr "Vrnjena odpremnica"
-#, fuzzy
msgctxt "model:ir.ui.menu,name:menu_configuration"
msgid "Configuration"
-msgstr "Instellingen"
+msgstr "Nastavitve"
msgctxt "model:ir.ui.menu,name:menu_inventory_form"
msgid "Inventories"
-msgstr ""
+msgstr "Popisi"
msgctxt "model:ir.ui.menu,name:menu_location_form"
msgid "Locations"
-msgstr ""
+msgstr "Lokacije"
msgctxt "model:ir.ui.menu,name:menu_location_tree"
msgid "Locations"
-msgstr ""
+msgstr "Lokacije"
-#, fuzzy
msgctxt "model:ir.ui.menu,name:menu_move_form"
msgid "Moves"
-msgstr "Boekingen"
+msgstr "Promet"
-#, fuzzy
msgctxt "model:ir.ui.menu,name:menu_period_list"
msgid "Periods"
-msgstr "Perioden"
+msgstr "Obdobja"
-#, fuzzy
msgctxt "model:ir.ui.menu,name:menu_reporting"
msgid "Reporting"
-msgstr "Rapportage"
+msgstr "Poročila"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
msgid "Supplier Shipments"
-msgstr ""
+msgstr "Prevzemnice"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
msgid "Supplier Return Shipments"
-msgstr ""
+msgstr "Vrnjene prevzemnice"
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_form"
msgid "Internal Shipments"
-msgstr ""
+msgstr "Notranje odpremnice"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_form"
msgid "Customer Shipments"
-msgstr ""
+msgstr "Odpremnice"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
msgid "Customer Return Shipments"
-msgstr ""
+msgstr "Vrnjene odpremnice"
msgctxt "model:ir.ui.menu,name:menu_stock"
msgid "Inventory & Stock"
-msgstr ""
+msgstr "Zaloga"
msgctxt "model:ir.ui.menu,name:menu_stock_configuration"
msgid "Stock Configuration"
-msgstr ""
+msgstr "Konfiguracija"
msgctxt "model:product.by_location.start,name:"
msgid "Product by Location"
-msgstr ""
+msgstr "Izdelek po lokaciji"
-#, fuzzy
msgctxt "model:res.group,name:group_stock"
msgid "Stock"
-msgstr "Voorraad"
+msgstr "Zaloga"
msgctxt "model:res.group,name:group_stock_admin"
msgid "Stock Administration"
-msgstr ""
+msgstr "Zaloga - vodenje"
msgctxt "model:res.group,name:group_stock_force_assignment"
msgid "Stock Force Assignment"
-msgstr ""
+msgstr "Zaloga - rezervacija"
msgctxt "model:stock.configuration,name:"
msgid "Stock Configuration"
-msgstr ""
+msgstr "Konfiguracija zaloge"
msgctxt "model:stock.inventory,name:"
msgid "Stock Inventory"
-msgstr ""
+msgstr "Popis"
msgctxt "model:stock.inventory.line,name:"
msgid "Stock Inventory Line"
-msgstr ""
+msgstr "Postavka popisa"
msgctxt "model:stock.location,name:"
msgid "Stock Location"
-msgstr ""
+msgstr "Lokacija"
-#, fuzzy
msgctxt "model:stock.location,name:location_customer"
msgid "Customer"
-msgstr "Klant"
+msgstr "Kupec"
msgctxt "model:stock.location,name:location_input"
msgid "Input Zone"
-msgstr ""
+msgstr "Prevzem"
msgctxt "model:stock.location,name:location_lost_found"
msgid "Lost and Found"
-msgstr ""
+msgstr "Izgubljeno/najdeno"
msgctxt "model:stock.location,name:location_output"
msgid "Output Zone"
-msgstr ""
+msgstr "Izdaja"
msgctxt "model:stock.location,name:location_storage"
msgid "Storage Zone"
-msgstr ""
+msgstr "Shramba"
-#, fuzzy
msgctxt "model:stock.location,name:location_supplier"
msgid "Supplier"
-msgstr "Leverancier"
+msgstr "Dobavitelj"
-#, fuzzy
msgctxt "model:stock.location,name:location_warehouse"
msgid "Warehouse"
-msgstr "Magazijn"
+msgstr "Skladišče"
msgctxt "model:stock.move,name:"
msgid "Stock Move"
-msgstr ""
+msgstr "Promet zaloge"
msgctxt "model:stock.period,name:"
msgid "Stock Period"
-msgstr ""
+msgstr "Obdobje zaloge"
msgctxt "model:stock.period.cache,name:"
msgid "Stock Period Cache"
-msgstr ""
+msgstr "Predpomnjeno obdobje zaloge"
msgctxt "model:stock.product_quantities_warehouse,name:"
msgid "Product Quantities By Warehouse"
-msgstr ""
+msgstr "Količine izdelkov po skladiščih"
msgctxt "model:stock.product_quantities_warehouse.start,name:"
msgid "Product Quantities By Warehouse"
-msgstr ""
+msgstr "Količine izdelkov po skladiščih"
msgctxt "model:stock.products_by_locations.start,name:"
msgid "Products by Locations"
-msgstr ""
+msgstr "Izdelki po lokacijah"
msgctxt "model:stock.shipment.in,name:"
msgid "Supplier Shipment"
-msgstr ""
+msgstr "Prevzemnica"
msgctxt "model:stock.shipment.in.return,name:"
msgid "Supplier Return Shipment"
-msgstr ""
+msgstr "Vrnjena prevzemnica"
msgctxt "model:stock.shipment.in.return.assign.failed,name:"
msgid "Assign Supplier Return Shipment"
-msgstr ""
+msgstr "Dodelitev vrnjene prevzemnice"
msgctxt "model:stock.shipment.internal,name:"
msgid "Internal Shipment"
-msgstr ""
+msgstr "Notranja odpremnica"
msgctxt "model:stock.shipment.internal.assign.failed,name:"
msgid "Assign Shipment Internal"
-msgstr ""
+msgstr "Dodelitev notranje odpremnice"
msgctxt "model:stock.shipment.out,name:"
msgid "Customer Shipment"
-msgstr ""
+msgstr "Odpremnica"
msgctxt "model:stock.shipment.out.assign.failed,name:"
msgid "Assign Shipment Out"
-msgstr ""
+msgstr "Dodelitev odpremnice"
msgctxt "model:stock.shipment.out.return,name:"
msgid "Customer Return Shipment"
-msgstr ""
+msgstr "Vrnjena odpremnica"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "/"
-msgstr ""
+msgstr "/"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Code:"
-msgstr ""
+msgstr "Šifra:"
-#, fuzzy
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "E-Mail:"
-msgstr "E-mail:"
+msgstr "E-pošta:"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "From Location"
-msgstr ""
+msgstr "Iz lokacije"
-#, fuzzy
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Phone:"
-msgstr "Telefoon:"
+msgstr "Telefon:"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Planned Date:"
-msgstr ""
+msgstr "Načrtovan datum:"
-#, fuzzy
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Product"
-msgstr "Producten"
+msgstr "Izdelek"
-#, fuzzy
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Quantity"
-msgstr "Hoeveelheid"
+msgstr "Količina"
-#, fuzzy
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Reference:"
-msgstr "Referentie:"
+msgstr "Sklic:"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Restocking List"
-msgstr ""
+msgstr "Obnova zaloge"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Supplier:"
-msgstr ""
+msgstr "Dobavitelj:"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "To Location"
-msgstr ""
+msgstr "Na lokacijo"
-#, fuzzy
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "VAT Number:"
-msgstr "BTW-nummer:"
+msgstr "DDV številka:"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Warehouse:"
-msgstr ""
+msgstr "Skladišče:"
msgctxt "odt:stock.shipment.internal.report:"
msgid "/"
-msgstr ""
+msgstr "/"
msgctxt "odt:stock.shipment.internal.report:"
msgid "Code:"
-msgstr ""
+msgstr "Šifra:"
-#, fuzzy
msgctxt "odt:stock.shipment.internal.report:"
msgid "E-Mail:"
-msgstr "E-mail:"
+msgstr "E-pošta:"
msgctxt "odt:stock.shipment.internal.report:"
msgid "From Location"
-msgstr ""
+msgstr "Iz lokacije"
msgctxt "odt:stock.shipment.internal.report:"
msgid "From Location:"
-msgstr ""
+msgstr "Iz lokacije:"
msgctxt "odt:stock.shipment.internal.report:"
msgid "Internal Shipment"
-msgstr ""
+msgstr "Notranja odpremnica"
-#, fuzzy
msgctxt "odt:stock.shipment.internal.report:"
msgid "Phone:"
-msgstr "Telefoon:"
+msgstr "Telefon:"
msgctxt "odt:stock.shipment.internal.report:"
msgid "Planned Date:"
-msgstr ""
+msgstr "Načrtovan datum:"
-#, fuzzy
msgctxt "odt:stock.shipment.internal.report:"
msgid "Product"
-msgstr "Producten"
+msgstr "Izdelek"
-#, fuzzy
msgctxt "odt:stock.shipment.internal.report:"
msgid "Quantity"
-msgstr "Hoeveelheid"
+msgstr "Količina"
-#, fuzzy
msgctxt "odt:stock.shipment.internal.report:"
msgid "Reference:"
-msgstr "Referentie:"
+msgstr "Sklic:"
msgctxt "odt:stock.shipment.internal.report:"
msgid "To Location"
-msgstr ""
+msgstr "Na lokacijo"
msgctxt "odt:stock.shipment.internal.report:"
msgid "To Location:"
-msgstr ""
+msgstr "Na lokacijo:"
-#, fuzzy
msgctxt "odt:stock.shipment.internal.report:"
msgid "VAT Number:"
-msgstr "BTW-nummer:"
+msgstr "DDV številka:"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "/"
-msgstr ""
+msgstr "/"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Customer Code:"
-msgstr ""
+msgstr "Šifra kupca:"
-#, fuzzy
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Date:"
msgstr "Datum:"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Delivery Note"
-msgstr ""
+msgstr "Dobavnica"
-#, fuzzy
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "E-Mail:"
-msgstr "E-mail:"
+msgstr "E-pošta:"
-#, fuzzy
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Phone:"
-msgstr "Telefoon:"
+msgstr "Telefon:"
-#, fuzzy
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Product"
-msgstr "Producten"
+msgstr "Izdelek"
-#, fuzzy
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Quantity"
-msgstr "Hoeveelheid"
+msgstr "Količina"
-#, fuzzy
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Reference:"
-msgstr "Referentie:"
+msgstr "Sklic:"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Shipment Number:"
-msgstr ""
+msgstr "Dobavnica št.:"
-#, fuzzy
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "VAT Number:"
-msgstr "BTW-nummer:"
+msgstr "DDV številka:"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "/"
-msgstr ""
+msgstr "/"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Code:"
-msgstr ""
+msgstr "Šifra:"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Customer:"
-msgstr ""
+msgstr "Kupec:"
-#, fuzzy
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "E-Mail:"
-msgstr "E-mail:"
+msgstr "E-pošta:"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "From Location"
-msgstr ""
+msgstr "Iz lokacije"
-#, fuzzy
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Phone:"
-msgstr "Telefoon:"
+msgstr "Telefon:"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Picking List"
-msgstr ""
+msgstr "Prevzemni list"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Planned Date:"
-msgstr ""
+msgstr "Načrtovan datum:"
-#, fuzzy
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Product"
-msgstr "Producten"
+msgstr "Izdelek"
-#, fuzzy
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Quantity"
-msgstr "Hoeveelheid"
+msgstr "Količina"
-#, fuzzy
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Reference:"
-msgstr "Referentie:"
+msgstr "Sklic:"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "To Location"
-msgstr ""
+msgstr "Na lokacijo"
-#, fuzzy
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "VAT Number:"
-msgstr "BTW-nummer:"
+msgstr "DDV številka:"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Warehouse:"
-msgstr ""
+msgstr "Skladišče:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "/"
-msgstr ""
+msgstr "/"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid ":"
+msgstr ":"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Code:"
-msgstr ""
+msgstr "Šifra:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "Customer"
+msgstr "Terjatve do kupcev"
-#, fuzzy
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "E-Mail:"
-msgstr "E-mail:"
+msgstr "E-pošta:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "From Location"
-msgstr ""
+msgstr "Iz lokacije"
-#, fuzzy
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Phone:"
-msgstr "Telefoon:"
+msgstr "Telefon:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Planned Date:"
-msgstr ""
+msgstr "Načrtovan datum:"
-#, fuzzy
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Product"
-msgstr "Producten"
+msgstr "Izdelek"
-#, fuzzy
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Quantity"
-msgstr "Hoeveelheid"
+msgstr "Količina"
-#, fuzzy
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Reference:"
-msgstr "Referentie:"
+msgstr "Sklic:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Restocking List"
-msgstr ""
-
-msgctxt "odt:stock.shipment.out.return.restocking_list:"
-msgid "Supplier:"
-msgstr ""
+msgstr "Obnova zaloge"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "To Location"
-msgstr ""
+msgstr "Na lokacijo"
-#, fuzzy
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "VAT Number:"
-msgstr "BTW-nummer:"
+msgstr "DDV številka:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Warehouse:"
-msgstr ""
+msgstr "Skladišče:"
-#, fuzzy
msgctxt "selection:stock.inventory,state:"
msgid "Canceled"
-msgstr "Geannuleerd"
+msgstr "Preklicano"
-#, fuzzy
msgctxt "selection:stock.inventory,state:"
msgid "Done"
-msgstr "Klaar"
+msgstr "Zaključeno"
-#, fuzzy
msgctxt "selection:stock.inventory,state:"
msgid "Draft"
-msgstr "Concept"
+msgstr "Osnutek"
-#, fuzzy
msgctxt "selection:stock.location,type:"
msgid "Customer"
-msgstr "Klant"
+msgstr "Kupec"
msgctxt "selection:stock.location,type:"
msgid "Lost and Found"
-msgstr ""
+msgstr "Izgubljeno/najdeno"
msgctxt "selection:stock.location,type:"
msgid "Production"
-msgstr ""
+msgstr "Proizvodnja"
msgctxt "selection:stock.location,type:"
msgid "Storage"
-msgstr ""
+msgstr "Shramba"
-#, fuzzy
msgctxt "selection:stock.location,type:"
msgid "Supplier"
-msgstr "Leverancier"
+msgstr "Dobavitelj"
-#, fuzzy
msgctxt "selection:stock.location,type:"
msgid "View"
-msgstr "Overzicht"
+msgstr "Vpogled"
-#, fuzzy
msgctxt "selection:stock.location,type:"
msgid "Warehouse"
-msgstr "Magazijn"
+msgstr "Skladišče"
msgctxt "selection:stock.move,state:"
msgid "Assigned"
-msgstr ""
+msgstr "Dodeljeno"
-#, fuzzy
msgctxt "selection:stock.move,state:"
msgid "Canceled"
-msgstr "Geannuleerd"
+msgstr "Preklicano"
-#, fuzzy
msgctxt "selection:stock.move,state:"
msgid "Done"
-msgstr "Klaar"
+msgstr "Zaključeno"
-#, fuzzy
msgctxt "selection:stock.move,state:"
msgid "Draft"
-msgstr "Concept"
+msgstr "Osnutek"
msgctxt "selection:stock.period,state:"
msgid "Closed"
-msgstr ""
+msgstr "Zaprto"
-#, fuzzy
msgctxt "selection:stock.period,state:"
msgid "Draft"
-msgstr "Concept"
+msgstr "Osnutek"
-#, fuzzy
msgctxt "selection:stock.shipment.in,state:"
msgid "Canceled"
-msgstr "Geannuleerd"
+msgstr "Preklicano"
-#, fuzzy
msgctxt "selection:stock.shipment.in,state:"
msgid "Done"
-msgstr "Klaar"
+msgstr "Zaključeno"
-#, fuzzy
msgctxt "selection:stock.shipment.in,state:"
msgid "Draft"
-msgstr "Concept"
+msgstr "Osnutek"
msgctxt "selection:stock.shipment.in,state:"
msgid "Received"
-msgstr ""
+msgstr "Prejeto"
msgctxt "selection:stock.shipment.in.return,state:"
msgid "Assigned"
-msgstr ""
+msgstr "Dodeljeno"
-#, fuzzy
msgctxt "selection:stock.shipment.in.return,state:"
msgid "Canceled"
-msgstr "Geannuleerd"
+msgstr "Preklicano"
-#, fuzzy
msgctxt "selection:stock.shipment.in.return,state:"
msgid "Done"
-msgstr "Klaar"
+msgstr "Zaključeno"
-#, fuzzy
msgctxt "selection:stock.shipment.in.return,state:"
msgid "Draft"
-msgstr "Concept"
+msgstr "Osnutek"
-#, fuzzy
msgctxt "selection:stock.shipment.in.return,state:"
msgid "Waiting"
-msgstr "In afwachting"
+msgstr "Čakajoče"
msgctxt "selection:stock.shipment.internal,state:"
msgid "Assigned"
-msgstr ""
+msgstr "Dodeljeno"
-#, fuzzy
msgctxt "selection:stock.shipment.internal,state:"
msgid "Canceled"
-msgstr "Geannuleerd"
+msgstr "Preklicano"
-#, fuzzy
msgctxt "selection:stock.shipment.internal,state:"
msgid "Done"
-msgstr "Klaar"
+msgstr "Zaključeno"
-#, fuzzy
msgctxt "selection:stock.shipment.internal,state:"
msgid "Draft"
-msgstr "Concept"
+msgstr "Osnutek"
-#, fuzzy
msgctxt "selection:stock.shipment.internal,state:"
msgid "Waiting"
-msgstr "In afwachting"
+msgstr "Čakajoče"
msgctxt "selection:stock.shipment.out,state:"
msgid "Assigned"
-msgstr ""
+msgstr "Dodeljeno"
-#, fuzzy
msgctxt "selection:stock.shipment.out,state:"
msgid "Canceled"
-msgstr "Geannuleerd"
+msgstr "Preklicano"
-#, fuzzy
msgctxt "selection:stock.shipment.out,state:"
msgid "Done"
-msgstr "Klaar"
+msgstr "Zaključeno"
-#, fuzzy
msgctxt "selection:stock.shipment.out,state:"
msgid "Draft"
-msgstr "Concept"
+msgstr "Osnutek"
msgctxt "selection:stock.shipment.out,state:"
msgid "Packed"
-msgstr ""
+msgstr "Zapakirano"
-#, fuzzy
msgctxt "selection:stock.shipment.out,state:"
msgid "Waiting"
-msgstr "In afwachting"
+msgstr "Čakajoče"
-#, fuzzy
msgctxt "selection:stock.shipment.out.return,state:"
msgid "Canceled"
-msgstr "Geannuleerd"
+msgstr "Preklicano"
-#, fuzzy
msgctxt "selection:stock.shipment.out.return,state:"
msgid "Done"
-msgstr "Klaar"
+msgstr "Zaključeno"
-#, fuzzy
msgctxt "selection:stock.shipment.out.return,state:"
msgid "Draft"
-msgstr "Concept"
+msgstr "Osnutek"
msgctxt "selection:stock.shipment.out.return,state:"
msgid "Received"
-msgstr ""
+msgstr "Prejeto"
-#, fuzzy
msgctxt "view:party.party:"
msgid "Stock"
-msgstr "Voorraad"
+msgstr "Zaloga"
msgctxt "view:product.by_location.start:"
msgid "Product by Location"
-msgstr ""
+msgstr "Izdelek po lokaciji"
-#, fuzzy
msgctxt "view:product.product:"
msgid "Products"
-msgstr "Producten"
+msgstr "Izdelki"
msgctxt "view:stock.configuration:"
msgid "Stock Configuration"
-msgstr ""
+msgstr "Konfiguracija zaloge"
msgctxt "view:stock.inventory.line:"
msgid "Inventory Line"
-msgstr ""
+msgstr "Postavka popisa"
msgctxt "view:stock.inventory.line:"
msgid "Inventory Lines"
-msgstr ""
+msgstr "Postavke popisa"
msgctxt "view:stock.inventory:"
msgid "Add an inventory line for each missing products"
-msgstr ""
+msgstr "Dodaj postavko popisa za vsak manjkajoči izdelek"
-#, fuzzy
msgctxt "view:stock.inventory:"
msgid "Cancel"
-msgstr "Annuleren"
+msgstr "Preklic"
msgctxt "view:stock.inventory:"
msgid "Complete Inventory"
-msgstr ""
+msgstr "Izpolnitev popisa"
-#, fuzzy
msgctxt "view:stock.inventory:"
msgid "Confirm"
-msgstr "Bevestig"
+msgstr "Potrditev"
msgctxt "view:stock.inventory:"
msgid "Inventories"
-msgstr ""
+msgstr "Popisi"
msgctxt "view:stock.inventory:"
msgid "Inventory"
-msgstr ""
+msgstr "Popis"
msgctxt "view:stock.location:"
msgid "Location"
-msgstr ""
+msgstr "Lokacija"
msgctxt "view:stock.location:"
msgid "Location Quantity"
-msgstr ""
+msgstr "Količina na lokaciji"
msgctxt "view:stock.location:"
msgid "Locations"
-msgstr ""
+msgstr "Lokacije"
-#, fuzzy
msgctxt "view:stock.move:"
msgid "Move"
-msgstr "Boeking"
+msgstr "Promet"
-#, fuzzy
msgctxt "view:stock.move:"
msgid "Moves"
-msgstr "Boekingen"
+msgstr "Promet"
msgctxt "view:stock.period.cache:"
msgid "Period Cache"
-msgstr ""
+msgstr "Predpomnjeno obdobje"
msgctxt "view:stock.period.cache:"
msgid "Period Caches"
-msgstr ""
+msgstr "Predpomnjena obdobja"
-#, fuzzy
msgctxt "view:stock.period:"
msgid "Close"
-msgstr "Sluiten"
+msgstr "Zaključitev"
-#, fuzzy
msgctxt "view:stock.period:"
msgid "Draft"
-msgstr "Concept"
+msgstr "Osnutek"
-#, fuzzy
msgctxt "view:stock.period:"
msgid "Period"
-msgstr "Periode"
+msgstr "Obdobje"
-#, fuzzy
msgctxt "view:stock.period:"
msgid "Periods"
-msgstr "Perioden"
+msgstr "Obdobja"
msgctxt "view:stock.product_quantities_warehouse.start:"
msgid "Product Quantities By Warehouse"
-msgstr ""
+msgstr "Količine izdelkov po skladiščih"
msgctxt "view:stock.product_quantities_warehouse:"
msgid "Product Quantities By Warehouse"
-msgstr ""
+msgstr "Količine izdelkov po skladiščih"
msgctxt "view:stock.products_by_locations.start:"
msgid "Products by Locations"
-msgstr ""
+msgstr "Izdelki po lokacijah"
msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to Assign"
-msgstr ""
+msgstr "Dodelitev ni možna"
msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to assign those products:"
-msgstr ""
+msgstr "Dodelitev ni možna za naslednje izdelke:"
msgctxt "view:stock.shipment.in.return:"
msgid "Assign"
-msgstr ""
+msgstr "Dodelitev"
-#, fuzzy
msgctxt "view:stock.shipment.in.return:"
msgid "Cancel"
-msgstr "Annuleren"
+msgstr "Preklic"
-#, fuzzy
msgctxt "view:stock.shipment.in.return:"
msgid "Done"
-msgstr "Klaar"
+msgstr "Zaključeno"
-#, fuzzy
msgctxt "view:stock.shipment.in.return:"
msgid "Draft"
-msgstr "Concept"
+msgstr "Osnutek"
msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipment"
-msgstr ""
+msgstr "Vrnjena prevzemnica"
msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipments"
-msgstr ""
+msgstr "Vrnjene prevzeminice"
msgctxt "view:stock.shipment.in.return:"
msgid "Wait"
-msgstr ""
+msgstr "Čakanje"
-#, fuzzy
msgctxt "view:stock.shipment.in:"
msgid "Cancel"
-msgstr "Annuleren"
+msgstr "Preklic"
-#, fuzzy
msgctxt "view:stock.shipment.in:"
msgid "Done"
-msgstr "Klaar"
+msgstr "Zaključeno"
msgctxt "view:stock.shipment.in:"
msgid "Incoming Moves"
-msgstr ""
+msgstr "Vhodni promet"
msgctxt "view:stock.shipment.in:"
msgid "Inventory Moves"
-msgstr ""
+msgstr "Inventarni promet"
msgctxt "view:stock.shipment.in:"
msgid "Receive"
-msgstr ""
+msgstr "Prejem"
-#, fuzzy
msgctxt "view:stock.shipment.in:"
msgid "Reset to Draft"
-msgstr "Terug naar concept"
+msgstr "Ponastavitev"
msgctxt "view:stock.shipment.in:"
msgid "Supplier Shipment"
-msgstr ""
+msgstr "Prevzemnica"
msgctxt "view:stock.shipment.in:"
msgid "Supplier Shipments"
-msgstr ""
+msgstr "Prevzemnice"
msgctxt "view:stock.shipment.internal.assign.failed:"
msgid "Unable to Assign"
-msgstr ""
+msgstr "Dodelitev ni možna"
msgctxt "view:stock.shipment.internal.assign.failed:"
msgid "Unable to assign those products:"
-msgstr ""
+msgstr "Dodelitev ni možna za naslednje izdelke:"
msgctxt "view:stock.shipment.internal:"
msgid "Assign"
-msgstr ""
+msgstr "Dodelitev"
-#, fuzzy
msgctxt "view:stock.shipment.internal:"
msgid "Cancel"
-msgstr "Annuleren"
+msgstr "Preklic"
-#, fuzzy
msgctxt "view:stock.shipment.internal:"
msgid "Done"
-msgstr "Klaar"
+msgstr "Zaključeno"
-#, fuzzy
msgctxt "view:stock.shipment.internal:"
msgid "Draft"
-msgstr "Concept"
+msgstr "Osnutek"
msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipment"
-msgstr ""
+msgstr "Notranja odpremnica"
msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipments"
-msgstr ""
+msgstr "Notranje odpremnice"
-#, fuzzy
msgctxt "view:stock.shipment.internal:"
msgid "Waiting"
-msgstr "In afwachting"
+msgstr "Čakajoče"
msgctxt "view:stock.shipment.out.assign.failed:"
msgid "Unable to Assign"
-msgstr ""
+msgstr "Dodelitev ni možna"
msgctxt "view:stock.shipment.out.assign.failed:"
msgid "Unable to assign those products:"
-msgstr ""
+msgstr "Dodelitev ni možna za naslednje izdelke:"
-#, fuzzy
msgctxt "view:stock.shipment.out.return:"
msgid "Cancel"
-msgstr "Annuleren"
+msgstr "Preklic"
msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipment"
-msgstr ""
+msgstr "Vrnjena odpremnica"
msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipments"
-msgstr ""
+msgstr "Vrnjene odpremnice"
-#, fuzzy
msgctxt "view:stock.shipment.out.return:"
msgid "Done"
-msgstr "Klaar"
+msgstr "Zaključeno"
-#, fuzzy
msgctxt "view:stock.shipment.out.return:"
msgid "Draft"
-msgstr "Concept"
+msgstr "Osnutek"
msgctxt "view:stock.shipment.out.return:"
msgid "Incoming Moves"
-msgstr ""
+msgstr "Vhodni promet"
msgctxt "view:stock.shipment.out.return:"
msgid "Inventory Moves"
-msgstr ""
+msgstr "Inventarni promet"
msgctxt "view:stock.shipment.out.return:"
msgid "Received"
-msgstr ""
+msgstr "Prejeto"
msgctxt "view:stock.shipment.out:"
msgid "Assign"
-msgstr ""
+msgstr "Dodelitev"
-#, fuzzy
msgctxt "view:stock.shipment.out:"
msgid "Cancel"
-msgstr "Annuleren"
+msgstr "Preklic"
msgctxt "view:stock.shipment.out:"
msgid "Customer Shipment"
-msgstr ""
+msgstr "Odpremnica"
msgctxt "view:stock.shipment.out:"
msgid "Customer Shipments"
-msgstr ""
+msgstr "Odpremnice"
-#, fuzzy
msgctxt "view:stock.shipment.out:"
msgid "Done"
-msgstr "Klaar"
+msgstr "Zaključeno"
-#, fuzzy
msgctxt "view:stock.shipment.out:"
msgid "Draft"
-msgstr "Concept"
+msgstr "Osnutek"
msgctxt "view:stock.shipment.out:"
msgid "Inventory Moves"
-msgstr ""
+msgstr "Inventarni promet"
msgctxt "view:stock.shipment.out:"
msgid "Make shipment"
-msgstr ""
+msgstr "Odprema"
msgctxt "view:stock.shipment.out:"
msgid "Outgoing Moves"
-msgstr ""
+msgstr "Izhodni promet"
-#, fuzzy
msgctxt "view:stock.shipment.out:"
msgid "Waiting"
-msgstr "In afwachting"
+msgstr "Čakajoče"
-#, fuzzy
msgctxt "wizard_button:product.by_location,start,end:"
msgid "Cancel"
-msgstr "Annuleren"
+msgstr "Preklic"
-#, fuzzy
msgctxt "wizard_button:product.by_location,start,open:"
msgid "Open"
-msgstr "Open"
+msgstr "Odpri"
-#, fuzzy
msgctxt "wizard_button:stock.product_quantities_warehouse,start,end:"
msgid "Cancel"
-msgstr "Annuleren"
+msgstr "Preklic"
-#, fuzzy
msgctxt "wizard_button:stock.product_quantities_warehouse,start,open_:"
msgid "Open"
-msgstr "Open"
+msgstr "Odpri"
-#, fuzzy
msgctxt "wizard_button:stock.products_by_locations,start,end:"
msgid "Cancel"
-msgstr "Annuleren"
+msgstr "Preklic"
-#, fuzzy
msgctxt "wizard_button:stock.products_by_locations,start,open:"
msgid "Open"
-msgstr "Open"
+msgstr "Odpri"
-#, fuzzy
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,end:"
msgid "Ok"
-msgstr "Oké"
+msgstr "V redu"
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,force:"
msgid "Force Assign"
-msgstr ""
+msgstr "Rezervacija"
-#, fuzzy
msgctxt "wizard_button:stock.shipment.internal.assign,failed,end:"
msgid "Ok"
-msgstr "Oké"
+msgstr "V redu"
msgctxt "wizard_button:stock.shipment.internal.assign,failed,force:"
msgid "Force Assign"
-msgstr ""
+msgstr "Rezervacija"
-#, fuzzy
msgctxt "wizard_button:stock.shipment.out.assign,failed,end:"
msgid "Ok"
-msgstr "Oké"
+msgstr "V redu"
msgctxt "wizard_button:stock.shipment.out.assign,failed,force:"
msgid "Force Assign"
-msgstr ""
+msgstr "Rezervacija"
diff --git a/location.py b/location.py
index 13cc197..2d9afdf 100644
--- a/location.py
+++ b/location.py
@@ -4,7 +4,7 @@ import datetime
from decimal import Decimal
from trytond.model import ModelView, ModelSQL, fields
from trytond.wizard import Wizard, StateView, Button, StateAction
-from trytond.backend import TableHandler
+from trytond import backend
from trytond.pyson import Not, Bool, Eval, Equal, PYSONEncoder, Date
from trytond.transaction import Transaction
from trytond.pool import Pool, PoolMeta
@@ -97,13 +97,15 @@ class Location(ModelSQL, ModelView):
cls._order.insert(0, ('name', 'ASC'))
cls._error_messages.update({
'invalid_type_for_moves': ('Location "%s" with existing moves '
- 'cannot be changed to a type that does not support moves.'),
+ 'cannot be changed to a type that does not support moves.'
+ ),
'child_of_warehouse': ('Location "%(location)s" must be a '
'child of warehouse "%(warehouse)s".'),
})
@classmethod
def __register__(cls, module_name):
+ TableHandler = backend.get('TableHandler')
super(Location, cls).__register__(module_name)
cursor = Transaction().cursor
@@ -186,12 +188,13 @@ class Location(ModelSQL, ModelView):
context['stock_date_end'] = datetime.date.max
location_ids = [l.id for l in locations]
+ product_id = Transaction().context['product']
with Transaction().set_context(context):
pbl = Product.products_by_location(location_ids=location_ids,
- product_ids=[Transaction().context['product']],
- with_childs=True, skip_zero=False).iteritems()
+ product_ids=[product_id], with_childs=True)
- return dict([(loc, qty) for (loc, prod), qty in pbl])
+ return dict((loc, pbl.get((loc, product_id), 0))
+ for loc in location_ids)
@classmethod
def get_cost_value(cls, locations, name):
diff --git a/location.xml b/location.xml
index 41d2f3e..8d106ec 100644
--- a/location.xml
+++ b/location.xml
@@ -25,7 +25,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_location_tree">
<field name="name">Locations</field>
<field name="res_model">stock.location</field>
- <field name="domain">[('parent', '=', False)]</field>
+ <field name="domain">[('parent', '=', None)]</field>
</record>
<record model="ir.action.act_window.view" id="act_location_tree_view1">
<field name="sequence" eval="10"/>
diff --git a/move.py b/move.py
index 1c2cc91..2d4749c 100644
--- a/move.py
+++ b/move.py
@@ -1,14 +1,19 @@
#This file is part of Tryton. The COPYRIGHT file at the top level of
#this repository contains the full copyright notices and license terms.
+import datetime
+import operator
from decimal import Decimal
-from functools import reduce, partial
-from trytond.model import Workflow, ModelView, ModelSQL, fields
-from trytond.backend import TableHandler
+from functools import partial
+from sql import Column
+from sql.operators import Concat
+
+from trytond.model import Workflow, Model, ModelView, ModelSQL, fields
+from trytond import backend
from trytond.pyson import In, Eval, Not, Equal, If, Get, Bool
from trytond.transaction import Transaction
from trytond.pool import Pool
-__all__ = ['Move']
+__all__ = ['StockMixin', 'Move']
STATES = {
'readonly': In(Eval('state'), ['cancel', 'assigned', 'done']),
@@ -16,6 +21,120 @@ STATES = {
DEPENDS = ['state']
+class StockMixin:
+ '''Mixin class with helper to setup stock quantity field.'''
+
+ @classmethod
+ def _quantity_context(cls, name):
+ pool = Pool()
+ Date = pool.get('ir.date')
+
+ context = Transaction().context
+ new_context = {}
+ if name == 'quantity':
+ if (context.get('stock_date_end')
+ and context['stock_date_end'] > Date.today()):
+ new_context['stock_date_end'] = Date.today()
+ elif name == 'forecast_quantity':
+ new_context['forecast'] = True
+ if not context.get('stock_date_end'):
+ new_context['stock_date_end'] = datetime.date.max
+ return new_context
+
+ @classmethod
+ def _get_quantity(cls, records, name, location_ids, products=None,
+ grouping=('product',), position=-1):
+ """
+ Compute for each record the stock quantity in the default uom of the
+ product.
+
+ location_ids is the list of IDs of locations to take account to compute
+ the stock. It can't be empty.
+ products restrict the stock computation to the this products (more
+ efficient), so it should be the products related to records.
+ If it is None all products are used.
+ grouping defines how stock moves are grouped.
+ position defines which field of grouping corresponds to the record
+ whose quantity is computed.
+
+ Return a dictionary with records id as key and quantity as value.
+ """
+ pool = Pool()
+ Product = pool.get('product.product')
+
+ record_ids = [r.id for r in records]
+ quantities = dict.fromkeys(record_ids, 0.0)
+ if not location_ids:
+ return quantities
+
+ product_ids = products and [p.id for p in products] or None
+
+ with Transaction().set_context(cls._quantity_context(name)):
+ pbl = Product.products_by_location(location_ids=location_ids,
+ product_ids=product_ids, with_childs=True,
+ grouping=grouping)
+
+ for key, quantity in pbl.iteritems():
+ # pbl could return None in some keys
+ if (key[position] is not None and
+ key[position] in quantities):
+ quantities[key[position]] += quantity
+ return quantities
+
+ @classmethod
+ def _search_quantity(cls, name, location_ids, domain=None,
+ grouping=('product',), position=-1):
+ """
+ Compute the domain to filter records which validates the domain over
+ quantity field.
+
+ location_ids is the list of IDs of locations to take account to compute
+ the stock. It can't be empty.
+ grouping defines how stock moves are grouped.
+ position defines which field of grouping corresponds to the record
+ whose quantity is computed.
+ """
+ pool = Pool()
+ Product = pool.get('product.product')
+
+ if not location_ids or not domain:
+ return []
+
+ def _search_quantity_eval_domain(line, domain):
+ operator_funcs = {
+ '=': operator.eq,
+ '>=': operator.ge,
+ '>': operator.gt,
+ '<=': operator.le,
+ '<': operator.lt,
+ '!=': operator.ne,
+ 'in': lambda v, l: v in l,
+ 'not in': lambda v, l: v not in l,
+ }
+
+ field, op, operand = domain
+ value = line.get(field)
+ return operator_funcs[op](value, operand)
+
+ with Transaction().set_context(cls._quantity_context(name)):
+ pbl = Product.products_by_location(
+ location_ids=location_ids,
+ with_childs=True, grouping=grouping)
+
+ processed_lines = []
+ for key, quantity in pbl.iteritems():
+ # pbl could return None in some keys
+ if key[position] is not None:
+ processed_lines.append({
+ 'record_id': key[position],
+ name: quantity,
+ })
+
+ record_ids = [line['record_id'] for line in processed_lines
+ if _search_quantity_eval_domain(line, domain)]
+ return [('id', 'in', record_ids)]
+
+
class Move(Workflow, ModelSQL, ModelView):
"Stock Move"
__name__ = 'stock.move'
@@ -75,7 +194,7 @@ class Move(Workflow, ModelSQL, ModelView):
},
domain=[
('id', If(In('company', Eval('context', {})), '=', '!='),
- Get(Eval('context', {}), 'company', 0)),
+ Eval('context', {}).get('company', -1)),
],
depends=['state'])
unit_price = fields.Numeric('Unit Price', digits=(16, 4),
@@ -100,6 +219,13 @@ class Move(Workflow, ModelSQL, ModelView):
@classmethod
def __setup__(cls):
super(Move, cls).__setup__()
+ cls._deny_modify_assigned = set(['product', 'uom', 'quantity',
+ 'from_location', 'to_location', 'company', 'unit_price',
+ 'currency'])
+ cls._deny_modify_done_cancel = (cls._deny_modify_assigned |
+ set(['planned_date', 'effective_date', 'state']))
+ cls._allow_modify_closed_period = set()
+
cls._sql_constraints += [
('check_move_qty_pos',
'CHECK(quantity >= 0.0)', 'Move quantity must be positive'),
@@ -121,8 +247,10 @@ class Move(Workflow, ModelSQL, ModelView):
'it is not in draft or cancelled state.'),
'period_closed': ('You can not modify move "%(move)s" because '
'period "%(period)s" is closed.'),
- 'modify_assigned_done_cancel': ('You can not modify stock move "%s"'
- 'because it is in "Assigned", "Done" or "Cancel" state.'),
+ 'modify_assigned': ('You can not modify stock move "%s" because '
+ 'it is in "Assigned" state.'),
+ 'modify_done_cancel': ('You can not modify stock move "%s" '
+ 'because it is in "Done" or "Cancel" state.'),
})
cls._transitions |= set((
('draft', 'assigned'),
@@ -149,7 +277,10 @@ class Move(Workflow, ModelSQL, ModelView):
@classmethod
def __register__(cls, module_name):
+ TableHandler = backend.get('TableHandler')
cursor = Transaction().cursor
+ sql_table = cls.__table__()
+
# Migration from 1.2: packing renamed into shipment
table = TableHandler(cursor, cls, module_name)
table.drop_constraint('check_packing')
@@ -177,10 +308,10 @@ class Move(Workflow, ModelSQL, ModelView):
for move in moves:
internal_quantity = cls._get_internal_quantity(
move.quantity, move.uom, move.product)
- cursor.execute(
- 'UPDATE "' + cls._table + '" '
- 'SET internal_quantity = %s '
- 'WHERE id = %s', (internal_quantity, move.id))
+ cursor.execute(*sql_table.update(
+ columns=[sql_table.internal_quantity],
+ values=[internal_quantity],
+ where=sql_table.id == move.id))
table = TableHandler(cursor, cls, module_name)
table.not_null_action('internal_quantity', action='add')
@@ -199,9 +330,11 @@ class Move(Workflow, ModelSQL, ModelView):
}
for column, model in shipments.iteritems():
if table.column_exist(column):
- cursor.execute('UPDATE "' + cls._table + '" '
- 'SET shipment = \'' + model + ',\' || "' + column + '" '
- 'WHERE "' + column + '" IS NOT NULL')
+ cursor.execute(*sql_table.update(
+ columns=[sql_table.shipment],
+ values=[Concat(model + ',',
+ Column(sql_table, column))],
+ where=Column(sql_table, column) != None))
table.drop_column(column)
# Add index on create_date
@@ -314,9 +447,9 @@ class Move(Workflow, ModelSQL, ModelView):
@classmethod
def get_shipment(cls):
- Model = Pool().get('ir.model')
+ IrModel = Pool().get('ir.model')
models = cls._get_shipment()
- models = Model.search([
+ models = IrModel.search([
('model', 'in', models),
])
return [(None, '')] + [(m.model, m.name) for m in models]
@@ -328,17 +461,16 @@ class Move(Workflow, ModelSQL, ModelView):
@classmethod
def get_origin(cls):
- Model = Pool().get('ir.model')
+ IrModel = Pool().get('ir.model')
models = cls._get_origin()
- models = Model.search([
+ models = IrModel.search([
('model', 'in', models),
])
return [(None, '')] + [(m.model, m.name) for m in models]
- @classmethod
- def validate(cls, moves):
- super(Move, cls).validate(moves)
- cls.check_period_closed(moves)
+ @property
+ def origin_name(self):
+ return self.origin.rec_name if self.origin else None
@classmethod
def check_period_closed(cls, moves):
@@ -363,7 +495,7 @@ class Move(Workflow, ModelSQL, ModelView):
@classmethod
def search_rec_name(cls, name, clause):
- return [('product',) + clause[1:]]
+ return [('product',) + tuple(clause[1:])]
def _update_product_cost_price(self, direction):
"""
@@ -511,30 +643,33 @@ class Move(Workflow, ModelSQL, ModelView):
internal_quantity = cls._get_internal_quantity(vals['quantity'],
uom, product)
vals['internal_quantity'] = internal_quantity
- return super(Move, cls).create(vlist)
+ moves = super(Move, cls).create(vlist)
+ cls.check_period_closed(moves)
+ return moves
@classmethod
def write(cls, moves, vals):
- if reduce(lambda x, y: x or y in vals, ('product', 'uom', 'quantity',
- 'from_location', 'to_location', 'company', 'unit_price',
- 'currency'), False):
+ vals_set = set(vals)
+ if cls._deny_modify_assigned & vals_set:
for move in moves:
- if move.state in ('assigned', 'done', 'cancel'):
- cls.raise_user_error('modify_assigned_done_cancel',
- (move.rec_name,))
- if reduce(lambda x, y: x or y in vals,
- ('planned_date', 'effective_date', 'state'), False):
+ if move.state == 'assigned':
+ cls.raise_user_error('modify_assigned', (move.rec_name,))
+ if cls._deny_modify_done_cancel & vals_set:
for move in moves:
if move.state in ('done', 'cancel'):
- cls.raise_user_error('modify_assigned_done_cancel',
+ cls.raise_user_error('modify_done_cancel',
(move.rec_name,))
+ if any(f not in cls._allow_modify_closed_period for f in vals):
+ cls.check_period_closed(moves)
+
super(Move, cls).write(moves, vals)
for move in moves:
internal_quantity = cls._get_internal_quantity(move.quantity,
move.uom, move.product)
- if internal_quantity != move.internal_quantity:
+ if (internal_quantity != move.internal_quantity
+ and internal_quantity != vals.get('internal_quantity')):
cls.write([move], {
'internal_quantity': internal_quantity,
})
@@ -571,7 +706,7 @@ class Move(Workflow, ModelSQL, ModelView):
return to_pick
@classmethod
- def assign_try(cls, moves):
+ def assign_try(cls, moves, grouping=('product',)):
'''
Try to assign moves.
It will split the moves to assign as much possible.
@@ -593,7 +728,17 @@ class Move(Workflow, ModelSQL, ModelView):
stock_assign=True):
pbl = Product.products_by_location(
location_ids=[l.id for l in locations],
- product_ids=[m.product.id for m in moves])
+ product_ids=[m.product.id for m in moves],
+ grouping=grouping)
+
+ def get_key(location):
+ key = (location.id,)
+ for field in grouping:
+ value = getattr(move, field)
+ if isinstance(value, Model):
+ value = value.id
+ key += (value,)
+ return key
success = True
for move in moves:
@@ -605,11 +750,11 @@ class Move(Workflow, ModelSQL, ModelView):
('parent', 'child_of', [move.from_location.id]),
])
for location in childs:
- if (location.id, move.product.id) in pbl:
+ key = get_key(location)
+ if key in pbl:
location_qties[location] = Uom.compute_qty(
- move.product.default_uom,
- pbl[(location.id, move.product.id)], move.uom,
- round=False)
+ move.product.default_uom, pbl[key], move.uom,
+ round=False)
to_pick = move.pick_product(location_qties)
@@ -640,10 +785,7 @@ class Move(Workflow, ModelSQL, ModelView):
qty_default_uom = Uom.compute_qty(move.uom, qty,
move.product.default_uom, round=False)
- pbl[(from_location.id, move.product.id)] = (
- pbl.get((from_location.id, move.product.id), 0.0)
- - qty_default_uom)
- pbl[(to_location.id, move.product.id)] = (
- pbl.get((to_location.id, move.product.id), 0.0)
- + qty_default_uom)
+ from_key, to_key = get_key(from_location), get_key(to_location)
+ pbl[from_key] = pbl.get(from_key, 0.0) - qty_default_uom
+ pbl[to_key] = pbl.get(to_key, 0.0) + qty_default_uom
return success
diff --git a/period.py b/period.py
index d7981f2..fb29f87 100644
--- a/period.py
+++ b/period.py
@@ -1,7 +1,7 @@
#This file is part of Tryton. The COPYRIGHT file at the top level of
#this repository contains the full copyright notices and license terms.
from itertools import chain
-from trytond.model import ModelView, ModelSQL, fields
+from trytond.model import Workflow, ModelView, ModelSQL, fields
from trytond.pyson import Equal, Eval, If, In, Get
from trytond.transaction import Transaction
from trytond.pool import Pool
@@ -9,7 +9,7 @@ from trytond.pool import Pool
__all__ = ['Period', 'Cache']
-class Period(ModelSQL, ModelView):
+class Period(Workflow, ModelSQL, ModelView):
'Stock Period'
__name__ = 'stock.period'
_rec_name = 'date'
@@ -19,9 +19,10 @@ class Period(ModelSQL, ModelView):
company = fields.Many2One('company.company', 'Company', required=True,
domain=[
('id', If(In('company', Eval('context', {})), '=', '!='),
- Get(Eval('context', {}), 'company', 0)),
+ Eval('context', {}).get('company', -1)),
])
- caches = fields.One2Many('stock.period.cache', 'period', 'Caches')
+ caches = fields.One2Many('stock.period.cache', 'period', 'Caches',
+ readonly=True)
state = fields.Selection([
('draft', 'Draft'),
('closed', 'Closed'),
@@ -33,9 +34,14 @@ class Period(ModelSQL, ModelView):
cls._error_messages.update({
'close_period_future_today': ('You can not close a period '
'in the future or today.'),
- 'close_period_assigned_move': ('You can not close a period when '
+ 'close_period_assigned_move': (
+ 'You can not close a period when '
'there still are assigned moves.'),
})
+ cls._transitions |= set((
+ ('draft', 'closed'),
+ ('closed', 'draft'),
+ ))
cls._buttons.update({
'draft': {
'invisible': Eval('state') == 'draft',
@@ -49,28 +55,38 @@ class Period(ModelSQL, ModelView):
def default_state():
return 'draft'
+ @staticmethod
+ def groupings():
+ return [('product',)]
+
+ @staticmethod
+ def get_cache(grouping):
+ pool = Pool()
+ if grouping == ('product',):
+ return pool.get('stock.period.cache')
+
@classmethod
@ModelView.button
+ @Workflow.transition('draft')
def draft(cls, periods):
- Cache = Pool().get('stock.period.cache')
- caches = []
- for i in xrange(0, len(periods), Transaction().cursor.IN_MAX):
- caches.append(Cache.search([
- ('period', 'in', [p.id for p in
- periods[i:i + Transaction().cursor.IN_MAX]]),
- ], order=[]))
- Cache.delete(list(chain(*caches)))
- cls.write(periods, {
- 'state': 'draft',
- })
+ in_max = Transaction().cursor.IN_MAX
+ for grouping in cls.groupings():
+ Cache = cls.get_cache(grouping)
+ caches = []
+ for i in xrange(0, len(periods), in_max):
+ caches.append(Cache.search([
+ ('period', 'in',
+ [p.id for p in periods[i:i + in_max]]),
+ ], order=[]))
+ Cache.delete(list(chain(*caches)))
@classmethod
@ModelView.button
+ @Workflow.transition('closed')
def close(cls, periods):
pool = Pool()
Product = pool.get('product.product')
Location = pool.get('stock.location')
- Cache = pool.get('stock.period.cache')
Move = pool.get('stock.move')
Date = pool.get('ir.date')
@@ -92,28 +108,30 @@ class Period(ModelSQL, ModelView):
]]):
cls.raise_user_error('close_period_assigned_move')
- to_create = []
- for period in periods:
- with Transaction().set_context(
- stock_date_end=period.date,
- stock_date_start=None,
- stock_assign=False,
- forecast=False,
- stock_destinations=None,
- ):
- pbl = Product.products_by_location([l.id for l in locations])
- for (location_id, product_id), quantity in pbl.iteritems():
- to_create.append({
+ for grouping in cls.groupings():
+ Cache = cls.get_cache(grouping)
+ to_create = []
+ for period in periods:
+ with Transaction().set_context(
+ stock_date_end=period.date,
+ stock_date_start=None,
+ stock_assign=False,
+ forecast=False,
+ stock_destinations=None,
+ ):
+ pbl = Product.products_by_location(
+ [l.id for l in locations], grouping=grouping)
+ for key, quantity in pbl.iteritems():
+ values = {
+ 'location': key[0],
'period': period.id,
- 'location': location_id,
- 'product': product_id,
'internal_quantity': quantity,
- })
- if to_create:
- Cache.create(to_create)
- cls.write(periods, {
- 'state': 'closed',
- })
+ }
+ for i, field in enumerate(grouping, 1):
+ values[field] = key[i]
+ to_create.append(values)
+ if to_create:
+ Cache.create(to_create)
class Cache(ModelSQL, ModelView):
diff --git a/picking_list.odt b/picking_list.odt
index 41d0b5b..6edecd1 100644
Binary files a/picking_list.odt and b/picking_list.odt differ
diff --git a/product.py b/product.py
index 6bb1fd0..4ca8975 100644
--- a/product.py
+++ b/product.py
@@ -2,13 +2,21 @@
#this repository contains the full copyright notices and license terms.
import datetime
from decimal import Decimal
+from operator import itemgetter
+from sql import Literal, Union, Column
+from sql.aggregate import Max, Sum
+from sql.functions import Now
+from sql.conditionals import Coalesce
+
from trytond.model import ModelSQL, ModelView, fields
from trytond.wizard import Wizard, StateView, StateAction, Button
from trytond.pyson import PYSONEncoder, Eval, Or
from trytond.transaction import Transaction
-from trytond.tools import safe_eval, reduce_ids
+from trytond.tools import reduce_ids
from trytond.pool import Pool, PoolMeta
+from .move import StockMixin
+
__all__ = ['Template', 'Product',
'ProductByLocationStart', 'ProductByLocation',
'ProductQuantitiesByWarehouse', 'ProductQuantitiesByWarehouseStart',
@@ -69,7 +77,8 @@ class Template:
super(Template, cls).write(templates, vals)
-class Product:
+class Product(object, StockMixin):
+ __metaclass__ = PoolMeta
__name__ = "product.product"
quantity = fields.Function(fields.Float('Quantity'), 'get_quantity',
searcher='search_quantity')
@@ -80,80 +89,13 @@ class Product:
@classmethod
def get_quantity(cls, products, name):
- Date = Pool().get('ir.date')
-
- quantities = dict((p.id, 0.0) for p in products)
- if not Transaction().context.get('locations'):
- return quantities
-
- context = {}
- if (name == 'quantity'
- and Transaction().context.get('stock_date_end')
- and Transaction().context.get('stock_date_end') >
- Date.today()):
- context['stock_date_end'] = Date.today()
-
- if name == 'forecast_quantity':
- context['forecast'] = True
- if not Transaction().context.get('stock_date_end'):
- context['stock_date_end'] = datetime.date.max
- with Transaction().set_context(context):
- pbl = cls.products_by_location(
- location_ids=Transaction().context['locations'],
- product_ids=quantities.keys(), with_childs=True)
-
- for location in Transaction().context['locations']:
- for product in products:
- quantities[product.id] += pbl.get((location, product.id), 0.0)
- return quantities
-
- @staticmethod
- def _search_quantity_eval_domain(line, domain):
- field, operator, operand = domain
- value = line.get(field)
- if value is None:
- return False
- if operator not in ("=", ">=", "<=", ">", "<", "!="):
- return False
- if operator == "=":
- operator = "=="
- return (safe_eval(str(value) + operator + str(operand)))
+ location_ids = Transaction().context.get('locations')
+ return cls._get_quantity(products, name, location_ids, products)
@classmethod
def search_quantity(cls, name, domain=None):
- Date = Pool().get('ir.date')
-
- if not (Transaction().context.get('locations') and domain):
- return []
-
- context = {}
- if (name == 'quantity'
- and Transaction().context.get('stock_date_end')
- and Transaction().context.get('stock_date_end') >
- Date.today()):
- context['stock_date_end'] = Date.today()
-
- if name == 'forecast_quantity':
- context['forecast'] = True
- if not Transaction().context.get('stock_date_end'):
- context['stock_date_end'] = datetime.date.max
-
- with Transaction().set_context(context):
- pbl = cls.products_by_location(
- location_ids=Transaction().context['locations'],
- with_childs=True, skip_zero=False).iteritems()
-
- processed_lines = []
- for (location, product), quantity in pbl:
- processed_lines.append({
- 'location': location, # XXX useful ?
- 'product': product,
- name: quantity,
- })
-
- res = [line['product'] for line in processed_lines
- if cls._search_quantity_eval_domain(line, domain)]
- return [('id', 'in', res)]
+ location_ids = Transaction().context.get('locations')
+ return cls._search_quantity(name, location_ids, domain)
@classmethod
def get_cost_value(cls, products, name):
@@ -174,7 +116,7 @@ class Product:
@classmethod
def products_by_location(cls, location_ids, product_ids=None,
- with_childs=False, skip_zero=True):
+ with_childs=False, grouping=('product',)):
"""
Compute for each location and product the stock quantity in the default
uom of the product.
@@ -193,9 +135,9 @@ class Product:
the storage zone.
If product_ids is None all products are used.
If with_childs, it computes also for child locations.
- If skip_zero it lists also items with zero quantity
+ grouping defines how stock moves are grouped.
- Return a dictionary with (location id, product id) as key
+ Return a dictionary with location id and grouping as key
and quantity as value.
"""
pool = Pool()
@@ -204,6 +146,13 @@ class Product:
Location = pool.get('stock.location')
Date = pool.get('ir.date')
Period = pool.get('stock.period')
+ Move = pool.get('stock.move')
+ Product = pool.get('product.product')
+ Template = pool.get('product.template')
+
+ move = Move.__table__()
+ product = Product.__table__()
+ template = Template.__table__()
today = Date.today()
@@ -211,6 +160,12 @@ class Product:
return {}
cursor = Transaction().cursor
context = Transaction().context.copy()
+
+ for field in grouping:
+ if field not in Move._fields:
+ raise ValueError('"%s" has no field "%s"' % (Move, field))
+ assert 'product' in grouping
+
# Skip warehouse location in favor of their storage location
# to compute quantities. Keep track of which ids to remove
# and to add after the query.
@@ -227,9 +182,14 @@ class Product:
wh_to_add[location.id] = location.storage_location.id
location_ids = list(location_ids)
- move_rule_query, move_rule_val = Rule.domain_get('stock.move')
+ move_rule_query = Rule.domain_get('stock.move')
+ if move_rule_query is None:
+ move_rule_query = Literal(True)
- period_clause, period_vals = 'period = %s', [0]
+ PeriodCache = Period.get_cache(grouping)
+ period = None
+ if PeriodCache:
+ period_cache = PeriodCache.__table__()
if not context.get('stock_date_end'):
context['stock_date_end'] = datetime.date.max
@@ -239,152 +199,105 @@ class Product:
or (context['stock_date_end'] == today
and not context.get('forecast'))):
state_date_clause = (
- '('
- '(state in (%s, %s)) '
- 'AND '
- '('
- '('
- '(effective_date IS NULL) '
- 'AND '
- '(planned_date <= %s) '
- ') '
- 'OR '
- '(effective_date <= %s)'
- ')'
- ')')
- state_date_vals = ["done",
- context.get('stock_assign') and 'assigned' or 'done',
- context['stock_date_end'],
- context['stock_date_end'],
- ]
+ move.state.in_(['done',
+ context.get('stock_assign') and 'assigned' or 'done'])
+ & (
+ (
+ (move.effective_date == None)
+ & (move.planned_date <= context['stock_date_end'])
+ )
+ | (move.effective_date <= context['stock_date_end'])
+ )
+ )
# future date end: filter move on state done and date
# before today, or on all state and date between today and
# date_end.
else:
state_date_clause = (
- '('
- '('
- '(state in (%s, %s)) '
- 'AND '
- '('
- '('
- '(effective_date IS NULL) '
- 'AND '
- '(planned_date <= %s) '
- ') '
- 'OR '
- '(effective_date <= %s)'
- ')'
- ')'
- 'OR '
- '('
- '(state in (%s, %s, %s)) '
- 'AND '
- '('
- '('
- '(effective_date IS NULL) '
- 'AND '
- '(COALESCE(planned_date, %s) <= %s) '
- 'AND '
- '(COALESCE(planned_date, %s) >= %s)'
- ')'
- 'OR '
- '('
- '(effective_date <= %s) '
- 'AND '
- '(effective_date >= %s)'
- ')'
- ')'
- ')'
- ')')
-
- state_date_vals = [
- 'done', context.get('stock_assign') and 'assigned' or 'done',
- today, today,
- 'done', 'assigned', 'draft',
- datetime.date.max, context['stock_date_end'],
- datetime.date.max, today,
- context['stock_date_end'], today,
- ]
+ (move.state.in_(['done',
+ context.get('stock_assign') and 'assigned'
+ or 'done'])
+ & (
+ (
+ (move.effective_date == None)
+ & (move.planned_date <= today)
+ )
+ | (move.effective_date <= today)
+ )
+ )
+ | (move.state.in_(['done', 'assigned', 'draft'])
+ & (
+ (
+ (move.effective_date == None)
+ & (Coalesce(move.planned_date, datetime.date.max)
+ <= context['stock_date_end'])
+ & (Coalesce(move.planned_date, datetime.date.max)
+ >= today)
+ )
+ | (
+ (move.effective_date <= context['stock_date_end'])
+ & (move.effective_date >= today)
+ )
+ )
+ )
+ )
if context.get('stock_date_start'):
if context['stock_date_start'] > today:
- state_date_clause += ('AND '
- '('
- '(state in (%s, %s, %s)) '
- 'AND '
- '('
- '('
- '(effective_date IS NULL) '
- 'AND '
- '('
- '(planned_date >= %s) '
- 'OR '
- '(planned_date IS NULL)'
- ')'
- ') '
- 'OR '
- '(effective_date >= %s)'
- ')'
- ')')
- state_date_vals.extend(['done', 'assigned', 'draft',
- context['stock_date_start'], context['stock_date_start']])
+ state_date_clause &= (
+ move.state.in_(['done', 'assigned', 'draft'])
+ & (
+ (
+ (move.effective_date == None)
+ & (
+ (move.planned_date >=
+ context['stock_date_start'])
+ | (move.planned_date == None)
+ )
+ )
+ | (move.effective_date >= context['stock_date_start'])
+ )
+ )
else:
- state_date_clause += ('AND '
- '('
- '('
- '(state in (%s, %s, %s)) '
- 'AND '
- '('
- '('
- '(effective_date IS NULL) '
- 'AND '
- '('
- '(planned_date >= %s) '
- 'OR '
- '(planned_date IS NULL)'
- ') '
- ')'
- 'OR '
- '(effective_date >= %s)'
- ')'
- ') '
- 'OR '
- '('
- '(state in (%s, %s)) '
- 'AND '
- '('
- '('
- '(effective_date IS NULL) '
- 'AND '
- '('
- '('
- '(planned_date >= %s) '
- 'AND '
- '(planned_date < %s)'
- ') '
- 'OR '
- '(planned_date IS NULL)'
- ')'
- ') '
- 'OR '
- '('
- '(effective_date >= %s) '
- 'AND '
- '(effective_date < %s)'
- ')'
- ')'
- ')'
- ')')
-
- state_date_vals.extend(['done', 'assigned', 'draft',
- today, today,
- 'done',
- context.get('stock_assign') and 'assigned' or 'done',
- context['stock_date_start'], today,
- context['stock_date_start'], today,
- ])
- else:
+ state_date_clause &= (
+ (
+ move.state.in_(['done', 'assigned', 'draft'])
+ & (
+ (
+ (move.effective_date == None)
+ & (
+ (move.planned_date >= today)
+ | (move.planned_date == None)
+ )
+ )
+ | (move.effective_date >= today)
+ )
+ )
+ | (
+ move.state.in_(['done',
+ context.get('stock_assign') and 'assigned'
+ or 'done'])
+ & (
+ (
+ (move.effective_date == None)
+ & (
+ (
+ (move.planned_date >=
+ context['stock_date_start'])
+ & (move.planned_date < today)
+ )
+ | (move.planned_date == None)
+ )
+ )
+ | (
+ (move.effective_date >=
+ context['stock_date_start'])
+ & (move.effective_date < today)
+ )
+ )
+ )
+ )
+ elif PeriodCache:
with Transaction().set_user(0, set_context=True):
periods = Period.search([
('date', '<', context['stock_date_end']),
@@ -392,105 +305,104 @@ class Product:
], order=[('date', 'DESC')], limit=1)
if periods:
period, = periods
- state_date_clause += (' AND '
- '(COALESCE(effective_date, planned_date, %s) > %s)')
- state_date_vals.extend([datetime.date.max, period.date])
- period_vals[0] = period.id
+ state_date_clause &= (
+ Coalesce(move.effective_date, move.planned_date,
+ datetime.date.max) > period.date)
if with_childs:
- query, args = Location.search([
+ location_query = Location.search([
('parent', 'child_of', location_ids),
- ], query_string=True, order=[])
- where_clause = " IN (" + query + ") "
- where_vals = args
+ ], query=True, order=[])
else:
- where_clause = " IN (" + \
- ",".join(('%s',) * len(location_ids)) + ") "
- where_vals = location_ids[:]
+ location_query = location_ids[:]
- if move_rule_query:
- move_rule_query = " AND " + move_rule_query + " "
-
- product_template_join = ""
- product_template_join_period = ""
+ from_ = move
+ if PeriodCache:
+ from_period = period_cache
if product_ids:
- red_clause, red_vals = reduce_ids('product', product_ids)
- where_clause += "AND " + red_clause
- where_vals += red_vals
+ where = reduce_ids(move.product, product_ids)
+ if PeriodCache:
+ where_period = reduce_ids(period_cache.product, product_ids)
else:
- where_clause += "AND product_template.active = %s"
- where_vals.append(True)
- product_template_join = (
- "JOIN product_product "
- "ON (stock_move.product = product_product.id) "
- "JOIN product_template "
- "ON (product_product.template = "
- "product_template.id) ")
- product_template_join_period = (
- "JOIN product_product "
- "ON (stock_period_cache.product = product_product.id) "
- "JOIN product_template "
- "ON (product_product.template = product_template.id) ")
+ where = where_period = template.active == True
+ from_ = from_.join(product, condition=move.product == product.id)
+ from_ = from_.join(template,
+ condition=product.template == template.id)
+ if PeriodCache:
+ from_period = from_period.join(product,
+ condition=period_cache.product == product.id)
+ from_period = from_period.join(template,
+ condition=product.template == template.id)
if context.get('stock_destinations'):
destinations = context.get('stock_destinations')
- dest_clause_from = " AND from_location in ("
- dest_clause_from += ",".join(('%s',) * len(destinations))
- dest_clause_from += ") "
- dest_clause_to = " AND to_location in ("
- dest_clause_to += ",".join(('%s',) * len(destinations))
- dest_clause_to += ") "
- dest_vals = destinations
+ dest_clause_from = move.from_location.in_(destinations)
+ dest_clause_to = move.to_location.in_(destinations)
- dest_clause_period = (' AND location IN ('
- + ','.join(('%s',) * len(destinations)) + ') ')
+ if PeriodCache:
+ dest_clause_period = period_cache.location.in_(destinations)
else:
- dest_clause_from = dest_clause_to = dest_clause_period = ""
- dest_vals = []
+ dest_clause_from = dest_clause_to = dest_clause_period = \
+ Literal(True)
# The main select clause is a union between three similar subqueries.
# One that sums incoming moves towards locations, one that sums
# outgoing moves and one for the period cache. UNION ALL is used
# because we already know that there will be no duplicates.
- select_clause = (
- "SELECT location, product, sum(quantity) AS quantity "
- "FROM ( "
- "SELECT to_location AS location, product, "
- "SUM(internal_quantity) AS quantity "
- "FROM stock_move " + product_template_join + " "
- "WHERE (%s) "
- "AND to_location %s "
- "GROUP BY to_location, product "
- "UNION ALL "
- "SELECT from_location AS location, product, "
- "-SUM(internal_quantity) AS quantity "
- "FROM stock_move " + product_template_join + " "
- "WHERE (%s) "
- "AND from_location %s "
- "GROUP BY from_location, product, uom "
- "UNION ALL "
- "SELECT location, product, internal_quantity AS quantity "
- "FROM stock_period_cache "
- + product_template_join_period + " "
- "WHERE (%s) "
- "AND location %s "
- ") AS T GROUP BY T.location, T.product")
-
- cursor.execute(select_clause % (
- state_date_clause,
- where_clause + move_rule_query + dest_clause_from,
- state_date_clause,
- where_clause + move_rule_query + dest_clause_to,
- period_clause, where_clause + dest_clause_period),
- state_date_vals + where_vals + move_rule_val + dest_vals +
- state_date_vals + where_vals + move_rule_val + dest_vals +
- period_vals + where_vals + dest_vals)
+ move_keys = [Column(move, key).as_(key) for key in grouping]
+ query = from_.select(move.to_location.as_('location'),
+ Sum(move.internal_quantity).as_('quantity'),
+ *move_keys,
+ where=state_date_clause
+ & where
+ & move.to_location.in_(location_query)
+ & move.id.in_(move_rule_query)
+ & dest_clause_from,
+ group_by=[move.to_location] + move_keys)
+ query = Union(query, from_.select(move.from_location.as_('location'),
+ (-Sum(move.internal_quantity)).as_('quantity'),
+ *move_keys,
+ where=state_date_clause
+ & where
+ & move.from_location.in_(location_query)
+ & move.id.in_(move_rule_query)
+ & dest_clause_to,
+ group_by=[move.from_location] + move_keys),
+ all_=True)
+ if PeriodCache:
+ period_keys = [Column(period_cache, key).as_(key)
+ for key in grouping]
+ query = Union(query, from_period.select(
+ period_cache.location.as_('location'),
+ period_cache.internal_quantity.as_('quantity'),
+ *period_keys,
+ where=(period_cache.period
+ == (period.id if period else None))
+ & where_period
+ & period_cache.location.in_(location_query)
+ & dest_clause_period),
+ all_=True)
+ query_keys = [Column(query, key).as_(key) for key in grouping]
+ columns = ([query.location.as_('location')]
+ + query_keys
+ + [Sum(query.quantity).as_('quantity')])
+ query = query.select(*columns,
+ group_by=[query.location] + query_keys)
+ cursor.execute(*query)
raw_lines = cursor.fetchall()
- res_product_ids = set(product for _, product, _ in raw_lines)
- res = dict(((location, product), quantity)
- for location, product, quantity in raw_lines)
+ product_getter = itemgetter(grouping.index('product') + 1)
+ res_product_ids = set()
+ res = {}
+ keys = set()
+ for line in raw_lines:
+ location = line[0]
+ key = tuple(line[1:-1])
+ quantity = line[-1]
+ res[(location,) + key] = quantity
+ res_product_ids.add(product_getter(line))
+ keys.add(key)
# Propagate quantities on from child locations to their parents
if with_childs:
@@ -514,9 +426,10 @@ class Product:
locations.remove(l)
if l not in parent:
continue
- for product in res_product_ids:
- res.setdefault((parent[l], product), 0)
- res[(parent[l], product)] += res.get((l, product), 0)
+ for key in keys:
+ parent_key = (parent[l],) + key
+ res.setdefault(parent_key, 0)
+ res[parent_key] += res.get((l,) + key, 0)
next_leafs = set(locations)
for l in locations:
if l not in parent:
@@ -526,30 +439,20 @@ class Product:
leafs = next_leafs
# clean result
- for location, product in res.keys():
+ for key in res.keys():
+ location = key[0]
if location not in location_ids:
- del res[(location, product)]
+ del res[key]
# Round quantities
default_uom = dict((p.id, p.default_uom) for p in
cls.browse(list(res_product_ids)))
for key, quantity in res.iteritems():
- location, product = key
+ location = key[0]
+ product = product_getter(key)
uom = default_uom[product]
res[key] = Uom.round(quantity, uom.rounding)
- # Complete result with missing products if asked
- if not skip_zero:
- # Search for all products, even if not linked with moves
- if product_ids:
- all_product_ids = product_ids
- else:
- all_product_ids = cls.search([])
- keys = ((l, p) for l in location_ids for p in all_product_ids)
- for location_id, product_id in keys:
- if (location_id, product_id) not in res:
- res[(location_id, product_id)] = 0.0
-
if wh_to_add:
for wh, storage in wh_to_add.iteritems():
for product in product_ids:
@@ -632,24 +535,27 @@ class ProductQuantitiesByWarehouse(ModelSQL, ModelView):
pool = Pool()
Move = pool.get('stock.move')
Location = pool.get('stock.location')
+ move = Move.__table__()
product_id = Transaction().context.get('product')
warehouse_id = Transaction().context.get('warehouse', -1)
- warehouse_clause, warehouse_params = Location.search([
+ warehouse_query = Location.search([
('parent', 'child_of', [warehouse_id]),
- ], query_string=True, order=[])
- return ('SELECT MAX(id) AS id, '
- '0 AS create_uid, '
- 'NOW() AS create_date, '
- 'NULL AS write_uid, '
- 'NULL AS write_date, '
- 'COALESCE(effective_date, planned_date) AS date '
- 'FROM "' + Move._table + '" '
- 'WHERE product = %s '
- 'AND (from_location IN (' + warehouse_clause + ') '
- 'OR to_location IN (' + warehouse_clause + ')) '
- 'AND COALESCE(effective_date, planned_date) IS NOT NULL '
- 'GROUP BY date, product', [product_id] + 2 * warehouse_params)
+ ], query=True, order=[])
+ date_column = Coalesce(move.effective_date, move.planned_date
+ ).as_('date')
+ return move.select(
+ Max(move.id).as_('id'),
+ Literal(0).as_('create_uid'),
+ Now().as_('create_date'),
+ Literal(None).as_('write_uid'),
+ Literal(None).as_('write_date'),
+ date_column,
+ where=(move.product == product_id)
+ & (move.from_location.in_(warehouse_query)
+ | move.to_location.in_(warehouse_query))
+ & (Coalesce(move.effective_date, move.planned_date) != None),
+ group_by=(date_column, move.product))
@classmethod
def get_quantity(cls, lines, name):
@@ -669,8 +575,8 @@ class ProductQuantitiesByWarehouse(ModelSQL, ModelView):
}
with Transaction().set_context(**context):
quantities[date] = Product.products_by_location(
- [warehouse_id], [product_id], with_childs=True,
- skip_zero=False)[(warehouse_id, product_id)]
+ [warehouse_id], [product_id],
+ with_childs=True).get((warehouse_id, product_id), 0)
try:
date_start = date + datetime.timedelta(1)
except OverflowError:
diff --git a/product.xml b/product.xml
index 3f8fe0e..5b72e34 100644
--- a/product.xml
+++ b/product.xml
@@ -21,7 +21,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_location_quantity_tree">
<field name="name">Locations</field>
<field name="res_model">stock.location</field>
- <field name="domain">[('parent', '=', False)]</field>
+ <field name="domain">[('parent', '=', None)]</field>
<field name="window_name" eval="True"/>
</record>
<record model="ir.action.act_window.view" id="act_location_quantity_tree_view">
diff --git a/setup.py b/setup.py
index 26e2794..0ca2154 100644
--- a/setup.py
+++ b/setup.py
@@ -21,7 +21,7 @@ major_version, minor_version, _ = info.get('version', '0.0.1').split('.', 2)
major_version = int(major_version)
minor_version = int(minor_version)
-requires = []
+requires = ['python-sql']
for dep in info.get('depends', []):
if not re.match(r'(ir|res|webdav)(\W|$)', dep):
requires.append('trytond_%s >= %s.%s, < %s.%s' %
@@ -67,6 +67,7 @@ setup(name='trytond_stock',
'Natural Language :: French',
'Natural Language :: German',
'Natural Language :: Russian',
+ 'Natural Language :: Slovenian',
'Natural Language :: Spanish',
'Operating System :: OS Independent',
'Programming Language :: Python :: 2.6',
diff --git a/shipment.py b/shipment.py
index aeb17d9..9c50a08 100644
--- a/shipment.py
+++ b/shipment.py
@@ -3,12 +3,16 @@
import operator
import itertools
import datetime
+from sql import Table
+from sql.functions import Overlay, Position
+from sql.aggregate import Max
+from sql.operators import Concat
from trytond.model import Workflow, ModelView, ModelSQL, fields
from trytond.modules.company import CompanyReport
from trytond.wizard import Wizard, StateTransition, StateView, StateAction, \
Button
-from trytond.backend import TableHandler
+from trytond import backend
from trytond.pyson import Eval, Not, Equal, If, Or, And, Bool, In, Get, Id
from trytond.transaction import Transaction
from trytond.pool import Pool, PoolMeta
@@ -46,7 +50,7 @@ class ShipmentIn(Workflow, ModelSQL, ModelView):
},
domain=[
('id', If(In('company', Eval('context', {})), '=', '!='),
- Get(Eval('context', {}), 'company', 0)),
+ Eval('context', {}).get('company', -1)),
],
depends=['state'])
reference = fields.Char("Reference", size=None, select=True,
@@ -79,7 +83,7 @@ class ShipmentIn(Workflow, ModelSQL, ModelView):
warehouse_storage = fields.Function(fields.Many2One('stock.location',
'Warehouse Storage', on_change_with=['warehouse']),
'on_change_with_warehouse_storage')
- incoming_moves = fields.Function(fields.One2Many('stock.move', None,
+ incoming_moves = fields.Function(fields.One2Many('stock.move', 'shipment',
'Incoming Moves',
add_remove=[
('shipment', '=', None),
@@ -99,7 +103,7 @@ class ShipmentIn(Workflow, ModelSQL, ModelView):
depends=['state', 'warehouse', 'supplier_location',
'warehouse_input', 'company']),
'get_incoming_moves', setter='set_incoming_moves')
- inventory_moves = fields.Function(fields.One2Many('stock.move', None,
+ inventory_moves = fields.Function(fields.One2Many('stock.move', 'shipment',
'Inventory Moves',
domain=[
('from_location', '=', Eval('warehouse_input')),
@@ -116,6 +120,7 @@ class ShipmentIn(Workflow, ModelSQL, ModelView):
moves = fields.One2Many('stock.move', 'shipment', 'Moves',
domain=[('company', '=', Eval('company'))], readonly=True,
depends=['company'])
+ origins = fields.Function(fields.Char('Origins'), 'get_origins')
code = fields.Char("Code", size=None, select=True, readonly=True)
state = fields.Selection([
('draft', 'Draft'),
@@ -160,22 +165,42 @@ class ShipmentIn(Workflow, ModelSQL, ModelView):
@classmethod
def __register__(cls, module_name):
+ TableHandler = backend.get('TableHandler')
cursor = Transaction().cursor
+ model_data = Table('ir_model_data')
+ model = Table('ir_model')
+ model_field = Table('ir_model_field')
+ sql_table = cls.__table__()
+
# Migration from 1.2: packing renamed into shipment
- cursor.execute("UPDATE ir_model_data "
- "SET fs_id = REPLACE(fs_id, 'packing', 'shipment') "
- "WHERE fs_id like '%%packing%%' AND module = %s",
- (module_name,))
- cursor.execute("UPDATE ir_model "
- "SET model = REPLACE(model, 'packing', 'shipment') "
- "WHERE model like '%%packing%%' AND module = %s",
- (module_name,))
- cursor.execute("UPDATE ir_model_field "
- "SET relation = REPLACE(relation, 'packing', 'shipment'), "
- "name = REPLACE(name, 'packing', 'shipment') "
- "WHERE (relation like '%%packing%%' "
- "OR name like '%%packing%%') AND module = %s",
- (module_name,))
+ cursor.execute(*model_data.update(
+ columns=[model_data.fs_id],
+ values=[Overlay(model_data.fs_id, 'shipment',
+ Position('packing', model_data.fs_id),
+ len('packing'))],
+ where=model_data.fs_id.like('%packing%')
+ & (model_data.module == module_name)))
+ cursor.execute(*model.update(
+ columns=[model.model],
+ values=[Overlay(model.model, 'shipment',
+ Position('packing', model.model),
+ len('packing'))],
+ where=model.model.like('%packing%')
+ & (model.module == module_name)))
+ cursor.execute(*model_field.update(
+ columns=[model_field.relation],
+ values=[Overlay(model_field.relation, 'shipment',
+ Position('packing', model_field.relation),
+ len('packing'))],
+ where=model_field.relation.like('%packing%')
+ & (model_field.module == module_name)))
+ cursor.execute(*model_field.update(
+ columns=[model_field.name],
+ values=[Overlay(model_field.name, 'shipment',
+ Position('packing', model_field.name),
+ len('packing'))],
+ where=model_field.name.like('%packing%')
+ & (model_field.module == module_name)))
old_table = 'stock_packing_in'
if TableHandler.table_exist(cursor, old_table):
@@ -196,22 +221,23 @@ class ShipmentIn(Workflow, ModelSQL, ModelView):
Move = Pool().get('stock.move')
if (not created_company
and TableHandler.table_exist(cursor, Move._table)):
- cursor.execute('SELECT shipment.id, MAX(move.company) '
- 'FROM "%s" AS shipment '
- 'INNER JOIN "%s" AS move '
- 'ON \'%s,\' || shipment.id = move.shipment '
- 'GROUP BY shipment.id '
- 'ORDER BY MAX(move.company)'
- % (cls._table, Move._table, cls.__name__))
+ move = Move.__table__()
+ cursor.execute(*sql_table.join(move,
+ condition=(Concat(cls.__name__ + ',', sql_table.id)
+ == move.shipment)
+ ).select(sql_table.id, Max(move.company),
+ group_by=sql_table.id,
+ order_by=Max(move.company)))
for company_id, values in itertools.groupby(cursor.fetchall(),
operator.itemgetter(1)):
shipment_ids = [x[0] for x in values]
for i in range(0, len(shipment_ids), cursor.IN_MAX):
sub_ids = shipment_ids[i:i + cursor.IN_MAX]
- red_sql, red_ids = reduce_ids('id', sub_ids)
- cursor.execute('UPDATE "' + cls._table + '" '
- 'SET company = %s WHERE ' + red_sql,
- [company_id] + red_ids)
+ red_sql = reduce_ids(sql_table.id, sub_ids)
+ cursor.execute(*sql_table.update(
+ columns=[sql_table.company],
+ values=[company_id],
+ where=red_sql))
table.not_null_action('company', action='add')
# Add index on create_date
@@ -326,6 +352,15 @@ class ShipmentIn(Workflow, ModelSQL, ModelView):
})
@classmethod
+ def get_origins(cls, shipments, name):
+ origins = {}
+ with Transaction().set_user(0, set_context=True):
+ for shipment in cls.browse(shipments):
+ origins[shipment.id] = ', '.join(set(itertools.ifilter(None,
+ (m.origin_name for m in shipment.moves))))
+ return origins
+
+ @classmethod
def create(cls, vlist):
pool = Pool()
Sequence = pool.get('ir.sequence')
@@ -450,7 +485,7 @@ class ShipmentInReturn(Workflow, ModelSQL, ModelView):
},
domain=[
('id', If(In('company', Eval('context', {})), '=', '!='),
- Get(Eval('context', {}), 'company', 0)),
+ Eval('context', {}).get('company', -1)),
],
depends=['state'])
code = fields.Char("Code", size=None, select=True, readonly=True)
@@ -482,6 +517,7 @@ class ShipmentInReturn(Workflow, ModelSQL, ModelView):
('company', '=', Eval('company')),
],
depends=['state', 'from_location', 'to_location', 'company'])
+ origins = fields.Function(fields.Char('Origins'), 'get_origins')
state = fields.Selection([
('draft', 'Draft'),
('cancel', 'Canceled'),
@@ -537,7 +573,9 @@ class ShipmentInReturn(Workflow, ModelSQL, ModelView):
@classmethod
def __register__(cls, module_name):
+ TableHandler = backend.get('TableHandler')
cursor = Transaction().cursor
+ sql_table = cls.__table__()
# Migration from 1.2: packing renamed into shipment
old_table = 'stock_packing_in_return'
if TableHandler.table_exist(cursor, old_table):
@@ -558,22 +596,23 @@ class ShipmentInReturn(Workflow, ModelSQL, ModelView):
Move = Pool().get('stock.move')
if (not created_company
and TableHandler.table_exist(cursor, Move._table)):
- cursor.execute('SELECT shipment.id, MAX(move.company) '
- 'FROM "%s" AS shipment '
- 'INNER JOIN "%s" AS move '
- 'ON \'%s,\' || shipment.id = move.shipment '
- 'GROUP BY shipment.id '
- 'ORDER BY MAX(move.company)'
- % (cls._table, Move._table, cls.__name__))
+ move = Move.__table__()
+ cursor.execute(*sql_table.join(move,
+ condition=(Concat(cls.__name__ + ',', sql_table.id)
+ == move.shipment)
+ ).select(sql_table.id, Max(move.company),
+ group_by=sql_table.id,
+ order_by=Max(move.company)))
for company_id, values in itertools.groupby(cursor.fetchall(),
operator.itemgetter(1)):
shipment_ids = [x[0] for x in values]
for i in range(0, len(shipment_ids), cursor.IN_MAX):
sub_ids = shipment_ids[i:i + cursor.IN_MAX]
- red_sql, red_ids = reduce_ids('id', sub_ids)
- cursor.execute('UPDATE "' + cls._table + '" '
- 'SET company = %s WHERE ' + red_sql,
- [company_id] + red_ids)
+ red_sql = reduce_ids(sql_table.id, sub_ids)
+ cursor.execute(*sql_table.update(
+ columns=[sql_table.company],
+ values=[company_id],
+ where=red_sql))
table.not_null_action('company', action='add')
# Add index on create_date
@@ -609,6 +648,15 @@ class ShipmentInReturn(Workflow, ModelSQL, ModelView):
})
@classmethod
+ def get_origins(cls, shipments, name):
+ origins = {}
+ with Transaction().set_user(0, set_context=True):
+ for shipment in cls.browse(shipments):
+ origins[shipment.id] = ', '.join(set(itertools.ifilter(None,
+ (m.origin_name for m in shipment.moves))))
+ return origins
+
+ @classmethod
def create(cls, vlist):
pool = Pool()
Sequence = pool.get('ir.sequence')
@@ -743,7 +791,7 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
},
domain=[
('id', If(In('company', Eval('context', {})), '=', '!='),
- Get(Eval('context', {}), 'company', 0)),
+ Eval('context', {}).get('company', -1)),
],
depends=['state'])
customer = fields.Many2One('party.party', 'Customer', required=True,
@@ -777,7 +825,7 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
warehouse_output = fields.Function(fields.Many2One('stock.location',
'Warehouse Output', on_change_with=['warehouse']),
'on_change_with_warehouse_output')
- outgoing_moves = fields.Function(fields.One2Many('stock.move', None,
+ outgoing_moves = fields.Function(fields.One2Many('stock.move', 'shipment',
'Outgoing Moves',
domain=[
('from_location', '=', Eval('warehouse_output')),
@@ -791,7 +839,7 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
depends=['state', 'warehouse', 'customer', 'warehouse_output',
'customer_location', 'company']),
'get_outgoing_moves', setter='set_outgoing_moves')
- inventory_moves = fields.Function(fields.One2Many('stock.move', None,
+ inventory_moves = fields.Function(fields.One2Many('stock.move', 'shipment',
'Inventory Moves',
domain=[
('from_location', 'child_of', [Eval('warehouse_storage', -1)],
@@ -809,6 +857,7 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
moves = fields.One2Many('stock.move', 'shipment', 'Moves',
domain=[('company', '=', Eval('company'))], depends=['company'],
readonly=True)
+ origins = fields.Function(fields.Char('Origins'), 'get_origins')
code = fields.Char("Code", size=None, select=True, readonly=True)
state = fields.Selection([
('draft', 'Draft'),
@@ -876,7 +925,9 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
@classmethod
def __register__(cls, module_name):
+ TableHandler = backend.get('TableHandler')
cursor = Transaction().cursor
+ sql_table = cls.__table__()
# Migration from 1.2: packing renamed into shipment
old_table = 'stock_packing_out'
if TableHandler.table_exist(cursor, old_table):
@@ -898,22 +949,23 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
Move = Pool().get('stock.move')
if (not created_company
and TableHandler.table_exist(cursor, Move._table)):
- cursor.execute('SELECT shipment.id, MAX(move.company) '
- 'FROM "%s" AS shipment '
- 'INNER JOIN "%s" AS move '
- 'ON \'%s,\' || shipment.id = move.shipment '
- 'GROUP BY shipment.id '
- 'ORDER BY MAX(move.company)'
- % (cls._table, Move._table, cls.__name__))
+ move = Move.__table__()
+ cursor.execute(*sql_table.join(move,
+ condition=(Concat(cls.__name__ + ',', sql_table.id)
+ == move.shipment)
+ ).select(sql_table.id, Max(move.company),
+ group_by=sql_table.id,
+ order_by=Max(move.company)))
for company_id, values in itertools.groupby(cursor.fetchall(),
operator.itemgetter(1)):
shipment_ids = [x[0] for x in values]
for i in range(0, len(shipment_ids), cursor.IN_MAX):
sub_ids = shipment_ids[i:i + cursor.IN_MAX]
- red_sql, red_ids = reduce_ids('id', sub_ids)
- cursor.execute('UPDATE "' + cls._table + '" '
- 'SET company = %s WHERE ' + red_sql,
- [company_id] + red_ids)
+ red_sql = reduce_ids(sql_table.id, sub_ids)
+ cursor.execute(*sql_table.update(
+ columns=[sql_table.company],
+ values=[company_id],
+ where=red_sql))
table.not_null_action('company', action='add')
# Migration from 1.0 customer_location is no more used
@@ -999,6 +1051,15 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
})
@classmethod
+ def get_origins(cls, shipments, name):
+ origins = {}
+ with Transaction().set_user(0, set_context=True):
+ for shipment in cls.browse(shipments):
+ origins[shipment.id] = ', '.join(set(itertools.ifilter(None,
+ (m.origin_name for m in shipment.moves))))
+ return origins
+
+ @classmethod
@ModelView.button
@Workflow.transition('draft')
def draft(cls, shipments):
@@ -1262,7 +1323,7 @@ class ShipmentOutReturn(Workflow, ModelSQL, ModelView):
},
domain=[
('id', If(In('company', Eval('context', {})), '=', '!='),
- Get(Eval('context', {}), 'company', 0)),
+ Eval('context', {}).get('company', -1)),
],
depends=['state'])
customer = fields.Many2One('party.party', 'Customer', required=True,
@@ -1296,7 +1357,7 @@ class ShipmentOutReturn(Workflow, ModelSQL, ModelView):
warehouse_input = fields.Function(fields.Many2One('stock.location',
'Warehouse Input', on_change_with=['warehouse']),
'on_change_with_warehouse_input')
- incoming_moves = fields.Function(fields.One2Many('stock.move', None,
+ incoming_moves = fields.Function(fields.One2Many('stock.move', 'shipment',
'Incoming Moves',
domain=[
('from_location', '=', Eval('customer_location')),
@@ -1310,7 +1371,7 @@ class ShipmentOutReturn(Workflow, ModelSQL, ModelView):
depends=['state', 'warehouse', 'customer', 'customer_location',
'warehouse_input', 'company']),
'get_incoming_moves', setter='set_incoming_moves')
- inventory_moves = fields.Function(fields.One2Many('stock.move', None,
+ inventory_moves = fields.Function(fields.One2Many('stock.move', 'shipment',
'Inventory Moves',
domain=[
('from_location', '=', Eval('warehouse_input')),
@@ -1327,6 +1388,7 @@ class ShipmentOutReturn(Workflow, ModelSQL, ModelView):
moves = fields.One2Many('stock.move', 'shipment', 'Moves',
domain=[('company', '=', Eval('company'))], depends=['company'],
readonly=True)
+ origins = fields.Function(fields.Char('Origins'), 'get_origins')
code = fields.Char("Code", size=None, select=True, readonly=True)
state = fields.Selection([
('draft', 'Draft'),
@@ -1368,7 +1430,9 @@ class ShipmentOutReturn(Workflow, ModelSQL, ModelView):
@classmethod
def __register__(cls, module_name):
+ TableHandler = backend.get('TableHandler')
cursor = Transaction().cursor
+ sql_table = cls.__table__()
# Migration from 1.2: packing renamed into shipment
old_table = 'stock_packing_out_return'
if TableHandler.table_exist(cursor, old_table):
@@ -1390,22 +1454,23 @@ class ShipmentOutReturn(Workflow, ModelSQL, ModelView):
Move = Pool().get('stock.move')
if (not created_company
and TableHandler.table_exist(cursor, Move._table)):
- cursor.execute('SELECT shipment.id, MAX(move.company) '
- 'FROM "%s" AS shipment '
- 'INNER JOIN "%s" AS move '
- 'ON \'%s,\' || shipment.id = move.shipment '
- 'GROUP BY shipment.id '
- 'ORDER BY MAX(move.company)'
- % (cls._table, Move._table, cls.__name__))
+ move = Move.__table__()
+ cursor.execute(*sql_table.join(move,
+ condition=(Concat(cls.__name__ + ',', sql_table.id)
+ == move.shipment)
+ ).select(sql_table.id, Max(move.company),
+ group_by=sql_table.id,
+ order_by=Max(move.company)))
for company_id, values in itertools.groupby(cursor.fetchall(),
operator.itemgetter(1)):
shipment_ids = [x[0] for x in values]
for i in range(0, len(shipment_ids), cursor.IN_MAX):
sub_ids = shipment_ids[i:i + cursor.IN_MAX]
- red_sql, red_ids = reduce_ids('id', sub_ids)
- cursor.execute('UPDATE "' + cls._table + '" '
- 'SET company = %s WHERE ' + red_sql,
- [company_id] + red_ids)
+ red_sql = reduce_ids(sql_table.id, sub_ids)
+ cursor.execute(*sql_table.update(
+ columns=[sql_table.company],
+ values=[company_id],
+ where=red_sql))
table.not_null_action('company', action='add')
# Add index on create_date
@@ -1516,6 +1581,15 @@ class ShipmentOutReturn(Workflow, ModelSQL, ModelView):
})
@classmethod
+ def get_origins(cls, shipments, name):
+ origins = {}
+ with Transaction().set_user(0, set_context=True):
+ for shipment in cls.browse(shipments):
+ origins[shipment.id] = ', '.join(set(itertools.ifilter(None,
+ (m.origin_name for m in shipment.moves))))
+ return origins
+
+ @classmethod
def create(cls, vlist):
pool = Pool()
Sequence = pool.get('ir.sequence')
@@ -1689,7 +1763,7 @@ class ShipmentInternal(Workflow, ModelSQL, ModelView):
},
domain=[
('id', If(In('company', Eval('context', {})), '=', '!='),
- Get(Eval('context', {}), 'company', 0)),
+ Eval('context', {}).get('company', -1)),
],
depends=['state'])
code = fields.Char("Code", size=None, select=True, readonly=True)
@@ -1785,7 +1859,9 @@ class ShipmentInternal(Workflow, ModelSQL, ModelView):
@classmethod
def __register__(cls, module_name):
+ TableHandler = backend.get('TableHandler')
cursor = Transaction().cursor
+ sql_table = cls.__table__()
# Migration from 1.2: packing renamed into shipment
old_table = 'stock_packing_internal'
if TableHandler.table_exist(cursor, old_table):
@@ -1806,22 +1882,23 @@ class ShipmentInternal(Workflow, ModelSQL, ModelView):
Move = Pool().get('stock.move')
if (not created_company
and TableHandler.table_exist(cursor, Move._table)):
- cursor.execute('SELECT shipment.id, MAX(move.company) '
- 'FROM "%s" AS shipment '
- 'INNER JOIN "%s" AS move '
- 'ON \'%s,\' || shipment.id = move.shipment '
- 'GROUP BY shipment.id '
- 'ORDER BY MAX(move.company)'
- % (cls._table, Move._table, cls.__name__))
+ move = Move.__table__()
+ cursor.execute(*sql_table.join(move,
+ condition=(Concat(cls.__name__ + ',', sql_table.id)
+ == move.shipment)
+ ).select(sql_table.id, Max(move.company),
+ group_by=sql_table.id,
+ order_by=Max(move.company)))
for company_id, values in itertools.groupby(cursor.fetchall(),
operator.itemgetter(1)):
shipment_ids = [x[0] for x in values]
for i in range(0, len(shipment_ids), cursor.IN_MAX):
sub_ids = shipment_ids[i:i + cursor.IN_MAX]
- red_sql, red_ids = reduce_ids('id', sub_ids)
- cursor.execute('UPDATE "' + cls._table + '" '
- 'SET company = %s WHERE ' + red_sql,
- [company_id] + red_ids)
+ red_sql = reduce_ids(sql_table.id, sub_ids)
+ cursor.execute(*sql_table.update(
+ columns=[sql_table.company],
+ values=[company_id],
+ where=red_sql))
table.not_null_action('company', action='add')
# Add index on create_date
@@ -2140,8 +2217,8 @@ class PickingList(CompanyReport):
from_location_ids.add(move.from_location.id)
to_location_ids.add(move.to_location.id)
- from_locations = Location.search(list(from_location_ids))
- to_locations = Location.search(list(to_location_ids))
+ from_locations = Location.browse(list(from_location_ids))
+ to_locations = Location.browse(list(to_location_ids))
return {
'from_location_ids': [l.id for l in from_locations],
@@ -2187,8 +2264,8 @@ class SupplierRestockingList(CompanyReport):
from_location_ids.add(move.from_location.id)
to_location_ids.add(move.to_location.id)
- from_locations = Location.search(list(from_location_ids))
- to_locations = Location.search(list(to_location_ids))
+ from_locations = Location.browse(list(from_location_ids))
+ to_locations = Location.browse(list(to_location_ids))
return {
'from_location_ids': [l.id for l in from_locations],
@@ -2234,8 +2311,8 @@ class CustomerReturnRestockingList(CompanyReport):
from_location_ids.add(move.from_location.id)
to_location_ids.add(move.to_location.id)
- from_locations = Location.search(list(from_location_ids))
- to_locations = Location.search(list(to_location_ids))
+ from_locations = Location.browse(list(from_location_ids))
+ to_locations = Location.browse(list(to_location_ids))
return {
'from_location_ids': [l.id for l in from_locations],
@@ -2281,8 +2358,8 @@ class InteralShipmentReport(CompanyReport):
from_location_ids.add(move.from_location.id)
to_location_ids.add(move.to_location.id)
- from_locations = Location.search(list(from_location_ids))
- to_locations = Location.search(list(to_location_ids))
+ from_locations = Location.browse(list(from_location_ids))
+ to_locations = Location.browse(list(to_location_ids))
return {
'from_location_ids': [l.id for l in from_locations],
diff --git a/supplier_restocking_list.odt b/supplier_restocking_list.odt
index 22d0b14..cfa779b 100644
Binary files a/supplier_restocking_list.odt and b/supplier_restocking_list.odt differ
diff --git a/tests/__init__.py b/tests/__init__.py
index dfff549..2349560 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -2,3 +2,5 @@
#this repository contains the full copyright notices and license terms.
from .test_stock import suite
+
+__all__ = ['suite']
diff --git a/tests/test_stock.py b/tests/test_stock.py
index 349e9e4..f83c075 100644
--- a/tests/test_stock.py
+++ b/tests/test_stock.py
@@ -84,11 +84,12 @@ class StockTestCase(unittest.TestCase):
})
tests = [
- (kg, 10, 10),
- (g, 100, 0.1),
- (g, 1, 0), # rounded
+ (kg, 10, 10, 0),
+ (g, 100, 0.1, 1),
+ (g, 1, 0, 0), # rounded
+ (kg, 35.23, 35.23, 2), # check infinite loop
]
- for uom, quantity, internal_quantity in tests:
+ for uom, quantity, internal_quantity, ndigits in tests:
move, = self.move.create([{
'product': product.id,
'uom': uom.id,
@@ -99,14 +100,16 @@ class StockTestCase(unittest.TestCase):
'unit_price': Decimal('1'),
'currency': currency.id,
}])
- self.assertEqual(move.internal_quantity, internal_quantity)
+ self.assertEqual(round(move.internal_quantity, ndigits),
+ internal_quantity)
- for uom, quantity, internal_quantity in tests:
+ for uom, quantity, internal_quantity, ndigits in tests:
self.move.write([move], {
'uom': uom.id,
'quantity': quantity,
})
- self.assertEqual(move.internal_quantity, internal_quantity)
+ self.assertEqual(round(move.internal_quantity, ndigits),
+ internal_quantity)
def test0020products_by_location(self):
'''
@@ -210,9 +213,6 @@ class StockTestCase(unittest.TestCase):
products_by_location = partial(self.product.products_by_location,
[storage.id], [product.id])
- products_by_location_zero = partial(
- self.product.products_by_location,
- [storage.id], [product.id], skip_zero=False)
tests = [
({'stock_date_end': today + relativedelta(days=-6),
@@ -269,16 +269,26 @@ class StockTestCase(unittest.TestCase):
}, 6),
]
+ def tests_product_quantity(context, quantity):
+ with transaction.set_context(locations=[storage.id]):
+ product_reloaded = self.product(product.id)
+ if (not context.get('stock_date_end')
+ or context['stock_date_end'] > today
+ or context.get('forecast')):
+ self.assertEqual(product_reloaded.forecast_quantity,
+ quantity)
+ else:
+ self.assertEqual(product_reloaded.quantity, quantity)
+
def test_products_by_location():
for context, quantity in tests:
with transaction.set_context(context):
if not quantity:
self.assertEqual(products_by_location(), {})
- self.assertEqual(products_by_location_zero(),
- {(storage.id, product.id): quantity})
else:
self.assertEqual(products_by_location(),
{(storage.id, product.id): quantity})
+ tests_product_quantity(context, quantity)
test_products_by_location()
@@ -288,7 +298,7 @@ class StockTestCase(unittest.TestCase):
today + relativedelta(days=-4),
today + relativedelta(days=-3),
today + relativedelta(days=-2),
- ]
+ ]
moves = self.move.create([{
'product': product.id,
@@ -377,7 +387,8 @@ class StockTestCase(unittest.TestCase):
'''
Test period.
'''
- with Transaction().start(DB_NAME, USER, context=CONTEXT):
+ with Transaction().start(DB_NAME, USER,
+ context=CONTEXT) as transaction:
category, = self.category.create([{
'name': 'Test period',
}])
@@ -441,6 +452,18 @@ class StockTestCase(unittest.TestCase):
'currency': currency.id,
}])
self.move.do(moves)
+ self.move.create([{
+ 'product': product.id,
+ 'uom': unit.id,
+ 'quantity': 3,
+ 'from_location': supplier.id,
+ 'to_location': storage.id,
+ 'planned_date': None,
+ 'effective_date': None,
+ 'company': company.id,
+ 'unit_price': Decimal('1'),
+ 'currency': currency.id,
+ }])
tests = [
(-5, {
@@ -454,6 +477,29 @@ class StockTestCase(unittest.TestCase):
})
]
+ products_by_location = partial(self.product.products_by_location,
+ [storage.id], [product.id])
+
+ tests_pbl = [
+ ({'stock_date_end': today + relativedelta(days=-6)}, 0),
+ ({'stock_date_end': today + relativedelta(days=-5)}, 10),
+ ({'stock_date_end': today + relativedelta(days=-4)}, 25),
+ ({'stock_date_end': today + relativedelta(days=-3)}, 20),
+ ({'stock_date_end': today + relativedelta(days=-2)}, 20),
+ ({'stock_date_end': today}, 20),
+ ({'stock_date_end': datetime.date.max}, 23),
+ ]
+
+ def test_products_by_location():
+ for context, quantity in tests_pbl:
+ with transaction.set_context(context):
+ if not quantity:
+ self.assertEqual(products_by_location(), {})
+ else:
+ self.assertEqual(products_by_location(),
+ {(storage.id, product.id): quantity})
+
+ test_products_by_location()
for days, quantities in tests:
period, = self.period.create([{
'date': today + relativedelta(days=days),
@@ -469,6 +515,8 @@ class StockTestCase(unittest.TestCase):
self.assertEqual(cache.internal_quantity,
quantities[cache.location.id])
+ test_products_by_location()
+
# Test check_period_closed
moves = self.move.create([{
'product': product.id,
diff --git a/tryton.cfg b/tryton.cfg
index 99bdad7..bbb5e93 100644
--- a/tryton.cfg
+++ b/tryton.cfg
@@ -1,5 +1,5 @@
[tryton]
-version=2.8.2
+version=3.0.0
depends:
company
currency
diff --git a/trytond_stock.egg-info/PKG-INFO b/trytond_stock.egg-info/PKG-INFO
index 600870d..e32e3bf 100644
--- a/trytond_stock.egg-info/PKG-INFO
+++ b/trytond_stock.egg-info/PKG-INFO
@@ -1,12 +1,12 @@
Metadata-Version: 1.1
Name: trytond-stock
-Version: 2.8.2
+Version: 3.0.0
Summary: Tryton module for stock and inventory
Home-page: http://www.tryton.org/
Author: Tryton
Author-email: UNKNOWN
License: GPL-3
-Download-URL: http://downloads.tryton.org/2.8/
+Download-URL: http://downloads.tryton.org/3.0/
Description: trytond_stock
=============
@@ -60,6 +60,7 @@ Classifier: Natural Language :: English
Classifier: Natural Language :: French
Classifier: Natural Language :: German
Classifier: Natural Language :: Russian
+Classifier: Natural Language :: Slovenian
Classifier: Natural Language :: Spanish
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 2.6
diff --git a/trytond_stock.egg-info/SOURCES.txt b/trytond_stock.egg-info/SOURCES.txt
index 2822d28..2acd70d 100644
--- a/trytond_stock.egg-info/SOURCES.txt
+++ b/trytond_stock.egg-info/SOURCES.txt
@@ -43,6 +43,7 @@ locale/es_ES.po
locale/fr_FR.po
locale/nl_NL.po
locale/ru_RU.po
+locale/sl_SI.po
tests/scenario_stock_average_cost_price.rst
tests/scenario_stock_shipment_out.rst
trytond_stock.egg-info/PKG-INFO
diff --git a/trytond_stock.egg-info/requires.txt b/trytond_stock.egg-info/requires.txt
index 18b97a6..f714b59 100644
--- a/trytond_stock.egg-info/requires.txt
+++ b/trytond_stock.egg-info/requires.txt
@@ -1,5 +1,6 @@
-trytond_company >= 2.8, < 2.9
-trytond_currency >= 2.8, < 2.9
-trytond_party >= 2.8, < 2.9
-trytond_product >= 2.8, < 2.9
-trytond >= 2.8, < 2.9
\ No newline at end of file
+python-sql
+trytond_company >= 3.0, < 3.1
+trytond_currency >= 3.0, < 3.1
+trytond_party >= 3.0, < 3.1
+trytond_product >= 3.0, < 3.1
+trytond >= 3.0, < 3.1
\ No newline at end of file
diff --git a/view/inventory_line_form.xml b/view/inventory_line_form.xml
index 1181051..161332f 100644
--- a/view/inventory_line_form.xml
+++ b/view/inventory_line_form.xml
@@ -6,6 +6,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="product"/>
<label name="uom"/>
<field name="uom"/>
+ <newline/>
<label name="expected_quantity"/>
<field name="expected_quantity"/>
<label name="quantity"/>
diff --git a/view/inventory_tree.xml b/view/inventory_tree.xml
index db5c588..1448000 100644
--- a/view/inventory_tree.xml
+++ b/view/inventory_tree.xml
@@ -6,5 +6,4 @@ this repository contains the full copyright notices and license terms. -->
<field name="date"/>
<field name="state"/>
<field name="company"/>
- <field name="create_date" tree_invisible="1"/>
</tree>
diff --git a/view/move_form.xml b/view/move_form.xml
index d401b58..fe311d8 100644
--- a/view/move_form.xml
+++ b/view/move_form.xml
@@ -2,6 +2,8 @@
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<form string="Move" col="4">
+ <label name="shipment"/>
+ <field name="shipment" colspan="3"/>
<label name="from_location"/>
<field name="from_location"/>
<label name="to_location"/>
diff --git a/view/move_tree.xml b/view/move_tree.xml
index 4d3623a..7211c03 100644
--- a/view/move_tree.xml
+++ b/view/move_tree.xml
@@ -8,7 +8,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="quantity"/>
<field name="uom"/>
<field name="planned_date"/>
+ <field name="effective_date"/>
<field name="state"/>
<field name="unit_digits" tree_invisible="1"/>
- <field name="create_date" tree_invisible="1"/>
</tree>
diff --git a/view/shipment_in_return_tree.xml b/view/shipment_in_return_tree.xml
index 3e6266f..3ee2aed 100644
--- a/view/shipment_in_return_tree.xml
+++ b/view/shipment_in_return_tree.xml
@@ -9,5 +9,4 @@ this repository contains the full copyright notices and license terms. -->
<field name="from_location"/>
<field name="to_location"/>
<field name="state"/>
- <field name="create_date" tree_invisible="1"/>
</tree>
diff --git a/view/shipment_in_tree.xml b/view/shipment_in_tree.xml
index 7038fc1..41d0f56 100644
--- a/view/shipment_in_tree.xml
+++ b/view/shipment_in_tree.xml
@@ -9,5 +9,4 @@ this repository contains the full copyright notices and license terms. -->
<field name="supplier"/>
<field name="contact_address"/>
<field name="state"/>
- <field name="create_date" tree_invisible="1"/>
</tree>
diff --git a/view/shipment_internal_tree.xml b/view/shipment_internal_tree.xml
index 4b4e126..ecf5b5c 100644
--- a/view/shipment_internal_tree.xml
+++ b/view/shipment_internal_tree.xml
@@ -9,5 +9,4 @@ this repository contains the full copyright notices and license terms. -->
<field name="from_location"/>
<field name="to_location"/>
<field name="state"/>
- <field name="create_date" tree_invisible="1"/>
</tree>
diff --git a/view/shipment_out_return_tree.xml b/view/shipment_out_return_tree.xml
index 38950a9..6152586 100644
--- a/view/shipment_out_return_tree.xml
+++ b/view/shipment_out_return_tree.xml
@@ -9,5 +9,4 @@ this repository contains the full copyright notices and license terms. -->
<field name="effective_date"/>
<field name="customer"/>
<field name="delivery_address"/>
- <field name="create_date" tree_invisible="1"/>
</tree>
diff --git a/view/shipment_out_tree.xml b/view/shipment_out_tree.xml
index c0e54f5..5783ae4 100644
--- a/view/shipment_out_tree.xml
+++ b/view/shipment_out_tree.xml
@@ -9,5 +9,4 @@ this repository contains the full copyright notices and license terms. -->
<field name="customer"/>
<field name="delivery_address"/>
<field name="state"/>
- <field name="create_date" tree_invisible="1"/>
</tree>
--
tryton-modules-stock
More information about the tryton-debian-vcs
mailing list